Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 163531
b: refs/heads/master
c: 6d243dd
h: refs/heads/master
i:
  163529: ad289a6
  163527: c749f9e
v: v3
  • Loading branch information
Stuart Menefy authored and Paul Mundt committed Aug 24, 2009
1 parent 222fd94 commit ccc88b5
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a5cf9e2444ec15de5407696ff21c32dd21ca0a8d
refs/heads/master: 6d243dd37002bcee54841852ab1b8606fd457851
2 changes: 1 addition & 1 deletion trunk/arch/sh/include/asm/Kbuild
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
include include/asm-generic/Kbuild.asm

header-y += cpu-features.h
header-y += cachectl.h cpu-features.h

unifdef-y += unistd_32.h
unifdef-y += unistd_64.h
Expand Down
12 changes: 12 additions & 0 deletions trunk/arch/sh/include/asm/cachectl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef _SH_CACHECTL_H
#define _SH_CACHECTL_H

/* Definitions for the cacheflush system call. */

#define CACHEFLUSH_D_INVAL 0x1 /* invalidate (without write back) */
#define CACHEFLUSH_D_WB 0x2 /* write back (without invalidate) */
#define CACHEFLUSH_D_PURGE 0x3 /* writeback and invalidate */

#define CACHEFLUSH_I 0x4

#endif /* _SH_CACHECTL_H */
2 changes: 1 addition & 1 deletion trunk/arch/sh/include/asm/unistd_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@
#define __NR_clone 120
#define __NR_setdomainname 121
#define __NR_uname 122
#define __NR_modify_ldt 123
#define __NR_cacheflush 123
#define __NR_adjtimex 124
#define __NR_mprotect 125
#define __NR_sigprocmask 126
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/sh/include/asm/unistd_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
#define __NR_clone 120
#define __NR_setdomainname 121
#define __NR_uname 122
#define __NR_modify_ldt 123
#define __NR_cacheflush 123
#define __NR_adjtimex 124
#define __NR_mprotect 125
#define __NR_sigprocmask 126
Expand Down
43 changes: 43 additions & 0 deletions trunk/arch/sh/kernel/sys_sh.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#include <asm/syscalls.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
#include <asm/cacheflush.h>
#include <asm/cachectl.h>

static inline long
do_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
Expand Down Expand Up @@ -179,6 +181,47 @@ asmlinkage int sys_ipc(uint call, int first, int second,
return -EINVAL;
}

/* sys_cacheflush -- flush (part of) the processor cache. */
asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op)
{
struct vm_area_struct *vma;

if ((op < 0) || (op > (CACHEFLUSH_D_PURGE|CACHEFLUSH_I)))
return -EINVAL;

/*
* Verify that the specified address region actually belongs
* to this process.
*/
if (addr + len < addr)
return -EFAULT;

down_read(&current->mm->mmap_sem);
vma = find_vma (current->mm, addr);
if (vma == NULL || addr < vma->vm_start || addr + len > vma->vm_end) {
up_read(&current->mm->mmap_sem);
return -EFAULT;
}

switch (op & CACHEFLUSH_D_PURGE) {
case CACHEFLUSH_D_INVAL:
__flush_invalidate_region((void *)addr, len);
break;
case CACHEFLUSH_D_WB:
__flush_wback_region((void *)addr, len);
break;
case CACHEFLUSH_D_PURGE:
__flush_purge_region((void *)addr, len);
break;
}

if (op & CACHEFLUSH_I)
flush_cache_all();

up_read(&current->mm->mmap_sem);
return 0;
}

asmlinkage int sys_uname(struct old_utsname __user *name)
{
int err;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/sh/kernel/syscalls_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ ENTRY(sys_call_table)
.long sys_clone /* 120 */
.long sys_setdomainname
.long sys_newuname
.long sys_ni_syscall /* sys_modify_ldt */
.long sys_cacheflush /* x86: sys_modify_ldt */
.long sys_adjtimex
.long sys_mprotect /* 125 */
.long sys_sigprocmask
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/sh/kernel/syscalls_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ sys_call_table:
.long sys_clone /* 120 */
.long sys_setdomainname
.long sys_newuname
.long sys_ni_syscall /* sys_modify_ldt */
.long sys_cacheflush /* x86: sys_modify_ldt */
.long sys_adjtimex
.long sys_mprotect /* 125 */
.long sys_sigprocmask
Expand Down

0 comments on commit ccc88b5

Please sign in to comment.