On Fri, Jun 8, 2012 at 4:52 PM, Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > Otherwise we'll nicely leak this reference counter. Now thanks to the > awesome layering in the drm core, the enable call is done by the pci > boilerplate in drm_pci.c. But the disable can't be done without adding > yet another neat indirection layer just for that. > > So take the simple way and sprinkle pci_disable_device over all pci > modesetting drivers. > > Also don't forget these dear old legacy drivers, prinkle the > pci_disable_device call in drm_pci_exit to cover these, too. > > Signed-Off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> Looks good, one question inlined. CC: Stable? > --- > drivers/gpu/drm/ast/ast_drv.c | 2 ++ > drivers/gpu/drm/cirrus/cirrus_drv.c | 2 ++ > drivers/gpu/drm/drm_pci.c | 4 +++- > drivers/gpu/drm/gma500/psb_drv.c | 3 +++ > drivers/gpu/drm/i915/i915_drv.c | 2 ++ > drivers/gpu/drm/mgag200/mgag200_drv.c | 2 ++ > drivers/gpu/drm/nouveau/nouveau_drv.c | 2 ++ > drivers/gpu/drm/radeon/radeon_drv.c | 2 ++ > drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 ++ > 9 files changed, 20 insertions(+), 1 deletions(-) > > diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c > index d0c4574..6d26e53 100644 > --- a/drivers/gpu/drm/ast/ast_drv.c > +++ b/drivers/gpu/drm/ast/ast_drv.c > @@ -72,6 +72,8 @@ ast_pci_remove(struct pci_dev *pdev) > { > struct drm_device *dev = pci_get_drvdata(pdev); > > + pci_disable_device(dev->pdev); > + > drm_put_dev(dev); > } > > diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c > index d703823..d316ba3 100644 > --- a/drivers/gpu/drm/cirrus/cirrus_drv.c > +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c > @@ -45,6 +45,8 @@ static void cirrus_pci_remove(struct pci_dev *pdev) > { > struct drm_device *dev = pci_get_drvdata(pdev); > > + pci_disable_device(dev->pdev); > + > drm_put_dev(dev); > } > > diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c > index 59e11e4..73218ac 100644 > --- a/drivers/gpu/drm/drm_pci.c > +++ b/drivers/gpu/drm/drm_pci.c > @@ -455,8 +455,10 @@ void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver) > if (driver->driver_features & DRIVER_MODESET) { > pci_unregister_driver(pdriver); > } else { > - list_for_each_entry_safe(dev, tmp, &driver->device_list, driver_item) > + list_for_each_entry_safe(dev, tmp, &driver->device_list, driver_item) { > + pci_disable_device(dev->pdev); I'm assuming that we take a ref in the enter func as well? Cheers, Jakob. _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel