[PULL] vhost: cleanups and fixes
The following changes since commit b7392d2247cfe6771f95d256374f1a8e6a6f48d6: Linux 3.19-rc2 (2014-12-28 16:49:37 -0800) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git tags/for_linus for you to fetch changes up to 5d9a07b0de512b77bf28d2401e5fe3351f00a240: vhost: relax used address alignment (2014-12-29 10:55:06 +0200) vhost: virtio 1.0 bugfix There's a single change here, fixing a vhost bug where vhost initialization fails due to used ring alignment check being too strict. Cc: Rusty Russell Signed-off-by: Michael S. Tsirkin Michael S. Tsirkin (2): virtio_ring: document alignment requirements vhost: relax used address alignment include/uapi/linux/virtio_ring.h | 7 +++ drivers/vhost/vhost.c| 10 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
[PATCH 2/2] virtio: don't free memory until the underlying struct device has been released
When releasing a virtio device, We can't free a struct virtio_device until the underlying struct device has been released, which might not happen immediately on device_unregister() even if that was the device's last reference. Instead, free the memory only once we know the device is gone in the release callback. Signed-off-by: Sasha Levin --- drivers/virtio/virtio_pci_common.c |9 - drivers/virtio/virtio_pci_legacy.c |1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index 59d3685..caa483d 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c @@ -423,11 +423,10 @@ int vp_set_vq_affinity(struct virtqueue *vq, int cpu) void virtio_pci_release_dev(struct device *_d) { - /* -* No need for a release method as we allocate/free -* all devices together with the pci devices. -* Provide an empty one to avoid getting a warning from core. -*/ + struct virtio_device *vdev = dev_to_virtio(_d); + struct virtio_pci_device *vp_dev = to_vp_device(vdev); + + kfree(vp_dev); } #ifdef CONFIG_PM_SLEEP diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c index 913ca23..15e6e6d 100644 --- a/drivers/virtio/virtio_pci_legacy.c +++ b/drivers/virtio/virtio_pci_legacy.c @@ -301,5 +301,4 @@ void virtio_pci_legacy_remove(struct pci_dev *pci_dev) pci_iounmap(pci_dev, vp_dev->ioaddr); pci_release_regions(pci_dev); pci_disable_device(pci_dev); - kfree(vp_dev); } -- 1.7.10.4 ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
[PATCH 1/2] virtio_pci: double free and invalid memory access of device vqs
Device VQs were getting freed twice: once in every devices removal functions, and then again in virtio_pci_legacy_remove(). Signed-off-by: Sasha Levin --- drivers/virtio/virtio_pci_legacy.c |1 - 1 file changed, 1 deletion(-) diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c index 6c76f0f..913ca23 100644 --- a/drivers/virtio/virtio_pci_legacy.c +++ b/drivers/virtio/virtio_pci_legacy.c @@ -298,7 +298,6 @@ void virtio_pci_legacy_remove(struct pci_dev *pci_dev) unregister_virtio_device(&vp_dev->vdev); - vp_del_vqs(&vp_dev->vdev); pci_iounmap(pci_dev, vp_dev->ioaddr); pci_release_regions(pci_dev); pci_disable_device(pci_dev); -- 1.7.10.4 ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization