xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
	"Thimo E." <abc@digithi.de>, Keir Fraser <keir@xen.org>
Subject: Re: cpuidle and un-eoid interrupts at the local apic
Date: Mon, 12 Aug 2013 10:28:47 +0100	[thread overview]
Message-ID: <5208AACF.7050901@citrix.com> (raw)
In-Reply-To: <5208B6DE02000078000EB08E@nat28.tlf.novell.com>

[-- Attachment #1: Type: text/plain, Size: 12210 bytes --]

On 12/08/13 09:20, Jan Beulich wrote:
>>>> On 09.08.13 at 23:27, "Thimo E." <abc@digithi.de> 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
>>>
>


[-- Attachment #2: ca-107844-debug.patch --]
[-- Type: text/x-patch, Size: 5875 bytes --]

# 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);

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2013-08-12  9:29 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-31 20:32 cpuidle and un-eoid interrupts at the local apic Andrew Cooper
2013-06-03 14:30 ` Jan Beulich
2013-07-31  8:30 ` Thimo E.
2013-07-31  9:47   ` Andrew Cooper
2013-08-02 22:50     ` Thimo E.
2013-08-02 23:32       ` Andrew Cooper
2013-08-05 12:45         ` Jan Beulich
2013-08-05 14:51           ` Andrew Cooper
2013-08-09 21:27             ` Thimo E.
2013-08-09 21:40               ` Andrew Cooper
2013-08-09 21:44                 ` Andrew Cooper
2013-08-11 17:46                   ` Thimo E.
2013-08-12  6:02                     ` Zhang, Yang Z
2013-08-12  8:49                     ` Zhang, Yang Z
2013-08-12  8:57                       ` Jan Beulich
2013-08-12 11:52                       ` Thimo E
2013-08-12 12:04                         ` Andrew Cooper
2013-08-19 15:14                           ` Thimo E.
2013-08-20  5:43                             ` Thimo Eichstädt
2013-08-20  8:40                               ` Jan Beulich
2013-08-20  8:50                                 ` Zhang, Yang Z
2013-08-23  7:22                                   ` Thimo Eichstädt
2013-08-23  7:30                                     ` Zhang, Yang Z
2013-08-27  1:03                                     ` Zhang, Yang Z
2013-09-04 18:32                                       ` Thimo E.
2013-09-04 18:55                                         ` Andrew Cooper
2013-09-04 19:56                                           ` Thimo E.
2013-09-04 20:54                                             ` Andrew Cooper
2013-09-05  1:45                                               ` Zhang, Yang Z
2013-09-05  7:20                                                 ` Thimo E.
2013-09-05  1:15                                         ` Zhang, Yang Z
2013-09-17  2:09                                         ` Zhang, Yang Z
2013-09-17  7:39                                           ` Thimo E.
2013-09-17  7:43                                             ` Zhang, Yang Z
2013-09-17 21:04                                               ` Thimo E.
2013-09-18  1:18                                                 ` Zhang, Xiantao
2013-09-18 17:24                                                   ` Thimo E.
2013-09-18 12:06                                                 ` Andrew Cooper
2013-08-12 13:54                       ` Thimo E
2013-08-12 14:06                         ` Andrew Cooper
2013-08-13  1:43                           ` Zhang, Yang Z
2013-08-13  6:39                             ` Thimo E.
2013-08-13 11:39                         ` Wu, Feng
2013-08-13 12:46                           ` Andrew Cooper
2013-08-12  9:10                     ` Andrew Cooper
2013-08-12  5:50                 ` Zhang, Yang Z
2013-08-12  8:20               ` Jan Beulich
2013-08-12  9:28                 ` Andrew Cooper [this message]
2013-08-12 10:05                   ` Jan Beulich
2013-08-12 10:27                     ` Andrew Cooper
2013-08-14  2:53                       ` Zhang, Yang Z
2013-08-14  7:51                         ` Thimo E.
2013-08-14  9:52                         ` Andrew Cooper
2013-09-07 13:27                           ` Thimo E.
2013-09-07 17:02                             ` Andrew Cooper
2013-09-07 23:37                               ` Thimo E.
2013-09-08  9:53                                 ` Andrew Cooper
2013-09-08 10:24                                   ` Thimo E.
2013-09-09 13:16                                     ` Andrew Cooper
2013-09-09 14:48                                       ` Thimo Eichstädt
2013-09-09 15:12                                         ` Andrew Cooper
2013-09-09  7:59                               ` Jan Beulich
2013-09-09 12:53                                 ` Andrew Cooper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5208AACF.7050901@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=JBeulich@suse.com \
    --cc=abc@digithi.de \
    --cc=keir@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).