Linus Torvalds writes:

> > As for the `to' argument, yes it is redundant since it is just kmap(page).
> 
> And why not let "clear_page()" just do that itself?

OK, here's a patch that does that.

> The thing is, copy/clear_page shouldn't exist at all (or rather, the
> "highpage" versions should be renamed to the non-highpage names, because
> the non-highmem case simply isn't interesting any more).

Each architecture already had a clear_page that was functionally
equivalent to memset(p, 0, PAGE_SIZE), but often in assembler, and
likewise a copy_page that was equivalent to memcpy(d, s, PAGE_SIZE).
So I renamed all the existing clear_page's and copy_page's to
__clear_page and __copy_page (since they are "lower-level" or "raw"
clear/copy page routines).

In highmem.h I have renamed copy_highpage to copy_page and
clear_highpage to clear_page.  I also have default versions of
copy_user_page and clear_user_page which just do copy_page/clear_page
for those architectures that don't have any cache issues to deal
with.  Architectures can define __HAVE_ARCH_USER_PAGE in asm/page.h
and then define their own copy/clear_user_page routines if they want
to.

I have fixed up all the architectures except sparc64.  There the
copy/clear_user_page routines are in assembler and my sparc assembler
is pretty rusty these days (particularly when DaveM goes doing hairy
things with the %g registers :).  I'll let Dave fix that one up; the
change is that copy/clear_user_page take page * arguments instead of
void * arguments.

This patch is a fair bit bigger than the last one, but most of the
bulk is just the renaming of clear_page to __clear_page and copy_page
to __copy_page.  I also renamed memclear_highpage to memclear_page
(which isn't actually used anywhere) and memclear_highpage_flush to
memclear_page_flush.

Let me know what you think of this; if it's OK, could you apply it to
your tree?

Thanks,
Paul.

diff -urN linux/Documentation/cachetlb.txt linux.new/Documentation/cachetlb.txt
--- linux/Documentation/cachetlb.txt    Sat Mar 31 03:05:54 2001
+++ linux.new/Documentation/cachetlb.txt        Wed May 23 20:48:38 2001
@@ -260,8 +260,9 @@
 
 Here is the new interface:
 
-  void copy_user_page(void *to, void *from, unsigned long address)
-  void clear_user_page(void *to, unsigned long address)
+  void copy_user_page(struct page *to, struct page *from,
+                     unsigned long address)
+  void clear_user_page(struct page *to, unsigned long address)
 
        These two routines store data in user anonymous or COW
        pages.  It allows a port to efficiently avoid D-cache alias
@@ -279,6 +280,11 @@
 
        If D-cache aliasing is not an issue, these two routines may
        simply call memcpy/memset directly and do nothing more.
+
+       There are default versions of these procedures supplied in
+       include/linux/highmem.h.  If a port does not want to use the
+       default versions it should declare them and define the symbol
+       __HAVE_ARCH_USER_PAGE in include/asm/page.h.
 
   void flush_dcache_page(struct page *page)
 
diff -urN linux/arch/alpha/kernel/alpha_ksyms.c 
linux.new/arch/alpha/kernel/alpha_ksyms.c
--- linux/arch/alpha/kernel/alpha_ksyms.c       Sat Apr 28 23:02:30 2001
+++ linux.new/arch/alpha/kernel/alpha_ksyms.c   Wed May 23 20:39:23 2001
@@ -98,8 +98,8 @@
 EXPORT_SYMBOL(__memset);
 EXPORT_SYMBOL(__memsetw);
 EXPORT_SYMBOL(__constant_c_memset);
-EXPORT_SYMBOL(copy_page);
-EXPORT_SYMBOL(clear_page);
+EXPORT_SYMBOL(__copy_page);
+EXPORT_SYMBOL(__clear_page);
 
 EXPORT_SYMBOL(__direct_map_base);
 EXPORT_SYMBOL(__direct_map_size);
diff -urN linux/arch/alpha/lib/clear_page.S linux.new/arch/alpha/lib/clear_page.S
--- linux/arch/alpha/lib/clear_page.S   Thu Feb 22 14:24:52 2001
+++ linux.new/arch/alpha/lib/clear_page.S       Wed May 23 20:39:23 2001
@@ -6,9 +6,9 @@
 
        .text
        .align 4
-       .global clear_page
-       .ent clear_page
-clear_page:
+       .global __clear_page
+       .ent __clear_page
+__clear_page:
        .prologue 0
 
        lda     $0,128
@@ -36,4 +36,4 @@
        unop
        nop
 
-       .end clear_page
+       .end __clear_page
diff -urN linux/arch/alpha/lib/copy_page.S linux.new/arch/alpha/lib/copy_page.S
--- linux/arch/alpha/lib/copy_page.S    Thu Feb 22 14:24:52 2001
+++ linux.new/arch/alpha/lib/copy_page.S        Wed May 23 21:05:31 2001
@@ -6,9 +6,9 @@
 
        .text
        .align 4
-       .global copy_page
-       .ent copy_page
-copy_page:
+       .global __copy_page
+       .ent __copy_page
+__copy_page:
        .prologue 0
 
        lda     $18,128
@@ -46,4 +46,4 @@
        unop
        nop
 
-       .end copy_page
+       .end __copy_page
diff -urN linux/arch/alpha/lib/ev6-clear_page.S 
linux.new/arch/alpha/lib/ev6-clear_page.S
--- linux/arch/alpha/lib/ev6-clear_page.S       Thu Feb 22 14:24:52 2001
+++ linux.new/arch/alpha/lib/ev6-clear_page.S   Wed May 23 20:39:23 2001
@@ -6,9 +6,9 @@
 
         .text
         .align 4
-        .global clear_page
-        .ent clear_page
-clear_page:
+        .global __clear_page
+        .ent __clear_page
+__clear_page:
         .prologue 0
 
        lda     $0,128
@@ -51,4 +51,4 @@
        nop
        nop
 
-       .end clear_page
+       .end __clear_page
diff -urN linux/arch/alpha/lib/ev6-copy_page.S linux.new/arch/alpha/lib/ev6-copy_page.S
--- linux/arch/alpha/lib/ev6-copy_page.S        Thu Feb 22 14:24:52 2001
+++ linux.new/arch/alpha/lib/ev6-copy_page.S    Wed May 23 21:05:31 2001
@@ -59,9 +59,9 @@
 
        .text
        .align 4
-       .global copy_page
-       .ent copy_page
-copy_page:
+       .global __copy_page
+       .ent __copy_page
+__copy_page:
        .prologue 0
 
        /* Prefetch 5 read cachelines; write-hint 10 cache lines.  */
@@ -200,4 +200,4 @@
        unop
        nop
 
-       .end copy_page
+       .end __copy_page
diff -urN linux/arch/alpha/mm/init.c linux.new/arch/alpha/mm/init.c
--- linux/arch/alpha/mm/init.c  Sat Apr 28 23:02:30 2001
+++ linux.new/arch/alpha/mm/init.c      Wed May 23 20:43:32 2001
@@ -51,7 +51,7 @@
        ret = (pgd_t *)__get_free_page(GFP_KERNEL);
        init = pgd_offset(&init_mm, 0UL);
        if (ret) {
-               clear_page(ret);
+               __clear_page(ret);
 #ifdef CONFIG_ALPHA_LARGE_VMALLOC
                memcpy (ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
                        (PTRS_PER_PGD - USER_PTRS_PER_PGD - 1)*sizeof(pgd_t));
diff -urN linux/arch/arm/lib/copy_page.S linux.new/arch/arm/lib/copy_page.S
--- linux/arch/arm/lib/copy_page.S      Sat Mar 31 03:05:55 2001
+++ linux.new/arch/arm/lib/copy_page.S  Wed May 23 21:05:31 2001
@@ -16,12 +16,12 @@
                .text
                .align  5
 /*
- * StrongARM optimised copy_page routine
+ * StrongARM optimised __copy_page routine
  * now 1.78bytes/cycle, was 1.60 bytes/cycle (50MHz bus -> 89MB/s)
  * Note that we probably achieve closer to the 100MB/s target with
  * the core clock switching.
  */
-ENTRY(copy_page)
+ENTRY(__copy_page)
                stmfd   sp!, {r4, lr}                   @       2
                mov     r2, #PAGE_SZ/64                 @       1
                ldmia   r1!, {r3, r4, ip, lr}           @       4+1
diff -urN linux/arch/ia64/kernel/ia64_ksyms.c linux.new/arch/ia64/kernel/ia64_ksyms.c
--- linux/arch/ia64/kernel/ia64_ksyms.c Sat Apr 28 23:02:32 2001
+++ linux.new/arch/ia64/kernel/ia64_ksyms.c     Wed May 23 20:39:23 2001
@@ -53,7 +53,7 @@
 EXPORT_SYMBOL_NOVERS(__rwsem_wake);
 
 #include <asm/page.h>
-EXPORT_SYMBOL(clear_page);
+EXPORT_SYMBOL(__clear_page);
 
 #include <asm/processor.h>
 EXPORT_SYMBOL(cpu_data);
diff -urN linux/arch/ia64/lib/clear_page.S linux.new/arch/ia64/lib/clear_page.S
--- linux/arch/ia64/lib/clear_page.S    Sat Apr 28 23:02:32 2001
+++ linux.new/arch/ia64/lib/clear_page.S        Wed May 23 20:39:23 2001
@@ -17,7 +17,7 @@
 #include <asm/asmmacro.h>
 #include <asm/page.h>
 
-GLOBAL_ENTRY(clear_page)
+GLOBAL_ENTRY(__clear_page)
        .prologue
        alloc r11=ar.pfs,1,0,0,0
        .save ar.lc, r16
@@ -36,4 +36,4 @@
        ;;
        mov ar.lc=r16           // restore lc
        br.ret.sptk.few rp
-END(clear_page)
+END(__clear_page)
diff -urN linux/arch/ia64/lib/copy_page.S linux.new/arch/ia64/lib/copy_page.S
--- linux/arch/ia64/lib/copy_page.S     Sat Apr 28 23:02:32 2001
+++ linux.new/arch/ia64/lib/copy_page.S Wed May 23 21:05:31 2001
@@ -1,6 +1,6 @@
 /*
  *
- * Optimized version of the standard copy_page() function
+ * Optimized version of the standard __copy_page() function
  *
  * Based on comments from ddd. Try not to overflow write buffer.
  *
@@ -28,7 +28,7 @@
 #define tgt1           r22
 #define tgt2           r23
 
-GLOBAL_ENTRY(copy_page)
+GLOBAL_ENTRY(__copy_page)
        .prologue
        .save ar.pfs, saved_pfs
        alloc saved_pfs=ar.pfs,3,((2*PIPE_DEPTH+7)&~7),0,((2*PIPE_DEPTH+7)&~7)
@@ -85,4 +85,4 @@
        mov ar.pfs=saved_pfs    // restore ar.ec
        mov ar.lc=saved_lc      // restore saved lc
        br.ret.sptk.few rp      // bye...
-END(copy_page)
+END(__copy_page)
diff -urN linux/arch/ia64/mm/init.c linux.new/arch/ia64/mm/init.c
--- linux/arch/ia64/mm/init.c   Sat Apr 28 23:02:32 2001
+++ linux.new/arch/ia64/mm/init.c       Wed May 23 20:39:23 2001
@@ -310,7 +310,7 @@
 {
        unsigned long max_dma, zones_size[MAX_NR_ZONES];
 
-       clear_page((void *) ZERO_PAGE_ADDR);
+       __clear_page((void *) ZERO_PAGE_ADDR);
 
        /* initialize mem_map[] */
 
diff -urN linux/arch/m68k/mm/memory.c linux.new/arch/m68k/mm/memory.c
--- linux/arch/m68k/mm/memory.c Wed May 23 20:29:11 2001
+++ linux.new/arch/m68k/mm/memory.c     Wed May 23 20:39:23 2001
@@ -46,7 +46,7 @@
        pte = (pte_t *) __get_free_page(GFP_KERNEL);
        if (pmd_none(*pmd)) {
                if (pte) {
-                       clear_page(pte);
+                       __clear_page(pte);
                        __flush_page_to_ram((unsigned long)pte);
                        flush_tlb_kernel_page((unsigned long)pte);
                        nocache_page((unsigned long)pte);
diff -urN linux/arch/m68k/mm/motorola.c linux.new/arch/m68k/mm/motorola.c
--- linux/arch/m68k/mm/motorola.c       Sat Apr 28 23:02:35 2001
+++ linux.new/arch/m68k/mm/motorola.c   Wed May 23 20:39:23 2001
@@ -51,7 +51,7 @@
 
        ptablep = (pte_t *)alloc_bootmem_low_pages(PAGE_SIZE);
 
-       clear_page(ptablep);
+       __clear_page(ptablep);
        __flush_page_to_ram((unsigned long) ptablep);
        flush_tlb_kernel_page((unsigned long) ptablep);
        nocache_page ((unsigned long)ptablep);
@@ -90,7 +90,7 @@
        if (((unsigned long)(last_pgtable + PTRS_PER_PMD) & ~PAGE_MASK) == 0) {
                last_pgtable = (pmd_t *)alloc_bootmem_low_pages(PAGE_SIZE);
 
-               clear_page(last_pgtable);
+               __clear_page(last_pgtable);
                __flush_page_to_ram((unsigned long)last_pgtable);
                flush_tlb_kernel_page((unsigned long)last_pgtable);
                nocache_page((unsigned long)last_pgtable);
diff -urN linux/arch/mips/mm/init.c linux.new/arch/mips/mm/init.c
--- linux/arch/mips/mm/init.c   Tue Oct 17 06:58:51 2000
+++ linux.new/arch/mips/mm/init.c       Wed May 23 20:39:23 2001
@@ -64,7 +64,7 @@
        page = (pte_t *) __get_free_page(GFP_USER);
        if (pmd_none(*pmd)) {
                if (page) {
-                       clear_page(page);
+                       __clear_page(page);
                        pmd_val(*pmd) = (unsigned long)page;
                        return page + offset;
                }
@@ -86,7 +86,7 @@
        page = (pte_t *) __get_free_page(GFP_KERNEL);
        if (pmd_none(*pmd)) {
                if (page) {
-                       clear_page(page);
+                       __clear_page(page);
                        pmd_val(*pmd) = (unsigned long)page;
                        return page + offset;
                }
@@ -207,7 +207,7 @@
        extern char empty_bad_page[PAGE_SIZE];
        unsigned long page = (unsigned long) empty_bad_page;
 
-       clear_page((void *)page);
+       __clear_page((void *)page);
        return pte_mkdirty(mk_pte_phys(__pa(page), PAGE_SHARED));
 }
 
diff -urN linux/arch/mips64/mm/init.c linux.new/arch/mips64/mm/init.c
--- linux/arch/mips64/mm/init.c Tue Oct 17 06:58:51 2000
+++ linux.new/arch/mips64/mm/init.c     Wed May 23 20:39:23 2001
@@ -142,7 +142,7 @@
        page = (pte_t *) __get_free_pages(GFP_USER, 1);
        if (pmd_none(*pmd)) {
                if (page) {
-                       clear_page(page);
+                       __clear_page(page);
                        pmd_set(pmd, page);
                        return page + offset;
                }
@@ -164,7 +164,7 @@
        page = (pte_t *) __get_free_pages(GFP_KERNEL, 0);
        if (pmd_none(*pmd)) {
                if (page) {
-                       clear_page(page);
+                       __clear_page(page);
                        pmd_val(*pmd) = (unsigned long)page;
                        return page + offset;
                }
diff -urN linux/arch/parisc/mm/init.c linux.new/arch/parisc/mm/init.c
--- linux/arch/parisc/mm/init.c Wed Dec  6 07:29:39 2000
+++ linux.new/arch/parisc/mm/init.c     Wed May 23 20:39:23 2001
@@ -82,7 +82,7 @@
 
        if (pmd_none(*pmd)) {
                if (pte) {
-                       clear_page(pte);
+                       __clear_page(pte);
                        pmd_val(*pmd) = _PAGE_TABLE + __pa((unsigned long)pte);
                        return pte + offset;
                }
diff -urN linux/arch/parisc/mm/pa11.c linux.new/arch/parisc/mm/pa11.c
--- linux/arch/parisc/mm/pa11.c Wed Dec  6 07:29:39 2000
+++ linux.new/arch/parisc/mm/pa11.c     Wed May 23 20:39:23 2001
@@ -141,8 +141,8 @@
 {
 
     /* Taken directly from the MIPS arch..  Lots of bad things here */
-       clear_page = pa11_clear_page;
-       copy_page = pa11_copy_page;
+       __clear_page = pa11_clear_page;
+       __copy_page = pa11_copy_page;
 
        flush_cache_all = pa11_flush_cache_all;
        flush_cache_mm = pa11_flush_cache_mm;
diff -urN linux/arch/parisc/mm/pa20.c linux.new/arch/parisc/mm/pa20.c
--- linux/arch/parisc/mm/pa20.c Wed Dec  6 07:29:39 2000
+++ linux.new/arch/parisc/mm/pa20.c     Wed May 23 20:39:23 2001
@@ -141,8 +141,8 @@
 {
 
     /* Taken directly from the MIPS arch..  Lots of bad things here */
-       clear_page = pa20_clear_page;
-       copy_page = pa20_copy_page;
+       __clear_page = pa20_clear_page;
+       __copy_page = pa20_copy_page;
 
        flush_cache_all = pa20_flush_cache_all;
        flush_cache_mm = pa20_flush_cache_mm;
diff -urN linux/arch/ppc/kernel/misc.S linux.new/arch/ppc/kernel/misc.S
--- linux/arch/ppc/kernel/misc.S        Wed May 23 20:29:13 2001
+++ linux.new/arch/ppc/kernel/misc.S    Wed May 23 21:05:31 2001
@@ -388,7 +388,7 @@
  * memory traffic (except to write out any cache lines which get
  * displaced).  This only works on cacheable memory.
  */
-_GLOBAL(clear_page)
+_GLOBAL(__clear_page)
        li      r0,4096/CACHE_LINE_SIZE
        mtctr   r0
 #ifdef CONFIG_8xx
@@ -420,7 +420,7 @@
        stw     r8,12(r3);      \
        stwu    r9,16(r3)
 
-_GLOBAL(copy_page)
+_GLOBAL(__copy_page)
        addi    r3,r3,-4
        addi    r4,r4,-4
        li      r5,4
diff -urN linux/arch/ppc/kernel/ppc_ksyms.c linux.new/arch/ppc/kernel/ppc_ksyms.c
--- linux/arch/ppc/kernel/ppc_ksyms.c   Wed May 23 20:29:13 2001
+++ linux.new/arch/ppc/kernel/ppc_ksyms.c       Wed May 23 20:39:23 2001
@@ -73,7 +73,7 @@
 int abs(int);
 extern unsigned long ret_to_user_hook;
 
-EXPORT_SYMBOL(clear_page);
+EXPORT_SYMBOL(__clear_page);
 EXPORT_SYMBOL(do_signal);
 EXPORT_SYMBOL(syscall_trace);
 EXPORT_SYMBOL(transfer_to_handler);
diff -urN linux/arch/ppc/mm/init.c linux.new/arch/ppc/mm/init.c
--- linux/arch/ppc/mm/init.c    Wed May 23 20:29:14 2001
+++ linux.new/arch/ppc/mm/init.c        Wed May 23 20:39:23 2001
@@ -228,7 +228,7 @@
 
 pte_t * __bad_pagetable(void)
 {
-       clear_page(empty_bad_page_table);
+       __clear_page(empty_bad_page_table);
        return empty_bad_page_table;
 }
 
@@ -236,7 +236,7 @@
 
 pte_t __bad_page(void)
 {
-       clear_page(empty_bad_page);
+       __clear_page(empty_bad_page);
        return pte_mkdirty(mk_pte_phys(__pa(empty_bad_page), PAGE_SHARED));
 }
 
diff -urN linux/arch/sh/mm/cache.c linux.new/arch/sh/mm/cache.c
--- linux/arch/sh/mm/cache.c    Wed May 23 20:29:14 2001
+++ linux.new/arch/sh/mm/cache.c        Wed May 23 21:05:31 2001
@@ -507,17 +507,26 @@
 /* Page is 4K, OC size is 16K, there are four lines. */
 #define CACHE_ALIAS 0x00003000
 
-void clear_user_page(void *to, unsigned long address)
+void clear_user_page(struct page *to_page, unsigned long address)
 {
-       clear_page(to);
+       void *to = kmap(to_page);
+
+       __clear_page(to);
        if (((address ^ (unsigned long)to) & CACHE_ALIAS))
                __flush_page_to_ram(to);
+       kunmap(to_pg);
 }
 
-void copy_user_page(void *to, void *from, unsigned long address)
+void copy_user_page(struct page *to_pg, struct page *from_pg,
+                   unsigned long address)
 {
-       copy_page(to, from);
+       void *to = kmap(to_pg);
+       void *from = kmap(from_pg);
+
+       __copy_page(to, from);
        if (((address ^ (unsigned long)to) & CACHE_ALIAS))
                __flush_page_to_ram(to);
+       kunmap(to_pg);
+       kunmap(from_pg);
 }
 #endif
diff -urN linux/include/asm-alpha/page.h linux.new/include/asm-alpha/page.h
--- linux/include/asm-alpha/page.h      Thu Feb 22 14:25:37 2001
+++ linux.new/include/asm-alpha/page.h  Wed May 23 20:39:23 2001
@@ -12,11 +12,8 @@
 
 #define STRICT_MM_TYPECHECKS
 
-extern void clear_page(void *page);
-#define clear_user_page(page, vaddr)   clear_page(page)
-
-extern void copy_page(void * _to, void * _from);
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
+extern void __clear_page(void *page);
+extern void __copy_page(void * _to, void * _from);
 
 #ifdef STRICT_MM_TYPECHECKS
 /*
diff -urN linux/include/asm-alpha/pgalloc.h linux.new/include/asm-alpha/pgalloc.h
--- linux/include/asm-alpha/pgalloc.h   Sat Apr 28 23:02:52 2001
+++ linux.new/include/asm-alpha/pgalloc.h       Wed May 23 20:39:23 2001
@@ -275,7 +275,7 @@
 {
        pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL);
        if (ret)
-               clear_page(ret);
+               __clear_page(ret);
        return ret;
 }
 
@@ -307,7 +307,7 @@
 {
        pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL);
        if (pte)
-               clear_page(pte);
+               __clear_page(pte);
        return pte;
 }
 
diff -urN linux/include/asm-arm/page.h linux.new/include/asm-arm/page.h
--- linux/include/asm-arm/page.h        Mon Aug 14 02:54:15 2000
+++ linux.new/include/asm-arm/page.h    Wed May 23 20:39:23 2001
@@ -11,11 +11,8 @@
 
 #define STRICT_MM_TYPECHECKS
 
-#define clear_page(page)       memzero((void *)(page), PAGE_SIZE)
-extern void copy_page(void *to, void *from);
-
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
+#define __clear_page(page)     memzero((void *)(page), PAGE_SIZE)
+extern void __copy_page(void *to, void *from);
 
 #ifdef STRICT_MM_TYPECHECKS
 /*
diff -urN linux/include/asm-cris/page.h linux.new/include/asm-cris/page.h
--- linux/include/asm-cris/page.h       Thu Feb 22 14:25:38 2001
+++ linux.new/include/asm-cris/page.h   Wed May 23 20:42:48 2001
@@ -11,11 +11,8 @@
 
 #ifdef __KERNEL__
 
-#define clear_page(page)        memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from)      memcpy((void *)(to), (void *)(from), PAGE_SIZE)
-
-#define clear_user_page(page, vaddr)    clear_page(page)
-#define copy_user_page(to, from, vaddr) copy_page(to, from)
+#define __clear_page(page)        memset((void *)(page), 0, PAGE_SIZE)
+#define __copy_page(to,from)      memcpy((void *)(to), (void *)(from), PAGE_SIZE)
 
 #define STRICT_MM_TYPECHECKS
 
diff -urN linux/include/asm-cris/pgalloc.h linux.new/include/asm-cris/pgalloc.h
--- linux/include/asm-cris/pgalloc.h    Wed May 23 20:29:24 2001
+++ linux.new/include/asm-cris/pgalloc.h        Wed May 23 20:42:48 2001
@@ -64,7 +64,7 @@
 
         pte = (pte_t *) __get_free_page(GFP_KERNEL);
         if (pte)
-                clear_page(pte);
+                __clear_page(pte);
         return pte;
 }
 
diff -urN linux/include/asm-i386/page.h linux.new/include/asm-i386/page.h
--- linux/include/asm-i386/page.h       Fri Jan  5 09:50:46 2001
+++ linux.new/include/asm-i386/page.h   Wed May 23 20:39:23 2001
@@ -15,8 +15,8 @@
 
 #include <asm/mmx.h>
 
-#define clear_page(page)       mmx_clear_page(page)
-#define copy_page(to,from)     mmx_copy_page(to,from)
+#define __clear_page(page)     mmx_clear_page(page)
+#define __copy_page(to,from)   mmx_copy_page(to,from)
 
 #else
 
@@ -25,13 +25,10 @@
  *     Maybe the K6-III ?
  */
  
-#define clear_page(page)       memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from)     memcpy((void *)(to), (void *)(from), PAGE_SIZE)
+#define __clear_page(page)     memset((void *)(page), 0, PAGE_SIZE)
+#define __copy_page(to,from)   memcpy((void *)(to), (void *)(from), PAGE_SIZE)
 
 #endif
-
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
 
 /*
  * These are used to make use of C type-checking..
diff -urN linux/include/asm-i386/pgalloc.h linux.new/include/asm-i386/pgalloc.h
--- linux/include/asm-i386/pgalloc.h    Sat Apr 28 23:02:52 2001
+++ linux.new/include/asm-i386/pgalloc.h        Wed May 23 20:39:23 2001
@@ -33,7 +33,7 @@
                        unsigned long pmd = __get_free_page(GFP_KERNEL);
                        if (!pmd)
                                goto out_oom;
-                       clear_page(pmd);
+                       __clear_page(pmd);
                        set_pgd(pgd + i, __pgd(1 + __pa(pmd)));
                }
                memcpy(pgd + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD, 
(PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
@@ -100,7 +100,7 @@
 
        pte = (pte_t *) __get_free_page(GFP_KERNEL);
        if (pte)
-               clear_page(pte);
+               __clear_page(pte);
        return pte;
 }
 
diff -urN linux/include/asm-ia64/page.h linux.new/include/asm-ia64/page.h
--- linux/include/asm-ia64/page.h       Sat Apr 28 23:02:53 2001
+++ linux.new/include/asm-ia64/page.h   Wed May 23 20:39:23 2001
@@ -37,8 +37,8 @@
 # ifdef __KERNEL__
 #  define STRICT_MM_TYPECHECKS
 
-extern void clear_page (void *page);
-extern void copy_page (void *to, void *from);
+extern void __clear_page (void *page);
+extern void __copy_page (void *to, void *from);
 
 /*
  * Note: the MAP_NR_*() macro can't use __pa() because MAP_NR_*(X) MUST
diff -urN linux/include/asm-ia64/pgalloc.h linux.new/include/asm-ia64/pgalloc.h
--- linux/include/asm-ia64/pgalloc.h    Sat Apr 28 23:02:53 2001
+++ linux.new/include/asm-ia64/pgalloc.h        Wed May 23 22:43:04 2001
@@ -56,7 +56,7 @@
        if (__builtin_expect(pgd == NULL, 0)) {
                pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
                if (__builtin_expect(pgd != NULL, 1))
-                       clear_page(pgd);
+                       __clear_page(pgd);
        }
        return pgd;
 }
@@ -95,7 +95,7 @@
        pmd_t *pmd = (pmd_t *) __get_free_page(GFP_KERNEL);
 
        if (__builtin_expect(pmd != NULL, 1))
-               clear_page(pmd);
+               __clear_page(pmd);
        return pmd;
 }
 
@@ -133,7 +133,7 @@
        pte_t *pte = (pte_t *) __get_free_page(GFP_KERNEL);
 
        if (__builtin_expect(pte != NULL, 1))
-               clear_page(pte);
+               __clear_page(pte);
        return pte;
 }
 
@@ -234,18 +234,20 @@
        clear_bit(PG_arch_1, &page->flags);
 }
 
+#define __HAVE_ARCH_USER_PAGE
+
 static inline void
-clear_user_page (void *addr, unsigned long vaddr, struct page *page)
+clear_user_page (struct page *page, unsigned long vaddr)
 {
-       clear_page(addr);
+       clear_page(page);
        flush_dcache_page(page);
 }
 
 static inline void
-copy_user_page (void *to, void *from, unsigned long vaddr, struct page *page)
+copy_user_page (struct page *to, struct page *from, unsigned long vaddr)
 {
        copy_page(to, from);
-       flush_dcache_page(page);
+       flush_dcache_page(to);
 }
 
 /*
diff -urN linux/include/asm-m68k/page.h linux.new/include/asm-m68k/page.h
--- linux/include/asm-m68k/page.h       Tue Nov 28 13:00:49 2000
+++ linux.new/include/asm-m68k/page.h   Wed May 23 21:05:31 2001
@@ -32,7 +32,7 @@
  * We don't need to check for alignment etc.
  */
 #ifdef CPU_M68040_OR_M68060_ONLY
-static inline void copy_page(void *to, void *from)
+static inline void __copy_page(void *to, void *from)
 {
   unsigned long tmp;
 
@@ -47,7 +47,7 @@
                       );
 }
 
-static inline void clear_page(void *page)
+static inline void __clear_page(void *page)
 {
        unsigned long data, tmp;
        void *sp = page;
@@ -72,12 +72,9 @@
 }
 
 #else
-#define clear_page(page)       memset((page), 0, PAGE_SIZE)
-#define copy_page(to,from)     memcpy((to), (from), PAGE_SIZE)
+#define __clear_page(page)     memset((page), 0, PAGE_SIZE)
+#define __copy_page(to,from)   memcpy((to), (from), PAGE_SIZE)
 #endif
-
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
 
 /*
  * These are used to make use of C type-checking..
diff -urN linux/include/asm-mips/page.h linux.new/include/asm-mips/page.h
--- linux/include/asm-mips/page.h       Thu Aug 10 06:46:02 2000
+++ linux.new/include/asm-mips/page.h   Wed May 23 20:39:23 2001
@@ -26,10 +26,8 @@
 extern void (*_clear_page)(void * page);
 extern void (*_copy_page)(void * to, void * from);
 
-#define clear_page(page)       _clear_page(page)
-#define copy_page(to, from)    _copy_page(to, from)
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
+#define __clear_page(page)     _clear_page(page)
+#define __copy_page(to, from)  _copy_page(to, from)
 
 /*
  * These are used to make use of C type-checking..
diff -urN linux/include/asm-mips64/page.h linux.new/include/asm-mips64/page.h
--- linux/include/asm-mips64/page.h     Thu Aug 10 06:46:02 2000
+++ linux.new/include/asm-mips64/page.h Wed May 23 20:39:23 2001
@@ -26,10 +26,8 @@
 extern void (*_clear_page)(void * page);
 extern void (*_copy_page)(void * to, void * from);
 
-#define clear_page(page)       _clear_page(page)
-#define copy_page(to, from)    _copy_page(to, from)
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
+#define __clear_page(page)     _clear_page(page)
+#define __copy_page(to, from)  _copy_page(to, from)
 
 /*
  * These are used to make use of C type-checking..
diff -urN linux/include/asm-parisc/page.h linux.new/include/asm-parisc/page.h
--- linux/include/asm-parisc/page.h     Wed Dec  6 07:29:39 2000
+++ linux.new/include/asm-parisc/page.h Wed May 23 20:42:48 2001
@@ -9,11 +9,8 @@
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
 
-#define clear_page(page)       memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from)     memcpy((void *)(to), (void *)(from), PAGE_SIZE)
-
-#define clear_user_page(page, vaddr) clear_page(page)
-#define copy_user_page(to, from, vaddr) copy_page(to, from)
+#define __clear_page(page)     memset((void *)(page), 0, PAGE_SIZE)
+#define __copy_page(to,from)   memcpy((void *)(to), (void *)(from), PAGE_SIZE)
 
 /*
  * These are used to make use of C type-checking..
diff -urN linux/include/asm-parisc/pgalloc.h linux.new/include/asm-parisc/pgalloc.h
--- linux/include/asm-parisc/pgalloc.h  Sat Apr 28 23:02:53 2001
+++ linux.new/include/asm-parisc/pgalloc.h      Wed May 23 20:42:48 2001
@@ -288,7 +288,7 @@
        pmd_t *pmd = (pmd_t *) __get_free_page(GFP_KERNEL);
 
        if (pmd)
-               clear_page(pmd);
+               __clear_page(pmd);
        return pmd;
 }
 
diff -urN linux/include/asm-ppc/page.h linux.new/include/asm-ppc/page.h
--- linux/include/asm-ppc/page.h        Wed May 23 20:29:25 2001
+++ linux.new/include/asm-ppc/page.h    Wed May 23 20:39:23 2001
@@ -80,10 +80,8 @@
 /* to align the pointer to the (next) page boundary */
 #define PAGE_ALIGN(addr)       (((addr)+PAGE_SIZE-1)&PAGE_MASK)
 
-extern void clear_page(void *page);
-extern void copy_page(void *to, void *from);
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
+extern void __clear_page(void *page);
+extern void __copy_page(void *to, void *from);
 
 /* map phys->virtual and virtual->phys for RAM pages */
 static inline unsigned long ___pa(unsigned long v)
diff -urN linux/include/asm-ppc/pgalloc.h linux.new/include/asm-ppc/pgalloc.h
--- linux/include/asm-ppc/pgalloc.h     Wed May 23 20:29:25 2001
+++ linux.new/include/asm-ppc/pgalloc.h Wed May 23 20:39:23 2001
@@ -60,7 +60,7 @@
        pgd_t *ret;
 
        if ((ret = (pgd_t *)__get_free_page(GFP_KERNEL)) != NULL)
-               clear_page(ret);
+               __clear_page(ret);
        return ret;
 }
 
@@ -112,7 +112,7 @@
        else
                pte = (pte_t *) early_get_page();
        if (pte != NULL)
-               clear_page(pte);
+               __clear_page(pte);
        return pte;
 }
 
diff -urN linux/include/asm-s390/page.h linux.new/include/asm-s390/page.h
--- linux/include/asm-s390/page.h       Sat Apr 28 23:02:54 2001
+++ linux.new/include/asm-s390/page.h   Wed May 23 20:39:23 2001
@@ -20,7 +20,7 @@
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
 
-static inline void clear_page(void *page)
+static inline void __clear_page(void *page)
 {
        register_pair rp;
 
@@ -31,7 +31,7 @@
                      : "+&a" (rp) : : "memory", "1" );
 }
 
-static inline void copy_page(void *to, void *from)
+static inline void __copy_page(void *to, void *from)
 {
         if (MACHINE_HAS_MVPG)
                asm volatile ("   sr   0,0\n"
@@ -58,9 +58,6 @@
                              : : "a"((void *)(to)),"a"((void *)(from)) 
                              : "memory" );
 }
-
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
 
 #define BUG() do { \
         printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
diff -urN linux/include/asm-s390x/page.h linux.new/include/asm-s390x/page.h
--- linux/include/asm-s390x/page.h      Sat Apr 28 23:02:54 2001
+++ linux.new/include/asm-s390x/page.h  Wed May 23 20:42:48 2001
@@ -19,7 +19,7 @@
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
 
-static inline void clear_page(void *page)
+static inline void __clear_page(void *page)
 {
         asm volatile ("   lgr  2,%0\n"
                       "   lghi 3,4096\n"
@@ -29,7 +29,7 @@
                      : "memory", "1", "2", "3" );
 }
 
-static inline void copy_page(void *to, void *from)
+static inline void __copy_page(void *to, void *from)
 {
         if (MACHINE_HAS_MVPG)
                asm volatile ("   sgr  0,0\n"
@@ -56,9 +56,6 @@
                              : : "a"((void *)(to)),"a"((void *)(from)) 
                              : "memory" );
 }
-
-#define clear_user_page(page, vaddr)    clear_page(page)
-#define copy_user_page(to, from, vaddr) copy_page(to, from)
 
 #define BUG() do { \
         printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
diff -urN linux/include/asm-sh/page.h linux.new/include/asm-sh/page.h
--- linux/include/asm-sh/page.h Mon Dec  4 12:48:19 2000
+++ linux.new/include/asm-sh/page.h     Wed May 23 22:00:08 2001
@@ -24,15 +24,15 @@
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
 
-#define clear_page(page)       memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from)     memcpy((void *)(to), (void *)(from), PAGE_SIZE)
+#define __clear_page(page)     memset((void *)(page), 0, PAGE_SIZE)
+#define __copy_page(to,from)   memcpy((void *)(to), (void *)(from), PAGE_SIZE)
 
-#if defined(__sh3__)
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
-#elif defined(__SH4__)
-extern void clear_user_page(void *to, unsigned long address);
-extern void copy_user_page(void *to, void *from, unsigned long address);
+#if defined(__SH4__)
+#define __HAVE_ARCH_USER_PAGE
+struct page;
+extern void clear_user_page(struct page *to, unsigned long address);
+extern void copy_user_page(struct page *to, struct page *from,
+                          unsigned long address);
 #endif
 
 /*
diff -urN linux/include/asm-sh/pgalloc.h linux.new/include/asm-sh/pgalloc.h
--- linux/include/asm-sh/pgalloc.h      Sat Apr 28 23:02:54 2001
+++ linux.new/include/asm-sh/pgalloc.h  Wed May 23 20:39:23 2001
@@ -59,7 +59,7 @@
 
        pte = (pte_t *) __get_free_page(GFP_KERNEL);
        if (pte)
-               clear_page(pte);
+               __clear_page(pte);
        return pte;
 }
 
diff -urN linux/include/asm-sparc/page.h linux.new/include/asm-sparc/page.h
--- linux/include/asm-sparc/page.h      Tue Oct 31 09:34:12 2000
+++ linux.new/include/asm-sparc/page.h  Wed May 23 20:39:23 2001
@@ -52,10 +52,8 @@
 
 #define PAGE_BUG(page) BUG()
 
-#define clear_page(page)        memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from)     memcpy((void *)(to), (void *)(from), PAGE_SIZE)
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
+#define __clear_page(page)      memset((void *)(page), 0, PAGE_SIZE)
+#define __copy_page(to,from)   memcpy((void *)(to), (void *)(from), PAGE_SIZE)
 
 /* The following structure is used to hold the physical
  * memory configuration of the machine.  This is filled in
diff -urN linux/include/asm-sparc64/page.h linux.new/include/asm-sparc64/page.h
--- linux/include/asm-sparc64/page.h    Fri Aug 11 05:43:12 2000
+++ linux.new/include/asm-sparc64/page.h        Wed May 23 21:59:52 2001
@@ -23,10 +23,13 @@
 
 extern void _clear_page(void *page);
 extern void _copy_page(void *to, void *from);
-#define clear_page(X)  _clear_page((void *)(X))
-#define copy_page(X,Y) _copy_page((void *)(X), (void *)(Y))
-extern void clear_user_page(void *page, unsigned long vaddr);
-extern void copy_user_page(void *to, void *from, unsigned long vaddr);
+#define __clear_page(X)        _clear_page((void *)(X))
+#define __copy_page(X,Y)       _copy_page((void *)(X), (void *)(Y))
+
+#define __HAVE_ARCH_USER_PAGE
+struct page;
+extern void clear_user_page(struct page *page, unsigned long vaddr);
+extern void copy_user_page(struct page *to, struct page *from, unsigned long vaddr);
 
 /* GROSS, defining this makes gcc pass these types as aggregates,
  * and thus on the stack, turn this crap off... -DaveM
diff -urN linux/include/asm-sparc64/pgalloc.h linux.new/include/asm-sparc64/pgalloc.h
--- linux/include/asm-sparc64/pgalloc.h Sat Apr 28 23:02:54 2001
+++ linux.new/include/asm-sparc64/pgalloc.h     Wed May 23 20:39:23 2001
@@ -185,7 +185,7 @@
 
                if (page) {
                        ret = (struct page *)page_address(page);
-                       clear_page(ret);
+                       __clear_page(ret);
                        (unsigned long)page->pprev_hash = 2;
                        (unsigned long *)page->next_hash = pgd_quicklist;
                        pgd_quicklist = (unsigned long *)page;
diff -urN linux/include/linux/highmem.h linux.new/include/linux/highmem.h
--- linux/include/linux/highmem.h       Mon Apr  2 02:20:15 2001
+++ linux.new/include/linux/highmem.h   Wed May 23 22:13:19 2001
@@ -3,6 +3,7 @@
 
 #include <linux/config.h>
 #include <asm/pgalloc.h>
+#include <asm/page.h>
 
 #ifdef CONFIG_HIGHMEM
 
@@ -42,20 +43,31 @@
 
 #endif /* CONFIG_HIGHMEM */
 
-/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */
-static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
+/* when CONFIG_HIGHMEM is not set these will be plain __clear/__copy_page */
+static inline void clear_page(struct page *page)
 {
-       clear_user_page(kmap(page), vaddr);
+       __clear_page(kmap(page));
        kunmap(page);
 }
 
-static inline void clear_highpage(struct page *page)
+static inline void copy_page(struct page *to, struct page *from)
 {
-       clear_page(kmap(page));
-       kunmap(page);
+       char *vfrom, *vto;
+
+       vfrom = kmap(from);
+       vto = kmap(to);
+       __copy_page(vto, vfrom);
+       kunmap(from);
+       kunmap(to);
 }
 
-static inline void memclear_highpage(struct page *page, unsigned int offset, unsigned 
int size)
+#ifndef __HAVE_ARCH_USER_PAGE
+/* use the default clear/copy_user_page */
+#define clear_user_page(page, va)      clear_page((page))
+#define        copy_user_page(to, from, va)    copy_page((to), (from))
+#endif /* __HAVE_ARCH_USER_PAGE */
+
+static inline void memclear_page(struct page *page, unsigned int offset, unsigned int 
+size)
 {
        char *kaddr;
 
@@ -69,7 +81,7 @@
 /*
  * Same but also flushes aliased cache contents to RAM.
  */
-static inline void memclear_highpage_flush(struct page *page, unsigned int offset, 
unsigned int size)
+static inline void memclear_page_flush(struct page *page, unsigned int offset, 
+unsigned int size)
 {
        char *kaddr;
 
@@ -79,28 +91,6 @@
        memset(kaddr + offset, 0, size);
        flush_page_to_ram(page);
        kunmap(page);
-}
-
-static inline void copy_user_highpage(struct page *to, struct page *from, unsigned 
long vaddr)
-{
-       char *vfrom, *vto;
-
-       vfrom = kmap(from);
-       vto = kmap(to);
-       copy_user_page(vto, vfrom, vaddr);
-       kunmap(from);
-       kunmap(to);
-}
-
-static inline void copy_highpage(struct page *to, struct page *from)
-{
-       char *vfrom, *vto;
-
-       vfrom = kmap(from);
-       vto = kmap(to);
-       copy_page(vto, vfrom);
-       kunmap(from);
-       kunmap(to);
 }
 
 #endif /* _LINUX_HIGHMEM_H */
diff -urN linux/include/linux/raid/md_compatible.h 
linux.new/include/linux/raid/md_compatible.h
--- linux/include/linux/raid/md_compatible.h    Mon Apr  2 02:20:36 2001
+++ linux.new/include/linux/raid/md_compatible.h        Wed May 23 20:39:23 2001
@@ -36,7 +36,7 @@
 #endif
 
 /* 002 */
-#define md_clear_page(page)        clear_page(page)
+#define md_clear_page(page)        __clear_page(page)
 
 /* 003 */
 #define MD_EXPORT_SYMBOL(x) EXPORT_SYMBOL(x)
diff -urN linux/mm/filemap.c linux.new/mm/filemap.c
--- linux/mm/filemap.c  Wed May 23 20:29:28 2001
+++ linux.new/mm/filemap.c      Wed May 23 22:16:34 2001
@@ -193,7 +193,7 @@
 
 static inline void truncate_partial_page(struct page *page, unsigned partial)
 {
-       memclear_highpage_flush(page, partial, PAGE_CACHE_SIZE-partial);
+       memclear_page_flush(page, partial, PAGE_CACHE_SIZE-partial);
                                
        if (page->buffers)
                block_flushpage(page, partial);
@@ -1535,7 +1535,7 @@
                struct page *new_page = alloc_page(GFP_HIGHUSER);
 
                if (new_page) {
-                       copy_user_highpage(new_page, old_page, address);
+                       copy_user_page(new_page, old_page, address);
                        flush_page_to_ram(new_page);
                } else
                        new_page = NOPAGE_OOM;
diff -urN linux/mm/memory.c linux.new/mm/memory.c
--- linux/mm/memory.c   Sat Apr 28 23:02:55 2001
+++ linux.new/mm/memory.c       Wed May 23 21:08:32 2001
@@ -61,10 +61,10 @@
 static inline void copy_cow_page(struct page * from, struct page * to, unsigned long 
address)
 {
        if (from == ZERO_PAGE(address)) {
-               clear_user_highpage(to, address);
+               clear_user_page(to, address);
                return;
        }
-       copy_user_highpage(to, from, address);
+       copy_user_page(to, from, address);
 }
 
 mem_map_t * mem_map;
@@ -1192,7 +1192,7 @@
                        return 1;
                }
                mm->rss++;
-               clear_user_highpage(page, addr);
+               clear_user_page(page, addr);
                flush_page_to_ram(page);
                entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
        }
diff -urN linux/mm/page_alloc.c linux.new/mm/page_alloc.c
--- linux/mm/page_alloc.c       Sat Apr 28 23:02:56 2001
+++ linux.new/mm/page_alloc.c   Thu May 24 09:31:41 2001
@@ -521,9 +521,8 @@
 
        page = alloc_pages(gfp_mask, 0);
        if (page) {
-               void *address = page_address(page);
-               clear_page(address);
-               return (unsigned long) address;
+               clear_page(page);
+               return (unsigned long) page_address(page);
        }
        return 0;
 }
diff -urN linux/mm/shmem.c linux.new/mm/shmem.c
--- linux/mm/shmem.c    Wed May 23 20:29:28 2001
+++ linux.new/mm/shmem.c        Wed May 23 22:12:55 2001
@@ -370,7 +370,7 @@
                page = page_cache_alloc(mapping);
                if (!page)
                        return ERR_PTR(-ENOMEM);
-               clear_highpage(page);
+               clear_page(page);
                inode->i_blocks += BLOCKS_PER_PAGE;
                add_to_page_cache (page, mapping, idx);
        }
@@ -446,7 +446,7 @@
                struct page *new_page = page_cache_alloc(inode->i_mapping);
 
                if (new_page) {
-                       copy_user_highpage(new_page, page, address);
+                       copy_user_page(new_page, page, address);
                        flush_page_to_ram(new_page);
                } else
                        new_page = NOPAGE_OOM;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to