Skip to content

Commit e282ccd

Browse files
hcahcaVasily Gorbik
authored andcommitted
s390/vtime: Use __this_cpu_read() / get rid of READ_ONCE()
do_account_vtime() runs always with interrupts disabled, therefore use __this_cpu_read() instead of this_cpu_read() to get rid of a pointless preempt_disable() / preempt_enable() pair. Also there are no concurrent writers to the cpu time accounting fields in lowcore. Therefore get rid of READ_ONCE() usages. Reviewed-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
1 parent d8b5cf9 commit e282ccd

1 file changed

Lines changed: 7 additions & 14 deletions

File tree

arch/s390/kernel/vtime.c

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -137,23 +137,16 @@ static int do_account_vtime(struct task_struct *tsk)
137137
lc->system_timer += timer;
138138

139139
/* Update MT utilization calculation */
140-
if (smp_cpu_mtid &&
141-
time_after64(jiffies_64, this_cpu_read(mt_scaling_jiffies)))
140+
if (smp_cpu_mtid && time_after64(jiffies_64, __this_cpu_read(mt_scaling_jiffies)))
142141
update_mt_scaling();
143142

144143
/* Calculate cputime delta */
145-
user = update_tsk_timer(&tsk->thread.user_timer,
146-
READ_ONCE(lc->user_timer));
147-
guest = update_tsk_timer(&tsk->thread.guest_timer,
148-
READ_ONCE(lc->guest_timer));
149-
system = update_tsk_timer(&tsk->thread.system_timer,
150-
READ_ONCE(lc->system_timer));
151-
hardirq = update_tsk_timer(&tsk->thread.hardirq_timer,
152-
READ_ONCE(lc->hardirq_timer));
153-
softirq = update_tsk_timer(&tsk->thread.softirq_timer,
154-
READ_ONCE(lc->softirq_timer));
155-
lc->steal_timer +=
156-
clock - user - guest - system - hardirq - softirq;
144+
user = update_tsk_timer(&tsk->thread.user_timer, lc->user_timer);
145+
guest = update_tsk_timer(&tsk->thread.guest_timer, lc->guest_timer);
146+
system = update_tsk_timer(&tsk->thread.system_timer, lc->system_timer);
147+
hardirq = update_tsk_timer(&tsk->thread.hardirq_timer, lc->hardirq_timer);
148+
softirq = update_tsk_timer(&tsk->thread.softirq_timer, lc->softirq_timer);
149+
lc->steal_timer += clock - user - guest - system - hardirq - softirq;
157150

158151
/* Push account value */
159152
if (user) {

0 commit comments

Comments
 (0)