[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: add platform hypercall to retrieve pCPU-s' family, model, and stepping
On 12/12/2011 15:32, "Jan Beulich" <JBeulich@xxxxxxxx> wrote: > With the recent hotplug changes to the Xen part of the microcode > loading, this allows the kernel driver to avoid unnecessary calls into > the hypervisor during pCPU hot-enabling: Knowing that the hypervisor > retains the data for already booted CPUs, only data for CPUs with a > different signature needs to be passed down. Since the microcode > loading code can be pretty verbose, avoiding to invoke it can make the > log much easier to look at in case of problems. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> > --- 2011-11-23.orig/xen/arch/x86/platform_hypercall.c 2011-12-01 > 12:06:55.000000000 +0100 > +++ 2011-11-23/xen/arch/x86/platform_hypercall.c 2011-12-09 17:39:04.000000000 > +0100 > @@ -469,6 +469,42 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe > } > break; > > + case XENPF_get_cpu_version: > + { > + struct xenpf_pcpu_version *ver = &op->u.pcpu_version; > + > + if ( !get_cpu_maps() ) > + { > + ret = -EBUSY; > + break; > + } > + > + if ( (ver->xen_cpuid >= nr_cpu_ids) || !cpu_online(ver->xen_cpuid) ) > + { > + memset(ver->vendor_id, 0, sizeof(ver->vendor_id)); > + ver->family = 0; > + ver->model = 0; > + ver->stepping = 0; > + } > + else > + { > + const struct cpuinfo_x86 *c = &cpu_data[ver->xen_cpuid]; > + > + memcpy(ver->vendor_id, c->x86_vendor_id, sizeof(ver->vendor_id)); > + ver->family = c->x86; > + ver->model = c->x86_model; > + ver->stepping = c->x86_mask; > + } > + > + ver->max_present = cpumask_last(&cpu_present_map); > + > + put_cpu_maps(); > + > + if ( copy_field_to_guest(u_xenpf_op, op, u.pcpu_version) ) > + ret = -EFAULT; > + } > + break; > + > case XENPF_cpu_online: > { > int cpu = op->u.cpu_ol.cpuid; > --- 2011-11-23.orig/xen/arch/x86/x86_64/platform_hypercall.c 2011-12-09 > 17:40:49.000000000 +0100 > +++ 2011-11-23/xen/arch/x86/x86_64/platform_hypercall.c 2011-12-01 > 16:04:28.000000000 +0100 > @@ -3,7 +3,7 @@ > */ > > #include <xen/config.h> > -#include <xen/types.h> > +#include <xen/lib.h> > #include <compat/platform.h> > > DEFINE_XEN_GUEST_HANDLE(compat_platform_op_t); > @@ -26,8 +26,13 @@ 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_pcpuinfo compat_pf_pcpuinfo > -#define xenpf_pcpuinfo_t compat_pf_pcpuinfo_t > +#define xen_pf_pcpuinfo xenpf_pcpuinfo > +CHECK_pf_pcpuinfo; > +#undef xen_pf_pcpuinfo > + > +#define xen_pf_pcpu_version xenpf_pcpu_version > +CHECK_pf_pcpu_version; > +#undef xen_pf_pcpu_version > > #define xenpf_enter_acpi_sleep compat_pf_enter_acpi_sleep > > --- 2011-11-23.orig/xen/include/public/platform.h 2011-12-09 > 17:40:49.000000000 +0100 > +++ 2011-11-23/xen/include/public/platform.h 2011-12-09 17:39:17.000000000 > +0100 > @@ -449,6 +449,21 @@ struct xenpf_pcpuinfo { > typedef struct xenpf_pcpuinfo xenpf_pcpuinfo_t; > DEFINE_XEN_GUEST_HANDLE(xenpf_pcpuinfo_t); > > +#define XENPF_get_cpu_version 48 > +struct xenpf_pcpu_version { > + /* IN */ > + uint32_t xen_cpuid; > + /* OUT */ > + /* The maxium cpu_id that is present */ > + uint32_t max_present; > + char vendor_id[12]; > + uint32_t family; > + uint32_t model; > + uint32_t stepping; > +}; > +typedef struct xenpf_pcpu_version xenpf_pcpu_version_t; > +DEFINE_XEN_GUEST_HANDLE(xenpf_pcpu_version_t); > + > #define XENPF_cpu_online 56 > #define XENPF_cpu_offline 57 > struct xenpf_cpu_ol > @@ -492,6 +507,7 @@ struct xen_platform_op { > struct xenpf_getidletime getidletime; > struct xenpf_set_processor_pminfo set_pminfo; > struct xenpf_pcpuinfo pcpu_info; > + struct xenpf_pcpu_version pcpu_version; > struct xenpf_cpu_ol cpu_ol; > struct xenpf_cpu_hotadd cpu_add; > struct xenpf_mem_hotadd mem_add; > --- 2011-11-23.orig/xen/include/xlat.lst 2011-12-09 17:40:49.000000000 +0100 > +++ 2011-11-23/xen/include/xlat.lst 2011-12-01 15:46:31.000000000 +0100 > @@ -72,6 +72,17 @@ > ? physdev_restore_msi physdev.h > ? physdev_set_iopl physdev.h > ? physdev_setup_gsi physdev.h > +! pct_register platform.h > +! power_register platform.h > +? processor_csd platform.h > +! processor_cx platform.h > +! processor_flags platform.h > +! processor_performance platform.h > +! processor_power platform.h > +? processor_px platform.h > +! psd_package platform.h > +? xenpf_pcpuinfo platform.h > +? xenpf_pcpu_version platform.h > ! sched_poll sched.h > ? sched_remote_shutdown sched.h > ? sched_shutdown sched.h > @@ -84,12 +95,3 @@ > ! vcpu_set_singleshot_timer vcpu.h > ? xenoprof_init xenoprof.h > ? xenoprof_passive xenoprof.h > -! power_register platform.h > -? processor_csd platform.h > -! processor_cx platform.h > -! processor_flags platform.h > -! processor_power platform.h > -! pct_register platform.h > -? processor_px platform.h > -! psd_package platform.h > -! processor_performance platform.h > > > _______________________________________________ > 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 |