On Tue, Apr 26, 2016 at 1:29 PM, Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > Except for the ->lasclose driver callback evrything in drm_lastclose() > is all legacy cruft and can be hidden. Which means another > dev->struct_mutex site disappears entirely for modern drivers! > > Also while at it change the return value of drm_lastclose to void > since it will always succeed. No one checks the return value of > close() anyway, ever. > > v2: Move misplaced hunk, spotted by 0day. > > Cc: Thierry Reding <thierry.reding@xxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/drm_fops.c | 42 +++++++++++++++++++----------------------- > drivers/gpu/drm/drm_internal.h | 2 +- > 2 files changed, 20 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c > index 7b5a13cda7a6..c3d0aaac0669 100644 > --- a/drivers/gpu/drm/drm_fops.c > +++ b/drivers/gpu/drm/drm_fops.c > @@ -381,14 +381,26 @@ static void drm_events_release(struct drm_file *file_priv) > */ > static void drm_legacy_dev_reinit(struct drm_device *dev) > { > - if (drm_core_check_feature(dev, DRIVER_MODESET)) > - return; > + if (dev->irq_enabled) > + drm_irq_uninstall(dev); > + > + mutex_lock(&dev->struct_mutex); > + > + drm_legacy_agp_clear(dev); > + > + drm_legacy_sg_cleanup(dev); > + drm_legacy_vma_flush(dev); > + drm_legacy_dma_takedown(dev); > + > + mutex_unlock(&dev->struct_mutex); > > dev->sigdata.lock = NULL; > > dev->context_flag = 0; > dev->last_context = 0; > dev->if_version = 0; > + > + DRM_DEBUG("lastclose completed\n"); > } > > /* > @@ -400,7 +412,7 @@ static void drm_legacy_dev_reinit(struct drm_device *dev) > * > * \sa drm_device > */ > -int drm_lastclose(struct drm_device * dev) > +void drm_lastclose(struct drm_device * dev) > { > DRM_DEBUG("\n"); > > @@ -408,23 +420,8 @@ int drm_lastclose(struct drm_device * dev) > dev->driver->lastclose(dev); > DRM_DEBUG("driver lastclose completed\n"); > > - if (dev->irq_enabled && !drm_core_check_feature(dev, DRIVER_MODESET)) > - drm_irq_uninstall(dev); > - > - mutex_lock(&dev->struct_mutex); > - > - drm_legacy_agp_clear(dev); > - > - drm_legacy_sg_cleanup(dev); > - drm_legacy_vma_flush(dev); > - drm_legacy_dma_takedown(dev); > - > - mutex_unlock(&dev->struct_mutex); > - > - drm_legacy_dev_reinit(dev); > - > - DRM_DEBUG("lastclose completed\n"); > - return 0; > + if (!drm_core_check_feature(dev, DRIVER_MODESET)) > + drm_legacy_dev_reinit(dev); > } > > /** > @@ -445,7 +442,6 @@ int drm_release(struct inode *inode, struct file *filp) > struct drm_file *file_priv = filp->private_data; > struct drm_minor *minor = file_priv->minor; > struct drm_device *dev = minor->dev; > - int retcode = 0; > > mutex_lock(&drm_global_mutex); > > @@ -538,7 +534,7 @@ int drm_release(struct inode *inode, struct file *filp) > */ > > if (!--dev->open_count) { > - retcode = drm_lastclose(dev); > + drm_lastclose(dev); > if (drm_device_is_unplugged(dev)) > drm_put_dev(dev); > } > @@ -546,7 +542,7 @@ int drm_release(struct inode *inode, struct file *filp) > > drm_minor_release(minor); > > - return retcode; > + return 0; > } > EXPORT_SYMBOL(drm_release); > > diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h > index 43cbda3306ac..c81ff4769e7b 100644 > --- a/drivers/gpu/drm/drm_internal.h > +++ b/drivers/gpu/drm/drm_internal.h > @@ -26,7 +26,7 @@ extern unsigned int drm_timestamp_monotonic; > > /* drm_fops.c */ > extern struct mutex drm_global_mutex; > -int drm_lastclose(struct drm_device *dev); > +void drm_lastclose(struct drm_device *dev); > > /* drm_pci.c */ > int drm_pci_set_unique(struct drm_device *dev, > -- > 2.8.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel