diff options
| author | David S. Miller <davem@davemloft.net> | 2011-12-02 13:49:21 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-12-02 13:49:21 -0500 |
| commit | b3613118eb30a589d971e4eccbbb2a1314f5dfd4 (patch) | |
| tree | 868c1ee59e1b5c19a4f2e43716400d0001a994e5 /drivers/virtio | |
| parent | 7505afe28c16a8d386624930a018d0052c75d687 (diff) | |
| parent | 5983fe2b29df5885880d7fa3b91aca306c7564ef (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'drivers/virtio')
| -rw-r--r-- | drivers/virtio/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/virtio/virtio_mmio.c | 2 | ||||
| -rw-r--r-- | drivers/virtio/virtio_pci.c | 18 |
3 files changed, 20 insertions, 2 deletions
diff --git a/drivers/virtio/Kconfig b/drivers/virtio/Kconfig index 816ed08e7cf3..1a61939b85fc 100644 --- a/drivers/virtio/Kconfig +++ b/drivers/virtio/Kconfig | |||
| @@ -37,7 +37,7 @@ config VIRTIO_BALLOON | |||
| 37 | 37 | ||
| 38 | config VIRTIO_MMIO | 38 | config VIRTIO_MMIO |
| 39 | tristate "Platform bus driver for memory mapped virtio devices (EXPERIMENTAL)" | 39 | tristate "Platform bus driver for memory mapped virtio devices (EXPERIMENTAL)" |
| 40 | depends on EXPERIMENTAL | 40 | depends on HAS_IOMEM && EXPERIMENTAL |
| 41 | select VIRTIO | 41 | select VIRTIO |
| 42 | select VIRTIO_RING | 42 | select VIRTIO_RING |
| 43 | ---help--- | 43 | ---help--- |
diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index 2f57380d7ed4..0269717436af 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c | |||
| @@ -118,7 +118,7 @@ static void vm_finalize_features(struct virtio_device *vdev) | |||
| 118 | vring_transport_features(vdev); | 118 | vring_transport_features(vdev); |
| 119 | 119 | ||
| 120 | for (i = 0; i < ARRAY_SIZE(vdev->features); i++) { | 120 | for (i = 0; i < ARRAY_SIZE(vdev->features); i++) { |
| 121 | writel(i, vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES_SET); | 121 | writel(i, vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES_SEL); |
| 122 | writel(vdev->features[i], | 122 | writel(vdev->features[i], |
| 123 | vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES); | 123 | vm_dev->base + VIRTIO_MMIO_GUEST_FEATURES); |
| 124 | } | 124 | } |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 91683e6e7af5..baabb7937ec2 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -169,11 +169,29 @@ static void vp_set_status(struct virtio_device *vdev, u8 status) | |||
| 169 | iowrite8(status, vp_dev->ioaddr + VIRTIO_PCI_STATUS); | 169 | iowrite8(status, vp_dev->ioaddr + VIRTIO_PCI_STATUS); |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | /* wait for pending irq handlers */ | ||
| 173 | static void vp_synchronize_vectors(struct virtio_device *vdev) | ||
| 174 | { | ||
| 175 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); | ||
| 176 | int i; | ||
| 177 | |||
| 178 | if (vp_dev->intx_enabled) | ||
| 179 | synchronize_irq(vp_dev->pci_dev->irq); | ||
| 180 | |||
| 181 | for (i = 0; i < vp_dev->msix_vectors; ++i) | ||
| 182 | synchronize_irq(vp_dev->msix_entries[i].vector); | ||
| 183 | } | ||
| 184 | |||
| 172 | static void vp_reset(struct virtio_device *vdev) | 185 | static void vp_reset(struct virtio_device *vdev) |
| 173 | { | 186 | { |
| 174 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); | 187 | struct virtio_pci_device *vp_dev = to_vp_device(vdev); |
| 175 | /* 0 status means a reset. */ | 188 | /* 0 status means a reset. */ |
| 176 | iowrite8(0, vp_dev->ioaddr + VIRTIO_PCI_STATUS); | 189 | iowrite8(0, vp_dev->ioaddr + VIRTIO_PCI_STATUS); |
| 190 | /* Flush out the status write, and flush in device writes, | ||
| 191 | * including MSi-X interrupts, if any. */ | ||
| 192 | ioread8(vp_dev->ioaddr + VIRTIO_PCI_STATUS); | ||
| 193 | /* Flush pending VQ/configuration callbacks. */ | ||
| 194 | vp_synchronize_vectors(vdev); | ||
| 177 | } | 195 | } |
| 178 | 196 | ||
| 179 | /* the notify function used when creating a virt queue */ | 197 | /* the notify function used when creating a virt queue */ |
