From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH 5/5] xl: enable parser switch for both legacy and new cpuid parsers Date: Wed, 8 Sep 2010 11:24:14 +0200 Message-ID: <4C87563E.4060006@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060903080503060609040601" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Stefano Stabellini , Keir Fraser Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --------------060903080503060609040601 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit 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 AMD-Operating System Research Center (OSRC), Dresden, Germany Tel: +49 351 448-3567-12 --------------060903080503060609040601 Content-Type: text/x-patch; name="0005-xl-enable-parser-switch-for-both-legacy-and-new-cpui.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename*0="0005-xl-enable-parser-switch-for-both-legacy-and-new-cpui.pa"; filename*1="tch" >>From 40ed291421fa138a645605c7110fa9595c951e18 Mon Sep 17 00:00:00 2001 From: Andre Przywara 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 --- 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 --------------060903080503060609040601 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------060903080503060609040601--