]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
s390/vtime: Fix virtual timer forwarding
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 18 Feb 2026 14:20:05 +0000 (15:20 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Wed, 25 Feb 2026 15:46:07 +0000 (16:46 +0100)
Since delayed accounting of system time [1] the virtual timer is
forwarded by do_account_vtime() but also vtime_account_kernel(),
vtime_account_softirq(), and vtime_account_hardirq(). This leads
to double accounting of system, guest, softirq, and hardirq time.

Remove accounting from the vtime_account*() family to restore old behavior.

There is only one user of the vtimer interface, which might explain
why nobody noticed this so far.

Fixes: b7394a5f4ce9 ("sched/cputime, s390: Implement delayed accounting of system time") [1]
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>
arch/s390/kernel/vtime.c

index 234a0ba3051082b60986929864f5475a959b0f67..122d30b1044017fd20dfd61a123f0bbac6688928 100644 (file)
@@ -225,10 +225,6 @@ static u64 vtime_delta(void)
        return timer - lc->last_update_timer;
 }
 
-/*
- * Update process times based on virtual cpu times stored by entry.S
- * to the lowcore fields user_timer, system_timer & steal_clock.
- */
 void vtime_account_kernel(struct task_struct *tsk)
 {
        struct lowcore *lc = get_lowcore();
@@ -238,27 +234,17 @@ void vtime_account_kernel(struct task_struct *tsk)
                lc->guest_timer += delta;
        else
                lc->system_timer += delta;
-
-       virt_timer_forward(delta);
 }
 EXPORT_SYMBOL_GPL(vtime_account_kernel);
 
 void vtime_account_softirq(struct task_struct *tsk)
 {
-       u64 delta = vtime_delta();
-
-       get_lowcore()->softirq_timer += delta;
-
-       virt_timer_forward(delta);
+       get_lowcore()->softirq_timer += vtime_delta();
 }
 
 void vtime_account_hardirq(struct task_struct *tsk)
 {
-       u64 delta = vtime_delta();
-
-       get_lowcore()->hardirq_timer += delta;
-
-       virt_timer_forward(delta);
+       get_lowcore()->hardirq_timer += vtime_delta();
 }
 
 /*