For drivers which enable .host_tagset, introduce scsi_cmnd_hctx_index to retrieve current reply queue index. If valid scsi command is provided, blk-mq's hw queue's index is returned, otherwise return the queue mapped from current CPU. Prepare for converting device's privete reply queue to blk-mq hw queue. Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- include/scsi/scsi_cmnd.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 76ed5e4acd38..23f611a6a9f2 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h @@ -9,6 +9,7 @@ #include <linux/types.h> #include <linux/timer.h> #include <linux/scatterlist.h> +#include <scsi/scsi_host.h> #include <scsi/scsi_device.h> #include <scsi/scsi_request.h> @@ -332,4 +333,18 @@ static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd) return xfer_len; } +/* only for drivers which enable .host_tagset */ +static inline unsigned scsi_cmnd_hctx_index(struct Scsi_Host *sh, + struct scsi_cmnd *scmd) +{ + if (unlikely(!scmd || !scmd->request || !scmd->request->mq_hctx)) { + struct blk_mq_queue_map *qmap = + &sh->tag_set.map[HCTX_TYPE_DEFAULT]; + + return qmap->mq_map[raw_smp_processor_id()]; + } + + return scmd->request->mq_hctx->queue_num; +} + #endif /* _SCSI_SCSI_CMND_H */ -- 2.20.1