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
> >>
next prev parent 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