]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Remove flush_page_to_ram()
authorAndrew Morton <akpm@digeo.com>
Sat, 12 Apr 2003 19:55:02 +0000 (12:55 -0700)
committerJames Bottomley <jejb@raven.il.steeleye.com>
Sat, 12 Apr 2003 19:55:02 +0000 (12:55 -0700)
From: Hugh Dickins <hugh@veritas.com>

This patch removes the long deprecated flush_page_to_ram.  We have
two different schemes for doing this cache flushing stuff, the old
flush_page_to_ram way and the not so old flush_dcache_page etc. way:
see DaveM's Documentation/cachetlb.txt.  Keeping flush_page_to_ram
around is confusing, and makes it harder to get this done right.

All architectures are updated, but the only ones where it amounts
to more than deleting a line or two are m68k, mips, mips64 and v850.

I followed a prescription from DaveM (though not to the letter), that
those arches with non-nop flush_page_to_ram need to do what it did
in their clear_user_page and copy_user_page and flush_dcache_page.

Dave is consterned that, in the v850 nb85e case, this patch leaves its
flush_dcache_page as was, uses it in clear_user_page and copy_user_page,
instead of making them all flush icache as well.  That may be wrong:
I'm just hesitant to add cruft blindly, changing a flush_dcache macro
to flush icache too; and naively hope that the necessary flush_icache
calls are already in place.  Miles, please let us know which way is
right for v850 nb85e - thanks.

40 files changed:
Documentation/cachetlb.txt
arch/ia64/mm/init.c
arch/mips64/kernel/linux32.c
arch/parisc/kernel/sys_parisc32.c
arch/ppc64/kernel/sys_ppc32.c
arch/s390x/kernel/linux32.c
fs/binfmt_elf.c
fs/exec.c
include/asm-alpha/cacheflush.h
include/asm-arm/proc-armo/cache.h
include/asm-arm/proc-armv/cache.h
include/asm-cris/pgtable.h
include/asm-i386/cacheflush.h
include/asm-ia64/cacheflush.h
include/asm-m68k/cacheflush.h
include/asm-m68k/page.h
include/asm-m68knommu/cacheflush.h
include/asm-mips/page.h
include/asm-mips/pgtable.h
include/asm-mips64/page.h
include/asm-mips64/pgtable.h
include/asm-parisc/cacheflush.h
include/asm-ppc/cacheflush.h
include/asm-ppc64/cacheflush.h
include/asm-s390/cacheflush.h
include/asm-s390x/cacheflush.h
include/asm-sh/pgtable.h
include/asm-sparc/cacheflush.h
include/asm-sparc64/cacheflush.h
include/asm-v850/cacheflush.h
include/asm-v850/nb85e_cache.h
include/asm-v850/page.h
include/asm-x86_64/cacheflush.h
include/linux/highmem.h
kernel/ptrace.c
mm/filemap.c
mm/fremap.c
mm/memory.c
mm/shmem.c
mm/swapfile.c

index 0b105336b8acb5c668e5ff9ff932660bacfed14b..fc54aadc77eee5e9d5e7887ca354e4ff4cd6696f 100644 (file)
@@ -75,7 +75,7 @@ changes occur:
        Platform developers note that generic code will always
        invoke this interface with mm->page_table_lock held.
 
-4) void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
+4) void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
 
        This time we need to remove the PAGE_SIZE sized translation
        from the TLB.  The 'vma' is the backing structure used by
@@ -87,9 +87,9 @@ changes occur:
 
        After running, this interface must make sure that any previous
        page table modification for address space 'vma->vm_mm' for
-       user virtual address 'page' will be visible to the cpu.  That
+       user virtual address 'addr' will be visible to the cpu.  That
        is, after running, there will be no entries in the TLB for
-       'vma->vm_mm' for virtual address 'page'.
+       'vma->vm_mm' for virtual address 'addr'.
 
        This is used primarily during fault processing.
 
@@ -144,9 +144,9 @@ the sequence will be in one of the following forms:
           change_range_of_page_tables(mm, start, end);
           flush_tlb_range(vma, start, end);
 
