kmalloc 代码

kmalloc 代码Kmalloc kmalloc do kmalloc cache alloc cache alloc cache alloc refill cache grow kmem getpages alloc pages exact node alloc pages nbsp include linux Slab def h

Kmalloc()->__kmalloc()->__do_kmalloc()->__cache_alloc()->____cache_alloc()->cache_alloc_refill()->cache_grow()->kmem_getpages()->alloc_pages_exact_node()->__alloc_pages()

 

include\linux\Slab_def.h

static __always_inline void *kmalloc(size_t size, gfp_t flags)
{

 struct kmem_cache *cachep;
 void *ret;


  ret = kmem_cache_alloc_trace(size, cachep, flags);

 

mm\Slab.c

void *__kmalloc(size_t size, gfp_t flags)
{

 return __do_kmalloc(size, flags, NULL);
}


 

 

static __always_inline void *__do_kmalloc(size_t size, gfp_t flags,
       void *caller)
{

 struct kmem_cache *cachep;
 void *ret;



 

 flags &= gfp_allowed_mask;

 lockdep_trace_alloc(flags);

 

static inline void *____cache_alloc(struct kmem_cache *cachep, gfp_t flags)
{

 void *objp;
 struct array_cache *ac;


 check_irq_off();

 

static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags)
{

 int batchcount;
 struct kmem_list3 *l3;
 struct array_cache *ac;
 int node;




 

static int cache_grow(struct kmem_cache *cachep,
  gfp_t flags, int nodeid, void *objp)
{

 struct slab *slabp;
 size_t offset;
 gfp_t local_flags;
 struct kmem_list3 *l3;





 offset *= cachep->colour_off;

 slab_map_pages(cachep, slabp, objp);

 cache_init_objs(cachep, slabp);

 

static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid)
{

 struct page *page;
 int nr_pages;
 int i;



 page = alloc_pages_exact_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporder);
 if (!page)
  return NULL;

 

 

static inline struct page *alloc_pages_exact_node(int nid, gfp_t gfp_mask,
      unsigned int order)
{

 VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);


 return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217327.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:49
下一篇 2026年3月18日 上午9:50


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号