Re: [PATCH v2] Fix hardware IRQ time accounting problem.

Johannes Berg <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.ports.ppc64.devel,gmane.linux.usb.devel
Message-ID <[email protected]>
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);
signature.asc (application/pgp-signature, 828 B)
-----BEGIN PGP SIGNATURE-----
Comment: Johannes Berg (powerbook)

iQIVAwUAR1WDz6Vg1VMiehFYAQL+aA/8CiyAhKY2GYXc00a6+nxpZkFP6vtmP93u
S+3W4cG40mt1l++preI1GCOL6Hq2rF9uOrQ9Am9Gn4Krkre9GORwpqj2oxC5KfR1
hdNd17yhnh/EITol2qZOD6P6sy2GfDsRzN0dbxQsrAWXO0kOHtwiO+V3iEq/8usO
SUlxVOekpk39Gp/sVb2GwLxg4LVvRHWLhOvvEPdsmfAtPh09IuEv5V2Cruje0h9w
xRZfnIF1Jq1tULEWjM2W4WUK8nDNJ93IFRlyhZwyq7iwyvHmItKhxB+DpuVU9EUK
2mQRoIsGcb+ePTVCIEuIJilswigAMvDmtFpsdyQXTjxteVvt7nBLLlHKWzed49gv
JMiQErTbCFrHMGAHjhMFUpJ322NDfh1k1ZtMnnvxGWwVelf2XE7QXesHl2KJDD8n
1xBZOaxLOWy9xQQ+Lc3TFAMPBbZqkRlMhaUC61bEUPnJVe95PsXXSxz1EpXnjh4P
IMAFSxFM75dra72WaaRf6IhOhSqn5cVPEvXR0HNZvYW0RzHTCGW68jfWv1FQc9Nd
VAH4JFapwKXuvJNTh/T7vpqHBlppmOFIWMK24CBIjUCWHiZLI5mYucOYqhXBLq0n
J3VRKMHP0Z45SynuPpxv9PqA6iSuMRZzBz7X12EPCN7h3vZLtrpQHtYEdlToyMSM
2/q6VpqdMeE=
=DeGy
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.