[PATCH V2 0/6] blk-mq: fix blk_mq_alloc_request_hctx
Ming Lei
ming.lei at redhat.com
Fri Jul 2 08:05:49 PDT 2021
Hi,
blk_mq_alloc_request_hctx() is used by NVMe fc/rdma/tcp/loop to connect
io queue. Also the sw ctx is chosen as the 1st online cpu in hctx->cpumask.
However, all cpus in hctx->cpumask may be offline.
This usage model isn't well supported by blk-mq which supposes allocator is
always done on one online CPU in hctx->cpumask. This assumption is
related with managed irq, which also requires blk-mq to drain inflight
request in this hctx when the last cpu in hctx->cpumask is going to
offline.
However, NVMe fc/rdma/tcp/loop don't use managed irq, so we should allow
them to ask for request allocation when the specified hctx is inactive
(all cpus in hctx->cpumask are offline).
Fix blk_mq_alloc_request_hctx() by adding/passing flag of BLK_MQ_F_MANAGED_IRQ.
Meantime optimize blk-mq cpu hotplug handling for non-managed irq.
V2:
- use flag of BLK_MQ_F_MANAGED_IRQ
- pass BLK_MQ_F_MANAGED_IRQ from driver explicitly
- kill BLK_MQ_F_STACKING
Ming Lei (6):
blk-mq: prepare for not deactivating hctx if managed irq isn't used
nvme: pci: pass BLK_MQ_F_MANAGED_IRQ to blk-mq
scsi: add flag of .use_managed_irq to 'struct Scsi_Host'
scsi: set shost->use_managed_irq if driver uses managed irq
virtio: add one field into virtio_device for recording if device uses
managed irq
blk-mq: don't deactivate hctx if managed irq isn't used
block/blk-mq-debugfs.c | 2 +-
block/blk-mq.c | 27 +++++++++++++----------
drivers/block/loop.c | 2 +-
drivers/block/virtio_blk.c | 2 ++
drivers/md/dm-rq.c | 2 +-
drivers/nvme/host/pci.c | 3 ++-
drivers/scsi/aacraid/linit.c | 3 +++
drivers/scsi/be2iscsi/be_main.c | 3 +++
drivers/scsi/csiostor/csio_init.c | 3 +++
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 1 +
drivers/scsi/hpsa.c | 3 +++
drivers/scsi/lpfc/lpfc.h | 1 +
drivers/scsi/lpfc/lpfc_init.c | 4 ++++
drivers/scsi/megaraid/megaraid_sas_base.c | 3 +++
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 3 +++
drivers/scsi/qla2xxx/qla_isr.c | 5 ++++-
drivers/scsi/scsi_lib.c | 12 +++++-----
drivers/scsi/smartpqi/smartpqi_init.c | 3 +++
drivers/scsi/virtio_scsi.c | 1 +
drivers/virtio/virtio_pci_common.c | 1 +
include/linux/blk-mq.h | 6 +----
include/linux/virtio.h | 1 +
include/scsi/scsi_host.h | 3 +++
23 files changed, 67 insertions(+), 27 deletions(-)
--
2.31.1
More information about the Linux-nvme
mailing list