[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v1 06/25] memory: MemoryRegion: Add container and
From: |
Peter Crosthwaite |
Subject: |
Re: [Qemu-devel] [RFC v1 06/25] memory: MemoryRegion: Add container and addr props |
Date: |
Tue, 27 May 2014 14:32:09 +1000 |
On Fri, May 16, 2014 at 11:53 AM, Peter Crosthwaite
<address@hidden> wrote:
> Expose the already existing .parent and .addr fields as QOM properties.
> Setting the address will cause the memory subregion adding to happen if
> it has not already. If the memory region is already contained, then
> change it's address as per the established memory_region_set_address()
> semantics.
>
> Signed-off-by: Peter Crosthwaite <address@hidden>
> ---
>
> memory.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 54 insertions(+)
>
> diff --git a/memory.c b/memory.c
> index a37fdd2..4a70920 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -16,6 +16,7 @@
> #include "exec/memory.h"
> #include "exec/address-spaces.h"
> #include "exec/ioport.h"
> +#include "qapi/visitor.h"
> #include "qemu/bitops.h"
> #include "qom/object.h"
> #include "trace.h"
> @@ -844,6 +845,49 @@ void memory_region_init(MemoryRegion *mr,
> mr->name = g_strdup(name);
> }
>
> +static void do_memory_region_add_subregion_common(MemoryRegion *subregion);
> +
> +static void memory_region_get_addr(Object *obj, Visitor *v, void *opaque,
> + const char *name, Error **errp)
> +{
> + MemoryRegion *mr = MEMORY_REGION(obj);
> + Error *local_err = NULL;
> + uint64_t value = mr->addr;
> +
> + visit_type_uint64(v, &value, name, &local_err);
> + if (local_err) {
> + error_propagate(errp, local_err);
> + }
> +}
> +
> +static void memory_region_set_addr(Object *obj, Visitor *v, void *opaque,
> + const char *name, Error **errp)
> +{
> + MemoryRegion *mr = MEMORY_REGION(obj);
> + Error *local_err = NULL;
> + uint64_t value;
> +
> + visit_type_uint64(v, &value, name, &local_err);
> + if (local_err) {
> + error_propagate(errp, local_err);
> + return;
> + }
> +
> + /* In an ideal world we wait until both the parent and address is set in
> + * either order, then call do_memory_region_add_subregion_common()
> + * from the latter property setter. However, as parent is just a dumb
> link
> + * we only support setting from the address setter. We therefore assert
> + * here that the two props are set in correct order.
> + */
So I have a fix on this. I just rolled my own link property with
object_property_add (and a few callbacks) rather than use
object_property_add_link. The memory_region_add_subregion then happens
from the link setter.
Regards,
Peter
- [Qemu-devel] [RFC v1 00/25] Memory and GPIO QOMification, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 01/25] qdev: Implement named GPIOs, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 02/25] memory: Simplify mr_add_subregion() if-else, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 03/25] memory: Coreify subregion add functionality, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 04/25] memory: MemoryRegion: QOMify, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 05/25] memory: MemoryRegion: Add contained flag, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 06/25] memory: MemoryRegion: Add container and addr props, Peter Crosthwaite, 2014/05/15
- Re: [Qemu-devel] [RFC v1 06/25] memory: MemoryRegion: Add container and addr props,
Peter Crosthwaite <=
- [Qemu-devel] [RFC v1 07/25] memory: MemoryRegion: factor out memory region re-adder, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 08/25] memory: MemoryRegion: Add may-overlap and priority props, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 09/25] memory: MemoryRegion: Add size property, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 10/25] exec: Parent root MRs to the machine, Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 11/25] irq: Slim conversion of qemu_irq to QOM [WIP], Peter Crosthwaite, 2014/05/15
- [Qemu-devel] [RFC v1 12/25] qdev: gpio: Don't allow name share between I and O, Peter Crosthwaite, 2014/05/15