From: Chris Wright Date: Wed, 10 Jan 2007 21:27:48 +0000 (-0800) Subject: Add Peter Zijlstra's late fixes. X-Git-Tag: v2.6.19.2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d4b160dbcce2012728d273a91634ebb74f51af2e;p=thirdparty%2Fkernel%2Fstable-queue.git Add Peter Zijlstra's late fixes. --- diff --git a/queue-2.6.19/fix-up-page_mkclean_one-virtual-caches-s390.patch b/queue-2.6.19/fix-up-page_mkclean_one-virtual-caches-s390.patch new file mode 100644 index 00000000000..08a212e817a --- /dev/null +++ b/queue-2.6.19/fix-up-page_mkclean_one-virtual-caches-s390.patch @@ -0,0 +1,66 @@ +From c2fda5fed81eea077363b285b66eafce20dfd45a Mon Sep 17 00:00:00 2001 +From: Peter Zijlstra +Date: Fri, 22 Dec 2006 14:25:52 +0100 +Subject: [PATCH] Fix up page_mkclean_one(): virtual caches, s390 + + - add flush_cache_page() for all those virtual indexed cache + architectures. + + - handle s390. + +Signed-off-by: Peter Zijlstra +Signed-off-by: Linus Torvalds +[chrisw: fold in d6e88e671ac1] +Signed-off-by: Chris Wright +--- + mm/rmap.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +--- linux-2.6.19.1.orig/mm/rmap.c ++++ linux-2.6.19.1/mm/rmap.c +@@ -432,7 +432,7 @@ static int page_mkclean_one(struct page + { + struct mm_struct *mm = vma->vm_mm; + unsigned long address; +- pte_t *pte, entry; ++ pte_t *pte; + spinlock_t *ptl; + int ret = 0; + +@@ -444,17 +444,18 @@ static int page_mkclean_one(struct page + if (!pte) + goto out; + +- if (!pte_dirty(*pte) && !pte_write(*pte)) +- goto unlock; ++ if (pte_dirty(*pte) || pte_write(*pte)) { ++ pte_t entry; + +- entry = ptep_get_and_clear(mm, address, pte); +- entry = pte_mkclean(entry); +- entry = pte_wrprotect(entry); +- ptep_establish(vma, address, pte, entry); +- lazy_mmu_prot_update(entry); +- ret = 1; ++ flush_cache_page(vma, address, pte_pfn(*pte)); ++ entry = ptep_clear_flush(vma, address, pte); ++ entry = pte_wrprotect(entry); ++ entry = pte_mkclean(entry); ++ set_pte_at(mm, address, pte, entry); ++ lazy_mmu_prot_update(entry); ++ ret = 1; ++ } + +-unlock: + pte_unmap_unlock(pte, ptl); + out: + return ret; +@@ -489,6 +490,8 @@ int page_mkclean(struct page *page) + if (mapping) + ret = page_mkclean_file(mapping, page); + } ++ if (page_test_and_clear_dirty(page)) ++ ret = 1; + + return ret; + } diff --git a/queue-2.6.19/series b/queue-2.6.19/series index 331660cb197..b87a649f33f 100644 --- a/queue-2.6.19/series +++ b/queue-2.6.19/series @@ -48,3 +48,4 @@ netlabel-correctly-fill-in-unused-cipsov4-level-and-category-mappings.patch connector-some-fixes-for-ia64-unaligned-access-errors.patch fix-oom-killing-of-swapoff.patch fix-incorrect-user-space-access-locking-in-mincore.patch +fix-up-page_mkclean_one-virtual-caches-s390.patch