07/11/2018 00:40, Gaëtan Rivet: > On Tue, Nov 06, 2018 at 10:21:38PM +0000, Zhang, Qi Z wrote: > > From: Dariusz Stojaczyk [mailto:darek.stojac...@gmail.com] > > > From: Darek Stojaczyk <dariusz.stojac...@intel.com> > > > > > > Bus rescan is done e.g. during the device hotplug, where devargs are > > > re-allocated. By not updating the rte_device->devargs pointer we > > > potentially > > > make it a dangling one, as previous devargs could have been (or will be > > > soon) > > > freed. > > > > Yes, this is the similar issue we met on vdev. > > > > The key problem is we have rte_devargs_insert will destroy a devargs which > > is still referenced by a rte_device > > I'm thinking , why not just keep always keep a snapshot of devargs in > > rte_device to make things simple? > > We could introduce a API like rte_dev_assign_devargs(dev, devargs) which > > handled the clone and destroy stuff and can be used for all buses. > > If that idea is acceptable, I would prefer the issue in this patch could be > > fixed in pci_name_set by clone a new copy as workaround. > > > > I agree that it would be useful to have > > rte_devargs_map(devargs, device); > > That will link safely a devargs to a device, but cloning is overkill. > > I disagree that dangling pointers and loose references is fixed by > introducing more cloning and copies of stuff here and there. > > We must tighten the device -> devargs coupling, not loosen it.
This issue is fixed with a different approach: http://git.dpdk.org/dpdk/commit/?id=c7ad7754 devargs: do not replace already inserted device