All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6] drm/drv: Convert wedged event string building to seq_buf
@ 2026-08-23  0:33 Mallesh Koujalagi
  2026-08-23  4:21 ` Raag Jadav
  0 siblings, 1 reply; 3+ messages in thread
From: Mallesh Koujalagi @ 2026-08-23  0:33 UTC (permalink / raw)
  To: dri-devel, rodrigo.vivi
  Cc: andrealmeid, christian.koenig, airlied, simona.vetter, mripard,
	maarten.lankhorst, tzimmermann, anshuman.gupta, badal.nilawar,
	riana.tauro, karthik.poosa, sk.anirban, raag.jadav, jani.nikula,
	Mallesh Koujalagi

event_string[] has a fixed size of WEDGE_STR_LEN (32) bytes.
The original scnprintf()-based loop required a manual pre-flight
bounds check.

Replace the manual bookkeeping with seq_buf, which tracks overflow
internally. seq_buf_printf() writes each "method," token into the
buffer.

On overflow, a warning is issued, len retains the position of the
last successful write, so the trailing comma is stripped cleanly
without including any partial method name in the uevent payload.

Assisted-by: Claude:claude-Sonnet-4.6
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2:
- Add proper logic to handle recovery string. (Raag)

v3:
- Convert manual bounds check to seq_buf. (Jani Nikula)
- Use drm_WARN_ONCE() instead of drm_WARN_ON() for overflow. (Raag)

v4:
- Use DECLARE_SEQ_BUF. (Jani)
- Warn overflow at end of loop.

v5:
- Check and warn overflow inside loop. (Raag)

v6:
- Rebase.
- Drop fix. (Raag)
---
 drivers/gpu/drm/drm_drv.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index cb53baa70995..8c0879c336e5 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -36,6 +36,7 @@
 #include <linux/mount.h>
 #include <linux/pseudo_fs.h>
 #include <linux/sched.h>
+#include <linux/seq_buf.h>
 #include <linux/slab.h>
 #include <linux/sprintf.h>
 #include <linux/srcu.h>
@@ -576,27 +577,31 @@ static const char *drm_get_wedge_recovery(unsigned int opt)
 int drm_dev_wedged_event(struct drm_device *dev, unsigned long method,
 			 struct drm_wedge_task_info *info)
 {
-	char event_string[WEDGE_STR_LEN], pid_string[PID_STR_LEN], comm_string[COMM_STR_LEN];
-	char *envp[] = { event_string, NULL, NULL, NULL };
-	const char *recovery = NULL;
-	unsigned int len, opt;
+	DECLARE_SEQ_BUF(event_string, WEDGE_STR_LEN);
+	char pid_string[PID_STR_LEN], comm_string[COMM_STR_LEN];
+	char *envp[4] = { };
+	unsigned int len = 0, opt;
 
-	len = scnprintf(event_string, sizeof(event_string), "%s", "WEDGED=");
+	seq_buf_puts(&event_string, "WEDGED=");
+	envp[0] = event_string.buffer;
 
 	for_each_set_bit(opt, &method, BITS_PER_TYPE(method)) {
-		recovery = drm_get_wedge_recovery(opt);
+		const char *recovery = drm_get_wedge_recovery(opt);
 		if (drm_WARN_ONCE(dev, !recovery, "invalid recovery method %u\n", opt))
 			break;
 
-		len += scnprintf(event_string + len, sizeof(event_string) - len, "%s,", recovery);
+		if (drm_WARN_ON_ONCE(dev, seq_buf_printf(&event_string, "%s,", recovery)))
+			break;
+
+		len = seq_buf_used(&event_string);
 	}
 
-	if (recovery)
-		/* Get rid of trailing comma */
-		event_string[len - 1] = '\0';
+	if (len)
+		/* Strip trailing comma; also discards any partial overflow entry */
+		event_string.buffer[len - 1] = '\0';
 	else
-		/* Caller is unsure about recovery, do the best we can at this point. */
-		snprintf(event_string, sizeof(event_string), "%s", "WEDGED=unknown");
+		/* No complete entry written, do the best we can at this point. */
+		snprintf(event_string.buffer, event_string.size, "%s", "WEDGED=unknown");
 
 	drm_info(dev, "device wedged, %s\n", method == DRM_WEDGE_RECOVERY_NONE ?
 		 "but no recovery needed" : "needs recovery");
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v6] drm/drv: Convert wedged event string building to seq_buf
  2026-08-23  0:33 [PATCH v6] drm/drv: Convert wedged event string building to seq_buf Mallesh Koujalagi
@ 2026-08-23  4:21 ` Raag Jadav
  2026-08-24 20:35   ` Rodrigo Vivi
  0 siblings, 1 reply; 3+ messages in thread
From: Raag Jadav @ 2026-08-23  4:21 UTC (permalink / raw)
  To: Mallesh Koujalagi
  Cc: dri-devel, rodrigo.vivi, andrealmeid, christian.koenig, airlied,
	simona.vetter, mripard, maarten.lankhorst, tzimmermann,
	anshuman.gupta, badal.nilawar, riana.tauro, karthik.poosa,
	sk.anirban, jani.nikula

On Sun, Aug 23, 2026 at 06:03:50AM +0530, Mallesh Koujalagi wrote:
> event_string[] has a fixed size of WEDGE_STR_LEN (32) bytes.
> The original scnprintf()-based loop required a manual pre-flight
> bounds check.
> 
> Replace the manual bookkeeping with seq_buf, which tracks overflow
> internally. seq_buf_printf() writes each "method," token into the
> buffer.
> 
> On overflow, a warning is issued, len retains the position of the
> last successful write, so the trailing comma is stripped cleanly
> without including any partial method name in the uevent payload.
> 
> Assisted-by: Claude:claude-Sonnet-4.6
> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>

Reviewed-by: Raag Jadav <raag.jadav@intel.com>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v6] drm/drv: Convert wedged event string building to seq_buf
  2026-08-23  4:21 ` Raag Jadav
