Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/nios2/kernel/sys_nios2.c
26424 views
1
/*
2
* Copyright (C) 2013 Altera Corporation
3
* Copyright (C) 2011-2012 Tobias Klauser <[email protected]>
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. */
21
asmlinkage 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
57
asmlinkage int sys_getpagesize(void)
58
{
59
return PAGE_SIZE;
60
}
61
62