[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] tools/libxc: Pre-cleanup for xc_cpuid_{set, apply_policy}()
commit 53b4a87a4c32507d9db2d35c77bafb32fc3e0900 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Tue Sep 10 16:59:20 2019 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Thu Sep 26 13:40:18 2019 +0100 tools/libxc: Pre-cleanup for xc_cpuid_{set,apply_policy}() This patch is broken out just to simplify the following two. For xc_cpuid_set(), document how the 's' and 'k' options works because it is quite subtle. Replace a memset() with a for loop of 4 explicit NULL assigments. This mirrors the free()'s in the fail path. For xc_cpuid_apply_policy(), const-ify the featureset pointer. It isn't written to, and was never intended to be mutable. Drop three pieces of trailing whitespace. No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Release-acked-by: Juergen Gross <jgross@xxxxxxxx> --- tools/libxc/include/xenctrl.h | 2 +- tools/libxc/xc_cpuid_x86.c | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index 0da437318e..f4431687b3 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -1800,7 +1800,7 @@ int xc_cpuid_set(xc_interface *xch, char **config_transformed); int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, - uint32_t *featureset, + const uint32_t *featureset, unsigned int nr_features); int xc_mca_op(xc_interface *xch, struct xen_mc *mc); int xc_mca_op_inject_v2(xc_interface *xch, unsigned int flags, diff --git a/tools/libxc/xc_cpuid_x86.c b/tools/libxc/xc_cpuid_x86.c index b7f1940900..226edc0c34 100644 --- a/tools/libxc/xc_cpuid_x86.c +++ b/tools/libxc/xc_cpuid_x86.c @@ -1,5 +1,5 @@ /****************************************************************************** - * xc_cpuid_x86.c + * xc_cpuid_x86.c * * Compute cpuid of a domain. * @@ -336,7 +336,7 @@ static void cpuid(const unsigned int *input, unsigned int *regs) static int get_cpuid_domain_info(xc_interface *xch, uint32_t domid, struct cpuid_domain_info *info, - uint32_t *featureset, + const uint32_t *featureset, unsigned int nr_features) { struct xen_domctl domctl = {}; @@ -824,8 +824,7 @@ static void sanitise_featureset(struct cpuid_domain_info *info) } int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, - uint32_t *featureset, - unsigned int nr_features) + const uint32_t *featureset, unsigned int nr_features) { struct cpuid_domain_info info = {}; unsigned int input[2] = { 0, 0 }, regs[4]; @@ -915,7 +914,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, * 'k' -> pass through host value * 's' -> pass through the first time and then keep the same value * across save/restore and migration. - * + * * For 's' and 'x' the configuration is overwritten with the value applied. */ int xc_cpuid_set( @@ -926,7 +925,8 @@ int xc_cpuid_set( unsigned int i, j, regs[4], polregs[4]; struct cpuid_domain_info info = {}; - memset(config_transformed, 0, 4 * sizeof(*config_transformed)); + for ( i = 0; i < 4; ++i ) + config_transformed[i] = NULL; rc = get_cpuid_domain_info(xch, domid, &info, NULL, 0); if ( rc ) @@ -944,7 +944,7 @@ int xc_cpuid_set( regs[i] = polregs[i]; continue; } - + config_transformed[i] = calloc(33, 1); /* 32 bits, NUL terminator. */ if ( config_transformed[i] == NULL ) { @@ -952,6 +952,13 @@ int xc_cpuid_set( goto fail; } + /* + * Notes for following this algorithm: + * + * While it will accept any leaf data, it only makes sense to use on + * feature leaves. regs[] initially contains the host values. This, + * with the fall-through chain, is how the 's' and 'k' options work. + */ for ( j = 0; j < 32; j++ ) { unsigned char val = !!((regs[i] & (1U << (31 - j)))); -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |