All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2] Apic creation should not depend on pci
@ 2009-06-08 12:59 Gleb Natapov
  2009-06-08 14:03 ` [Qemu-devel] " Jan Kiszka
  0 siblings, 1 reply; 6+ messages in thread
From: Gleb Natapov @ 2009-06-08 12:59 UTC (permalink / raw)
  To: qemu-devel

    
It should depend on whether cpu has APIC.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
diff --git a/hw/pc.c b/hw/pc.c
index 0934778..cb49772 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -878,14 +878,10 @@ static void pc_init1(ram_addr_t ram_size,
         }
         if (i != 0)
             env->halted = 1;
-        if (smp_cpus > 1) {
-            /* XXX: enable it in all cases */
-            env->cpuid_features |= CPUID_APIC;
-        }
-        qemu_register_reset(main_cpu_reset, 0, env);
-        if (pci_enabled) {
+        if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
             apic_init(env);
         }
+        qemu_register_reset(main_cpu_reset, 0, env);
     }
 
     vmport_init();
--
			Gleb.

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] Re: [PATCH v2] Apic creation should not depend on pci
  2009-06-08 12:59 [Qemu-devel] [PATCH v2] Apic creation should not depend on pci Gleb Natapov
@ 2009-06-08 14:03 ` Jan Kiszka
  2009-06-08 14:06   ` Gleb Natapov
  2009-06-09  8:14   ` Gleb Natapov
  0 siblings, 2 replies; 6+ messages in thread
From: Jan Kiszka @ 2009-06-08 14:03 UTC (permalink / raw)
  To: Gleb Natapov; +Cc: qemu-devel

Gleb Natapov wrote:
>     
> It should depend on whether cpu has APIC.
> 
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> diff --git a/hw/pc.c b/hw/pc.c
> index 0934778..cb49772 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -878,14 +878,10 @@ static void pc_init1(ram_addr_t ram_size,
>          }
>          if (i != 0)
>              env->halted = 1;
> -        if (smp_cpus > 1) {
> -            /* XXX: enable it in all cases */
> -            env->cpuid_features |= CPUID_APIC;
> -        }
> -        qemu_register_reset(main_cpu_reset, 0, env);
> -        if (pci_enabled) {
> +        if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {

Obviously :), I'm fine with that change. Needs testing, though. What
scenarios did you already check?

>              apic_init(env);
>          }
> +        qemu_register_reset(main_cpu_reset, 0, env);

But this line silently reorders CPU and APIC reset handlers. If you did
it intentionally (I vaguely recall it may have some benefit /wrt KVM
synchronizing kernel and user space states), I would suggest pushing it
as a separate patch.

