diff options
Diffstat (limited to 'arch/x86/kernel/hpet.c')
-rw-r--r-- | arch/x86/kernel/hpet.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index 067d8de913f6..cd759ad90690 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -33,7 +33,9 @@ | |||
33 | * HPET address is set in acpi/boot.c, when an ACPI entry exists | 33 | * HPET address is set in acpi/boot.c, when an ACPI entry exists |
34 | */ | 34 | */ |
35 | unsigned long hpet_address; | 35 | unsigned long hpet_address; |
36 | unsigned long hpet_num_timers; | 36 | #ifdef CONFIG_PCI_MSI |
37 | static unsigned long hpet_num_timers; | ||
38 | #endif | ||
37 | static void __iomem *hpet_virt_address; | 39 | static void __iomem *hpet_virt_address; |
38 | 40 | ||
39 | struct hpet_dev { | 41 | struct hpet_dev { |
@@ -246,7 +248,7 @@ static void hpet_legacy_clockevent_register(void) | |||
246 | * Start hpet with the boot cpu mask and make it | 248 | * Start hpet with the boot cpu mask and make it |
247 | * global after the IO_APIC has been initialized. | 249 | * global after the IO_APIC has been initialized. |
248 | */ | 250 | */ |
249 | hpet_clockevent.cpumask = cpumask_of_cpu(smp_processor_id()); | 251 | hpet_clockevent.cpumask = cpumask_of(smp_processor_id()); |
250 | clockevents_register_device(&hpet_clockevent); | 252 | clockevents_register_device(&hpet_clockevent); |
251 | global_clock_event = &hpet_clockevent; | 253 | global_clock_event = &hpet_clockevent; |
252 | printk(KERN_DEBUG "hpet clockevent registered\n"); | 254 | printk(KERN_DEBUG "hpet clockevent registered\n"); |
@@ -301,7 +303,7 @@ static void hpet_set_mode(enum clock_event_mode mode, | |||
301 | struct hpet_dev *hdev = EVT_TO_HPET_DEV(evt); | 303 | struct hpet_dev *hdev = EVT_TO_HPET_DEV(evt); |
302 | hpet_setup_msi_irq(hdev->irq); | 304 | hpet_setup_msi_irq(hdev->irq); |
303 | disable_irq(hdev->irq); | 305 | disable_irq(hdev->irq); |
304 | irq_set_affinity(hdev->irq, cpumask_of_cpu(hdev->cpu)); | 306 | irq_set_affinity(hdev->irq, cpumask_of(hdev->cpu)); |
305 | enable_irq(hdev->irq); | 307 | enable_irq(hdev->irq); |
306 | } | 308 | } |
307 | break; | 309 | break; |
@@ -449,7 +451,7 @@ static int hpet_setup_irq(struct hpet_dev *dev) | |||
449 | return -1; | 451 | return -1; |
450 | 452 | ||
451 | disable_irq(dev->irq); | 453 | disable_irq(dev->irq); |
452 | irq_set_affinity(dev->irq, cpumask_of_cpu(dev->cpu)); | 454 | irq_set_affinity(dev->irq, cpumask_of(dev->cpu)); |
453 | enable_irq(dev->irq); | 455 | enable_irq(dev->irq); |
454 | 456 | ||
455 | printk(KERN_DEBUG "hpet: %s irq %d for MSI\n", | 457 | printk(KERN_DEBUG "hpet: %s irq %d for MSI\n", |
@@ -500,7 +502,7 @@ static void init_one_hpet_msi_clockevent(struct hpet_dev *hdev, int cpu) | |||
500 | /* 5 usec minimum reprogramming delta. */ | 502 | /* 5 usec minimum reprogramming delta. */ |
501 | evt->min_delta_ns = 5000; | 503 | evt->min_delta_ns = 5000; |
502 | 504 | ||
503 | evt->cpumask = cpumask_of_cpu(hdev->cpu); | 505 | evt->cpumask = cpumask_of(hdev->cpu); |
504 | clockevents_register_device(evt); | 506 | clockevents_register_device(evt); |
505 | } | 507 | } |
506 | 508 | ||
@@ -811,7 +813,7 @@ int __init hpet_enable(void) | |||
811 | 813 | ||
812 | out_nohpet: | 814 | out_nohpet: |
813 | hpet_clear_mapping(); | 815 | hpet_clear_mapping(); |
814 | boot_hpet_disable = 1; | 816 | hpet_address = 0; |
815 | return 0; | 817 | return 0; |
816 | } | 818 | } |
817 | 819 | ||
@@ -834,10 +836,11 @@ static __init int hpet_late_init(void) | |||
834 | 836 | ||
835 | hpet_address = force_hpet_address; | 837 | hpet_address = force_hpet_address; |
836 | hpet_enable(); | 838 | hpet_enable(); |
837 | if (!hpet_virt_address) | ||
838 | return -ENODEV; | ||
839 | } | 839 | } |
840 | 840 | ||
841 | if (!hpet_virt_address) | ||
842 | return -ENODEV; | ||
843 | |||
841 | hpet_reserve_platform_timers(hpet_readl(HPET_ID)); | 844 | hpet_reserve_platform_timers(hpet_readl(HPET_ID)); |
842 | 845 | ||
843 | for_each_online_cpu(cpu) { | 846 | for_each_online_cpu(cpu) { |