Merge commit '900cfa46191a7d87cf1891924cb90499287fd235'; branches 'timers/nohz', 'timers/clocksource' and 'timers/posixtimers' into timers/for-linus
This commit is contained in:
commit
7dc9719682
|
@ -1571,6 +1571,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Format: { parport<nr> | timid | 0 }
|
Format: { parport<nr> | timid | 0 }
|
||||||
See also Documentation/parport.txt.
|
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]
|
pnpacpi= [ACPI]
|
||||||
{ off }
|
{ off }
|
||||||
|
|
||||||
|
|
|
@ -215,3 +215,22 @@ pm_good:
|
||||||
* but we still need to load before device_initcall
|
* but we still need to load before device_initcall
|
||||||
*/
|
*/
|
||||||
fs_initcall(init_acpi_pm_clocksource);
|
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);
|
||||||
|
|
|
@ -300,11 +300,10 @@ EXPORT_SYMBOL_GPL(ktime_sub_ns);
|
||||||
*/
|
*/
|
||||||
u64 ktime_divns(const ktime_t kt, s64 div)
|
u64 ktime_divns(const ktime_t kt, s64 div)
|
||||||
{
|
{
|
||||||
u64 dclc, inc, dns;
|
u64 dclc;
|
||||||
int sft = 0;
|
int sft = 0;
|
||||||
|
|
||||||
dclc = dns = ktime_to_ns(kt);
|
dclc = ktime_to_ns(kt);
|
||||||
inc = div;
|
|
||||||
/* Make sure the divisor is less than 2^32: */
|
/* Make sure the divisor is less than 2^32: */
|
||||||
while (div >> 32) {
|
while (div >> 32) {
|
||||||
sft++;
|
sft++;
|
||||||
|
@ -632,8 +631,6 @@ void clock_was_set(void)
|
||||||
*/
|
*/
|
||||||
void hres_timers_resume(void)
|
void hres_timers_resume(void)
|
||||||
{
|
{
|
||||||
WARN_ON_ONCE(num_online_cpus() > 1);
|
|
||||||
|
|
||||||
/* Retrigger the CPU local events: */
|
/* Retrigger the CPU local events: */
|
||||||
retrigger_next_event(NULL);
|
retrigger_next_event(NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1037,6 +1037,9 @@ static void check_thread_timers(struct task_struct *tsk,
|
||||||
sig->rlim[RLIMIT_RTTIME].rlim_cur +=
|
sig->rlim[RLIMIT_RTTIME].rlim_cur +=
|
||||||
USEC_PER_SEC;
|
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);
|
__group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,13 @@ static void tick_do_update_jiffies64(ktime_t now)
|
||||||
unsigned long ticks = 0;
|
unsigned long ticks = 0;
|
||||||
ktime_t delta;
|
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 */
|
/* Reevalute with xtime_lock held */
|
||||||
write_seqlock(&xtime_lock);
|
write_seqlock(&xtime_lock);
|
||||||
|
|
||||||
|
@ -228,6 +235,7 @@ void tick_nohz_stop_sched_tick(void)
|
||||||
local_softirq_pending());
|
local_softirq_pending());
|
||||||
ratelimit++;
|
ratelimit++;
|
||||||
}
|
}
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ts->idle_calls++;
|
ts->idle_calls++;
|
||||||
|
|
Loading…
Reference in New Issue