Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
Pull virtio/vhost updates from Michael Tsirkin: "virtio, vhost: fixes, cleanups, features This includes the disk/cache memory stats for for the virtio balloon, as well as multiple fixes and cleanups" * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost: vhost: don't hold onto file pointer for VHOST_SET_LOG_FD vhost: don't hold onto file pointer for VHOST_SET_VRING_ERR vhost: don't hold onto file pointer for VHOST_SET_VRING_CALL ringtest: ring.c malloc & memset to calloc virtio_vop: don't kfree device on register failure virtio_pci: don't kfree device on register failure virtio: split device_register into device_initialize and device_add vhost: remove unused lock check flag in vhost_dev_cleanup() vhost: Remove the unused variable. virtio_blk: print capacity at probe time virtio: make VIRTIO a menuconfig to ease disabling it all virtio/ringtest: virtio_ring: fix up need_event math virtio/ringtest: fix up need_event math virtio: virtio_mmio: make of_device_ids const. firmware: Use PTR_ERR_OR_ZERO() virtio-mmio: Use PTR_ERR_OR_ZERO() vhost/scsi: Improve a size determination in four functions virtio_balloon: include disk/file caches memory statistics
Este commit está contenido en:
@@ -452,10 +452,12 @@ static irqreturn_t vop_virtio_intr_handler(int irq, void *data)
|
||||
|
||||
static void vop_virtio_release_dev(struct device *_d)
|
||||
{
|
||||
/*
|
||||
* No need for a release method similar to virtio PCI.
|
||||
* Provide an empty one to avoid getting a warning from core.
|
||||
*/
|
||||
struct virtio_device *vdev =
|
||||
container_of(_d, struct virtio_device, dev);
|
||||
struct _vop_vdev *vop_vdev =
|
||||
container_of(vdev, struct _vop_vdev, vdev);
|
||||
|
||||
kfree(vop_vdev);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -466,7 +468,7 @@ static int _vop_add_device(struct mic_device_desc __iomem *d,
|
||||
unsigned int offset, struct vop_device *vpdev,
|
||||
int dnode)
|
||||
{
|
||||
struct _vop_vdev *vdev;
|
||||
struct _vop_vdev *vdev, *reg_dev = NULL;
|
||||
int ret;
|
||||
u8 type = ioread8(&d->type);
|
||||
|
||||
@@ -497,6 +499,7 @@ static int _vop_add_device(struct mic_device_desc __iomem *d,
|
||||
vdev->c2h_vdev_db = ioread8(&vdev->dc->c2h_vdev_db);
|
||||
|
||||
ret = register_virtio_device(&vdev->vdev);
|
||||
reg_dev = vdev;
|
||||
if (ret) {
|
||||
dev_err(_vop_dev(vdev),
|
||||
"Failed to register vop device %u type %u\n",
|
||||
@@ -512,7 +515,10 @@ static int _vop_add_device(struct mic_device_desc __iomem *d,
|
||||
free_irq:
|
||||
vpdev->hw_ops->free_irq(vpdev, vdev->virtio_cookie, vdev);
|
||||
kfree:
|
||||
kfree(vdev);
|
||||
if (reg_dev)
|
||||
put_device(&vdev->vdev.dev);
|
||||
else
|
||||
kfree(vdev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -568,7 +574,7 @@ static int _vop_remove_device(struct mic_device_desc __iomem *d,
|
||||
iowrite8(-1, &dc->h2c_vdev_db);
|
||||
if (status & VIRTIO_CONFIG_S_DRIVER_OK)
|
||||
wait_for_completion(&vdev->reset_done);
|
||||
kfree(vdev);
|
||||
put_device(&vdev->vdev.dev);
|
||||
iowrite8(1, &dc->guest_ack);
|
||||
dev_dbg(&vpdev->dev, "%s %d guest_ack %d\n",
|
||||
__func__, __LINE__, ioread8(&dc->guest_ack));
|
||||
|
Referencia en una nueva incidencia
Block a user