diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-26 15:10:38 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-26 15:10:38 -0700 | 
| commit | 054319b5e255c0671012a5a89b344a7d55cda80c (patch) | |
| tree | 5f815e837eacb11504f19c00e155befcecdf0903 /kernel/posix-cpu-timers.c | |
| parent | 833961d81f0ece46b7884f988cc65509e2c49646 (diff) | |
| parent | 830ec0458c390f29c6c99e1ff7feab9e36368d12 (diff) | |
| download | olio-linux-3.10-054319b5e255c0671012a5a89b344a7d55cda80c.tar.xz olio-linux-3.10-054319b5e255c0671012a5a89b344a7d55cda80c.zip | |
Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  time: Fix accumulation bug triggered by long delay.
  posix-cpu-timers: Reset expire cache when no timer is running
  timer stats: Fix del_timer_sync() and try_to_del_timer_sync()
  clockevents: Sanitize min_delta_ns adjustment and prevent overflows
Diffstat (limited to 'kernel/posix-cpu-timers.c')
| -rw-r--r-- | kernel/posix-cpu-timers.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index 1a22dfd42df..bc7704b3a44 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c @@ -1061,9 +1061,9 @@ static void check_thread_timers(struct task_struct *tsk,  	}  } -static void stop_process_timers(struct task_struct *tsk) +static void stop_process_timers(struct signal_struct *sig)  { -	struct thread_group_cputimer *cputimer = &tsk->signal->cputimer; +	struct thread_group_cputimer *cputimer = &sig->cputimer;  	unsigned long flags;  	if (!cputimer->running) @@ -1072,6 +1072,10 @@ static void stop_process_timers(struct task_struct *tsk)  	spin_lock_irqsave(&cputimer->lock, flags);  	cputimer->running = 0;  	spin_unlock_irqrestore(&cputimer->lock, flags); + +	sig->cputime_expires.prof_exp = cputime_zero; +	sig->cputime_expires.virt_exp = cputime_zero; +	sig->cputime_expires.sched_exp = 0;  }  static u32 onecputick; @@ -1133,7 +1137,7 @@ static void check_process_timers(struct task_struct *tsk,  	    list_empty(&timers[CPUCLOCK_VIRT]) &&  	    cputime_eq(sig->it[CPUCLOCK_VIRT].expires, cputime_zero) &&  	    list_empty(&timers[CPUCLOCK_SCHED])) { -		stop_process_timers(tsk); +		stop_process_timers(sig);  		return;  	} |