| .. | .. |
|---|
| 138 | 138 | struct thread_info *ti = task_thread_info(tsk); |
|---|
| 139 | 139 | __u64 stime = vtime_delta(tsk); |
|---|
| 140 | 140 | |
|---|
| 141 | | - if (tsk->flags & PF_VCPU) |
|---|
| 141 | + if ((tsk->flags & PF_VCPU) && !irq_count()) |
|---|
| 142 | 142 | ti->gtime += stime; |
|---|
| 143 | + else if (hardirq_count()) |
|---|
| 144 | + ti->hardirq_time += stime; |
|---|
| 145 | + else if (in_serving_softirq()) |
|---|
| 146 | + ti->softirq_time += stime; |
|---|
| 143 | 147 | else |
|---|
| 144 | 148 | ti->stime += stime; |
|---|
| 145 | 149 | } |
|---|
| .. | .. |
|---|
| 150 | 154 | struct thread_info *ti = task_thread_info(tsk); |
|---|
| 151 | 155 | |
|---|
| 152 | 156 | ti->idle_time += vtime_delta(tsk); |
|---|
| 153 | | -} |
|---|
| 154 | | - |
|---|
| 155 | | -void vtime_account_softirq(struct task_struct *tsk) |
|---|
| 156 | | -{ |
|---|
| 157 | | - struct thread_info *ti = task_thread_info(tsk); |
|---|
| 158 | | - |
|---|
| 159 | | - ti->softirq_time += vtime_delta(tsk); |
|---|
| 160 | | -} |
|---|
| 161 | | - |
|---|
| 162 | | -void vtime_account_hardirq(struct task_struct *tsk) |
|---|
| 163 | | -{ |
|---|
| 164 | | - struct thread_info *ti = task_thread_info(tsk); |
|---|
| 165 | | - |
|---|
| 166 | | - ti->hardirq_time += vtime_delta(tsk); |
|---|
| 167 | 157 | } |
|---|
| 168 | 158 | |
|---|
| 169 | 159 | #endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */ |
|---|