slab_def.h
来自「linux 内核源代码」· C头文件 代码 · 共 99 行
H
99 行
#ifndef _LINUX_SLAB_DEF_H#define _LINUX_SLAB_DEF_H/* * Definitions unique to the original Linux SLAB allocator. * * What we provide here is a way to optimize the frequent kmalloc * calls in the kernel by selecting the appropriate general cache * if kmalloc was called with a size that can be established at * compile time. */#include <linux/init.h>#include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */#include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */#include <linux/compiler.h>/* Size description struct for general caches. */struct cache_sizes { size_t cs_size; struct kmem_cache *cs_cachep;#ifdef CONFIG_ZONE_DMA struct kmem_cache *cs_dmacachep;#endif};extern struct cache_sizes malloc_sizes[];void *kmem_cache_alloc(struct kmem_cache *, gfp_t);void *__kmalloc(size_t size, gfp_t flags);static inline void *kmalloc(size_t size, gfp_t flags){ if (__builtin_constant_p(size)) { int i = 0; if (!size) return ZERO_SIZE_PTR;#define CACHE(x) \ if (size <= x) \ goto found; \ else \ i++;#include "kmalloc_sizes.h"#undef CACHE { extern void __you_cannot_kmalloc_that_much(void); __you_cannot_kmalloc_that_much(); }found:#ifdef CONFIG_ZONE_DMA if (flags & GFP_DMA) return kmem_cache_alloc(malloc_sizes[i].cs_dmacachep, flags);#endif return kmem_cache_alloc(malloc_sizes[i].cs_cachep, flags); } return __kmalloc(size, flags);}#ifdef CONFIG_NUMAextern void *__kmalloc_node(size_t size, gfp_t flags, int node);extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);static inline void *kmalloc_node(size_t size, gfp_t flags, int node){ if (__builtin_constant_p(size)) { int i = 0; if (!size) return ZERO_SIZE_PTR;#define CACHE(x) \ if (size <= x) \ goto found; \ else \ i++;#include "kmalloc_sizes.h"#undef CACHE { extern void __you_cannot_kmalloc_that_much(void); __you_cannot_kmalloc_that_much(); }found:#ifdef CONFIG_ZONE_DMA if (flags & GFP_DMA) return kmem_cache_alloc_node(malloc_sizes[i].cs_dmacachep, flags, node);#endif return kmem_cache_alloc_node(malloc_sizes[i].cs_cachep, flags, node); } return __kmalloc_node(size, flags, node);}#endif /* CONFIG_NUMA */#endif /* _LINUX_SLAB_DEF_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?