All of lore.kernel.org
 help / color / mirror / Atom feed
From: Reza Arbab <arbab@linux.vnet.ibm.com>
To: Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>
Cc: linuxppc-dev@lists.ozlabs.org,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	Balbir Singh <bsingharora@gmail.com>,
	Alistair Popple <apopple@au1.ibm.com>
Subject: [PATCH v3 5/5] powerpc/mm: unstub radix__vmemmap_remove_mapping()
Date: Thu, 15 Dec 2016 13:50:43 -0600	[thread overview]
Message-ID: <1481831443-22761-6-git-send-email-arbab@linux.vnet.ibm.com> (raw)
In-Reply-To: <1481831443-22761-1-git-send-email-arbab@linux.vnet.ibm.com>

Use remove_pagetable() and friends for radix vmemmap removal.

We do not require the special-case handling of vmemmap done in the x86
versions of these functions. This is because vmemmap_free() has already
freed the mapped pages, and calls us with an aligned address range.

So, add a few failsafe WARNs, but otherwise the code to remove linear
mappings is already sufficient for vmemmap.

Signed-off-by: Reza Arbab <arbab@linux.vnet.ibm.com>
---
 arch/powerpc/mm/pgtable-radix.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index 315237c..9d1d51e 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -532,6 +532,15 @@ static void remove_pte_table(pte_t *pte_start, unsigned long addr,
 		if (!pte_present(*pte))
 			continue;
 
+		if (!PAGE_ALIGNED(addr) || !PAGE_ALIGNED(next)) {
+			/*
+			 * The vmemmap_free() and remove_section_mapping()
+			 * codepaths call us with aligned addresses.
+			 */
+			WARN_ONCE(1, "%s: unaligned range\n", __func__);
+			continue;
+		}
+
 		spin_lock(&init_mm.page_table_lock);
 		pte_clear(&init_mm, addr, pte);
 		spin_unlock(&init_mm.page_table_lock);
@@ -555,6 +564,12 @@ static void remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
 			continue;
 
 		if (map_page_size == PMD_SIZE) {
+			if (!IS_ALIGNED(addr, PMD_SIZE) ||
+			    !IS_ALIGNED(next, PMD_SIZE)) {
+				WARN_ONCE(1, "%s: unaligned range\n", __func__);
+				continue;
+			}
+
 			spin_lock(&init_mm.page_table_lock);
 			pte_clear(&init_mm, addr, (pte_t *)pmd);
 			spin_unlock(&init_mm.page_table_lock);
@@ -583,6 +598,12 @@ static void remove_pud_table(pud_t *pud_start, unsigned long addr,
 			continue;
 
 		if (map_page_size == PUD_SIZE) {
+			if (!IS_ALIGNED(addr, PUD_SIZE) ||
+			    !IS_ALIGNED(next, PUD_SIZE)) {
+				WARN_ONCE(1, "%s: unaligned range\n", __func__);
+				continue;
+			}
+
 			spin_lock(&init_mm.page_table_lock);
 			pte_clear(&init_mm, addr, (pte_t *)pud);
 			spin_unlock(&init_mm.page_table_lock);
@@ -662,7 +683,7 @@ int __meminit radix__vmemmap_create_mapping(unsigned long start,
 #ifdef CONFIG_MEMORY_HOTPLUG
 void radix__vmemmap_remove_mapping(unsigned long start, unsigned long page_size)
 {
-	/* FIXME!! intel does more. We should free page tables mapping vmemmap ? */
+	remove_pagetable(start, start + page_size, page_size);
 }
 #endif
 #endif
-- 
1.8.3.1

  parent reply	other threads:[~2016-12-15 19:50 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-15 19:50 [PATCH v3 0/5] powerpc/mm: enable memory hotplug on radix Reza Arbab
2016-12-15 19:50 ` [PATCH v3 1/5] powerpc/mm: set the radix linear page mapping size Reza Arbab
2016-12-19  8:58   ` Aneesh Kumar K.V
2016-12-19 20:53     ` Benjamin Herrenschmidt
2016-12-20  2:02       ` Aneesh Kumar K.V
2016-12-15 19:50 ` [PATCH v3 2/5] powerpc/mm: refactor {create, remove}_section_mapping() Reza Arbab
2016-12-19  9:00   ` Aneesh Kumar K.V
2016-12-19 18:00     ` [PATCH v3 2/5] powerpc/mm: refactor {create,remove}_section_mapping() Reza Arbab
2016-12-20  5:26   ` Balbir Singh
2016-12-15 19:50 ` [PATCH v3 3/5] powerpc/mm: add radix__create_section_mapping() Reza Arbab
2016-12-19  9:04   ` Aneesh Kumar K.V
2016-12-19 18:06     ` Reza Arbab
2016-12-21  7:03     ` Anshuman Khandual
2016-12-20  6:28   ` Balbir Singh
2016-12-20 15:32     ` Reza Arbab
2016-12-15 19:50 ` [PATCH v3 4/5] powerpc/mm: add radix__remove_section_mapping() Reza Arbab
2016-12-19  9:48   ` Aneesh Kumar K.V
2016-12-19 18:11     ` Reza Arbab
2016-12-19 20:59     ` Benjamin Herrenschmidt
2016-12-15 19:50 ` Reza Arbab [this message]
2016-12-16 14:38 ` [PATCH v3 0/5] powerpc/mm: enable memory hotplug on radix Balbir Singh
2016-12-19 17:58   ` Reza Arbab
2016-12-21  6:54     ` Anshuman Khandual

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=1481831443-22761-6-git-send-email-arbab@linux.vnet.ibm.com \
    --to=arbab@linux.vnet.ibm.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=apopple@au1.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=bsingharora@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.