[PATCH v2 4/6] drm/xe: Update VM trace events

Cavitt, Jonathan jonathan.cavitt at intel.com
Wed May 15 20:59:13 UTC 2024


-----Original Message-----
From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Matthew Brost
Sent: Tuesday, May 14, 2024 5:40 PM
To: intel-xe at lists.freedesktop.org
Cc: Brost, Matthew <matthew.brost at intel.com>; Zeng, Oak <oak.zeng at intel.com>; Thomas Hellström <thomas.hellstrom at linux.intel.com>
Subject: [PATCH v2 4/6] drm/xe: Update VM trace events
> 
> The trace events have changed moving to a single job per VM bind IOCTL,
> update the trace events align with old behavior as much as possible.
> 
> Cc: Oak Zeng <oak.zeng at intel.com>
> Cc: Thomas Hellström <thomas.hellstrom at linux.intel.com>
> Signed-off-by: Matthew Brost <matthew.brost at intel.com>

LGTM.
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt

> ---
>  drivers/gpu/drm/xe/xe_trace.h | 10 ++++-----
>  drivers/gpu/drm/xe/xe_vm.c    | 42 +++++++++++++++++++++++++++++++++--
>  2 files changed, 45 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
> index 2d56cfc09e42..f18ae1c63031 100644
> --- a/drivers/gpu/drm/xe/xe_trace.h
> +++ b/drivers/gpu/drm/xe/xe_trace.h
> @@ -423,11 +423,6 @@ DEFINE_EVENT(xe_vma, xe_vma_acc,
>  	     TP_ARGS(vma)
>  );
>  
> -DEFINE_EVENT(xe_vma, xe_vma_fail,
> -	     TP_PROTO(struct xe_vma *vma),
> -	     TP_ARGS(vma)
> -);
> -
>  DEFINE_EVENT(xe_vma, xe_vma_bind,
>  	     TP_PROTO(struct xe_vma *vma),
>  	     TP_ARGS(vma)
> @@ -541,6 +536,11 @@ DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_exit,
>  	     TP_ARGS(vm)
>  );
>  
> +DEFINE_EVENT(xe_vm, xe_vm_ops_fail,
> +	     TP_PROTO(struct xe_vm *vm),
> +	     TP_ARGS(vm)
> +);
> +
>  /* GuC */
>  DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
>  		    TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 39e2314096b9..7fa533902bda 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -2470,6 +2470,38 @@ static int vm_bind_ioctl_ops_lock_and_prep(struct drm_exec *exec,
>  	return 0;
>  }
>  
> +static void op_trace(struct xe_vma_op *op)
> +{
> +	switch (op->base.op) {
> +	case DRM_GPUVA_OP_MAP:
> +		trace_xe_vma_bind(op->map.vma);
> +		break;
> +	case DRM_GPUVA_OP_REMAP:
> +		trace_xe_vma_unbind(gpuva_to_vma(op->base.remap.unmap->va));
> +		if (op->remap.prev)
> +			trace_xe_vma_bind(op->remap.prev);
> +		if (op->remap.next)
> +			trace_xe_vma_bind(op->remap.next);
> +		break;
> +	case DRM_GPUVA_OP_UNMAP:
> +		trace_xe_vma_unbind(gpuva_to_vma(op->base.unmap.va));
> +		break;
> +	case DRM_GPUVA_OP_PREFETCH:
> +		trace_xe_vma_bind(gpuva_to_vma(op->base.prefetch.va));
> +		break;
> +	default:
> +		XE_WARN_ON("NOT POSSIBLE");
> +	}
> +}
> +
> +static void trace_xe_vm_ops_execute(struct xe_vma_ops *vops)
> +{
> +	struct xe_vma_op *op;
> +
> +	list_for_each_entry(op, &vops->list, link)
> +		op_trace(op);
> +}
> +
>  static int vm_ops_setup_tile_args(struct xe_vm *vm, struct xe_vma_ops *vops)
>  {
>  	struct xe_exec_queue *q = vops->q;
> @@ -2513,8 +2545,10 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
>  	if (number_tiles > 1) {
>  		fences = kmalloc_array(number_tiles, sizeof(*fences),
>  				       GFP_KERNEL);
> -		if (!fences)
> -			return ERR_PTR(-ENOMEM);
> +		if (!fences) {
> +			fence = ERR_PTR(-ENOMEM);
> +			goto err_trace;
> +		}
>  	}
>  
>  	for_each_tile(tile, vm->xe, id) {
> @@ -2528,6 +2562,8 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
>  		}
>  	}
>  
> +	trace_xe_vm_ops_execute(vops);
> +
>  	for_each_tile(tile, vm->xe, id) {
>  		if (!vops->pt_update_ops[id].num_ops)
>  			continue;
> @@ -2574,6 +2610,8 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
>  	kfree(fences);
>  	kfree(cf);
>  
> +err_trace:
> +	trace_xe_vm_ops_fail(vm);
>  	return fence;
>  }
>  
> -- 
> 2.34.1
> 
> 


More information about the Intel-xe mailing list