From patchwork Wed Sep 1 21:27:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 97723 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 874EFA0C45; Wed, 1 Sep 2021 23:27:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4619F410EA; Wed, 1 Sep 2021 23:27:13 +0200 (CEST) Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by mails.dpdk.org (Postfix) with ESMTP id 55F8440DDE for ; Wed, 1 Sep 2021 23:27:12 +0200 (CEST) Received: by mail-pf1-f170.google.com with SMTP id 18so846303pfh.9 for ; Wed, 01 Sep 2021 14:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Fr4G/yjF7C+Ywk8rKGTUQn6StAhmGKxieZTHbpeq6ZU=; b=xwshUztQlN/7u5/Ne/pTh1xemDTRds+Dwt7TU3LryQr5Jw7QDM0Lyl5yjeqwLuPaX2 fwMn/KAj6hLwPR1GzR/C7pCmqBV1O8hTuXoa9xEBv2w0VJ0mGCWVU1mQUWzYPJKBjrxR Dpy8oKju01rYH5StiSJcWvxmYOQEn/nuaKvK3vEIm2CeVYtXPGWGaqrKq+u5fMRSTcAL ODKva+8e0Qprq0mV3bzaAuhr1e0jgU+BBFSUDrjFTJP+MVe3O2FrgYB/XiiZxIS/EU5c u4w0VtORC34oaAT3GnN2LRWC+Dsw4jmeX7COoxRzWg5VSfSCybdivcM1DqkLh6CCCgB4 rGeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Fr4G/yjF7C+Ywk8rKGTUQn6StAhmGKxieZTHbpeq6ZU=; b=ck+dnhEjTyU8NIobl2iWcl0F3+dc85hEicuRFpcT57dQ8PYZ7luigrz09k2AfItVrH iZLXcb1HhaR574m1tyfK7q94hGJUXWMNBx5Nkcfb6LkLT5hp0IFGT/CQPBeHst5DtBwN Gz3WxrVs5A35G2ASpJl3az+9G4jtFHUaR1ILAD8+ScKklTTzOG5lxI9WvBgHVC+U+YeX bshvTFWo/hpjx2mfVSI9sRCP3Cka4AMk7rMmHO9zj0F/QknN57A29nKklueze+i9mXZo tjo6ZkiLRT6PY1sSKjnLwyxm1XxaO1Iq3K1rD/gu+qA2SVqCg4lJh4BP5jyjN4bUi7e7 YfkA== X-Gm-Message-State: AOAM533OEjb9Jhkr1mNiNSv9rJRPpuaWDOq5npMhBJjdR28xi8/h1NEM qitsP7z5toQ/n3+JtbML7tgdYqzgcxt2EA== X-Google-Smtp-Source: ABdhPJwXuxDJBgDxRJgnU21bzGSHcf05zxNGAaCY8Pc5XDaz/wGmG37vN/z5oI5D4o2T2qSCPY7JVg== X-Received: by 2002:a65:434c:: with SMTP id k12mr1002093pgq.17.1630531631002; Wed, 01 Sep 2021 14:27:11 -0700 (PDT) Received: from hermes.local (204-195-33-123.wavecable.com. [204.195.33.123]) by smtp.gmail.com with ESMTPSA id d81sm420045pfd.17.2021.09.01.14.27.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Sep 2021 14:27:10 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 1 Sep 2021 14:27:07 -0700 Message-Id: <20210901212707.25079-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Subject: [dpdk-dev] [RFC] devbind: conform to PEP 8 recommended style X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" This fixes most of the warnings from the Flake8 style checker. The ones remaing are long lines (we allow > 79 characters) and a line break warning. The line break style changed in later versions of PEP 8 and the tool is not updated. https://www.flake8rules.com/rules/W503.html Signed-off-by: Stephen Hemminger Acked-by: Bruce Richardson Acked-by: Anatoly Burakov Tested-by: Bruce Richardson --- usertools/dpdk-devbind.py | 70 ++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index 74d16e4c4b13..540138842bd5 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -91,6 +91,7 @@ force_flag = False args = [] + # check if a specific kernel module is loaded def module_is_loaded(module): global loaded_modules @@ -178,11 +179,13 @@ def get_pci_device_details(dev_id, probe_lspci): return device + def clear_data(): '''This function clears any old data''' global devices devices = {} + def get_device_details(devices_type): '''This function populates the "devices" dictionary. The keys used are the pci addresses (domain:bus:slot.func). The values are themselves @@ -228,7 +231,7 @@ def get_device_details(devices_type): rt_info = route.split() for i in range(len(rt_info) - 1): if rt_info[i] == "dev": - ssh_if.append(rt_info[i+1]) + ssh_if.append(rt_info[i + 1]) # based on the basic info, get extended text details for d in devices.keys(): @@ -282,6 +285,7 @@ def device_type_match(dev, devices_type): return True return False + def dev_id_from_dev_name(dev_name): '''Take a device "name" - a string passed in by user to identify a NIC device, and determine the device id - i.e. the domain:bus:slot.func - for @@ -321,9 +325,9 @@ def unbind_one(dev_id, force): filename = "/sys/bus/pci/drivers/%s/unbind" % dev["Driver_str"] try: f = open(filename, "a") - except: - sys.exit("Error: unbind failed for %s - Cannot open %s" % - (dev_id, filename)) + except OSError as err: + sys.exit("Error: unbind failed for %s - Cannot open %s: %s" % + (dev_id, filename, err)) f.write(dev_id) f.close() @@ -361,58 +365,58 @@ def bind_one(dev_id, driver, force): if exists(filename): try: f = open(filename, "w") - except: - print("Error: bind failed for %s - Cannot open %s" - % (dev_id, filename), file=sys.stderr) + except OSError as err: + print("Error: bind failed for %s - Cannot open %s: %s" + % (dev_id, filename, err), file=sys.stderr) return try: f.write("%s" % driver) f.close() - except: + except OSError as err: print("Error: bind failed for %s - Cannot write driver %s to " - "PCI ID " % (dev_id, driver), file=sys.stderr) + "PCI ID: %s" % (dev_id, driver, err), file=sys.stderr) return # For kernels < 3.15 use new_id to add PCI id's to the driver else: filename = "/sys/bus/pci/drivers/%s/new_id" % driver try: f = open(filename, "w") - except: - print("Error: bind failed for %s - Cannot open %s" - % (dev_id, filename), file=sys.stderr) + except OSError as err: + print("Error: bind failed for %s - Cannot open %s: %s" + % (dev_id, filename, err), file=sys.stderr) return try: # Convert Device and Vendor Id to int to write to new_id f.write("%04x %04x" % (int(dev["Vendor"], 16), int(dev["Device"], 16))) f.close() - except: + except OSError as err: print("Error: bind failed for %s - Cannot write new PCI ID to " - "driver %s" % (dev_id, driver), file=sys.stderr) + "driver %s: %s" % (dev_id, driver, err), file=sys.stderr) return # do the bind by writing to /sys filename = "/sys/bus/pci/drivers/%s/bind" % driver try: f = open(filename, "a") - except: - print("Error: bind failed for %s - Cannot open %s" - % (dev_id, filename), file=sys.stderr) + except OSError as err: + print("Error: bind failed for %s - Cannot open %s: %s" + % (dev_id, filename, err), file=sys.stderr) if saved_driver is not None: # restore any previous driver bind_one(dev_id, saved_driver, force) return try: f.write(dev_id) f.close() - except: + except OSError as err: # for some reason, closing dev_id after adding a new PCI ID to new_id # results in IOError. however, if the device was successfully bound, # we don't care for any errors and can safely ignore IOError tmp = get_pci_device_details(dev_id, True) if "Driver_str" in tmp and tmp["Driver_str"] == driver: return - print("Error: bind failed for %s - Cannot bind to driver %s" - % (dev_id, driver), file=sys.stderr) + print("Error: bind failed for %s - Cannot bind to driver %s: %s" + % (dev_id, driver, err), file=sys.stderr) if saved_driver is not None: # restore any previous driver bind_one(dev_id, saved_driver, force) return @@ -424,15 +428,15 @@ def bind_one(dev_id, driver, force): if exists(filename): try: f = open(filename, "w") - except: - sys.exit("Error: unbind failed for %s - Cannot open %s" - % (dev_id, filename)) + except OSError as err: + sys.exit("Error: unbind failed for %s - Cannot open %s: %s" + % (dev_id, filename, err)) try: f.write("\00") f.close() - except: - sys.exit("Error: unbind failed for %s - Cannot open %s" - % (dev_id, filename)) + except OSError as err: + sys.exit("Error: unbind failed for %s - Cannot write %s: %s" + % (dev_id, filename, err)) def unbind_all(dev_list, force=False): @@ -466,7 +470,7 @@ def bind_all(dev_list, driver, force=False): dev_id_from_dev_name(driver) # if we've made it this far, this means that the "driver" was a valid # device string, so it's probably not a valid driver name. - sys.exit("Error: Driver '%s' does not look like a valid driver. " \ + sys.exit("Error: Driver '%s' does not look like a valid driver. " "Did you forget to specify the driver to bind devices to?" % driver) except ValueError: # driver generated error - it's not a valid device ID, so all is well @@ -496,8 +500,8 @@ def bind_all(dev_list, driver, force=False): continue # update information about this device - devices[d] = dict(devices[d].items() + - get_pci_device_details(d, True).items()) + devices[d] = dict(devices[d].items() + + get_pci_device_details(d, True).items()) # check if updated information indicates that the device was bound if "Driver_str" in devices[d]: @@ -511,7 +515,7 @@ def display_devices(title, dev_list, extra_params=None): device's dictionary.''' strings = [] # this holds the strings to print. We sort before printing print("\n%s" % title) - print("="*len(title)) + print("=" * len(title)) if not dev_list: strings.append("") else: @@ -527,6 +531,7 @@ def display_devices(title, dev_list, extra_params=None): strings.sort() print("\n".join(strings)) # print one per line + def show_device_status(devices_type, device_name, if_field=False): global dpdk_drivers kernel_drv = [] @@ -569,6 +574,7 @@ def show_device_status(devices_type, device_name, if_field=False): display_devices("Other %s devices" % device_name, no_drv, "unused=%(Module_str)s") + def show_status(): '''Function called when the script is passed the "--status" option. Displays to the user what devices are bound to the igb_uio driver, the @@ -652,7 +658,7 @@ def parse_args(): '--status-dev', help="Print the status of given device group.", choices=['baseband', 'compress', 'crypto', 'event', - 'mempool', 'misc', 'net', 'regex']) + 'mempool', 'misc', 'net', 'regex']) bind_group = parser.add_mutually_exclusive_group() bind_group.add_argument( '-b', @@ -714,6 +720,7 @@ def parse_args(): new_args.extend(pci_glob(arg)) args = new_args + def do_arg_actions(): '''do the actual action requested by the user''' global b_flag @@ -761,5 +768,6 @@ def main(): get_device_details(misc_devices) do_arg_actions() + if __name__ == "__main__": main()