On Tue, Dec 19, 2017 at 09:58:13AM -0800, Xiao Wang wrote: [...] > static char *intr_mode; > @@ -336,6 +337,9 @@ struct rte_uio_pci_dev { > struct pci_dev *dev = udev->pdev; > int err; > > + if (atomic_inc_return(&udev->refcnt) > 1) > + return 0; > +
Hmm, ideally, you also need to make sure that other calls won't return until the setup is actually done. Best regards, Tiwei Bie > /* set bus master, which was cleared by the reset function */ > pci_set_master(dev); > > @@ -354,6 +358,9 @@ struct rte_uio_pci_dev { > struct rte_uio_pci_dev *udev = info->priv; > struct pci_dev *dev = udev->pdev; > > + if (atomic_dec_return(&udev->refcnt) > 0) > + return 0; > + > /* disable interrupts */ > igbuio_pci_disable_interrupts(udev); > > -- > 1.8.3.1 >