[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


  • To: Jan Beulich <JBeulich@xxxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxx>
  • From: Keir Fraser <keir@xxxxxxx>
  • Date: Fri, 10 Aug 2012 13:16:52 +0100
  • Delivery-date: Fri, 10 Aug 2012 12:17:18 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>
  • Thread-index: Ac128gYXlTWvhQV0EkKKQWS3sZ5o5g==
  • Thread-topic: [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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.