qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 13/30] misc/ivshmem: QOM Upcast Sweep


From: Andreas Färber
Subject: Re: [Qemu-devel] [PATCH v2 13/30] misc/ivshmem: QOM Upcast Sweep
Date: Sun, 30 Jun 2013 11:18:00 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130510 Thunderbird/17.0.6

Am 24.06.2013 08:59, schrieb address@hidden:
> From: Peter Crosthwaite <address@hidden>
> 
> Define and use standard QOM cast macro. Remove usages of DO_UPCAST
> and direct -> style upcasting.
> 
> Signed-off-by: Peter Crosthwaite <address@hidden>
> ---
> 
>  hw/misc/ivshmem.c | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index 5658f73..fd40caf 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -48,6 +48,10 @@
>  #define IVSHMEM_DPRINTF(fmt, ...)
>  #endif
>  
> +#define TYPE_IVSHMEM "ivshmem"
> +#define IVSHMEM(obj) \
> +    OBJECT_CHECK(IVShmemState, (obj), TYPE_IVSHMEM)
> +
>  typedef struct Peer {
>      int nb_eventfds;
>      EventNotifier *eventfds;
> @@ -341,7 +345,7 @@ static void create_shared_memory_BAR(IVShmemState *s, int 
> fd) {
>  
>      memory_region_init_ram_ptr(&s->ivshmem, "ivshmem.bar2",
>                                 s->ivshmem_size, ptr);
> -    vmstate_register_ram(&s->ivshmem, &s->dev.qdev);
> +    vmstate_register_ram(&s->ivshmem, DEVICE(&s->dev));

DEVICE(s)

>      memory_region_add_subregion(&s->bar, 0, &s->ivshmem);
>  
>      /* region for shared memory */
> @@ -469,7 +473,7 @@ static void ivshmem_read(void *opaque, const uint8_t * 
> buf, int flags)
>                                                              incoming_fd, 0);
>          memory_region_init_ram_ptr(&s->ivshmem,
>                                     "ivshmem.bar2", s->ivshmem_size, map_ptr);
> -        vmstate_register_ram(&s->ivshmem, &s->dev.qdev);
> +        vmstate_register_ram(&s->ivshmem, DEVICE(&s->dev));

DEVICE(s)

Renaming the parent field showed that there are still some s->dev
accesses missed in this patch. Applying anyway to qom-next:
https://github.com/afaerber/qemu-cpu/commits/qom-next

IMO such casting cleanup patches make the most sense when they are
complete in removing all accesses to the parent field and proving that
by renaming the parent field with the only remaining usage being in
VMSTATE_PCI(). We won't be able to drop DO_UPCAST() since it's being
used outside QOM in the block layer for instance. I'm hoping we can
squash a fixup so that we don't need to touch each device twice.

Regards,
Andreas

>  
>          IVSHMEM_DPRINTF("guest h/w addr = %" PRIu64 ", size = %" PRIu64 "\n",
>                           s->ivshmem_offset, s->ivshmem_size);
> @@ -534,7 +538,7 @@ static void ivshmem_use_msix(IVShmemState * s)
>  
>  static void ivshmem_reset(DeviceState *d)
>  {
> -    IVShmemState *s = DO_UPCAST(IVShmemState, dev.qdev, d);
> +    IVShmemState *s = IVSHMEM(d);
>  
>      s->intrstatus = 0;
>      ivshmem_use_msix(s);
> @@ -648,7 +652,7 @@ static int pci_ivshmem_init(PCIDevice *dev)
>          s->ivshmem_size = ivshmem_get_size(s);
>      }
>  
> -    register_savevm(&s->dev.qdev, "ivshmem", 0, 0, ivshmem_save, 
> ivshmem_load,
> +    register_savevm(DEVICE(dev), "ivshmem", 0, 0, ivshmem_save, ivshmem_load,
>                                                                          dev);
>  
>      /* IRQFD requires MSI */
> @@ -780,10 +784,10 @@ static void pci_ivshmem_uninit(PCIDevice *dev)
>  
>      memory_region_destroy(&s->ivshmem_mmio);
>      memory_region_del_subregion(&s->bar, &s->ivshmem);
> -    vmstate_unregister_ram(&s->ivshmem, &s->dev.qdev);
> +    vmstate_unregister_ram(&s->ivshmem, DEVICE(dev));
>      memory_region_destroy(&s->ivshmem);
>      memory_region_destroy(&s->bar);
> -    unregister_savevm(&dev->qdev, "ivshmem", s);
> +    unregister_savevm(DEVICE(dev), "ivshmem", s);
>  }
>  
>  static Property ivshmem_properties[] = {
> @@ -813,7 +817,7 @@ static void ivshmem_class_init(ObjectClass *klass, void 
> *data)
>  }
>  
>  static const TypeInfo ivshmem_info = {
> -    .name          = "ivshmem",
> +    .name          = TYPE_IVSHMEM,
>      .parent        = TYPE_PCI_DEVICE,
>      .instance_size = sizeof(IVShmemState),
>      .class_init    = ivshmem_class_init,
> 


-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg



reply via email to

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