From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Chen, Tiejun" Subject: Re: [PATCH for-4.6 v2 7/8] python/xc: reinstate original implementation of next_bdf Date: Tue, 28 Jul 2015 09:06:38 +0800 Message-ID: <55B6D59E.6010600@intel.com> References: <1438019109-31997-1-git-send-email-wei.liu2@citrix.com> <1438019109-31997-8-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZJtM2-0001iu-MN for xen-devel@lists.xenproject.org; Tue, 28 Jul 2015 01:06:50 +0000 In-Reply-To: <1438019109-31997-8-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: Wei Liu , Xen-devel Cc: Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org On 2015/7/28 1:45, Wei Liu wrote: > 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 This change is just following to RMRR series but currently we don't use this. So its fine if you think this don't break any other usages. Thanks Tiejun > 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; >