-       3) flush_cache_page(vma, page);
+       3) flush_cache_page(vma, addr);
           set_pte(pte_pointer, new_pte_val);
-          flush_tlb_page(vma, page);
+          flush_tlb_page(vma, addr);
 
 The cache level flush will always be first, because this allows
 us to properly handle systems whose caches are strict and require
@@ -200,7 +200,7 @@ Here are the routines, one by one:
        call flush_cache_page (see below) for each entry which may be
        modified.
 
-4) void flush_cache_page(struct vm_area_struct *vma, unsigned long page)
+4) void flush_cache_page(struct vm_area_struct *vma, unsigned long addr)
 
        This time we need to remove a PAGE_SIZE sized range
        from the cache.  The 'vma' is the backing structure used by
@@ -211,7 +211,7 @@ Here are the routines, one by one:
        "Harvard" type cache layouts).
 
        After running, there will be no entries in the cache for
-       'vma->vm_mm' for virtual address 'page'.
+       'vma->vm_mm' for virtual address 'addr'.
 
        This is used primarily during fault processing.
 
@@ -235,7 +235,7 @@ this value.
 NOTE: This does not fix shared mmaps, check out the sparc64 port for
 one way to solve this (in particular SPARC_FLAG_MMAPSHARED).
 
-Next, you have two methods to solve the D-cache aliasing issue for all
+Next, you have to solve the D-cache aliasing issue for all
 other cases.  Please keep in mind that fact that, for a given page
 mapped into some user address space, there is always at least one more
 mapping, that of the kernel in it's linear mapping starting at
@@ -244,35 +244,8 @@ physical page into its address space, by implication the D-cache
 aliasing problem has the potential to exist since the kernel already
 maps this page at its virtual address.
 
-First, I describe the old method to deal with this problem.  I am
-describing it for documentation purposes, but it is deprecated and the
-latter method I describe next should be used by all new ports and all
-existing ports should move over to the new mechanism as well.
-
-  flush_page_to_ram(struct page *page)
-
-       The physical page 'page' is about to be place into the
-       user address space of a process.  If it is possible for
-       stores done recently by the kernel into this physical
-       page, to not be visible to an arbitrary mapping in userspace,
-       you must flush this page from the D-cache.
-
-       If the D-cache is writeback in nature, the dirty data (if
-       any) for this physical page must be written back to main
-       memory before the cache lines are invalidated.
-
-Admittedly, the author did not think very much when designing this
-interface.  It does not give the architecture enough information about
-what exactly is going on, and there is no context to base a judgment
-on about whether an alias is possible at all.  The new interfaces to
-deal with D-cache aliasing are meant to address this by telling the
-architecture specific code exactly which is going on at the proper points
-in time.
-
-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(void *to, void *from, unsigned long addr, struct page *page)
+  void clear_user_page(void *to, unsigned long addr, struct page *page)
 
        These two routines store data in user anonymous or COW
        pages.  It allows a port to efficiently avoid D-cache alias
@@ -285,8 +258,9 @@ Here is the new interface:
        of the same "color" as the user mapping of the page.  Sparc64
        for example, uses this technique.
 
-       The "address" parameter tells the virtual address where the
-       user will ultimately have this page mapped.
+       The 'addr' parameter tells the virtual address where the
+       user will ultimately have this page mapped, and the 'page'
+       parameter gives a pointer to the struct page of the target.
 
        If D-cache aliasing is not an issue, these two routines may
        simply call memcpy/memset directly and do nothing more.
@@ -363,5 +337,5 @@ Here is the new interface:
 
   void flush_icache_page(struct vm_area_struct *vma, struct page *page)
        All the functionality of flush_icache_page can be implemented in
-       flush_dcache_page and update_mmu_cache. In 2.5 the hope is to
+       flush_dcache_page and update_mmu_cache. In 2.7 the hope is to
        remove this interface completely.
index 49114de8189603508650f1997a225c405f365aa2..0d38a16385ffb9503df10a02325db43deb0a30ad 100644 (file)
@@ -251,7 +251,6 @@ put_gate_page (struct page *page, unsigned long address)
                        pte_unmap(pte);
                        goto out;
                }
