📄 slab_def.h
字号:
#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; struct kmem_cache *cs_dmacachep;};extern struct cache_sizes malloc_sizes[];static inline void *kmalloc(size_t size, gfp_t flags){ if (__builtin_constant_p(size)) { int i = 0;#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: return kmem_cache_alloc((flags & GFP_DMA) ? malloc_sizes[i].cs_dmacachep : malloc_sizes[i].cs_cachep, flags); } return __kmalloc(size, flags);}static inline void *kzalloc(size_t size, gfp_t flags){ if (__builtin_constant_p(size)) { int i = 0;#define CACHE(x) \ if (size <= x) \ goto found; \ else \ i++;#include "kmalloc_sizes.h"#undef CACHE { extern void __you_cannot_kzalloc_that_much(void); __you_cannot_kzalloc_that_much(); }found: return kmem_cache_zalloc((flags & GFP_DMA) ? malloc_sizes[i].cs_dmacachep : malloc_sizes[i].cs_cachep, flags); } return __kzalloc(size, flags);}#ifdef CONFIG_NUMAextern void *__kmalloc_node(size_t size, 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;#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: return kmem_cache_alloc_node((flags & GFP_DMA) ? malloc_sizes[i].cs_dmacachep : 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -