|
|
|
|
|
|
|
|
|
|
xen-devel
[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
|
|
|
|
|