> If all CPUs in vq->irq_affinity are offline, cpumask_next() walks to the
> end of the mask, and the loop then resets the cursor to IRQ_UNBOUND and
> restarts the scan. When VDUSE_VQ_INJECT_IRQ is issued, the intersection of
> vq->irq_affinity and cpu_online_mask is empty, so the caller busy-loops in
> kernel context on its current CPU (e.g. CPU2).
>
> Replace the while loop in vduse_vq_update_effective_cpu() with
> cpumask_next_and_wrap() to find the intersection of vq->irq_affinity and
> cpu_online_mask in a single wrapped scan. If the intersection is empty, set
> curr_cpu to IRQ_UNBOUND and let the existing unbound workqueue handle
> injection, avoiding repeated rescans when all CPUs in the affinity are
> offline. Use cpus_read_lock()/cpus_read_unlock() to keep the selected CPU
> online.
>
> Fixes: 28f6288eb63d ("vduse: Support set_vq_affinity callback")
> Signed-off-by: Jia Jia <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review ยท
https://sashiko.dev/#/patchset/[email protected]?part=1