Re: [PATCH v9 2/7] RAS/AMD/ATL: Refactor PRM address translation into a common helper

Yazen Ghannam <[email protected]>
Newsgroups org.kernel.vger.linux-edac,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Tue, Aug 04, 2026 at 10:19:17PM -0700, Borislav Petkov wrote:
> 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.
> 

Okay.

> > -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;
>  
> -- 

Right, it gets mostly there in the later patches:
  int prm_umc_norm_to_addr(guid_t guid, struct atl_umc_addr *addr, void *out_buf);

I'll do another revision with your proposal.

Thanks,
Yazen
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.