Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit add810a1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
  virtio: order used ring after used index read
  virtio-pci: fix per-vq MSI-X request logic
parents 68e71d19 2d61ba95
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -530,13 +530,17 @@ static int vp_try_to_find_vqs(struct virtio_device *vdev, unsigned nvqs,
			err = PTR_ERR(vqs[i]);
			goto error_find;
		}

		if (!vp_dev->per_vq_vectors || msix_vec == VIRTIO_MSI_NO_VECTOR)
			continue;

		/* allocate per-vq irq if available and necessary */
		if (vp_dev->per_vq_vectors) {
		snprintf(vp_dev->msix_names[msix_vec],
			 sizeof *vp_dev->msix_names,
			 "%s-%s",
			 dev_name(&vp_dev->vdev.dev), names[i]);
			err = request_irq(msix_vec, vring_interrupt, 0,
		err = request_irq(vp_dev->msix_entries[msix_vec].vector,
				  vring_interrupt, 0,
				  vp_dev->msix_names[msix_vec],
				  vqs[i]);
		if (err) {
@@ -544,7 +548,6 @@ static int vp_try_to_find_vqs(struct virtio_device *vdev, unsigned nvqs,
			goto error_find;
		}
	}
	}
	return 0;

error_find:
+3 −0
Original line number Diff line number Diff line
@@ -285,6 +285,9 @@ static void *vring_get_buf(struct virtqueue *_vq, unsigned int *len)
		return NULL;
	}

	/* Only get used array entries after they have been exposed by host. */
	rmb();

	i = vq->vring.used->ring[vq->last_used_idx%vq->vring.num].id;
	*len = vq->vring.used->ring[vq->last_used_idx%vq->vring.num].len;