diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-08-25 20:40:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-08-25 20:40:03 -0400 |
commit | 17e34c4fd0be14e989b08734b302cd357126fe2d (patch) | |
tree | e6d60bd49488d2a5b4afb9a3884a1097c6504a1f | |
parent | 42e6d5e5ee05a0a4fa6f71ffeeafc367a1483740 (diff) | |
parent | ba74b6f7fcc07355d087af6939712eed4a454821 (diff) |
Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
Pull virtio fixes from Michael Tsirkin:
"Fixes two obvious bugs in virtio pci"
* tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
virtio_pci: fix cpu affinity support
virtio_blk: fix incorrect message when disk is resized
-rw-r--r-- | drivers/block/virtio_blk.c | 16 | ||||
-rw-r--r-- | drivers/virtio/virtio_pci_common.c | 10 |
2 files changed, 17 insertions, 9 deletions
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 1498b899a593..d3d5523862c2 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
@@ -381,6 +381,7 @@ static void virtblk_config_changed_work(struct work_struct *work) | |||
381 | struct request_queue *q = vblk->disk->queue; | 381 | struct request_queue *q = vblk->disk->queue; |
382 | char cap_str_2[10], cap_str_10[10]; | 382 | char cap_str_2[10], cap_str_10[10]; |
383 | char *envp[] = { "RESIZE=1", NULL }; | 383 | char *envp[] = { "RESIZE=1", NULL }; |
384 | unsigned long long nblocks; | ||
384 | u64 capacity; | 385 | u64 capacity; |
385 | 386 | ||
386 | /* Host must always specify the capacity. */ | 387 | /* Host must always specify the capacity. */ |
@@ -393,16 +394,19 @@ static void virtblk_config_changed_work(struct work_struct *work) | |||
393 | capacity = (sector_t)-1; | 394 | capacity = (sector_t)-1; |
394 | } | 395 | } |
395 | 396 | ||
396 | string_get_size(capacity, queue_logical_block_size(q), | 397 | nblocks = DIV_ROUND_UP_ULL(capacity, queue_logical_block_size(q) >> 9); |
398 | |||
399 | string_get_size(nblocks, queue_logical_block_size(q), | ||
397 | STRING_UNITS_2, cap_str_2, sizeof(cap_str_2)); | 400 | STRING_UNITS_2, cap_str_2, sizeof(cap_str_2)); |
398 | string_get_size(capacity, queue_logical_block_size(q), | 401 | string_get_size(nblocks, queue_logical_block_size(q), |
399 | STRING_UNITS_10, cap_str_10, sizeof(cap_str_10)); | 402 | STRING_UNITS_10, cap_str_10, sizeof(cap_str_10)); |
400 | 403 | ||
401 | dev_notice(&vdev->dev, | 404 | dev_notice(&vdev->dev, |
402 | "new size: %llu %d-byte logical blocks (%s/%s)\n", | 405 | "new size: %llu %d-byte logical blocks (%s/%s)\n", |
403 | (unsigned long long)capacity, | 406 | nblocks, |
404 | queue_logical_block_size(q), | 407 | queue_logical_block_size(q), |
405 | cap_str_10, cap_str_2); | 408 | cap_str_10, |
409 | cap_str_2); | ||
406 | 410 | ||
407 | set_capacity(vblk->disk, capacity); | 411 | set_capacity(vblk->disk, capacity); |
408 | revalidate_disk(vblk->disk); | 412 | revalidate_disk(vblk->disk); |
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index 007a4f366086..1c4797e53f68 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c | |||
@@ -107,6 +107,7 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors, | |||
107 | { | 107 | { |
108 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); | 108 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); |
109 | const char *name = dev_name(&vp_dev->vdev.dev); | 109 | const char *name = dev_name(&vp_dev->vdev.dev); |
110 | unsigned flags = PCI_IRQ_MSIX; | ||
110 | unsigned i, v; | 111 | unsigned i, v; |
111 | int err = -ENOMEM; | 112 | int err = -ENOMEM; |
112 | 113 | ||
@@ -126,10 +127,13 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors, | |||
126 | GFP_KERNEL)) | 127 | GFP_KERNEL)) |
127 | goto error; | 128 | goto error; |
128 | 129 | ||
130 | if (desc) { | ||
131 | flags |= PCI_IRQ_AFFINITY; | ||
132 | desc->pre_vectors++; /* virtio config vector */ | ||
133 | } | ||
134 | |||
129 | err = pci_alloc_irq_vectors_affinity(vp_dev->pci_dev, nvectors, | 135 | err = pci_alloc_irq_vectors_affinity(vp_dev->pci_dev, nvectors, |
130 | nvectors, PCI_IRQ_MSIX | | 136 | nvectors, flags, desc); |
131 | (desc ? PCI_IRQ_AFFINITY : 0), | ||
132 | desc); | ||
133 | if (err < 0) | 137 | if (err < 0) |
134 | goto error; | 138 | goto error; |
135 | vp_dev->msix_enabled = 1; | 139 | vp_dev->msix_enabled = 1; |