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

Commit 9b82e65d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://github.com/rustyrussell/linux:
  virtio-pci: make reset operation safer
  virtio-mmio: Correct the name of the guest features selector
  virtio: add HAS_IOMEM dependency to MMIO platform bus driver
parents 8174a06e e6af578c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ config VIRTIO_BALLOON

 config VIRTIO_MMIO
 	tristate "Platform bus driver for memory mapped virtio devices (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
 	depends on HAS_IOMEM && EXPERIMENTAL
 	select VIRTIO
 	select VIRTIO_RING
 	---help---
+1 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ static void vm_finalize_features(struct virtio_device *vdev)
	vring_transport_features(vdev);

	for (i = 0; i < ARRAY_SIZE(vdev->features); i++) {
		writel(i, vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES_SET);
		writel(i, vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES_SEL);
		writel(vdev->features[i],
				vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES);
	}
+18 −0
Original line number Diff line number Diff line
@@ -169,11 +169,29 @@ static void vp_set_status(struct virtio_device *vdev, u8 status)
	iowrite8(status, vp_dev->ioaddr + VIRTIO_PCI_STATUS);
}

/* wait for pending irq handlers */
static void vp_synchronize_vectors(struct virtio_device *vdev)
{
	struct virtio_pci_device *vp_dev = to_vp_device(vdev);
	int i;

	if (vp_dev->intx_enabled)
		synchronize_irq(vp_dev->pci_dev->irq);

	for (i = 0; i < vp_dev->msix_vectors; ++i)
		synchronize_irq(vp_dev->msix_entries[i].vector);
}

static void vp_reset(struct virtio_device *vdev)
{
	struct virtio_pci_device *vp_dev = to_vp_device(vdev);
	/* 0 status means a reset. */
	iowrite8(0, vp_dev->ioaddr + VIRTIO_PCI_STATUS);
	/* Flush out the status write, and flush in device writes,
	 * including MSi-X interrupts, if any. */
	ioread8(vp_dev->ioaddr + VIRTIO_PCI_STATUS);
	/* Flush pending VQ/configuration callbacks. */
	vp_synchronize_vectors(vdev);
}

/* the notify function used when creating a virt queue */
+2 −0
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@
 * @reset: reset the device
 *	vdev: the virtio device
 *	After this, status and feature negotiation must be done again
 *	Device must not be reset from its vq/config callbacks, or in
 *	parallel with being added/removed.
 * @find_vqs: find virtqueues and instantiate them.
 *	vdev: the virtio_device
 *	nvqs: the number of virtqueues to find
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@
#define VIRTIO_MMIO_GUEST_FEATURES	0x020

/* Activated features set selector - Write Only */
#define VIRTIO_MMIO_GUEST_FEATURES_SET	0x024
#define VIRTIO_MMIO_GUEST_FEATURES_SEL	0x024

/* Guest's memory page size in bytes - Write Only */
#define VIRTIO_MMIO_GUEST_PAGE_SIZE	0x028