⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmem.h

📁 linux-2.6.15.6
💻 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>/* * memory management routines */#define KM_SLEEP	0x0001u#define KM_NOSLEEP	0x0002u#define KM_NOFS		0x0004u#define KM_MAYFAIL	0x0008u#define	kmem_zone	kmem_cache#define kmem_zone_t	struct kmem_cachetypedef unsigned long xfs_pflags_t;#define PFLAGS_TEST_NOIO()              (current->flags & PF_NOIO)#define PFLAGS_TEST_FSTRANS()           (current->flags & PF_FSTRANS)#define PFLAGS_SET_NOIO() do {		\	current->flags |= PF_NOIO;	\} while (0)#define PFLAGS_CLEAR_NOIO() do {	\	current->flags &= ~PF_NOIO;	\} while (0)/* these could be nested, so we save state */#define PFLAGS_SET_FSTRANS(STATEP) do {	\	*(STATEP) = current->flags;	\	current->flags |= PF_FSTRANS;	\} while (0)#define PFLAGS_CLEAR_FSTRANS(STATEP) do { \	*(STATEP) = current->flags;	\	current->flags &= ~PF_FSTRANS;	\} while (0)/* Restore the PF_FSTRANS state to what was saved in STATEP */#define PFLAGS_RESTORE_FSTRANS(STATEP) do {     		\	current->flags = ((current->flags & ~PF_FSTRANS) |	\			  (*(STATEP) & PF_FSTRANS));		\} while (0)#define PFLAGS_DUP(OSTATEP, NSTATEP) do { \	*(NSTATEP) = *(OSTATEP);	\} while (0)static __inline gfp_t kmem_flags_convert(unsigned int __nocast flags){	gfp_t	lflags = __GFP_NOWARN;	/* we'll report problems, if need be */#ifdef DEBUG	if (unlikely(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL))) {		printk(KERN_WARNING		    "XFS: memory allocation with wrong flags (%x)\n", flags);		BUG();	}#endif	if (flags & KM_NOSLEEP) {		lflags |= GFP_ATOMIC;	} else {		lflags |= GFP_KERNEL;		/* avoid recusive callbacks to filesystem during transactions */		if (PFLAGS_TEST_FSTRANS() || (flags & KM_NOFS))			lflags &= ~__GFP_FS;	}        return lflags;}static __inline kmem_zone_t *kmem_zone_init(int size, char *zone_name){	return kmem_cache_create(zone_name, size, 0, 0, NULL, NULL);}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))		BUG();}extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast);extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast);extern void *kmem_alloc(size_t, unsigned int __nocast);extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast);extern void *kmem_zalloc(size_t, unsigned int __nocast);extern void  kmem_free(void *, size_t);typedef struct shrinker *kmem_shaker_t;typedef int (*kmem_shake_func_t)(int, gfp_t);static __inline kmem_shaker_tkmem_shake_register(kmem_shake_func_t sfunc){	return set_shrinker(DEFAULT_SEEKS, sfunc);}static __inline voidkmem_shake_deregister(kmem_shaker_t shrinker){	remove_shrinker(shrinker);}static __inline intkmem_shake_allow(gfp_t gfp_mask){	return (gfp_mask & __GFP_WAIT);}#endif /* __XFS_SUPPORT_KMEM_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -