summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@digeo.com>2003-04-12 12:55:02 -0700
committerJames Bottomley <jejb@raven.il.steeleye.com>2003-04-12 12:55:02 -0700
commitedf20d3a05e5099347f58bd7ddf729a6489340c7 (patch)
tree37078e37a3c1b7728cc22eb32849341a48391993
parent831cbe240825abad390981d90b18eedec8f419b5 (diff)
[PATCH] Remove flush_page_to_ram()
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.
-rw-r--r--Documentation/cachetlb.txt54
-rw-r--r--arch/ia64/mm/init.c1
-rw-r--r--arch/mips64/kernel/linux32.c2
-rw-r--r--arch/parisc/kernel/sys_parisc32.c1
-rw-r--r--arch/ppc64/kernel/sys_ppc32.c1
-rw-r--r--arch/s390x/kernel/linux32.c1
-rw-r--r--fs/binfmt_elf.c1
-rw-r--r--fs/exec.c1
-rw-r--r--include/asm-alpha/cacheflush.h1
-rw-r--r--include/asm-arm/proc-armo/cache.h1
-rw-r--r--include/asm-arm/proc-armv/cache.h7
-rw-r--r--include/asm-cris/pgtable.h1
-rw-r--r--include/asm-i386/cacheflush.h1
-rw-r--r--include/asm-ia64/cacheflush.h1
-rw-r--r--include/asm-m68k/cacheflush.h3
-rw-r--r--include/asm-m68k/page.h10
-rw-r--r--include/asm-m68knommu/cacheflush.h1
-rw-r--r--include/asm-mips/page.h11
-rw-r--r--include/asm-mips/pgtable.h5
-rw-r--r--include/asm-mips64/page.h11
-rw-r--r--include/asm-mips64/pgtable.h7
-rw-r--r--include/asm-parisc/cacheflush.h5
-rw-r--r--include/asm-ppc/cacheflush.h1
-rw-r--r--include/asm-ppc64/cacheflush.h1
-rw-r--r--include/asm-s390/cacheflush.h1
-rw-r--r--include/asm-s390x/cacheflush.h1
-rw-r--r--include/asm-sh/pgtable.h3
-rw-r--r--include/asm-sparc/cacheflush.h1
-rw-r--r--include/asm-sparc64/cacheflush.h3
-rw-r--r--include/asm-v850/cacheflush.h1
-rw-r--r--include/asm-v850/nb85e_cache.h1
-rw-r--r--include/asm-v850/page.h10
-rw-r--r--include/asm-x86_64/cacheflush.h1
-rw-r--r--include/linux/highmem.h1
-rw-r--r--kernel/ptrace.c8
-rw-r--r--mm/filemap.c9
-rw-r--r--mm/fremap.c1
-rw-r--r--mm/memory.c4
-rw-r--r--mm/shmem.c3
-rw-r--r--mm/swapfile.c1
40 files changed, 61 insertions, 117 deletions
diff --git a/Documentation/cachetlb.txt b/Documentation/cachetlb.txt
index 0b105336b8ac..fc54aadc77ee 100644
--- a/Documentation/cachetlb.txt
+++ b/Documentation/cachetlb.txt
@@ -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.
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
index 49114de81896..0d38a16385ff 100644
--- a/arch/ia64/mm/init.c
+++ b/arch/ia64/mm/init.c
@@ -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);
}
diff --git a/arch/mips64/kernel/linux32.c b/arch/mips64/kernel/linux32.c
index 542fd4f44fdc..4d69a9e59fed 100644
--- a/arch/mips64/kernel/linux32.c
+++ b/arch/mips64/kernel/linux32.c
@@ -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)
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c
index 310e4f47b700..011b648aeccb 100644
--- a/arch/parisc/kernel/sys_parisc32.c
+++ b/arch/parisc/kernel/sys_parisc32.c
@@ -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)
diff --git a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c
index 8f30bca0f2a5..5cab55ad74c4 100644
--- a/arch/ppc64/kernel/sys_ppc32.c
+++ b/arch/ppc64/kernel/sys_ppc32.c
@@ -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)
diff --git a/arch/s390x/kernel/linux32.c b/arch/s390x/kernel/linux32.c
index 22db7fb7583d..f1b62d186cfb 100644
--- a/arch/s390x/kernel/linux32.c
+++ b/arch/s390x/kernel/linux32.c
@@ -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)
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 409ab7469996..5189b1a352a7 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -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);
diff --git a/fs/exec.c b/fs/exec.c
index 24e8bc0c449a..455da3c362e5 100644
--- 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);
diff --git a/include/asm-alpha/cacheflush.h b/include/asm-alpha/cacheflush.h
index f04d7579fde7..1604d6cd22df 100644
--- a/include/asm-alpha/cacheflush.h
+++ b/include/asm-alpha/cacheflush.h
@@ -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
diff --git a/include/asm-arm/proc-armo/cache.h b/include/asm-arm/proc-armo/cache.h
index 1ed553bc0aa8..47c8125fa719 100644
--- a/include/asm-arm/proc-armo/cache.h
+++ b/include/asm-arm/proc-armo/cache.h
@@ -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)
diff --git a/include/asm-arm/proc-armv/cache.h b/include/asm-arm/proc-armv/cache.h
index 216987fe30ef..4bc1a79e72d3 100644
--- a/include/asm-arm/proc-armv/cache.h
+++ b/include/asm-arm/proc-armv/cache.h
@@ -71,13 +71,6 @@
((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.
*
diff --git a/include/asm-cris/pgtable.h b/include/asm-cris/pgtable.h
index 828bf46fa2ff..d3ffca513750 100644
--- a/include/asm-cris/pgtable.h
+++ b/include/asm-cris/pgtable.h
@@ -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)
diff --git a/include/asm-i386/cacheflush.h b/include/asm-i386/cacheflush.h
index 319e65a7047f..adc632b97542 100644
--- a/include/asm-i386/cacheflush.h
+++ b/include/asm-i386/cacheflush.h
@@ -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)
diff --git a/include/asm-ia64/cacheflush.h b/include/asm-ia64/cacheflush.h
index 51c4780d875a..0fa5ae0c6416 100644
--- a/include/asm-ia64/cacheflush.h
+++ b/include/asm-ia64/cacheflush.h
@@ -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) \
diff --git a/include/asm-m68k/cacheflush.h b/include/asm-m68k/cacheflush.h
index 078523b767ba..e1931fac4391 100644
--- a/include/asm-m68k/cacheflush.h
+++ b/include/asm-m68k/cacheflush.h
@@ -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)
diff --git a/include/asm-m68k/page.h b/include/asm-m68k/page.h
index 8343b1344189..293d9fef9603 100644
--- a/include/asm-m68k/page.h
+++ b/include/asm-m68k/page.h
@@ -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..
diff --git a/include/asm-m68knommu/cacheflush.h b/include/asm-m68knommu/cacheflush.h
index fe212d803358..dfa537d547b1 100644
--- a/include/asm-m68knommu/cacheflush.h
+++ b/include/asm-m68knommu/cacheflush.h
@@ -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()
diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h
index 5cd2c52cb14f..015ebf1f9aab 100644
--- a/include/asm-mips/page.h
+++ b/include/asm-mips/page.h
@@ -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..
diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h
index 8a0fb426172f..0ba782b65479 100644
--- a/include/asm-mips/pgtable.h
+++ b/include/asm-mips/pgtable.h
@@ -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)
diff --git a/include/asm-mips64/page.h b/include/asm-mips64/page.h
index 872855cea66b..7678ef9de85d 100644
--- a/include/asm-mips64/page.h
+++ b/include/asm-mips64/page.h
@@ -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..
diff --git a/include/asm-mips64/pgtable.h b/include/asm-mips64/pgtable.h
index b47b11682135..01d611ef6075 100644
--- a/include/asm-mips64/pgtable.h
+++ b/include/asm-mips64/pgtable.h
@@ -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))
diff --git a/include/asm-parisc/cacheflush.h b/include/asm-parisc/cacheflush.h
index cb9e13b3d1bd..5392339e549b 100644
--- a/include/asm-parisc/cacheflush.h
+++ b/include/asm-parisc/cacheflush.h
@@ -18,11 +18,6 @@
#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)
diff --git a/include/asm-ppc/cacheflush.h b/include/asm-ppc/cacheflush.h
index e18446b38a65..07ff115090ca 100644
--- a/include/asm-ppc/cacheflush.h
+++ b/include/asm-ppc/cacheflush.h
@@ -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);
diff --git a/include/asm-ppc64/cacheflush.h b/include/asm-ppc64/cacheflush.h
index 9a54101c4546..78d06ab52f63 100644
--- a/include/asm-ppc64/cacheflush.h
+++ b/include/asm-ppc64/cacheflush.h
@@ -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);
diff --git a/include/asm-s390/cacheflush.h b/include/asm-s390/cacheflush.h
index 29b50e24448d..3c5416fe2158 100644
--- a/include/asm-s390/cacheflush.h
+++ b/include/asm-s390/cacheflush.h
@@ -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)
diff --git a/include/asm-s390x/cacheflush.h b/include/asm-s390x/cacheflush.h
index ac4e714e21d7..80be206eb4a5 100644
--- a/include/asm-s390x/cacheflush.h
+++ b/include/asm-s390x/cacheflush.h
@@ -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)
diff --git a/include/asm-sh/pgtable.h b/include/asm-sh/pgtable.h
index ce110d76fcc8..697d4604d6ab 100644
--- a/include/asm-sh/pgtable.h
+++ b/include/asm-sh/pgtable.h
@@ -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)
diff --git a/include/asm-sparc/cacheflush.h b/include/asm-sparc/cacheflush.h
index 69f8bcff0155..e2e0bc4166ac 100644
--- a/include/asm-sparc/cacheflush.h
+++ b/include/asm-sparc/cacheflush.h
@@ -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 */
diff --git a/include/asm-sparc64/cacheflush.h b/include/asm-sparc64/cacheflush.h
index 6d3d307662ed..6175a244513f 100644
--- a/include/asm-sparc64/cacheflush.h
+++ b/include/asm-sparc64/cacheflush.h
@@ -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 */
diff --git a/include/asm-v850/cacheflush.h b/include/asm-v850/cacheflush.h
index f0752d11241c..3584a7ee9f14 100644
--- a/include/asm-v850/cacheflush.h
+++ b/include/asm-v850/cacheflush.h
@@ -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)
diff --git a/include/asm-v850/nb85e_cache.h b/include/asm-v850/nb85e_cache.h
index 3b02fc8348c0..bab18618fa81 100644
--- a/include/asm-v850/nb85e_cache.h
+++ b/include/asm-v850/nb85e_cache.h
@@ -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
diff --git a/include/asm-v850/page.h b/include/asm-v850/page.h
index aa267410f2f6..06085b0c043e 100644
--- a/include/asm-v850/page.h
+++ b/include/asm-v850/page.h
@@ -40,8 +40,14 @@
#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
/*
diff --git a/include/asm-x86_64/cacheflush.h b/include/asm-x86_64/cacheflush.h
index d2e56263a883..c4d74b23326c 100644
--- a/include/asm-x86_64/cacheflush.h
+++ b/include/asm-x86_64/cacheflush.h
@@ -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)
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 8800a35efe74..3bc7bcb3c252 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -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);
}
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index a971c2a43185..34527fc3df12 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -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);
diff --git a/mm/filemap.c b/mm/filemap.c
index 071171245d4a..884a9f50c6fe 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -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:
diff --git a/mm/fremap.c b/mm/fremap.c
index 06270194ee2f..663fa2ce7f20 100644
--- a/mm/fremap.c
+++ b/mm/fremap.c
@@ -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);
diff --git a/mm/memory.c b/mm/memory.c
index 93b6ca46e84b..e76721ba9c06 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -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)
diff --git a/mm/shmem.c b/mm/shmem.c
index b19cfc88b363..ea9ca8795beb 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -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);
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 8426b3e97464..2271d23d7e7b 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -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