Log message:
sys_init_module now sets context for flush_icache_range,
so we can merge flush_icache_range/flush_icache_user_range
and rename flush_icache_user_page back.
Modified files:
linux/arch/m68k/kernel:
m68k_ksyms.c
linux/arch/m68k/mm:
cache.c
linux/fs:
binfmt_aout.c binfmt_elf.c
linux/include/asm-m68k:
cacheflush.h
Index: linux/arch/m68k/kernel/m68k_ksyms.c
Stats: 1 deletion
http://linux-m68k-cvs.ubb.ca/c/cvsweb/linux/arch/m68k/kernel/m68k_ksyms%2ec.diff?r1=1.11&r2=1.12
========================================================================
--- m68k_ksyms.c 19 Oct 2004 23:06:39 -0000 1.11
+++ m68k_ksyms.c 30 Aug 2005 10:39:38 -0000 1.12
@@ -46,7 +46,6 @@
EXPORT_SYMBOL(iounmap);
EXPORT_SYMBOL(kernel_set_cachemode);
#endif /* !CONFIG_SUN3 */
-EXPORT_SYMBOL(flush_icache_user_range);
EXPORT_SYMBOL(m68k_debug_device);
EXPORT_SYMBOL(mach_hwclk);
EXPORT_SYMBOL(mach_get_ss);
Index: linux/arch/m68k/mm/cache.c
Stats: 2 insertions, 44 deletions, 10 modifications
http://linux-m68k-cvs.ubb.ca/c/cvsweb/linux/arch/m68k/mm/cache%2ec.diff?r1=1.3&r2=1.4
========================================================================
--- cache.c 5 Apr 2004 13:09:06 -0000 1.3
+++ cache.c 30 Aug 2005 10:39:39 -0000 1.4
@@ -6,18 +6,16 @@
* Copyright (C) 1995 Hamish Macdonald
*/
+#include <linux/module.h>
#include <asm/pgalloc.h>
#include <asm/traps.h>
-static unsigned long virt_to_phys_slow(unsigned long vaddr, mm_segment_t fs)
+static unsigned long virt_to_phys_slow(unsigned long vaddr)
{
if (CPU_IS_060) {
- mm_segment_t old_fs = get_fs();
unsigned long paddr;
- set_fs(fs);
-
/* The PLPAR instruction causes an access error if the
translation
* is not possible. To catch this we use the same exception
mechanism
* as for user space accesses in <asm/uaccess.h>. */
@@ -36,21 +34,16 @@
".previous"
: "=a" (paddr)
: "0" (vaddr));
- set_fs(old_fs);
return paddr;
} else if (CPU_IS_040) {
- mm_segment_t old_fs = get_fs();
unsigned long mmusr;
- set_fs(fs);
-
asm volatile (".chip 68040\n\t"
"ptestr (%1)\n\t"
"movec %%mmusr, %0\n\t"
".chip 68k"
: "=r" (mmusr)
: "a" (vaddr));
- set_fs(old_fs);
if (mmusr & MMU_R_040)
return (mmusr & PAGE_MASK) | (vaddr & ~PAGE_MASK);
@@ -61,7 +54,7 @@
asm volatile ("ptestr %3,%2@,#7,%0\n\t"
"pmove %%psr,%1@"
: "=a&" (descaddr)
- : "a" (&mmusr), "a" (vaddr), "d" (fs.seg));
+ : "a" (&mmusr), "a" (vaddr), "d" (get_fs().seg));
if (mmusr & (MMU_I|MMU_B|MMU_L))
return 0;
descaddr = phys_to_virt((unsigned long)descaddr);
@@ -81,42 +74,6 @@
/* RZ: use cpush %bc instead of cpush %dc, cinv %ic */
void flush_icache_range(unsigned long address, unsigned long endaddr)
{
- if (CPU_IS_040_OR_060) {
- address &= PAGE_MASK;
-
- if (address >= PAGE_OFFSET && address < (unsigned
long)high_memory) {
- do {
- asm volatile ("nop\n\t"
- ".chip 68040\n\t"
- "cpushp %%bc,(%0)\n\t"
- ".chip 68k"
- : : "a" (virt_to_phys((void
*)address)));
- address += PAGE_SIZE;
- } while (address < endaddr);
- } else {
- do {
- asm volatile ("nop\n\t"
- ".chip 68040\n\t"
- "cpushp %%bc,(%0)\n\t"
- ".chip 68k"
- : : "a"
(virt_to_phys_slow(address, KERNEL_DS)));
- address += PAGE_SIZE;
- } while (address < endaddr);
- }
- } else {
- unsigned long tmp;
- asm volatile ("movec %%cacr,%0\n\t"
- "orw %1,%0\n\t"
- "movec %0,%%cacr"
- : "=&d" (tmp)
- : "di" (FLUSH_I));
- }
-}
-
-void flush_icache_user_range(void *addr, unsigned long size)
-{
- unsigned long address = (unsigned long)addr;
- unsigned long endaddr = address + size;
if (CPU_IS_040_OR_060) {
address &= PAGE_MASK;
@@ -126,7 +83,7 @@
".chip 68040\n\t"
"cpushp %%bc,(%0)\n\t"
".chip 68k"
- : : "a" (virt_to_phys_slow(address,
get_fs())));
+ : : "a" (virt_to_phys_slow(address)));
address += PAGE_SIZE;
} while (address < endaddr);
} else {
@@ -138,9 +95,10 @@
: "di" (FLUSH_I));
}
}
+EXPORT_SYMBOL(flush_icache_range);
-void flush_icache_user_page(struct vm_area_struct *vma, struct page *page,
- unsigned long addr, int len)
+void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
+ unsigned long addr, int len)
{
if (CPU_IS_040_OR_060) {
asm volatile ("nop\n\t"
Index: linux/fs/binfmt_aout.c
Stats: 14 modifications
http://linux-m68k-cvs.ubb.ca/c/cvsweb/linux/fs/binfmt_aout%2ec.diff?r1=1.13&r2=1.14
========================================================================
--- binfmt_aout.c 29 Aug 2005 15:37:06 -0000 1.13
+++ binfmt_aout.c 30 Aug 2005 10:39:39 -0000 1.14
@@ -369,9 +369,8 @@
send_sig(SIGKILL, current, 0);
return error;
}
-
- flush_icache_user_range((void *)text_addr,
- ex.a_text + ex.a_data);
+
+ flush_icache_range(text_addr, text_addr+ex.a_text+ex.a_data);
} else {
static unsigned long error_time, error_time2;
if ((ex.a_text & 0xfff || ex.a_data & 0xfff) &&
@@ -398,8 +397,9 @@
bprm->file->f_op->read(bprm->file,
(char __user *)N_TXTADDR(ex),
ex.a_text+ex.a_data, &pos);
- flush_icache_user_range((void *)N_TXTADDR(ex),
- ex.a_text + ex.a_data);
+ flush_icache_range((unsigned long) N_TXTADDR(ex),
+ (unsigned long) N_TXTADDR(ex) +
+ ex.a_text+ex.a_data);
goto beyond_if;
}
@@ -504,8 +504,8 @@
file->f_op->read(file, (char __user *)start_addr,
ex.a_text + ex.a_data, &pos);
- flush_icache_user_range((void *)start_addr,
- ex.a_text + ex.a_data);
+ flush_icache_range((unsigned long) start_addr,
+ (unsigned long) start_addr + ex.a_text +
ex.a_data);
retval = 0;
goto out;
Index: linux/fs/binfmt_elf.c
Stats: 3 modifications
http://linux-m68k-cvs.ubb.ca/c/cvsweb/linux/fs/binfmt_elf%2ec.diff?r1=1.29&r2=1.30
========================================================================
--- binfmt_elf.c 29 Aug 2005 15:37:06 -0000 1.29
+++ binfmt_elf.c 30 Aug 2005 10:39:39 -0000 1.30
@@ -471,7 +471,8 @@
goto out;
if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
goto out;
- flush_icache_user_range(addr, text_data);
+ flush_icache_range((unsigned long)addr,
+ (unsigned long)addr + text_data);
down_write(¤t->mm->mmap_sem);
Index: linux/include/asm-m68k/cacheflush.h
Stats: 1 deletion, 6 modifications
http://linux-m68k-cvs.ubb.ca/c/cvsweb/linux/include/asm%2dm68k/cacheflush%2eh.diff?r1=1.12&r2=1.13
========================================================================
--- cacheflush.h 18 Jun 2005 17:50:26 -0000 1.12
+++ cacheflush.h 30 Aug 2005 10:39:39 -0000 1.13
@@ -131,10 +131,9 @@
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
#define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page))
-extern void flush_icache_user_page(struct vm_area_struct *vma, struct page
*page,
- unsigned long addr, int len);
+extern void flush_icache_user_range(struct vm_area_struct *vma, struct page
*page,
+ unsigned long addr, int len);
extern void flush_icache_range(unsigned long address, unsigned long endaddr);
-extern void flush_icache_user_range(void *address, unsigned long size);
static inline void copy_to_user_page(struct vm_area_struct *vma,
struct page *page, unsigned long vaddr,
@@ -142,7 +141,7 @@
{
flush_cache_page(vma, vaddr, page_to_pfn(page));
memcpy(dst, src, len);
- flush_icache_user_page(vma, page, vaddr, len);
+ flush_icache_user_range(vma, page, vaddr, len);
}
static inline void copy_from_user_page(struct vm_area_struct *vma,
struct page *page, unsigned long vaddr,
-
To unsubscribe from this list: send the line "unsubscribe linux-m68k-cvscommit"
in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html