]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'timers/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 15 Jul 2008 17:39:57 +0000 (10:39 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 15 Jul 2008 17:39:57 +0000 (10:39 -0700)
* 'timers/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86: add PCI ID for 6300ESB force hpet
  x86: add another PCI ID for ICH6 force-hpet
  kernel-paramaters: document pmtmr= command line option
  acpi_pm clccksource: fix printk format warning
  nohz: don't stop idle tick if softirqs are pending.
  pmtmr: allow command line override of ioport
  nohz: reduce jiffies polling overhead
  hrtimer: Remove unused variables in ktime_divns()
  hrtimer: remove warning in hres_timers_resume
  posix-timers: print RT watchdog message

Documentation/kernel-parameters.txt
arch/x86/kernel/quirks.c
drivers/clocksource/acpi_pm.c
kernel/hrtimer.c
kernel/posix-cpu-timers.c
kernel/time/tick-sched.c

index 681d6152e003142695c5ec2eea97234a2fd5b694..4720f8ca211a1a61546cd07b7f5b7713dedd1c2b 100644 (file)
@@ -1612,6 +1612,10 @@ and is between 256 and 4096 characters. It is defined in the file
                        Format: { parport<nr> | timid | 0 }
                        See also Documentation/parport.txt.
 
+       pmtmr=          [X86] Manual setup of pmtmr I/O Port. 
+                       Override pmtimer IOPort with a hex value.
+                       e.g. pmtmr=0x508
+
        pnpacpi=        [ACPI]
                        { off }
 
index 79bdcd11c66e1b7c72220af7ee9ae388d1bebd20..d13858818100e6f35cb328bab4394dc00885d712 100644 (file)
@@ -266,6 +266,8 @@ static void old_ich_force_enable_hpet_user(struct pci_dev *dev)
                hpet_print_force_info();
 }
 
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1,
+                        old_ich_force_enable_hpet_user);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0,
                         old_ich_force_enable_hpet_user);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,
index 7b46faf22318c31f57072e73ae711d86afc7ba45..bcd7d0e429e86dff2fdd43fe192e44dfecb09e85 100644 (file)
@@ -215,3 +215,22 @@ pm_good:
  * but we still need to load before device_initcall
  */
 fs_initcall(init_acpi_pm_clocksource);
+
+/*
+ * Allow an override of the IOPort. Stupid BIOSes do not tell us about
+ * the PMTimer, but we might know where it is.
+ */
+static int __init parse_pmtmr(char *arg)
+{
+       unsigned long base;
+
+       if (strict_strtoul(arg, 16, &base))
+               return -EINVAL;
+
+       printk(KERN_INFO "PMTMR IOPort override: 0x%04x -> 0x%04x\n",
+              (unsigned int)pmtmr_ioport, base);
+       pmtmr_ioport = base;
+
+       return 1;
+}
+__setup("pmtmr=", parse_pmtmr);
index 27a83ee41443c7f192c830d857deacce7af6c508..2913a8bff612e8d571c618d88c4fd77a222006c3 100644 (file)
@@ -300,11 +300,10 @@ EXPORT_SYMBOL_GPL(ktime_sub_ns);
  */
 u64 ktime_divns(const ktime_t kt, s64 div)
 {
-       u64 dclc, inc, dns;
+       u64 dclc;
        int sft = 0;
 
-       dclc = dns = ktime_to_ns(kt);
-       inc = div;
+       dclc = ktime_to_ns(kt);
        /* Make sure the divisor is less than 2^32: */
        while (div >> 32) {
                sft++;
@@ -632,8 +631,6 @@ void clock_was_set(void)
  */
 void hres_timers_resume(void)
 {
-       WARN_ON_ONCE(num_online_cpus() > 1);
-
        /* Retrigger the CPU local events: */
        retrigger_next_event(NULL);
 }
index f1525ad06cb3ebbb83680b2bc0176854002217ca..c42a03aef36f07fd326eba959a90aa7bbe45dbd8 100644 (file)
@@ -1037,6 +1037,9 @@ static void check_thread_timers(struct task_struct *tsk,
                                sig->rlim[RLIMIT_RTTIME].rlim_cur +=
                                                                USEC_PER_SEC;
                        }
+                       printk(KERN_INFO
+                               "RT Watchdog Timeout: %s[%d]\n",
+                               tsk->comm, task_pid_nr(tsk));
                        __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
                }
        }
index d63008b09a4cee1cfc71b5e53e929b39312afff0..beef7ccdf842f3cea9994c19b879baa06f3e94f5 100644 (file)
@@ -48,6 +48,13 @@ static void tick_do_update_jiffies64(ktime_t now)
        unsigned long ticks = 0;
        ktime_t delta;
 
+       /*
+        * Do a quick check without holding xtime_lock:
+        */
+       delta = ktime_sub(now, last_jiffies_update);
+       if (delta.tv64 < tick_period.tv64)
+               return;
+
        /* Reevalute with xtime_lock held */
        write_seqlock(&xtime_lock);
 
@@ -228,6 +235,7 @@ void tick_nohz_stop_sched_tick(void)
                               local_softirq_pending());
                        ratelimit++;
                }
+               goto end;
        }
 
        ts->idle_calls++;