From: Claude Code Review Bot <claude-review@example.com>
To: dri-devel-reviews@example.com
Subject: Claude review: drm/msm: Add PERFCNTR_CONFIG ioctl
Date: Mon, 25 May 2026 18:21:41 +1000 [thread overview]
Message-ID: <review-patch13-20260522173349.55491-14-robin.clark@oss.qualcomm.com> (raw)
In-Reply-To: <20260522173349.55491-14-robin.clark@oss.qualcomm.com>
Patch Review
This is the core ioctl implementation. Several observations:
**Bug -- Missing `-EAGAIN` for `O_NONBLOCK` reads:**
```c
static ssize_t
msm_perfcntrs_stream_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
...
if (!(file->f_flags & O_NONBLOCK)) {
ret = wait_event_interruptible(stream->poll_wq,
fifo_count(stream) > 0);
if (ret)
return ret;
}
guard(mutex)(&stream->read_lock);
struct circ_buf *fifo = &stream->fifo;
const char *fptr = &fifo->buf[fifo->tail];
count = min_t(size_t, count, fifo_count_to_end(stream));
if (copy_to_user(buf, fptr, count))
return -EFAULT;
...
return count;
```
When `O_NONBLOCK` is set and the FIFO is empty, `fifo_count_to_end` returns 0, `count` becomes 0, and the function returns 0. A return of 0 from `read()` signals EOF to userspace. For a streaming fd, this should return `-EAGAIN`. Standard pattern would be:
```c
count = min_t(size_t, count, fifo_count_to_end(stream));
if (!count)
return -EAGAIN;
```
This affects any userspace using `poll()` + `read()` with `O_NONBLOCK`, which is the expected usage pattern for a perfcntr stream fd.
**Locking and work cancellation design** is well thought-out. The comment about why `cancel_work()` (non-blocking) is used for `sel_work` inside `perfcntr_lock`, followed by `cancel_work_sync()` after dropping the lock in the release path, is excellent documentation of a subtle design decision.
**`fifo_count_to_end` uses `smp_load_acquire`** on the head:
```c
#define fifo_count_to_end(stream) \
(CIRC_CNT_TO_END(smp_load_acquire(&(stream)->fifo.head), ...))
```
This pairs with `smp_store_release(&stream->fifo.head, head)` in `sample_worker`. Correct for the single-producer/single-consumer pattern.
**UABI design**: Using `DRM_IOW` to return an fd via the ioctl return value (rather than a struct field) avoids the fd-leak-on-copy_to_user-fault problem. The comment documenting this is helpful.
**Duplicate group detection**:
```c
if (nr_counters[idx])
return UERR(EINVAL, dev, "groups[%d]: duplicate group", i);
```
This correctly catches duplicate groups, but note that if a group is requested with `nr_countables == 0`, it sets `nr_counters[idx] = 0`. A second occurrence of the same group with 0 countables would not be caught. This is arguably harmless (0 counters allocated either way) but slightly inconsistent.
---
Generated by Claude Code Patch Reviewer
next prev parent reply other threads:[~2026-05-25 8:21 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-22 17:32 [PATCH v9 00/16] drm/msm: Add PERFCNTR_CONFIG ioctl Rob Clark
2026-05-22 17:32 ` [PATCH v9 01/16] drm/msm: Remove obsolete perf infrastructure Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 02/16] drm/msm: Allow CAP_PERFMON for setting SYSPROF Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 03/16] drm/msm/adreno: Sync registers from mesa Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 04/16] drm/msm/registers: Sync gen_header.py " Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 05/16] drm/msm/registers: Add perfcntr json Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 06/16] drm/msm: Add a6xx+ perfcntr tables Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 07/16] drm/msm: Add sysprof accessors Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 08/16] drm/msm/a6xx: Add yield & flush helper Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 09/16] drm/msm: Add per-context perfcntr state Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 10/16] drm/msm: Add basic perfcntr infrastructure Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 11/16] drm/msm/a6xx+: Add support to configure perfcntrs Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 12/16] drm/msm/a8xx: Add perfcntr flush sequence Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:32 ` [PATCH v9 13/16] drm/msm: Add PERFCNTR_CONFIG ioctl Rob Clark
2026-05-25 8:21 ` Claude Code Review Bot [this message]
2026-05-22 17:33 ` [PATCH v9 14/16] drm/msm/a6xx: Increase pwrup_reglist size Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:33 ` [PATCH v9 15/16] drm/msm/a6xx: Append SEL regs to dyn pwrup reglist Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-22 17:33 ` [PATCH v9 16/16] drm/msm/a6xx: Allow IFPC with perfcntr stream Rob Clark
2026-05-25 8:21 ` Claude review: " Claude Code Review Bot
2026-05-25 8:21 ` Claude review: drm/msm: Add PERFCNTR_CONFIG ioctl Claude Code Review Bot
-- strict thread matches above, loose matches on Subject: below --
2026-05-26 14:50 [PATCH v10 00/16] " Rob Clark
2026-05-26 14:50 ` [PATCH v10 13/16] " Rob Clark
2026-05-27 4:42 ` Claude review: " Claude Code Review Bot
2026-05-27 4:42 ` Claude Code Review Bot
2026-05-20 16:23 [PATCH v8 00/16] " Rob Clark
2026-05-20 16:24 ` [PATCH v8 13/16] " Rob Clark
2026-05-25 11:26 ` Claude review: " Claude Code Review Bot
2026-05-25 11:26 ` Claude Code Review Bot
2026-05-14 13:39 [PATCH v6 00/16] " Rob Clark
2026-05-14 13:40 ` [PATCH v6 13/16] " Rob Clark
2026-05-16 0:50 ` Claude review: " Claude Code Review Bot
2026-05-16 0:50 ` Claude Code Review Bot
2026-05-11 12:59 [PATCH v5 00/16] " Rob Clark
2026-05-11 12:59 ` [PATCH v5 13/16] " Rob Clark
2026-05-16 5:20 ` Claude review: " Claude Code Review Bot
2026-05-16 5:20 ` Claude Code Review Bot
2026-05-06 17:10 [PATCH v3 00/16] " Rob Clark
2026-05-06 17:10 ` [PATCH v4 13/16] " Rob Clark
2026-05-07 3:19 ` Claude review: " Claude Code Review Bot
2026-05-07 3:19 ` Claude Code Review Bot
2026-05-04 19:06 [PATCH v3 00/16] " Rob Clark
2026-05-04 19:06 ` [PATCH v3 13/16] " Rob Clark
2026-05-04 22:06 ` Claude review: " Claude Code Review Bot
2026-05-04 22:06 ` Claude Code Review Bot
2026-04-20 22:25 [PATCH 00/13] " Rob Clark
2026-04-20 22:25 ` [PATCH 13/13] " Rob Clark
2026-04-22 23:13 ` Claude review: " Claude Code Review Bot
2026-04-22 23:13 ` Claude Code Review Bot
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=review-patch13-20260522173349.55491-14-robin.clark@oss.qualcomm.com \
--to=claude-review@example.com \
--cc=dri-devel-reviews@example.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