Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/57109/?format=api
http://patchwork.dpdk.org/api/patches/57109/?format=api", "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/eb32f6f5cd56f2321f791394b8322cceb5826502.1564062922.git.anatoly.burakov@intel.com/", "project": { "id": 1, "url": "http://patchwork.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<eb32f6f5cd56f2321f791394b8322cceb5826502.1564062922.git.anatoly.burakov@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/eb32f6f5cd56f2321f791394b8322cceb5826502.1564062922.git.anatoly.burakov@intel.com", "date": "2019-07-25T13:55:45", "name": "[v3,2/3] usertools/devbind: check if module is loaded before binding", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "a85c6672cf194e36d57fe37cb2b1c8501fdc1a6b", "submitter": { "id": 4, "url": "http://patchwork.dpdk.org/api/people/4/?format=api", "name": "Anatoly Burakov", "email": "anatoly.burakov@intel.com" }, "delegate": null, "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/eb32f6f5cd56f2321f791394b8322cceb5826502.1564062922.git.anatoly.burakov@intel.com/mbox/", "series": [ { "id": 5751, "url": "http://patchwork.dpdk.org/api/series/5751/?format=api", "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=5751", "date": "2019-07-25T13:55:43", "name": "Small usability improvements for devbind", "version": 3, "mbox": "http://patchwork.dpdk.org/series/5751/mbox/" } ], "comments": "http://patchwork.dpdk.org/api/patches/57109/comments/", "check": "success", "checks": "http://patchwork.dpdk.org/api/patches/57109/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id CDB6F1C35C;\n\tThu, 25 Jul 2019 15:55:57 +0200 (CEST)", "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id B067A1C344\n\tfor <dev@dpdk.org>; Thu, 25 Jul 2019 15:55:51 +0200 (CEST)", "from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t25 Jul 2019 06:55:50 -0700", "from silpixa00399498.ir.intel.com (HELO\n\tsilpixa00399498.ger.corp.intel.com) ([10.237.223.125])\n\tby fmsmga006.fm.intel.com with ESMTP; 25 Jul 2019 06:55:49 -0700" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.64,306,1559545200\"; d=\"scan'208\";a=\"369654505\"", "From": "Anatoly Burakov <anatoly.burakov@intel.com>", "To": "dev@dpdk.org", "Cc": "thomas@monjalon.net, john.mcnamara@intel.com, stephen@networkplumber.org", "Date": "Thu, 25 Jul 2019 14:55:45 +0100", "Message-Id": "<eb32f6f5cd56f2321f791394b8322cceb5826502.1564062922.git.anatoly.burakov@intel.com>", "X-Mailer": "git-send-email 2.17.1", "In-Reply-To": [ "<cover.1564062922.git.anatoly.burakov@intel.com>", "<cover.1564062922.git.anatoly.burakov@intel.com>" ], "References": [ "<cover.1564062922.git.anatoly.burakov@intel.com>", "<cover.1564062435.git.anatoly.burakov@intel.com>\n\t<cover.1564062922.git.anatoly.burakov@intel.com>" ], "Subject": "[dpdk-dev] [PATCH v3 2/3] usertools/devbind: check if module is\n\tloaded before binding", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Currently, if an attempt is made to bind a device to a driver that\nis not loaded, a confusing and misleading error message appears.\nFix it so that, before binding to the driver, we actually check if\nit is loaded in the kernel first.\n\nSigned-off-by: Anatoly Burakov <anatoly.burakov@intel.com>\n---\n usertools/dpdk-devbind.py | 58 +++++++++++++++++++++------------------\n 1 file changed, 32 insertions(+), 26 deletions(-)", "diff": "diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py\nindex fca79e66d..55d9d1a57 100755\n--- a/usertools/dpdk-devbind.py\n+++ b/usertools/dpdk-devbind.py\n@@ -60,6 +60,8 @@\n devices = {}\n # list of supported DPDK drivers\n dpdk_drivers = [\"igb_uio\", \"vfio-pci\", \"uio_pci_generic\"]\n+# list of currently loaded kernel modules\n+loaded_modules = None\n \n # command-line arg flags\n b_flag = None\n@@ -146,6 +148,28 @@ def check_output(args, stderr=None):\n return subprocess.Popen(args, stdout=subprocess.PIPE,\n stderr=stderr).communicate()[0]\n \n+# check if a specific kernel module is loaded\n+def module_is_loaded(module):\n+ global loaded_modules\n+\n+ if loaded_modules:\n+ return module in loaded_modules\n+\n+ # Get list of sysfs modules (both built-in and dynamically loaded)\n+ sysfs_path = '/sys/module/'\n+\n+ # Get the list of directories in sysfs_path\n+ sysfs_mods = [m for m in os.listdir(sysfs_path)\n+ if os.path.isdir(os.path.join(sysfs_path, m))]\n+\n+ # special case for vfio_pci (module is named vfio-pci,\n+ # but its .ko is named vfio_pci)\n+ sysfs_mods = [a if a != 'vfio_pci' else 'vfio-pci' for a in sysfs_mods]\n+\n+ loaded_modules = sysfs_mods\n+\n+ return module in sysfs_mods\n+\n \n def check_modules():\n '''Checks that igb_uio is loaded'''\n@@ -155,35 +179,13 @@ def check_modules():\n mods = [{\"Name\": driver, \"Found\": False} for driver in dpdk_drivers]\n \n # first check if module is loaded\n- try:\n- # Get list of sysfs modules (both built-in and dynamically loaded)\n- sysfs_path = '/sys/module/'\n-\n- # Get the list of directories in sysfs_path\n- sysfs_mods = [os.path.join(sysfs_path, o) for o\n- in os.listdir(sysfs_path)\n- if os.path.isdir(os.path.join(sysfs_path, o))]\n-\n- # Extract the last element of '/sys/module/abc' in the array\n- sysfs_mods = [a.split('/')[-1] for a in sysfs_mods]\n-\n- # special case for vfio_pci (module is named vfio-pci,\n- # but its .ko is named vfio_pci)\n- sysfs_mods = [a if a != 'vfio_pci' else 'vfio-pci' for a in sysfs_mods]\n-\n- for mod in mods:\n- if mod[\"Name\"] in sysfs_mods:\n- mod[\"Found\"] = True\n- except:\n- pass\n+ for mod in mods:\n+ if module_is_loaded(mod[\"Name\"]):\n+ mod[\"Found\"] = True\n \n # check if we have at least one loaded module\n if True not in [mod[\"Found\"] for mod in mods] and b_flag is not None:\n- if b_flag in dpdk_drivers:\n- print(\"Error - no supported modules(DPDK driver) are loaded\")\n- sys.exit(1)\n- else:\n- print(\"Warning - no supported modules(DPDK driver) are loaded\")\n+ print(\"Warning: no supported DPDK kernel modules are loaded\")\n \n # change DPDK driver list to only contain drivers that are loaded\n dpdk_drivers = [mod[\"Name\"] for mod in mods if mod[\"Found\"]]\n@@ -519,6 +521,10 @@ def bind_all(dev_list, driver, force=False):\n # driver generated error - it's not a valid device ID, so all is well\n pass\n \n+ # check if we're attempting to bind to a driver that isn't loaded\n+ if not module_is_loaded(driver):\n+ sys.exit(\"Error: Driver '%s' is not loaded.\" % driver)\n+\n try:\n dev_list = map(dev_id_from_dev_name, dev_list)\n except ValueError as ex:\n", "prefixes": [ "v3", "2/3" ] }{ "id": 57109, "url": "