[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