]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/hpet.c
Merge commit 'v2.6.29-rc4' into x86/cleanups
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / hpet.c
index e76d7e272974ffebd37a5010b2d2f4b3635c1bb7..64d5ad0b8add85190ef600bb4f4887889729ef29 100644 (file)
@@ -33,7 +33,9 @@
  * HPET address is set in acpi/boot.c, when an ACPI entry exists
  */
 unsigned long                          hpet_address;
-unsigned long                          hpet_num_timers;
+#ifdef CONFIG_PCI_MSI
+static unsigned long                   hpet_num_timers;
+#endif
 static void __iomem                    *hpet_virt_address;
 
 struct hpet_dev {
@@ -626,11 +628,12 @@ static int hpet_cpuhp_notify(struct notifier_block *n,
 
        switch (action & 0xf) {
        case CPU_ONLINE:
-               INIT_DELAYED_WORK(&work.work, hpet_work);
+               INIT_DELAYED_WORK_ON_STACK(&work.work, hpet_work);
                init_completion(&work.complete);
                /* FIXME: add schedule_work_on() */
                schedule_delayed_work_on(cpu, &work.work, 0);
                wait_for_completion(&work.complete);
+               destroy_timer_on_stack(&work.work.timer);
                break;
        case CPU_DEAD:
                if (hdev) {
@@ -811,7 +814,7 @@ int __init hpet_enable(void)
 
 out_nohpet:
        hpet_clear_mapping();
-       boot_hpet_disable = 1;
+       hpet_address = 0;
        return 0;
 }
 
@@ -834,10 +837,11 @@ static __init int hpet_late_init(void)
 
                hpet_address = force_hpet_address;
                hpet_enable();
-               if (!hpet_virt_address)
-                       return -ENODEV;
        }
 
+       if (!hpet_virt_address)
+               return -ENODEV;
+
        hpet_reserve_platform_timers(hpet_readl(HPET_ID));
 
        for_each_online_cpu(cpu) {