caches_init 初始化创建osal-(1<i(3~20))大小的slab for(i = 3; i <= ONE_M_SHIFT; i++) { size = 1 << i; if(size >= KMALLOC_SIZE_THR) { size -= sizeof(int); } n = kasprintf(GFP_NOWAIT, "osal-%d", size); BUG_ON(!n); size += sizeof(int); /* tag is int */ static_caches[i] = kmem_cache_create(n, size, 0, 0, NULL); if(static_caches[i]) { static_caches[i]->flags |= SLAB_TAGTRACE; } else { printk("cache[osal-%d] alloc failed\n",(int)(size-sizeof(int))); } kfree(n); }
使用路径是:kmalloc_tag->get_kmalloc_slab
->kmem_cache_alloc