mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.3 KiB
60 lines
1.3 KiB
/* |
|
* Copyright (C) 2013 Altera Corporation |
|
* Copyright (C) 2011-2012 Tobias Klauser <[email protected]> |
|
* Copyright (C) 2004 Microtronix Datacom Ltd. |
|
* |
|
* This file is subject to the terms and conditions of the GNU General Public |
|
* License. See the file "COPYING" in the main directory of this archive |
|
* for more details. |
|
*/ |
|
|
|
#include <linux/export.h> |
|
#include <linux/file.h> |
|
#include <linux/fs.h> |
|
#include <linux/slab.h> |
|
#include <linux/syscalls.h> |
|
|
|
#include <asm/cacheflush.h> |
|
#include <asm/traps.h> |
|
|
|
/* sys_cacheflush -- flush the processor cache. */ |
|
asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, |
|
unsigned int op) |
|
{ |
|
struct vm_area_struct *vma; |
|
struct mm_struct *mm = current->mm; |
|
|
|
if (len == 0) |
|
return 0; |
|
|
|
/* We only support op 0 now, return error if op is non-zero.*/ |
|
if (op) |
|
return -EINVAL; |
|
|
|
/* Check for overflow */ |
|
if (addr + len < addr) |
|
return -EFAULT; |
|
|
|
if (mmap_read_lock_killable(mm)) |
|
return -EINTR; |
|
|
|
/* |
|
* Verify that the specified address region actually belongs |
|
* to this process. |
|
*/ |
|
vma = find_vma(mm, addr); |
|
if (vma == NULL || addr < vma->vm_start || addr + len > vma->vm_end) { |
|
mmap_read_unlock(mm); |
|
return -EFAULT; |
|
} |
|
|
|
flush_cache_range(vma, addr, addr + len); |
|
|
|
mmap_read_unlock(mm); |
|
return 0; |
|
} |
|
|
|
asmlinkage int sys_getpagesize(void) |
|
{ |
|
return PAGE_SIZE; |
|
}
|
|
|