All of lore.kernel.org
 help / color / mirror / Atom feed
From: Balbir Singh <bsingharora@gmail.com>
To: Reza Arbab <arbab@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	linuxppc-dev@lists.ozlabs.org,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	Alistair Popple <apopple@au1.ibm.com>
Subject: Re: [PATCH v5 3/4] powerpc/mm: add radix__remove_section_mapping()
Date: Wed, 18 Jan 2017 06:52:36 +0530	[thread overview]
Message-ID: <20170118012236.GB10798@localhost.localdomain> (raw)
In-Reply-To: <20170117183620.y4kkxacuo6p7r5lb@arbab-vm>

On Tue, Jan 17, 2017 at 12:36:21PM -0600, Reza Arbab wrote:
> On Tue, Jan 17, 2017 at 12:52:51PM +0530, Balbir Singh wrote:
> > Shouldn't most of these functions have __meminit?
> 
> I don't think so. The mapping functions are __meminit, but the unmapping
> functions are completely within #ifdef CONFIG_MEMORY_HOTPLUG already.
> 
> > On Mon, Jan 16, 2017 at 01:07:45PM -0600, Reza Arbab wrote:
> > >  #ifdef CONFIG_MEMORY_HOTPLUG
> > > +static void free_pte_table(pte_t *pte_start, pmd_t *pmd)
> > > +{
> > > +	pte_t *pte;
> > > +	int i;
> > > +
> > > +	for (i = 0; i < PTRS_PER_PTE; i++) {
> > > +		pte = pte_start + i;
> > > +		if (!pte_none(*pte))
> > > +			return;
> > 
> > If !pte_none() we fail the hotplug? Or silently
> > leave the allocated pte's around. I guess this is
> > the same as x86
> 
> The latter--it's not a failure. If you provided remove_pagetable() an
> unaligned address range, there could be a pte left unremoved at either end.
>

OK.
 
> > > +static void remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
> > > +			     unsigned long end)
> > > +{
> > > +	unsigned long next;
> > > +	pte_t *pte_base;
> > > +	pmd_t *pmd;
> > > +
> > > +	pmd = pmd_start + pmd_index(addr);
> > > +	for (; addr < end; addr = next, pmd++) {
> > > +		next = pmd_addr_end(addr, end);
> > > +
> > > +		if (!pmd_present(*pmd))
> > > +			continue;
> > > +
> > > +		if (pmd_huge(*pmd)) {
> > > +			pte_clear(&init_mm, addr, (pte_t *)pmd);
> > 
> > pmd_clear()?
> 
> I used pte_clear() to mirror what happens in radix__map_kernel_page():
> 
> 		if (map_page_size == PMD_SIZE) {
> 			ptep = (pte_t *)pmdp;
> 			goto set_the_pte;
> 		}
> 
> 		[...]
> 
> 	set_the_pte:
> 		set_pte_at(&init_mm, ea, ptep, pfn_pte(pa >> PAGE_SHIFT, flags));
> 
> Would pmd_clear() be equivalent, since the pointer got set like a pte?

But we are still setting a pmdp. pmd_clear() will set the pmd to 0,
pte_clear() will go through the pte_update() mechanism which is expensive
IMHO and we may not need to do it.

> 
> > > +static void remove_pagetable(unsigned long start, unsigned long end)
> > > +{
> > > +	unsigned long addr, next;
> > > +	pud_t *pud_base;
> > > +	pgd_t *pgd;
> > > +
> > > +	spin_lock(&init_mm.page_table_lock);
> > > +
> > 
> > x86 does more granular lock acquisition only during
> > clearing the relevant entries. I suppose we don't have
> > to worry about it since its not fast path and frequent.
> 
> Yep. Ben thought the locking in remove_pte_table() was actually too
> granular, and Aneesh questioned what was being protected in the first place.
> So I left one lock/unlock in the outermost function for now.
>

Fair enough

Balbir Singh. 

  reply	other threads:[~2017-01-18  1:22 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-16 19:07 [PATCH v5 0/4] powerpc/mm: enable memory hotplug on radix Reza Arbab
2017-01-16 19:07 ` [PATCH v5 1/4] powerpc/mm: refactor radix physical page mapping Reza Arbab
2017-01-17  6:46   ` Balbir Singh
2017-01-17 18:34     ` Reza Arbab
2017-01-18  1:14       ` Balbir Singh
2017-01-30  8:38   ` Michael Ellerman
2017-01-30 17:28     ` Reza Arbab
2017-01-30 21:58       ` Michael Ellerman
2017-02-01  1:05   ` [v5,1/4] " Michael Ellerman
2017-01-16 19:07 ` [PATCH v5 2/4] powerpc/mm: add radix__create_section_mapping() Reza Arbab
2017-01-17  6:48   ` Balbir Singh
2017-01-16 19:07 ` [PATCH v5 3/4] powerpc/mm: add radix__remove_section_mapping() Reza Arbab
2017-01-17  7:22   ` Balbir Singh
2017-01-17 18:36     ` Reza Arbab
2017-01-18  1:22       ` Balbir Singh [this message]
2017-01-16 19:07 ` [PATCH v5 4/4] powerpc/mm: unstub radix__vmemmap_remove_mapping() Reza Arbab
2017-01-17  7:25   ` Balbir Singh
2017-01-17 18:36     ` Reza Arbab
2017-01-18  1:53       ` Balbir Singh

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=20170118012236.GB10798@localhost.localdomain \
    --to=bsingharora@gmail.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=apopple@au1.ibm.com \
    --cc=arbab@linux.vnet.ibm.com \
    --cc=benh@kernel.crashing.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 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.