Re: [PATCH] iommu/amd: Add NUMA node affinity for IOMMU log buffers
From: Ankit Soni
Date: Sun Feb 15 2026 - 23:19:59 EST
On Tue, Feb 10, 2026 at 10:58:39PM -0500, lirongqing wrote:
> From: Li RongQing <lirongqing@xxxxxxxxx>
>
> Currently, PPR Log and GA logs for AMD IOMMU are allocated using
> iommu_alloc_pages_sz(), which does not account for NUMA affinity. This can
> lead to remote memory access latencies if the memory is allocated on a
> different node than the IOMMU hardware.
>
> Switch to iommu_alloc_pages_node_sz() to ensure that these data structures
> are allocated on the same NUMA node as the IOMMU device. If the node
> information is unavailable, it defaults to NUMA_NO_NODE.
>
Reviewed-by: Ankit Soni <Ankit.Soni@xxxxxxx>
> Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx>
> ---
> drivers/iommu/amd/init.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
> index 384c90b..721d9d0 100644
> --- a/drivers/iommu/amd/init.c
> +++ b/drivers/iommu/amd/init.c
> @@ -851,10 +851,11 @@ static void __init free_command_buffer(struct amd_iommu *iommu)
> void *__init iommu_alloc_4k_pages(struct amd_iommu *iommu, gfp_t gfp,
> size_t size)
> {
> + int nid = iommu->dev ? dev_to_node(&iommu->dev->dev) : NUMA_NO_NODE;
> void *buf;
>
> size = PAGE_ALIGN(size);
> - buf = iommu_alloc_pages_sz(gfp, size);
> + buf = iommu_alloc_pages_node_sz(nid, gfp, size);
> if (!buf)
> return NULL;
> if (check_feature(FEATURE_SNP) &&
> @@ -957,14 +958,16 @@ static int iommu_ga_log_enable(struct amd_iommu *iommu)
>
> static int iommu_init_ga_log(struct amd_iommu *iommu)
> {
> + int nid = iommu->dev ? dev_to_node(&iommu->dev->dev) : NUMA_NO_NODE;
> +
> if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir))
> return 0;
>
> - iommu->ga_log = iommu_alloc_pages_sz(GFP_KERNEL, GA_LOG_SIZE);
> + iommu->ga_log = iommu_alloc_pages_node_sz(nid, GFP_KERNEL, GA_LOG_SIZE);
> if (!iommu->ga_log)
> goto err_out;
>
> - iommu->ga_log_tail = iommu_alloc_pages_sz(GFP_KERNEL, 8);
> + iommu->ga_log_tail = iommu_alloc_pages_node_sz(nid, GFP_KERNEL, 8);
> if (!iommu->ga_log_tail)
> goto err_out;
>
> --
> 2.9.4
>