From 772dce4867eabd68088ab94c30cbaebdf51a5322 Mon Sep 17 00:00:00 2001 From: Yang Xiong Date: Tue, 8 Sep 2020 10:06:30 +0800 Subject: [PATCH] drm/amdkcl: always init drm_device.dev_private Although v5.5-rc2-1531-ge62bf83aa1bb has removed checking on dev->dev_private, some distro with kernel v5.6+ (such as ubuntu20.04-oem) may still access dev->dev_private In case of accessing dev->dev_private in drm code, init dev->dev_private to amdgpu_device. Wrap this initialization with kcl inline function for easy tracking. This patch is caused by the following patches: f9896ea4089f drm/amdkcl: test whether drm checking on dev->dev_private 82fc7acd0b7a drm/amdgpu: Embed drm_device into amdgpu_device (v2) Signed-off-by: Yang Xiong Reviewed-by: Flora Cui Acked-by: Guchun Chen Change-Id: Ida1c4c10753865c036f21c577a3b552f4e14c2d5 --- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 12 +++--------- include/kcl/backport/kcl_drm_backport.h | 8 -------- include/kcl/kcl_drm.h | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 70ba1113689a7..fb91c882326ad 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -1198,9 +1198,7 @@ static int amdgpu_pci_probe(struct pci_dev *pdev, return PTR_ERR(ddev); adev->ddev = ddev; #endif -#ifdef AMDKCL_CHECK_DRM_DEVICE_DEV_PRIVATE - ddev->dev_private = (void *)adev; -#endif + kcl_drm_dev_init_private(ddev, (void *)adev); kcl_drm_vma_offset_manager_init(ddev->vma_offset_manager); #ifdef HAVE_DRM_DRV_DRIVER_ATOMIC @@ -1251,10 +1249,8 @@ static int amdgpu_pci_probe(struct pci_dev *pdev, pci_disable_device(pdev); err_free: #ifndef HAVE_DRM_DRIVER_RELEASE -#ifdef AMDKCL_CHECK_DRM_DEVICE_DEV_PRIVATE - ddev->dev_private = NULL; -#endif kfree(adev); + kcl_drm_dev_fini_private(ddev); #endif drm_dev_put(ddev); return ret; @@ -1280,10 +1276,8 @@ amdgpu_pci_remove(struct pci_dev *pdev) pci_set_drvdata(pdev, NULL); #ifndef HAVE_DRM_DRIVER_RELEASE if (dev) { -#ifdef AMDKCL_CHECK_DRM_DEVICE_DEV_PRIVATE - dev->dev_private = NULL; -#endif kfree(drm_to_adev(dev)); + kcl_drm_dev_fini_private(dev); } #endif drm_dev_put(dev); diff --git a/include/kcl/backport/kcl_drm_backport.h b/include/kcl/backport/kcl_drm_backport.h index 8267885a2f24e..f32e51d37d7d1 100644 --- a/include/kcl/backport/kcl_drm_backport.h +++ b/include/kcl/backport/kcl_drm_backport.h @@ -77,14 +77,6 @@ int _kcl_drm_syncobj_find_fence(struct drm_file *file_private, #define AMDKCL_AMDGPU_DEBUGFS_CLEANUP #endif -/* - * commit v5.5-rc2-1531-ge62bf83aa1bb - * drm/irq: remove check on dev->dev_private - */ -#if DRM_VERSION_CODE < DRM_VERSION(5, 6, 0) -#define AMDKCL_CHECK_DRM_DEVICE_DEV_PRIVATE -#endif - #ifndef HAVE_DRM_GEM_OBJECT_LOOKUP_2ARGS static inline struct drm_gem_object * _kcl_drm_gem_object_lookup(struct drm_file *filp, u32 handle) diff --git a/include/kcl/kcl_drm.h b/include/kcl/kcl_drm.h index df669bd106a4c..741d494cce6f4 100644 --- a/include/kcl/kcl_drm.h +++ b/include/kcl/kcl_drm.h @@ -4,12 +4,29 @@ #include #include +#include #include #include #if defined(HAVE_DRM_COLOR_LUT_SIZE) #include #endif +/* + * commit v5.5-rc2-1531-ge62bf83aa1bb + * drm/irq: remove check on dev->dev_private + */ +static inline +void kcl_drm_dev_init_private(struct drm_device *dev, void *priv) +{ + dev->dev_private = priv; +} + +static inline +void kcl_drm_dev_fini_private(struct drm_device *dev) +{ + dev->dev_private = NULL; +} + #if !defined(HAVE_DRM_DRM_PRINT_H) struct drm_printer { void (*printfn)(struct drm_printer *p, struct va_format *vaf);