-               flush_page_to_ram(page);
                set_pte(pte, mk_pte(page, PAGE_GATE));
                pte_unmap(pte);
        }
index 542fd4f44fdc7036cf686500ba28e1c62b28d7a0..4d69a9e59fed733a8d788187117b8421ad5784a9 100644 (file)
@@ -195,7 +195,7 @@ int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
                        }
                        err = copy_from_user(kaddr + offset, (char *)A(str),
                                             bytes_to_copy);
-                       flush_page_to_ram(page);
+                       flush_dcache_page(page);
                        kunmap(page);
 
                        if (err)
index 310e4f47b70022b85f9320f2b617dde3995ddf10..011b648aeccb31b2b63a211d65c1f7c88856759d 100644 (file)
@@ -183,7 +183,6 @@ static int copy_strings32(int argc, u32 *argv, struct linux_binprm *bprm)
                        }
                        err = copy_from_user(kaddr + offset, (char *)A(str), bytes_to_copy);
                        flush_dcache_page(page);
-                       flush_page_to_ram(page);
                        kunmap(page);
 
                        if (err)
index 8f30bca0f2a5015ec84e5dfc7489c972110c160d..5cab55ad74c4a6abab0b3acf25e350e42d9e1b1b 100644 (file)
@@ -2077,7 +2077,6 @@ static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
 
                        err = copy_from_user(kaddr + offset, (char *)A(str),
                                             bytes_to_copy);
-                       flush_page_to_ram(page);
                        kunmap((unsigned long)kaddr);
 
                        if (err)
index 22db7fb7583da272270f4b579cf90577f838e4c8..f1b62d186cfb4d5e814b295b02028d061f4c7391 100644 (file)
@@ -1888,7 +1888,6 @@ static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
 
                        err = copy_from_user(kaddr + offset, (char *)A(str),
                                             bytes_to_copy);
-                       flush_page_to_ram(page);
                        kunmap(page);
 
                        if (err)
index 409ab7469996db3b25b27ce857a8a3bf899e8dc7..5189b1a352a75cea5df7b698adffd4497a7d729e 100644 (file)
@@ -1378,7 +1378,6 @@ static int elf_core_dump(long signr, struct pt_regs * regs, struct file * file)
                                        flush_cache_page(vma, addr);
                                        kaddr = kmap(page);
                                        DUMP_WRITE(kaddr, PAGE_SIZE);
-                                       flush_page_to_ram(page);
                                        kunmap(page);
                                }
                                page_cache_release(page);
index 24e8bc0c449aab0dfd35e8a1a73a26018074416e..455da3c362e5a78000ddfe93935144235ab7e0e8 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -314,7 +314,6 @@ void put_dirty_page(struct task_struct * tsk, struct page *page, unsigned long a
        }
        lru_cache_add_active(page);
        flush_dcache_page(page);
-       flush_page_to_ram(page);
        set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, PAGE_COPY))));
        pte_chain = page_add_rmap(page, pte, pte_chain);
        pte_unmap(pte);
