All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Brendan Jackman" <jackmanb@google.com>
Cc: linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev
Subject: Re: [PATCH v2 08/13] sgi-xp: Use higher-level allocator
Date: Mon, 22 Jun 2026 10:15:23 +0000	[thread overview]
Message-ID: <20260622101524.40FDE1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260622-alloc-trylock-v2-8-31f31367d420@google.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

New issues:
- [Medium] Commit message fundamentally misunderstands and inverts the documented differences between __alloc_pages_node() and alloc_pages_node().

Pre-existing issues:
- [High] Logic Error / Variable Mismatch in xpc_init_mq_node() breaks CPU fallback and NUMA affinity.
- [High] Hardware IRQ enabled before GRU message queue descriptors are fully initialized leads to NULL pointer dereference on spurious interrupts.
--

commit 2717112c630ddd5adcf0324575c2741c6d3bf969
Author: Brendan Jackman <jackmanb@google.com>

sgi-xp: Use higher-level allocator

This commit switches xpc_create_gru_mq_uv() to use alloc_pages_node() instead
of __alloc_pages_node(). The change is intended to replace an allocator
function that is being removed with one that handles similar requirements.

> sgi-xp: Use higher-level allocator
> 
> The difference between __alloc_pages_node() and alloc_pages_node() is
> that the former allows you to pass NUMA_NO_NODE.
> 
> The former is going away and the latter works fine here so switch over.

[Severity: Medium]
Is this description accurate?

__alloc_pages_node() strictly prohibits NUMA_NO_NODE, while
alloc_pages_node() safely handles it by falling back to numa_mem_id().

While the code change itself appears safe here since cpu_to_node() returns
a valid node, could the commit message be updated to reflect the correct
behavior of these memory allocation APIs?

> diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
> index 772c787268932..aacff70204241 100644
> --- a/drivers/misc/sgi-xp/xpc_uv.c
> +++ b/drivers/misc/sgi-xp/xpc_uv.c
> @@ -170,7 +170,7 @@ xpc_create_gru_mq_uv(unsigned int mq_size, int cpu, char *irq_name,
>  	mq->mmr_blade = uv_cpu_to_blade_id(cpu);
>  
>  	nid = cpu_to_node(cpu);
> -	page = __alloc_pages_node(nid,
> +	page = alloc_pages_node(nid,
>  				      GFP_KERNEL | __GFP_ZERO | __GFP_THISNODE,
>  				      pg_order);

[Severity: High]
This isn't a bug introduced by this patch, but looking at the interrupt setup
that occurs further down in xpc_create_gru_mq_uv():

drivers/misc/sgi-xp/xpc_uv.c:xpc_create_gru_mq_uv() {
    ...
    ret = request_irq(mq->irq, irq_handler, 0, irq_name, NULL);
    ...
}

If a spurious interrupt occurs immediately after request_irq() is called,
could xpc_handle_activate_IRQ_uv() dereference the global xpc_activate_mq_uv
pointer before it is initialized?

drivers/misc/sgi-xp/xpc_uv.c:xpc_handle_activate_IRQ_uv() {
    ...
    msg_hdr = gru_get_next_message(xpc_activate_mq_uv->gru_mq_desc);
    ...
}

The global pointer doesn't seem to be assigned until xpc_create_gru_mq_uv()
returns to its caller.

[Severity: High]
This is a pre-existing issue, but looking at xpc_init_mq_node() which calls
xpc_create_gru_mq_uv():

drivers/misc/sgi-xp/xpc_uv.c:xpc_init_mq_node() {
    ...
    for_each_cpu(cpu, cpumask_of_node(nid)) {
        xpc_activate_mq_uv =
            xpc_create_gru_mq_uv(XPC_ACTIVATE_MQ_SIZE_UV, nid,
    ...
}

Does this loop inadvertently pass the nid variable instead of the cpu variable
to xpc_create_gru_mq_uv()?

This appears to bypass the CPU fallback iteration and could result in
querying uv_cpu_to_blade_id() and cpu_to_node() with a node index rather
than a CPU index.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260622-alloc-trylock-v2-0-31f31367d420@google.com?part=8

  reply	other threads:[~2026-06-22 10:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-22 10:01 [PATCH v2 00/13] mm: Some cleanups for page allocator APIs Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 01/13] mm/page_alloc: rename ALLOC_TRYLOCK -> ALLOC_NOLOCK Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 02/13] mm/page_alloc: some renames to clarify alloc_flags scopes Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 03/13] mm/page_alloc: unify __alloc_frozen_pages[_nolock]_noprof() Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 04/13] mm/page_alloc: relax GFP WARN in nolock allocs Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 05/13] perf/x86/intel: Use higher-level allocator Brendan Jackman
2026-06-22 10:10   ` sashiko-bot
2026-06-22 10:19     ` Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 06/13] KVM: VMX: " Brendan Jackman
2026-06-22 10:10   ` sashiko-bot
2026-06-22 10:21     ` Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 07/13] x86/virt: " Brendan Jackman
2026-06-22 10:12   ` sashiko-bot
2026-06-22 10:22     ` Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 08/13] sgi-xp: " Brendan Jackman
2026-06-22 10:15   ` sashiko-bot [this message]
2026-06-22 10:20   ` Greg Kroah-Hartman
2026-06-22 10:01 ` [PATCH v2 09/13] net/funeth: Switch to " Brendan Jackman
2026-06-22 10:11   ` sashiko-bot
2026-06-22 10:22     ` Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 10/13] mm: Remove __alloc_pages_node() Brendan Jackman
2026-06-22 10:17   ` sashiko-bot
2026-06-22 10:28     ` Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 11/13] alloc_tag: Move to mm/ Brendan Jackman
2026-06-22 10:01 ` [PATCH v2 12/13] mm: Move __alloc_pages() to mm/internal.h Brendan Jackman
2026-06-22 10:21   ` sashiko-bot
2026-06-22 11:14     ` Brendan Jackman
2026-06-22 12:24   ` David Hildenbrand (Arm)
2026-06-22 10:01 ` [PATCH v2 13/13] mm: remove __GFP_NO_CODETAG Brendan Jackman
2026-06-22 10:05 ` [PATCH v2 00/13] mm: Some cleanups for page allocator APIs Vlastimil Babka (SUSE)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260622101524.40FDE1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=jackmanb@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-devel@lists.linux.dev \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.