|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/cpuidle: clean up statistics reporting to user mode
On 09/08/2012 16:07, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:
> First of all, when no ACPI Cx data was reported, make sure the usage
> count passed back to user mode is not random.
>
> Besides that, fold a lot of redundant code.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
I don;t know a great deal about this code, but this looks good to me, so for
what it's worth you can have my ack.
Acked-by: Keir Fraser <keir@xxxxxxx>
> --- a/xen/arch/x86/acpi/cpu_idle.c
> +++ b/xen/arch/x86/acpi/cpu_idle.c
> @@ -1100,36 +1100,23 @@ int pmstat_get_cx_stat(uint32_t cpuid, s
> }
>
> stat->last = power->last_state ? power->last_state->idx : 0;
> - stat->nr = power->count;
> stat->idle_time = get_cpu_idle_time(cpuid);
>
> /* mimic the stat when detail info hasn't been registered by dom0 */
> if ( pm_idle_save == NULL )
> {
> - /* C1 */
> - usage[1] = 1;
> - res[1] = stat->idle_time;
> -
> - /* C0 */
> - res[0] = NOW() - res[1];
> -
> - if ( copy_to_guest_offset(stat->triggers, 0, &usage[0], 2) ||
> - copy_to_guest_offset(stat->residencies, 0, &res[0], 2) )
> - return -EFAULT;
> -
> - stat->pc2 = 0;
> - stat->pc3 = 0;
> - stat->pc6 = 0;
> - stat->pc7 = 0;
> - stat->cc3 = 0;
> - stat->cc6 = 0;
> - stat->cc7 = 0;
> - return 0;
> - }
> + stat->nr = 2;
> +
> + usage[1] = idle_usage = 1;
> + res[1] = idle_res = stat->idle_time;
>
> - for ( i = power->count - 1; i >= 0; i-- )
> + memset(&hw_res, 0, sizeof(hw_res));
> + }
> + else
> {
> - if ( i != 0 )
> + stat->nr = power->count;
> +
> + for ( i = 1; i < power->count; i++ )
> {
> spin_lock_irq(&power->stat_lock);
> usage[i] = power->states[i].usage;
> @@ -1139,18 +1126,16 @@ int pmstat_get_cx_stat(uint32_t cpuid, s
> idle_usage += usage[i];
> idle_res += res[i];
> }
> - else
> - {
> - usage[i] = idle_usage;
> - res[i] = NOW() - idle_res;
> - }
> +
> + get_hw_residencies(cpuid, &hw_res);
> }
>
> - if ( copy_to_guest_offset(stat->triggers, 0, &usage[0], power->count) ||
> - copy_to_guest_offset(stat->residencies, 0, &res[0], power->count) )
> - return -EFAULT;
> + usage[0] = idle_usage;
> + res[0] = NOW() - idle_res;
>
> - get_hw_residencies(cpuid, &hw_res);
> + if ( copy_to_guest(stat->triggers, usage, stat->nr) ||
> + copy_to_guest(stat->residencies, res, stat->nr) )
> + return -EFAULT;
>
> stat->pc2 = hw_res.pc2;
> stat->pc3 = hw_res.pc3;
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |