All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
To: Anton Blanchard <anton@ozlabs.org>,
	benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au,
	nathanl@linux.ibm.com
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] pseries: Fix 64 bit logical memory block panic
Date: Wed, 15 Jul 2020 18:12:25 +0530	[thread overview]
Message-ID: <87d04x3q6m.fsf@linux.ibm.com> (raw)
In-Reply-To: <20200715000820.1255764-1-anton@ozlabs.org>

Anton Blanchard <anton@ozlabs.org> writes:

> Booting with a 4GB LMB size causes us to panic:
>
>   qemu-system-ppc64: OS terminated: OS panic:
>       Memory block size not suitable: 0x0
>
> Fix pseries_memory_block_size() to handle 64 bit LMBs.
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Anton Blanchard <anton@ozlabs.org>
> ---
>  arch/powerpc/platforms/pseries/hotplug-memory.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
> index 5ace2f9a277e..6574ac33e887 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
> @@ -27,7 +27,7 @@ static bool rtas_hp_event;
>  unsigned long pseries_memory_block_size(void)
>  {
>  	struct device_node *np;
> -	unsigned int memblock_size = MIN_MEMORY_BLOCK_SIZE;
> +	uint64_t memblock_size = MIN_MEMORY_BLOCK_SIZE;
>  	struct resource r;
>  
>  	np = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory");

We need similar changes at more places?

modified   arch/powerpc/include/asm/book3s/64/mmu.h
@@ -85,7 +85,7 @@ extern unsigned int mmu_base_pid;
 /*
  * memory block size used with radix translation.
  */
-extern unsigned int __ro_after_init radix_mem_block_size;
+extern unsigned long __ro_after_init radix_mem_block_size;
 
 #define PRTB_SIZE_SHIFT	(mmu_pid_bits + 4)
 #define PRTB_ENTRIES	(1ul << mmu_pid_bits)
modified   arch/powerpc/include/asm/drmem.h
@@ -21,7 +21,7 @@ struct drmem_lmb {
 struct drmem_lmb_info {
 	struct drmem_lmb        *lmbs;
 	int                     n_lmbs;
-	u32                     lmb_size;
+	u64                     lmb_size;
 };
 
 extern struct drmem_lmb_info *drmem_info;
modified   arch/powerpc/mm/book3s64/radix_pgtable.c
@@ -34,7 +34,7 @@
 
 unsigned int mmu_pid_bits;
 unsigned int mmu_base_pid;
-unsigned int radix_mem_block_size __ro_after_init;
+unsigned long radix_mem_block_size __ro_after_init;
 
 static __ref void *early_alloc_pgtable(unsigned long size, int nid,
 			unsigned long region_start, unsigned long region_end)
modified   arch/powerpc/mm/drmem.c
@@ -268,14 +268,15 @@ static void __init __walk_drmem_v2_lmbs(const __be32 *prop, const __be32 *usm,
 void __init walk_drmem_lmbs_early(unsigned long node,
 			void (*func)(struct drmem_lmb *, const __be32 **))
 {
+	const __be64 *lmb_prop;
 	const __be32 *prop, *usm;
 	int len;
 
-	prop = of_get_flat_dt_prop(node, "ibm,lmb-size", &len);
-	if (!prop || len < dt_root_size_cells * sizeof(__be32))
+	lmb_prop = of_get_flat_dt_prop(node, "ibm,lmb-size", &len);
+	if (!lmb_prop || len < sizeof(__be64))
 		return;
 
-	drmem_info->lmb_size = dt_mem_next_cell(dt_root_size_cells, &prop);
+	drmem_info->lmb_size = be64_to_cpup(lmb_prop);
 
 	usm = of_get_flat_dt_prop(node, "linux,drconf-usable-memory", &len);
 
@@ -296,19 +297,19 @@ void __init walk_drmem_lmbs_early(unsigned long node,
 
 static int __init init_drmem_lmb_size(struct device_node *dn)
 {
-	const __be32 *prop;
+	const __be64 *prop;
 	int len;
 
 	if (drmem_info->lmb_size)
 		return 0;
 
 	prop = of_get_property(dn, "ibm,lmb-size", &len);
-	if (!prop || len < dt_root_size_cells * sizeof(__be32)) {
+	if (!prop || len < sizeof(__be64)) {
 		pr_info("Could not determine LMB size\n");
 		return -1;
 	}
 
-	drmem_info->lmb_size = dt_mem_next_cell(dt_root_size_cells, &prop);
+	drmem_info->lmb_size = be64_to_cpup(prop);
 	return 0;
 }
 
modified   arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -27,7 +27,7 @@ static bool rtas_hp_event;
 unsigned long pseries_memory_block_size(void)
 {
 	struct device_node *np;
-	unsigned int memblock_size = MIN_MEMORY_BLOCK_SIZE;
+	unsigned long memblock_size = MIN_MEMORY_BLOCK_SIZE;
 	struct resource r;
 
 	np = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory");

  parent reply	other threads:[~2020-07-15 12:45 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-15  0:08 [PATCH] pseries: Fix 64 bit logical memory block panic Anton Blanchard
2020-07-15 12:22 ` Michael Ellerman
2020-07-15 12:42 ` Aneesh Kumar K.V [this message]
2020-07-15 21:00   ` Anton Blanchard
2020-07-16  1:30   ` Paul Mackerras
2020-07-16 14:07     ` Aneesh Kumar K.V
2020-07-16 12:55 ` Michael Ellerman

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=87d04x3q6m.fsf@linux.ibm.com \
    --to=aneesh.kumar@linux.ibm.com \
    --cc=anton@ozlabs.org \
    --cc=benh@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=nathanl@linux.ibm.com \
    --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.