[email protected] writes:

> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
> to consider:
> - [Medium] irqchip/gic-v3-its: incomplete NUMA_NO_NODE resolution exposes 
> allocations to task mempolicy
> --
>
> commit 6d762ab83972132164ae57c1422f1916decb2fe3
> Author: Aneesh Kumar K.V (Arm) <[email protected]>
>
>     irqchip/gic-v3-its: Resolve the default NUMA node explicitly
>     
>     alloc_pages_node() resolves NUMA_NO_NODE to numa_mem_id() internally. In
>     preparation for switching ITS allocations to the CoCo shared memory
>     allocator, resolve the default node explicitly in its_alloc_pages().
>     
>     The CoCo shared memory allocator interprets NUMA_NO_NODE as a request to
>     apply the current task's memory policy. Passing numa_mem_id() instead
>     preserves the existing nearest-memory-node placement across the
>     allocator switch. This patch does not change the current allocation
>     behavior.
>
>> diff --git a/drivers/irqchip/irq-gic-v3-its.c 
>> b/drivers/irqchip/irq-gic-v3-its.c
>> --- a/drivers/irqchip/irq-gic-v3-its.c
>> +++ b/drivers/irqchip/irq-gic-v3-its.c
>> @@ -236,7 +237,7 @@ static struct page *its_alloc_pages_node(int node, gfp_t 
>> gfp,
>>  
>>  static struct page *its_alloc_pages(gfp_t gfp, unsigned int order)
>>  {
>> -    return its_alloc_pages_node(NUMA_NO_NODE, gfp, order);
>> +    return its_alloc_pages_node(numa_mem_id(), gfp, order);
>>  }
>
> [Severity: Medium]
> Will this leave other callers of its_alloc_pages_node() exposed to the
> task memory policy change?
>
> When a device probe or ITT allocation occurs with its->numa_node ==
> NUMA_NO_NODE (which is common when firmware lacks NUMA info), callers pass
> NUMA_NO_NODE directly to its_alloc_pages_node():
>
> drivers/irqchip/irq-gic-v3-its.c:its_alloc_pages_node() {
>       ...
>       page = alloc_pages_node(node, gfp | gfp_flags_quirk, order);
>       ...
> }
>
> If node is NUMA_NO_NODE, it passes it directly to the underlying allocator.
> When the underlying allocator interprets NUMA_NO_NODE as a request to apply
> task mempolicy, these direct callers will be subjected to the current task's
> memory policy instead of bypassing it and using the local node. 
>
> If a user binds the driver via sysfs under a restrictive task mempolicy,
> the allocations could land on suboptimal distant nodes or fail entirely.
>
> Should the NUMA_NO_NODE resolution logic be moved inside 
> its_alloc_pages_node()
> to ensure all callers are protected?

Yes, updated the patch to perform the mapping in its_alloc_pages_node(),
so all callers are handled.

@@ -216,6 +217,9 @@ static struct page *its_alloc_pages_node(int node, gfp_t 
gfp,
        struct page *page;
        int ret = 0;
 
+       if (node == NUMA_NO_NODE)
+               node = numa_mem_id();
+
        page = alloc_pages_node(node, gfp | gfp_flags_quirk, order);
 
        if (!page)

Reply via email to