Re: [PATCH v9 2/7] RAS/AMD/ATL: Refactor PRM address translation into a common helper
From: Borislav Petkov
Date: Wed Aug 05 2026 - 01:20:02 EST
On Thu, Jul 30, 2026 at 03:48:29PM -0400, Yazen Ghannam wrote:
> Every PRM address translation follows the same pattern. Each fills a
> parameter buffer, invokes the handler, and checks the result. Only the
> handler GUID and the output buffer differ.
>
> Factor the common sequence into prm_umc_norm_to_addr().
And here your commit message ends. The rest is describing the diff.
> -unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 bank_id, unsigned long addr)
> +int prm_umc_norm_to_addr(guid_t guid, u8 socket_id, u64 bank_id,
> + unsigned long addr, void *out_buf)
So if you're going to have a param buffer structure, you might as well use it:
diff --git a/drivers/ras/amd/atl/prm.c b/drivers/ras/amd/atl/prm.c
index 3d5a6f5ae0a9..726464f31e10 100644
--- a/drivers/ras/amd/atl/prm.c
+++ b/drivers/ras/amd/atl/prm.c
@@ -26,18 +26,11 @@ struct param_buf {
void *out_buf;
} __packed;
-int prm_umc_norm_to_addr(guid_t guid, u8 socket_id, u64 bank_id,
- unsigned long addr, void *out_buf)
+static int __prm_umc_norm_to_addr(guid_t guid, struct param_buf *p)
{
- struct param_buf p_buf;
int ret;
- p_buf.norm_addr = addr;
- p_buf.socket = socket_id;
- p_buf.bank_id = bank_id;
- p_buf.out_buf = out_buf;
-
- ret = acpi_call_prm_handler(guid, &p_buf);
+ ret = acpi_call_prm_handler(guid, p);
if (!ret)
return 0;
@@ -52,9 +45,15 @@ int prm_umc_norm_to_addr(guid_t guid, u8 socket_id, u64 bank_id,
unsigned long prm_umc_norm_to_sys_addr(u8 socket_id, u64 bank_id, unsigned long addr)
{
unsigned long sys_addr;
+ struct param_buf p_buf = {
+ .norm_addr = addr,
+ .socket = socket_id,
+ .bank_id = bank_id,
+ .out_buf = &sys_addr,
+ };
int ret;
- ret = prm_umc_norm_to_addr(norm_to_sys_guid, socket_id, bank_id, addr, &sys_addr);
+ ret = __prm_umc_norm_to_addr(norm_to_sys_guid, &p_buf);
if (ret)
return ret;
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette