[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v1 19/25] sysbus: Setup memory regions as dynamic
From: |
Peter Crosthwaite |
Subject: |
Re: [Qemu-devel] [RFC v1 19/25] sysbus: Setup memory regions as dynamic props |
Date: |
Thu, 29 May 2014 16:22:57 +1000 |
On Fri, May 16, 2014 at 12:00 PM, Peter Crosthwaite
<address@hidden> wrote:
> Dynamically allocate Memory Region pointers and set them up as QOM
> links. Plug these dynamic links to the sysbus_init_mmio() and
> sysbus_mmio_get_region APIs.
>
> This allows for removal of the Sysbus Memory Regions as state. All
> that's needed now is the counter for total number of regions. Another
> piece of SysBus state bites the dust!
>
> This also removes the artificial limit of 32 memory regions per device.
> The number of memory regions is now practically unbounded (unless you
> cause a wrap on the total counter).
>
> Signed-off-by: Peter Crosthwaite <address@hidden>
> ---
>
> hw/core/sysbus.c | 29 ++++++++++++++++++-----------
> include/hw/sysbus.h | 4 ----
> 2 files changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
> index 7cdc428..6858336 100644
> --- a/hw/core/sysbus.c
> +++ b/hw/core/sysbus.c
> @@ -50,7 +50,7 @@ static void sysbus_mmio_map_common(SysBusDevice *dev, int
> n, hwaddr addr,
> MemoryRegion *mr;
> assert(n >= 0 && n < dev->num_mmio);
>
> - mr = dev->mmio[n].memory;
> + mr = sysbus_mmio_get_region(dev, n);
>
> object_property_set_link(OBJECT(mr), OBJECT(get_system_memory()),
> "container", &error_abort);
> @@ -85,16 +85,22 @@ void sysbus_pass_irq(SysBusDevice *dev, SysBusDevice
> *target)
>
> void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory)
> {
> - int n;
> + char *propname = g_strdup_printf("sysbus-mr-%d", dev->num_mmio++);
>
> - assert(dev->num_mmio < QDEV_MAX_MMIO);
> - n = dev->num_mmio++;
> - dev->mmio[n].memory = memory;
> + object_property_add_child(OBJECT(dev), propname, OBJECT(memory),
> + &error_abort);
So relying on sysbus to do the MR parenting doesn't work too well when
you have a mix of sysbus and non-sysbus MRs in the system. It also
increases the sysbus API incumbency. I thinks better to let the Memory
API do the QOM parenting to the owner argument in memory_region_init
(It's an object after all). If you pass NULL to memory_region_init,
then you are responsible for parenting the MR yourself.
This child-adder is then converted to a regular link-adder for sysbus's sake.
Regards,
Peter
- Re: [Qemu-devel] [RFC v1 11/25] irq: Slim conversion of qemu_irq to QOM [WIP], (continued)
- [Qemu-devel] [RFC v1 12/25] qdev: gpio: Don't allow name share between I and O, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 13/25] qdev: gpio: Register GPIO inputs as child objects, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 14/25] qdev: gpio: Register GPIO outputs as QOM links, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 15/25] qdev: gpio: Re-impement qdev_connect_gpio QOM style, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 16/25] qom: object_property_set/get: Add child recursion, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 17/25] sysbus: Use TYPE_DEVICE GPIO functionality, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 18/25] sysbus: Rework sysbus_mmio_map to use mr QOMification, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 19/25] sysbus: Setup memory regions as dynamic props, Peter Crosthwaite, 2014/05/15
- Re: [Qemu-devel] [RFC v1 19/25] sysbus: Setup memory regions as dynamic props,
Peter Crosthwaite <=
- [Qemu-devel] [RFC v1 20/25] sysbus: Enable hotplug., Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 21/25] microblaze: s3adsp: Expand UART creator, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 22/25] microblaze: s3adsp: Parent devices with sane names, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 23/25] timer: xilinx_timer: Convert to realize(), Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 24/25] timer: xilinx_timer: init MMIO ASAP, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 25/25] TEST: microblaze: s3adsp: Remove timer, Peter Crosthwaite, 2014/05/15