--- a/arch/powerpc/platforms/powernv/rng.c 2026-04-25 21:47:14.712515675 -0700 +++ b/arch/powerpc/platforms/powernv/rng.c 2026-04-25 21:59:15.845000000 -0700 @@ -87,10 +87,16 @@ if (mfmsr() & MSR_DR) { rng = get_cpu_var(pnv_rng); + if (!rng) { + put_cpu_var(pnv_rng); + return 0; + } *v = rng_whiten(rng, in_be64(rng->regs)); - put_cpu_var(rng); + put_cpu_var(pnv_rng); } else { rng = raw_cpu_read(pnv_rng); + if (!rng) + return 0; *v = rng_whiten(rng, __raw_rm_readq(rng->regs_real)); } return 1; diff -Naur test_apply/step4/drivers/char/hw_random/powernv-rng.c test_apply/step5/drivers/char/hw_random/powernv-rng.c --- a/drivers/char/hw_random/powernv-rng.c 2026-04-25 21:47:15.036198248 -0700 +++ b/drivers/char/hw_random/powernv-rng.c 2026-04-25 21:59:18.603000000 -0700 @@ -23,10 +23,11 @@ buf = (unsigned long *)data; - for (i = 0; i < len; i++) - pnv_get_random_long(buf++); + for (i = 0; i < len; i++, buf++) + if (!pnv_get_random_long(buf)) + break; - return len * sizeof(unsigned long); + return i * sizeof(unsigned long); } static struct hwrng powernv_hwrng = {