qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 41/46] ivshmem: do not keep shm_fd open


From: Claudio Fontana
Subject: Re: [Qemu-devel] [PATCH v3 41/46] ivshmem: do not keep shm_fd open
Date: Tue, 22 Sep 2015 16:36:36 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

On 15.09.2015 18:07, address@hidden wrote:
> From: Marc-André Lureau <address@hidden>
> 
> Remove shm_fd from device state, closing it as early as possible to avoid 
> leaks.
> 
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
>  hw/misc/ivshmem.c | 14 +++++---------
>  1 file changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index 4adcac5..f9ac955 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -88,7 +88,6 @@ typedef struct IVShmemState {
>      MemoryRegion ivshmem;
>      uint64_t ivshmem_size; /* size of shared memory region */
>      uint32_t ivshmem_64bit;
> -    int shm_fd; /* shared memory file descriptor */

is it in no way useful during debugging to have access to this field?
Or is it easily available elsewhere?

Ciao C.

>  
>      Peer *peers;
>      int nb_peers; /* how many peers we have space for */
> @@ -235,7 +234,7 @@ static uint64_t ivshmem_io_read(void *opaque, hwaddr addr,
>  
>          case IVPOSITION:
>              /* return my VM ID if the memory is mapped */
> -            if (s->shm_fd >= 0) {
> +            if (memory_region_is_mapped(&s->ivshmem)) {
>                  ret = s->vm_id;
>              } else {
>                  ret = -1;
> @@ -356,8 +355,6 @@ static int create_shared_memory_BAR(IVShmemState *s, int 
> fd, uint8_t attr,
>          return -1;
>      }
>  
> -    s->shm_fd = fd;
> -
>      memory_region_init_ram_ptr(&s->ivshmem, OBJECT(s), "ivshmem.bar2",
>                                 s->ivshmem_size, ptr);
>      vmstate_register_ram(&s->ivshmem, DEVICE(s));
> @@ -535,7 +532,7 @@ static void ivshmem_read(void *opaque, const uint8_t 
> *buf, int size)
>      if (incoming_posn == -1) {
>          void * map_ptr;
>  
> -        if (s->shm_fd >= 0) {
> +        if (memory_region_is_mapped(&s->ivshmem)) {
>              error_report("shm already initialized");
>              close(incoming_fd);
>              return;
> @@ -564,9 +561,7 @@ static void ivshmem_read(void *opaque, const uint8_t 
> *buf, int size)
>  
>          memory_region_add_subregion(&s->bar, 0, &s->ivshmem);
>  
> -        /* only store the fd if it is successfully mapped */
> -        s->shm_fd = incoming_fd;
> -
> +        close(incoming_fd);
>          return;
>      }
>  
> @@ -827,6 +822,7 @@ static void pci_ivshmem_realize(PCIDevice *dev, Error 
> **errp)
>          }
>  
>          create_shared_memory_BAR(s, fd, attr, errp);
> +        close(fd);
>      }
>  }
>  
> @@ -842,7 +838,7 @@ static void pci_ivshmem_exit(PCIDevice *dev)
>          error_free(s->migration_blocker);
>      }
>  
> -    if (s->shm_fd >= 0) {
> +    if (memory_region_is_mapped(&s->ivshmem)) {
>          void *addr = memory_region_get_ram_ptr(&s->ivshmem);
>  
>          vmstate_unregister_ram(&s->ivshmem, DEVICE(dev));
> 






reply via email to

[Prev in Thread] Current Thread [Next in Thread]