[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: XEN 4.0.1: BUG: IO-APIC + timer doesn't work!



>>> On 09.09.10 at 02:00, Markus Schuster <ml@xxxxxxxxxxxxxxxxxxxx> wrote:
> I think the relevant difference is:
> XEN 3.4.3:
> (XEN) ..MP-BIOS bug: 8254 timer not connected to IO-APIC
> (XEN) ...trying to set up timer (IRQ0) through the 8259A ...  failed.
> (XEN) ...trying to set up timer as Virtual Wire IRQ... failed.
> (XEN) ...trying to set up timer as ExtINT IRQ... works.
> 
> XEN 4.0.1:
> (XEN) ..MP-BIOS bug: 8254 timer not connected to IO-APIC
> (XEN) ...trying to set up timer (IRQ0) through the 8259A ...  failed.
> (XEN) ...trying to set up timer as Virtual Wire IRQ... failed.
> (XEN) ...trying to set up timer as ExtINT IRQ... failed :(.
> 
> Please have a look in the attached files for details. 

Could you try below patch (with "acpi_skip_timer_override"
removed again)?

Jan

--- a/xen/arch/x86/i8259.c
+++ b/xen/arch/x86/i8259.c
@@ -367,6 +367,13 @@ void __devinit init_8259A(int auto_eoi)
     spin_unlock_irqrestore(&i8259A_lock, flags);
 }
 
+void __init make_8259A_irq(unsigned int irq)
+{
+printk("IRQ%u -> 8259A\n", irq);//temp
+    io_apic_irqs &= ~(1 << irq);
+    irq_to_desc(irq)->handler = &i8259A_irq_type;
+}
+
 static struct irqaction __read_mostly cascade = { no_action, "cascade", NULL};
 
 void __init init_IRQ(void)
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -38,9 +38,6 @@
 #include <io_ports.h>
 #include <public/physdev.h>
 
-/* Different to Linux: our implementation can be simpler. */
-#define make_8259A_irq(irq) (io_apic_irqs &= ~(1<<(irq)))
-
 int (*ioapic_renumber_irq)(int ioapic, int irq);
 atomic_t irq_mis_count;
 
@@ -1929,7 +1926,6 @@ static inline void check_timer(void)
     
     irq_desc[0].depth  = 0;
     irq_desc[0].status &= ~IRQ_DISABLED;
-    irq_desc[0].handler = &ioapic_edge_type;
 
     /*
      * Subtle, code in do_timer_interrupt() expects an AEOI
--- a/xen/include/asm-x86/irq.h
+++ b/xen/include/asm-x86/irq.h
@@ -91,6 +91,7 @@ int i8259A_irq_pending(unsigned int irq)
 void mask_8259A(void);
 void unmask_8259A(void);
 void init_8259A(int aeoi);
+void make_8259A_irq(unsigned int irq);
 int i8259A_suspend(void);
 int i8259A_resume(void);
 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.