From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [PATCH v5 10/19] bus: introduce bus scan policies Date: Wed, 05 Jul 2017 01:01:31 +0200 Message-ID: <30613628.0y91ajZ5LG@xps> References: <7052a1a87238f7a1f184b4a853c4fb73c564d3ab.1498001626.git.gaetan.rivet@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev@dpdk.org To: Gaetan Rivet Return-path: Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by dpdk.org (Postfix) with ESMTP id 6BEA12935 for ; Wed, 5 Jul 2017 01:01:33 +0200 (CEST) In-Reply-To: <7052a1a87238f7a1f184b4a853c4fb73c564d3ab.1498001626.git.gaetan.rivet@6wind.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 21/06/2017 01:35, Gaetan Rivet: > Scan policies describe the way a bus should scan the system to search > for possible devices. > > Three flags are introduced: > RTE_BUS_SCAN_UNDEFINED: Configuration is irrelevant for this bus > RTE_BUS_SCAN_WHITELIST: Scanning should be limited to declared devices > RTE_BUS_SCAN_BLACKLIST: Scanning should exclude only declared devices > > Signed-off-by: Gaetan Rivet [...] > @@ -148,6 +164,7 @@ struct rte_bus { > rte_bus_plug_t plug; /**< Probe single device for drivers */ > rte_bus_unplug_t unplug; /**< Remove single device from driver */ > rte_bus_parse_t parse; /**< Parse a device name */ > + struct rte_bus_conf conf; /**< Bus configuration */ > }; You are making explicit what exists currently: - the PCI bus has a whitelist/blacklist policy - the vdev bus is only a whitelist It is a good step to deinterlace some spaghettis in the code. For the next step, the bus should have no policy. It scans everything. We can have a probing policy, but it should not be stored in the bus. I suggest to add a callback in the probe function which would implement the probing policy: FOREACH_DEV_IN_BUS { if (user_callback(dev, user_data)) probe_one(dev); } For compatibility, rte_eal_init() would call rte_bus_probe() with a default callback which checks the whitelists and blacklists for PCI.