Re: [PATCH v11 00/13] blk: honor isolcpus configuration

From: Aaron Tomlin

Date: Thu Apr 16 2026 - 15:49:35 EST


On Thu, Apr 16, 2026 at 03:29:29PM -0400, Aaron Tomlin wrote:
> Please let me know your thoughts.

My apologies, I neglected to include the changelog.

Changes in v11:

- Completely rewrote the isolcpus=io_queue documentation in
Documentation/admin-guide/kernel-parameters.txt to clarify its exclusive
application to managed IRQs, queue allocation limits, vector exhaustion
prevention, and hardware interrupt routing (Ming Lei)

- Fixed a stack frame bloat issue by avoiding the on-stack declaration of
struct cpumask (Waiman Long)

- Linked to v10: https://lore.kernel.org/linux-nvme/20260401222312.772334-1-atomlin@xxxxxxxxxxx/

Changes in v10:

- Fixed a page fault regression encountered when initialising secondary
queue maps (e.g., NVMe poll queues). Restored the qmap->queue_offset to
the mq_map assignment to ensure CPUs are strictly mapped to absolute
hardware indices (Keith Busch)

- Corrected the active_hctx tracker to utilise relative queue indices,
preventing out-of-bounds mask assignments

- Fixed the blk_mq_validate() sanity check to properly evaluate absolute
queue indices against the offset-adjusted loop index

- Corrected typographical errors within block/blk-mq-cpumap.c
(Keith Busch)

- Clarified the commit message regarding the removal of the !SMP fallback
code, explicitly noting that the core scheduler now mandates SMP
unconditionally (Sebastian Andrzej Siewior)

- Added missing "Signed-off-by:" tags to properly record the patch series
chain of custody

- Linked to v9: https://lore.kernel.org/lkml/20260330221047.630206-1-atomlin@xxxxxxxxxxx/

Changes in v9:

- Added "Reviewed-by:" tags

- Introduced irq_spread_hk_filter() to safely restrict managed IRQ
affinity to housekeeping CPUs (Thomas Gleixner)

- Removed the unsafe global static variable blk_hk_online_mask from
blk-mq-cpumap.c and blk-mq.c. blk_mq_online_queue_affinity() now returns
a stable pointer, delegating safe intersection to the callers to prevent
concurrent modification races (Thomas Gleixner, Hannes Reinecke)

- Resolved BUG: kernel NULL pointer dereference in __blk_mq_all_tag_iter
reported by the kernel test robot during cpuhotplug rcutorture stress
testing

- Linked to v8: https://lore.kernel.org/lkml/20250905-isolcpus-io-queues-v8-0-885984c5daca@xxxxxxxxxx/

Changes in v8:

- Added commit 524f5eea4bbe ("lib/group_cpus: remove !SMP code")

- Merged the new mapping logic directly into the existing function to
avoid special casing

- Refined the group_mask_cpus_evenly() implementation with the following
updates:

- Corrected the function name typo (changed group_masks_cpus_evenly to
group_mask_cpus_evenly)

- Updated the documentation comment to accurately reflect the function's
behavior

- Renamed the cpu_mask argument to mask for consistency

- Added a new patch for aacraid to include the missing number of queues
calculation

- Restricted updates to only affect SCSI drivers that support
PCI_IRQ_AFFINITY and do not utilize nvme-fabrics

- Removed the __free cleanup attribute usage for cpumask_var_t allocations
due to compatibility issues

- Updated the documentation to explicitly highlight the limitations
surrounding CPU offlining

- Collected accumulated Reviewed-by and Acked-by tags

- Linked to v7: https://patch.msgid.link/20250702-isolcpus-io-queues-v7-0-557aa7eacce4@xxxxxxxxxx

Changes in v7:

- Sent out the first part of the series independently:
https://lore.kernel.org/all/20250617-isolcpus-queue-counters-v1-0-13923686b54b@xxxxxxxxxx/

- Added comprehensive kernel command-line documentation

- Added validation logic to ensure the resulting CPU-to-queue mapping is
fully operational

- Rewrote the isolcpus mapping code to properly account for active
hardware contexts (hctx)

- Introduced blk_mq_map_hk_irq_queues, which utilizes the mask retrieved
from irq_get_affinity()

- Refactored blk_mq_map_hk_queues to require the caller to explicitly test
for HK_TYPE_MANAGED_IRQ

- Linked to v6: https://patch.msgid.link/20250424-isolcpus-io-queues-v6-0-9a53a870ca1f@xxxxxxxxxx

Changes in v6:

- Reintroduced the io_queue type for the isolcpus kernel parameter

- Prevented the offlining of a housekeeping CPU if an isolated CPU is
still present, upgrading this behavior from a simple warning to a hard
restriction

- Linked to v5: https://lore.kernel.org/r/20250110-isolcpus-io-queues-v5-0-0e4f118680b0@xxxxxxxxxx

Changes in v5:

- Rebased the series onto the latest for-6.14/block branch.

- Updated the documentation regarding the managed_irq parameters

- Reworded the commit message for "blk-mq: issue warning when offlining
hctx with online isolcpus" for better clarity

