Hello Chengwen,

Thanks for the reviews!

On Wed, 24 Jun 2026 at 03:24, fengchengwen <[email protected]> wrote:
>
> On 6/23/2026 6:54 PM, David Marchand wrote:
> > When calling this bus cleanup, PCI resources were not unmapped.
> >
> > Fixes: 1cab1a40ea9b ("bus: cleanup devices on shutdown")
> > Cc: [email protected]
> >
> > Signed-off-by: David Marchand <[email protected]>
> > ---
> >  drivers/bus/pci/pci_common.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
> > index fd18b8772b..791e9a7b49 100644
> > --- a/drivers/bus/pci/pci_common.c
> > +++ b/drivers/bus/pci/pci_common.c
> > @@ -344,6 +344,10 @@ pci_cleanup(void)
> >                       rte_errno = errno;
> >                       error = -1;
> >               }
> > +
> > +             if (drv->drv_flags & RTE_PCI_DRV_NEED_MAPPING)
> > +                     rte_pci_unmap_device(dev);
>
> rte_pci_unmap_device() also invoked in some drivers remove callback, e.g.
>   eth_virtio_pci_uninit()
>   ifcvf_pci_remove()
>   ...
>
> In this case it may doulbe-free

$ git grep -l rte_pci_unmap_device drivers :^drivers/bus/pci | cut -d
/ -f 2,3 | sort -u
net/nbl
net/virtio
net/xsc
vdpa/ifc
vdpa/nfp
vdpa/sfc

Those drivers do not set RTE_PCI_DRV_NEED_MAPPING and have their own
logic when it comes to mapping/unmapping resources.

$ for drv in $(git grep -l rte_pci_unmap_device drivers
:^drivers/bus/pci | cut -d / -f 2,3 | sort -u); do git grep -l
RTE_PCI_DRV_NEED_MAPPING drivers/$drv; done
drivers/vdpa/nfp/nfp_vdpa.c

I suspect calling rte_pci_unmap_device twice will end up with some
error before a double free.
Worth a fix on vdpa/nfp regardless, I'll work on it quickly.

Thanks again!


-- 
David Marchand

Reply via email to