[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/3] tools/xen-cpuid: Rework the handling of dynamic featuresets
struct fsinfo is the vestigial remnant of an older internal design which didn't survive very long. Simplify things by inlining get_featureset() and having a single memory allocation that gets reused. This in turn changes featuresets[] to be a simple list of names, so rename it to fs_names[]. No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> CC: Wei Liu <wl@xxxxxxx> CC: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- tools/misc/xen-cpuid.c | 53 ++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/tools/misc/xen-cpuid.c b/tools/misc/xen-cpuid.c index 361102d8cfb1..227df7352e2b 100644 --- a/tools/misc/xen-cpuid.c +++ b/tools/misc/xen-cpuid.c @@ -246,16 +246,11 @@ static const struct { #define COL_ALIGN "18" -static struct fsinfo { - const char *name; - uint32_t len; - uint32_t *fs; -} featuresets[] = -{ - [XEN_SYSCTL_cpu_featureset_host] = { "Host", 0, NULL }, - [XEN_SYSCTL_cpu_featureset_raw] = { "Raw", 0, NULL }, - [XEN_SYSCTL_cpu_featureset_pv] = { "PV", 0, NULL }, - [XEN_SYSCTL_cpu_featureset_hvm] = { "HVM", 0, NULL }, +static const char *const fs_names[] = { + [XEN_SYSCTL_cpu_featureset_host] = "Host", + [XEN_SYSCTL_cpu_featureset_raw] = "Raw", + [XEN_SYSCTL_cpu_featureset_pv] = "PV", + [XEN_SYSCTL_cpu_featureset_hvm] = "HVM", }; static void dump_leaf(uint32_t leaf, const char *const *strs) @@ -302,22 +297,10 @@ static void decode_featureset(const uint32_t *features, } } -static int get_featureset(xc_interface *xch, unsigned int idx) -{ - struct fsinfo *f = &featuresets[idx]; - - f->len = nr_features; - f->fs = calloc(nr_features, sizeof(*f->fs)); - - if ( !f->fs ) - err(1, "calloc(, featureset)"); - - return xc_get_cpu_featureset(xch, idx, &f->len, f->fs); -} - static void dump_info(xc_interface *xch, bool detail) { unsigned int i; + uint32_t *fs; printf("nr_features: %u\n", nr_features); @@ -348,26 +331,34 @@ static void dump_info(xc_interface *xch, bool detail) nr_features, "HVM Hap Default", detail); printf("\nDynamic sets:\n"); - for ( i = 0; i < ARRAY_SIZE(featuresets); ++i ) + + fs = malloc(sizeof(*fs) * nr_features); + if ( !fs ) + err(1, "malloc(featureset)"); + + for ( i = 0; i < ARRAY_SIZE(fs_names); ++i ) { - if ( get_featureset(xch, i) ) + uint32_t len = nr_features; + int ret; + + memset(fs, 0, sizeof(*fs) * nr_features); + + ret = xc_get_cpu_featureset(xch, i, &len, fs); + if ( ret ) { if ( errno == EOPNOTSUPP ) { - printf("%s featureset not supported by Xen\n", - featuresets[i].name); + printf("%s featureset not supported by Xen\n", fs_names[i]); continue; } err(1, "xc_get_featureset()"); } - decode_featureset(featuresets[i].fs, featuresets[i].len, - featuresets[i].name, detail); + decode_featureset(fs, len, fs_names[i], detail); } - for ( i = 0; i < ARRAY_SIZE(featuresets); ++i ) - free(featuresets[i].fs); + free(fs); } static void print_policy(const char *name, -- 2.30.2
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |