| From foo@baz Sun Jun 17 12:07:33 CEST 2018 |
| From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> |
| Date: Thu, 18 Jan 2018 00:33:36 +0530 |
| Subject: powerpc/64s: Default l1d_size to 64K in RFI fallback flush |
| |
| From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> |
| |
| [ Upstream commit 9dfbf78e4114fcaf4ef61c49885c3ab5bad40d0b ] |
| |
| If there is no d-cache-size property in the device tree, l1d_size could |
| be zero. We don't actually expect that to happen, it's only been seen |
| on mambo (simulator) in some configurations. |
| |
| A zero-size l1d_size leads to the loop in the asm wrapping around to |
| 2^64-1, and then walking off the end of the fallback area and |
| eventually causing a page fault which is fatal. |
| |
| Just default to 64K which is correct on some CPUs, and sane enough to |
| not cause a crash on others. |
| |
| Fixes: aa8a5e0062ac9 ('powerpc/64s: Add support for RFI flush of L1-D cache') |
| Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> |
| [mpe: Rewrite comment and change log] |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/kernel/setup_64.c | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| --- a/arch/powerpc/kernel/setup_64.c |
| +++ b/arch/powerpc/kernel/setup_64.c |
| @@ -864,6 +864,17 @@ static void init_fallback_flush(void) |
| int cpu; |
| |
| l1d_size = ppc64_caches.l1d.size; |
| + |
| + /* |
| + * If there is no d-cache-size property in the device tree, l1d_size |
| + * could be zero. That leads to the loop in the asm wrapping around to |
| + * 2^64-1, and then walking off the end of the fallback area and |
| + * eventually causing a page fault which is fatal. Just default to |
| + * something vaguely sane. |
| + */ |
| + if (!l1d_size) |
| + l1d_size = (64 * 1024); |
| + |
| limit = min(ppc64_bolted_size(), ppc64_rma_size); |
| |
| /* |