>      }
>  
>      vmport_init();
> --
> 			Gleb.
> 

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] Re: [PATCH v2] Apic creation should not depend on pci
  2009-06-08 14:03 ` [Qemu-devel] " Jan Kiszka
@ 2009-06-08 14:06   ` Gleb Natapov
  2009-06-09  8:14   ` Gleb Natapov
  1 sibling, 0 replies; 6+ messages in thread
From: Gleb Natapov @ 2009-06-08 14:06 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: qemu-devel

On Mon, Jun 08, 2009 at 04:03:19PM +0200, Jan Kiszka wrote:
> Gleb Natapov wrote:
> >     
> > It should depend on whether cpu has APIC.
> > 
> > Signed-off-by: Gleb Natapov <gleb@redhat.com>
> > diff --git a/hw/pc.c b/hw/pc.c
> > index 0934778..cb49772 100644
> > --- a/hw/pc.c
> > +++ b/hw/pc.c
> > @@ -878,14 +878,10 @@ static void pc_init1(ram_addr_t ram_size,
> >          }
> >          if (i != 0)
> >              env->halted = 1;
> > -        if (smp_cpus > 1) {
> > -            /* XXX: enable it in all cases */
> > -            env->cpuid_features |= CPUID_APIC;
> > -        }
> > -        qemu_register_reset(main_cpu_reset, 0, env);
> > -        if (pci_enabled) {
> > +        if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
> 
> Obviously :), I'm fine with that change. Needs testing, though. What
> scenarios did you already check?
> 
:) Only standard runs. I don't have 486 smp guest around.

> >              apic_init(env);
> >          }
> > +        qemu_register_reset(main_cpu_reset, 0, env);
> 
> But this line silently reorders CPU and APIC reset handlers. If you did
> it intentionally (I vaguely recall it may have some benefit /wrt KVM
> synchronizing kernel and user space states), I would suggest pushing it
> as a separate patch.
I don't know what this line is doing here. I'll remove it

--
			Gleb.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] Re: [PATCH v2] Apic creation should not depend on pci
  2009-06-08 14:03 ` [Qemu-devel] " Jan Kiszka
  2009-06-08 14:06   ` Gleb Natapov
@ 2009-06-09  8:14   ` Gleb Natapov
  2009-06-09  8:37     ` Jan Kiszka
  1 sibling, 1 reply; 6+ messages in thread
From: Gleb Natapov @ 2009-06-09  8:14 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: qemu-devel

On Mon, Jun 08, 2009 at 04:03:19PM +0200, Jan Kiszka wrote:
> Gleb Natapov wrote:
> >     
> > It should depend on whether cpu has APIC.
> > 
> > Signed-off-by: Gleb Natapov <gleb@redhat.com>
> > diff --git a/hw/pc.c b/hw/pc.c
> > index 0934778..cb49772 100644
> > --- a/hw/pc.c
> > +++ b/hw/pc.c
> > @@ -878,14 +878,10 @@ static void pc_init1(ram_addr_t ram_size,
> >          }
> >          if (i != 0)
> >              env->halted = 1;
> > -        if (smp_cpus > 1) {
> > -            /* XXX: enable it in all cases */
> > -            env->cpuid_features |= CPUID_APIC;
> > -        }
> > -        qemu_register_reset(main_cpu_reset, 0, env);
> > -        if (pci_enabled) {
> > +        if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
> 
> Obviously :), I'm fine with that change. Needs testing, though. What
> scenarios did you already check?
> 
> >              apic_init(env);
> >          }
> > +        qemu_register_reset(main_cpu_reset, 0, env);
> 
> But this line silently reorders CPU and APIC reset handlers. If you did
> it intentionally (I vaguely recall it may have some benefit /wrt KVM
> synchronizing kernel and user space states), I would suggest pushing it
> as a separate patch.
> 
BTW relying on order of callback registration is not a good idea
especially since we have "order" parameter now. On the other hand apic
reset handler already resets cpu so if apic is present there is no need to
register main_cpu_reset().

--
			Gleb.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] Re: [PATCH v2] Apic creation should not depend on pci
  2009-06-09  8:14   ` Gleb Natapov
@ 2009-06-09  8:37     ` Jan Kiszka
  2009-06-09  8:54       ` Gleb Natapov
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2009-06-09  8:37 UTC (permalink / raw)
  To: Gleb Natapov; +Cc: qemu-devel

Gleb Natapov wrote:
> On Mon, Jun 08, 2009 at 04:03:19PM +0200, Jan Kiszka wrote:
>> Gleb Natapov wrote:
>>>     
>>> It should depend on whether cpu has APIC.
>>>
>>> Signed-off-by: Gleb Natapov <gleb@redhat.com>
>>> diff --git a/hw/pc.c b/hw/pc.c
>>> index 0934778..cb49772 100644
>>> --- a/hw/pc.c
>>> +++ b/hw/pc.c
>>> @@ -878,14 +878,10 @@ static void pc_init1(ram_addr_t ram_size,
>>>          }
>>>          if (i != 0)
>>>              env->halted = 1;
>>> -        if (smp_cpus > 1) {
>>> -            /* XXX: enable it in all cases */
>>> -            env->cpuid_features |= CPUID_APIC;
>>> -        }
>>> -        qemu_register_reset(main_cpu_reset, 0, env);
>>> -        if (pci_enabled) {
>>> +        if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
>> Obviously :), I'm fine with that change. Needs testing, though. What
>> scenarios did you already check?
>>
>>>              apic_init(env);
>>>          }
>>> +        qemu_register_reset(main_cpu_reset, 0, env);
>> But this line silently reorders CPU and APIC reset handlers. If you did
>> it intentionally (I vaguely recall it may have some benefit /wrt KVM
>> synchronizing kernel and user space states), I would suggest pushing it
>> as a separate patch.
>>
> BTW relying on order of callback registration is not a good idea
> especially since we have "order" parameter now.

