aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/arch/sh/mm/cache.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-10-13 11:18:34 +0900
committerPaul Mundt <lethal@linux-sh.org>2009-10-13 11:18:34 +0900
commit964f7e5a56814b32c727821de77d22bd7ef782bc (patch)
treef0413940c7e1dcb7a4dead52d0b04a0093ad39e9 /arch/sh/mm/cache.c
parentsh: update die() output. (diff)
downloadwireguard-linux-964f7e5a56814b32c727821de77d22bd7ef782bc.tar.xz
wireguard-linux-964f7e5a56814b32c727821de77d22bd7ef782bc.zip
sh: force dcache flush if dcache_dirty bit set.
This too follows the ARM change, given that the issue at hand applies to all platforms that implement lazy D-cache writeback. This fixes up the case when a page mapping disappears between the flush_dcache_page() call (when PG_dcache_dirty is set for the page) and the update_mmu_cache() call -- such as in the case of swap cache being freed early. This kills off the mapping test in update_mmu_cache() and switches to simply testing for PG_dcache_dirty. Reported-by: Nitin Gupta <ngupta@vflare.org> Reported-by: Hugh Dickins <hugh.dickins@tiscali.co.uk> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/mm/cache.c')
-rw-r--r--arch/sh/mm/cache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/sh/mm/cache.c b/arch/sh/mm/cache.c
index 35c37b7f717a..5e1091be9dc4 100644
--- a/arch/sh/mm/cache.c
+++ b/arch/sh/mm/cache.c
@@ -128,7 +128,7 @@ void __update_cache(struct vm_area_struct *vma,
return;
page = pfn_to_page(pfn);
- if (pfn_valid(pfn) && page_mapping(page)) {
+ if (pfn_valid(pfn)) {
int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags);
if (dirty) {
unsigned long addr = (unsigned long)page_address(page);