sys_nios2.c (1342B)
1/* 2 * Copyright (C) 2013 Altera Corporation 3 * Copyright (C) 2011-2012 Tobias Klauser <tklauser@distanz.ch> 4 * Copyright (C) 2004 Microtronix Datacom Ltd. 5 * 6 * This file is subject to the terms and conditions of the GNU General Public 7 * License. See the file "COPYING" in the main directory of this archive 8 * for more details. 9 */ 10 11#include <linux/export.h> 12#include <linux/file.h> 13#include <linux/fs.h> 14#include <linux/slab.h> 15#include <linux/syscalls.h> 16 17#include <asm/cacheflush.h> 18#include <asm/traps.h> 19 20/* sys_cacheflush -- flush the processor cache. */ 21asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, 22 unsigned int op) 23{ 24 struct vm_area_struct *vma; 25 struct mm_struct *mm = current->mm; 26 27 if (len == 0) 28 return 0; 29 30 /* We only support op 0 now, return error if op is non-zero.*/ 31 if (op) 32 return -EINVAL; 33 34 /* Check for overflow */ 35 if (addr + len < addr) 36 return -EFAULT; 37 38 if (mmap_read_lock_killable(mm)) 39 return -EINTR; 40 41 /* 42 * Verify that the specified address region actually belongs 43 * to this process. 44 */ 45 vma = find_vma(mm, addr); 46 if (vma == NULL || addr < vma->vm_start || addr + len > vma->vm_end) { 47 mmap_read_unlock(mm); 48 return -EFAULT; 49 } 50 51 flush_cache_range(vma, addr, addr + len); 52 53 mmap_read_unlock(mm); 54 return 0; 55} 56 57asmlinkage int sys_getpagesize(void) 58{ 59 return PAGE_SIZE; 60}