|   xen-devel
RE: [Xen-devel] [PATCH] make HVM PIC emulation code SMP-safe 
|  For 
the PIC I/O access, do we need lock protect? But for IRQ generation, i.e. 
cpu_get_interrupt, how about following for simplicity (not 
tested)?   diff -r 
1e3977e029fd xen/arch/x86/hvm/hvm.c--- 
a/xen/arch/x86/hvm/hvm.c    Mon May 08 19:21:41 2006 +0100
 +++ 
b/xen/arch/x86/hvm/hvm.c    Tue May 16 13:18:04 2006 +0800
 @@ 
-248,7 +248,7 @@ int cpu_get_interrupt(struct vcpu *v, 
in
 return 
intno;
 }
 /* read the irq 
from the PIC */
 -    if ( (intno = cpu_get_pic_interrupt(v, 
type)) != -1 )
 +    if ( v->vcpu_id == 0 && (intno 
= cpu_get_pic_interrupt(v, type)) != -1 
)
 return 
intno;
        return -1;
 Dave:     I think we'd better to make sure 
cpu_get_interrupt be called only in VP0 too, but IOAPIC code may need 
sonsolidation for SMP safe. hvm_pic_assist is safe as it is only happen in 
VP0.     When switching from PIC to APIC in SMP, the guest 
will disable PIC when IOAPIC/APIC is enabled.  thx,eddie Resubmit of same with signed-off-by tag ...
 
 
 On 5/15/06, David 
Lively < 
dlively@xxxxxxxxxxxxxxx> wrote: 
The 
  current PIC emulation code for HVM (fully-virtualized) guestsis unsafe on 
  SMP hosts.  Guests can access the PIC from any VCPU,
 though they 
  should be (and generally are) controlling access so that
 at most a single 
  VCPU is accessing the PIC at any time.  However,
 there are two 
  other paths that may access the PIC concurrently with
 a guest VCPU:
 (1) 
  "the APIC kludge" - cpu_get_interrupt() calls pic_update_irq() 
  to
 bump slave PIC intrs to the master 
  PIC.  This is called from all
 VCPUS.
 (2) hvm_pic_assist() 
  calls do_pic_irqs[_clear]() - from VCPU 0 only
 
 With no PIC concurrency 
  controls, SMP HVM guests[1] are unstable (tend
 to hang) under high I/O 
  loads (e.g., the LTP aio-stress & dio tests).
 With the
 PIC 
  concurrency control introduced in the attached patch, SMP HVM guests
 are 
  considerably more stable.  I have yet to see a hang under heavy 
  I/O
 loads.
 I've tested only 64-bit SMP guests (but this code is 
  unchanged for 32
 bits), always
 passing "noapic" as explained below.
 
 Dave
 
 [1] Note we're passing "noapic" to the Linux kernels we're 
  testing on SMP
 guests.  This tells Linux to ignore the I/O 
  APIC.  Without this, we lose too
 many hda interrupts for Linux to 
  boot.  The I/O APIC code has many of the
 same issues as the PIC 
  code.  I have a similar fix for the I/O APICs,
 but since
 it 
  doesn't fix the "lost interrupt" problem I haven't been able to
 adequately 
  test
 it yet.
 
 
 _______________________________________________
 Xen-devel mailing list
 Xen-devel@xxxxxxxxxxxxxxxxxxx
 http://lists.xensource.com/xen-devel
 
 
 
 
 
 _______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 | 
 |  |