diff mbox

[v2,15/18] target-i386: do not ignore error and fix apic parent

Message ID 1466784366-281935-16-git-send-email-imammedo@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Igor Mammedov June 24, 2016, 4:06 p.m. UTC
object_property_add_child() silently fails with error that it can't
create duplicate propery 'apic' as we already have 'apic' property
registered for AIPC ID. As result generic device_realize puts
apic as into unattached container.

As it's programming error, abort on it and fix property name for
apic_state to 'lapic', this way apic is a child of cpu instance.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
 target-i386/cpu.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Michael S. Tsirkin July 4, 2016, 2:20 p.m. UTC | #1
On Fri, Jun 24, 2016 at 06:06:03PM +0200, Igor Mammedov wrote:
> object_property_add_child() silently fails with error that it can't
> create duplicate propery 'apic' as we already have 'apic' property

I thought that one was 'apic-id'?

> registered for AIPC ID.

APIC

> As result generic device_realize puts
> apic as into unattached container.
> 
> As it's programming error, abort on it and fix property name for
> apic_state to 'lapic', this way apic is a child of cpu instance.
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
>  target-i386/cpu.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index ebf4140..04c0b79 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -2763,8 +2763,9 @@ static void x86_cpu_apic_create(X86CPU *cpu, Error **errp)
>  
>      cpu->apic_state = DEVICE(object_new(apic_type));
>  
> -    object_property_add_child(OBJECT(cpu), "apic",
> -                              OBJECT(cpu->apic_state), NULL);
> +    object_property_add_child(OBJECT(cpu), "lapic",
> +                              OBJECT(cpu->apic_state), &error_abort);
> +
>      qdev_prop_set_uint8(cpu->apic_state, "id", cpu->apic_id);
>      /* TODO: convert to link<> */
>      apic = APIC_COMMON(cpu->apic_state);
> -- 
> 1.8.3.1
Igor Mammedov July 4, 2016, 4:39 p.m. UTC | #2
On Mon, 4 Jul 2016 17:20:59 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> On Fri, Jun 24, 2016 at 06:06:03PM +0200, Igor Mammedov wrote:
> > object_property_add_child() silently fails with error that it can't
> > create duplicate propery 'apic' as we already have 'apic' property
> 
> I thought that one was 'apic-id'?
indeed, but with error_abort it prints:
  qemu-system-x86_64: attempt to add duplicate property 'apic' to
  object (type 'qemu64-x86_64-cpu')

I'll try to trace where it comes from.

> 
> > registered for AIPC ID.
> 
> APIC
> 
> > As result generic device_realize puts
> > apic as into unattached container.
> > 
> > As it's programming error, abort on it and fix property name for
> > apic_state to 'lapic', this way apic is a child of cpu instance.
> > 
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> >  target-i386/cpu.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> > index ebf4140..04c0b79 100644
> > --- a/target-i386/cpu.c
> > +++ b/target-i386/cpu.c
> > @@ -2763,8 +2763,9 @@ static void x86_cpu_apic_create(X86CPU *cpu,
> > Error **errp) 
> >      cpu->apic_state = DEVICE(object_new(apic_type));
> >  
> > -    object_property_add_child(OBJECT(cpu), "apic",
> > -                              OBJECT(cpu->apic_state), NULL);
> > +    object_property_add_child(OBJECT(cpu), "lapic",
> > +                              OBJECT(cpu->apic_state),
> > &error_abort); +
> >      qdev_prop_set_uint8(cpu->apic_state, "id", cpu->apic_id);
> >      /* TODO: convert to link<> */
> >      apic = APIC_COMMON(cpu->apic_state);
> > -- 
> > 1.8.3.1
Igor Mammedov July 5, 2016, 7:30 a.m. UTC | #3
On Mon, 4 Jul 2016 18:39:21 +0200
Igor Mammedov <imammedo@redhat.com> wrote:

> On Mon, 4 Jul 2016 17:20:59 +0300
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > On Fri, Jun 24, 2016 at 06:06:03PM +0200, Igor Mammedov wrote:
> > > object_property_add_child() silently fails with error that it
> > > can't create duplicate propery 'apic' as we already have 'apic'
> > > property
> > 
> > I thought that one was 'apic-id'?
> indeed, but with error_abort it prints:
>   qemu-system-x86_64: attempt to add duplicate property 'apic' to
>   object (type 'qemu64-x86_64-cpu')
> 
> I'll try to trace where it comes from.

We have cpu feature 'apic', so patch is correct, I'll fix commit
message that refers mistakingly to APIC ID
 
> 
> > 
> > > registered for AIPC ID.
> > 
> > APIC
> > 
> > > As result generic device_realize puts
> > > apic as into unattached container.
> > > 
> > > As it's programming error, abort on it and fix property name for
> > > apic_state to 'lapic', this way apic is a child of cpu instance.
> > > 
> > > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > > ---
> > >  target-i386/cpu.c | 5 +++--
> > >  1 file changed, 3 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> > > index ebf4140..04c0b79 100644
> > > --- a/target-i386/cpu.c
> > > +++ b/target-i386/cpu.c
> > > @@ -2763,8 +2763,9 @@ static void x86_cpu_apic_create(X86CPU *cpu,
> > > Error **errp) 
> > >      cpu->apic_state = DEVICE(object_new(apic_type));
> > >  
> > > -    object_property_add_child(OBJECT(cpu), "apic",
> > > -                              OBJECT(cpu->apic_state), NULL);
> > > +    object_property_add_child(OBJECT(cpu), "lapic",
> > > +                              OBJECT(cpu->apic_state),
> > > &error_abort); +
> > >      qdev_prop_set_uint8(cpu->apic_state, "id", cpu->apic_id);
> > >      /* TODO: convert to link<> */
> > >      apic = APIC_COMMON(cpu->apic_state);
> > > -- 
> > > 1.8.3.1
> 
>
diff mbox

Patch

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index ebf4140..04c0b79 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -2763,8 +2763,9 @@  static void x86_cpu_apic_create(X86CPU *cpu, Error **errp)
 
     cpu->apic_state = DEVICE(object_new(apic_type));
 
-    object_property_add_child(OBJECT(cpu), "apic",
-                              OBJECT(cpu->apic_state), NULL);
+    object_property_add_child(OBJECT(cpu), "lapic",
+                              OBJECT(cpu->apic_state), &error_abort);
+
     qdev_prop_set_uint8(cpu->apic_state, "id", cpu->apic_id);
     /* TODO: convert to link<> */
     apic = APIC_COMMON(cpu->apic_state);