[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 5/5] xl: enable parser switch for both legacy and new cpuid parsers
Allow parsing of both versions of cpuid syntax. This works automatically, as the parser can tell a Python list apart from a string before processing the line. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> -- Andre Przywara AMD-Operating System Research Center (OSRC), Dresden, Germany Tel: +49 351 448-3567-12 >From 40ed291421fa138a645605c7110fa9595c951e18 Mon Sep 17 00:00:00 2001 From: Andre Przywara <andre.przywara@xxxxxxx> Date: Mon, 6 Sep 2010 18:01:59 +0200 Subject: [PATCH 5/5] xl: enable parser switch for both legacy and new cpuid parsers allow parsing of both versions of cpuid syntax. This works automatically, as the parser can tell a Python list apart from a string before processing the line. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> --- tools/libxl/xl_cmdimpl.c | 76 +++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 68 insertions(+), 8 deletions(-) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 018e5b0..e7b9d74 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -574,7 +574,7 @@ static void parse_config_data(const char *configfile_filename_report, const char *buf; long l; XLU_Config *config; - XLU_ConfigList *vbds, *nics, *pcis, *cvfbs, *net2s; + XLU_ConfigList *vbds, *nics, *pcis, *cvfbs, *net2s, *cpuids; int pci_power_mgmt = 0; int pci_msitranslate = 1; int e; @@ -1015,14 +1015,74 @@ skip_vfb: } } - if (!xlu_cfg_get_string(config, "cpuid", &buf)) { - char *buf2, *p; + switch (xlu_cfg_get_type(config, "cpuid")) { + case XLU_CFG_LIST: + if (!xlu_cfg_get_list(config, "cpuid", &cpuids, 0)) { + int i; + char *errstr; - buf2 = strdup(buf); - p = strtok(buf2, ","); - for (p = strtok(NULL, ","); p != NULL; p = strtok(NULL, ",")) - libxl_cpuid_parse_config(&b_info->cpuid, p); - free(buf2); + for(i = 0; (buf = xlu_cfg_get_listitem (cpuids, i)) != NULL; i++) { + e = libxl_cpuid_parse_config_legacy(&b_info->cpuid, buf); + switch (e) { + case 0: continue; + case 1: + errstr = "illegal leaf number"; + break; + case 2: + errstr = "illegal subleaf number"; + break; + case 3: + errstr = "missing colon"; + break; + case 4: + errstr = "invalid register name (must be e[abcd]x)"; + break; + case 5: + errstr = "policy string must be exactly 32 characters long"; + break; + default: + errstr = "unknown error"; + break; + } + fprintf(stderr, "while parsing CPUID line: \"%s\":\n", buf); + fprintf(stderr, " error #%i: %s\n", e, errstr); + } + } + break; + case XLU_CFG_STRING: + if (!xlu_cfg_get_string(config, "cpuid", &buf)) { + char *buf2, *p, *errstr; + + buf2 = strdup(buf); + p = strtok(buf2, ","); + if (strcmp(p, "host")) { + fprintf(stderr, "first word in CPUID must be host\n"); + free(buf2); + break; + } + for (p = strtok(NULL, ","); p != NULL; p = strtok(NULL, ",")) { + e = libxl_cpuid_parse_config(&b_info->cpuid, p); + switch (e) { + case 0: continue; + case 1: + errstr = "missing \"=\" in key=value"; + break; + case 2: + errstr = "unknown CPUID flag name"; + break; + case 3: + errstr = "illegal CPUID value (must be: [0|1|x|k|s])"; + break; + default: + errstr = "unknown error"; + break; + } + fprintf(stderr, "while parsing CPUID flag: \"%s\":\n", p); + fprintf(stderr, " error #%i: %s\n", e, errstr); + } + free(buf2); + } + break; } if (c_info->hvm == 1) { -- 1.6.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |