[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 2/5] x86: Refactor microcode_update() hypercall with flags
On 30.04.2024 14:47, Fouad Hilly wrote: > @@ -633,12 +637,12 @@ static long cf_check microcode_update_helper(void *data) > microcode_cache); > > if ( result != NEW_UCODE && > - !(opt_ucode_allow_same && result == SAME_UCODE) ) > + !((opt_ucode_allow_same || ucode_force_flag) && result == > SAME_UCODE) ) Why would "force" not also allow a downgrade? > @@ -708,11 +712,15 @@ static long cf_check microcode_update_helper(void *data) > return ret; > } > > -int microcode_update(XEN_GUEST_HANDLE(const_void) buf, unsigned long len) > +int microcode_update(XEN_GUEST_HANDLE(const_void) buf, > + unsigned long len, unsigned int flags) > { > int ret; > struct ucode_buf *buffer; > > + if ( flags > 1 ) How is one to connect this literal 1 with what is really meant here? Also would be nice if this check fit with other similar checks we do, i.e. if ( flags & ~XENPF_UCODE_FLAG_FORCE_SET ) > + return -EINVAL; > + > if ( len != (uint32_t)len ) > return -E2BIG; As an aside: Isn't this dead code, with the respective hypercall interface struct fields (now) both being uint32_t? > --- a/xen/arch/x86/platform_hypercall.c > +++ b/xen/arch/x86/platform_hypercall.c > @@ -311,7 +311,17 @@ ret_t do_platform_op( > > guest_from_compat_handle(data, op->u.microcode.data); > > - ret = microcode_update(data, op->u.microcode.length); > + ret = microcode_update(data, op->u.microcode.length, 0); > + break; > + } > + > + case XENPF_microcode_update2: > + { > + XEN_GUEST_HANDLE(const_void) data; > + > + guest_from_compat_handle(data, op->u.microcode2.data); > + > + ret = microcode_update(data, op->u.microcode2.length, > op->u.microcode2.flags); Nit (style): Overlong line. > --- a/xen/include/public/platform.h > +++ b/xen/include/public/platform.h > @@ -624,6 +624,19 @@ struct xenpf_ucode_revision { > typedef struct xenpf_ucode_revision xenpf_ucode_revision_t; > DEFINE_XEN_GUEST_HANDLE(xenpf_ucode_revision_t); > > +/* Hypercall to microcode_update with flags */ > +#define XENPF_microcode_update2 66 > +struct xenpf_microcode_update2 { > + /* IN variables. */ > + uint32_t flags; /* Flags to be passed with ucode. */ > +/* Force to skip microcode version check when set */ > +#define XENPF_UCODE_FLAG_FORCE_SET 1 Nit: What is "SET" in the identifier intended to mean? Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |