On Tue, Nov 22, 2022 at 1:17 PM Xiongfeng Wang <wangxiongfeng2@xxxxxxxxxx> wrote: > > for_each_pci_dev() is implemented by pci_get_device(). The comment of > pci_get_device() says that it will increase the reference count for the > returned pci_dev and also decrease the reference count for the input > pci_dev @from if it is not NULL. > > If we break for_each_pci_dev() loop with pdev not NULL, we need to call > pci_dev_put() to decrease the reference count. Add the missing > pci_dev_put() after the 'out' label. Since pci_dev_put() can handle NULL > input parameter, there is no problem for the 'Device not found' branch. > For the normal path, add pci_dev_put() in amd_gpio_exit(). > > Fixes: f942a7de047d ("gpio: add a driver for GPIO pins found on AMD-8111 south bridge chips") > Signed-off-by: Xiongfeng Wang <wangxiongfeng2@xxxxxxxxxx> > --- > drivers/gpio/gpio-amd8111.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpio/gpio-amd8111.c b/drivers/gpio/gpio-amd8111.c > index 14e6b3e64add..6f3ded619c8b 100644 > --- a/drivers/gpio/gpio-amd8111.c > +++ b/drivers/gpio/gpio-amd8111.c > @@ -226,7 +226,10 @@ static int __init amd_gpio_init(void) > ioport_unmap(gp.pm); > goto out; > } > + return 0; > + > out: > + pci_dev_put(pdev); > return err; > } > > @@ -234,6 +237,7 @@ static void __exit amd_gpio_exit(void) > { > gpiochip_remove(&gp.chip); > ioport_unmap(gp.pm); > + pci_dev_put(gp.pdev); > } > > module_init(amd_gpio_init); > -- > 2.20.1 > Applied for fixes, thanks! Bart