All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Bharata B Rao <bharata@linux.vnet.ibm.com>
Cc: linuxppc-dev@lists.ozlabs.org, nfont@linux.vnet.ibm.com,
	aik@au1.ibm.com, mpe@ellerman.id.au
Subject: Re: [FIX PATCH v2 2/2] powerpc,numa: Fix memory_hotplug_max()
Date: Thu, 26 May 2016 10:50:14 +1000	[thread overview]
Message-ID: <20160526005014.GS17226@voom.fritz.box> (raw)
In-Reply-To: <1463060055-24158-3-git-send-email-bharata@linux.vnet.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 3210 bytes --]

On Thu, May 12, 2016 at 07:04:15PM +0530, Bharata B Rao wrote:
> memory_hotplug_max() uses hot_add_drconf_memory_max() to get maxmimum
> addressable memory by referring to ibm,dyanamic-memory property. There
> are three problems with the current approach:
> 
> 1 hot_add_drconf_memory_max() assumes that ibm,dynamic-memory includes
>   all the LMBs of the guest, but that is not true for PowerKVM which
>   populates only DR LMBs (LMBs that can be hotplugged/removed) in that
>   property.
> 2 hot_add_drconf_memory_max() multiplies lmb-size with lmb-count to arrive
>   at the max possible address. Since ibm,dynamic-memory doesn't include
>   RMA LMBs, the address thus obtained will be less than the actual max
>   address. For example, if max possible memory size is 32G, with lmb-size
>   of 256MB there can be 127 LMBs in ibm,dynamic-memory (1 LMB for RMA
>   which won't be present here).  hot_add_drconf_memory_max() would then
>   return the max addressable memory as 127 * 256MB = 31.75GB, the max
>   address should have been 32G which is what ibm,lrdr-capacity shows.
> 3 In PowerKVM, there can be a gap between the end of boot time RAM and
>   beginning of hotplug RAM area. So just multiplying lmb-count with
>   lmb-size will not provide the correct max possible address for PowerKVM.
> 
> This patch fixes 1 by using ibm,lrdr-capacity property to return the max
> addressable memory whenever the property is present. Then it fixes 2 & 3
> by fetching the address of the last LMB in ibm,dynamic-memory property.
> 
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

> ---
>  arch/powerpc/mm/numa.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index 4a87ccb..f8b1da7 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -1164,17 +1164,33 @@ int hot_add_scn_to_nid(unsigned long scn_addr)
>  static u64 hot_add_drconf_memory_max(void)
>  {
>  	struct device_node *memory = NULL;
> +	struct device_node *dn = NULL;
>  	unsigned int drconf_cell_cnt = 0;
>  	u64 lmb_size = 0;
>  	const __be32 *dm = NULL;
> +	const __be64 *lrdr = NULL;
> +	struct of_drconf_cell drmem;
> +
> +	dn = of_find_node_by_path("/rtas");
> +	if (dn) {
> +		lrdr = of_get_property(dn, "ibm,lrdr-capacity", NULL);
> +		of_node_put(dn);
> +		if (lrdr)
> +			return be64_to_cpup(lrdr);
> +	}
>  
>  	memory = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory");
>  	if (memory) {
>  		drconf_cell_cnt = of_get_drconf_memory(memory, &dm);
>  		lmb_size = of_get_lmb_size(memory);
> +
> +		/* Advance to the last cell, each cell has 6 32 bit integers */
> +		dm += (drconf_cell_cnt - 1) * 6;
> +		read_drconf_cell(&drmem, &dm);
>  		of_node_put(memory);
> +		return drmem.base_addr + lmb_size;
>  	}
> -	return lmb_size * drconf_cell_cnt;
> +	return 0;
>  }
>  
>  /*

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2016-05-26  0:50 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-12 13:34 [FIX PATCH v2 0/2] Fix powerpc,numa: Fix memory_hotplug_max() Bharata B Rao
2016-05-12 13:34 ` [FIX PATCH v2 1/2] powerpc, numa: Fix whitespace in hot_add_drconf_memory_max() Bharata B Rao
2016-05-26  0:47   ` [FIX PATCH v2 1/2] powerpc,numa: " David Gibson
2016-06-21  0:40   ` [FIX, v2, 1/2] powerpc, numa: " Michael Ellerman
2016-05-12 13:34 ` [FIX PATCH v2 2/2] powerpc,numa: Fix memory_hotplug_max() Bharata B Rao
2016-05-26  0:50   ` David Gibson [this message]
2016-06-21  0:40   ` [FIX,v2,2/2] " Michael Ellerman
2016-06-14  4:46 ` [FIX PATCH v2 0/2] Fix " Bharata B Rao
2016-06-14  5:19   ` Michael Ellerman
2016-06-14  5:46     ` Bharata B Rao

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=20160526005014.GS17226@voom.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=aik@au1.ibm.com \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=nfont@linux.vnet.ibm.com \
    /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.