index f04d7579fde7ac237d6287ea1583f5047420b6b5..1604d6cd22df1f92bf3616b6585b1152301c81dd 100644 (file)
@@ -9,7 +9,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 
 /* Note that the following two definitions are _highly_ dependent
index 1ed553bc0aa8f9dbf821a004313a39c4d19201a4..47c8125fa7191e8402cfe942caa5430712aa12ac 100644 (file)
@@ -13,7 +13,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma,start,end)       do { } while (0)
 #define flush_cache_page(vma,vmaddr)           do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 
 #define invalidate_dcache_range(start,end)     do { } while (0)
 #define clean_dcache_range(start,end)          do { } while (0)
index 216987fe30ef216430f85e6653a4835eb198bdd6..4bc1a79e72d3c7000cefd0ca5c4b169a770ad5ec 100644 (file)
        cpu_cache_clean_invalidate_range((unsigned long)start, \
                                         ((unsigned long)start) + size, 0);
 
-/*
- * This is an obsolete interface; the functionality that was provided by this
- * function is now merged into our flush_dcache_page, flush_icache_page,
- * copy_user_page and clear_user_page functions.
- */
-#define flush_page_to_ram(page)        do { } while (0)
-
 /*
  * flush_dcache_page is used when the kernel has written to the page
  * cache page at virtual address page->virtual.
index 828bf46fa2ff147b6e0535747a683d3d0cbc9505..d3ffca513750eb88290a26316353175f1eed2cc1 100644 (file)
@@ -121,7 +121,6 @@ extern void paging_init(void);
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                 do { } while (0)
 #define flush_icache_range(start, end)          do { } while (0)
 #define flush_icache_page(vma,pg)               do { } while (0)
index 319e65a7047f33e735571142c5e8f316bef60b0a..adc632b97542f16286289f6be8827a71caa841f7 100644 (file)
@@ -9,7 +9,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 #define flush_icache_range(start, end)         do { } while (0)
 #define flush_icache_page(vma,pg)              do { } while (0)
index 51c4780d875ab50f207137a7ddb15ece46c70886..0fa5ae0c6416132481a3ac176a0b83c136f61985 100644 (file)
@@ -20,7 +20,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_icache_page(vma,page)            do { } while (0)
 
 #define flush_dcache_page(page)                        \
index 078523b767ba3a3d92d2f6490355496dc445183b..e1931fac4391b3ec712eebda35809240ad08f630 100644 (file)
@@ -106,7 +106,6 @@ extern inline void flush_cache_page(struct vm_area_struct *vma,
 
 /* Push the page at kernel virtual address and clear the icache */
 /* RZ: use cpush %bc instead of cpush %dc, cinv %ic */
-#define flush_page_to_ram(page) __flush_page_to_ram(page_address(page))
 extern inline void __flush_page_to_ram(void *vaddr)
 {
        if (CPU_IS_040_OR_060) {
@@ -125,7 +124,7 @@ extern inline void __flush_page_to_ram(void *vaddr)
        }
 }
 
-#define flush_dcache_page(page)                        do { } while (0)
+#define flush_dcache_page(page)        __flush_page_to_ram(page_address(page))
 #define flush_icache_page(vma,pg)              do { } while (0)
 #define flush_icache_user_range(vma,pg,adr,len)        do { } while (0)
 
index 8343b13441892efabd4b7eacda00fc44b4573ed2..293d9fef9603db19015eb28186728e3940df4cab 100644 (file)
@@ -79,8 +79,14 @@ static inline void clear_page(void *page)
 #define copy_page(to,from)     memcpy((to), (from), PAGE_SIZE)
 #endif
 
-#define clear_user_page(page, vaddr, pg)       clear_page(page)
-#define copy_user_page(to, from, vaddr, pg)    copy_page(to, from)
+#define clear_user_page(addr, vaddr, page)     \
+       do {    clear_page(addr);               \
+               flush_dcache_page(page);        \
+       } while (0)
+#define copy_user_page(to, from, vaddr, page)  \
+       do {    copy_page(to, from);            \
+               flush_dcache_page(page);        \
+       } while (0)
 
 /*
  * These are used to make use of C type-checking..
index fe212d80335874fc8427ab2549ee96d60588874a..dfa537d547b187e59d1efba166e06f31c5b2e39a 100644 (file)
@@ -10,7 +10,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_range(start,len)          do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 #define flush_icache_range(start,len)          __flush_cache_all()
index 5cd2c52cb14fe91ff1aa183b62025ab61297cf3e..015ebf1f9aab98b42073e7693442b122a75a9f21 100644 (file)
@@ -25,8 +25,15 @@ 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_user_page(addr, vaddr, page)     \
+       do {    clear_page(addr);               \
+               flush_dcache_page(page);        \
+       } while (0)
+#define copy_user_page(to, from, vaddr, page)  \
+       do {    copy_page(to, from);            \
+               flush_dcache_page(page);        \
+       } while (0)
 
 /*
  * These are used to make use of C type-checking..
index 8a0fb426172fd53d1c8e57cf9c4fabe0832a3b92..0ba782b65479ef9dbb7f9d1616420e4be45d23fb 100644 (file)
@@ -24,7 +24,6 @@
  *  - flush_cache_mm(mm) flushes the specified mm context's cache lines
  *  - flush_cache_page(mm, vmaddr) flushes a single page
  *  - flush_cache_range(vma, start, end) flushes a range of pages
- *  - flush_page_to_ram(page) write back kernel page to ram
  *  - flush_icache_range(start, end) flush a range of instructions
  */
 extern void (*_flush_cache_all)(void);
