diff mbox series

powerpc/powernv: delay rng of node creation until later in boot

Message ID 20220630121654.1939181-1-Jason@zx2c4.com (mailing list archive)
State Accepted
Delegated to: Michael Ellerman
Headers show
Series powerpc/powernv: delay rng of node creation until later in boot | expand

Checks

Context Check Description
snowpatch_ozlabs/github-powerpc_selftests success Successfully ran 10 jobs.
snowpatch_ozlabs/github-powerpc_ppctests success Successfully ran 10 jobs.
snowpatch_ozlabs/github-powerpc_clang success Successfully ran 7 jobs.
snowpatch_ozlabs/github-powerpc_sparse success Successfully ran 4 jobs.
snowpatch_ozlabs/github-powerpc_kernel_qemu success Successfully ran 23 jobs.

Commit Message

Jason A. Donenfeld June 30, 2022, 12:16 p.m. UTC
The of node for the rng must be created much later in boot. Otherwise it
tries to connect to a parent that doesn't yet exist, resulting on this
splat:

[    0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
[    0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable)
[    0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00
[    0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80
[    0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0
[    0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4
[    0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214

This patch fixes the issue by doing the of node creation inside of
machine_subsys_initcall.

Fixes: f3eac426657d ("powerpc/powernv: wire up rng during setup_arch")
Cc: stable@vger.kernel.org
Cc: Michael Ellerman <mpe@ellerman.id.au>
Reported-by: Sachin Sant <sachinp@linux.ibm.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
 arch/powerpc/platforms/powernv/rng.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

Comments

Sachin Sant June 30, 2022, 1:54 p.m. UTC | #1
> On 30-Jun-2022, at 5:46 PM, Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> 
> The of node for the rng must be created much later in boot. Otherwise it
> tries to connect to a parent that doesn't yet exist, resulting on this
> splat:
> 
> [    0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
> [    0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable)
> [    0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00
> [    0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80
> [    0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0
> [    0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4
> [    0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214
> 
> This patch fixes the issue by doing the of node creation inside of
> machine_subsys_initcall.
> 
> Fixes: f3eac426657d ("powerpc/powernv: wire up rng during setup_arch")
> Cc: stable@vger.kernel.org
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Reported-by: Sachin Sant <sachinp@linux.ibm.com>
> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
> ---

Thanks Jason for the patch. This fixes the reported problem for me.

Tested-by: Sachin Sant <sachinp@linux.ibm.com>

- Sachin
Jason A. Donenfeld July 2, 2022, 10:42 a.m. UTC | #2
Hi Benjamin, Paul,

On Thu, Jun 30, 2022 at 07:24:05PM +0530, Sachin Sant wrote:
> > On 30-Jun-2022, at 5:46 PM, Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> > 
> > The of node for the rng must be created much later in boot. Otherwise it
> > tries to connect to a parent that doesn't yet exist, resulting on this
> > splat:
> > 
> > [    0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
> > [    0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable)
> > [    0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00
> > [    0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80
> > [    0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0
> > [    0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4
> > [    0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214
> > 
> > This patch fixes the issue by doing the of node creation inside of
> > machine_subsys_initcall.
> > 
> > Fixes: f3eac426657d ("powerpc/powernv: wire up rng during setup_arch")
> > Cc: stable@vger.kernel.org
> > Cc: Michael Ellerman <mpe@ellerman.id.au>
> > Reported-by: Sachin Sant <sachinp@linux.ibm.com>
> > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
> > ---
> 
> Thanks Jason for the patch. This fixes the reported problem for me.
> 
> Tested-by: Sachin Sant <sachinp@linux.ibm.com>
> 
> - Sachin

It sounds like Michael is on vacation for a few weeks. Think you could
queue this up so we can get POWER8 booting again?

Sorry I broke things before :-(

Jason
Michael Ellerman July 4, 2022, 11:14 a.m. UTC | #3
On 2 July 2022 8:42:06 pm AEST, "Jason A. Donenfeld" <Jason@zx2c4.com> wrote:
>Hi Benjamin, Paul,
>
>On Thu, Jun 30, 2022 at 07:24:05PM +0530, Sachin Sant wrote:
>> > On 30-Jun-2022, at 5:46 PM, Jason A. Donenfeld <Jason@zx2c4.com> wrote:
>> > 
>> > The of node for the rng must be created much later in boot. Otherwise it
>> > tries to connect to a parent that doesn't yet exist, resulting on this
>> > splat:
>> > 
>> > [    0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
>> > [    0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable)
>> > [    0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00
>> > [    0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80
>> > [    0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0
>> > [    0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4
>> > [    0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214
>> > 
>> > This patch fixes the issue by doing the of node creation inside of
>> > machine_subsys_initcall.
>> > 
>> > Fixes: f3eac426657d ("powerpc/powernv: wire up rng during setup_arch")
>> > Cc: stable@vger.kernel.org
>> > Cc: Michael Ellerman <mpe@ellerman.id.au>
>> > Reported-by: Sachin Sant <sachinp@linux.ibm.com>
>> > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
>> > ---
>> 
>> Thanks Jason for the patch. This fixes the reported problem for me.
>> 
>> Tested-by: Sachin Sant <sachinp@linux.ibm.com>
>> 
>> - Sachin
>
>It sounds like Michael is on vacation for a few weeks. Think you could
>queue this up so we can get POWER8 booting again?

It doesn't break booting for me, but it is an ugly splat.

I'll pick it up into fixes.

I think it's more correct to say the "platform device creation" causes the problem, so I'll update the change log to say that.

cheers
Jason A. Donenfeld July 4, 2022, 11:34 a.m. UTC | #4
Hi Michael,

On Mon, Jul 04, 2022 at 09:14:32PM +1000, Michael Ellerman wrote:
> 
> 
> On 2 July 2022 8:42:06 pm AEST, "Jason A. Donenfeld" <Jason@zx2c4.com> wrote:
> >Hi Benjamin, Paul,
> >
> >On Thu, Jun 30, 2022 at 07:24:05PM +0530, Sachin Sant wrote:
> >> > On 30-Jun-2022, at 5:46 PM, Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> >> > 
> >> > The of node for the rng must be created much later in boot. Otherwise it
> >> > tries to connect to a parent that doesn't yet exist, resulting on this
> >> > splat:
> >> > 
> >> > [    0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
> >> > [    0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable)
> >> > [    0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00
> >> > [    0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80
> >> > [    0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0
> >> > [    0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4
> >> > [    0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214
> >> > 
> >> > This patch fixes the issue by doing the of node creation inside of
> >> > machine_subsys_initcall.
> >> > 
> >> > Fixes: f3eac426657d ("powerpc/powernv: wire up rng during setup_arch")
> >> > Cc: stable@vger.kernel.org
> >> > Cc: Michael Ellerman <mpe@ellerman.id.au>
> >> > Reported-by: Sachin Sant <sachinp@linux.ibm.com>
> >> > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
> >> > ---
> >> 
> >> Thanks Jason for the patch. This fixes the reported problem for me.
> >> 
> >> Tested-by: Sachin Sant <sachinp@linux.ibm.com>
> >> 
> >> - Sachin
> >
> >It sounds like Michael is on vacation for a few weeks. Think you could
> >queue this up so we can get POWER8 booting again?
> 
> It doesn't break booting for me, but it is an ugly splat.
> 
> I'll pick it up into fixes.
> 
> I think it's more correct to say the "platform device creation" causes the problem, so I'll update the change log to say that.

Sounds good. Thank you!

Jason
Michael Ellerman July 4, 2022, 11:57 a.m. UTC | #5
On Thu, 30 Jun 2022 14:16:54 +0200, Jason A. Donenfeld wrote:
> The of node for the rng must be created much later in boot. Otherwise it
> tries to connect to a parent that doesn't yet exist, resulting on this
> splat:
> 
> [    0.000478] kobject: '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is being called.
> [    0.002925] [c000000002a0fb30] [c00000000073b0bc] kobject_get+0x8c/0x100 (unreliable)
> [    0.003071] [c000000002a0fba0] [c00000000087e464] device_add+0xf4/0xb00
> [    0.003194] [c000000002a0fc80] [c000000000a7f6e4] of_device_add+0x64/0x80
> [    0.003321] [c000000002a0fcb0] [c000000000a800d0] of_platform_device_create_pdata+0xd0/0x1b0
> [    0.003476] [c000000002a0fd00] [c00000000201fa44] pnv_get_random_long_early+0x240/0x2e4
> [    0.003623] [c000000002a0fe20] [c000000002060c38] random_init+0xc0/0x214
> 
> [...]

Applied to powerpc/fixes.

[1/1] powerpc/powernv: delay rng of node creation until later in boot
      https://git.kernel.org/powerpc/c/887502826549caa7e4215fd9e628f48f14c0825a

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/platforms/powernv/rng.c b/arch/powerpc/platforms/powernv/rng.c
index 463c78c52cc5..bd5ad5f351c2 100644
--- a/arch/powerpc/platforms/powernv/rng.c
+++ b/arch/powerpc/platforms/powernv/rng.c
@@ -176,12 +176,8 @@  static int __init pnv_get_random_long_early(unsigned long *v)
 		    NULL) != pnv_get_random_long_early)
 		return 0;
 
-	for_each_compatible_node(dn, NULL, "ibm,power-rng") {
-		if (rng_create(dn))
-			continue;
-		/* Create devices for hwrng driver */
-		of_platform_device_create(dn, NULL, NULL);
-	}
+	for_each_compatible_node(dn, NULL, "ibm,power-rng")
+		rng_create(dn);
 
 	if (!ppc_md.get_random_seed)
 		return 0;
@@ -205,10 +201,16 @@  void __init pnv_rng_init(void)
 
 static int __init pnv_rng_late_init(void)
 {
+	struct device_node *dn;
 	unsigned long v;
+
 	/* In case it wasn't called during init for some other reason. */
 	if (ppc_md.get_random_seed == pnv_get_random_long_early)
 		pnv_get_random_long_early(&v);
+	if (ppc_md.get_random_seed == powernv_get_random_long) {
+		for_each_compatible_node(dn, NULL, "ibm,power-rng")
+			of_platform_device_create(dn, NULL, NULL);
+	}
 	return 0;
 }
 machine_subsys_initcall(powernv, pnv_rng_late_init);