[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 27/47] ivshmem: fix pci_ivshmem_exit()
From: |
Claudio Fontana |
Subject: |
Re: [Qemu-devel] [PATCH v4 27/47] ivshmem: fix pci_ivshmem_exit() |
Date: |
Tue, 29 Sep 2015 15:38:15 +0200 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 |
On 24.09.2015 13:37, address@hidden wrote:
> From: Marc-André Lureau <address@hidden>
>
> Free all objects owned by the device, making sure the device is free,
> fixing hot-unplug.
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
> hw/misc/ivshmem.c | 38 +++++++++++++++++++++++++++++++++++---
> 1 file changed, 35 insertions(+), 3 deletions(-)
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index 9be4d1e..f8f74fc 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -800,15 +800,47 @@ static void pci_ivshmem_realize(PCIDevice *dev, Error
> **errp)
> static void pci_ivshmem_exit(PCIDevice *dev)
> {
> IVShmemState *s = IVSHMEM(dev);
> + int i;
> +
> + fifo8_destroy(&s->incoming_fifo);
>
> if (s->migration_blocker) {
> migrate_del_blocker(s->migration_blocker);
> error_free(s->migration_blocker);
> }
>
> - memory_region_del_subregion(&s->bar, &s->ivshmem);
> - vmstate_unregister_ram(&s->ivshmem, DEVICE(dev));
> - fifo8_destroy(&s->incoming_fifo);
> + if (s->shm_fd >= 0) {
> + void *addr = memory_region_get_ram_ptr(&s->ivshmem);
> +
> + vmstate_unregister_ram(&s->ivshmem, DEVICE(dev));
> + memory_region_del_subregion(&s->bar, &s->ivshmem);
> +
> + if (munmap(addr, s->ivshmem_size) == -1) {
> + error_report("Failed to munmap shared memory %s",
> strerror(errno));
> + }
> + }
> +
> + if (s->eventfd_chr) {
> + for (i = 0; i < s->vectors; i++) {
> + if (s->eventfd_chr[i]) {
> + qemu_chr_free(s->eventfd_chr[i]);
> + }
> + }
> + g_free(s->eventfd_chr);
> + }
> +
> + if (s->peers) {
> + for (i = 0; i < s->nb_peers; i++) {
> + close_guest_eventfds(s, i);
> + }
> + g_free(s->peers);
> + }
> +
> + if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
> + msix_uninit_exclusive_bar(dev);
> + }
> +
> + g_free(s->eventfd_table);
> }
>
> static bool test_msix(void *opaque, int version_id)
>
missed this one last time.. eaten by a grue or something.
Reviewed-by: Claudio Fontana <address@hidden>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v4 27/47] ivshmem: fix pci_ivshmem_exit(),
Claudio Fontana <=