[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: implementing legacy xm cpuid parser
# HG changeset patch # User Andre Przywara <andre.przywara@xxxxxxx> # Date 1285950061 -3600 # Node ID a8c72f5a6bce9c99fece480f4c8e5d19121674e5 # Parent 27c01a2e2a470f4650890d654d7fe052b6e2777c libxl: implementing legacy xm cpuid parser To support compatibility with the xm config files, add a parser for the old style cpuid= syntax. This uses a Python list, so it can be distinguished from the new syntax easily. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> committer: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> --- tools/libxl/libxl.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/libxl/libxl.h | 2 + 2 files changed, 62 insertions(+) diff -r 27c01a2e2a47 -r a8c72f5a6bce tools/libxl/libxl.c --- a/tools/libxl/libxl.c Fri Oct 01 17:20:41 2010 +0100 +++ b/tools/libxl/libxl.c Fri Oct 01 17:21:01 2010 +0100 @@ -3743,6 +3743,66 @@ int libxl_cpuid_parse_config(libxl_cpuid return 0; } +/* parse a single list item from the legacy Python xend syntax, where + * the strings for each register were directly exposed to the user. + * Used for maintaining compatibility with older config files + */ +int libxl_cpuid_parse_config_xend(libxl_cpuid_policy_list *cpuid, + const char* str) +{ + char *endptr; + unsigned long value; + uint32_t leaf, subleaf = XEN_CPUID_INPUT_UNUSED; + struct libxl__cpuid_policy *entry; + + /* parse the leaf number */ + value = strtoul(str, &endptr, 0); + if (str == endptr) { + return 1; + } + leaf = value; + /* check for an optional subleaf number */ + if (*endptr == ',') { + str = endptr + 1; + value = strtoul(str, &endptr, 0); + if (str == endptr) { + return 2; + } + subleaf = value; + } + if (*endptr != ':') { + return 3; + } + str = endptr + 1; + entry = cpuid_find_match(cpuid, leaf, subleaf); + for (str = endptr + 1; *str != 0;) { + if (str[0] != 'e' || str[2] != 'x') { + return 4; + } + value = str[1] - 'a'; + endptr = strchr(str, '='); + if (value < 0 || value > 3 || endptr == NULL) { + return 4; + } + str = endptr + 1; + endptr = strchr(str, ','); + if (endptr == NULL) { + endptr = strchr(str, 0); + } + if (endptr - str != 32) { + return 5; + } + entry->policy[value] = calloc(32 + 1, 1); + strncpy(entry->policy[value], str, 32); + entry->policy[value][32] = 0; + if (*endptr == 0) { + break; + } + for (str = endptr + 1; *str == ' ' || *str == '\n'; str++); + } + return 0; +} + char *libxl_tmem_list(libxl_ctx *ctx, uint32_t domid, int use_long) { int rc; diff -r 27c01a2e2a47 -r a8c72f5a6bce tools/libxl/libxl.h --- a/tools/libxl/libxl.h Fri Oct 01 17:20:41 2010 +0100 +++ b/tools/libxl/libxl.h Fri Oct 01 17:21:01 2010 +0100 @@ -412,6 +412,8 @@ int libxl_device_pci_list_assignable(lib int libxl_device_pci_list_assignable(libxl_ctx *ctx, libxl_device_pci **list, int *num); int libxl_device_pci_parse_bdf(libxl_ctx *ctx, libxl_device_pci *pcidev, const char *str); int libxl_cpuid_parse_config(libxl_cpuid_policy_list *cpuid, const char* str); +int libxl_cpuid_parse_config_xend(libxl_cpuid_policy_list *cpuid, + const char* str); /* * Functions for allowing users of libxl to store private data _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |