On Wed, Oct 02, 2013 at 11:23:38AM +0200, David Herrmann wrote: > Analog to drm_dev_register(), we now provide drm_dev_unregister() which > does the reverse. drm_dev_put() is still in place and combines the calls > to drm_dev_unregister() and drm_dev_free() so buses don't have to change. > > *_get() and *_put() are used for reference-counting in the kernel. > However, drm_dev_put() definitely does not do any kind of ref-counting. > Hence, use the more appropriate *_register(), *_unregister(), *_alloc() > and *_free() names. > > Signed-off-by: David Herrmann <dh.herrmann@xxxxxxxxx> With the agp_init call moved back into pci code this series is Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> We still have a bit a midlayer smell here, and to correctly fix the init/cleanup order I think a bit more work is required. But this is a definit step up imo. -Daniel > --- > drivers/gpu/drm/drm_stub.c | 61 +++++++++++++++++++++++++++------------------- > include/drm/drmP.h | 1 + > 2 files changed, 37 insertions(+), 25 deletions(-) > > diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c > index 397ab90..a5290b7 100644 > --- a/drivers/gpu/drm/drm_stub.c > +++ b/drivers/gpu/drm/drm_stub.c > @@ -363,8 +363,6 @@ static void drm_unplug_minor(struct drm_minor *minor) > */ > void drm_put_dev(struct drm_device *dev) > { > - struct drm_map_list *r_list, *list_temp; > - > DRM_DEBUG("\n"); > > if (!dev) { > @@ -372,29 +370,7 @@ void drm_put_dev(struct drm_device *dev) > return; > } > > - drm_lastclose(dev); > - > - if (dev->driver->unload) > - dev->driver->unload(dev); > - > - if (dev->driver->bus->agp_destroy) > - dev->driver->bus->agp_destroy(dev); > - > - drm_vblank_cleanup(dev); > - > - list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) > - drm_rmmap(dev, r_list->map); > - > - if (drm_core_check_feature(dev, DRIVER_MODESET)) > - drm_put_minor(&dev->control); > - > - if (dev->render) > - drm_put_minor(&dev->render); > - > - drm_put_minor(&dev->primary); > - > - list_del(&dev->driver_item); > - > + drm_dev_unregister(dev); > drm_dev_free(dev); > } > EXPORT_SYMBOL(drm_put_dev); > @@ -595,3 +571,38 @@ out_unlock: > return ret; > } > EXPORT_SYMBOL(drm_dev_register); > + > +/** > + * drm_dev_unregister - Unregister DRM device > + * @dev: Device to unregister > + * > + * Unregister the DRM device from the system. This does the reverse of > + * drm_dev_register() but does not deallocate the device. The caller must call > + * drm_dev_free() to free all resources. > + */ > +void drm_dev_unregister(struct drm_device *dev) > +{ > + struct drm_map_list *r_list, *list_temp; > + > + drm_lastclose(dev); > + > + if (dev->driver->unload) > + dev->driver->unload(dev); > + > + if (dev->driver->bus->agp_destroy) > + dev->driver->bus->agp_destroy(dev); > + > + drm_vblank_cleanup(dev); > + > + list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) > + drm_rmmap(dev, r_list->map); > + > + if (dev->control) > + drm_put_minor(&dev->control); > + if (dev->render) > + drm_put_minor(&dev->render); > + drm_put_minor(&dev->primary); > + > + list_del(&dev->driver_item); > +} > +EXPORT_SYMBOL(drm_dev_unregister); > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index f4ec6b3..7516d22 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -1649,6 +1649,7 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver, > struct device *parent); > void drm_dev_free(struct drm_device *dev); > int drm_dev_register(struct drm_device *dev); > +void drm_dev_unregister(struct drm_device *dev); > int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int type); > /*@}*/ > > -- > 1.8.4 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel