diff options
author | Shaohua Li <shaohua.li@intel.com> | 2009-08-11 23:16:12 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-08-12 10:45:02 -0400 |
commit | 39fe05e58c5e448601ce46e6b03900d5bf31c4b0 (patch) | |
tree | e01978c90faa2e534d7c9af67647aa61f2242bcd /arch/x86/kernel/hpet.c | |
parent | 7cb7beb31aa3d941833b6a6e553687422c31e4b6 (diff) |
x86, hpet: Disable per-cpu hpet timer if ARAT is supported
If CPU support always running local APIC timer, per-cpu hpet
timer could be disabled, which is useless and wasteful in such
case. Let's leave the timers to others.
The effect is that we reserve less timers.
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Cc: venkatesh.pallipadi@intel.com
LKML-Reference: <20090812031612.GA10062@sli10-desk.sh.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/hpet.c')
-rw-r--r-- | arch/x86/kernel/hpet.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index dedc2bddf7a5..5969e1078fc2 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -584,6 +584,8 @@ static void hpet_msi_capability_lookup(unsigned int start_timer) | |||
584 | unsigned int num_timers_used = 0; | 584 | unsigned int num_timers_used = 0; |
585 | int i; | 585 | int i; |
586 | 586 | ||
587 | if (boot_cpu_has(X86_FEATURE_ARAT)) | ||
588 | return; | ||
587 | id = hpet_readl(HPET_ID); | 589 | id = hpet_readl(HPET_ID); |
588 | 590 | ||
589 | num_timers = ((id & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT); | 591 | num_timers = ((id & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT); |
@@ -872,10 +874,8 @@ int __init hpet_enable(void) | |||
872 | 874 | ||
873 | if (id & HPET_ID_LEGSUP) { | 875 | if (id & HPET_ID_LEGSUP) { |
874 | hpet_legacy_clockevent_register(); | 876 | hpet_legacy_clockevent_register(); |
875 | hpet_msi_capability_lookup(2); | ||
876 | return 1; | 877 | return 1; |
877 | } | 878 | } |
878 | hpet_msi_capability_lookup(0); | ||
879 | return 0; | 879 | return 0; |
880 | 880 | ||
881 | out_nohpet: | 881 | out_nohpet: |
@@ -908,9 +908,17 @@ static __init int hpet_late_init(void) | |||
908 | if (!hpet_virt_address) | 908 | if (!hpet_virt_address) |
909 | return -ENODEV; | 909 | return -ENODEV; |
910 | 910 | ||
911 | if (hpet_readl(HPET_ID) & HPET_ID_LEGSUP) | ||
912 | hpet_msi_capability_lookup(2); | ||
913 | else | ||
914 | hpet_msi_capability_lookup(0); | ||
915 | |||
911 | hpet_reserve_platform_timers(hpet_readl(HPET_ID)); | 916 | hpet_reserve_platform_timers(hpet_readl(HPET_ID)); |
912 | hpet_print_config(); | 917 | hpet_print_config(); |
913 | 918 | ||
919 | if (boot_cpu_has(X86_FEATURE_ARAT)) | ||
920 | return 0; | ||
921 | |||
914 | for_each_online_cpu(cpu) { | 922 | for_each_online_cpu(cpu) { |
915 | hpet_cpuhp_notify(NULL, CPU_ONLINE, (void *)(long)cpu); | 923 | hpet_cpuhp_notify(NULL, CPU_ONLINE, (void *)(long)cpu); |
916 | } | 924 | } |