From: Christoph Manszewski <christoph.manszewski@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Rudnicki@freedesktop.org, Piotr <piotr.rudnicki@intel.com>,
Piatkowski@freedesktop.org,
Dominik Karol <dominik.karol.piatkowski@intel.com>,
Jan Sokolowski <jan.sokolowski@intel.com>,
Christoph Manszewski <christoph.manszewski@intel.com>
Subject: [PATCH i-g-t v4 3/5] xe/xe_eudebug: Add reattach function and make plain connect private
Date: Fri, 20 Feb 2026 16:37:52 +0100 [thread overview]
Message-ID: <20260220153748.210381-10-christoph.manszewski@intel.com> (raw)
In-Reply-To: <20260220153748.210381-7-christoph.manszewski@intel.com>
Convert xe_eudebug_connect (the raw connect ioctl wrapper) back into
a library private function and introduce a dedicated
xe_eudebug_debugger_reattach function that is documented accordingly.
This ensures proper session management and awareness on the library level.
Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
---
lib/xe/xe_eudebug.c | 74 ++++++++++++++++++++-------------
lib/xe/xe_eudebug.h | 2 +-
tests/intel/xe_eudebug_online.c | 6 +--
3 files changed, 48 insertions(+), 34 deletions(-)
diff --git a/lib/xe/xe_eudebug.c b/lib/xe/xe_eudebug.c
index 41eed7614..7a641d2bd 100644
--- a/lib/xe/xe_eudebug.c
+++ b/lib/xe/xe_eudebug.c
@@ -396,22 +396,6 @@ static void client_signal(struct xe_eudebug_client *c,
token_signal(c->p_out, token, value);
}
-static int __xe_eudebug_connect(int fd, pid_t pid, uint32_t flags, uint64_t events)
-{
- struct drm_xe_eudebug_connect param = {
- .pid = pid,
- .flags = flags,
- };
- int debugfd;
-
- debugfd = igt_ioctl(fd, DRM_IOCTL_XE_EUDEBUG_CONNECT, ¶m);
-
- if (debugfd < 0)
- return -errno;
-
- return debugfd;
-}
-
static void event_log_write_to_fd(struct xe_eudebug_event_log *l, int fd)
{
igt_assert_eq(write(fd, &l->head, sizeof(l->head)),
@@ -905,14 +889,20 @@ static void event_log_sort(struct xe_eudebug_event_log *l)
*
* Returns: 0 if the debugger was successfully attached, -errno otherwise.
*/
-int xe_eudebug_connect(int fd, pid_t pid, uint32_t flags)
+static int xe_eudebug_connect(int fd, pid_t pid, uint32_t flags)
{
- int ret;
- uint64_t events = 0; /* events filtering not supported yet! */
+ struct drm_xe_eudebug_connect param = {
+ .pid = pid,
+ .flags = flags,
+ };
+ int debugfd;
- ret = __xe_eudebug_connect(fd, pid, flags, events);
+ debugfd = igt_ioctl(fd, DRM_IOCTL_XE_EUDEBUG_CONNECT, ¶m);
- return ret;
+ if (debugfd < 0)
+ return -errno;
+
+ return debugfd;
}
/**
@@ -1266,6 +1256,39 @@ void xe_eudebug_debugger_destroy(struct xe_eudebug_debugger *d)
free(d);
}
+static int __xe_eudebug_debugger_attach(struct xe_eudebug_debugger *d, pid_t pid)
+{
+ int ret;
+
+ igt_assert_eq(d->fd, -1);
+ igt_assert_eq(d->target_pid, 0);
+
+ ret = xe_eudebug_connect(d->master_fd, pid, 0);
+ if (ret < 0)
+ return ret;
+
+ d->fd = ret;
+ d->target_pid = pid;
+
+ return 0;
+}
+
+/**
+ * xe_eudebug_debugger_reattach:
+ * @d: pointer to the debugger
+ * @pid: pid of the process to attach to
+ *
+ * Re-establishes debugger connection to a process. To be used only for
+ * reconnection scenarios where the debugger was previously attached using
+ * xe_eudebug_debugger_attach() and detached with xe_eudebug_debugger_detach().
+ *
+ * Returns: 0 if the debugger was successfully reattached, -errno otherwise.
+ */
+int xe_eudebug_debugger_reattach(struct xe_eudebug_debugger *d, pid_t pid)
+{
+ return __xe_eudebug_debugger_attach(d, pid);
+}
+
/**
* xe_eudebug_debugger_attach:
* @d: pointer to the debugger
@@ -1280,20 +1303,13 @@ int xe_eudebug_debugger_attach(struct xe_eudebug_debugger *d,
{
int ret;
- igt_assert_eq(d->fd, -1);
- igt_assert_neq(c->pid, 0);
- ret = xe_eudebug_connect(d->master_fd, c->pid, 0);
-
+ ret = __xe_eudebug_debugger_attach(d, c->pid);
if (ret < 0)
return ret;
- d->fd = ret;
- d->target_pid = c->pid;
d->p_client[0] = c->p_in[0];
d->p_client[1] = c->p_in[1];
- igt_debug("debugger connected to %" PRIu64 "\n", d->target_pid);
-
return 0;
}
diff --git a/lib/xe/xe_eudebug.h b/lib/xe/xe_eudebug.h
index f1a2da4d8..23f0d7e34 100644
--- a/lib/xe/xe_eudebug.h
+++ b/lib/xe/xe_eudebug.h
@@ -175,7 +175,6 @@ next_event(struct drm_xe_eudebug_event *e, struct xe_eudebug_event_log *l)
#define XE_EUDEBUG_FILTER_ALL GENMASK(DRM_XE_EUDEBUG_EVENT_PAGEFAULT, 0)
#define XE_EUDEBUG_EVENT_IS_FILTERED(_e, _f) ((1UL << (_e)) & (_f))
-int xe_eudebug_connect(int fd, pid_t pid, uint32_t flags);
const char *xe_eudebug_event_to_str(struct drm_xe_eudebug_event *e, char *buf, size_t len);
struct drm_xe_eudebug_event *
xe_eudebug_event_log_find_seqno(struct xe_eudebug_event_log *l, uint64_t seqno);
@@ -193,6 +192,7 @@ struct xe_eudebug_debugger *
xe_eudebug_debugger_create(int xe, uint64_t flags, void *data);
void xe_eudebug_debugger_destroy(struct xe_eudebug_debugger *d);
int xe_eudebug_debugger_attach(struct xe_eudebug_debugger *d, struct xe_eudebug_client *c);
+int xe_eudebug_debugger_reattach(struct xe_eudebug_debugger *d, pid_t pid);
void xe_eudebug_debugger_start_worker(struct xe_eudebug_debugger *d);
void xe_eudebug_debugger_stop_worker(struct xe_eudebug_debugger *d);
void xe_eudebug_debugger_detach(struct xe_eudebug_debugger *d);
diff --git a/tests/intel/xe_eudebug_online.c b/tests/intel/xe_eudebug_online.c
index 059f918a6..f5f7594e1 100644
--- a/tests/intel/xe_eudebug_online.c
+++ b/tests/intel/xe_eudebug_online.c
@@ -2225,10 +2225,8 @@ static void eu_attention_debugger_detach_trigger(struct xe_eudebug_debugger *d,
*/
reset_debugger_log(d);
- ret = xe_eudebug_connect(d->master_fd, c_pid, 0);
- igt_assert(ret >= 0);
- d->fd = ret;
- d->target_pid = c_pid;
+ ret = xe_eudebug_debugger_reattach(d, c_pid);
+ igt_assert_eq(ret, 0);
/* Discovery worker will replay events that have occurred, which leads to
* a vm event being sent and vm_open_trigger being re-run, which would lead
--
2.47.1
next prev parent reply other threads:[~2026-02-20 15:38 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-20 15:37 [PATCH i-g-t v4 0/5] Improve eudebug test cleanup Christoph Manszewski
2026-02-20 15:37 ` [PATCH i-g-t v4 1/5] tests/xe/xe_eudebug: Change pthread_join to pthread_timedjoin_np Christoph Manszewski
2026-03-10 12:57 ` Rudnicki, Piotr
2026-02-20 15:37 ` [PATCH i-g-t v4 2/5] lib/xe/xe_eudebug: Modify toggle error handling Christoph Manszewski
2026-03-10 12:57 ` Rudnicki, Piotr
2026-02-20 15:37 ` Christoph Manszewski [this message]
2026-03-10 12:58 ` [PATCH i-g-t v4 3/5] xe/xe_eudebug: Add reattach function and make plain connect private Rudnicki, Piotr
2026-02-20 15:37 ` [PATCH i-g-t v4 4/5] lib/xe/xe_eudebug: Track active debugger sessions and close when disabling Christoph Manszewski
2026-03-10 11:17 ` Rudnicki, Piotr
2026-02-20 15:37 ` [PATCH i-g-t v4 5/5] lib/xe/xe_eudebug: Get drm card sysfs path Christoph Manszewski
2026-03-10 12:59 ` Rudnicki, Piotr
2026-02-20 20:43 ` ✓ Xe.CI.BAT: success for Improve eudebug test cleanup (rev4) Patchwork
2026-02-20 21:30 ` ✓ i915.CI.BAT: " Patchwork
2026-02-21 8:55 ` ✗ i915.CI.Full: failure " Patchwork
2026-02-23 9:58 ` ✗ 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=20260220153748.210381-10-christoph.manszewski@intel.com \
--to=christoph.manszewski@intel.com \
--cc=Piatkowski@freedesktop.org \
--cc=Rudnicki@freedesktop.org \
--cc=dominik.karol.piatkowski@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=jan.sokolowski@intel.com \
--cc=piotr.rudnicki@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