]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe/oa: Allow reading after disabling OA stream
authorAshutosh Dixit <ashutosh.dixit@intel.com>
Fri, 13 Mar 2026 05:36:30 +0000 (22:36 -0700)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 19 Mar 2026 13:22:58 +0000 (14:22 +0100)
Some OA data might be present in the OA buffer when OA stream is
disabled. Allow UMD's to retrieve this data, so that all data till the
point when OA stream is disabled can be retrieved.

v2: Update tail pointer after disable (Umesh)

Fixes: efb315d0a013 ("drm/xe/oa/uapi: Read file_operation")
Cc: stable@vger.kernel.org
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Umesh Nerlige Ramappa<umesh.nerlige.ramappa@intel.com>
Link: https://patch.msgid.link/20260313053630.3176100-1-ashutosh.dixit@intel.com
(cherry picked from commit 4ff57c5e8dbba23b5457be12f9709d5c016da16e)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
drivers/gpu/drm/xe/xe_oa.c

index 4dd3f29933cf1a19c85242a21909bb22eb642a1a..fa90441d30529d64756175e9adf5b60b328bf787 100644 (file)
@@ -543,8 +543,7 @@ static ssize_t xe_oa_read(struct file *file, char __user *buf,
        size_t offset = 0;
        int ret;
 
-       /* Can't read from disabled streams */
-       if (!stream->enabled || !stream->sample)
+       if (!stream->sample)
                return -EINVAL;
 
        if (!(file->f_flags & O_NONBLOCK)) {
@@ -1460,6 +1459,10 @@ static void xe_oa_stream_disable(struct xe_oa_stream *stream)
 
        if (stream->sample)
                hrtimer_cancel(&stream->poll_check_timer);
+
+       /* Update stream->oa_buffer.tail to allow any final reports to be read */
+       if (xe_oa_buffer_check_unlocked(stream))
+               wake_up(&stream->poll_wq);
 }
 
 static int xe_oa_enable_preempt_timeslice(struct xe_oa_stream *stream)