On 6/3/26 18:33, Srinivasan Shanmugam wrote:
> Tie the eventfd manager lifetime strictly to the drm_file (amdgpu_fpriv)
> by embedding the manager instead of storing a pointer.
> 
> This removes the need for reference counting and avoids destroying the
> manager from IRQ context
> 
> Cc: Alex Deucher <[email protected]>
> Suggested-by: Christian König <[email protected]>
> Signed-off-by: Srinivasan Shanmugam <[email protected]>

Reviewed-by: Christian König <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 3 +++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 +++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 5d7bfa59424a..a75c68195df9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -104,6 +104,7 @@
>  #include "amdgpu_fdinfo.h"
>  #include "amdgpu_mca.h"
>  #include "amdgpu_aca.h"
> +#include "amdgpu_eventfd.h"
>  #include "amdgpu_ras.h"
>  #include "amdgpu_cper.h"
>  #include "amdgpu_xcp.h"
> @@ -455,6 +456,8 @@ struct amdgpu_fpriv {
>  
>       /** GPU partition selection */
>       uint32_t                xcp_id;
> +
> +     struct amdgpu_eventfd_mgr       eventfd_mgr;
>  };
>  
>  int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index 24526e92f9b8..f5719500527f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -1460,6 +1460,8 @@ int amdgpu_driver_open_kms(struct drm_device *dev, 
> struct drm_file *file_priv)
>               goto out_suspend;
>       }
>  
> +     amdgpu_eventfd_mgr_init(&fpriv->eventfd_mgr);
> +
>       pasid = amdgpu_pasid_alloc(16);
>       if (pasid < 0) {
>               dev_warn(adev->dev, "No more PASIDs available!");
> @@ -1556,6 +1558,9 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,
>       if (!fpriv)
>               return;
>  
> +     /* Drop all subscriptions before fpriv goes away. */
> +     amdgpu_eventfd_mgr_fini(&fpriv->eventfd_mgr);
> +
>       pm_runtime_get_sync(dev->dev);
>  
>       if (amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_UVD) != NULL)

Reply via email to