[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 06/13] pc: apic_common: extend APIC ID proper
From: |
Igor Mammedov |
Subject: |
Re: [Qemu-devel] [PATCH v3 06/13] pc: apic_common: extend APIC ID property to 32bit |
Date: |
Tue, 18 Oct 2016 16:38:30 +0200 |
On Tue, 18 Oct 2016 12:14:43 -0200
Eduardo Habkost <address@hidden> wrote:
> On Tue, Oct 18, 2016 at 04:01:56PM +0200, Igor Mammedov wrote:
> > On Tue, 18 Oct 2016 10:59:17 -0200
> > Eduardo Habkost <address@hidden> wrote:
> >
> > > On Tue, Oct 18, 2016 at 02:36:10PM +0200, Igor Mammedov wrote:
> > > > On Tue, 18 Oct 2016 08:56:28 -0200
> > > > Eduardo Habkost <address@hidden> wrote:
> > > >
> > > > > On Thu, Oct 13, 2016 at 11:52:40AM +0200, Igor Mammedov wrote:
> > > > > > ACPI ID is 32 bit wide on CPUs with x2APIC support.
> > > > > > Extend 'id' property to support it.
> > > > > >
> > > > > > Signed-off-by: Igor Mammedov <address@hidden>
> > > > > > ---
> > > > > > v3:
> > > > > > keep original behaviour where 'id' is readonly after
> > > > > > object is realized (pbonzini)
> > > > > > ---
> > > > > [...]
> > > > > > diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
> > > > > > index 8d01c9c..30f2af0 100644
> > > > > > --- a/hw/intc/apic_common.c
> > > > > > +++ b/hw/intc/apic_common.c
> > > > > > @@ -428,7 +429,6 @@ static const VMStateDescription
> > > > > > vmstate_apic_common = {
> > > > > > };
> > > > > >
> > > > > > static Property apic_properties_common[] = {
> > > > > > - DEFINE_PROP_UINT8("id", APICCommonState, id, -1),
> > > > > > DEFINE_PROP_UINT8("version", APICCommonState, version, 0x14),
> > > > > > DEFINE_PROP_BIT("vapic", APICCommonState, vapic_control,
> > > > > > VAPIC_ENABLE_BIT,
> > > > > > true),
> > > > > > @@ -437,6 +437,49 @@ static Property apic_properties_common[] = {
> > > > > > DEFINE_PROP_END_OF_LIST(),
> > > > > > };
> > > > > >
> > > > > > +static void apic_common_get_id(Object *obj, Visitor *v, const char
> > > > > > *name,
> > > > > > + void *opaque, Error **errp)
> > > > > > +{
> > > > > > + APICCommonState *s = APIC_COMMON(obj);
> > > > > > + int64_t value;
> > > > > > +
> > > > > > + value = s->apicbase & MSR_IA32_APICBASE_EXTD ?
> > > > > > s->initial_apic_id : s->id;
> > > > > > + visit_type_int(v, name, &value, errp);
> > > > > > +}
> > > > >
> > > > > Who exactly is going to read this property and require this logic
> > > > > to be in the property getter?
> > > > As it's set/read only from CPU we don't actually have to expose it
> > > > as property.
> > > > However, I've kept it as read/write property because it has already
> > > > been this way and been exposed to external users as some magic property.
> > > > Not sure is anyone cares.
> > > >
> > > >
> > > > > Do we really need to expose this to the outside as a magic
> > > > > property that changes depending on hardware state? Returning
> > > > > initial_apic_id sounds much simpler.
> > > > Well that's what it is now, so I've kept current behavior.
> > > > If we decide to change property behavior or drop it altogether
> > > > I can do it on top.
> > > >
> > >
> > > I agree to make them static properties as follow-up patch. This
> > > way, if the change breaks anything we can revert only that patch.
> > Static property won't work here as it should show APIC ID
> > depending on current CPU mode.
>
> My suggestion is to _not_ show a different ID depending on the
> current mode, to keep it simple. We can just have
> "initial-apic-id" and "id" properties.
>
> But, anyway, I didn't mean to suggest static properties
> specifically. Where I say "static property" above, please read
> "simple property that returns just a simple struct field and
> don't need custom getter/setter code". That means either using a
> static property (in case we still want it to be writeable, which
> I doubt) or using object_property_add_uint*_ptr().
>
> >
> > I could make it readonly property on respin,
> > and set apic.id/initial_apic_id directly from CPU.
> > Change would be
> > - apic_common_set_id()
> > + apic_common::set_apic_id() callback
> > It won't get us less LOC, more likely it will take even more
> > code to do so.
> > As it's in this patch, it's at least consistent in a way
> > values are get/set. And effectively it's readonly due to check:
>
> Don't worry about doing it on the respin. I'm OK with keeping the
> current version by now, and change it in a follow-up patch.
>
> >
> > + if (dev->realized) {
> > + qdev_prop_set_after_realize(dev, name, errp);
> > + return;
> > + }
> >
> > as external user can see only realized apic device.
>
> That's true. But we could avoid all the extra getter/setter code
> if we just use a static property or a read-only
> object_property_add_uint*_ptr() property.
>
> (All I say above are suggestions for a follow-up patch. I'm OK
> with keeping the existing behavior like you do in this patch, to
> keep this series simple.)
Ok, I'll respin this patch as is and think/try
the way you are suggesting in follow up.
- Re: [Qemu-devel] [PATCH v4 05/13] pc: leave max apic_id_limit only in legacy cpu hotplug code, (continued)
[Qemu-devel] [PATCH v3 06/13] pc: apic_common: extend APIC ID property to 32bit, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 07/13] pc: apic_common: restore APIC ID to initial ID on reset, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 08/13] pc: apic_common: reset APIC ID to initial ID when switching into x2APIC mode, Igor Mammedov, 2016/10/13
[Qemu-devel] [PATCH v3 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Igor Mammedov, 2016/10/13
- Re: [Qemu-devel] [PATCH v3 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Radim Krčmář, 2016/10/13
- [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Igor Mammedov, 2016/10/14
- Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Radim Krčmář, 2016/10/17
- Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Eduardo Habkost, 2016/10/18
- Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Radim Krčmář, 2016/10/18
- Re: [Qemu-devel] [PATCH v4 09/13] pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode, Eduardo Habkost, 2016/10/18