• Andi Kleen's avatar
    [PATCH] x86_64: Better ATI timer fix · ab9b32ee
    Andi Kleen authored
    The previous experiment for using apicmaintimer on ATI systems didn't
    work out very well.  In particular laptops with C2/C3 support often
    don't let it tick during idle, which makes it useless.  There were also
    some other bugs that made the apicmaintimer often not used at all.
    
    I tried some other experiments - running timer over RTC and some other
    things but they didn't really work well neither.
    
    I rechecked the specs now and it turns out this simple change is
    actually enough to avoid the double ticks on the ATI systems.  We just
    turn off IRQ 0 in the 8254 and only route it directly using the IO-APIC.
    
    I tested it on a few ATI systems and it worked there.  In fact it worked
    on all chipsets (NVidia, Intel, AMD, ATI) I tried it on.
    
    According to the ACPI spec routing should always work through the
    IO-APIC so I think it's the correct thing to do anyways (and most of the
    old gunk in check_timer should be thrown away for x86-64).
    
    But for 2.6.16 it's best to do a fairly minimal change:
     - Use the known to be working everywhere-but-ATI IRQ0 both over 8254
       and IO-APIC setup everywhere
     - Except on ATI disable IRQ0 in the 8254
     - Remove the code to select apicmaintimer on ATI chipsets
     - Add some boot options to allow to override this (just paranoia)
    
    In 2.6.17 I hope to switch the default over to this for everybody.
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    ab9b32ee
io_apic.c 53.7 KB