@@ -39,15 +38,13 @@ extern void (*_flush_icache_range)(unsigned long start, unsigned long end);
 extern void (*_flush_icache_page)(struct vm_area_struct *vma,
                                   struct page *page);
 
-#define flush_dcache_page(page)                        do { } while (0)
-
 #define flush_cache_all()              _flush_cache_all()
 #define __flush_cache_all()            ___flush_cache_all()
 #define flush_cache_mm(mm)             _flush_cache_mm(mm)
 #define flush_cache_range(vma,start,end) _flush_cache_range(vma,start,end)
 #define flush_cache_page(vma,page)     _flush_cache_page(vma, page)
 #define flush_cache_sigtramp(addr)     _flush_cache_sigtramp(addr)
-#define flush_page_to_ram(page)                _flush_page_to_ram(page)
+#define flush_dcache_page(page)                _flush_page_to_ram(page)
 
 #define flush_icache_range(start, end) _flush_icache_range(start,end)
 #define flush_icache_page(vma, page)   _flush_icache_page(vma, page)
index 872855cea66ba250a6d8ed42b7df8d583a364402..7678ef9de85d7a9de056d3a0dbf7c89e38edc844 100644 (file)
@@ -25,8 +25,15 @@ 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_user_page(addr, vaddr, page)     \
+       do {    clear_page(addr);               \
+               flush_dcache_page(page);        \
+       } while (0)
+#define copy_user_page(to, from, vaddr, page)  \
+       do {    copy_page(to, from);            \
+               flush_dcache_page(page);        \
+       } while (0)
 
 /*
  * These are used to make use of C type-checking..
index b47b116821356eb099fbb32b43bc07143340941a..01d611ef60750a72b9e335e18582e1a567bd427b 100644 (file)
@@ -25,7 +25,6 @@
  *  - flush_cache_mm(mm) flushes the specified mm context's cache lines
  *  - flush_cache_page(mm, vmaddr) flushes a single page
  *  - flush_cache_range(vma, start, end) flushes a range of pages
- *  - flush_page_to_ram(page) write back kernel page to ram
  */
 extern void (*_flush_cache_mm)(struct mm_struct *mm);
 extern void (*_flush_cache_range)(struct vm_area_struct *vma, unsigned long start,
@@ -34,14 +33,12 @@ extern void (*_flush_cache_page)(struct vm_area_struct *vma, unsigned long page)
 extern void (*_flush_page_to_ram)(struct page * page);
 
 #define flush_cache_all()              do { } while(0)
-#define flush_dcache_page(page)                do { } while (0)
 
 #ifndef CONFIG_CPU_R10000
 #define flush_cache_mm(mm)             _flush_cache_mm(mm)
 #define flush_cache_range(vma,start,end) _flush_cache_range(vma,start,end)
 #define flush_cache_page(vma,page)     _flush_cache_page(vma, page)
-#define flush_page_to_ram(page)                _flush_page_to_ram(page)
-
+#define flush_dcache_page(page)                _flush_page_to_ram(page)
 #define flush_icache_range(start, end) _flush_cache_l1()
 #define flush_icache_user_range(vma, page, addr, len)  \
                                        flush_icache_page((vma), (page))
@@ -66,7 +63,7 @@ extern void andes_flush_icache_page(unsigned long);
 #define flush_cache_mm(mm)             do { } while(0)
 #define flush_cache_range(vma,start,end) do { } while(0)
 #define flush_cache_page(vma,page)     do { } while(0)
-#define flush_page_to_ram(page)                do { } while(0)
+#define flush_dcache_page(page)                do { } while(0)
 #define flush_icache_range(start, end) _flush_cache_l1()
 #define flush_icache_user_range(vma, page, addr, len)  \
                                        flush_icache_page((vma), (page))
index cb9e13b3d1bd52a5c0dfdb094ebf37c09f3dce53..5392339e549bd33222101767310d71ea156f699a 100644 (file)
 #define flush_kernel_dcache_range(start,size) \
        flush_kernel_dcache_range_asm((start), (start)+(size));
 
-static inline void
-flush_page_to_ram(struct page *page)
-{
-}
-
 extern void flush_cache_all_local(void);
 
 static inline void cacheflush_h_tmp_function(void *dummy)
index e18446b38a6537b201d98813e1c2ea7cd216509f..07ff115090ca68aee8535fbcc601edc259aa8e63 100644 (file)
@@ -23,7 +23,6 @@
 #define flush_cache_mm(mm)             do { } while (0)
 #define flush_cache_range(vma, a, b)   do { } while (0)
 #define flush_cache_page(vma, p)       do { } while (0)
-#define flush_page_to_ram(page)                do { } while (0)
 #define flush_icache_page(vma, page)   do { } while (0)
 
 extern void flush_dcache_page(struct page *page);
index 9a54101c45466997728512dab954fe856cd1880b..78d06ab52f63c87f04096e9543cbcdbeb68d7653 100644 (file)
@@ -13,7 +13,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_icache_page(vma, page)           do { } while (0)
 
 extern void flush_dcache_page(struct page *page);
index 29b50e24448df0a9826dfd3e3d3d5480a6ac308a..3c5416fe21583d28a2dd26e74410f1cf35c3e126 100644 (file)
@@ -9,7 +9,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 #define flush_icache_range(start, end)         do { } while (0)
 #define flush_icache_page(vma,pg)              do { } while (0)
index ac4e714e21d705475ad4101c5dc007d8b13e97f1..80be206eb4a52ce81d96c4e5fa2a88deb13a8141 100644 (file)
@@ -9,7 +9,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 #define flush_icache_range(start, end)         do { } while (0)
 #define flush_icache_page(vma,pg)              do { } while (0)
index ce110d76fcc891656faaef8b8ba5b62d3c7ff9b1..697d4604d6ab88b0423ac8e6e86bd7d2a15d341c 100644 (file)
@@ -26,7 +26,6 @@ extern void paging_init(void);
  *  - flush_cache_range(vma, start, end) flushes a range of pages
  *
  *  - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache
- *  - flush_page_to_ram(page) write back kernel page to ram
  *  - flush_icache_range(start, end) flushes(invalidates) a range for icache
  *  - flush_icache_page(vma, pg) flushes(invalidates) a page for icache
  *
@@ -37,7 +36,6 @@ extern void paging_init(void);
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 #define flush_icache_range(start, end)         do { } while (0)
 #define flush_icache_page(vma,pg)              do { } while (0)
@@ -63,7 +61,6 @@ extern void flush_dcache_page(struct page *pg);
 extern void flush_icache_range(unsigned long start, unsigned long end);
 extern void flush_cache_sigtramp(unsigned long addr);
 
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_icache_page(vma,pg)              do { } while (0)
 #define flush_icache_user_range(vma,pg,adr,len)        do { } while (0)
 
index 69f8bcff015547bce842046147c77cf53f781f9c..e2e0bc4166ac659d7a4c4dc0fb7a80f89ecff5b5 100644 (file)
@@ -64,7 +64,6 @@ BTFIXUPDEF_CALL(void, flush_sig_insns, struct mm_struct *, unsigned long)
 
 extern void sparc_flush_page_to_ram(struct page *page);
 
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        sparc_flush_page_to_ram(page)
 
 #endif /* _SPARC_CACHEFLUSH_H */
index 6d3d307662edf18567852af175ef4d9f92ba06f5..6175a244513f3d395f7a4ad36da3d4bd0b0963b8 100644 (file)
@@ -50,7 +50,4 @@ extern void smp_flush_cache_all(void);
 
 extern void flush_dcache_page(struct page *page);
 
-/* This is unnecessary on the SpitFire since D-CACHE is write-through. */
-#define flush_page_to_ram(page)                        do { } while (0)
-
 #endif /* _SPARC64_CACHEFLUSH_H */
index f0752d11241cc701d860ccb74912330d4667c9d3..3584a7ee9f147c650c991669da404cf528efea6c 100644 (file)
@@ -29,7 +29,6 @@
 #define flush_cache_mm(mm)                     ((void)0)
 #define flush_cache_range(vma, start, end)     ((void)0)
 #define flush_cache_page(vma, vmaddr)          ((void)0)
-#define flush_page_to_ram(page)                        ((void)0)
 #define flush_dcache_page(page)                        ((void)0)
 #define flush_icache()                         ((void)0)
 #define flush_icache_range(start, end)         ((void)0)
index 3b02fc8348c05a856083bd87f87bc043d9845101..bab18618fa8130a56478d99532e85d7a3ab51b03 100644 (file)
@@ -62,7 +62,6 @@ extern void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma,
                                                 unsigned long adr, int len);
 extern void nb85e_cache_flush_sigtramp (unsigned long addr);
 
