On Sat, Jun 7, 2014 at 12:52 AM, Paolo Bonzini <pbonz...@redhat.com> wrote:
> Il 06/06/2014 15:36, Peter Crosthwaite ha scritto:
>
>>> However, I'd rather have the concept bake for a bit by starting with
>>> read-only properties.
>>
>>
>> The just a matter of pulling our the setters?
>
>
> Yes.  You can leave in all the preparatory refactoring.
>
>
>> I guess it can be done
>> but I don't fully understand the motivation.
>
>
> I'm not sure what the interactions should be between the setters and, for
> example, the "realized" property.

Realized of what? MR being just an OBJECT has no realized itself but I
suppose you could think about some correlation to the encapsulating
device (if one even exist - it wont for RAM).

In addition, some memory regions (for
> example PCI BARs) are meant to be moved around by the guest, not the host.
>

So the intention is the free-for-all nature of the non-DEVICE
properties solves this. Some users of MRs are dynamic and can change
setup at run time. That's ok. It leave two options:

1: Properties may be changed at any-time and run-time code (like
PCI-BAR control code) sets the QOM properties.
2: We preserve the current non-QOM API's (e.g.
memory_region_add_subregion) for run-time changers.

If we go with option #2 I guess we can lock down the setters post
realize. A sane policy might be:

1: If the ->owner is a TYPE_DEVICE, setting is OK until the owner is realized.
2: If the owner is not a device, no setting.

Although point 2 makes me sad because it means board code cant use QOM
to wire up RAM.

> By comparison, with getters only not many things can go wrong.
>

True. It's worth nothing however that the setters in the patch do not
change the underlying MR datastructures in any way and all existing
APIs are preserved without QOMification. My reasoning for not
QOMifying the regular MR usage API is pretty much your "let it bake
for a bit". Generally speaking, the setters are yet-to-be-used by
anyone except my follow up RFC work.

>
>>>  I think there are some concepts in the "container"
>>> property that can be generalized.
>>
>>
>> Can you elaborate this a little more?
>
>
> Basically the container property acts as a kind of "backdoor" to express
> many:1 relations (which are a bit ugly to express with the current QOM
> property model).  If object X is on the 1 side and object Y is on the "many"
> side, you then write the path to Y to a property of X.
>

I still maintain that this is valid. The notion that the address space
containers have awareness of the contained but the contained are
oblivious is something of an arbitrary QEMU implementation choice IMO.
It's perfectly valid in real hardware for a bus to be oblivious to
what's on it and the devices attach to it anonymously. The bus then
posts transaction to all attached devices and whoever responds
responds. That's the intended semantic of the 1 linking to the many.
Its the many that is "in the dark".

The 1 -> many linkage is simply inverted to many -> 1 once the
contained region is added to the parent list anyway - just not yet QOM
visible. I think it should work both ways if anything though.
Mandating the many -> 1 unidirectional linkage is awkward IMO.

> There are obvious similarity between the container/address/visible
> properties of a MemoryRegion are very similar to bus/addr/realized that we
> have for -device.

Are you referring to addr as used in Igor's new DIMM work?

  I think we should try and understand better what this
> similarity means, and whether this approach to many:1 relations could become
> a more central part of QOM.
>

Regards,
Peter

> Paolo
>

Reply via email to