From patchwork Fri May 28 13:19:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Laatz X-Patchwork-Id: 93539 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 61A84A0547; Fri, 28 May 2021 15:19:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2924F410F2; Fri, 28 May 2021 15:19:14 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 0B94440040 for ; Fri, 28 May 2021 15:19:11 +0200 (CEST) IronPort-SDR: S2nH+9zQd/FOAI8x/Uy1TgghYeJMZfSMTzz4x4wuv7f448NuDST/IP1eDQ/f0Zgw6N4sOBnhY0 6bcN54vPVxNA== X-IronPort-AV: E=McAfee;i="6200,9189,9997"; a="266840448" X-IronPort-AV: E=Sophos;i="5.83,229,1616482800"; d="scan'208";a="266840448" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2021 06:19:11 -0700 IronPort-SDR: N4TapDC7FRdC9wAvEROoUX49+G5UXPHdZh8pej4ZaO1yB0QSGro/RUO0OLeuyC4UAv/grE6nBm igaeOAnPxXpA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,229,1616482800"; d="scan'208";a="477925108" Received: from silpixa00401026.ir.intel.com ([10.243.23.108]) by orsmga001.jf.intel.com with ESMTP; 28 May 2021 06:19:10 -0700 From: Kevin Laatz To: dev@dpdk.org Cc: bruce.richardson@intel.com, Kevin Laatz Date: Fri, 28 May 2021 14:19:01 +0100 Message-Id: <20210528131902.344423-2-kevin.laatz@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210528131902.344423-1-kevin.laatz@intel.com> References: <20210527132646.3565721-1-kevin.laatz@intel.com> <20210528131902.344423-1-kevin.laatz@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 1/2] raw/ioat: add pci address handling to python script 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" Currently the user needs to find the DSA instance number for any DSA device they would like to configure using this script, which can be cumbersome and error-prone since the instance numbering changes when changing the binding of the devices between vfio-pci and idxd. This patch improved the usability of the script by adding the ability to specify the DSA device to configure using the device's PCI address instead of the DSA instance number. For example, "$dpdk_idxd_cfg.py 0" and "$dpdk_idxd_cfg.py 6a:01.0" are both valid references to the same device (assuming the numbering). Signed-off-by: Kevin Laatz Acked-by: Bruce Richardson --- v2: - split the device reset change into its own patch - changed sysfs dir search - improved error case handling --- drivers/raw/ioat/dpdk_idxd_cfg.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/raw/ioat/dpdk_idxd_cfg.py b/drivers/raw/ioat/dpdk_idxd_cfg.py index ff06d9e240..ad8393a645 100755 --- a/drivers/raw/ioat/dpdk_idxd_cfg.py +++ b/drivers/raw/ioat/dpdk_idxd_cfg.py @@ -29,6 +29,26 @@ def write_values(self, values): f.write(str(contents)) +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}") @@ -68,14 +88,18 @@ 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', type=int, help="DSA instance number") + 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']") parsed_args = arg_p.parse_args(args[1:]) - configure_dsa(parsed_args.dsa_id, parsed_args.q, parsed_args.prefix) + + dsa_id = parsed_args.dsa_id + dsa_id = get_dsa_id(dsa_id) if ':' in dsa_id else dsa_id + configure_dsa(dsa_id, parsed_args.q, parsed_args.prefix) if __name__ == "__main__": From patchwork Fri May 28 13:19:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Laatz X-Patchwork-Id: 93540 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 07A09A0547; Fri, 28 May 2021 15:19:26 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 27A9E41105; Fri, 28 May 2021 15:19:16 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id DE0AA40040 for ; Fri, 28 May 2021 15:19:12 +0200 (CEST) IronPort-SDR: XnC2+mxl7NOK7Dglrf2iDqHbvZwLivasK+J6xK6QfuUWw4PzykLgM67EbO4CSeikThqsYy7lRG lamhmJPZQBKg== X-IronPort-AV: E=McAfee;i="6200,9189,9997"; a="266840453" X-IronPort-AV: E=Sophos;i="5.83,229,1616482800"; d="scan'208";a="266840453" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2021 06:19:12 -0700 IronPort-SDR: pWPt1syFNKAxKCszAJxl1jS+jL0DaKJjEdLIGfNfpBgxu67wLDUxcyn67fBIDzQ9AygLy3UKrX cn1yJHlMCijQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,229,1616482800"; d="scan'208";a="477925117" Received: from silpixa00401026.ir.intel.com ([10.243.23.108]) by orsmga001.jf.intel.com with ESMTP; 28 May 2021 06:19:11 -0700 From: Kevin Laatz To: dev@dpdk.org Cc: bruce.richardson@intel.com, Kevin Laatz Date: Fri, 28 May 2021 14:19:02 +0100 Message-Id: <20210528131902.344423-3-kevin.laatz@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210528131902.344423-1-kevin.laatz@intel.com> References: <20210527132646.3565721-1-kevin.laatz@intel.com> <20210528131902.344423-1-kevin.laatz@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 2/2] raw/ioat: add device reset to python script 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" Currently once a device is configured, the user does not have the ability to reset the device via the script. This patch adds a device reset option to the script. For example "$dpdk_idxd_cfg.py 0 --reset" would reset device 0. Signed-off-by: Kevin Laatz Acked-by: Bruce Richardson --- drivers/raw/ioat/dpdk_idxd_cfg.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/raw/ioat/dpdk_idxd_cfg.py b/drivers/raw/ioat/dpdk_idxd_cfg.py index ad8393a645..138b555040 100755 --- a/drivers/raw/ioat/dpdk_idxd_cfg.py +++ b/drivers/raw/ioat/dpdk_idxd_cfg.py @@ -29,6 +29,12 @@ def write_values(self, values): 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/' @@ -95,11 +101,18 @@ def main(args): 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 - configure_dsa(dsa_id, parsed_args.q, parsed_args.prefix) + if parsed_args.reset: + print(f"Resetting DSA instance {dsa_id}") + reset_device(dsa_id) + else: + print(f"Configuring DSA instance {dsa_id}") + configure_dsa(dsa_id, parsed_args.q, parsed_args.prefix) if __name__ == "__main__":