Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Cc: <igt-dev@lists.freedesktop.org>
Subject: Re: [PATCH i-g-t 06/18] tests/intel/xe_oa: Add for_each_oa_unit
Date: Mon, 13 Oct 2025 13:32:11 -0700	[thread overview]
Message-ID: <878qhewnjo.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <aOflfRPZBJLT2Eeh@soc-5CG1426VCC.clients.intel.com>

On Thu, 09 Oct 2025 09:40:29 -0700, Umesh Nerlige Ramappa wrote:
>

Hi Umesh,

> On Wed, Oct 08, 2025 at 04:31:23PM -0700, Umesh Nerlige Ramappa wrote:
> > On Wed, Oct 08, 2025 at 02:17:53PM -0700, Ashutosh Dixit wrote:
> >> Add a for_each_oa_unit iterator, which eliminates code duplication when
> >> iterating over OA units obtained from OA unit query.
> >>
> >> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> >> ---
> >> tests/intel/xe_oa.c | 21 +++++++++++----------
> >> 1 file changed, 11 insertions(+), 10 deletions(-)
> >>
> >> diff --git a/tests/intel/xe_oa.c b/tests/intel/xe_oa.c
> >> index 012f5929ce..bc71bfcd30 100644
> >> --- a/tests/intel/xe_oa.c
> >> +++ b/tests/intel/xe_oa.c
> >> @@ -477,18 +477,21 @@ static struct drm_xe_engine_class_instance *oa_unit_engine(struct drm_xe_oa_unit
> >>	return !oau ? NULL : oau->num_engines ? &oau->eci[random() % oau->num_engines] : NULL;
> >> }
> >>
> >> +#define for_each_oa_unit(qoa, oau, poau, i) \
> >> +	for (i = 0, qoa = xe_oa_units(drm_fd), poau = (u8 *)&qoa->oa_units[0]; \
> >> +	     oau = (struct drm_xe_oa_unit *)poau, i < qoa->num_oa_units; \
> >> +	     poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]), i++)
> >> +
> >> static struct drm_xe_oa_unit *oa_unit_by_id(int fd, int n)
> >> {
> >> -	struct drm_xe_query_oa_units *qoa = xe_oa_units(fd);
> >> +	struct drm_xe_query_oa_units *qoa;
> >>	struct drm_xe_oa_unit *oau;
> >>	u8 *poau;
> >> +	int i;
> >>
> >> -	poau = (u8 *)&qoa->oa_units[0];
> >> -	for (int i = 0; i < qoa->num_oa_units; i++) {
> >> -		oau = (struct drm_xe_oa_unit *)poau;
> >> +	for_each_oa_unit(qoa, oau, poau, i) {
> >>		if (oau->oa_unit_id == n)
> >>			return oau;
> >> -		poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]);
> >>	}
> >>
> >>	return NULL;
> >> @@ -496,16 +499,14 @@ static struct drm_xe_oa_unit *oa_unit_by_id(int fd, int n)
> >>
> >> static struct drm_xe_oa_unit *oa_unit_by_type(int fd, int t)
> >> {
> >> -	struct drm_xe_query_oa_units *qoa = xe_oa_units(fd);
> >> +	struct drm_xe_query_oa_units *qoa;
> >>	struct drm_xe_oa_unit *oau;
> >>	u8 *poau;
> >> +	int i;
> >>
> >> -	poau = (u8 *)&qoa->oa_units[0];
> >> -	for (int i = 0; i < qoa->num_oa_units; i++) {
> >> -		oau = (struct drm_xe_oa_unit *)poau;
> >> +	for_each_oa_unit(qoa, oau, poau, i) {
> >>		if (oau->oa_unit_type == t)
> >>			return oau;
> >> -		poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]);
> >>	}
> >>
> >>	return NULL;
> >
> > If it's possible to keep the interface for iterators simple, I would go
> > for that. i, poau can be hidden from the caller. Something like this:
> >
> > // NOTE: not compiled/tested
> >
> > static u32 xe_oa_first_unit(int fd, struct drm_xe_oa_unit **oau)
> > {
> >        struct drm_xe_query_oa_units *qoa = xe_oa_units(fd);
> >        *oau = &qoa->oa_units[0];
> >
> >        return qoa->num_oa_units;
> > }
> >
> > static void xe_oa_next_unit(struct drm_xe_oa_unit **oau)
> > {
> >	struct drm_xe_oa_unit *poau = *oau;
> >
> >        return (u8 *)poau + sizeof(*poau) + poau->num_engines * sizeof(poau->eci[0]);
>
> Not return, but update *oau.
>
> *oau = (u8 *)poau + sizeof(*poau) + poau->num_engines * sizeof(poau->eci[0]);

In v2, I have implemented something not identical, but very close to
this. But thanks for this suggestion, it has resulted in some cleaned up
code.

Ashutosh



>
> > }
> >
> > #define for_each_oa_unit(fd, oau) \
> >        for (u32 i = 0, num = xe_oa_first_unit(fd, &oau); \
> >             oau && i < num; \
> >             i++, xe_oa_next_unit(&oau))
> >
> > static const struct drm_xe_oa_unit *oa_unit_by_id(int fd, int n)
> > {
> >        struct drm_xe_oa_unit *oau;
> >
> >        for_each_oa_unit(fd, oau) {
> >                if (oau->oa_unit_id == n)
> >                        return oau;
> >        }
> >
> >        return NULL;
> > }
> >
> > static const struct drm_xe_oa_unit *oa_unit_by_type(int fd, int t)
> > {
> >        struct drm_xe_oa_unit *oau;
> >
> >        for_each_oa_unit(fd, oau) {
> >                if (oau->oa_unit_type == t)
> >                        return oau;
> >        }
> >
> >        return NULL;
> > }
> >
> > Thanks,
> > Umesh
> >
> >
> >
> >> --
> >> 2.48.1
> >>

  reply	other threads:[~2025-10-13 20:32 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-08 21:17 [PATCH i-g-t 00/18] Change OA IGT's to run on all OA units Ashutosh Dixit
2025-10-08 21:17 ` [PATCH i-g-t 01/18] tests/intel/xe_oa: Add OAM formats to lnl_oa_formats Ashutosh Dixit
2025-10-08 21:55   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 02/18] tests/intel/xe_oa: Get rid of unnecessary DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE Ashutosh Dixit
2025-10-08 21:55   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 03/18] tests/intel/xe_oa: Rename nth_oa_unit to oa_unit_by_id Ashutosh Dixit
2025-10-08 21:56   ` Umesh Nerlige Ramappa
2025-10-10 21:31     ` Dixit, Ashutosh
2025-10-08 21:17 ` [PATCH i-g-t 04/18] tests/intel/xe_oa: Change oa_unit_engine to take an oa_unit argument Ashutosh Dixit
2025-10-08 22:40   ` Umesh Nerlige Ramappa
2025-10-08 23:19     ` Dixit, Ashutosh
2025-10-08 23:33       ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 05/18] tests/intel/xe_oa: Add oa_unit_by_type Ashutosh Dixit
2025-10-08 22:42   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 06/18] tests/intel/xe_oa: Add for_each_oa_unit Ashutosh Dixit
2025-10-08 23:31   ` Umesh Nerlige Ramappa
2025-10-09 16:40     ` Umesh Nerlige Ramappa
2025-10-13 20:32       ` Dixit, Ashutosh [this message]
2025-10-08 21:17 ` [PATCH i-g-t 07/18] tests/intel/xe_oa: Convert test_oa_formats to take an OA unit argument Ashutosh Dixit
2025-10-10 22:22   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 08/18] tests/intel/xe_oa: Convert several more tests to take OA unit arguments Ashutosh Dixit
2025-10-10 22:24   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 09/18] tests/intel/xe_oa: Convert test_non_zero_reason to take an OA unit argument Ashutosh Dixit
2025-10-10 22:24   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 10/18] tests/intel/xe_oa: Convert blocking/polling tests to take OA unit arguments Ashutosh Dixit
2025-10-10 22:25   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 11/18] tests/intel/xe_oa: Convert test_mi_rpc to take an OA unit argument Ashutosh Dixit
2025-10-10 22:26   ` Umesh Nerlige Ramappa
2025-10-08 21:17 ` [PATCH i-g-t 12/18] tests/intel/xe_oa: Convert test_single_ctx_render_target_writes_a_counter Ashutosh Dixit
2025-10-10 22:27   ` Umesh Nerlige Ramappa
2025-10-08 21:18 ` [PATCH i-g-t 13/18] tests/intel/xe_oa: Convert OA buffer mmap tests to take OA unit arguments Ashutosh Dixit
2025-10-10 22:28   ` Umesh Nerlige Ramappa
2025-10-08 21:18 ` [PATCH i-g-t 14/18] tests/intel/xe_oa: Convert MMIO trigger " Ashutosh Dixit
2025-10-10 22:29   ` Umesh Nerlige Ramappa
2025-10-08 21:18 ` [PATCH i-g-t 15/18] tests/intel/xe_oa: Convert sync " Ashutosh Dixit
2025-10-10 22:30   ` Umesh Nerlige Ramappa
2025-10-08 21:18 ` [PATCH i-g-t 16/18] tests/intel/xe_oa: Run test_oa_unit_exclusive_stream on multiple OA units Ashutosh Dixit
2025-10-10 22:31   ` Umesh Nerlige Ramappa
2025-10-08 21:18 ` [PATCH i-g-t 17/18] tests/intel/xe_oa: Add new non-zero-reason-all test Ashutosh Dixit
2025-10-10 22:32   ` Umesh Nerlige Ramappa
2025-10-08 21:18 ` [PATCH i-g-t 18/18] tests/intel/xe_oa: Constify arguments to various functions Ashutosh Dixit
2025-10-08 22:21 ` ✓ Xe.CI.BAT: success for Change OA IGT's to run on all OA units Patchwork
2025-10-08 22:39 ` ✓ i915.CI.BAT: " Patchwork
2025-10-09  1:49 ` ✗ Xe.CI.Full: failure " Patchwork
2025-10-09 11:47 ` ✗ i915.CI.Full: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878qhewnjo.wl-ashutosh.dixit@intel.com \
    --to=ashutosh.dixit@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=umesh.nerlige.ramappa@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox