[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 2/3] x86/platform: introduce XENPF_get_ucode_version
On 21/03/2023 11:47 am, Sergey Dyasli wrote: > Currently it's impossible to get CPU's microcode revision after late > loading without looking into Xen logs which is not always convenient. It's not impossible (you can do `modprobe msr; rdmsr 0x8b`), but it is inconvenient for library code. > > Add a new platform op in order to get the required data from Xen and > provide a wrapper for libxenctrl. > > Signed-off-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> > --- > tools/include/xenctrl.h | 2 ++ > tools/libs/ctrl/xc_misc.c | 21 +++++++++++++++++ > xen/arch/x86/platform_hypercall.c | 30 ++++++++++++++++++++++++ > xen/arch/x86/x86_64/platform_hypercall.c | 4 ++++ > xen/include/public/platform.h | 12 ++++++++++ > xen/include/xlat.lst | 1 + > 6 files changed, 70 insertions(+) > > diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h > index 8aa747dc2e..d3ef7a48a5 100644 > --- a/tools/include/xenctrl.h > +++ b/tools/include/xenctrl.h > @@ -1187,6 +1187,8 @@ int xc_cputopoinfo(xc_interface *xch, unsigned > *max_cpus, > xc_cputopo_t *cputopo); > int xc_microcode_update(xc_interface *xch, const void *buf, size_t len); > int xc_get_cpu_version(xc_interface *xch, struct xenpf_pcpu_version > *cpu_ver); > +int xc_get_ucode_version(xc_interface *xch, > + struct xenpf_ucode_version *ucode_ver); Throughout, we should use "revision" rather than "version" as that is the terminology used by both Intel and AMD. > int xc_numainfo(xc_interface *xch, unsigned *max_nodes, > xc_meminfo_t *meminfo, uint32_t *distance); > int xc_pcitopoinfo(xc_interface *xch, unsigned num_devs, > diff --git a/tools/libs/ctrl/xc_misc.c b/tools/libs/ctrl/xc_misc.c > index f2f6e4348e..b93477d189 100644 > --- a/tools/libs/ctrl/xc_misc.c > +++ b/tools/libs/ctrl/xc_misc.c > @@ -246,6 +246,27 @@ int xc_get_cpu_version(xc_interface *xch, struct > xenpf_pcpu_version *cpu_ver) > return 0; > } > > +int xc_get_ucode_version(xc_interface *xch, > + struct xenpf_ucode_version *ucode_ver) > +{ > + int ret; > + DECLARE_PLATFORM_OP; > + > + if ( !xch || !ucode_ver ) > + return -1; > + > + platform_op.cmd = XENPF_get_ucode_version; > + platform_op.u.ucode_version.xen_cpuid = ucode_ver->xen_cpuid; Same notes as per patch 1. > diff --git a/xen/include/public/platform.h b/xen/include/public/platform.h > index 60caa5ce7e..232df79d5f 100644 > --- a/xen/include/public/platform.h > +++ b/xen/include/public/platform.h > @@ -614,6 +614,17 @@ DEFINE_XEN_GUEST_HANDLE(xenpf_symdata_t); > typedef struct dom0_vga_console_info xenpf_dom0_console_t; > DEFINE_XEN_GUEST_HANDLE(xenpf_dom0_console_t); > > +#define XENPF_get_ucode_version 65 > +struct xenpf_ucode_version { > + uint32_t xen_cpuid; /* IN: CPU number to get the revision from. > */ We commonly call this just "cpu". As a platform op pertaining to microcode, it cannot plausibly be confused with vcpus. > + uint32_t cpu_signature; /* OUT: CPU signature (CPUID.1.EAX). > */ The cpu_ prefix can be dropped, as can ... > + uint32_t pf; /* OUT: Processor Flags. > */ > + /* Only applicable to Intel. > */ > + uint32_t ucode_revision; /* OUT: Microcode Revision. > */ the ucode_ prefix here. I'm tempted to say that I'm happy to fix all of this on commit as it's all mechanical changes. ~Andrew
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |