[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |