[RFC 23/34] drm/xe: Ensure D0 on TLB invalidation

Matthew Auld matthew.auld at intel.com
Mon Feb 5 12:41:07 UTC 2024


On 26/01/2024 20:30, Rodrigo Vivi wrote:
> Let's grab the runtime references around TLB invalidation
> to ensure that hardware is awake in D0.
> 
> Suggested-by: Matthew Brost <matthew.brost at intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
>   drivers/gpu/drm/xe/xe_bo.c | 5 +++--
>   drivers/gpu/drm/xe/xe_pt.c | 3 +++
>   2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 686d716c5581..17d3b7f69580 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -22,6 +22,7 @@
>   #include "xe_gt.h"
>   #include "xe_map.h"
>   #include "xe_migrate.h"
> +#include "xe_pm.h"
>   #include "xe_preempt_fence.h"
>   #include "xe_res_cursor.h"
>   #include "xe_trace.h"
> @@ -1136,7 +1137,7 @@ static vm_fault_t xe_gem_fault(struct vm_fault *vmf)
>   	int idx, r = 0;
>   
>   	if (needs_rpm)
> -		xe_device_mem_access_get(xe);
> +		xe_pm_runtime_get(xe);
>   
>   	ret = ttm_bo_vm_reserve(tbo, vmf);
>   	if (ret)
> @@ -1176,7 +1177,7 @@ static vm_fault_t xe_gem_fault(struct vm_fault *vmf)
>   	dma_resv_unlock(tbo->base.resv);
>   out:
>   	if (needs_rpm)
> -		xe_device_mem_access_put(xe);
> +		xe_pm_runtime_put(xe);


Change should be split somewhere else, or needs different commit message?

>   
>   	return ret;
>   }
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index de1030a47588..8d1d4bea7323 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -11,6 +11,7 @@
>   #include "xe_gt.h"
>   #include "xe_gt_tlb_invalidation.h"
>   #include "xe_migrate.h"
> +#include "xe_pm.h"
>   #include "xe_pt_types.h"
>   #include "xe_pt_walk.h"
>   #include "xe_res_cursor.h"
> @@ -1104,8 +1105,10 @@ static void invalidation_fence_work_func(struct work_struct *w)
>   	struct invalidation_fence *ifence =
>   		container_of(w, struct invalidation_fence, work);
>   
> +	xe_pm_runtime_get(gt_to_xe(ifence->gt));
>   	trace_xe_gt_tlb_invalidation_fence_work_func(&ifence->base);
>   	xe_gt_tlb_invalidation_vma(ifence->gt, &ifence->base, ifence->vma);
> +	xe_pm_runtime_put(gt_to_xe(ifence->gt));

Feels slightly scary to call this from a worker? When the caller setup 
the fence stuff, in the prep stage, that would have been a good spot to 
call if_active and attach it.

>   }
>   
>   static int invalidation_fence_init(struct xe_gt *gt,


More information about the Intel-xe mailing list