Message ID | 20231121174051.63038-3-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | hw: Free DEFINE_PROP_ARRAY()'s arrays in instance_finalize() | expand |
Hi Phil, On 11/21/23 18:40, Philippe Mathieu-Daudé wrote: > Commit 0be6bfac62 ("qdev: Implement variable length array properties") > added the DEFINE_PROP_ARRAY() macro with the following comment: > > * It is the responsibility of the device deinit code to free the > * @_arrayfield memory. > > Commit 8077b8e549 added: > > DEFINE_PROP_ARRAY("reserved-regions", VirtIOIOMMUPCI, > vdev.nb_reserved_regions, vdev.reserved_regions, > qdev_prop_reserved_region, ReservedRegion), > > but forgot to free the 'vdev.reserved_regions' array. Do it in the > instance_finalize() handler. > > Cc: qemu-stable@nongnu.org > Fixes: 8077b8e549 ("virtio-iommu-pci: Add array of Interval properties") # v5.1.0+ > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Eric Auger <eric.auger@redhat.com> Eric > --- > hw/virtio/virtio-iommu-pci.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c > index 9459fbf6ed..cbdfe4c591 100644 > --- a/hw/virtio/virtio-iommu-pci.c > +++ b/hw/virtio/virtio-iommu-pci.c > @@ -95,10 +95,18 @@ static void virtio_iommu_pci_instance_init(Object *obj) > TYPE_VIRTIO_IOMMU); > } > > +static void virtio_iommu_pci_instance_finalize(Object *obj) > +{ > + VirtIOIOMMUPCI *dev = VIRTIO_IOMMU_PCI(obj); > + > + g_free(dev->vdev.prop_resv_regions); > +} > + > static const VirtioPCIDeviceTypeInfo virtio_iommu_pci_info = { > .generic_name = TYPE_VIRTIO_IOMMU_PCI, > .instance_size = sizeof(VirtIOIOMMUPCI), > .instance_init = virtio_iommu_pci_instance_init, > + .instance_finalize = virtio_iommu_pci_instance_finalize, > .class_init = virtio_iommu_pci_class_init, > }; >
21.11.2023 20:40, Philippe Mathieu-Daudé пишет: > Commit 0be6bfac62 ("qdev: Implement variable length array properties") > added the DEFINE_PROP_ARRAY() macro with the following comment: > > * It is the responsibility of the device deinit code to free the > * @_arrayfield memory. > > Commit 8077b8e549 added: > > DEFINE_PROP_ARRAY("reserved-regions", VirtIOIOMMUPCI, > vdev.nb_reserved_regions, vdev.reserved_regions, > qdev_prop_reserved_region, ReservedRegion), > > but forgot to free the 'vdev.reserved_regions' array. Do it in the > instance_finalize() handler. It is interesting that the actual code frees prop_resv_regions, not reserved_regions as the Subject says. This is because of commit v8.1.0-2552-g41cc70cdf5, ""virtio-iommu: Rename reserved_regions into prop_resv_regions". :) /mjt > Cc: qemu-stable@nongnu.org > Fixes: 8077b8e549 ("virtio-iommu-pci: Add array of Interval properties") # v5.1.0+ > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/virtio/virtio-iommu-pci.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c > index 9459fbf6ed..cbdfe4c591 100644 > --- a/hw/virtio/virtio-iommu-pci.c > +++ b/hw/virtio/virtio-iommu-pci.c > @@ -95,10 +95,18 @@ static void virtio_iommu_pci_instance_init(Object *obj) > TYPE_VIRTIO_IOMMU); > } > > +static void virtio_iommu_pci_instance_finalize(Object *obj) > +{ > + VirtIOIOMMUPCI *dev = VIRTIO_IOMMU_PCI(obj); > + > + g_free(dev->vdev.prop_resv_regions); > +} > + > static const VirtioPCIDeviceTypeInfo virtio_iommu_pci_info = { > .generic_name = TYPE_VIRTIO_IOMMU_PCI, > .instance_size = sizeof(VirtIOIOMMUPCI), > .instance_init = virtio_iommu_pci_instance_init, > + .instance_finalize = virtio_iommu_pci_instance_finalize, > .class_init = virtio_iommu_pci_class_init, > }; >
diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c index 9459fbf6ed..cbdfe4c591 100644 --- a/hw/virtio/virtio-iommu-pci.c +++ b/hw/virtio/virtio-iommu-pci.c @@ -95,10 +95,18 @@ static void virtio_iommu_pci_instance_init(Object *obj) TYPE_VIRTIO_IOMMU); } +static void virtio_iommu_pci_instance_finalize(Object *obj) +{ + VirtIOIOMMUPCI *dev = VIRTIO_IOMMU_PCI(obj); + + g_free(dev->vdev.prop_resv_regions); +} + static const VirtioPCIDeviceTypeInfo virtio_iommu_pci_info = { .generic_name = TYPE_VIRTIO_IOMMU_PCI, .instance_size = sizeof(VirtIOIOMMUPCI), .instance_init = virtio_iommu_pci_instance_init, + .instance_finalize = virtio_iommu_pci_instance_finalize, .class_init = virtio_iommu_pci_class_init, };
Commit 0be6bfac62 ("qdev: Implement variable length array properties") added the DEFINE_PROP_ARRAY() macro with the following comment: * It is the responsibility of the device deinit code to free the * @_arrayfield memory. Commit 8077b8e549 added: DEFINE_PROP_ARRAY("reserved-regions", VirtIOIOMMUPCI, vdev.nb_reserved_regions, vdev.reserved_regions, qdev_prop_reserved_region, ReservedRegion), but forgot to free the 'vdev.reserved_regions' array. Do it in the instance_finalize() handler. Cc: qemu-stable@nongnu.org Fixes: 8077b8e549 ("virtio-iommu-pci: Add array of Interval properties") # v5.1.0+ Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/virtio/virtio-iommu-pci.c | 8 ++++++++ 1 file changed, 8 insertions(+)