hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/arch/s390/kernel/vtime.c
....@@ -223,49 +223,34 @@
223223 S390_lowcore.avg_steal_timer = avg_steal;
224224 }
225225
226
-static u64 vtime_delta(void)
227
-{
228
- u64 timer = S390_lowcore.last_update_timer;
229
-
230
- S390_lowcore.last_update_timer = get_vtimer();
231
-
232
- return timer - S390_lowcore.last_update_timer;
233
-}
234
-
235226 /*
236227 * Update process times based on virtual cpu times stored by entry.S
237228 * to the lowcore fields user_timer, system_timer & steal_clock.
238229 */
239
-void vtime_account_kernel(struct task_struct *tsk)
230
+void vtime_account_irq_enter(struct task_struct *tsk)
240231 {
241
- u64 delta = vtime_delta();
232
+ u64 timer;
242233
243
- if (tsk->flags & PF_VCPU)
244
- S390_lowcore.guest_timer += delta;
234
+ timer = S390_lowcore.last_update_timer;
235
+ S390_lowcore.last_update_timer = get_vtimer();
236
+ timer -= S390_lowcore.last_update_timer;
237
+
238
+ if ((tsk->flags & PF_VCPU) && (irq_count() == 0))
239
+ S390_lowcore.guest_timer += timer;
240
+ else if (hardirq_count())
241
+ S390_lowcore.hardirq_timer += timer;
242
+ else if (in_serving_softirq())
243
+ S390_lowcore.softirq_timer += timer;
245244 else
246
- S390_lowcore.system_timer += delta;
245
+ S390_lowcore.system_timer += timer;
247246
248
- virt_timer_forward(delta);
247
+ virt_timer_forward(timer);
249248 }
249
+EXPORT_SYMBOL_GPL(vtime_account_irq_enter);
250
+
251
+void vtime_account_kernel(struct task_struct *tsk)
252
+__attribute__((alias("vtime_account_irq_enter")));
250253 EXPORT_SYMBOL_GPL(vtime_account_kernel);
251
-
252
-void vtime_account_softirq(struct task_struct *tsk)
253
-{
254
- u64 delta = vtime_delta();
255
-
256
- S390_lowcore.softirq_timer += delta;
257
-
258
- virt_timer_forward(delta);
259
-}
260
-
261
-void vtime_account_hardirq(struct task_struct *tsk)
262
-{
263
- u64 delta = vtime_delta();
264
-
265
- S390_lowcore.hardirq_timer += delta;
266
-
267
- virt_timer_forward(delta);
268
-}
269254
270255 /*
271256 * Sorted add to a list. List is linear searched until first bigger