From: Ashutosh Dixit <ashutosh.dixit@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Subject: [PATCH i-g-t v2 06/18] tests/intel/xe_oa: Add for_each_oa_unit
Date: Mon, 13 Oct 2025 13:30:29 -0700 [thread overview]
Message-ID: <20251013203042.925115-7-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <20251013203042.925115-1-ashutosh.dixit@intel.com>
Add a for_each_oa_unit iterator, which eliminates code duplication when
iterating over OA units obtained from OA unit query.
v2: Only retain oau argument for for_each_oa_unit() (Umesh)
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
tests/intel/xe_oa.c | 35 +++++++++++++++++++++++------------
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/tests/intel/xe_oa.c b/tests/intel/xe_oa.c
index a4aeaf2c70..8e73182700 100644
--- a/tests/intel/xe_oa.c
+++ b/tests/intel/xe_oa.c
@@ -477,18 +477,34 @@ 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;
}
+static int __first_and_num_oa_units(struct drm_xe_oa_unit **oau)
+{
+ struct drm_xe_query_oa_units *qoa = xe_oa_units(drm_fd);
+
+ *oau = (struct drm_xe_oa_unit *)&qoa->oa_units[0];
+
+ return qoa->num_oa_units;
+}
+
+static struct drm_xe_oa_unit *__next_oa_unit(struct drm_xe_oa_unit *oau)
+{
+ u8 *poau = (u8 *)oau;
+
+ return (struct drm_xe_oa_unit *)(poau + sizeof(*oau) +
+ oau->num_engines * sizeof(oau->eci[0]));
+}
+
+#define for_each_oa_unit(oau) \
+ for (int _i = 0, _num_oa_units = __first_and_num_oa_units(&oau); \
+ _i < _num_oa_units; oau = __next_oa_unit(oau), _i++)
+
static struct drm_xe_oa_unit *oa_unit_by_id(int fd, int id)
{
- struct drm_xe_query_oa_units *qoa = xe_oa_units(fd);
struct drm_xe_oa_unit *oau;
- u8 *poau;
- 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(oau) {
if (oau->oa_unit_id == id)
return oau;
- poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]);
}
return NULL;
@@ -496,16 +512,11 @@ static struct drm_xe_oa_unit *oa_unit_by_id(int fd, int id)
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_oa_unit *oau;
- u8 *poau;
- 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(oau) {
if (oau->oa_unit_type == t)
return oau;
- poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]);
}
return NULL;
--
2.48.1
next prev parent reply other threads:[~2025-10-13 20:30 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-13 20:30 [PATCH i-g-t v2 00/18] Change OA IGT's to run on all OA units Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 01/18] tests/intel/xe_oa: Add OAM formats to lnl_oa_formats Ashutosh Dixit
2025-10-13 20:30 ` [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-13 20:30 ` [PATCH i-g-t v2 03/18] tests/intel/xe_oa: Rename nth_oa_unit to oa_unit_by_id Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 04/18] tests/intel/xe_oa: Change oa_unit_engine to take an oa_unit argument Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 05/18] tests/intel/xe_oa: Add oa_unit_by_type Ashutosh Dixit
2025-10-13 20:30 ` Ashutosh Dixit [this message]
2025-10-14 20:40 ` [PATCH i-g-t v2 06/18] tests/intel/xe_oa: Add for_each_oa_unit Umesh Nerlige Ramappa
2025-10-14 21:59 ` Dixit, Ashutosh
2025-10-13 20:30 ` [PATCH i-g-t 07/18] tests/intel/xe_oa: Convert test_oa_formats to take an OA unit argument Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 08/18] tests/intel/xe_oa: Convert several more tests to take OA unit arguments Ashutosh Dixit
2025-10-13 20:30 ` [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-13 20:30 ` [PATCH i-g-t 10/18] tests/intel/xe_oa: Convert blocking/polling tests to take OA unit arguments Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 11/18] tests/intel/xe_oa: Convert test_mi_rpc to take an OA unit argument Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 12/18] tests/intel/xe_oa: Convert test_single_ctx_render_target_writes_a_counter Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 13/18] tests/intel/xe_oa: Convert OA buffer mmap tests to take OA unit arguments Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 14/18] tests/intel/xe_oa: Convert MMIO trigger " Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 15/18] tests/intel/xe_oa: Convert sync " Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 16/18] tests/intel/xe_oa: Run test_oa_unit_exclusive_stream on multiple OA units Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 17/18] tests/intel/xe_oa: Add new non-zero-reason-all test Ashutosh Dixit
2025-10-13 20:30 ` [PATCH i-g-t 18/18] tests/intel/xe_oa: Constify arguments to various functions Ashutosh Dixit
2025-10-13 23:54 ` ✓ Xe.CI.BAT: success for Change OA IGT's to run on all OA units (rev2) Patchwork
2025-10-14 0:13 ` ✗ i915.CI.BAT: failure " Patchwork
2025-10-14 7:32 ` ✗ Xe.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=20251013203042.925115-7-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