Am 29.04.2014 15:38, schrieb Kirill Batuzov:
> PortioList is an abstraction used for construction of MemoryRegionPortioList
> from MemoryRegionPortio. It can be used later to unmap created memory regions.
> It also requires proper cleanup because some of the memory inside is allocated
> dynamically.
> 
> By moving PortioList ot device state we make it possible to cleanup later and
> avoid leaking memory.
> 
> This change spans several target platforms.  The following testcases cover all
> changed lines:
>   qemu-system-ppc -M prep
>   qemu-system-i386 -vga qxl
>   qemu-system-i386 -M isapc -soundhw adlib -device 
> ib700,id=watchdog0,bus=isa.0
> 
> Signed-off-by: Kirill Batuzov <batuz...@ispras.ru>
> ---
>  hw/audio/adlib.c        |    6 +++---
>  hw/display/qxl.c        |    7 +++----
>  hw/display/qxl.h        |    1 +
>  hw/display/vga.c        |   12 +++++-------
>  hw/display/vga_int.h    |    2 ++
>  hw/dma/i82374.c         |    7 ++++---
>  hw/isa/isa-bus.c        |   11 ++++++++---
>  hw/ppc/prep.c           |    7 ++++---
>  hw/watchdog/wdt_ib700.c |    7 ++++---
>  9 files changed, 34 insertions(+), 26 deletions(-)
> 
> I'm sending this as a separate patch. With 2 of 4 patches already applied and
> two remaining patches addressing absolutely different issues in different
> parts of code it was no longer reasonable to submit them as series.
> 
> v1 -> v2:
>  - Add PortioList to device state structures.
>  - Put a workaround for isa_regiter_portio_list for which the above solution
>    was not appilcable.
> 
> v2 -> v3:
>  - Revert workaround for isa_register_portio_list. The amount of memory leaked
>    is not large enough to justify potentially broken code.

Seeing no objections from Jan or Hervé and an Rb from Paolo, I'll pick
up this cross-devices patch for qom-next.

> diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
> index e243651..bc00ccf 100644
> --- a/hw/ppc/prep.c
> +++ b/hw/ppc/prep.c
> @@ -361,6 +361,8 @@ static const MemoryRegionPortio prep_portio_list[] = {
>      PORTIO_END_OF_LIST(),
>  };
>  
> +PortioList prep_port_list;

I've made this variable static.

https://github.com/afaerber/qemu-cpu/commits/qom-next

Thanks,
Andreas

> +
>  /* PowerPC PREP hardware initialisation */
>  static void ppc_prep_init(QEMUMachineInitArgs *args)
>  {
> @@ -375,7 +377,6 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
>      CPUPPCState *env = NULL;
>      nvram_t nvram;
>      M48t59State *m48t59;
> -    PortioList *port_list = g_new(PortioList, 1);
>  #if 0
>      MemoryRegion *xcsr = g_new(MemoryRegion, 1);
>  #endif
> @@ -542,8 +543,8 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
>      cpu = POWERPC_CPU(first_cpu);
>      sysctrl->reset_irq = cpu->env.irq_inputs[PPC6xx_INPUT_HRESET];
>  
> -    portio_list_init(port_list, NULL, prep_portio_list, sysctrl, "prep");
> -    portio_list_add(port_list, isa_address_space_io(isa), 0x0);
> +    portio_list_init(&prep_port_list, NULL, prep_portio_list, sysctrl, 
> "prep");
> +    portio_list_add(&prep_port_list, isa_address_space_io(isa), 0x0);
>  
>      /* PowerPC control and status register group */
>  #if 0

-- 
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