On Tue, 2007-12-04 at 16:51 +1100, Tony Breeds wrote: > The commit fa13a5a1f25f671d084d8884be96fc48d9b68275 (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, and results in the time accounted as hardware irq > time being artificially elevated. Cool, I wouldn't have stood a chance of tracking this down :) Thanks, I'll apply it to my testing tree later today. > Signed-off-by: Tony Breeds <[email protected]> > --- > The problem was seen and reported by Johannes Berg and Frederik Himpe. > Paul, I think this is good for 2.6.24. > > Changes since v1: > - I noticed that the #define was explictly using "current" rather than > the task passed in. Using tsk is the right thing to do. > - The whiteapce changes dirty-up the patch and are un-needed with the > change above. > > arch/powerpc/kernel/process.c | 2 +- > include/asm-powerpc/time.h | 8 ++------ > 2 files changed, 3 insertions(+), 7 deletions(-) > > diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c > index 41e13f4..b9d8837 100644 > --- a/arch/powerpc/kernel/process.c > +++ b/arch/powerpc/kernel/process.c > @@ -350,7 +350,7 @@ struct task_struct *__switch_to(struct task_struct *prev, > local_irq_save(flags); > > account_system_vtime(current); > - account_process_tick(current, 0); > + account_process_vtime(current); > calculate_steal_time(); > > last = _switch(old_thread, new_thread); > diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h > index 780f826..a7281e0 100644 > --- a/include/asm-powerpc/time.h > +++ b/include/asm-powerpc/time.h > @@ -237,18 +237,14 @@ struct cpu_usage { > > 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) > extern void calculate_steal_time(void); > extern void snapshot_timebases(void); > +#define account_process_vtime(tsk) account_process_tick(tsk, 0); > #else > #define calculate_steal_time() do { } while (0) > #define snapshot_timebases() do { } while (0) > +#define account_process_vtime(tsk) do { } while (0) > #endif > > extern void secondary_cpu_time_init(void);
Attachment:
signature.asc
Description: This is a digitally signed message part
- References:
- [PATCH v2] Fix hardware IRQ time accounting problem.
- From: Tony Breeds <[email protected]>
- [PATCH v2] Fix hardware IRQ time accounting problem.
- Prev by Date: Re: [PATCH] VM/Security: add security hook to do_brk
- Next by Date: Re: [Bug 9246] On 2.6.24-rc1-gc9927c2b BUG: unable to handle kernel paging request at virtual address 3d15b925
- Previous by thread: [PATCH v2] Fix hardware IRQ time accounting problem.
- Next by thread: Re: [PATCH v2] Fix hardware IRQ time accounting problem.
- Index(es):