Reviewed-by: Christian König <christian.koenig at amd.com> for this one and #19. Christian. Am 08.03.2017 um 15:12 schrieb Daniel Vetter: > Again no apparent explanation for the split except hysterical raisins. > Merging them also makes it a bit more obviuos what's going on wrt the > runtime pm refdancing. > > Cc: Alex Deucher <alexander.deucher at amd.com> > Cc: Christian König <christian.koenig at amd.com> > Cc: amd-gfx at lists.freedesktop.org > Signed-off-by: Daniel Vetter <daniel.vetter at intel.com> > --- > drivers/gpu/drm/radeon/radeon_drv.c | 3 --- > drivers/gpu/drm/radeon/radeon_kms.c | 42 +++++++++++++------------------------ > 2 files changed, 14 insertions(+), 31 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c > index 956c425e639e..312436a8d9e5 100644 > --- a/drivers/gpu/drm/radeon/radeon_drv.c > +++ b/drivers/gpu/drm/radeon/radeon_drv.c > @@ -108,8 +108,6 @@ void radeon_driver_lastclose_kms(struct drm_device *dev); > int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv); > void radeon_driver_postclose_kms(struct drm_device *dev, > struct drm_file *file_priv); > -void radeon_driver_preclose_kms(struct drm_device *dev, > - struct drm_file *file_priv); > int radeon_suspend_kms(struct drm_device *dev, bool suspend, > bool fbcon, bool freeze); > int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon); > @@ -538,7 +536,6 @@ static struct drm_driver kms_driver = { > DRIVER_PRIME | DRIVER_RENDER, > .load = radeon_driver_load_kms, > .open = radeon_driver_open_kms, > - .preclose = radeon_driver_preclose_kms, > .postclose = radeon_driver_postclose_kms, > .lastclose = radeon_driver_lastclose_kms, > .set_busid = drm_pci_set_busid, > diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c > index 56f35c06742c..a32a62e03a44 100644 > --- a/drivers/gpu/drm/radeon/radeon_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_kms.c > @@ -691,13 +691,26 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) > * @dev: drm dev pointer > * @file_priv: drm file > * > - * On device post close, tear down vm on cayman+ (all asics). > + * On device close, tear down hyperz and cmask filps on r1xx-r5xx > + * (all asics). And tear down vm on cayman+ (all asics). > */ > void radeon_driver_postclose_kms(struct drm_device *dev, > struct drm_file *file_priv) > { > struct radeon_device *rdev = dev->dev_private; > > + pm_runtime_get_sync(dev->dev); > + > + mutex_lock(&rdev->gem.mutex); > + if (rdev->hyperz_filp == file_priv) > + rdev->hyperz_filp = NULL; > + if (rdev->cmask_filp == file_priv) > + rdev->cmask_filp = NULL; > + mutex_unlock(&rdev->gem.mutex); > + > + radeon_uvd_free_handles(rdev, file_priv); > + radeon_vce_free_handles(rdev, file_priv); > + > /* new gpu have virtual address space support */ > if (rdev->family >= CHIP_CAYMAN && file_priv->driver_priv) { > struct radeon_fpriv *fpriv = file_priv->driver_priv; > @@ -721,33 +734,6 @@ void radeon_driver_postclose_kms(struct drm_device *dev, > pm_runtime_put_autosuspend(dev->dev); > } > > -/** > - * radeon_driver_preclose_kms - drm callback for pre close > - * > - * @dev: drm dev pointer > - * @file_priv: drm file > - * > - * On device pre close, tear down hyperz and cmask filps on r1xx-r5xx > - * (all asics). > - */ > -void radeon_driver_preclose_kms(struct drm_device *dev, > - struct drm_file *file_priv) > -{ > - struct radeon_device *rdev = dev->dev_private; > - > - pm_runtime_get_sync(dev->dev); > - > - mutex_lock(&rdev->gem.mutex); > - if (rdev->hyperz_filp == file_priv) > - rdev->hyperz_filp = NULL; > - if (rdev->cmask_filp == file_priv) > - rdev->cmask_filp = NULL; > - mutex_unlock(&rdev->gem.mutex); > - > - radeon_uvd_free_handles(rdev, file_priv); > - radeon_vce_free_handles(rdev, file_priv); > -} > - > /* > * VBlank related functions. > */