linux-stable/drivers/block
Ming Lei e8edca6f7f block: virtio_blk: don't hold spin lock during world switch
Firstly, it isn't necessary to hold lock of vblk->vq_lock
when notifying hypervisor about queued I/O.

Secondly, virtqueue_notify() will cause world switch and
it may take long time on some hypervisors(such as, qemu-arm),
so it isn't good to hold the lock and block other vCPUs.

On arm64 quad core VM(qemu-kvm), the patch can increase I/O
performance a lot with VIRTIO_RING_F_EVENT_IDX enabled:
	- without the patch: 14K IOPS
	- with the patch: 34K IOPS

fio script:
	[global]
	direct=1
	bsrange=4k-4k
	timeout=10
	numjobs=4
	ioengine=libaio
	iodepth=64

	filename=/dev/vdc
	group_reporting=1

	[f1]
	rw=randread

Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: virtualization@lists.linux-foundation.org
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: stable@kernel.org # 3.13+
Signed-off-by: Jens Axboe <axboe@fb.com>
2014-05-30 08:19:39 -06:00
..
aoe mm: close PageTail race 2014-03-04 07:55:47 -08:00
drbd drbd: use list_first_entry_or_null in first_peer_device/first_connection 2014-04-30 13:46:56 -06:00
mtip32xx Merge branch 'for-3.16/core' into for-3.16/drivers 2014-05-30 08:11:50 -06:00
paride block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
rsxx block: Convert bio_for_each_segment() to bvec_iter 2013-11-23 22:33:49 -08:00
xen-blkback xen-blkback: defer freeing blkif to avoid blocking xenwatch 2014-05-28 14:17:32 -04:00
zram zram: support REQ_DISCARD 2014-04-07 16:36:02 -07:00
amiflop.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
ataflop.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
brd.c block: Convert bio_for_each_segment() to bvec_iter 2013-11-23 22:33:49 -08:00
cciss.c cciss: Use pci_enable_msix_exact() instead of pci_enable_msix() 2014-04-21 19:02:08 -06:00
cciss.h
cciss_cmd.h
cciss_scsi.c
cciss_scsi.h
cpqarray.c cpqarray: fix info leak in ida_locked_ioctl() 2013-09-24 17:00:26 -07:00
cpqarray.h
cryptoloop.c
DAC960.c DAC960: remove sleep_on usage 2014-03-13 14:56:38 -06:00
DAC960.h
floppy.c floppy: do not corrupt bio.bi_flags when reading block 0 2014-05-28 14:56:52 +02:00
hd.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
ida_cmd.h
ida_ioctl.h
Kconfig zram: promote zram from staging 2014-01-30 16:56:55 -08:00
loop.c drivers/block/loop.c: ratelimit error messages 2014-04-08 14:44:35 -06:00
loop.h
Makefile zram: promote zram from staging 2014-01-30 16:56:55 -08:00
mg_disk.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
nbd.c switch nbd to sockfd_lookup/sockfd_put 2014-04-01 23:19:10 -04:00
null_blk.c Merge branch 'for-3.16/core' into for-3.16/drivers 2014-05-28 10:18:51 -06:00
nvme-core.c Merge git://git.infradead.org/users/willy/linux-nvme 2014-04-11 16:45:59 -07:00
nvme-scsi.c NVMe: Retry failed commands with non-fatal errors 2014-04-10 17:11:59 -04:00
osdblk.c
pktcdvd.c pktcdvd: fix error return code 2014-01-03 10:05:34 +01:00
ps3disk.c block: Kill bio_segments()/bi_vcnt usage 2013-11-23 22:33:51 -08:00
ps3vram.c block: Convert bio_for_each_segment() to bvec_iter 2013-11-23 22:33:49 -08:00
rbd.c rbd: prefix rbd writes with CEPH_OSD_OP_SETALLOCHINT osd op 2014-04-03 10:33:52 +08:00
rbd_types.h
skd_main.c Merge branch 'for-3.16/core' into for-3.16/drivers 2014-05-28 09:50:26 -06:00
skd_s1120.h skd: fix formatting in skd_s1120.h 2013-11-08 09:10:30 -07:00
smart1,2.h
sunvdc.c
swim.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
swim3.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
swim_asm.S
sx8.c drivers/block/sx8.c: remove unnecessary pci_set_drvdata() 2014-01-21 20:16:56 -08:00
umem.c block: Convert drivers to immutable biovecs 2013-11-23 22:33:51 -08:00
umem.h
virtio_blk.c block: virtio_blk: don't hold spin lock during world switch 2014-05-30 08:19:39 -06:00
xen-blkfront.c Merge branch 'stable/for-jens-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip into for-3.16/drivers 2014-05-28 12:37:04 -06:00
xsysace.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00
z2ram.c block: remove struct request buffer member 2014-04-15 14:03:02 -06:00