From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: cpuidle and un-eoid interrupts at the local apic Date: Mon, 12 Aug 2013 10:28:47 +0100 Message-ID: <5208AACF.7050901@citrix.com> References: <51A908CA.7050604@citrix.com> <51F8CB15.1070608@digithi.de><51F8DD40.2090207@citrix.com> <51FC37A9.9090809@digithi.de><51FC418D.8020708@citrix.com><51FFBA8502000078000E9462@nat28.tlf.novell.com> <51FFBC08.6070804@citrix.com> <52055EC9.8030207@digithi.de> <5208B6DE02000078000EB08E@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000902090100000208070809" Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1V8oQy-00084U-R1 for xen-devel@lists.xenproject.org; Mon, 12 Aug 2013 09:29:05 +0000 In-Reply-To: <5208B6DE02000078000EB08E@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: xen-devel , "Thimo E." , Keir Fraser List-Id: xen-devel@lists.xenproject.org --------------000902090100000208070809 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit On 12/08/13 09:20, Jan Beulich wrote: >>>> On 09.08.13 at 23:27, "Thimo E." wrote: >> (XEN) **Pending EOI error >> (XEN) irq 29, vector 0x24 >> (XEN) s[0] irq 29, vec 0x24, ready 0, ISR 00000001, TMR 00000000, IRR 00000000 >> (XEN) All LAPIC state: >> (XEN) [vector] ISR TMR IRR >> (XEN) [1f:00] 00000000 00000000 00000000 >> (XEN) [3f:20] 00000010 76efa12e 00000000 >> (XEN) [5f:40] 00000000 e6f0f2fc 00000000 >> (XEN) [7f:60] 00000000 32d096ca 00000000 >> (XEN) [9f:80] 00000000 78fcf87a 00000000 >> (XEN) [bf:a0] 00000000 f9b9fe4e 00000000 >> (XEN) [df:c0] 00000000 ffdfe7ab 00000000 >> (XEN) [ff:e0] 00000000 00000000 00000000 >> (XEN) Peoi stack trace records: > Mind providing (a link to) the patch that was used here, so that > one can make sense of the printed information (and perhaps > also suggest adjustments to that debugging code)? Nothing I > was able to find on the list fully matches the output above... > > Jan Attached ~Andrew > >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Marked {sp 0, irq 29, vec 0x24} ready >> (XEN) Pushed {sp 0, irq 29, vec 0x24} >> (XEN) Poped entry {sp 1, irq 29, vec 0x24} >> (XEN) Guest interrupt information: >> (XEN) IRQ: 0 affinity:1 vec:f0 type=IO-APIC-edge status=00000000 >> mapped, unbound >> (XEN) IRQ: 1 affinity:1 vec:38 type=IO-APIC-edge status=00000050 >> in-flight=0 domain-list=0: 1(----), >> (XEN) IRQ: 2 affinity:f vec:00 type=XT-PIC status=00000000 mapped, >> unbound >> (XEN) IRQ: 3 affinity:1 vec:40 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 4 affinity:1 vec:48 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 5 affinity:1 vec:50 type=IO-APIC-edge status=00000050 >> in-flight=0 domain-list=0: 5(----), >> (XEN) IRQ: 6 affinity:1 vec:58 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 7 affinity:1 vec:60 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 8 affinity:1 vec:68 type=IO-APIC-edge status=00000050 >> in-flight=0 domain-list=0: 8(----), >> (XEN) IRQ: 9 affinity:1 vec:70 type=IO-APIC-level status=00000050 >> in-flight=0 domain-list=0: 9(----), >> (XEN) IRQ: 10 affinity:1 vec:78 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 11 affinity:1 vec:88 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 12 affinity:1 vec:90 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 13 affinity:1 vec:98 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 14 affinity:1 vec:a0 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 15 affinity:1 vec:a8 type=IO-APIC-edge status=00000002 >> mapped, unbound >> (XEN) IRQ: 16 affinity:1 vec:db type=IO-APIC-level status=00000010 >> in-flight=0 domain-list=0: 16(----), >> (XEN) IRQ: 18 affinity:1 vec:2c type=IO-APIC-level status=00000010 >> in-flight=0 domain-list=0: 18(----), >> (XEN) IRQ: 19 affinity:1 vec:51 type=IO-APIC-level status=00000002 >> mapped, unbound >> (XEN) IRQ: 20 affinity:1 vec:29 type=IO-APIC-level status=00000002 >> mapped, unbound >> (XEN) IRQ: 22 affinity:1 vec:bb type=IO-APIC-level status=00000050 >> in-flight=0 domain-list=0: 22(----), >> (XEN) IRQ: 23 affinity:8 vec:c2 type=IO-APIC-level status=00000050 >> in-flight=0 domain-list=0: 23(----), >> (XEN) IRQ: 24 affinity:1 vec:28 type=DMA_MSI status=00000000 mapped, >> unbound >> (XEN) IRQ: 25 affinity:1 vec:30 type=DMA_MSI status=00000000 mapped, >> unbound >> (XEN) IRQ: 26 affinity:f vec:c0 type=PCI-MSI status=00000002 mapped, >> unbound >> (XEN) IRQ: 27 affinity:f vec:c8 type=PCI-MSI status=00000002 mapped, >> unbound >> (XEN) IRQ: 28 affinity:f vec:d0 type=PCI-MSI status=00000002 mapped, >> unbound >> (XEN) IRQ: 29 affinity:2 vec:24 type=PCI-MSI status=00000010 >> in-flight=0 domain-list=0:276(----), >> (XEN) IRQ: 30 affinity:4 vec:93 type=PCI-MSI status=00000050 >> in-flight=0 domain-list=0:275(----), >> (XEN) IRQ: 31 affinity:2 vec:4a type=PCI-MSI status=00000050 >> in-flight=0 domain-list=0:274(----), >> (XEN) IRQ: 32 affinity:2 vec:73 type=PCI-MSI status=00000050 >> in-flight=0 domain-list=0:273(----), >> (XEN) IRQ: 33 affinity:1 vec:49 type=PCI-MSI status=00000050 >> in-flight=0 domain-list=0:272(----), >> (XEN) IRQ: 34 affinity:8 vec:5f type=PCI-MSI status=00000050 >> in-flight=0 domain-list=0:271(----), >> (XEN) IO-APIC interrupt information: >> (XEN) IRQ 0 Vec240: >> (XEN) Apic 0x00, Pin 2: vec=f0 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 1 Vec 56: >> (XEN) Apic 0x00, Pin 1: vec=38 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 3 Vec 64: >> (XEN) Apic 0x00, Pin 3: vec=40 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 4 Vec 72: >> (XEN) Apic 0x00, Pin 4: vec=48 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 5 Vec 80: >> (XEN) Apic 0x00, Pin 5: vec=50 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 6 Vec 88: >> (XEN) Apic 0x00, Pin 6: vec=58 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 7 Vec 96: >> (XEN) Apic 0x00, Pin 7: vec=60 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 8 Vec104: >> (XEN) Apic 0x00, Pin 8: vec=68 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 9 Vec112: >> (XEN) Apic 0x00, Pin 9: vec=70 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=L mask=0 dest_id:0 >> (XEN) IRQ 10 Vec120: >> (XEN) Apic 0x00, Pin 10: vec=78 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 11 Vec136: >> (XEN) Apic 0x00, Pin 11: vec=88 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 12 Vec144: >> (XEN) Apic 0x00, Pin 12: vec=90 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 13 Vec152: >> (XEN) Apic 0x00, Pin 13: vec=98 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 14 Vec160: >> (XEN) Apic 0x00, Pin 14: vec=a0 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 15 Vec168: >> (XEN) Apic 0x00, Pin 15: vec=a8 delivery=LoPri dest=L status=0 >> polarity=0 irr=0 trig=E mask=0 dest_id:0 >> (XEN) IRQ 16 Vec219: >> (XEN) Apic 0x00, Pin 16: vec=db delivery=LoPri dest=L status=0 >> polarity=1 irr=0 trig=L mask=0 dest_id:0 >> (XEN) IRQ 18 Vec 44: >> (XEN) Apic 0x00, Pin 18: vec=2c delivery=LoPri dest=L status=0 >> polarity=1 irr=0 trig=L mask=0 dest_id:0 >> (XEN) IRQ 19 Vec 81: >> (XEN) Apic 0x00, Pin 19: vec=51 delivery=LoPri dest=L status=0 >> polarity=1 irr=0 trig=L mask=1 dest_id:0 >> (XEN) IRQ 20 Vec 41: >> (XEN) Apic 0x00, Pin 20: vec=29 delivery=LoPri dest=L status=0 >> polarity=1 irr=0 trig=L mask=1 dest_id:0 >> (XEN) IRQ 22 Vec187: >> (XEN) Apic 0x00, Pin 22: vec=bb delivery=LoPri dest=L status=0 >> polarity=1 irr=0 trig=L mask=0 dest_id:0 >> (XEN) IRQ 23 Vec194: >> (XEN) Apic 0x00, Pin 23: vec=c2 delivery=LoPri dest=L status=0 >> polarity=1 irr=0 trig=L mask=0 dest_id:0 >> (XEN) number of MP IRQ sources: 15. >> (XEN) number of IO-APIC #2 registers: 24. >> (XEN) testing the IO APIC....................... >> (XEN) IO APIC #2...... >> (XEN) .... register #00: 02000000 >> (XEN) ....... : physical APIC id: 02 >> (XEN) ....... : Delivery Type: 0 >> (XEN) ....... : LTS : 0 >> (XEN) .... register #01: 00170020 >> (XEN) ....... : max redirection entries: 0017 >> (XEN) ....... : PRQ implemented: 0 >> (XEN) ....... : IO APIC version: 0020 >> (XEN) .... IRQ redirection table: >> (XEN) NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect: >> (XEN) 00 000 00 1 0 0 0 0 0 0 00 >> (XEN) 01 000 00 0 0 0 0 0 1 1 38 >> (XEN) 02 000 00 0 0 0 0 0 1 1 F0 >> (XEN) 03 000 00 0 0 0 0 0 1 1 40 >> (XEN) 04 000 00 0 0 0 0 0 1 1 48 >> (XEN) 05 000 00 0 0 0 0 0 1 1 50 >> (XEN) 06 000 00 0 0 0 0 0 1 1 58 >> (XEN) 07 000 00 0 0 0 0 0 1 1 60 >> (XEN) 08 000 00 0 0 0 0 0 1 1 68 >> (XEN) 09 000 00 0 1 0 0 0 1 1 70 >> (XEN) 0a 000 00 0 0 0 0 0 1 1 78 >> (XEN) 0b 000 00 0 0 0 0 0 1 1 88 >> (XEN) 0c 000 00 0 0 0 0 0 1 1 90 >> (XEN) 0d 000 00 0 0 0 0 0 1 1 98 >> (XEN) 0e 000 00 0 0 0 0 0 1 1 A0 >> (XEN) 0f 000 00 0 0 0 0 0 1 1 A8 >> (XEN) 10 000 00 0 1 0 1 0 1 1 DB >> (XEN) 11 000 00 1 0 0 0 0 0 0 00 >> (XEN) 12 000 00 0 1 0 1 0 1 1 2C >> (XEN) 13 000 00 1 1 0 1 0 1 1 51 >> (XEN) 14 000 00 1 1 0 1 0 1 1 29 >> (XEN) 15 07A 0A 1 0 0 0 0 0 2 B4 >> (XEN) 16 000 00 0 1 0 1 0 1 1 BB >> (XEN) 17 000 00 0 1 0 1 0 1 1 C2 >> (XEN) Using vector-based indexing >> (XEN) IRQ to pin mappings: >> (XEN) IRQ240 -> 0:2 >> (XEN) IRQ56 -> 0:1 >> (XEN) IRQ64 -> 0:3 >> (XEN) IRQ72 -> 0:4 >> (XEN) IRQ80 -> 0:5 >> (XEN) IRQ88 -> 0:6 >> (XEN) IRQ96 -> 0:7 >> (XEN) IRQ104 -> 0:8 >> (XEN) IRQ112 -> 0:9 >> (XEN) IRQ120 -> 0:10 >> (XEN) IRQ136 -> 0:11 >> (XEN) IRQ144 -> 0:12 >> (XEN) IRQ152 -> 0:13 >> (XEN) IRQ160 -> 0:14 >> (XEN) IRQ168 -> 0:15 >> (XEN) IRQ219 -> 0:16 >> (XEN) IRQ44 -> 0:18 >> (XEN) IRQ81 -> 0:19 >> (XEN) IRQ41 -> 0:20 >> (XEN) IRQ187 -> 0:22 >> (XEN) IRQ194 -> 0:23 >> (XEN) .................................... done. >> (XEN) >> (XEN) **************************************** >> (XEN) Panic on CPU 1: >> (XEN) CA-107844**************************************** >> (XEN) >> (XEN) Reboot in five seconds... >> (XEN) Executing crash image >> >> >> Am 05.08.2013 16:51, schrieb Andrew Cooper: >>> All of these crashes are coming out of mwait_idle, so the cpu in >>> question has literally just been in an lower power state. >>> >>> I am wondering whether there is some caching issue where an update to >>> the Pending EOI stack pointer got "lost", but this seems like a little >>> too specific to be reasonably explained as a caching issue. >>> >>> A new debugging patch is on its way (Sorry - it has been a very busy few >>> days) >>> >>> ~Andrew >>> > --------------000902090100000208070809 Content-Type: text/x-patch; name="ca-107844-debug.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ca-107844-debug.patch" # HG changeset patch # Parent bbd6b6d05c06f6331974467467cf567d60915b3d diff -r bbd6b6d05c06 xen/arch/x86/io_apic.c --- a/xen/arch/x86/io_apic.c +++ b/xen/arch/x86/io_apic.c @@ -1176,7 +1176,7 @@ static inline void UNEXPECTED_IO_APIC(vo { } -static void /*__init*/ __print_IO_APIC(void) +void /*__init*/ __print_IO_APIC(void) { int apic, i; union IO_APIC_reg_00 reg_00; diff -r bbd6b6d05c06 xen/arch/x86/irq.c --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -1003,6 +1003,46 @@ static void irq_guest_eoi_timer_fn(void spin_unlock_irqrestore(&desc->lock, flags); } +struct peoi_record { + enum { PEOI_PUSH, + PEOI_SETREADY, + PEOI_FLUSH, + PEOI_POP } action; + unsigned sp, irq, vector; +}; + +static void print_peoi_record(const struct peoi_record *r) +{ + switch ( r->action ) + { + case PEOI_PUSH: + printk(" Pushed {sp %d, irq %d, vec 0x%02x}\n", + r->sp, r->irq, r->vector); + break; + case PEOI_SETREADY: + printk(" Marked {sp %d, irq %d, vec 0x%02x} ready\n", + r->sp, r->irq, r->vector); + break; + case PEOI_FLUSH: + printk(" Fushed %d -> 0 \n", r->sp); + break; + case PEOI_POP: + printk(" Poped entry {sp %d, irq %d, vec 0x%02x}\n", + r->sp, r->irq, r->vector); + break; + default: + printk(" Unknown: {%d, %d, %d, 0x%02x}\n", + r->action, r->sp, r->irq, r->vector); + break; + } +} + +#define NR_PEOI_RECORDS 32 +static DEFINE_PER_CPU(struct peoi_record, _peoi_dbg[NR_PEOI_RECORDS]) = {{0}}; +static DEFINE_PER_CPU(unsigned int, _peoi_dbg_idx) = 0; + +static void dump_irqs(unsigned char key); +void __print_IO_APIC(void); static void __do_IRQ_guest(int irq) { struct irq_desc *desc = irq_to_desc(irq); @@ -1024,13 +1064,53 @@ static void __do_IRQ_guest(int irq) if ( action->ack_type == ACKTYPE_EOI ) { sp = pending_eoi_sp(peoi); - ASSERT((sp == 0) || (peoi[sp-1].vector < vector)); + if ( unlikely( !((sp == 0) || (peoi[sp-1].vector < vector)) )) + { + int p; + unsigned i, idx; + printk("**Pending EOI error\n"); + printk(" irq %d, vector 0x%x\n", irq, vector); + + for ( p = sp-1; p >= 0; --p ) + { + printk(" s[%d] irq %d, vec 0x%x, ready %u, " + "ISR %08"PRIx32", TMR %08"PRIx32", IRR %08"PRIx32"\n", + p, peoi[p].irq, peoi[p].vector, peoi[p].ready, + apic_isr_read(peoi[p].vector), + apic_tmr_read(peoi[p].vector), + apic_irr_read(peoi[p].vector) ); + } + + printk("All LAPIC state:\n"); + printk("[vector] %8s %8s %8s\n", "ISR", "TMR", "IRR"); + for ( i = 0; i < APIC_ISR_NR; ++i ) + printk("[%02x:%02x] %08"PRIx32" %08"PRIx32" %08"PRIx32"\n", + (i * 32)+31, i*32, + apic_read(APIC_ISR + i*0x10), + apic_read(APIC_TMR + i*0x10), + apic_read(APIC_IRR + i*0x10) ); + + printk("Peoi stack trace records:\n"); + idx = this_cpu(_peoi_dbg_idx); + for ( i = 1; i <= NR_PEOI_RECORDS; ++i ) + print_peoi_record(&this_cpu(_peoi_dbg)[(idx - i) & + (NR_PEOI_RECORDS-1)] ); + + spin_unlock(&desc->lock); + dump_irqs('i'); + __print_IO_APIC(); + + panic("CA-107844"); + } ASSERT(sp < (NR_DYNAMIC_VECTORS-1)); peoi[sp].irq = irq; peoi[sp].vector = vector; peoi[sp].ready = 0; pending_eoi_sp(peoi) = sp+1; cpu_set(smp_processor_id(), action->cpu_eoi_map); + + this_cpu(_peoi_dbg)[(this_cpu(_peoi_dbg_idx)++) & (NR_PEOI_RECORDS-1)] + = (struct peoi_record){PEOI_PUSH, sp, irq, peoi[sp].vector}; } for ( i = 0; i < action->nr_guests; i++ ) @@ -1130,6 +1210,9 @@ static void flush_ready_eoi(void) spin_lock(&desc->lock); desc->handler->end(irq, peoi[sp].vector); spin_unlock(&desc->lock); + + this_cpu(_peoi_dbg)[(this_cpu(_peoi_dbg_idx)++) & (NR_PEOI_RECORDS-1)] + = (struct peoi_record){PEOI_POP, sp+1, irq, peoi[sp].vector}; } pending_eoi_sp(peoi) = sp+1; @@ -1155,6 +1238,9 @@ static void __set_eoi_ready(struct irq_d } while ( peoi[--sp].irq != irq ); ASSERT(!peoi[sp].ready); peoi[sp].ready = 1; + + this_cpu(_peoi_dbg)[(this_cpu(_peoi_dbg_idx)++) & (NR_PEOI_RECORDS-1)] + = (struct peoi_record){PEOI_SETREADY, sp, irq, desc->chip_data->vector}; } /* Mark specified IRQ as ready-for-EOI (if it really is) and attempt to EOI. */ @@ -1976,6 +2062,8 @@ void fixup_irqs(void) /* Flush the interrupt EOI stack. */ peoi = this_cpu(pending_eoi); + this_cpu(_peoi_dbg)[(this_cpu(_peoi_dbg_idx)++) & (NR_PEOI_RECORDS-1)] + = (struct peoi_record){PEOI_FLUSH, pending_eoi_sp(peoi)}; for ( sp = 0; sp < pending_eoi_sp(peoi); sp++ ) peoi[sp].ready = 1; flush_ready_eoi(); diff -r bbd6b6d05c06 xen/include/asm-x86/apic.h --- a/xen/include/asm-x86/apic.h +++ b/xen/include/asm-x86/apic.h @@ -152,6 +152,18 @@ static __inline bool_t apic_isr_read(u8 (vector & 0x1f)) & 1; } +static __inline bool_t apic_tmr_read(u8 vector) +{ + return (apic_read(APIC_TMR + ((vector & ~0x1f) >> 1)) >> + (vector & 0x1f)) & 1; +} + +static __inline bool_t apic_irr_read(u8 vector) +{ + return (apic_read(APIC_IRR + ((vector & ~0x1f) >> 1)) >> + (vector & 0x1f)) & 1; +} + static __inline u32 get_apic_id(void) /* Get the physical APIC id */ { u32 id = apic_read(APIC_ID); --------------000902090100000208070809 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --------------000902090100000208070809--