> -----Original Message----- > From: Thomas Monjalon [mailto:tho...@monjalon.net] > Sent: Tuesday, January 23, 2018 2:19 PM > To: Ananyev, Konstantin <konstantin.anan...@intel.com> > Cc: Matan Azrad <ma...@mellanox.com>; Gaëtan Rivet <gaetan.ri...@6wind.com>; > Wu, Jingjing <jingjing...@intel.com>; > dev@dpdk.org; Neil Horman <nhor...@tuxdriver.com>; Richardson, Bruce > <bruce.richard...@intel.com> > Subject: Re: [PATCH v3 7/7] app/testpmd: adjust ethdev port ownership > > 23/01/2018 14:34, Ananyev, Konstantin: > > If that' s the use case, then I think you need to set device ownership at > > creation time - > > inside dev_allocate(). > > Again that would avoid such racing conditions inside testpmd. > > The devices must be allocated at a low level layer.
No one arguing about that. But we can provide owner id information to the low level. > When a new device appears (hotplug), an ethdev port should be allocated > automatically if it passes the whitelist/blacklist policy test. > Then we must decide who will manage this device. > I suggest notifying the DPDK libs first. > So a DPDK lib or PMD like failsafe can have the priority to take the > ownership in its notification callback. Possible, but seems a bit overcomplicated. Why not just: Have a global variable process_default_owner_id, that would be init once at startup. Have an LTS variable default_owner_id. It will be used by rte_eth_dev_allocate() caller can set dev->owner_id at creation time, so port allocation and setting ownership - will be an atomic operation. At the exit rte_eth_dev_allocate() will always reset default_owner_id=0: rte_eth_dev_allocate(...) { lock(owner_lock); <allocate_port> owner = RTE_PER_LCORE(default_owner_id); if (owner == 0) owner = process_default_owner_id; set_owner(port, ..., owner); unlock(owner_lock); RTE_PER_LCORE(default_owner_id) = 0; } So callers who don't need any special ownership - don't need to do anything. Special callers (like failsafe) can set default_owenr_id just before calling hotplug handling routine. Konstantin