[dpdk-dev] [PATCH] scripts: enable extended tag of PCIe

Zhang, Helin helin.zhang at intel.com
Mon Mar 30 08:11:59 CEST 2015


Hi Patrick

Yes, good point!
I have a plan to implement writing pcie config space directly for i40e devices only, as pci config space accessing seems ready recently.
That time, the extended-tag will be enabled by default for i40e devices only. Thank you for the good suggestion!

Regards,
Helin

> -----Original Message-----
> From: Lu, Patrick
> Sent: Monday, March 30, 2015 1:31 PM
> To: Liu, Yong; Zhang, Helin; Thomas Monjalon
> Cc: dev at dpdk.org; Murugesan, AnbarasanX
> Subject: RE: [dpdk-dev] [PATCH] scripts: enable extended tag of PCIe
> 
> Hi Helin and Thomas,
> 
> Rather than an additional patch. Can we always enable extended tag in i40e
> driver? There is no negative impact for enabling extended tag. (Even on devices
> that don't support extended tag, the PCIe packet will simply ignore the bit and
> go on.)
> 
> Best,
> 
> Patrick
> 
> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Liu, Yong
> Sent: Tuesday, March 24, 2015 8:32 PM
> To: Zhang, Helin; Thomas Monjalon
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] scripts: enable extended tag of PCIe
> 
> Hi Helin,
> This patch look fine for me. Just need add some descriptions about the
> extended tag.
> If this script work only on FVL device, maybe it should be renamed like
> "set_fvl_extended_tag".
> 
> > -----Original Message-----
> > From: Zhang, Helin
> > Sent: Tuesday, March 24, 2015 9:08 AM
> > To: Thomas Monjalon; Liu, Yong
> > Cc: dev at dpdk.org; Butler, Siobhan A
> > Subject: RE: [dpdk-dev] [PATCH] scripts: enable extended tag of PCIe
> >
> > Hi Thomas
> >
> > Zhida is our intern who has already been back to university. I think
> > Yong might have reviewed it.
> > It is good supplementation for setting extended tag on Linux, though
> > not necessary. I am OK to have it merged or not. Thanks!
> >
> > Marvin, could you help to ack it, as I know you have reviewed it?
> >
> > Regards,
> > Helin
> >
> > > -----Original Message-----
> > > From: Thomas Monjalon [mailto:thomas.monjalon at 6wind.com]
> > > Sent: Monday, March 23, 2015 7:53 PM
> > > To: Zang, Zhida
> > > Cc: dev at dpdk.org; Butler, Siobhan A; Zhang, Helin
> > > Subject: Re: [dpdk-dev] [PATCH] scripts: enable extended tag of PCIe
> > >
> > > Hi,
> > >
> > > This patch needs review and documentation.
> > > It's going to be dropped if nobody cares.
> > >
> > > There were some previous discussions about it:
> > > 	http://dpdk.org/ml/archives/dev/2015-February/012708.html
> > >
> > >
> > > 2015-01-30 12:57, zhida zang:
> > > > As 'extended tag' of PCIe needs to be enabled for i40e high
> > > > performance, Linux command of 'setpci' can be used to check and
> > > > set the corresponding bit of 'extended tag' of PCIe configuration space.
> > > > The script is to check and set the right bit in PCIe configuration
> > space to
> > > enable 'extended tag'.
> > > >
> > > > Signed-off-by: Zhida Zang <zhida.zang at intel.com>
> > > > ---
> > > >  tools/set_pci.py | 124
> > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > >  1 file changed, 124 insertions(+)  create mode 100755
> > > > tools/set_pci.py
> > > >
> > > > diff --git a/tools/set_pci.py b/tools/set_pci.py new file mode
> > > > 100755 index 0000000..e242efb
> > > > --- /dev/null
> > > > +++ b/tools/set_pci.py
> > > > @@ -0,0 +1,124 @@
> > > > +#! /usr/bin/python
> > > > +import sys
> > > > +import os
> > > > +import subprocess
> > > > +import getopt
> > > > +from os.path import basename
> > > > +
> > > > +# The register to check if extended tag is supported or not.
> > > > +PCI_DEV_CAP_REG = 0xA4
> > > > +# The control register which contains the bit to enable/disable
> > 'extended
> > > tag'.
> > > > +PCI_DEV_CTRL_REG = 0xA8
> > > > +# The mask of 'extended tag' in capability register.
> > > > +PCI_DEV_CAP_EXT_TAG_MASK = 0x20
> > > > +# The mask of 'extended tag' in control register.
> > > > +PCI_DEV_CTRL_EXT_TAG_MASK = 0x100
> > > > +
> > > > +dev_ids = {}
> > > > +flag = "Set"
> > > > +
> > > > +
> > > > +def usage():
> > > > +    '''Print usage information for the program'''
> > > > +    argv0 = basename(sys.argv[0])
> > > > +    print """
> > > > +Usage:
> > > > +------
> > > > +
> > > > +    %(argv0)s [options] DEVICE1 DEVICE2 ....
> > > > +
> > > > +where DEVICE1, DEVICE2 etc, are specified via PCI
> > > > +"domain:bus:slot.func" syntax or "bus:slot.func" syntax. For
> > > > +devices bound to Linux kernel drivers, they may also be referred
> > > > +to by Linux
> > interface
> > > name e.g. eth0, eth1, em0, em1, etc.
> > > > +
> > > > +Options:
> > > > +    --help, --usage:
> > > > +        Display usage information and quit
> > > > +
> > > > +    -s --set:
> > > > +        Set the following pci device
> > > > +
> > > > +    -u --Unset:
> > > > +        Unset the following pci device
> > > > +
> > > > +Examples:
> > > > +---------
> > > > +To set pci 0a:00.0
> > > > +        %(argv0)s -s 0a:00.0
> > > > +        %(argv0)s --set 0a:00.0
> > > > +
> > > > +To unset 0000:01:00.0
> > > > +        %(argv0)s -u 0000:01:00.0
> > > > +        %(argv0)s --unset 0000:01:00.0
> > > > +
> > > > +To set 0000:02:00.0 and 0000:02:00.1
> > > > +        %(argv0)s -s 02:00.0 02:00.1
> > > > +
> > > > +    """ % locals()  # replace items from local variables
> > > > +
> > > > +
> > > > +def parse_args():
> > > > +    global flag
> > > > +    global dev_ids
> > > > +    if len(sys.argv) <= 1:
> > > > +        usage()
> > > > +        sys.exit(0)
> > > > +    try:
> > > > +        opts, dev_ids = getopt.getopt(
> > > > +            sys.argv[1:],
> > > > +            "su",
> > > > +            ["help", "usage", "set", "unset"]
> > > > +            )
> > > > +    except getopt.GetoptError, error:
> > > > +        print str(error)
> > > > +        print "Run '%s --usage' for further information" % sys.argv[0]
> > > > +        sys.exit(1)
> > > > +
> > > > +    for opt, arg in opts:
> > > > +        if opt == "--help" or opt == "--usage":
> > > > +            usage()
> > > > +            sys.exit(0)
> > > > +        if opt == "-s" or opt == "--set":
> > > > +            flag = "Set"
> > > > +        if opt == "-u" or opt == "--unset":
> > > > +            flag = "Unset"
> > > > +
> > > > +
> > > > +def check_output(args, stderr=None):
> > > > +    '''Run a command and capture its output'''
> > > > +    return subprocess.Popen(
> > > > +        args,
> > > > +        stdout=subprocess.PIPE,
> > > > +        stderr=stderr
> > > > +        ).communicate()[0]
> > > > +
> > > > +
> > > > +def set_pci():
> > > > +    if len(dev_ids) == 0:
> > > > +        print "Error: No devices specified."
> > > > +        print "Run '%s --usage' for further information" % sys.argv[0]
> > > > +        sys.exit(1)
> > > > +    param_cap = "%x.W" % PCI_DEV_CAP_REG
> > > > +    for k in range(len(dev_ids)):
> > > > +        val = check_output(["setpci", "-s", dev_ids[k], param_cap])
> > > > +        if (not (int(val, 16) & PCI_DEV_CAP_EXT_TAG_MASK)):
> > > > +            print dev_ids[k], "Not supported"
> > > > +            continue
> > > > +        if (int(val, 16) & PCI_DEV_CTRL_EXT_TAG_MASK):
> > > > +            continue
> > > > +        param_ctrl = "%x.W" % PCI_DEV_CTRL_REG
> > > > +        val = check_output(["setpci", "-s", dev_ids[k], param_ctrl])
> > > > +        if flag == "Set":
> > > > +            val = int(val, 16) | PCI_DEV_CTRL_EXT_TAG_MASK
> > > > +        else:
> > > > +            val = int(val, 16) & ~PCI_DEV_CTRL_EXT_TAG_MASK
> > > > +        param_ctrl = "%x.W=%x" % (PCI_DEV_CTRL_REG, val)
> > > > +        check_output(["setpci", "-s", dev_ids[k], param_ctrl])
> > > > +
> > > > +
> > > > +def main():
> > > > +    parse_args()
> > > > +    set_pci()
> > > > +
> > > > +if __name__ == "__main__":
> > > > +    main()
> > > >
> > >



More information about the dev mailing list