-#define flush_page_to_ram(x)   ((void)0)
 #define flush_cache_all                nb85e_cache_flush_all
 #define flush_cache_mm         nb85e_cache_flush_mm
 #define flush_cache_range      nb85e_cache_flush_range
index aa267410f2f60d3e340b375e4cd943a21554cc72..06085b0c043e3a9a6abb678bdde573da89f8738a 100644 (file)
 #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, pg)       clear_page (page)
-#define copy_user_page(to, from, vaddr,pg)     copy_page (to, from)
+#define clear_user_page(addr, vaddr, page)     \
+       do {    clear_page(addr);               \
+               flush_dcache_page(page);        \
+       } while (0)
+#define copy_user_page(to, from, vaddr, page)  \
+       do {    copy_page(to, from);            \
+               flush_dcache_page(page);        \
+       } while (0)
 
 #ifdef STRICT_MM_TYPECHECKS
 /*
index d2e56263a883fea921f1b448ee5cf0e1c743b11e..c4d74b23326c770ed678789edfd471d0683911b4 100644 (file)
@@ -9,7 +9,6 @@
 #define flush_cache_mm(mm)                     do { } while (0)
 #define flush_cache_range(vma, start, end)     do { } while (0)
 #define flush_cache_page(vma, vmaddr)          do { } while (0)
-#define flush_page_to_ram(page)                        do { } while (0)
 #define flush_dcache_page(page)                        do { } while (0)
 #define flush_icache_range(start, end)         do { } while (0)
 #define flush_icache_page(vma,pg)              do { } while (0)
index 8800a35efe7473bab7e9ff373fb6fd114f1eaedc..3bc7bcb3c2526bce49b01c5cf5c149796314d277 100644 (file)
@@ -67,7 +67,6 @@ static inline void memclear_highpage_flush(struct page *page, unsigned int offse
        kaddr = kmap_atomic(page, KM_USER0);
        memset((char *)kaddr + offset, 0, size);
        flush_dcache_page(page);
-       flush_page_to_ram(page);
        kunmap_atomic(kaddr, KM_USER0);
 }
 
index a971c2a431859bbe0a93ba59ba210210cb1655ef..34527fc3df121d7205fe7486972152b20abba90a 100644 (file)
@@ -179,14 +179,18 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, in
 
                flush_cache_page(vma, addr);
 
+               /*
+                * FIXME!  We used to have flush_page_to_ram() in here, but
+                * that was wrong.  davem says we need a new per-arch primitive
+                * to handle this correctly.
+                */
+
                maddr = kmap(page);
                if (write) {
                        memcpy(maddr + offset, buf, bytes);
-                       flush_page_to_ram(page);
                        flush_icache_user_range(vma, page, addr, bytes);
                } else {
                        memcpy(buf, maddr + offset, bytes);
-                       flush_page_to_ram(page);
                }
                kunmap(page);
                page_cache_release(page);
