DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Tosatti, Giovanni" <GTosatti@empirix.com>
To: "dev@dpdk.org" <dev@dpdk.org>
Subject: [dpdk-dev] Add option to dpdk-devbind.py to restore kernel driver binding
Date: Tue, 10 Apr 2018 10:55:19 +0000	[thread overview]
Message-ID: <40ff3805d8a647f8bda4a386cc6a3987@bilemail2.empirix.com> (raw)

This patch adds a " --restore" option that will unbind all devices currently bound to DPDK PMDs back to the kernel driver.

--- /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/dpdk-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)

             reply	other threads:[~2018-04-10 10:55 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-10 10:55 Tosatti, Giovanni [this message]
2018-04-10 12:55 ` Burakov, Anatoly
2018-04-10 13:19 ` Burakov, Anatoly
2019-04-05 15:50   ` Ferruh Yigit
2019-04-05 15:50     ` Ferruh Yigit
  -- strict thread matches above, loose matches on Subject: below --
2018-04-10 11:10 Tosatti, Giovanni
2018-03-22 13:41 Tosatti, Giovanni
2018-03-22 14:19 ` Burakov, Anatoly

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40ff3805d8a647f8bda4a386cc6a3987@bilemail2.empirix.com \
    --to=gtosatti@empirix.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).