1 /* 2 * GPL HEADER START 3 * 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 only, 8 * as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License version 2 for more details (a copy is included 14 * in the LICENSE file that accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License 17 * version 2 along with this program; If not, see 18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf 19 * 20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 21 * CA 95054 USA or visit www.sun.com if you need additional information or 22 * have any questions. 23 * 24 * GPL HEADER END 25 */ 26 /* 27 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 28 * Use is subject to license terms. 29 * 30 * Copyright (c) 2011, 2012, Intel Corporation. 31 */ 32 /* 33 * This file is part of Lustre, http://www.lustre.org/ 34 * Lustre is a trademark of Sun Microsystems, Inc. 35 * 36 * libcfs/include/libcfs/linux/linux-mem.h 37 * 38 * Basic library routines. 39 */ 40 41 #ifndef __LIBCFS_LINUX_CFS_MEM_H__ 42 #define __LIBCFS_LINUX_CFS_MEM_H__ 43 44 #ifndef __LIBCFS_LIBCFS_H__ 45 #error Do not #include this file directly. #include <linux/libcfs/libcfs.h> instead 46 #endif 47 48 #include <linux/mm.h> 49 #include <linux/vmalloc.h> 50 #include <linux/pagemap.h> 51 #include <linux/slab.h> 52 #include <linux/memcontrol.h> 53 #include <linux/mm_inline.h> 54 55 #ifndef HAVE_LIBCFS_CPT 56 /* Need this for cfs_cpt_table */ 57 #include "../libcfs_cpu.h" 58 #endif 59 60 #define CFS_PAGE_MASK (~((__u64)PAGE_CACHE_SIZE-1)) 61 #define page_index(p) ((p)->index) 62 63 #define memory_pressure_get() (current->flags & PF_MEMALLOC) 64 #define memory_pressure_set() do { current->flags |= PF_MEMALLOC; } while (0) 65 #define memory_pressure_clr() do { current->flags &= ~PF_MEMALLOC; } while (0) 66 67 #if BITS_PER_LONG == 32 68 /* limit to lowmem on 32-bit systems */ 69 #define NUM_CACHEPAGES \ 70 min(totalram_pages, 1UL << (30 - PAGE_CACHE_SHIFT) * 3 / 4) 71 #else 72 #define NUM_CACHEPAGES totalram_pages 73 #endif 74 75 #define DECL_MMSPACE mm_segment_t __oldfs 76 #define MMSPACE_OPEN \ 77 do { __oldfs = get_fs(); set_fs(get_ds()); } while (0) 78 #define MMSPACE_CLOSE set_fs(__oldfs) 79 80 #endif /* __LINUX_CFS_MEM_H__ */ 81