index 071171245d4ae65fb1615a84c3222d73eee1f973..884a9f50c6fecb4793c80a2b5c9f4274546aade1 100644 (file)
@@ -1008,11 +1008,9 @@ retry_find:
 
 success:
        /*
-        * Found the page and have a reference on it, need to check sharing
-        * and possibly copy it over to another page..
+        * Found the page and have a reference on it.
         */
        mark_page_accessed(page);
-       flush_page_to_ram(page);
        return page;
 
 no_cached_page:
@@ -1124,12 +1122,9 @@ retry_find:
 
 success:
        /*
-        * Found the page and have a reference on it, need to check sharing
-        * and possibly copy it over to another page..
+        * Found the page and have a reference on it.
         */
        mark_page_accessed(page);
-       flush_page_to_ram(page);
-
        return page;
 
 no_cached_page:
index 06270194ee2f0861492d71620722c864b35f0168..663fa2ce7f209149ade4d91d1a1a13c7562a0150 100644 (file)
@@ -78,7 +78,6 @@ int install_page(struct mm_struct *mm, struct vm_area_struct *vma,
        flush = zap_pte(mm, vma, addr, pte);
 
        mm->rss++;
-       flush_page_to_ram(page);
        flush_icache_page(vma, page);
        set_pte(pte, mk_pte(page, prot));
        pte_chain = page_add_rmap(page, pte, pte_chain);
index 93b6ca46e84b153c7c85157b8916e1bd51ba4666..e76721ba9c0664d132af72d0706eef16ff2f02f3 100644 (file)
@@ -916,7 +916,6 @@ static inline void break_cow(struct vm_area_struct * vma, struct page * new_page
                pte_t *page_table)
 {
        invalidate_vcache(address, vma->vm_mm, new_page);
-       flush_page_to_ram(new_page);
        flush_cache_page(vma, address);
        establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot))));
 }
