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 0F577A04AF; Thu, 20 Aug 2020 17:52:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EFDD11BEC4; Thu, 20 Aug 2020 17:52:30 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 22968AAD5 for ; Thu, 20 Aug 2020 17:52:28 +0200 (CEST) IronPort-SDR: 5/EHv9FbCrZSewmzbKhpvDH3GuaIutJ4AQpsnbFl/LCYm1PDzNbzDViotlxixqmcvaiGsW0Kg7 hLUvu8ZgbF0A== X-IronPort-AV: E=McAfee;i="6000,8403,9718"; a="134857050" X-IronPort-AV: E=Sophos;i="5.76,333,1592895600"; d="scan'208";a="134857050" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Aug 2020 08:52:28 -0700 IronPort-SDR: J5rbF6G5Z/iW6AkGxv9dyN+XyGpJA79DQlVtlZb1ZtW6u48LaY4egVrTmM4LYgy0twq6KiTgTj e4l/baq5z3FQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,333,1592895600"; d="scan'208";a="472701044" Received: from silpixa00399126.ir.intel.com ([10.237.222.56]) by orsmga005.jf.intel.com with ESMTP; 20 Aug 2020 08:52:27 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Bruce Richardson , Ferruh Yigit Date: Thu, 20 Aug 2020 16:52:23 +0100 Message-Id: <20200820155223.4409-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v3] 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" 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 --- 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 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