diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 4 | ||||
-rw-r--r-- | arch/x86/kernel/quirks.c | 2 | ||||
-rw-r--r-- | drivers/clocksource/acpi_pm.c | 19 | ||||
-rw-r--r-- | kernel/hrtimer.c | 7 | ||||
-rw-r--r-- | kernel/posix-cpu-timers.c | 3 | ||||
-rw-r--r-- | kernel/time/tick-sched.c | 8 |
6 files changed, 38 insertions, 5 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 681d6152e003..4720f8ca211a 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1612,6 +1612,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1612 | Format: { parport<nr> | timid | 0 } | 1612 | Format: { parport<nr> | timid | 0 } |
1613 | See also Documentation/parport.txt. | 1613 | See also Documentation/parport.txt. |
1614 | 1614 | ||
1615 | pmtmr= [X86] Manual setup of pmtmr I/O Port. | ||
1616 | Override pmtimer IOPort with a hex value. | ||
1617 | e.g. pmtmr=0x508 | ||
1618 | |||
1615 | pnpacpi= [ACPI] | 1619 | pnpacpi= [ACPI] |
1616 | { off } | 1620 | { off } |
1617 | 1621 | ||
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index 79bdcd11c66e..d13858818100 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c | |||
@@ -266,6 +266,8 @@ static void old_ich_force_enable_hpet_user(struct pci_dev *dev) | |||
266 | hpet_print_force_info(); | 266 | hpet_print_force_info(); |
267 | } | 267 | } |
268 | 268 | ||
269 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, | ||
270 | old_ich_force_enable_hpet_user); | ||
269 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, | 271 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, |
270 | old_ich_force_enable_hpet_user); | 272 | old_ich_force_enable_hpet_user); |
271 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, | 273 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, |
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index 7b46faf22318..bcd7d0e429e8 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c | |||
@@ -215,3 +215,22 @@ pm_good: | |||
215 | * but we still need to load before device_initcall | 215 | * but we still need to load before device_initcall |
216 | */ | 216 | */ |
217 | fs_initcall(init_acpi_pm_clocksource); | 217 | fs_initcall(init_acpi_pm_clocksource); |
218 | |||
219 | /* | ||
220 | * Allow an override of the IOPort. Stupid BIOSes do not tell us about | ||
221 | * the PMTimer, but we might know where it is. | ||
222 | */ | ||
223 | static int __init parse_pmtmr(char *arg) | ||
224 | { | ||
225 | unsigned long base; | ||
226 | |||
227 | if (strict_strtoul(arg, 16, &base)) | ||
228 | return -EINVAL; | ||
229 | |||
230 | printk(KERN_INFO "PMTMR IOPort override: 0x%04x -> 0x%04x\n", | ||
231 | (unsigned int)pmtmr_ioport, base); | ||
232 | pmtmr_ioport = base; | ||
233 | |||
234 | return 1; | ||
235 | } | ||
236 | __setup("pmtmr=", parse_pmtmr); | ||
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 27a83ee41443..2913a8bff612 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
@@ -300,11 +300,10 @@ EXPORT_SYMBOL_GPL(ktime_sub_ns); | |||
300 | */ | 300 | */ |
301 | u64 ktime_divns(const ktime_t kt, s64 div) | 301 | u64 ktime_divns(const ktime_t kt, s64 div) |
302 | { | 302 | { |
303 | u64 dclc, inc, dns; | 303 | u64 dclc; |
304 | int sft = 0; | 304 | int sft = 0; |
305 | 305 | ||
306 | dclc = dns = ktime_to_ns(kt); | 306 | dclc = ktime_to_ns(kt); |
307 | inc = div; | ||
308 | /* Make sure the divisor is less than 2^32: */ | 307 | /* Make sure the divisor is less than 2^32: */ |
309 | while (div >> 32) { | 308 | while (div >> 32) { |
310 | sft++; | 309 | sft++; |
@@ -632,8 +631,6 @@ void clock_was_set(void) | |||
632 | */ | 631 | */ |
633 | void hres_timers_resume(void) | 632 | void hres_timers_resume(void) |
634 | { | 633 | { |
635 | WARN_ON_ONCE(num_online_cpus() > 1); | ||
636 | |||
637 | /* Retrigger the CPU local events: */ | 634 | /* Retrigger the CPU local events: */ |
638 | retrigger_next_event(NULL); | 635 | retrigger_next_event(NULL); |
639 | } | 636 | } |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index f1525ad06cb3..c42a03aef36f 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
@@ -1037,6 +1037,9 @@ static void check_thread_timers(struct task_struct *tsk, | |||
1037 | sig->rlim[RLIMIT_RTTIME].rlim_cur += | 1037 | sig->rlim[RLIMIT_RTTIME].rlim_cur += |
1038 | USEC_PER_SEC; | 1038 | USEC_PER_SEC; |
1039 | } | 1039 | } |
1040 | printk(KERN_INFO | ||
1041 | "RT Watchdog Timeout: %s[%d]\n", | ||
1042 | tsk->comm, task_pid_nr(tsk)); | ||
1040 | __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); | 1043 | __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk); |
1041 | } | 1044 | } |
1042 | } | 1045 | } |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index d63008b09a4c..beef7ccdf842 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -48,6 +48,13 @@ static void tick_do_update_jiffies64(ktime_t now) | |||
48 | unsigned long ticks = 0; | 48 | unsigned long ticks = 0; |
49 | ktime_t delta; | 49 | ktime_t delta; |
50 | 50 | ||
51 | /* | ||
52 | * Do a quick check without holding xtime_lock: | ||
53 | */ | ||
54 | delta = ktime_sub(now, last_jiffies_update); | ||
55 | if (delta.tv64 < tick_period.tv64) | ||
56 | return; | ||
57 | |||
51 | /* Reevalute with xtime_lock held */ | 58 | /* Reevalute with xtime_lock held */ |
52 | write_seqlock(&xtime_lock); | 59 | write_seqlock(&xtime_lock); |
53 | 60 | ||
@@ -228,6 +235,7 @@ void tick_nohz_stop_sched_tick(void) | |||
228 | local_softirq_pending()); | 235 | local_softirq_pending()); |
229 | ratelimit++; | 236 | ratelimit++; |
230 | } | 237 | } |
238 | goto end; | ||
231 | } | 239 | } |
232 | 240 | ||
233 | ts->idle_calls++; | 241 | ts->idle_calls++; |