@@ -1206,7 +1205,6 @@ static int do_swap_page(struct mm_struct * mm,
                pte = pte_mkdirty(pte_mkwrite(pte));
        unlock_page(page);
 
-       flush_page_to_ram(page);
        flush_icache_page(vma, page);
        set_pte(page_table, pte);
        pte_chain = page_add_rmap(page, page_table, pte_chain);
@@ -1271,7 +1269,6 @@ do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
                        goto out;
                }
                mm->rss++;
-               flush_page_to_ram(page);
                entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
                lru_cache_add_active(page);
                mark_page_accessed(page);
@@ -1365,7 +1362,6 @@ do_no_page(struct mm_struct *mm, struct vm_area_struct *vma,
        /* Only go through if we didn't race with anybody else... */
        if (pte_none(*page_table)) {
                ++mm->rss;
-               flush_page_to_ram(new_page);
                flush_icache_page(vma, new_page);
                entry = mk_pte(new_page, vma->vm_page_prot);
                if (write_access)
index b19cfc88b363fc6526bd667560747a04196353e2..ea9ca8795beb2e9f45080a689cb5a21e494c116a 100644 (file)
@@ -832,7 +832,6 @@ repeat:
                        shmem_swp_unmap(entry);
                        delete_from_swap_cache(swappage);
                        spin_unlock(&info->lock);
-                       flush_page_to_ram(swappage);
                        copy_highpage(filepage, swappage);
                        unlock_page(swappage);
                        page_cache_release(swappage);
@@ -953,7 +952,6 @@ struct page *shmem_nopage(struct vm_area_struct *vma, unsigned long address, int
                return (error == -ENOMEM)? NOPAGE_OOM: NOPAGE_SIGBUS;
 
        mark_page_accessed(page);
-       flush_page_to_ram(page);
        return page;
 }
 
@@ -981,7 +979,6 @@ static int shmem_populate(struct vm_area_struct *vma,
                        return err;
                if (page) {
                        mark_page_accessed(page);
-                       flush_page_to_ram(page);
                        err = install_page(mm, vma, addr, page, prot);
                        if (err) {
                                page_cache_release(page);
index 8426b3e974649ea85bb695c6ba2c8a0e258e6af2..2271d23d7e7ba454a8e78f6a87283d36012314d8 100644 (file)
@@ -641,7 +641,6 @@ static int try_to_unuse(unsigned int type)
                shmem = 0;
                swcount = *swap_map;
                if (swcount > 1) {
-                       flush_page_to_ram(page);
                        if (start_mm == &init_mm)
                                shmem = shmem_unuse(entry, page);
                        else