--- /opt/Perforce/gtosatti_centos/E-XMS/CSA-Mainline/Third-Party/dpdk/dpdk-16.07.orig/tools/dpdk-devbind.py +++ /opt/Perforce/gtosatti_centos/E-XMS/CSA-Mainline/Third-Party/dpdk/dp +++ dk-16.07/tools/dpdk-devbind.py @@ -91,6 +91,9 @@ -u, --unbind: Unbind a device (Equivalent to \"-b none\") + -r, --restore + Restore ALL the DPDK devices to their kernel drivers + --force: By default, devices which are used by Linux - as indicated by having routes in the routing table - cannot be modified. Using the --force @@ -448,6 +451,21 @@ if "Driver_str" in devices[d]: unbind_one(d, force) +def restore_all_to_kernel(): + global force_flag + # List all the available devices + for d in devices.keys(): + if not has_driver(d): + # Discard the unbinded devices + continue + if devices[d]["Driver_str"] in dpdk_drivers: + # List the unused Drivers of the the DPDK Devices + unused_drivers = devices[d]["Module_str"].split(",") + print("Restoring kernel driver for: %s '%s' '%s'" % (devices[d]["Slot"], + devices[d]["Device_str"], devices[d]["Module_str"])) + # Bind the current Device to the FIRST unused Driver + if unused_drivers: + bind_one(devices[d]["Slot"], unused_drivers[0], +force_flag) def display_devices(title, dev_list, extra_params=None): '''Displays to the user the details of a list of devices given in @@ -513,7 +531,7 @@ try: opts, args = getopt.getopt(sys.argv[1:], "b:us", ["help", "usage", "status", "force", - "bind=", "unbind"]) + "bind=", "unbind", "restore"]) except getopt.GetoptError as error: print(str(error)) print("Run '%s --usage' for further information" % sys.argv[0]) @@ -527,11 +545,15 @@ status_flag = True if opt == "--force": force_flag = True - if opt == "-b" or opt == "-u" or opt == "--bind" or opt == "--unbind": + if (opt == "-b" or opt == "--bind" or + opt == "-u" or opt == "--unbind" or + opt == "-r" or opt == "--restore"): if b_flag is not None: print("Error - Only one bind or unbind may be specified\n") sys.exit(1) - if opt == "-u" or opt == "--unbind": + if opt == "-r" or opt == "--restore": + b_flag = "restore" + elif opt == "-u" or opt == "--unbind": b_flag = "none" else: b_flag = arg @@ -551,11 +573,14 @@ 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]) - sys.exit(1) - - if b_flag == "none" or b_flag == "None": + if b_flag != "restore": + print("Error: No devices specified.") + print("Run '%s --usage' for further information" % sys.argv[0]) + sys.exit(1) + + if b_flag == "restore": + restore_all_to_kernel() + elif b_flag == "none" or b_flag == "None": unbind_all(args, force_flag) elif b_flag is not None: bind_all(args, b_flag, force_flag)