This patch serise adds support for polling I/O and mq_ops->queue_rqs() to virtio-blk driver. Changes v5 -> v6 - patch1 : virtblk_poll - Remove memset in init_vq() - Fix space indent in init_vq() - Replace if condition with positive check in virtblk_map_queues() if (i == HCTX_TYPE_POLL) blk_mq_map_queues(&set->map[i]); else blk_mq_virtio_map_queues(&set->map[i], vblk->vdev, 0); - Add Reviewed-by tags - patch2 : virtio_queue_rqs - Add Reviewed-by tags v4 -> v5 - patch1 : virtblk_poll - Replace "req_done" with "found" in virtblk_poll() - Split for loop into two distinct for loop in init_vq() that sets callback function for each default/poll queues - Replace "if (i == HCTX_TYPE_DEFAULT)" with "i != HCTX_TYPE_POLL" in virtblk_map_queues() - Replace "virtblk_unmap_data(req, vbr);" with "virtblk_unmap_data(req, blk_mq_rq_to_pdu(req);" in virtblk_complete_batch() - patch2 : virtio_queue_rqs - Instead of using vbr.sg_num field, use vbr->sg_table.nents. So, remove sg_num field in struct virtblk_req - Drop the unnecessary argument of virtblk_add_req() because it doens't need "data_sg" and "have_data". It can be derived from "vbr" argument. - Add Reviewed-by tag from Stefan v3 -> v4 - patch1 : virtblk_poll - Add print the number of default/read/poll queues in init_vq() - Add blk_mq_start_stopped_hw_queues() to virtblk_poll() virtblk_poll() ... if (req_done) blk_mq_start_stopped_hw_queues(vblk->disk->queue, true); ... - patch2 : virtio_queue_rqs - Modify virtio_queue_rqs() to hold lock only once when it adds requests to virtqueue just before virtqueue notify. It will guarantee that virtio_queue_rqs() will not use previous req again. v2 -> v3 - Fix warning by kernel test robot static int virtblk_poll() ... if (!blk_mq_add_to_batch(req, iob, virtblk_result(vbr), -> vbr->status, v1 -> v2 - To receive the number of poll queues from user, use module parameter instead of QEMU uapi change. - Add the comment about virtblk_map_queues(). - Add support for mq_ops->queue_rqs() to implement submit side batch. Suwan Kim (2): virtio-blk: support polling I/O virtio-blk: support mq_ops->queue_rqs() drivers/block/virtio_blk.c | 220 +++++++++++++++++++++++++++++++++---- 1 file changed, 201 insertions(+), 19 deletions(-) -- 2.26.3