分类: LINUX
2012-06-12 09:38:03
cache的销毁很简单,依次检查和释放本地CPU cache、共享cache、三链以及cache本身。从cache的创建我们看到,创建的cache主要是从cache_cache中获得的,因为cache_cache中对象的大小就是cache结构体的大小,所以这里只是释放到cache_cache就OK了。
[cpp] view plaincopyprint?
1. static void __kmem_cache_destroy(struct kmem_cache *cachep)
2. {
3. int i;
4. struct kmem_list3 *l3;
5. /* 释放每个cpu local cache使用的struct array_cache对象
6. ,注意此时是online cpu, cpu如果是down状
7. 态,并没有释放 */
8. for_each_online_cpu(i)
9. kfree(cachep->array[i]);
10.
11. /* NUMA: free the list3 structures */
12. for_each_online_node(i) {/*对每个在线的节点*/
13. l3 = cachep->nodelists[i];
14. if (l3) {
15. /* 释放shared local cache使用的struct array_cache对象 */
16. kfree(l3->shared);
17. free_alien_cache(l3->alien);
18. kfree(l3);/*释放三链*/
19. }
20. }
21. /*释放cache,因为该cache为cache_cache中的对象,所以调用对象释放
22. 函数*/
23. kmem_cache_free(&cache_cache, cachep);
24. }