Browse Source

sh: fix sys_cacheflush error checking

sys_cacheflush should return with EINVAL if the cache parameter is not
one of ICACHE, DCACHE or BCACHE.
So, we need to include 0 in the first check.

It also adds the three definitions above as wrapper of the existent macros.

PS: ltp cacheflush01 test now passes.

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Giuseppe Cavallaro 15 years ago
parent
commit
788e6af37a
2 changed files with 8 additions and 1 deletions
  1. 7 0
      arch/sh/include/asm/cachectl.h
  2. 1 1
      arch/sh/kernel/sys_sh.c

+ 7 - 0
arch/sh/include/asm/cachectl.h

@@ -9,4 +9,11 @@
 
 
 #define CACHEFLUSH_I		0x4
 #define CACHEFLUSH_I		0x4
 
 
+/*
+ * Options for cacheflush system call
+ */
+#define ICACHE	CACHEFLUSH_I		/* flush instruction cache */
+#define DCACHE	CACHEFLUSH_D_PURGE	/* writeback and flush data cache */
+#define BCACHE	(ICACHE|DCACHE)		/* flush both caches */
+
 #endif /* _SH_CACHECTL_H */
 #endif /* _SH_CACHECTL_H */

+ 1 - 1
arch/sh/kernel/sys_sh.c

@@ -186,7 +186,7 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op)
 {
 {
 	struct vm_area_struct *vma;
 	struct vm_area_struct *vma;
 
 
-	if ((op < 0) || (op > (CACHEFLUSH_D_PURGE|CACHEFLUSH_I)))
+	if ((op <= 0) || (op > (CACHEFLUSH_D_PURGE|CACHEFLUSH_I)))
 		return -EINVAL;
 		return -EINVAL;
 
 
 	/*
 	/*