The order parameter is obsolete, I already posted a patch to revert this
idea again (reminds me of posting an update as a new reset handler
arrived in the meantime).

The system-wide assumed and applied order is that earlier instantiated
devices will be reset first. That specifically makes sense if you think
of bus/device relations.

> On the other hand apic
> reset handler already resets cpu so if apic is present there is no need to
> register main_cpu_reset().

OK, this is a special case as the APIC reset triggers an init IPI and
that resets the CPU, too. Then make this explicit, replace
main_cpu_reset with cpu_reset (so that no one adds code to the former
that is not run in the APIC case) and add some comment why.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] Re: [PATCH v2] Apic creation should not depend on pci
  2009-06-09  8:37     ` Jan Kiszka
@ 2009-06-09  8:54       ` Gleb Natapov
  0 siblings, 0 replies; 6+ messages in thread
From: Gleb Natapov @ 2009-06-09  8:54 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: qemu-devel

On Tue, Jun 09, 2009 at 10:37:53AM +0200, Jan Kiszka wrote:
> Gleb Natapov wrote:
> > On Mon, Jun 08, 2009 at 04:03:19PM +0200, Jan Kiszka wrote:
> >> Gleb Natapov wrote:
> >>>     
> >>> It should depend on whether cpu has APIC.
> >>>
> >>> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> >>> diff --git a/hw/pc.c b/hw/pc.c
> >>> index 0934778..cb49772 100644
> >>> --- a/hw/pc.c
> >>> +++ b/hw/pc.c
> >>> @@ -878,14 +878,10 @@ static void pc_init1(ram_addr_t ram_size,
> >>>          }
> >>>          if (i != 0)
> >>>              env->halted = 1;
> >>> -        if (smp_cpus > 1) {
> >>> -            /* XXX: enable it in all cases */
> >>> -            env->cpuid_features |= CPUID_APIC;
> >>> -        }
> >>> -        qemu_register_reset(main_cpu_reset, 0, env);
> >>> -        if (pci_enabled) {
> >>> +        if ((env->cpuid_features & CPUID_APIC) || smp_cpus > 1) {
> >> Obviously :), I'm fine with that change. Needs testing, though. What
> >> scenarios did you already check?
> >>
> >>>              apic_init(env);
> >>>          }
> >>> +        qemu_register_reset(main_cpu_reset, 0, env);
> >> But this line silently reorders CPU and APIC reset handlers. If you did
> >> it intentionally (I vaguely recall it may have some benefit /wrt KVM
> >> synchronizing kernel and user space states), I would suggest pushing it
> >> as a separate patch.
> >>
> > BTW relying on order of callback registration is not a good idea
> > especially since we have "order" parameter now.
> 
> The order parameter is obsolete, I already posted a patch to revert this
> idea again (reminds me of posting an update as a new reset handler
> arrived in the meantime).
> 
> The system-wide assumed and applied order is that earlier instantiated
> devices will be reset first. That specifically makes sense if you think
> of bus/device relations.
> 
Sounds fragile to me, but explicit order far from ideal too. Why should
order matter anyway. Device reset callbacks should not rely on the state
of other devices. 

> > On the other hand apic
> > reset handler already resets cpu so if apic is present there is no need to
> > register main_cpu_reset().
> 
> OK, this is a special case as the APIC reset triggers an init IPI and
> that resets the CPU, too. Then make this explicit, replace
> main_cpu_reset with cpu_reset (so that no one adds code to the former
> that is not run in the APIC case) and add some comment why.
Already doing it on top of this patch.

--
			Gleb.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-06-09  8:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-08 12:59 [Qemu-devel] [PATCH v2] Apic creation should not depend on pci Gleb Natapov
2009-06-08 14:03 ` [Qemu-devel] " Jan Kiszka
2009-06-08 14:06   ` Gleb Natapov
2009-06-09  8:14   ` Gleb Natapov
2009-06-09  8:37     ` Jan Kiszka
2009-06-09  8:54       ` Gleb Natapov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.