Skip to content
Permalink
Browse files
sched/cpuacct: Fix cpuacct charge
get_irq_regs only work for current running cpu, but the task, whose
cpuacct will be charged, maybe run different cpu, like Cpu 2 wake
up a kernel thread to CPU 3, cause CPU 3 task are charged with the
following stack

  cpuacct_charge+0xd8/0x100
  update_curr+0xe1/0x1e0
  enqueue_entity+0x144/0x6e0
  enqueue_task_fair+0x93/0x900
  ttwu_do_activate+0x4b/0x90
  try_to_wake_up+0x20b/0x530
  ? update_dl_rq_load_avg+0x10f/0x210
  swake_up_locked.part.1+0x13/0x40
  swake_up_one+0x27/0x40
  rcu_process_callbacks+0x484/0x4f0
  ? run_rebalance_domains_bt+0x5a/0x180
  __do_softirq+0xe3/0x308
  irq_exit+0xf0/0x100
  smp_apic_timer_interrupt+0x74/0x160
  apic_timer_interrupt+0xf/0x20
  </IRQ>
 RIP: 0033:0x456947

so define a get_irq_regs_cpu which returns the required cpu irq registers

BUT it should be not safe, and do not know what it should be like in MIPS?

Fixes: dbe9337 "(sched/cpuacct: Fix charge cpuacct.usage_sys)"
Co-developed-by: Zhao Jie <zhaojie17@baidu.com>
Signed-off-by: Zhao Jie <zhaojie17@baidu.com>
Signed-off-by: Li RongQing <lirongqing@baidu.com>
  • Loading branch information
lrq-max authored and intel-lab-lkp committed Jul 20, 2021
1 parent 1446237 commit b7cbc83d1da5b3b55713e72269c478683f02c4eb
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
@@ -21,6 +21,11 @@ static inline struct pt_regs *get_irq_regs(void)
return __this_cpu_read(__irq_regs);
}

static inline struct pt_regs *get_irq_regs_cpu(int cpu)
{
return per_cpu(__irq_regs, cpu);
}

static inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs)
{
struct pt_regs *old_regs;
@@ -340,7 +340,8 @@ void cpuacct_charge(struct task_struct *tsk, u64 cputime)
{
struct cpuacct *ca;
int index = CPUACCT_STAT_SYSTEM;
struct pt_regs *regs = get_irq_regs() ? : task_pt_regs(tsk);
int cpu = task_cpu(tsk);
struct pt_regs *regs = get_irq_regs_cpu(cpu) ? : task_pt_regs(tsk);

if (regs && user_mode(regs))
index = CPUACCT_STAT_USER;

0 comments on commit b7cbc83

Please sign in to comment.