4.4内核osal

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

 
有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
原文地址:https://www.cnblogs.com/axjlxy/p/15772689.html