void dcache_free (DCACHE *dcache) { splay_tree_delete (dcache->tree); for_each_block (&dcache->oldest, free_block, NULL); for_each_block (&dcache->freelist, free_block, NULL); xfree (dcache); }
void dcache_invalidate (DCACHE *dcache) { for_each_block (&dcache->oldest, invalidate_block, dcache); dcache->oldest = NULL; dcache->size = 0; dcache->ptid = null_ptid; if (dcache->line_size != dcache_line_size) { /* We've been asked to use a different line size. All of our freelist blocks are now the wrong size, so free them. */ for_each_block (&dcache->freelist, free_block, dcache); dcache->freelist = NULL; dcache->line_size = dcache_line_size; } }