@ 2026-08-24 20:35   ` Rodrigo Vivi
  0 siblings, 0 replies; 3+ messages in thread
From: Rodrigo Vivi @ 2026-08-24 20:35 UTC (permalink / raw)
  To: Raag Jadav
  Cc: Mallesh Koujalagi, dri-devel, andrealmeid, christian.koenig,
	airlied, simona.vetter, mripard, maarten.lankhorst, tzimmermann,
	anshuman.gupta, badal.nilawar, riana.tauro, karthik.poosa,
	sk.anirban, jani.nikula

On Sun, Aug 23, 2026 at 06:21:19AM +0200, Raag Jadav wrote:
> On Sun, Aug 23, 2026 at 06:03:50AM +0530, Mallesh Koujalagi wrote:
> > event_string[] has a fixed size of WEDGE_STR_LEN (32) bytes.
> > The original scnprintf()-based loop required a manual pre-flight
> > bounds check.
> > 
> > Replace the manual bookkeeping with seq_buf, which tracks overflow
> > internally. seq_buf_printf() writes each "method," token into the
> > buffer.
> > 
> > On overflow, a warning is issued, len retains the position of the
> > last successful write, so the trailing comma is stripped cleanly
> > without including any partial method name in the uevent payload.
> > 
> > Assisted-by: Claude:claude-Sonnet-4.6
> > Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> 
> Reviewed-by: Raag Jadav <raag.jadav@intel.com>

pushed to drm-misc-next

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-24 20:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-23  0:33 [PATCH v6] drm/drv: Convert wedged event string building to seq_buf Mallesh Koujalagi
2026-08-23  4:21 ` Raag Jadav
2026-08-24 20:35   ` Rodrigo Vivi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.