From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8BD4EA046B for ; Wed, 24 Jul 2019 18:48:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 684401C24E; Wed, 24 Jul 2019 18:48:10 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id E8F571C249 for ; Wed, 24 Jul 2019 18:48:08 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Jul 2019 09:47:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,303,1559545200"; d="scan'208";a="189132547" Received: from aburakov-mobl1.ger.corp.intel.com (HELO [10.237.220.83]) ([10.237.220.83]) by fmsmga001.fm.intel.com with ESMTP; 24 Jul 2019 09:47:52 -0700 To: Stephen Hemminger Cc: dev@dpdk.org, john.mcnamara@intel.com, thomas@monjalon.net References: <20190724092912.303e8844@hermes.lan> From: "Burakov, Anatoly" Message-ID: <50fdc3ae-566a-6c1f-ca93-7a369bf57507@intel.com> Date: Wed, 24 Jul 2019 17:47:51 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190724092912.303e8844@hermes.lan> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH 1/2] usertools/devbind: add error on forgetting to specify driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" On 24-Jul-19 5:29 PM, Stephen Hemminger wrote: > On Wed, 24 Jul 2019 16:34:43 +0100 > Anatoly Burakov wrote: > >> A common user error is to forget driver to which the PCI devices should >> be bound to. Currently, the error message in this case looks unhelpful >> misleading and indecipherable to anyone but people who know how devbind >> works. >> >> Fix this by checking if the driver string is actually a valid device >> string. If it is, we assume that the user has just forgot to specify the >> driver, and display appropriate error. We also assume that no one will >> name their driver in a format that looks like a PCI address, but that >> seems like a reasonable assumption to make. >> >> Signed-off-by: Anatoly Burakov >> --- >> usertools/dpdk-devbind.py | 33 ++++++++++++++++++++++++++++----- >> 1 file changed, 28 insertions(+), 5 deletions(-) >> >> diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py >> index 542ecffcc..f7c4c6434 100755 >> --- a/usertools/dpdk-devbind.py >> +++ b/usertools/dpdk-devbind.py >> @@ -342,9 +342,8 @@ def dev_id_from_dev_name(dev_name): >> if dev_name in devices[d]["Interface"].split(","): >> return devices[d]["Slot"] >> # if nothing else matches - error >> - print("Unknown device: %s. " >> - "Please specify device in \"bus:slot.func\" format" % dev_name) >> - sys.exit(1) >> + raise ValueError("Unknown device: %s. " >> + "Please specify device in \"bus:slot.func\" format" % dev_name) >> >> >> def unbind_one(dev_id, force): >> @@ -493,7 +492,12 @@ def unbind_all(dev_list, force=False): >> unbind_one(devices[d]["Slot"], force) >> return >> >> - dev_list = map(dev_id_from_dev_name, dev_list) >> + try: >> + dev_list = map(dev_id_from_dev_name, dev_list) >> + except ValueError as ex: >> + print(ex) >> + sys.exit(1) >> + >> for d in dev_list: >> unbind_one(d, force) >> >> @@ -502,7 +506,26 @@ def bind_all(dev_list, driver, force=False): >> """Bind method, takes a list of device locations""" >> global devices >> >> - dev_list = map(dev_id_from_dev_name, dev_list) >> + # a common user error is to forget to specify the driver the devices need to >> + # be bound to. check if the driver is a valid device, and if it is, show >> + # a meaningful error. >> + try: >> + dev_id_from_dev_name(driver) >> + # if we've made it this far, this means that the "driver" was a valid >> + # device string, so it's probably not a valid driver name. >> + print("ERROR: Driver '%s' does not look like a valid driver. " >> + "Did you forget to specify the driver to bind devices to?" % >> + driver) >> + sys.exit(1) >> + except ValueError: >> + # driver generated error - it's not a valid device ID, so all is well >> + pass >> + >> + try: >> + dev_list = map(dev_id_from_dev_name, dev_list) >> + except ValueError as ex: >> + print(ex) >> + sys.exit(1) >> >> for d in dev_list: >> bind_one(d, driver, force) > > It would be better print error messages to stderr. > If you call sys.exit() with a string it will do that. > Will fix in v2. -- Thanks, Anatoly