Michal Suchanek 4d6673
From 836b5b9fcc8e09cea7e8a59a070349a00e818308 Mon Sep 17 00:00:00 2001
Michal Suchanek 4d6673
From: Nathan Lynch <nathanl@linux.ibm.com>
Michal Suchanek 4d6673
Date: Fri, 10 Feb 2023 12:41:54 -0600
Michal Suchanek 4d6673
Subject: [PATCH] powerpc/rtas: ensure 4KB alignment for rtas_data_buf
Michal Suchanek 4d6673
Michal Suchanek 4d6673
References: bsc#1065729
Michal Suchanek 4d6673
Patch-mainline: v6.3-rc1
Michal Suchanek 4d6673
Git-commit: 836b5b9fcc8e09cea7e8a59a070349a00e818308
Michal Suchanek 4d6673
Michal Suchanek 4d6673
Some RTAS functions that have work area parameters impose alignment
Michal Suchanek 4d6673
requirements on the work area passed to them by the OS. Examples
Michal Suchanek 4d6673
include:
Michal Suchanek 4d6673
Michal Suchanek 4d6673
- ibm,configure-connector
Michal Suchanek 4d6673
- ibm,update-nodes
Michal Suchanek 4d6673
- ibm,update-properties
Michal Suchanek 4d6673
Michal Suchanek 4d6673
4KB is the greatest alignment required by PAPR for such
Michal Suchanek 4d6673
buffers. rtas_data_buf used to have a __page_aligned attribute in the
Michal Suchanek 4d6673
arch/ppc64 days, but that was changed to __cacheline_aligned for
Michal Suchanek 4d6673
unknown reasons by commit 033ef338b6e0 ("powerpc: Merge rtas.c into
Michal Suchanek 4d6673
arch/powerpc/kernel"). That works out to 128-byte alignment
Michal Suchanek 4d6673
on ppc64, which isn't right.
Michal Suchanek 4d6673
Michal Suchanek 4d6673
This was found by inspection and I'm not aware of any real problems
Michal Suchanek 4d6673
caused by this. Either current RTAS implementations don't enforce the
Michal Suchanek 4d6673
alignment constraints, or rtas_data_buf is always being placed at a
Michal Suchanek 4d6673
4KB boundary by accident (or both, perhaps).
Michal Suchanek 4d6673
Michal Suchanek 4d6673
Use __aligned(SZ_4K) to ensure the rtas_data_buf has alignment
Michal Suchanek 4d6673
appropriate for all users.
Michal Suchanek 4d6673
Michal Suchanek 4d6673
Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
Michal Suchanek 4d6673
Fixes: 033ef338b6e0 ("powerpc: Merge rtas.c into arch/powerpc/kernel")
Michal Suchanek 4d6673
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Michal Suchanek 4d6673
Link: https://lore.kernel.org/r/20230125-b4-powerpc-rtas-queue-v3-6-26929c8cce78@linux.ibm.com
Michal Suchanek 4d6673
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek 4d6673
---
Michal Suchanek 4d6673
 arch/powerpc/kernel/rtas.c | 2 +-
Michal Suchanek 4d6673
 1 file changed, 1 insertion(+), 1 deletion(-)
Michal Suchanek 4d6673
Michal Suchanek 4d6673
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
Michal Suchanek 4d6673
--- a/arch/powerpc/kernel/rtas.c
Michal Suchanek 4d6673
+++ b/arch/powerpc/kernel/rtas.c
Michal Suchanek 4d6673
@@ -75,7 +75,7 @@ static struct rtas_args rtas_args;
Michal Suchanek 4d6673
 DEFINE_SPINLOCK(rtas_data_buf_lock);
Michal Suchanek 4d6673
 EXPORT_SYMBOL(rtas_data_buf_lock);
Michal Suchanek 4d6673
 
Michal Suchanek 4d6673
-char rtas_data_buf[RTAS_DATA_BUF_SIZE] __cacheline_aligned;
Michal Suchanek 4d6673
+char rtas_data_buf[RTAS_DATA_BUF_SIZE] __aligned(SZ_4K);
Michal Suchanek 4d6673
 EXPORT_SYMBOL(rtas_data_buf);
Michal Suchanek 4d6673
 
Michal Suchanek 4d6673
 unsigned long rtas_rmo_buf;
Michal Suchanek 4d6673
-- 
Michal Suchanek 4d6673
2.40.0
Michal Suchanek 4d6673