* [dpdk-dev] [PATCH] usertools/dpdk-devbind: add support for PCI wildcards @ 2020-08-20 12:23 Bruce Richardson 2020-08-20 14:44 ` Ferruh Yigit 2020-08-24 17:04 ` [dpdk-dev] [PATCH v4] " Bruce Richardson 0 siblings, 2 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-20 12:23 UTC (permalink / raw) To: dev; +Cc: anatoly.burakov, Bruce Richardson When binding or unbinding a range of devices, it can be useful to use wildcards to specify the devices rather than repeating the same prefix multiple times. We can use the python "glob" module to give us this functionality - at least for PCI devices - by checking /sys for matching files. Examples of use from my system: ./dpdk-devbind.py -b vfio-pci 80:04.* ./dpdk-devbind.py -u 80:04.[2-7] The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The second then unbinds six of those devices, 80:04.2..80:04.7, from any driver. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- usertools/dpdk-devbind.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index 86b6b53c40..70ed7bce9d 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -8,6 +8,7 @@ import os import getopt import subprocess +from glob import glob from os.path import exists, abspath, dirname, basename if sys.version_info.major < 3: @@ -689,6 +690,16 @@ def parse_args(): else: b_flag = arg + # resolve any PCI globs in the args + new_args = [] + sysfs_path = "/sys/bus/pci/devices/" + for arg in args: + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) + if globbed_arg: + new_args.extend([a[len(sysfs_path):] for a in globbed_arg]) + else: + new_args.append(arg) + args = new_args def do_arg_actions(): '''do the actual action requested by the user''' -- 2.25.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 12:23 [dpdk-dev] [PATCH] usertools/dpdk-devbind: add support for PCI wildcards Bruce Richardson @ 2020-08-20 14:44 ` Ferruh Yigit 2020-08-20 15:43 ` [dpdk-dev] [PATCH v2] " Bruce Richardson ` (2 more replies) 2020-08-24 17:04 ` [dpdk-dev] [PATCH v4] " Bruce Richardson 1 sibling, 3 replies; 13+ messages in thread From: Ferruh Yigit @ 2020-08-20 14:44 UTC (permalink / raw) To: Bruce Richardson, dev; +Cc: anatoly.burakov On 8/20/2020 1:23 PM, Bruce Richardson wrote: > When binding or unbinding a range of devices, it can be useful to use > wildcards to specify the devices rather than repeating the same prefix > multiple times. We can use the python "glob" module to give us this > functionality - at least for PCI devices - by checking /sys for matching > files. > > Examples of use from my system: > > ./dpdk-devbind.py -b vfio-pci 80:04.* > ./dpdk-devbind.py -u 80:04.[2-7] > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > second then unbinds six of those devices, 80:04.2..80:04.7, from any > driver. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> This is useful, thanks. Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> It can be good to document this new capability in the 'help' output (./usertools/dpdk-devbind.py --usage). ^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH v2] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 14:44 ` Ferruh Yigit @ 2020-08-20 15:43 ` Bruce Richardson 2020-08-21 9:14 ` Burakov, Anatoly 2020-08-21 9:17 ` Burakov, Anatoly 2020-08-20 15:43 ` [dpdk-dev] [PATCH] " Bruce Richardson 2020-08-20 15:52 ` [dpdk-dev] [PATCH v3] " Bruce Richardson 2 siblings, 2 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-20 15:43 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson, Ferruh Yigit When binding or unbinding a range of devices, it can be useful to use wildcards to specify the devices rather than repeating the same prefix multiple times. We can use the python "glob" module to give us this functionality - at least for PCI devices - by checking /sys for matching files. Examples of use from my system: ./dpdk-devbind.py -b vfio-pci 80:04.* ./dpdk-devbind.py -u 80:04.[2-7] The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The second then unbinds six of those devices, 80:04.2..80:04.7, from any driver. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> --- V2: added help text additions --- usertools/dpdk-devbind.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index 86b6b53c40..d13defbe1a 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -8,6 +8,7 @@ import os import getopt import subprocess +from glob import glob from os.path import exists, abspath, dirname, basename if sys.version_info.major < 3: @@ -89,6 +90,8 @@ def usage(): 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. +If devices are specified using PCI <domain:>bus:device:func format, then +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] Options: --help, --usage: @@ -145,6 +148,9 @@ def usage(): To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver %(argv0)s -b ixgbe 02:00.0 02:00.1 +To bind all funcions on device 0000:02:00 to ixgbe kernel driver + %(argv0)s -b ixgbe 02:00.* + """ % locals()) # replace items from local variables @@ -689,6 +695,16 @@ def parse_args(): else: b_flag = arg + # resolve any PCI globs in the args + new_args = [] + sysfs_path = "/sys/bus/pci/devices/" + for arg in args: + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) + if globbed_arg: + new_args.extend([a[len(sysfs_path):] for a in globbed_arg]) + else: + new_args.append(arg) + args = new_args def do_arg_actions(): '''do the actual action requested by the user''' -- 2.25.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 15:43 ` [dpdk-dev] [PATCH v2] " Bruce Richardson @ 2020-08-21 9:14 ` Burakov, Anatoly 2020-08-24 17:05 ` Bruce Richardson 2020-08-21 9:17 ` Burakov, Anatoly 1 sibling, 1 reply; 13+ messages in thread From: Burakov, Anatoly @ 2020-08-21 9:14 UTC (permalink / raw) To: Bruce Richardson, dev; +Cc: Ferruh Yigit On 20-Aug-20 4:43 PM, Bruce Richardson wrote: > When binding or unbinding a range of devices, it can be useful to use > wildcards to specify the devices rather than repeating the same prefix > multiple times. We can use the python "glob" module to give us this > functionality - at least for PCI devices - by checking /sys for matching > files. > > Examples of use from my system: > > ./dpdk-devbind.py -b vfio-pci 80:04.* > ./dpdk-devbind.py -u 80:04.[2-7] > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > second then unbinds six of those devices, 80:04.2..80:04.7, from any > driver. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> > --- > V2: added help text additions > --- > usertools/dpdk-devbind.py | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py > index 86b6b53c40..d13defbe1a 100755 > --- a/usertools/dpdk-devbind.py > +++ b/usertools/dpdk-devbind.py > @@ -8,6 +8,7 @@ > import os > import getopt > import subprocess > +from glob import glob > from os.path import exists, abspath, dirname, basename > > if sys.version_info.major < 3: > @@ -89,6 +90,8 @@ def usage(): > 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. > +If devices are specified using PCI <domain:>bus:device:func format, then > +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] > > Options: > --help, --usage: > @@ -145,6 +148,9 @@ def usage(): > To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver > %(argv0)s -b ixgbe 02:00.0 02:00.1 > > +To bind all funcions on device 0000:02:00 to ixgbe kernel driver > + %(argv0)s -b ixgbe 02:00.* > + > """ % locals()) # replace items from local variables > > > @@ -689,6 +695,16 @@ def parse_args(): > else: > b_flag = arg > > + # resolve any PCI globs in the args > + new_args = [] > + sysfs_path = "/sys/bus/pci/devices/" > + for arg in args: > + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) os.path.join()? > + if globbed_arg: > + new_args.extend([a[len(sysfs_path):] for a in globbed_arg]) os.path.basename()? > + else: > + new_args.append(arg) > + args = new_args > > def do_arg_actions(): > '''do the actual action requested by the user''' > -- Thanks, Anatoly ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-21 9:14 ` Burakov, Anatoly @ 2020-08-24 17:05 ` Bruce Richardson 0 siblings, 0 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-24 17:05 UTC (permalink / raw) To: Burakov, Anatoly; +Cc: dev, Ferruh Yigit On Fri, Aug 21, 2020 at 10:14:19AM +0100, Burakov, Anatoly wrote: > On 20-Aug-20 4:43 PM, Bruce Richardson wrote: > > When binding or unbinding a range of devices, it can be useful to use > > wildcards to specify the devices rather than repeating the same prefix > > multiple times. We can use the python "glob" module to give us this > > functionality - at least for PCI devices - by checking /sys for matching > > files. > > > > Examples of use from my system: > > > > ./dpdk-devbind.py -b vfio-pci 80:04.* > > ./dpdk-devbind.py -u 80:04.[2-7] > > > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > > second then unbinds six of those devices, 80:04.2..80:04.7, from any > > driver. > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> > > --- > > V2: added help text additions > > --- > > usertools/dpdk-devbind.py | 16 ++++++++++++++++ > > 1 file changed, 16 insertions(+) > > > > diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py > > index 86b6b53c40..d13defbe1a 100755 > > --- a/usertools/dpdk-devbind.py > > +++ b/usertools/dpdk-devbind.py > > @@ -8,6 +8,7 @@ > > import os > > import getopt > > import subprocess > > +from glob import glob > > from os.path import exists, abspath, dirname, basename > > if sys.version_info.major < 3: > > @@ -89,6 +90,8 @@ def usage(): > > 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. > > +If devices are specified using PCI <domain:>bus:device:func format, then > > +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] > > Options: > > --help, --usage: > > @@ -145,6 +148,9 @@ def usage(): > > To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver > > %(argv0)s -b ixgbe 02:00.0 02:00.1 > > +To bind all funcions on device 0000:02:00 to ixgbe kernel driver > > + %(argv0)s -b ixgbe 02:00.* > > + > > """ % locals()) # replace items from local variables > > @@ -689,6 +695,16 @@ def parse_args(): > > else: > > b_flag = arg > > + # resolve any PCI globs in the args > > + new_args = [] > > + sysfs_path = "/sys/bus/pci/devices/" > > + for arg in args: > > + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) > > os.path.join()? > > > + if globbed_arg: > > + new_args.extend([a[len(sysfs_path):] for a in globbed_arg]) > > os.path.basename()? > These are used in V4. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 15:43 ` [dpdk-dev] [PATCH v2] " Bruce Richardson 2020-08-21 9:14 ` Burakov, Anatoly @ 2020-08-21 9:17 ` Burakov, Anatoly 2020-08-24 16:19 ` Bruce Richardson 1 sibling, 1 reply; 13+ messages in thread From: Burakov, Anatoly @ 2020-08-21 9:17 UTC (permalink / raw) To: Bruce Richardson, dev; +Cc: Ferruh Yigit On 20-Aug-20 4:43 PM, Bruce Richardson wrote: > When binding or unbinding a range of devices, it can be useful to use > wildcards to specify the devices rather than repeating the same prefix > multiple times. We can use the python "glob" module to give us this > functionality - at least for PCI devices - by checking /sys for matching > files. > > Examples of use from my system: > > ./dpdk-devbind.py -b vfio-pci 80:04.* > ./dpdk-devbind.py -u 80:04.[2-7] > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > second then unbinds six of those devices, 80:04.2..80:04.7, from any > driver. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> > --- > V2: added help text additions > --- > usertools/dpdk-devbind.py | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py > index 86b6b53c40..d13defbe1a 100755 > --- a/usertools/dpdk-devbind.py > +++ b/usertools/dpdk-devbind.py > @@ -8,6 +8,7 @@ > import os > import getopt > import subprocess > +from glob import glob > from os.path import exists, abspath, dirname, basename > > if sys.version_info.major < 3: > @@ -89,6 +90,8 @@ def usage(): > 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. > +If devices are specified using PCI <domain:>bus:device:func format, then > +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] > > Options: > --help, --usage: > @@ -145,6 +148,9 @@ def usage(): > To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver > %(argv0)s -b ixgbe 02:00.0 02:00.1 > > +To bind all funcions on device 0000:02:00 to ixgbe kernel driver > + %(argv0)s -b ixgbe 02:00.* > + > """ % locals()) # replace items from local variables > > > @@ -689,6 +695,16 @@ def parse_args(): > else: > b_flag = arg > > + # resolve any PCI globs in the args > + new_args = [] > + sysfs_path = "/sys/bus/pci/devices/" > + for arg in args: > + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) Also, could be glob_path = arg if arg.startswith("0000:") else "0000:" + arg globbed_arg = glob(os.path.join(sysfs_path, glob_path)) No need to glob twice :) > + if globbed_arg: > + new_args.extend([a[len(sysfs_path):] for a in globbed_arg]) > + else: > + new_args.append(arg) > + args = new_args > > def do_arg_actions(): > '''do the actual action requested by the user''' > -- Thanks, Anatoly ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-21 9:17 ` Burakov, Anatoly @ 2020-08-24 16:19 ` Bruce Richardson 0 siblings, 0 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-24 16:19 UTC (permalink / raw) To: Burakov, Anatoly; +Cc: dev, Ferruh Yigit On Fri, Aug 21, 2020 at 10:17:14AM +0100, Burakov, Anatoly wrote: > On 20-Aug-20 4:43 PM, Bruce Richardson wrote: > > When binding or unbinding a range of devices, it can be useful to use > > wildcards to specify the devices rather than repeating the same prefix > > multiple times. We can use the python "glob" module to give us this > > functionality - at least for PCI devices - by checking /sys for matching > > files. > > > > Examples of use from my system: > > > > ./dpdk-devbind.py -b vfio-pci 80:04.* > > ./dpdk-devbind.py -u 80:04.[2-7] > > > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > > second then unbinds six of those devices, 80:04.2..80:04.7, from any > > driver. > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> > > --- > > V2: added help text additions > > --- > > usertools/dpdk-devbind.py | 16 ++++++++++++++++ > > 1 file changed, 16 insertions(+) > > > > diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py > > index 86b6b53c40..d13defbe1a 100755 > > --- a/usertools/dpdk-devbind.py > > +++ b/usertools/dpdk-devbind.py > > @@ -8,6 +8,7 @@ > > import os > > import getopt > > import subprocess > > +from glob import glob > > from os.path import exists, abspath, dirname, basename > > if sys.version_info.major < 3: > > @@ -89,6 +90,8 @@ def usage(): > > 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. > > +If devices are specified using PCI <domain:>bus:device:func format, then > > +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] > > Options: > > --help, --usage: > > @@ -145,6 +148,9 @@ def usage(): > > To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver > > %(argv0)s -b ixgbe 02:00.0 02:00.1 > > +To bind all funcions on device 0000:02:00 to ixgbe kernel driver > > + %(argv0)s -b ixgbe 02:00.* > > + > > """ % locals()) # replace items from local variables > > @@ -689,6 +695,16 @@ def parse_args(): > > else: > > b_flag = arg > > + # resolve any PCI globs in the args > > + new_args = [] > > + sysfs_path = "/sys/bus/pci/devices/" > > + for arg in args: > > + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) > > Also, could be > > glob_path = arg if arg.startswith("0000:") else "0000:" + arg > globbed_arg = glob(os.path.join(sysfs_path, glob_path)) > > No need to glob twice :) > Well, the two are not quite equivalent if one assumes that the domain part can start with something other than 0000. If the domain is e.g. FFFF:, you don't want to prefix that with 0000 - only if no domain is specified. Therefore it's safer to glob twice, especially since we are not particularly concerned about performance here (or else we wouldn't be using python!). /Bruce ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 14:44 ` Ferruh Yigit 2020-08-20 15:43 ` [dpdk-dev] [PATCH v2] " Bruce Richardson @ 2020-08-20 15:43 ` Bruce Richardson 2020-08-20 15:52 ` [dpdk-dev] [PATCH v3] " Bruce Richardson 2 siblings, 0 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-20 15:43 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, anatoly.burakov On Thu, Aug 20, 2020 at 03:44:54PM +0100, Ferruh Yigit wrote: > On 8/20/2020 1:23 PM, Bruce Richardson wrote: > > When binding or unbinding a range of devices, it can be useful to use > > wildcards to specify the devices rather than repeating the same prefix > > multiple times. We can use the python "glob" module to give us this > > functionality - at least for PCI devices - by checking /sys for matching > > files. > > > > Examples of use from my system: > > > > ./dpdk-devbind.py -b vfio-pci 80:04.* > > ./dpdk-devbind.py -u 80:04.[2-7] > > > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > > second then unbinds six of those devices, 80:04.2..80:04.7, from any > > driver. > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > This is useful, thanks. > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> > > It can be good to document this new capability in the 'help' output > (./usertools/dpdk-devbind.py --usage). Yep, good point, added in V2. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH v3] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 14:44 ` Ferruh Yigit 2020-08-20 15:43 ` [dpdk-dev] [PATCH v2] " Bruce Richardson 2020-08-20 15:43 ` [dpdk-dev] [PATCH] " Bruce Richardson @ 2020-08-20 15:52 ` Bruce Richardson 2 siblings, 0 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-20 15:52 UTC (permalink / raw) To: dev; +Cc: Bruce Richardson, Ferruh Yigit When binding or unbinding a range of devices, it can be useful to use wildcards to specify the devices rather than repeating the same prefix multiple times. We can use the python "glob" module to give us this functionality - at least for PCI devices - by checking /sys for matching files. Examples of use from my system: ./dpdk-devbind.py -b vfio-pci 80:04.* ./dpdk-devbind.py -u 80:04.[2-7] The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The second then unbinds six of those devices, 80:04.2..80:04.7, from any driver. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> --- V3: fix typo in help text additions V2: added help text additions --- usertools/dpdk-devbind.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index 86b6b53c40..5dee63e675 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -8,6 +8,7 @@ import os import getopt import subprocess +from glob import glob from os.path import exists, abspath, dirname, basename if sys.version_info.major < 3: @@ -89,6 +90,8 @@ def usage(): 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. +If devices are specified using PCI <domain:>bus:device:func format, then +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] Options: --help, --usage: @@ -145,6 +148,9 @@ def usage(): To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver %(argv0)s -b ixgbe 02:00.0 02:00.1 +To bind all functions on device 0000:02:00 to ixgbe kernel driver + %(argv0)s -b ixgbe 02:00.* + """ % locals()) # replace items from local variables @@ -689,6 +695,16 @@ def parse_args(): else: b_flag = arg + # resolve any PCI globs in the args + new_args = [] + sysfs_path = "/sys/bus/pci/devices/" + for arg in args: + globbed_arg = glob(sysfs_path + arg) + glob(sysfs_path + "0000:" + arg) + if globbed_arg: + new_args.extend([a[len(sysfs_path):] for a in globbed_arg]) + else: + new_args.append(arg) + args = new_args def do_arg_actions(): '''do the actual action requested by the user''' -- 2.25.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH v4] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-20 12:23 [dpdk-dev] [PATCH] usertools/dpdk-devbind: add support for PCI wildcards Bruce Richardson 2020-08-20 14:44 ` Ferruh Yigit @ 2020-08-24 17:04 ` Bruce Richardson 2020-08-28 15:48 ` Ferruh Yigit 2020-08-28 16:02 ` Burakov, Anatoly 1 sibling, 2 replies; 13+ messages in thread From: Bruce Richardson @ 2020-08-24 17:04 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Anatoly Burakov, Bruce Richardson When binding or unbinding a range of devices, it can be useful to use wildcards to specify the devices rather than repeating the same prefix multiple times. We can use the python "glob" module to give us this functionality - at least for PCI devices - by checking /sys for matching files. Examples of use from my system: ./dpdk-devbind.py -b vfio-pci 80:04.* ./dpdk-devbind.py -u 80:04.[2-7] The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The second then unbinds six of those devices, 80:04.2..80:04.7, from any driver. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- V4: change path manipulation to use os.path.join and basename separated pci_glob out into separate function with doc string [dropped Ferruh's test-by due to scope of changes] V3: fix typo in help text additions V2: added help text additions --- usertools/dpdk-devbind.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index 86b6b53c40..6c23d243fa 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -8,7 +8,9 @@ import os import getopt import subprocess +from glob import glob from os.path import exists, abspath, dirname, basename +from os.path import join as path_join if sys.version_info.major < 3: print("WARNING: Python 2 is deprecated for use in DPDK, and will not work in future releases.", file=sys.stderr) @@ -89,6 +91,8 @@ def usage(): 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. +If devices are specified using PCI <domain:>bus:device:func format, then +shell wildcards and ranges may be used, e.g. 80:04.*, 80:04.[0-3] Options: --help, --usage: @@ -145,6 +149,9 @@ def usage(): To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver %(argv0)s -b ixgbe 02:00.0 02:00.1 +To bind all functions on device 0000:02:00 to ixgbe kernel driver + %(argv0)s -b ixgbe 02:00.* + """ % locals()) # replace items from local variables @@ -648,6 +655,19 @@ def show_status(): if status_dev == "misc" or status_dev == "all": show_device_status(misc_devices, "Misc (rawdev)") + +def pci_glob(arg): + '''Returns a list containing either: + * List of PCI B:D:F matching arg, using shell wildcards e.g. 80:04.* + * Only the passed arg if matching list is empty''' + sysfs_path = "/sys/bus/pci/devices" + for _glob in [arg, '0000:' + arg]: + paths = [basename(path) for path in glob(path_join(sysfs_path, _glob))] + if paths: + return paths + return [arg] + + def parse_args(): '''Parses the command-line arguments given by the user and takes the appropriate action for each''' @@ -689,6 +709,11 @@ def parse_args(): else: b_flag = arg + # resolve any PCI globs in the args + new_args = [] + for arg in args: + new_args.extend(pci_glob(arg)) + args = new_args def do_arg_actions(): '''do the actual action requested by the user''' -- 2.25.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v4] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-24 17:04 ` [dpdk-dev] [PATCH v4] " Bruce Richardson @ 2020-08-28 15:48 ` Ferruh Yigit 2020-09-08 21:44 ` Thomas Monjalon 2020-08-28 16:02 ` Burakov, Anatoly 1 sibling, 1 reply; 13+ messages in thread From: Ferruh Yigit @ 2020-08-28 15:48 UTC (permalink / raw) To: Bruce Richardson, dev; +Cc: Anatoly Burakov On 8/24/2020 6:04 PM, Bruce Richardson wrote: > When binding or unbinding a range of devices, it can be useful to use > wildcards to specify the devices rather than repeating the same prefix > multiple times. We can use the python "glob" module to give us this > functionality - at least for PCI devices - by checking /sys for matching > files. > > Examples of use from my system: > > ./dpdk-devbind.py -b vfio-pci 80:04.* > ./dpdk-devbind.py -u 80:04.[2-7] > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > second then unbinds six of those devices, 80:04.2..80:04.7, from any > driver. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v4] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-28 15:48 ` Ferruh Yigit @ 2020-09-08 21:44 ` Thomas Monjalon 0 siblings, 0 replies; 13+ messages in thread From: Thomas Monjalon @ 2020-09-08 21:44 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, Anatoly Burakov, Ferruh Yigit 28/08/2020 17:48, Ferruh Yigit: > On 8/24/2020 6:04 PM, Bruce Richardson wrote: > > When binding or unbinding a range of devices, it can be useful to use > > wildcards to specify the devices rather than repeating the same prefix > > multiple times. We can use the python "glob" module to give us this > > functionality - at least for PCI devices - by checking /sys for matching > > files. > > > > Examples of use from my system: > > > > ./dpdk-devbind.py -b vfio-pci 80:04.* > > ./dpdk-devbind.py -u 80:04.[2-7] > > > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > > second then unbinds six of those devices, 80:04.2..80:04.7, from any > > driver. > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> Applied, thanks ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v4] usertools/dpdk-devbind: add support for PCI wildcards 2020-08-24 17:04 ` [dpdk-dev] [PATCH v4] " Bruce Richardson 2020-08-28 15:48 ` Ferruh Yigit @ 2020-08-28 16:02 ` Burakov, Anatoly 1 sibling, 0 replies; 13+ messages in thread From: Burakov, Anatoly @ 2020-08-28 16:02 UTC (permalink / raw) To: Richardson, Bruce, dev; +Cc: Yigit, Ferruh, Richardson, Bruce Acked-by: Anatoly Burakov <anatoly.burakov@intel.com> Thanks, Anatoly > -----Original Message----- > From: Bruce Richardson <bruce.richardson@intel.com> > Sent: Monday, August 24, 2020 6:05 PM > To: dev@dpdk.org > Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; Burakov, Anatoly > <anatoly.burakov@intel.com>; Richardson, Bruce > <bruce.richardson@intel.com> > Subject: [PATCH v4] usertools/dpdk-devbind: add support for PCI wildcards > > When binding or unbinding a range of devices, it can be useful to use > wildcards to specify the devices rather than repeating the same prefix > multiple times. We can use the python "glob" module to give us this > functionality - at least for PCI devices - by checking /sys for matching files. > > Examples of use from my system: > > ./dpdk-devbind.py -b vfio-pci 80:04.* > ./dpdk-devbind.py -u 80:04.[2-7] > > The first example binds eight devices, 80:04.0..80:04.7, to vfio-pci. The > second then unbinds six of those devices, 80:04.2..80:04.7, from any driver. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > --- ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-09-08 21:44 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-08-20 12:23 [dpdk-dev] [PATCH] usertools/dpdk-devbind: add support for PCI wildcards Bruce Richardson 2020-08-20 14:44 ` Ferruh Yigit 2020-08-20 15:43 ` [dpdk-dev] [PATCH v2] " Bruce Richardson 2020-08-21 9:14 ` Burakov, Anatoly 2020-08-24 17:05 ` Bruce Richardson 2020-08-21 9:17 ` Burakov, Anatoly 2020-08-24 16:19 ` Bruce Richardson 2020-08-20 15:43 ` [dpdk-dev] [PATCH] " Bruce Richardson 2020-08-20 15:52 ` [dpdk-dev] [PATCH v3] " Bruce Richardson 2020-08-24 17:04 ` [dpdk-dev] [PATCH v4] " Bruce Richardson 2020-08-28 15:48 ` Ferruh Yigit 2020-09-08 21:44 ` Thomas Monjalon 2020-08-28 16:02 ` Burakov, Anatoly
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).