diff options
Diffstat (limited to 'kernel/time/posix-cpu-timers.c')
| -rw-r--r-- | kernel/time/posix-cpu-timers.c | 13 | 
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index cb925e8ef9a8..2f5e9b34022c 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -243,13 +243,12 @@ static void proc_sample_cputime_atomic(struct task_cputime_atomic *at,   */  static inline void __update_gt_cputime(atomic64_t *cputime, u64 sum_cputime)  { -	u64 curr_cputime; -retry: -	curr_cputime = atomic64_read(cputime); -	if (sum_cputime > curr_cputime) { -		if (atomic64_cmpxchg(cputime, curr_cputime, sum_cputime) != curr_cputime) -			goto retry; -	} +	u64 curr_cputime = atomic64_read(cputime); + +	do { +		if (sum_cputime <= curr_cputime) +			return; +	} while (!atomic64_try_cmpxchg(cputime, &curr_cputime, sum_cputime));  }  static void update_gt_cputime(struct task_cputime_atomic *cputime_atomic,  | 
