X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=usertools%2Fdpdk-devbind.py;h=86b6b53c40ff4520a92ebf3f62b7cd0ffb4f660d;hb=c94366cfc641c6ae43d01c2ac4c6b8993817b356;hp=d3b16240fecc0f9a1e3deff6155ef6259ffb06f8;hpb=681a6728865582795f0fee8cbb496fda3d19194a;p=dpdk.git diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index d3b16240fe..86b6b53c40 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -3,12 +3,17 @@ # Copyright(c) 2010-2014 Intel Corporation # +from __future__ import print_function import sys import os import getopt import subprocess from os.path import exists, abspath, dirname, basename +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) + print("Please use Python 3 instead", file=sys.stderr) + # The PCI base class for all devices network_class = {'Class': '02', 'Vendor': None, 'Device': None, 'SVendor': None, 'SDevice': None} @@ -44,6 +49,8 @@ intel_ioat_bdw = {'Class': '08', 'Vendor': '8086', 'Device': '6f20,6f21,6f22,6f2 'SVendor': None, 'SDevice': None} intel_ioat_skx = {'Class': '08', 'Vendor': '8086', 'Device': '2021', 'SVendor': None, 'SDevice': None} +intel_ioat_icx = {'Class': '08', 'Vendor': '8086', 'Device': '0b00', + 'SVendor': None, 'SDevice': None} intel_ntb_skx = {'Class': '06', 'Vendor': '8086', 'Device': '201c', 'SVendor': None, 'SDevice': None} @@ -53,7 +60,7 @@ crypto_devices = [encryption_class, intel_processor_class] eventdev_devices = [cavium_sso, cavium_tim, octeontx2_sso] mempool_devices = [cavium_fpa, octeontx2_npa] compress_devices = [cavium_zip] -misc_devices = [intel_ioat_bdw, intel_ioat_skx, intel_ntb_skx, octeontx2_dma] +misc_devices = [intel_ioat_bdw, intel_ioat_skx, intel_ioat_icx, intel_ntb_skx, octeontx2_dma] # global dict ethernet devices present. Dictionary indexed by PCI address. # Each device within this is itself a dictionary of device properties @@ -152,6 +159,9 @@ def check_output(args, stderr=None): def module_is_loaded(module): global loaded_modules + if module == 'vfio_pci': + module = 'vfio-pci' + if loaded_modules: return module in loaded_modules @@ -185,7 +195,7 @@ def check_modules(): # check if we have at least one loaded module if True not in [mod["Found"] for mod in mods] and b_flag is not None: - print("Warning: no supported DPDK kernel modules are loaded") + print("Warning: no supported DPDK kernel modules are loaded", file=sys.stderr) # change DPDK driver list to only contain drivers that are loaded dpdk_drivers = [mod["Name"] for mod in mods if mod["Found"]] @@ -207,7 +217,7 @@ def get_pci_device_details(dev_id, probe_lspci): for line in extra_info: if len(line) == 0: continue - name, value = line.decode().split("\t", 1) + name, value = line.decode("utf8").split("\t", 1) name = name.strip(":") + "_str" device[name] = value # check for a unix interface name @@ -253,7 +263,7 @@ def get_device_details(devices_type): # Clear previous device's data dev = {} else: - name, value = dev_line.decode().split("\t", 1) + name, value = dev_line.decode("utf8").split("\t", 1) value_list = value.rsplit(' ', 1) if len(value_list) > 1: # String stored in _str @@ -352,14 +362,14 @@ def unbind_one(dev_id, force): '''Unbind the device identified by "dev_id" from its current driver''' dev = devices[dev_id] if not has_driver(dev_id): - print("%s %s %s is not currently managed by any driver\n" % - (dev["Slot"], dev["Device_str"], dev["Interface"])) + print("Notice: %s %s %s is not currently managed by any driver" % + (dev["Slot"], dev["Device_str"], dev["Interface"]), file=sys.stderr) return # prevent us disconnecting ourselves if dev["Ssh_if"] and not force: - print("Routing table indicates that interface %s is active. " - "Skipping unbind" % (dev_id)) + print("Warning: routing table indicates that interface %s is active. " + "Skipping unbind" % dev_id, file=sys.stderr) return # write to /sys to unbind @@ -367,9 +377,8 @@ def unbind_one(dev_id, force): try: f = open(filename, "a") except: - print("Error: unbind failed for %s - Cannot open %s" - % (dev_id, filename)) - sys.exit(1) + sys.exit("Error: unbind failed for %s - Cannot open %s" % + (dev_id, filename)) f.write(dev_id) f.close() @@ -382,15 +391,15 @@ def bind_one(dev_id, driver, force): # prevent disconnection of our ssh session if dev["Ssh_if"] and not force: - print("Routing table indicates that interface %s is active. " - "Not modifying" % (dev_id)) + print("Warning: routing table indicates that interface %s is active. " + "Not modifying" % dev_id, file=sys.stderr) return # unbind any existing drivers we don't want if has_driver(dev_id): if dev["Driver_str"] == driver: - print("%s already bound to driver %s, skipping\n" - % (dev_id, driver)) + print("Notice: %s already bound to driver %s, skipping" % + (dev_id, driver), file=sys.stderr) return else: saved_driver = dev["Driver_str"] @@ -410,14 +419,14 @@ def bind_one(dev_id, driver, force): f = open(filename, "w") except: print("Error: bind failed for %s - Cannot open %s" - % (dev_id, filename)) + % (dev_id, filename), file=sys.stderr) return try: f.write("%s" % driver) f.close() except: print("Error: bind failed for %s - Cannot write driver %s to " - "PCI ID " % (dev_id, driver)) + "PCI ID " % (dev_id, driver), file=sys.stderr) return # For kernels < 3.15 use new_id to add PCI id's to the driver else: @@ -426,7 +435,7 @@ def bind_one(dev_id, driver, force): f = open(filename, "w") except: print("Error: bind failed for %s - Cannot open %s" - % (dev_id, filename)) + % (dev_id, filename), file=sys.stderr) return try: # Convert Device and Vendor Id to int to write to new_id @@ -435,7 +444,7 @@ def bind_one(dev_id, driver, force): f.close() except: print("Error: bind failed for %s - Cannot write new PCI ID to " - "driver %s" % (dev_id, driver)) + "driver %s" % (dev_id, driver), file=sys.stderr) return # do the bind by writing to /sys @@ -444,7 +453,7 @@ def bind_one(dev_id, driver, force): f = open(filename, "a") except: print("Error: bind failed for %s - Cannot open %s" - % (dev_id, filename)) + % (dev_id, filename), file=sys.stderr) if saved_driver is not None: # restore any previous driver bind_one(dev_id, saved_driver, force) return @@ -459,7 +468,7 @@ def bind_one(dev_id, driver, force): 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)) + % (dev_id, driver), file=sys.stderr) if saved_driver is not None: # restore any previous driver bind_one(dev_id, saved_driver, force) return @@ -472,16 +481,14 @@ def bind_one(dev_id, driver, force): try: f = open(filename, "w") except: - print("Error: unbind failed for %s - Cannot open %s" + sys.exit("Error: unbind failed for %s - Cannot open %s" % (dev_id, filename)) - sys.exit(1) try: f.write("\00") f.close() except: - print("Error: unbind failed for %s - Cannot open %s" + sys.exit("Error: unbind failed for %s - Cannot open %s" % (dev_id, filename)) - sys.exit(1) def unbind_all(dev_list, force=False): @@ -522,7 +529,7 @@ def bind_all(dev_list, driver, force=False): pass # check if we're attempting to bind to a driver that isn't loaded - if not module_is_loaded(driver): + if not module_is_loaded(driver.replace('-','_')): sys.exit("Error: Driver '%s' is not loaded." % driver) try: @@ -676,8 +683,7 @@ def parse_args(): force_flag = True if opt == "-b" or opt == "-u" or opt == "--bind" or opt == "--unbind": if b_flag is not None: - print("Error - Only one bind or unbind may be specified\n") - sys.exit(1) + sys.exit("Error: binding and unbinding are mutually exclusive") if opt == "-u" or opt == "--unbind": b_flag = "none" else: @@ -692,14 +698,14 @@ def do_arg_actions(): global args if b_flag is None and not status_flag: - print("Error: No action specified for devices." - "Please give a -b or -u option") - print("Run '%s --usage' for further information" % sys.argv[0]) + print("Error: No action specified for devices. " + "Please give a -b or -u option", file=sys.stderr) + usage() sys.exit(1) if b_flag is not None and len(args) == 0: - print("Error: No devices specified.") - print("Run '%s --usage' for further information" % sys.argv[0]) + print("Error: No devices specified.", file=sys.stderr) + usage() sys.exit(1) if b_flag == "none" or b_flag == "None": @@ -727,8 +733,7 @@ def main(): ret = subprocess.call(['which', 'lspci'], stdout=devnull, stderr=devnull) if ret != 0: - print("'lspci' not found - please install 'pciutils'") - sys.exit(1) + sys.exit("'lspci' not found - please install 'pciutils'") parse_args() check_modules() clear_data()