File xsa435-0-19.patch of Package xen.32199
From 21e3ef57e0406b6b9a783f721f29df8f91a00f99 Mon Sep 17 00:00:00 2001
From: Andrew Cooper <andrew.cooper3@citrix.com>
Date: Tue, 28 Mar 2023 20:48:29 +0100
Subject: x86: Rename {domctl,sysctl}.cpu_policy.{cpuid,msr}_policy fields
These weren't great names to begin with, and using {leaves,msrs} matches up
better with the existing nr_{leaves,msr} parameters anyway.
Furthermore, by renaming these fields we can get away with using some #define
trickery to avoid the struct {cpuid,msr}_policy merge needing to happen in a
single changeset.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
(cherry picked from commit 21e3ef57e0406b6b9a783f721f29df8f91a00f99)
xen: Correct comments after renaming xen_{dom,sys}ctl_cpu_policy fields
Fixes: 21e3ef57e040 ("x86: Rename {domctl,sysctl}.cpu_policy.{cpuid,msr}_policy fields")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
(cherry picked from commit 6e06d229d538ea51b92dc189546c522f5e903511)
--- a/tools/libxc/xc_cpuid_x86.c
+++ b/tools/libxc/xc_cpuid_x86.c
@@ -168,9 +168,9 @@ int xc_get_system_cpu_policy(xc_interfac
sysctl.cmd = XEN_SYSCTL_get_cpu_policy;
sysctl.u.cpu_policy.index = index;
sysctl.u.cpu_policy.nr_leaves = *nr_leaves;
- set_xen_guest_handle(sysctl.u.cpu_policy.cpuid_policy, leaves);
+ set_xen_guest_handle(sysctl.u.cpu_policy.leaves, leaves);
sysctl.u.cpu_policy.nr_msrs = *nr_msrs;
- set_xen_guest_handle(sysctl.u.cpu_policy.msr_policy, msrs);
+ set_xen_guest_handle(sysctl.u.cpu_policy.msrs, msrs);
ret = do_sysctl(xch, &sysctl);
@@ -206,9 +206,9 @@ int xc_get_domain_cpu_policy(xc_interfac
domctl.cmd = XEN_DOMCTL_get_cpu_policy;
domctl.domain = domid;
domctl.u.cpu_policy.nr_leaves = *nr_leaves;
- set_xen_guest_handle(domctl.u.cpu_policy.cpuid_policy, leaves);
+ set_xen_guest_handle(domctl.u.cpu_policy.leaves, leaves);
domctl.u.cpu_policy.nr_msrs = *nr_msrs;
- set_xen_guest_handle(domctl.u.cpu_policy.msr_policy, msrs);
+ set_xen_guest_handle(domctl.u.cpu_policy.msrs, msrs);
ret = do_domctl(xch, &domctl);
@@ -255,9 +255,9 @@ int xc_set_domain_cpu_policy(xc_interfac
domctl.cmd = XEN_DOMCTL_set_cpu_policy;
domctl.domain = domid;
domctl.u.cpu_policy.nr_leaves = nr_leaves;
- set_xen_guest_handle(domctl.u.cpu_policy.cpuid_policy, leaves);
+ set_xen_guest_handle(domctl.u.cpu_policy.leaves, leaves);
domctl.u.cpu_policy.nr_msrs = nr_msrs;
- set_xen_guest_handle(domctl.u.cpu_policy.msr_policy, msrs);
+ set_xen_guest_handle(domctl.u.cpu_policy.msrs, msrs);
domctl.u.cpu_policy.err_leaf = -1;
domctl.u.cpu_policy.err_subleaf = -1;
domctl.u.cpu_policy.err_msr = -1;
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -230,10 +230,10 @@ static int update_domain_cpu_policy(stru
/* Merge the toolstack provided data. */
if ( (ret = x86_cpuid_copy_from_buffer(
- new.cpuid, xdpc->cpuid_policy, xdpc->nr_leaves,
+ new.cpuid, xdpc->leaves, xdpc->nr_leaves,
&err.leaf, &err.subleaf)) ||
(ret = x86_msr_copy_from_buffer(
- new.msr, xdpc->msr_policy, xdpc->nr_msrs, &err.msr)) )
+ new.msr, xdpc->msrs, xdpc->nr_msrs, &err.msr)) )
goto out;
/* Trim any newly-stale out-of-range leaves. */
@@ -1441,20 +1441,20 @@ long arch_do_domctl(
case XEN_DOMCTL_get_cpu_policy:
/* Process the CPUID leaves. */
- if ( guest_handle_is_null(domctl->u.cpu_policy.cpuid_policy) )
+ if ( guest_handle_is_null(domctl->u.cpu_policy.leaves) )
domctl->u.cpu_policy.nr_leaves = CPUID_MAX_SERIALISED_LEAVES;
else if ( (ret = x86_cpuid_copy_to_buffer(
d->arch.cpuid,
- domctl->u.cpu_policy.cpuid_policy,
+ domctl->u.cpu_policy.leaves,
&domctl->u.cpu_policy.nr_leaves)) )
break;
/* Process the MSR entries. */
- if ( guest_handle_is_null(domctl->u.cpu_policy.msr_policy) )
+ if ( guest_handle_is_null(domctl->u.cpu_policy.msrs) )
domctl->u.cpu_policy.nr_msrs = MSR_MAX_SERIALISED_ENTRIES;
else if ( (ret = x86_msr_copy_to_buffer(
d->arch.msr,
- domctl->u.cpu_policy.msr_policy,
+ domctl->u.cpu_policy.msrs,
&domctl->u.cpu_policy.nr_msrs)) )
break;
--- a/xen/arch/x86/sysctl.c
+++ b/xen/arch/x86/sysctl.c
@@ -429,11 +429,11 @@ long arch_do_sysctl(
ARRAY_SIZE(system_policies))];
/* Process the CPUID leaves. */
- if ( guest_handle_is_null(sysctl->u.cpu_policy.cpuid_policy) )
+ if ( guest_handle_is_null(sysctl->u.cpu_policy.leaves) )
sysctl->u.cpu_policy.nr_leaves = CPUID_MAX_SERIALISED_LEAVES;
else if ( (ret = x86_cpuid_copy_to_buffer(
policy->cpuid,
- sysctl->u.cpu_policy.cpuid_policy,
+ sysctl->u.cpu_policy.leaves,
&sysctl->u.cpu_policy.nr_leaves)) )
break;
@@ -445,11 +445,11 @@ long arch_do_sysctl(
}
/* Process the MSR entries. */
- if ( guest_handle_is_null(sysctl->u.cpu_policy.msr_policy) )
+ if ( guest_handle_is_null(sysctl->u.cpu_policy.msrs) )
sysctl->u.cpu_policy.nr_msrs = MSR_MAX_SERIALISED_ENTRIES;
else if ( (ret = x86_msr_copy_to_buffer(
policy->msr,
- sysctl->u.cpu_policy.msr_policy,
+ sysctl->u.cpu_policy.msrs,
&sysctl->u.cpu_policy.nr_msrs)) )
break;
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -672,12 +672,10 @@ struct xen_domctl_set_target {
* Query or set the CPUID and MSR policies for a specific domain.
*/
struct xen_domctl_cpu_policy {
- uint32_t nr_leaves; /* IN/OUT: Number of leaves in/written to
- * 'cpuid_policy'. */
- uint32_t nr_msrs; /* IN/OUT: Number of MSRs in/written to
- * 'msr_domain_policy' */
- XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_policy; /* IN/OUT */
- XEN_GUEST_HANDLE_64(xen_msr_entry_t) msr_policy; /* IN/OUT */
+ uint32_t nr_leaves; /* IN/OUT: Number of leaves in/written to 'leaves' */
+ uint32_t nr_msrs; /* IN/OUT: Number of MSRs in/written to 'msrs' */
+ XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) leaves; /* IN/OUT */
+ XEN_GUEST_HANDLE_64(xen_msr_entry_t) msrs; /* IN/OUT */
/*
* OUT, set_policy only. Written in some (but not all) error cases to
--- a/xen/include/public/sysctl.h
+++ b/xen/include/public/sysctl.h
@@ -1021,15 +1021,13 @@ struct xen_sysctl_cpu_policy {
#define XEN_SYSCTL_cpu_policy_pv_default 4
#define XEN_SYSCTL_cpu_policy_hvm_default 5
uint32_t index; /* IN: Which policy to query? */
- uint32_t nr_leaves; /* IN/OUT: Number of leaves in/written to
- * 'cpuid_policy', or the maximum number of leaves
- * if the guest handle is NULL. */
- uint32_t nr_msrs; /* IN/OUT: Number of MSRs in/written to
- * 'msr_policy', or the maximum number of MSRs if
- * the guest handle is NULL. */
+ uint32_t nr_leaves; /* IN/OUT: Number of leaves in/written to 'leaves',
+ * or the max number if 'leaves' is NULL. */
+ uint32_t nr_msrs; /* IN/OUT: Number of MSRs in/written to 'msrs', or
+ * the max number of if 'msrs' is NULL. */
uint32_t _rsvd; /* Must be zero. */
- XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_policy; /* OUT */
- XEN_GUEST_HANDLE_64(xen_msr_entry_t) msr_policy; /* OUT */
+ XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) leaves; /* OUT */
+ XEN_GUEST_HANDLE_64(xen_msr_entry_t) msrs; /* OUT */
};
typedef struct xen_sysctl_cpu_policy xen_sysctl_cpu_policy_t;
DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpu_policy_t);