dma/idxd: move config script from raw driver
authorConor Walsh <conor.walsh@intel.com>
Wed, 20 Oct 2021 16:30:11 +0000 (16:30 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 22 Oct 2021 20:40:59 +0000 (22:40 +0200)
Move the example script for configuring IDXD devices bound to the IDXD
kernel driver from raw to dma, and create a symlink to still allow use from
raw.

Signed-off-by: Conor Walsh <conor.walsh@intel.com>
Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
drivers/dma/idxd/dpdk_idxd_cfg.py [new file with mode: 0755]
drivers/raw/ioat/dpdk_idxd_cfg.py [changed from file to symlink]

diff --git a/drivers/dma/idxd/dpdk_idxd_cfg.py b/drivers/dma/idxd/dpdk_idxd_cfg.py
new file mode 100755 (executable)
index 0000000..fcc2782
--- /dev/null
@@ -0,0 +1,117 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2020 Intel Corporation
+
+"""
+Configure an entire Intel DSA instance, using idxd kernel driver, for DPDK use
+"""
+
+import sys
+import argparse
+import os
+import os.path
+
+
+class SysfsDir:
+    "Used to read/write paths in a sysfs directory"
+    def __init__(self, path):
+        self.path = path
+
+    def read_int(self, filename):
+        "Return a value from sysfs file"
+        with open(os.path.join(self.path, filename)) as f:
+            return int(f.readline())
+
+    def write_values(self, values):
+        "write dictionary, where key is filename and value is value to write"
+        for filename, contents in values.items():
+            with open(os.path.join(self.path, filename), "w") as f:
+                f.write(str(contents))
+
+
+def reset_device(dsa_id):
+    "Reset the DSA device and all its queues"
+    drv_dir = SysfsDir("/sys/bus/dsa/drivers/dsa")
+    drv_dir.write_values({"unbind": f"dsa{dsa_id}"})
+
+
+def get_pci_dir(pci):
+    "Search for the sysfs directory of the PCI device"
+    base_dir = '/sys/bus/pci/devices/'
+    for path, dirs, files in os.walk(base_dir):
+        for dir in dirs:
+            if pci in dir:
+                return os.path.join(base_dir, dir)
+    sys.exit(f"Could not find sysfs directory for device {pci}")
+
+
+def get_dsa_id(pci):
+    "Get the DSA instance ID using the PCI address of the device"
+    pci_dir = get_pci_dir(pci)
+    for path, dirs, files in os.walk(pci_dir):
+        for dir in dirs:
+            if dir.startswith('dsa') and 'wq' not in dir:
+                return int(dir[3:])
+    sys.exit(f"Could not get device ID for device {pci}")
+
+
+def configure_dsa(dsa_id, queues, prefix):
+    "Configure the DSA instance with appropriate number of queues"
+    dsa_dir = SysfsDir(f"/sys/bus/dsa/devices/dsa{dsa_id}")
+    drv_dir = SysfsDir("/sys/bus/dsa/drivers/dsa")
+
+    max_groups = dsa_dir.read_int("max_groups")
+    max_engines = dsa_dir.read_int("max_engines")
+    max_queues = dsa_dir.read_int("max_work_queues")
+    max_work_queues_size = dsa_dir.read_int("max_work_queues_size")
+
+    nb_queues = min(queues, max_queues)
+    if queues > nb_queues:
+        print(f"Setting number of queues to max supported value: {max_queues}")
+
+    # we want one engine per group, and no more engines than queues
+    nb_groups = min(max_engines, max_groups, nb_queues)
+    for grp in range(nb_groups):
+        dsa_dir.write_values({f"engine{dsa_id}.{grp}/group_id": grp})
+
+    # configure each queue
+    for q in range(nb_queues):
+        wq_dir = SysfsDir(os.path.join(dsa_dir.path, f"wq{dsa_id}.{q}"))
+        wq_dir.write_values({"group_id": q % nb_groups,
+                             "type": "user",
+                             "mode": "dedicated",
+                             "name": f"{prefix}_wq{dsa_id}.{q}",
+                             "priority": 1,
+                             "size": int(max_work_queues_size / nb_queues)})
+
+    # enable device and then queues
+    drv_dir.write_values({"bind": f"dsa{dsa_id}"})
+    for q in range(nb_queues):
+        drv_dir.write_values({"bind": f"wq{dsa_id}.{q}"})
+
+
+def main(args):
+    "Main function, does arg parsing and calls config function"
+    arg_p = argparse.ArgumentParser(
+        description="Configure whole DSA device instance for DPDK use")
+    arg_p.add_argument('dsa_id',
+                       help="Specify DSA instance either via DSA instance number or PCI address")
+    arg_p.add_argument('-q', metavar='queues', type=int, default=255,
+                       help="Number of queues to set up")
+    arg_p.add_argument('--name-prefix', metavar='prefix', dest='prefix',
+                       default="dpdk",
+                       help="Prefix for workqueue name to mark for DPDK use [default: 'dpdk']")
+    arg_p.add_argument('--reset', action='store_true',
+                       help="Reset DSA device and its queues")
+    parsed_args = arg_p.parse_args(args[1:])
+
+    dsa_id = parsed_args.dsa_id
+    dsa_id = get_dsa_id(dsa_id) if ':' in dsa_id else dsa_id
+    if parsed_args.reset:
+        reset_device(dsa_id)
+    else:
+        configure_dsa(dsa_id, parsed_args.q, parsed_args.prefix)
+
+
+if __name__ == "__main__":
+    main(sys.argv)
deleted file mode 100755 (executable)
index fcc27822efcca085e0e78aa04a890e1fa0cc0d78..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2020 Intel Corporation
-
-"""
-Configure an entire Intel DSA instance, using idxd kernel driver, for DPDK use
-"""
-
-import sys
-import argparse
-import os
-import os.path
-
-
-class SysfsDir:
-    "Used to read/write paths in a sysfs directory"
-    def __init__(self, path):
-        self.path = path
-
-    def read_int(self, filename):
-        "Return a value from sysfs file"
-        with open(os.path.join(self.path, filename)) as f:
-            return int(f.readline())
-
-    def write_values(self, values):
-        "write dictionary, where key is filename and value is value to write"
-        for filename, contents in values.items():
-            with open(os.path.join(self.path, filename), "w") as f:
-                f.write(str(contents))
-
-
-def reset_device(dsa_id):
-    "Reset the DSA device and all its queues"
-    drv_dir = SysfsDir("/sys/bus/dsa/drivers/dsa")
-    drv_dir.write_values({"unbind": f"dsa{dsa_id}"})
-
-
-def get_pci_dir(pci):
-    "Search for the sysfs directory of the PCI device"
-    base_dir = '/sys/bus/pci/devices/'
-    for path, dirs, files in os.walk(base_dir):
-        for dir in dirs:
-            if pci in dir:
-                return os.path.join(base_dir, dir)
-    sys.exit(f"Could not find sysfs directory for device {pci}")
-
-
-def get_dsa_id(pci):
-    "Get the DSA instance ID using the PCI address of the device"
-    pci_dir = get_pci_dir(pci)
-    for path, dirs, files in os.walk(pci_dir):
-        for dir in dirs:
-            if dir.startswith('dsa') and 'wq' not in dir:
-                return int(dir[3:])
-    sys.exit(f"Could not get device ID for device {pci}")
-
-
-def configure_dsa(dsa_id, queues, prefix):
-    "Configure the DSA instance with appropriate number of queues"
-    dsa_dir = SysfsDir(f"/sys/bus/dsa/devices/dsa{dsa_id}")
-    drv_dir = SysfsDir("/sys/bus/dsa/drivers/dsa")
-
-    max_groups = dsa_dir.read_int("max_groups")
-    max_engines = dsa_dir.read_int("max_engines")
-    max_queues = dsa_dir.read_int("max_work_queues")
-    max_work_queues_size = dsa_dir.read_int("max_work_queues_size")
-
-    nb_queues = min(queues, max_queues)
-    if queues > nb_queues:
-        print(f"Setting number of queues to max supported value: {max_queues}")
-
-    # we want one engine per group, and no more engines than queues
-    nb_groups = min(max_engines, max_groups, nb_queues)
-    for grp in range(nb_groups):
-        dsa_dir.write_values({f"engine{dsa_id}.{grp}/group_id": grp})
-
-    # configure each queue
-    for q in range(nb_queues):
-        wq_dir = SysfsDir(os.path.join(dsa_dir.path, f"wq{dsa_id}.{q}"))
-        wq_dir.write_values({"group_id": q % nb_groups,
-                             "type": "user",
-                             "mode": "dedicated",
-                             "name": f"{prefix}_wq{dsa_id}.{q}",
-                             "priority": 1,
-                             "size": int(max_work_queues_size / nb_queues)})
-
-    # enable device and then queues
-    drv_dir.write_values({"bind": f"dsa{dsa_id}"})
-    for q in range(nb_queues):
-        drv_dir.write_values({"bind": f"wq{dsa_id}.{q}"})
-
-
-def main(args):
-    "Main function, does arg parsing and calls config function"
-    arg_p = argparse.ArgumentParser(
-        description="Configure whole DSA device instance for DPDK use")
-    arg_p.add_argument('dsa_id',
-                       help="Specify DSA instance either via DSA instance number or PCI address")
-    arg_p.add_argument('-q', metavar='queues', type=int, default=255,
-                       help="Number of queues to set up")
-    arg_p.add_argument('--name-prefix', metavar='prefix', dest='prefix',
-                       default="dpdk",
-                       help="Prefix for workqueue name to mark for DPDK use [default: 'dpdk']")
-    arg_p.add_argument('--reset', action='store_true',
-                       help="Reset DSA device and its queues")
-    parsed_args = arg_p.parse_args(args[1:])
-
-    dsa_id = parsed_args.dsa_id
-    dsa_id = get_dsa_id(dsa_id) if ':' in dsa_id else dsa_id
-    if parsed_args.reset:
-        reset_device(dsa_id)
-    else:
-        configure_dsa(dsa_id, parsed_args.q, parsed_args.prefix)
-
-
-if __name__ == "__main__":
-    main(sys.argv)
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..85545548d1f533b349e39b99e648de05f23ba4bc
--- /dev/null
@@ -0,0 +1 @@
+../../dma/idxd/dpdk_idxd_cfg.py
\ No newline at end of file