]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Add Peter Zijlstra's late fixes.
authorChris Wright <chrisw@sous-sol.org>
Wed, 10 Jan 2007 21:27:48 +0000 (13:27 -0800)
committerChris Wright <chrisw@sous-sol.org>
Wed, 10 Jan 2007 21:27:48 +0000 (13:27 -0800)
queue-2.6.19/fix-up-page_mkclean_one-virtual-caches-s390.patch [new file with mode: 0644]
queue-2.6.19/series

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 (file)
index 0000000..08a212e
--- /dev/null
@@ -0,0 +1,66 @@
+From c2fda5fed81eea077363b285b66eafce20dfd45a Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <a.p.zijlstra@chello.nl>
+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 <a.p.zijlstra@chello.nl>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+[chrisw: fold in d6e88e671ac1]
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ 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;
+ }
index 331660cb19754d0f11a28142fa34020642891b55..b87a649f33f50502787c2a93734043b179ce2295 100644 (file)
@@ -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