On Wed, Jun 06, 2007 at 10:01:29AM +0200, Franck Bui-Huu wrote: > >diff --git a/drivers/char/mem.c b/drivers/char/mem.c > >index cc9a9d0..a19b46a 100644 > >--- a/drivers/char/mem.c > >+++ b/drivers/char/mem.c > >@@ -82,8 +82,12 @@ static inline int uncached_access(struct file *file, > >unsigned long addr) > > */ > > if (file->f_flags & O_SYNC) > > return 1; > >+#if defined(CONFIG_LEMOTE_FULONG) && defined(CONFIG_64BIT) > >+ return (addr >= __pa(high_memory)) || ((addr >=0x10000000) && > >(addr < 0x20000000)); > >+#else > > return addr >= __pa(high_memory); > > #endif > >+#endif > > } > > That would be nice to have a nice log to justify such a hack.... Unfortunately mem.c is soaked with #ifdef stuff. So I hope I can justify one more for another architecture but that'll be it. So I've put below patch into the queue tree. It will allow the Fulong code to override the function as needed. I also got this in the queue tree. Ralf Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx> arch/mips/mm/cache.c | 10 ++++++++++ drivers/char/mem.c | 7 +++++++ 2 files changed, 17 insertions(+) Index: linux-queue/arch/mips/mm/cache.c =================================================================== --- linux-queue.orig/arch/mips/mm/cache.c +++ linux-queue/arch/mips/mm/cache.c @@ -6,6 +6,8 @@ * Copyright (C) 1994 - 2003, 07 by Ralf Baechle (ralf@xxxxxxxxxxxxxx) * Copyright (C) 2007 MIPS Technologies, Inc. */ +#include <linux/fs.h> +#include <linux/fcntl.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> @@ -164,3 +166,11 @@ void __init cpu_cache_init(void) panic(cache_panic); } + +int __weak __uncached_access(struct file *file, unsigned long addr) +{ + if (file->f_flags & O_SYNC) + return 1; + + return addr >= __pa(high_memory); +} Index: linux-queue/drivers/char/mem.c =================================================================== --- linux-queue.orig/drivers/char/mem.c +++ linux-queue/drivers/char/mem.c @@ -75,6 +75,13 @@ static inline int uncached_access(struct * On ia64, we ignore O_SYNC because we cannot tolerate memory attribute aliases. */ return !(efi_mem_attributes(addr) & EFI_MEMORY_WB); +#elif defined(CONFIG_MIPS) + { + extern int __uncached_access(struct file *file, + unsigned long addr); + + return __uncached_access(file, addr); + } #else /* * Accessing memory above the top the kernel knows about or through a file pointer