From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3C128A04AF; Fri, 21 Aug 2020 11:14:26 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6079B5F69; Fri, 21 Aug 2020 11:14:25 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id C12894CA6 for ; Fri, 21 Aug 2020 11:14:23 +0200 (CEST) IronPort-SDR: YN9OWiHwpF30PFmL3p9JGUYLL09JWyWZAVmwg1V/0pi4VdeZgJtcy9GIdfNl8MSkKLzE05GoLq NA91z4NbDB+g== X-IronPort-AV: E=McAfee;i="6000,8403,9719"; a="135555558" X-IronPort-AV: E=Sophos;i="5.76,335,1592895600"; d="scan'208";a="135555558" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Aug 2020 02:14:22 -0700 IronPort-SDR: FCPUHfKYwBaasCC7KGegEgZ+IpT+T+lmlMoIv02B4vL0nEnaYlLHiTwYuhMd+7XWK+mfnVs/Co VSjHxijTKy4g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,335,1592895600"; d="scan'208";a="442285751" Received: from aburakov-mobl.ger.corp.intel.com (HELO [10.251.160.148]) ([10.251.160.148]) by orsmga004.jf.intel.com with ESMTP; 21 Aug 2020 02:14:20 -0700 To: Bruce Richardson , dev@dpdk.org Cc: Ferruh Yigit References: <20200820154308.3212-1-bruce.richardson@intel.com> From: "Burakov, Anatoly" Message-ID: Date: Fri, 21 Aug 2020 10:14:19 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 In-Reply-To: <20200820154308.3212-1-bruce.richardson@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v2] usertools/dpdk-devbind: add support for PCI wildcards X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 > Tested-by: Ferruh Yigit > --- > 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 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