- Split the input and output parameters in the patch "lib/group_cpus: let
group_cpu_evenly return number of groups"

- Dropped the patch "sched/isolation: document HK_TYPE housekeeping
option"

- Linked to v4: https://lore.kernel.org/r/20241217-isolcpus-io-queues-v4-0-5d355fbb1e14@xxxxxxxxxx

Changes in v4:

- Added the patch "blk-mq: issue warning when offlining hctx with online
isolcpus"

- Fixed the check in group_cpus_evenly(); the condition now properly uses
housekeeping_enabled() instead of cpumask_weight(), as the latter always
returns a valid mask

- Dropped the Fixes: tag from "lib/group_cpus.c: honor housekeeping config
when grouping CPUs"

- Fixed an overlong line warning in the patch "scsi: use block layer
helpers to calculate num of queues"

- Dropped the patch "sched/isolation: Add io_queue housekeeping option" in
favor of simply documenting the housekeeping hk_type enum

- Added the patch "lib/group_cpus: let group_cpu_evenly return number of
groups"

- Collected accumulated Reviewed-by and Acked-by tags

- Split the patchset by moving foundational changes into a separate
preparation series:
https://lore.kernel.org/linux-nvme/20241202-refactor-blk-affinity-helpers-v6-0-27211e9c2cd5@xxxxxxxxxx/

- Linked to v3: https://lore.kernel.org/r/20240806-isolcpus-io-queues-v3-0-da0eecfeaf8b@xxxxxxx

Changes in v3:

- Integrated patches from Ming Lei
(https://lore.kernel.org/all/20210709081005.421340-1-ming.lei@xxxxxxxxxx/):
"virtio: add APIs for retrieving vq affinity" and "blk-mq: introduce
blk_mq_dev_map_queues"

- Replaced all instances of blk_mq_pci_map_queues and
blk_mq_virtio_map_queues with the new unified blk_mq_dev_map_queues

- Updated and expanded the helper functions used for calculating the
number of queues

- Added the CPU-to-hctx mapping function specifically to support the
isolcpus=io_queue parameter

- Documented the hk_type enum and the newly introduced isolcpus=io_queue
parameter

- Added the patch "scsi: pm8001: do not overwrite PCI queue mapping"

- Linked to v2: https://lore.kernel.org/r/20240627-isolcpus-io-queues-v2-0-26a32e3c4f75@xxxxxxx

Changes in v2:

- Updated the feature documentation for clarity and completeness

- Split the blk/nvme-pci patch into smaller, logical commits

- Dropped the HK_TYPE_IO_QUEUE macro in favor of reusing
HK_TYPE_MANAGED_IRQ

- Linked to v1: https://lore.kernel.org/r/20240621-isolcpus-io-queues-v1-0-8b169bf41083@xxxxxxx

>
> Aaron Tomlin (1):
> genirq/affinity: Restrict managed IRQ affinity to housekeeping CPUs
>
> Daniel Wagner (12):
> scsi: aacraid: use block layer helpers to calculate num of queues
> lib/group_cpus: remove dead !SMP code
> lib/group_cpus: Add group_mask_cpus_evenly()
> genirq/affinity: Add cpumask to struct irq_affinity
> blk-mq: add blk_mq_{online|possible}_queue_affinity
> nvme-pci: use block layer helpers to constrain queue affinity
> scsi: Use block layer helpers to constrain queue affinity
> virtio: blk/scsi: use block layer helpers to constrain queue affinity
> isolation: Introduce io_queue isolcpus type
> blk-mq: use hk cpus only when isolcpus=io_queue is enabled
> blk-mq: prevent offlining hk CPUs with associated online isolated CPUs
> docs: add io_queue flag to isolcpus
>
> .../admin-guide/kernel-parameters.txt | 30 ++-
> block/blk-mq-cpumap.c | 192 ++++++++++++++++--
> block/blk-mq.c | 42 ++++
> drivers/block/virtio_blk.c | 4 +-
> drivers/nvme/host/pci.c | 1 +
> drivers/scsi/aacraid/comminit.c | 3 +-
> drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 1 +
> drivers/scsi/megaraid/megaraid_sas_base.c | 5 +-
> drivers/scsi/mpi3mr/mpi3mr_fw.c | 6 +-
> drivers/scsi/mpt3sas/mpt3sas_base.c | 5 +-
> drivers/scsi/pm8001/pm8001_init.c | 1 +
> drivers/scsi/virtio_scsi.c | 5 +-
> include/linux/blk-mq.h | 2 +
> include/linux/group_cpus.h | 3 +
> include/linux/interrupt.h | 16 +-
> include/linux/sched/isolation.h | 1 +
> kernel/irq/affinity.c | 38 +++-
> kernel/sched/isolation.c | 7 +
> lib/group_cpus.c | 65 ++++--
> 19 files changed, 379 insertions(+), 48 deletions(-)
>
>
> base-commit: 3cd8b194bf3428dfa53120fee47e827a7c495815
> --
> 2.51.0
>

--
Aaron Tomlin