From patchwork Wed Jan 11 17:10:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Walker, Benjamin" X-Patchwork-Id: 19145 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 40BDCF63E; Wed, 11 Jan 2017 18:10:23 +0100 (CET) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 15EFAF618 for ; Wed, 11 Jan 2017 18:10:20 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP; 11 Jan 2017 09:10:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="921408708" Received: from bwalker-desk.ch.intel.com ([143.182.137.72]) by orsmga003.jf.intel.com with ESMTP; 11 Jan 2017 09:10:19 -0800 From: Ben Walker To: dev@dpdk.org Cc: Ben Walker Date: Wed, 11 Jan 2017 10:10:10 -0700 Message-Id: <20170111171012.126251-1-benjamin.walker@intel.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <1479931644-78960-1-git-send-email-benjamin.walker@intel.com> References: <1479931644-78960-1-git-send-email-benjamin.walker@intel.com> Subject: [dpdk-dev] [PATCH v3 1/3] pci: If a driver's probe function fails, unmap resources. 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" If resources were mapped prior to probe, unmap them if probe fails. This does not handle the case where the kernel driver was forcibly unbound prior to probe. Signed-off-by: Ben Walker --- lib/librte_eal/common/eal_common_pci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index 33485bc..72547bd 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -210,8 +210,11 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d /* call the driver probe() function */ ret = dr->probe(dr, dev); - if (ret) + if (ret) { dev->driver = NULL; + if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) + rte_eal_pci_unmap_device(dev); + } return ret; }