📄 kmem.h
字号:
/* * Copyright (c) 2000-2005 Silicon Graphics, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */#ifndef __XFS_SUPPORT_KMEM_H__#define __XFS_SUPPORT_KMEM_H__#include <linux/slab.h>#include <linux/sched.h>#include <linux/mm.h>/* * General memory allocation interfaces */#define KM_SLEEP 0x0001u#define KM_NOSLEEP 0x0002u#define KM_NOFS 0x0004u#define KM_MAYFAIL 0x0008u#define KM_LARGE 0x0010u/* * We use a special process flag to avoid recursive callbacks into * the filesystem during transactions. We will also issue our own * warnings, so we explicitly skip any generic ones (silly of us). */static inline gfp_tkmem_flags_convert(unsigned int __nocast flags){ gfp_t lflags; BUG_ON(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL|KM_LARGE)); if (flags & KM_NOSLEEP) { lflags = GFP_ATOMIC | __GFP_NOWARN; } else { lflags = GFP_KERNEL | __GFP_NOWARN; if ((current->flags & PF_FSTRANS) || (flags & KM_NOFS)) lflags &= ~__GFP_FS; } return lflags;}extern void *kmem_alloc(size_t, unsigned int __nocast);extern void *kmem_zalloc(size_t, unsigned int __nocast);extern void *kmem_zalloc_greedy(size_t *, size_t, size_t, unsigned int __nocast);extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast);extern void kmem_free(void *, size_t);/* * Zone interfaces */#define KM_ZONE_HWALIGN SLAB_HWCACHE_ALIGN#define KM_ZONE_RECLAIM SLAB_RECLAIM_ACCOUNT#define KM_ZONE_SPREAD SLAB_MEM_SPREAD#define kmem_zone kmem_cache#define kmem_zone_t struct kmem_cachestatic inline kmem_zone_t *kmem_zone_init(int size, char *zone_name){ return kmem_cache_create(zone_name, size, 0, 0, NULL);}static inline kmem_zone_t *kmem_zone_init_flags(int size, char *zone_name, unsigned long flags, void (*construct)(kmem_zone_t *, void *)){ return kmem_cache_create(zone_name, size, 0, flags, construct);}static inline voidkmem_zone_free(kmem_zone_t *zone, void *ptr){ kmem_cache_free(zone, ptr);}static inline voidkmem_zone_destroy(kmem_zone_t *zone){ if (zone) kmem_cache_destroy(zone);}extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast);extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast);static inline intkmem_shake_allow(gfp_t gfp_mask){ return (gfp_mask & __GFP_WAIT) != 0;}#endif /* __XFS_SUPPORT_KMEM_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -