[PATCH i-g-t 1/4] lib/xe_eudebug: Use igt_container_of instead of (void *) casting

Manszewski, Christoph christoph.manszewski at intel.com
Thu Dec 12 16:30:43 UTC 2024


Hi Dominik,

On 11.12.2024 12:40, Dominik Grzegorzek wrote:
> Replace all places in which we casted base to specific event via (void
> *) casting with igt_container_of, as this is more errorless approach.
> 
> Signed-off-by: Dominik Grzegorzek <dominik.grzegorzek at intel.com>

Reviewed-by: Christoph Manszewski <christoph.manszewski at intel.com>

Thanks,
Christoph

> ---
>   lib/xe/xe_eudebug.c | 81 ++++++++++++++++++++++++---------------------
>   1 file changed, 43 insertions(+), 38 deletions(-)
> 
> diff --git a/lib/xe/xe_eudebug.c b/lib/xe/xe_eudebug.c
> index 8f3bb2f1e..f2483028f 100644
> --- a/lib/xe/xe_eudebug.c
> +++ b/lib/xe/xe_eudebug.c
> @@ -140,20 +140,20 @@ static const char *event_members_to_str(struct drm_xe_eudebug_event *e, char *bu
>   {
>   	switch (e->type) {
>   	case DRM_XE_EUDEBUG_EVENT_OPEN: {
> -		struct drm_xe_eudebug_event_client *ec = (void *)e;
> +		struct drm_xe_eudebug_event_client *ec = igt_container_of(e, ec, base);
>   
>   		sprintf(buf, "handle=%llu", ec->client_handle);
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM: {
> -		struct drm_xe_eudebug_event_vm *evm = (void *)e;
> +		struct drm_xe_eudebug_event_vm *evm = igt_container_of(e, evm, base);
>   
>   		sprintf(buf, "client_handle=%llu, handle=%llu",
>   			evm->client_handle, evm->vm_handle);
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE: {
> -		struct drm_xe_eudebug_event_exec_queue *ee = (void *)e;
> +		struct drm_xe_eudebug_event_exec_queue *ee = igt_container_of(e, ee, base);
>   
>   		sprintf(buf, "client_handle=%llu, vm_handle=%llu, "
>   			"exec_queue_handle=%llu, engine_class=%d, exec_queue_width=%d",
> @@ -162,7 +162,8 @@ static const char *event_members_to_str(struct drm_xe_eudebug_event *e, char *bu
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE_PLACEMENTS: {
> -		struct drm_xe_eudebug_event_exec_queue_placements *ee = (void *)e;
> +		struct drm_xe_eudebug_event_exec_queue_placements *ee = igt_container_of(e, ee,
> +											 base);
>   		struct drm_xe_engine_class_instance *instances = (void *)(ee->instances);
>   		int i, l;
>   
> @@ -182,7 +183,7 @@ static const char *event_members_to_str(struct drm_xe_eudebug_event *e, char *bu
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EU_ATTENTION: {
> -		struct drm_xe_eudebug_event_eu_attention *ea = (void *)e;
> +		struct drm_xe_eudebug_event_eu_attention *ea = igt_container_of(e, ea, base);
>   
>   		sprintf(buf, "client_handle=%llu, exec_queue_handle=%llu, "
>   			"lrc_handle=%llu, bitmask_size=%d",
> @@ -191,34 +192,34 @@ static const char *event_members_to_str(struct drm_xe_eudebug_event *e, char *bu
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND: {
> -		struct drm_xe_eudebug_event_vm_bind *evmb = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind *evmb = igt_container_of(e, evmb, base);
>   
>   		sprintf(buf, "client_handle=%llu, vm_handle=%llu, flags=0x%x, num_binds=%u",
>   			evmb->client_handle, evmb->vm_handle, evmb->flags, evmb->num_binds);
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP: {
> -		struct drm_xe_eudebug_event_vm_bind_op *op = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_op *op = igt_container_of(e, op, base);
>   
>   		sprintf(buf, "vm_bind_ref_seqno=%lld, addr=%016llx, range=%llu num_extensions=%llu",
>   			op->vm_bind_ref_seqno, op->addr, op->range, op->num_extensions);
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_UFENCE: {
> -		struct drm_xe_eudebug_event_vm_bind_ufence *f = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_ufence *f = igt_container_of(e, f, base);
>   
>   		sprintf(buf, "vm_bind_ref_seqno=%lld", f->vm_bind_ref_seqno);
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_METADATA: {
> -		struct drm_xe_eudebug_event_metadata *em = (void *)e;
> +		struct drm_xe_eudebug_event_metadata *em = igt_container_of(e, em, base);
>   
>   		sprintf(buf, "client_handle=%llu, metadata_handle=%llu, type=%llu, len=%llu",
>   			em->client_handle, em->metadata_handle, em->type, em->len);
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP_METADATA: {
> -		struct drm_xe_eudebug_event_vm_bind_op_metadata *op = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_op_metadata *op = igt_container_of(e, op, base);
>   
>   		sprintf(buf, "vm_bind_op_ref_seqno=%lld, metadata_handle=%llu, metadata_cookie=%llu",
>   			op->vm_bind_op_ref_seqno, op->metadata_handle, op->metadata_cookie);
> @@ -461,16 +462,18 @@ static int match_fields(struct drm_xe_eudebug_event *a, void *data)
>   
>   	switch (a->type) {
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE: {
> -		struct drm_xe_eudebug_event_exec_queue *ae = (void *)a;
> -		struct drm_xe_eudebug_event_exec_queue *be = (void *)b;
> +		struct drm_xe_eudebug_event_exec_queue *ae = igt_container_of(a, ae, base);
> +		struct drm_xe_eudebug_event_exec_queue *be = igt_container_of(b, be, base);
>   
>   		if (ae->engine_class == be->engine_class && ae->width == be->width)
>   			ret = 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE_PLACEMENTS: {
> -		struct drm_xe_eudebug_event_exec_queue_placements *ae = (void *)a;
> -		struct drm_xe_eudebug_event_exec_queue_placements *be = (void *)b;
> +		struct drm_xe_eudebug_event_exec_queue_placements *ae = igt_container_of(a, ae,
> +											 base);
> +		struct drm_xe_eudebug_event_exec_queue_placements *be = igt_container_of(b, be,
> +											 base);
>   
>   		if (ae->num_placements == be->num_placements &&
>   		    memcmp(ae->instances, be->instances,
> @@ -480,16 +483,16 @@ static int match_fields(struct drm_xe_eudebug_event *a, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND: {
> -		struct drm_xe_eudebug_event_vm_bind *ea = (void *)a;
> -		struct drm_xe_eudebug_event_vm_bind *eb = (void *)b;
> +		struct drm_xe_eudebug_event_vm_bind *ea = igt_container_of(a, ea, base);
> +		struct drm_xe_eudebug_event_vm_bind *eb = igt_container_of(b, eb, base);
>   
>   		if (ea->num_binds == eb->num_binds)
>   			ret = 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP: {
> -		struct drm_xe_eudebug_event_vm_bind_op *ea = (void *)a;
> -		struct drm_xe_eudebug_event_vm_bind_op *eb = (void *)b;
> +		struct drm_xe_eudebug_event_vm_bind_op *ea = igt_container_of(a, ea, base);
> +		struct drm_xe_eudebug_event_vm_bind_op *eb = igt_container_of(b, eb, base);
>   
>   		if (ea->addr == eb->addr && ea->range == eb->range &&
>   		    ea->num_extensions == eb->num_extensions)
> @@ -497,8 +500,8 @@ static int match_fields(struct drm_xe_eudebug_event *a, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP_METADATA: {
> -		struct drm_xe_eudebug_event_vm_bind_op_metadata *ea = (void *)a;
> -		struct drm_xe_eudebug_event_vm_bind_op_metadata *eb = (void *)b;
> +		struct drm_xe_eudebug_event_vm_bind_op_metadata *ea = igt_container_of(a, ea, base);
> +		struct drm_xe_eudebug_event_vm_bind_op_metadata *eb = igt_container_of(b, eb, base);
>   
>   		if (ea->metadata_handle == eb->metadata_handle &&
>   		    ea->metadata_cookie == eb->metadata_cookie)
> @@ -526,35 +529,36 @@ static int match_client_handle(struct drm_xe_eudebug_event *e, void *data)
>   
>   	switch (e->type) {
>   	case DRM_XE_EUDEBUG_EVENT_OPEN: {
> -		struct drm_xe_eudebug_event_client *client = (void *)e;
> +		struct drm_xe_eudebug_event_client *client = igt_container_of(e, client, base);
>   
>   		if (client->client_handle == h)
>   			return 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM: {
> -		struct drm_xe_eudebug_event_vm *vm = (void *)e;
> +		struct drm_xe_eudebug_event_vm *vm = igt_container_of(e, vm, base);
>   
>   		if (vm->client_handle == h)
>   			return 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE: {
> -		struct drm_xe_eudebug_event_exec_queue *ee = (void *)e;
> +	struct drm_xe_eudebug_event_exec_queue *ee = igt_container_of(e, ee, base);
>   
>   		if (ee->client_handle == h)
>   			return 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE_PLACEMENTS: {
> -		struct drm_xe_eudebug_event_exec_queue_placements *ee = (void *)e;
> +		struct drm_xe_eudebug_event_exec_queue_placements *ee = igt_container_of(e, ee,
> +											 base);
>   
>   		if (ee->client_handle == h)
>   			return 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND: {
> -		struct drm_xe_eudebug_event_vm_bind *evmb = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind *evmb = igt_container_of(e, evmb, base);
>   
>   		if (evmb->client_handle == h) {
>   			*bind_seqno = evmb->base.seqno;
> @@ -563,7 +567,7 @@ static int match_client_handle(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP: {
> -		struct drm_xe_eudebug_event_vm_bind_op *eo = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_op *eo = igt_container_of(e, eo, base);
>   
>   		if (eo->vm_bind_ref_seqno == *bind_seqno) {
>   			*bind_op_seqno = eo->base.seqno;
> @@ -572,7 +576,7 @@ static int match_client_handle(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_UFENCE: {
> -		struct drm_xe_eudebug_event_vm_bind_ufence *ef = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_ufence *ef = igt_container_of(e, ef, base);
>   
>   		if (ef->vm_bind_ref_seqno == *bind_seqno)
>   			return 1;
> @@ -580,14 +584,14 @@ static int match_client_handle(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_METADATA: {
> -		struct drm_xe_eudebug_event_metadata *em = (void *)e;
> +		struct drm_xe_eudebug_event_metadata *em = igt_container_of(e, em, base);
>   
>   		if (em->client_handle == h)
>   			return 1;
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP_METADATA: {
> -		struct drm_xe_eudebug_event_vm_bind_op_metadata *eo = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_op_metadata *eo = igt_container_of(e, eo, base);
>   
>   		if (eo->vm_bind_op_ref_seqno == *bind_op_seqno)
>   			return 1;
> @@ -615,7 +619,7 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   
>   	switch (e->type) {
>   	case DRM_XE_EUDEBUG_EVENT_OPEN: {
> -		struct drm_xe_eudebug_event_client *client = (void *)e;
> +		struct drm_xe_eudebug_event_client *client = igt_container_of(e, client, base);
>   		struct drm_xe_eudebug_event_client *filter = data;
>   
>   		if (client->client_handle == filter->client_handle)
> @@ -623,7 +627,7 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM: {
> -		struct drm_xe_eudebug_event_vm *vm = (void *)e;
> +		struct drm_xe_eudebug_event_vm *vm = igt_container_of(e, vm, base);
>   		struct drm_xe_eudebug_event_vm *filter = data;
>   
>   		if (vm->vm_handle == filter->vm_handle)
> @@ -631,7 +635,7 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_EXEC_QUEUE: {
> -		struct drm_xe_eudebug_event_exec_queue *ee = (void *)e;
> +		struct drm_xe_eudebug_event_exec_queue *ee = igt_container_of(e, ee, base);
>   		struct drm_xe_eudebug_event_exec_queue *filter = data;
>   
>   		if (ee->exec_queue_handle == filter->exec_queue_handle)
> @@ -639,7 +643,7 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND: {
> -		struct drm_xe_eudebug_event_vm_bind *evmb = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind *evmb = igt_container_of(e, evmb, base);
>   		struct drm_xe_eudebug_event_vm_bind *filter = data;
>   
>   		if (evmb->vm_handle == filter->vm_handle &&
> @@ -648,7 +652,7 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP: {
> -		struct drm_xe_eudebug_event_vm_bind_op *avmb = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_op *avmb = igt_container_of(e, avmb, base);
>   		struct drm_xe_eudebug_event_vm_bind_op *filter = data;
>   
>   		if (avmb->addr == filter->addr &&
> @@ -657,7 +661,7 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_METADATA: {
> -		struct drm_xe_eudebug_event_metadata *em = (void *)e;
> +		struct drm_xe_eudebug_event_metadata *em = igt_container_of(e, em, base);
>   		struct drm_xe_eudebug_event_metadata *filter = data;
>   
>   		if (em->metadata_handle == filter->metadata_handle)
> @@ -665,7 +669,8 @@ static int match_opposite_resource(struct drm_xe_eudebug_event *e, void *data)
>   		break;
>   	}
>   	case DRM_XE_EUDEBUG_EVENT_VM_BIND_OP_METADATA: {
> -		struct drm_xe_eudebug_event_vm_bind_op_metadata *avmb = (void *)e;
> +		struct drm_xe_eudebug_event_vm_bind_op_metadata *avmb = igt_container_of(e, avmb,
> +											 base);
>   		struct drm_xe_eudebug_event_vm_bind_op_metadata *filter = data;
>   
>   		if (avmb->metadata_handle == filter->metadata_handle &&
> @@ -760,8 +765,8 @@ static void compare_client(struct xe_eudebug_event_log *log1, struct drm_xe_eude
>   			   struct xe_eudebug_event_log *log2, struct drm_xe_eudebug_event *ev2,
>   			   uint32_t filter)
>   {
> -	struct drm_xe_eudebug_event_client *ev1_client = (void *)ev1;
> -	struct drm_xe_eudebug_event_client *ev2_client = (void *)ev2;
> +	struct drm_xe_eudebug_event_client *ev1_client = igt_container_of(ev1, ev1_client, base);
> +	struct drm_xe_eudebug_event_client *ev2_client = igt_container_of(ev2, ev2_client, base);
>   	uint64_t cbs = 0, dbs = 0, cbso = 0, dbso = 0;
>   
>   	struct igt_list_head matched_seqno_list;


More information about the igt-dev mailing list