diff options
| -rw-r--r-- | Documentation/kernel-parameters.txt | 4 | ||||
| -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 |
5 files changed, 36 insertions, 5 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index b52f47d588b4..f22386321e7a 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -1571,6 +1571,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 1571 | Format: { parport<nr> | timid | 0 } | 1571 | Format: { parport<nr> | timid | 0 } |
| 1572 | See also Documentation/parport.txt. | 1572 | See also Documentation/parport.txt. |
| 1573 | 1573 | ||
| 1574 | pmtmr= [X86] Manual setup of pmtmr I/O Port. | ||
| 1575 | Override pmtimer IOPort with a hex value. | ||
| 1576 | e.g. pmtmr=0x508 | ||
| 1577 | |||
| 1574 | pnpacpi= [ACPI] | 1578 | pnpacpi= [ACPI] |
| 1575 | { off } | 1579 | { off } |
| 1576 | 1580 | ||
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 ab80515008f4..ffca825d24bc 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 b854a895591e..86baa4f0dfe4 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++; |
