[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] libxl/PCI: make "rdm=" parsing comply with documentation
commit df04e202c91a6e79199ecbaf53fbcc0a97ee522f Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Feb 27 15:44:41 2020 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Feb 27 15:44:41 2020 +0100 libxl/PCI: make "rdm=" parsing comply with documentation Documentation says "<RDM_RESERVATION_STRING> is a comma separated list of <KEY=VALUE> settings, from the following list". There's no mention of a specific order, yet so far the parsing logic did accept only strategy, then policy (and neither of the two omitted). Make "state" move - back to STATE_TYPE when finding a comma after having parsed the <VALUE> part of a setting, - to STATE_TERMINAL otherwise. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Wei Liu <wl@xxxxxxx> --- tools/libxl/libxlu_pci.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/tools/libxl/libxlu_pci.c b/tools/libxl/libxlu_pci.c index 2cd793d223..7947687661 100644 --- a/tools/libxl/libxlu_pci.c +++ b/tools/libxl/libxlu_pci.c @@ -194,9 +194,12 @@ int xlu_rdm_parse(XLU_Config *cfg, libxl_rdm_reserve *rdm, const char *str) switch(state) { case STATE_TYPE: if (*ptr == '=') { - state = STATE_RDM_STRATEGY; *ptr = '\0'; - if (strcmp(tok, "strategy")) { + if (!strcmp(tok, "strategy")) { + state = STATE_RDM_STRATEGY; + } else if (!strcmp(tok, "policy")) { + state = STATE_RESERVE_POLICY; + } else { XLU__PCI_ERR(cfg, "Unknown RDM state option: %s", tok); goto parse_error; } @@ -205,7 +208,7 @@ int xlu_rdm_parse(XLU_Config *cfg, libxl_rdm_reserve *rdm, const char *str) break; case STATE_RDM_STRATEGY: if (*ptr == '\0' || *ptr == ',') { - state = STATE_RESERVE_POLICY; + state = *ptr == ',' ? STATE_TYPE : STATE_TERMINAL; *ptr = '\0'; if (!strcmp(tok, "host")) { rdm->strategy = LIBXL_RDM_RESERVE_STRATEGY_HOST; @@ -217,19 +220,8 @@ int xlu_rdm_parse(XLU_Config *cfg, libxl_rdm_reserve *rdm, const char *str) } break; case STATE_RESERVE_POLICY: - if (*ptr == '=') { - state = STATE_OPTIONS_V; - *ptr = '\0'; - if (strcmp(tok, "policy")) { - XLU__PCI_ERR(cfg, "Unknown RDM property value: %s", tok); - goto parse_error; - } - tok = ptr + 1; - } - break; - case STATE_OPTIONS_V: if (*ptr == ',' || *ptr == '\0') { - state = STATE_TERMINAL; + state = *ptr == ',' ? STATE_TYPE : STATE_TERMINAL; *ptr = '\0'; if (!strcmp(tok, "strict")) { rdm->policy = LIBXL_RDM_RESERVE_POLICY_STRICT; -- 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 |