[POWERPC] Fix hardware IRQ time accounting problem.
The commit fa13a5a1f2
(sched: restore
deterministic CPU accounting on powerpc), unconditionally calls
update_process_tick() in system context. In the deterministic
accounting case this is the correct thing to do. However, in the
non-deterministic accounting case we need to not do this, since doing
this results in the time accounted as hardware irq time being
artificially elevated.
Also this collapses 2 consecutive '#ifdef CONFIG_VIRT_CPU_ACCOUNTING'
checks in time.h into one for neatness.
Signed-off-by: Tony Breeds <tony@bakeyournoodle.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Родитель
7e1fb765c6
Коммит
81a3843f97
|
@ -350,7 +350,7 @@ struct task_struct *__switch_to(struct task_struct *prev,
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
account_system_vtime(current);
|
account_system_vtime(current);
|
||||||
account_process_tick(current, 0);
|
account_process_vtime(current);
|
||||||
calculate_steal_time();
|
calculate_steal_time();
|
||||||
|
|
||||||
last = _switch(old_thread, new_thread);
|
last = _switch(old_thread, new_thread);
|
||||||
|
|
|
@ -237,18 +237,14 @@ struct cpu_usage {
|
||||||
|
|
||||||
DECLARE_PER_CPU(struct cpu_usage, cpu_usage_array);
|
DECLARE_PER_CPU(struct cpu_usage, cpu_usage_array);
|
||||||
|
|
||||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
|
||||||
extern void account_process_vtime(struct task_struct *tsk);
|
|
||||||
#else
|
|
||||||
#define account_process_vtime(tsk) do { } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_VIRT_CPU_ACCOUNTING)
|
#if defined(CONFIG_VIRT_CPU_ACCOUNTING)
|
||||||
extern void calculate_steal_time(void);
|
extern void calculate_steal_time(void);
|
||||||
extern void snapshot_timebases(void);
|
extern void snapshot_timebases(void);
|
||||||
|
#define account_process_vtime(tsk) account_process_tick(tsk, 0)
|
||||||
#else
|
#else
|
||||||
#define calculate_steal_time() do { } while (0)
|
#define calculate_steal_time() do { } while (0)
|
||||||
#define snapshot_timebases() do { } while (0)
|
#define snapshot_timebases() do { } while (0)
|
||||||
|
#define account_process_vtime(tsk) do { } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void secondary_cpu_time_init(void);
|
extern void secondary_cpu_time_init(void);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче