From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH for-4.6 v2 7/8] python/xc: reinstate original implementation of next_bdf Date: Mon, 27 Jul 2015 18:45:08 +0100 Message-ID: <1438019109-31997-8-git-send-email-wei.liu2@citrix.com> References: <1438019109-31997-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZJmSm-0008D8-2P for xen-devel@lists.xenproject.org; Mon, 27 Jul 2015 17:45:20 +0000 In-Reply-To: <1438019109-31997-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: Wei Liu , Ian Jackson , Ian Campbell , Tiejun Chen List-Id: xen-devel@lists.xenproject.org I missed the fact that next_bdf is used to parsed user supplied strings when reviewing. The user supplied string is a NULL-terminated string separated by comma. User can supply several PCI devices in that string. There is, however, no delimiter for different devices, hence we can't change the syntax of that string. This patch reinstate the original implementation of next_bdf to preserve the original syntax. The last argument for xc_assign_device is always 0. Signed-off-by: Wei Liu --- Cc: Tiejun Chen Tiejun, are you actually using this python binding? I don't think we have in tree user. If nobody is using it, I propose we remove this binding in next release. I don't have live example of that string. My analysis is based on reverse-engineering of original code. --- tools/python/xen/lowlevel/xc/xc.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c index c8380d1..2c36eb2 100644 --- a/tools/python/xen/lowlevel/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -592,8 +592,7 @@ static int token_value(char *token) return strtol(token, NULL, 16); } -static int next_bdf(char **str, int *seg, int *bus, int *dev, int *func, - int *flag) +static int next_bdf(char **str, int *seg, int *bus, int *dev, int *func) { char *token; @@ -608,17 +607,8 @@ static int next_bdf(char **str, int *seg, int *bus, int *dev, int *func, *dev = token_value(token); token = strchr(token, ',') + 1; *func = token_value(token); - token = strchr(token, ',') + 1; - if ( token ) { - *flag = token_value(token); - *str = token + 1; - } - else - { - /* O means we take "strict" as our default policy. */ - *flag = 0; - *str = NULL; - } + token = strchr(token, ','); + *str = token ? token + 1 : NULL; return 1; } @@ -630,14 +620,14 @@ static PyObject *pyxc_test_assign_device(XcObject *self, uint32_t dom; char *pci_str; int32_t sbdf = 0; - int seg, bus, dev, func, flag; + int seg, bus, dev, func; static char *kwd_list[] = { "domid", "pci", NULL }; if ( !PyArg_ParseTupleAndKeywords(args, kwds, "is", kwd_list, &dom, &pci_str) ) return NULL; - while ( next_bdf(&pci_str, &seg, &bus, &dev, &func, &flag) ) + while ( next_bdf(&pci_str, &seg, &bus, &dev, &func) ) { sbdf = seg << 16; sbdf |= (bus & 0xff) << 8; @@ -663,21 +653,21 @@ static PyObject *pyxc_assign_device(XcObject *self, uint32_t dom; char *pci_str; int32_t sbdf = 0; - int seg, bus, dev, func, flag; + int seg, bus, dev, func; static char *kwd_list[] = { "domid", "pci", NULL }; if ( !PyArg_ParseTupleAndKeywords(args, kwds, "is", kwd_list, &dom, &pci_str) ) return NULL; - while ( next_bdf(&pci_str, &seg, &bus, &dev, &func, &flag) ) + while ( next_bdf(&pci_str, &seg, &bus, &dev, &func) ) { sbdf = seg << 16; sbdf |= (bus & 0xff) << 8; sbdf |= (dev & 0x1f) << 3; sbdf |= (func & 0x7); - if ( xc_assign_device(self->xc_handle, dom, sbdf, flag) != 0 ) + if ( xc_assign_device(self->xc_handle, dom, sbdf, 0) != 0 ) { if (errno == ENOSYS) sbdf = -1; @@ -696,14 +686,14 @@ static PyObject *pyxc_deassign_device(XcObject *self, uint32_t dom; char *pci_str; int32_t sbdf = 0; - int seg, bus, dev, func, flag; + int seg, bus, dev, func; static char *kwd_list[] = { "domid", "pci", NULL }; if ( !PyArg_ParseTupleAndKeywords(args, kwds, "is", kwd_list, &dom, &pci_str) ) return NULL; - while ( next_bdf(&pci_str, &seg, &bus, &dev, &func, &flag) ) + while ( next_bdf(&pci_str, &seg, &bus, &dev, &func) ) { sbdf = seg << 16; sbdf |= (bus & 0xff) << 8; -- 2.1.4