|
@@ -51,6 +51,8 @@ static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
|
|
|
|
|
|
static DEFINE_SPINLOCK(ioapic_lock);
|
|
|
|
|
|
+int timer_over_8254 __initdata = 1;
|
|
|
+
|
|
|
/*
|
|
|
* Is the SiS APIC rmw bug present ?
|
|
|
* -1 = don't know, 0 = no, 1 = yes
|
|
@@ -2267,7 +2269,8 @@ static inline void check_timer(void)
|
|
|
apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
|
|
|
init_8259A(1);
|
|
|
timer_ack = 1;
|
|
|
- enable_8259A_irq(0);
|
|
|
+ if (timer_over_8254 > 0)
|
|
|
+ enable_8259A_irq(0);
|
|
|
|
|
|
pin1 = find_isa_irq_pin(0, mp_INT);
|
|
|
apic1 = find_isa_irq_apic(0, mp_INT);
|
|
@@ -2392,6 +2395,20 @@ void __init setup_IO_APIC(void)
|
|
|
print_IO_APIC();
|
|
|
}
|
|
|
|
|
|
+static int __init setup_disable_8254_timer(char *s)
|
|
|
+{
|
|
|
+ timer_over_8254 = -1;
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+static int __init setup_enable_8254_timer(char *s)
|
|
|
+{
|
|
|
+ timer_over_8254 = 2;
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+__setup("disable_8254_timer", setup_disable_8254_timer);
|
|
|
+__setup("enable_8254_timer", setup_enable_8254_timer);
|
|
|
+
|
|
|
/*
|
|
|
* Called after all the initialization is done. If we didnt find any
|
|
|
* APIC bugs then we can allow the modify fast path
|