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

Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but the patch attempts 
to fix an infinite retry loop while relying on a flawed assumption, leaving a 
kernel hang scenario intact under CPU hotplug.
--

commit 357edd9f97074f4d93f3160be466a7aa7d20c7bb
Author: Waiman Long <[email protected]>

Drivers: hv: Avoid infinite retry loop in init_vp_index()

This commit attempts to fix an infinite retry loop in init_vp_index() by
skipping NUMA nodes that do not contain any housekeeping CPUs. It aims to
ensure that a NUMA node with housekeeping CPUs is eventually found.

Link: 
https://sashiko.dev/#/message/20260422030903.E1BFCC2BCB0%40smtp.kernel.org [1]

> diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
> index a044fd3b3c4e7..2e611d2de6d10 100644
> --- a/drivers/hv/channel_mgmt.c
> +++ b/drivers/hv/channel_mgmt.c
[ ... ]
> @@ -780,14 +781,16 @@ static void init_vp_index(struct vmbus_channel *channel)
>                               next_numa_node_id = 0;
>                               continue;
>                       }
> -                     if (cpumask_empty(cpumask_of_node(numa_node)))
> +                     node_mask = cpumask_of_node(numa_node);
> +                     if (cpumask_empty(node_mask) ||
> +                         !cpumask_intersects(node_mask, hk_mask))
>                               continue;
>                       break;
>               }

[Severity: High]
This is a pre-existing issue, but the patch attempts to fix an infinite retry
loop while relying on an assumption that leaves a kernel hang scenario intact
under CPU hotplug.

Could this while (true) loop in init_vp_index() iterate endlessly without
sleeping if an administrator dynamically hot-offlines all managed IRQ
housekeeping CPUs?

Since housekeeping_cpumask(HK_TYPE_MANAGED_IRQ) tracks all possible
housekeeping CPUs, the early abort check at the start of the function will see
hk_mask as non-empty even if those CPUs are currently offline.

However, cpumask_of_node() only returns online CPUs. If the remaining managed
IRQ housekeeping CPUs are offlined, cpumask_intersects(node_mask, hk_mask)
will evaluate to false for every NUMA node, causing this loop to spin
indefinitely while holding channel_mutex and cpus_read_lock().

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=1

Reply via email to