scsi: scsi_debug: Support host tagset
When host_max_queue is set (> 0), set the Scsi_Host.host_tagset such that blk-mq will use a hostwide tagset over all SCSI host submission queues. This means that we may expose all submission queues and always use the hwq chosen by blk-mq. And since if sdebug_host_max_queue is set, sdebug_max_queue is fixed to the same value, we can simplify how sdebug_driver_template.can_queue is set. Signed-off-by: John Garry <john.garry@huawei.com> Tested-by: Douglas Gilbert <dgilbert@interlog.com> Acked-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
8d98416a55
commit
f7c4cdc712
@ -4696,19 +4696,14 @@ fini:
|
||||
static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
|
||||
{
|
||||
u16 hwq;
|
||||
u32 tag = blk_mq_unique_tag(cmnd->request);
|
||||
|
||||
if (sdebug_host_max_queue) {
|
||||
/* Provide a simple method to choose the hwq */
|
||||
hwq = smp_processor_id() % submit_queues;
|
||||
} else {
|
||||
u32 tag = blk_mq_unique_tag(cmnd->request);
|
||||
hwq = blk_mq_unique_tag_to_hwq(tag);
|
||||
|
||||
hwq = blk_mq_unique_tag_to_hwq(tag);
|
||||
pr_debug("tag=%#x, hwq=%d\n", tag, hwq);
|
||||
if (WARN_ON_ONCE(hwq >= submit_queues))
|
||||
hwq = 0;
|
||||
|
||||
pr_debug("tag=%#x, hwq=%d\n", tag, hwq);
|
||||
if (WARN_ON_ONCE(hwq >= submit_queues))
|
||||
hwq = 0;
|
||||
}
|
||||
return sdebug_q_arr + hwq;
|
||||
}
|
||||
|
||||
@ -7347,10 +7342,7 @@ static int sdebug_driver_probe(struct device *dev)
|
||||
|
||||
sdbg_host = to_sdebug_host(dev);
|
||||
|
||||
if (sdebug_host_max_queue)
|
||||
sdebug_driver_template.can_queue = sdebug_host_max_queue;
|
||||
else
|
||||
sdebug_driver_template.can_queue = sdebug_max_queue;
|
||||
sdebug_driver_template.can_queue = sdebug_max_queue;
|
||||
if (!sdebug_clustering)
|
||||
sdebug_driver_template.dma_boundary = PAGE_SIZE - 1;
|
||||
|
||||
@ -7367,11 +7359,11 @@ static int sdebug_driver_probe(struct device *dev)
|
||||
}
|
||||
/*
|
||||
* Decide whether to tell scsi subsystem that we want mq. The
|
||||
* following should give the same answer for each host. If the host
|
||||
* has a limit of hostwide max commands, then do not set.
|
||||
* following should give the same answer for each host.
|
||||
*/
|
||||
if (!sdebug_host_max_queue)
|
||||
hpnt->nr_hw_queues = submit_queues;
|
||||
hpnt->nr_hw_queues = submit_queues;
|
||||
if (sdebug_host_max_queue)
|
||||
hpnt->host_tagset = 1;
|
||||
|
||||
sdbg_host->shost = hpnt;
|
||||
*((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
|
||||
|
Loading…
Reference in New Issue
Block a user