linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au,
	"Kirill A . Shutemov" <kirill@shutemov.name>
Cc: linuxppc-dev@lists.ozlabs.org, linux-mm@kvack.org,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Subject: [RFC PATCH 2/3] powerpc/mm: Implement pmdp_establish for ppc64
Date: Thu, 27 Jul 2017 14:07:55 +0530	[thread overview]
Message-ID: <20170727083756.32217-2-aneesh.kumar@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170727083756.32217-1-aneesh.kumar@linux.vnet.ibm.com>

We can now use this to set pmd page table entries to absolute values. THP
need to ensure that we always update pmd PTE entries such that we never mark
the pmd none. pmdp_establish helps in implementing that.

This doesn't flush the tlb. Based on the old_pmd value returned caller can
decide to call flush_pmd_tlb_range()

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/book3s/64/radix.h |  9 ++++++---
 arch/powerpc/mm/pgtable-book3s64.c         | 10 ++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/book3s/64/radix.h b/arch/powerpc/include/asm/book3s/64/radix.h
index cd481ab601b6..558fea3b2d22 100644
--- a/arch/powerpc/include/asm/book3s/64/radix.h
+++ b/arch/powerpc/include/asm/book3s/64/radix.h
@@ -131,7 +131,8 @@ static inline unsigned long __radix_pte_update(pte_t *ptep, unsigned long clr,
 	do {
 		pte = READ_ONCE(*ptep);
 		old_pte = pte_val(pte);
-		new_pte = (old_pte | set) & ~clr;
+		new_pte = old_pte & ~clr;
+		new_pte |= set;
 
 	} while (!pte_xchg(ptep, __pte(old_pte), __pte(new_pte)));
 
@@ -153,9 +154,11 @@ static inline unsigned long radix__pte_update(struct mm_struct *mm,
 
 		old_pte = __radix_pte_update(ptep, ~0ul, 0);
 		/*
-		 * new value of pte
+		 * new value of pte. We clear all the bits in clr mask
+		 * first and set the bits in set mask.
 		 */
-		new_pte = (old_pte | set) & ~clr;
+		new_pte = old_pte & ~clr;
+		new_pte |= set;
 		radix__flush_tlb_pte_p9_dd1(old_pte, mm, addr);
 		if (new_pte)
 			__radix_pte_update(ptep, 0, new_pte);
diff --git a/arch/powerpc/mm/pgtable-book3s64.c b/arch/powerpc/mm/pgtable-book3s64.c
index 0bb7f824ecdd..7100b0150a2a 100644
--- a/arch/powerpc/mm/pgtable-book3s64.c
+++ b/arch/powerpc/mm/pgtable-book3s64.c
@@ -45,6 +45,16 @@ int pmdp_set_access_flags(struct vm_area_struct *vma, unsigned long address,
 	return changed;
 }
 
+pmd_t pmdp_establish(struct vm_area_struct *vma, unsigned long addr,
+		     pmd_t *pmdp, pmd_t entry)
+{
+	long pmdval;
+
+	pmdval = pmd_hugepage_update(vma->vm_mm, addr, pmdp, ~0UL, pmd_val(entry));
+	return __pmd(pmdval);
+}
+
+
 int pmdp_test_and_clear_young(struct vm_area_struct *vma,
 			      unsigned long address, pmd_t *pmdp)
 {
-- 
2.13.3

  reply	other threads:[~2017-07-27  8:38 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-27  8:37 [RFC PATCH 1/3] powerpc/mm: update pmdp_invalidate to return old pmd value Aneesh Kumar K.V
2017-07-27  8:37 ` Aneesh Kumar K.V [this message]
2017-07-27 12:56   ` [RFC PATCH 2/3] powerpc/mm: Implement pmdp_establish for ppc64 Michal Hocko
2017-07-27 15:52     ` Aneesh Kumar K.V
2017-07-27  8:37 ` [RFC PATCH 3/3] mm/hugetlb: Remove pmd_huge_split_prepare Aneesh Kumar K.V
2017-07-27 10:50   ` Aneesh Kumar K.V
2017-07-27 12:57   ` Michal Hocko
2017-07-27 15:57     ` Aneesh Kumar K.V
2017-07-28  7:04       ` Michal Hocko
2017-07-27 12:54 ` [RFC PATCH 1/3] powerpc/mm: update pmdp_invalidate to return old pmd value Michal Hocko
2017-07-27 12:58   ` Kirill A. Shutemov
2017-07-27 15:48   ` Aneesh Kumar K.V
2017-07-28  7:01     ` Michal Hocko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170727083756.32217-2-aneesh.kumar@linux.vnet.ibm.com \
    --to=aneesh.kumar@linux.vnet.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=kirill@shutemov.name \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).