WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

RE: [Xen-devel] [PATCH] x86: add hypercall to query current underlying p

To: 'Keir Fraser' <keir.fraser@xxxxxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: RE: [Xen-devel] [PATCH] x86: add hypercall to query current underlying pCPU's frequency
From: "Tian, Kevin" <kevin.tian@xxxxxxxxx>
Date: Mon, 22 Sep 2008 15:18:06 +0800
Accept-language: en-US
Acceptlanguage: en-US
Cc: "Lu, Guanqun" <guanqun.lu@xxxxxxxxx>
Delivery-date: Mon, 22 Sep 2008 00:18:41 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <C4FD021F.1D650%keir.fraser@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <D8078B8B3B09934AA9F8F2D5FB3F28CE08873AF2B0@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> <C4FD021F.1D650%keir.fraser@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: Acka+6oe6M16pIbuEd2iEwAWy6hiGQBXkX0wAAnj0/MAAE4FUA==
Thread-topic: [Xen-devel] [PATCH] x86: add hypercall to query current underlying pCPU's frequency
1st version would be a simple dump to hypercall content, with
some proper calculations added. This at least gives people
immediate chance for a summary. Later we'll then extend to
xentrace.

Thanks,
Kevin

>From: Keir Fraser [mailto:keir.fraser@xxxxxxxxxxxxx]
>Sent: 2008年9月22日 15:05
>
>My guess is that Jan would like to export this via sysfs, and
>hence doesn't
>legitimately have access to domctl/sysctl. I don't agree with
>the overall
>motivation though. I prefer this 'lspm' utility and also
>integration with
>xentrace.
>
> -- Keir
>
>On 22/9/08 03:26, "Tian, Kevin" <kevin.tian@xxxxxxxxx> wrote:
>
>> Guanqun will make out a simple dom0 utility to the list
>> by utilizing sysctl this week. maybe call it 'lspm'.
>>
>> Thanks,
>> Kevin
>>
>>> From: Keir Fraser
>>> Sent: 2008年9月20日 16:34
>>>
>>> I still consider this not a useful or informative operation.
>>>
>>> -- Keir
>>>
>>> On 19/9/08 14:10, "Jan Beulich" <jbeulich@xxxxxxxxxx> wrote:
>>>
>>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
>>>>
>>>> Index: 2008-09-19/xen/arch/x86/platform_hypercall.c
>>>> ===================================================================
>>>> --- 2008-09-19.orig/xen/arch/x86/platform_hypercall.c 2008-09-19
>>>> 14:12:02.000000000 +0200
>>>> +++ 2008-09-19/xen/arch/x86/platform_hypercall.c 2008-09-19
>>> 14:12:56.000000000
>>>> +0200
>>>> @@ -21,7 +21,7 @@
>>>>  #include <xen/acpi.h>
>>>>  #include <asm/current.h>
>>>>  #include <public/platform.h>
>>>> -#include <acpi/cpufreq/processor_perf.h>
>>>> +#include <acpi/cpufreq/cpufreq.h>
>>>>  #include <asm/edd.h>
>>>>  #include <asm/mtrr.h>
>>>>  #include "cpu/mtrr/mtrr.h"
>>>> @@ -55,6 +55,7 @@ static long cpu_frequency_change_helper(
>>>>  ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t)
>u_xenpf_op)
>>>>  {
>>>>      ret_t ret = 0;
>>>> +    struct vcpu *v;
>>>>      struct xen_platform_op curop, *op = &curop;
>>>>
>>>>      if ( !IS_PRIV(current->domain) )
>>>> @@ -312,7 +313,6 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
>>>>      {
>>>>          uint32_t cpu;
>>>>          uint64_t idletime, now = NOW();
>>>> -        struct vcpu *v;
>>>>          struct xenctl_cpumap ctlmap;
>>>>          cpumask_t cpumap;
>>>>          XEN_GUEST_HANDLE(uint8) cpumap_bitmap;
>>>> @@ -482,6 +482,20 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
>>>>              break;
>>>>          }
>>>>          break;
>>>> +
>>>> +    case XENPF_get_cpu_freq:
>>>> +        if ( op->u.get_cpu_freq.vcpu >= MAX_VIRT_CPUS ||
>>>> +             !(v =
>current->domain->vcpu[op->u.get_cpu_freq.vcpu]) )
>>>> +        {
>>>> +            ret = -EINVAL;
>>>> +            break;
>>>> +        }
>>>> +
>>>> +        op->u.get_cpu_freq.freq =
>cpufreq_cpu_policy[v->processor] ?
>>>> +            cpufreq_cpu_policy[v->processor]->cur : 0;
>>>> +        if ( copy_field_to_guest(u_xenpf_op, op,
>>> u.get_cpu_freq.freq) )
>>>> +            ret = -EFAULT;
>>>> +        break;
>>>>
>>>>      default:
>>>>          ret = -ENOSYS;
>>>> Index: 2008-09-19/xen/arch/x86/x86_64/platform_hypercall.c
>>>> ===================================================================
>>>> --- 2008-09-19.orig/xen/arch/x86/x86_64/platform_hypercall.c
>>> 2008-09-19
>>>> 14:12:02.000000000 +0200
>>>> +++ 2008-09-19/xen/arch/x86/x86_64/platform_hypercall.c 2008-09-19
>>>> 13:59:35.000000000 +0200
>>>> @@ -21,6 +21,8 @@ DEFINE_XEN_GUEST_HANDLE(compat_platform_
>>>>  #define xen_processor_power_t   compat_processor_power_t
>>>>  #define set_cx_pminfo           compat_set_cx_pminfo
>>>>
>>>> +#define xenpf_get_cpu_freq      compat_pf_get_cpu_freq
>>>> +
>>>>  #define xenpf_enter_acpi_sleep compat_pf_enter_acpi_sleep
>>>>
>>>>  #define COMPAT
>>>> Index: 2008-09-19/xen/include/public/platform.h
>>>> ===================================================================
>>>> --- 2008-09-19.orig/xen/include/public/platform.h 2008-09-19
>>>> 14:12:02.000000000 +0200
>>>> +++ 2008-09-19/xen/include/public/platform.h 2008-09-19
>>> 13:59:35.000000000
>>>> +0200
>>>> @@ -312,6 +312,16 @@ struct xenpf_set_processor_pminfo {
>>>>  typedef struct xenpf_set_processor_pminfo
>>> xenpf_set_processor_pminfo_t;
>>>>  DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
>>>>
>>>> +#define XENPF_get_cpu_freq        55
>>>> +struct xenpf_get_cpu_freq {
>>>> +    /* IN variables */
>>>> +    uint32_t vcpu;
>>>> +    /* OUT variables */
>>>> +    uint32_t freq; /* in kHz */
>>>> +};
>>>> +typedef struct xenpf_get_cpu_freq xenpf_get_cpu_freq_t;
>>>> +DEFINE_XEN_GUEST_HANDLE(xenpf_get_cpu_freq_t);
>>>> +
>>>>  struct xen_platform_op {
>>>>      uint32_t cmd;
>>>>      uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
>>>> @@ -327,6 +337,7 @@ struct xen_platform_op {
>>>>          struct xenpf_change_freq       change_freq;
>>>>          struct xenpf_getidletime       getidletime;
>>>>          struct xenpf_set_processor_pminfo set_pminfo;
>>>> +        struct xenpf_get_cpu_freq      get_cpu_freq;
>>>>          uint8_t                        pad[128];
>>>>      } u;
>>>>  };
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Xen-devel mailing list
>>>> Xen-devel@xxxxxxxxxxxxxxxxxxx
>>>> http://lists.xensource.com/xen-devel
>>>
>>>
>>>
>>> _______________________________________________
>>> Xen-devel mailing list
>>> Xen-devel@xxxxxxxxxxxxxxxxxxx
>>> http://lists.xensource.com/xen-devel
>>>
>
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel