1 /* 2 * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. 3 * Copyright (C) 2007 The Regents of the University of California. 4 * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). 5 * Written by Brian Behlendorf <behlendorf1@llnl.gov>. 6 * UCRL-CODE-235197 7 * 8 * This file is part of the SPL, Solaris Porting Layer. 9 * 10 * The SPL is free software; you can redistribute it and/or modify it 11 * under the terms of the GNU General Public License as published by the 12 * Free Software Foundation; either version 2 of the License, or (at your 13 * option) any later version. 14 * 15 * The SPL is distributed in the hope that it will be useful, but WITHOUT 16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 18 * for more details. 19 * 20 * You should have received a copy of the GNU General Public License along 21 * with the SPL. If not, see <http://www.gnu.org/licenses/>. 22 */ 23 24 #ifndef _SPL_VMSYSTM_H 25 #define _SPL_VMSYSTM_H 26 27 #include <linux/mmzone.h> 28 #include <linux/mm.h> 29 #include <linux/swap.h> 30 #include <linux/highmem.h> 31 #include <linux/vmalloc.h> 32 #include <sys/types.h> 33 #include <asm/uaccess.h> 34 35 #ifdef HAVE_TOTALRAM_PAGES_FUNC 36 #define zfs_totalram_pages totalram_pages() 37 #else 38 #define zfs_totalram_pages totalram_pages 39 #endif 40 41 #ifdef HAVE_TOTALHIGH_PAGES 42 #define zfs_totalhigh_pages totalhigh_pages() 43 #else 44 #define zfs_totalhigh_pages totalhigh_pages 45 #endif 46 47 #define membar_producer() smp_wmb() 48 #define physmem zfs_totalram_pages 49 50 #define xcopyin(from, to, size) copy_from_user(to, from, size) 51 #define xcopyout(from, to, size) copy_to_user(to, from, size) 52 53 static __inline__ int 54 copyin(const void *from, void *to, size_t len) 55 { 56 /* On error copyin routine returns -1 */ 57 if (xcopyin(from, to, len)) 58 return (-1); 59 60 return (0); 61 } 62 63 static __inline__ int 64 copyout(const void *from, void *to, size_t len) 65 { 66 /* On error copyout routine returns -1 */ 67 if (xcopyout(from, to, len)) 68 return (-1); 69 70 return (0); 71 } 72 73 static __inline__ int 74 copyinstr(const void *from, void *to, size_t len, size_t *done) 75 { 76 size_t rc; 77 78 if (len == 0) 79 return (-ENAMETOOLONG); 80 81 /* XXX: Should return ENAMETOOLONG if 'strlen(from) > len' */ 82 83 memset(to, 0, len); 84 rc = copyin(from, to, len - 1); 85 if (done != NULL) 86 *done = rc; 87 88 return (0); 89 } 90 91 #endif /* SPL_VMSYSTM_H */ 92