This patch serise adds support for polling I/O and mq_ops->queue_rqs() to virtio-blk driver. Changes 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 | 229 +++++++++++++++++++++++++++++++++---- 1 file changed, 206 insertions(+), 23 deletions(-) -- 2.26.3