Jan Beulich
2008-Sep-19 13:10 UTC
[Xen-devel] [PATCH] x86: add hypercall to query current underlying pCPU''s frequency
Signed-off-by: Jan Beulich <jbeulich@novell.com> 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@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Sep-20 08:34 UTC
Re: [Xen-devel] [PATCH] x86: add hypercall to query current underlying pCPU''s frequency
I still consider this not a useful or informative operation. -- Keir On 19/9/08 14:10, "Jan Beulich" <jbeulich@novell.com> wrote:> Signed-off-by: Jan Beulich <jbeulich@novell.com> > > 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@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Tian, Kevin
2008-Sep-22 02:26 UTC
RE: [Xen-devel] [PATCH] x86: add hypercall to query current underlying pCPU''s frequency
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@novell.com> wrote: > >> Signed-off-by: Jan Beulich <jbeulich@novell.com> >> >> 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@lists.xensource.com >> http://lists.xensource.com/xen-devel > > > >_______________________________________________ >Xen-devel mailing list >Xen-devel@lists.xensource.com >http://lists.xensource.com/xen-devel >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Sep-22 07:04 UTC
Re: [Xen-devel] [PATCH] x86: add hypercall to query current underlying pCPU''s frequency
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@intel.com> 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@novell.com> wrote: >> >>> Signed-off-by: Jan Beulich <jbeulich@novell.com> >>> >>> 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@lists.xensource.com >>> http://lists.xensource.com/xen-devel >> >> >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com >> http://lists.xensource.com/xen-devel >>_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Tian, Kevin
2008-Sep-22 07:18 UTC
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@eu.citrix.com] >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@intel.com> 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@novell.com> wrote: >>> >>>> Signed-off-by: Jan Beulich <jbeulich@novell.com> >>>> >>>> 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@lists.xensource.com >>>> http://lists.xensource.com/xen-devel >>> >>> >>> >>> _______________________________________________ >>> Xen-devel mailing list >>> Xen-devel@lists.xensource.com >>> http://lists.xensource.com/xen-devel >>> > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2008-Sep-22 07:55 UTC
Re: [Xen-devel] [PATCH] x86: add hypercall to query currentunderlying pCPU''s frequency
Okay, in that case I''ll have to raise a general infra-structural question: If I''m convinced I/we want something like this for ease of use and consistency with the native kernel, how would I (generally) add (sub-)hypercalls to our Xen flavors without risking to ever collide with upstream? I''d consider something like using (reserving) the number space starting with e.g. ASCII ''NW'' (a traditional Novell prefix) in the upper 16 bits, but of course I''d want to have formal insurance that this range would actually remain reserved forever within each (sub-)hypercall ranges (and whatever else may use [pseudo-]enumerated values). Another alternative would obviously be to simply once again use an enumeration of interested parties, who would then have a certain number range globally (across all other [pseudo-]enumerations) reserved for their purposes, i.e. with the upper so-many bits set to that ''vendor'' enumerator. Jan>>> Keir Fraser <keir.fraser@eu.citrix.com> 20.09.08 10:34 >>>I still consider this not a useful or informative operation. -- Keir On 19/9/08 14:10, "Jan Beulich" <jbeulich@novell.com> wrote:> Signed-off-by: Jan Beulich <jbeulich@novell.com> > > 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@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Sep-22 08:47 UTC
Re: [Xen-devel] [PATCH] x86: add hypercall to query currentunderlying pCPU''s frequency
Well, I''m not personally against this, if used sensibly, but it sounds the sort of thing the Advisory Board would have to be asked about, since it could be considered to promote forking of the hypervisor interfaces. -- Keir On 22/9/08 08:55, "Jan Beulich" <jbeulich@novell.com> wrote:> Okay, in that case I''ll have to raise a general infra-structural question: If > I''m convinced I/we want something like this for ease of use and consistency > with the native kernel, how would I (generally) add (sub-)hypercalls to > our Xen flavors without risking to ever collide with upstream? I''d consider > something like using (reserving) the number space starting with e.g. ASCII > ''NW'' (a traditional Novell prefix) in the upper 16 bits, but of course I''d > want to have formal insurance that this range would actually remain > reserved forever within each (sub-)hypercall ranges (and whatever else > may use [pseudo-]enumerated values). > > Another alternative would obviously be to simply once again use an > enumeration of interested parties, who would then have a certain number > range globally (across all other [pseudo-]enumerations) reserved for their > purposes, i.e. with the upper so-many bits set to that ''vendor'' enumerator._______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2008-Sep-22 09:18 UTC
Re: [Xen-devel] [PATCH] x86: add hypercall to querycurrentunderlying pCPU''s frequency
What/who is the Advisory Board, and how would I forward the question to it/them? Jan>>> Keir Fraser <keir.fraser@eu.citrix.com> 22.09.08 10:47 >>>Well, I''m not personally against this, if used sensibly, but it sounds the sort of thing the Advisory Board would have to be asked about, since it could be considered to promote forking of the hypervisor interfaces. -- Keir On 22/9/08 08:55, "Jan Beulich" <jbeulich@novell.com> wrote:> Okay, in that case I''ll have to raise a general infra-structural question: If > I''m convinced I/we want something like this for ease of use and consistency > with the native kernel, how would I (generally) add (sub-)hypercalls to > our Xen flavors without risking to ever collide with upstream? I''d consider > something like using (reserving) the number space starting with e.g. ASCII > ''NW'' (a traditional Novell prefix) in the upper 16 bits, but of course I''d > want to have formal insurance that this range would actually remain > reserved forever within each (sub-)hypercall ranges (and whatever else > may use [pseudo-]enumerated values). > > Another alternative would obviously be to simply once again use an > enumeration of interested parties, who would then have a certain number > range globally (across all other [pseudo-]enumerations) reserved for their > purposes, i.e. with the upper so-many bits set to that ''vendor'' enumerator._______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Sep-22 09:24 UTC
Re: [Xen-devel] [PATCH] x86: add hypercall to querycurrentunderlying pCPU''s frequency
There''s a paragraph at: http://www.xen.org/community/ Since the AB is involved in managing the Xen trademark, and this would be a decision which is part of defining what Xen is, I think the decision rests with them. Their address is xen-advisory-board at same list server as xen-devel. Also Novell is a member: I think the contact is Holger Dyroff. -- Keir On 22/9/08 10:18, "Jan Beulich" <jbeulich@novell.com> wrote:> What/who is the Advisory Board, and how would I forward the question to > it/them? Jan > >>>> Keir Fraser <keir.fraser@eu.citrix.com> 22.09.08 10:47 >>> > Well, I''m not personally against this, if used sensibly, but it sounds the > sort of thing the Advisory Board would have to be asked about, since it > could be considered to promote forking of the hypervisor interfaces. > > -- Keir > > On 22/9/08 08:55, "Jan Beulich" <jbeulich@novell.com> wrote: > >> Okay, in that case I''ll have to raise a general infra-structural question: If >> I''m convinced I/we want something like this for ease of use and consistency >> with the native kernel, how would I (generally) add (sub-)hypercalls to >> our Xen flavors without risking to ever collide with upstream? I''d consider >> something like using (reserving) the number space starting with e.g. ASCII >> ''NW'' (a traditional Novell prefix) in the upper 16 bits, but of course I''d >> want to have formal insurance that this range would actually remain >> reserved forever within each (sub-)hypercall ranges (and whatever else >> may use [pseudo-]enumerated values). >> >> Another alternative would obviously be to simply once again use an >> enumeration of interested parties, who would then have a certain number >> range globally (across all other [pseudo-]enumerations) reserved for their >> purposes, i.e. with the upper so-many bits set to that ''vendor'' enumerator. > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Reasonably Related Threads
- [PATCH] x86: retrieve keyboard shift status flags from BIOS
- [PATCH][cpufreq] Xen support for the ondemand governor [1/2] (hypervisor code)
- help please - running a guest from an iSCSI disk ? getting more diagnostics than "cannot make domain: -3" ? how to make domain0 "privileged" ?
- [PATCH v2 0/5] ARM hypercall ABI: 64 bit ready
- [PATCH v3 0/6] ARM hypercall ABI: 64 bit ready