From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A91FD3E0081 for ; Thu, 24 Sep 2026 14:58:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261912; cv=none; b=HzWrcAjhoLVHM7IMzEmg/WvFBrPsIOPw8ctp3P7iq8jMj0OOBhcty81NLqHSPN18rMqPmXBpsMAtXJqGTJ87IVtpShUlkBVUy63D/zsIEpMIPllAvJFyWWbJ0CIsniHg9TJh2hh9FsPzb4lL++UNHv24yUDitoNgqcm1eePCXJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261912; c=relaxed/simple; bh=+5xzwqBwN12gEv4ssy42i2wicH2rwdcYPmLPkH0iOt8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Tr2A+TZ5/9Be0nHpuuaXmL+qzG/lQscH06bBzLStdER+MhQnD90Ktfo+H5bYtBONcN46+nSCLLv0ebMkoloWC0NGXHlPYH6zdjJcCbMA1qljcAAvE3KwmJR0RDsduxOk1pyZtt3afP9CPW/Ppm+8qVjfOSmNVnc7ezVC9Kp1X4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=tP33E7WR; arc=none smtp.client-ip=209.85.221.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tP33E7WR" Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-47f6e8b5996so1975041f8f.2 for ; Thu, 24 Sep 2026 07:58:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261905; x=1790866705; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=S6PHrhtzlOlzacnZWCd9pcPPcI58m9bE8rZaxBxUxWY=; b=tP33E7WRaRRWYHb0b/nicfk55UJNNJkw6mzqzFgBx9C0tL0no0y455aXv2Kt0HcKZ2 k7pGSa82MYs8p63W2QrOfxktE1EBJqZbAngW1PGQzjI0QDRhXlu4Q5Ya2O0dJvEJk4Tx qwQhVTv7fscs5cs9x4C6iSD0KlFKUo3H8bIHbopDsMFc2bEd6IWaFMBnAVypCaqYle/I o5+s2Ayf8s0c3ar0V+8VQHVEfhADXzKQNjFMi6Pk5EXCKHue66alGzIz49aQ4M8FSqH6 npePQ3Cp0/OXUkcErdMHZfKKHyt6y3IaHOV9GEzl1rmPpTjJMkvI72dQ+U9eRYBwMA3c Q0pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261905; x=1790866705; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=S6PHrhtzlOlzacnZWCd9pcPPcI58m9bE8rZaxBxUxWY=; b=sE0BcHVdhXI1eBrHcHxn7+6VNDzcRtiae+Dx3RpZDeg4ZdukGujClFiSj6HK/eOyX5 4PkCnisniKkigokoOPrwfYnavUrmWxj9xDVbP9z7UfHswf5X00w5MeU54R4g+A2tU8cU KtkyQad4Oxib80L7IBQFPR2DKUmVFAQDMUYnKEyODZfmaYeXb2gKYciA8ZoSqo8GrtVc hdx+gWch+T1kknQTW/9pex1tl8PRh8dGJlmm8DEnDT7GmRPXngcM7T+EOJWmaDFIrPNl 39g/7snxZLRQa1GPhS6i1lV7SelL2/y62/xBHdRDTbS1Ah8UhSWpiMlrSBIvHbhymP/+ Q0JQ== X-Forwarded-Encrypted: i=1; AKwUvBzHp3Fm54Sc9OFvUg1R6kyrB5FSvyWT+QYxKla++ObuenjEAy/BuWnFaC7f+X6VxY6FRaeoqtiMjyLaP1Y=@vger.kernel.org X-Gm-Message-State: AFuF++mD/kRRY3k8CukZ1j2uJa2GQEDY+Q6tHiMdmWWq+Hs4wNpqAp+C TmCkOVD17d0ARKS5W53V7uJYBf7zwuW2TDgT+2yQTgNTur1eKPcM63iTP6GHFB4ox7QFAhgwkJP eecTCTc+vBQWV1/b/e8nW2g== X-Received: from wrbfi6.prod.google.com ([2002:a05:6000:4406:b0:488:7084:ff02]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:230b:b0:487:956:7e97 with SMTP id ffacd0b85a97d-48871735978mr4973091f8f.25.1790261904955; Thu, 24 Sep 2026 07:58:24 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:35 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-2-vdonnefort@google.com> Subject: [PATCH v7 01/20] tracing/remotes: Gate tracefs files opening on trace remote registration From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, if a remote fails to register, its resources will leak and will not be properly torn down. To prevent a user accessing a remote tracefs that is about to be destroyed, keep track of the registered remotes in a global list, similarly to trace instances. Gate the tracefs open function based on the presence of the remote in that list. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 100 +++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 13 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index 2d5bc423efca..e8cbbd01964d 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -39,6 +39,7 @@ struct trace_remote_iterator { }; =20 struct trace_remote { + struct list_head node; struct trace_remote_callbacks *cbs; void *priv; struct trace_buffer *trace_buffer; @@ -57,6 +58,9 @@ struct trace_remote { bool tracing_on; }; =20 +static DEFINE_MUTEX(trace_remotes_lock); +static LIST_HEAD(trace_remotes); + static bool trace_remote_loaded(struct trace_remote *remote) { return !!remote->trace_buffer; @@ -170,6 +174,60 @@ static void trace_remote_reset(struct trace_remote *re= mote, int cpu) trace_remote_try_unload(remote); } =20 +static int trace_remote_tracefs_open(struct inode *inode, struct file *fil= p) +{ + void *i_private =3D inode->i_private; + struct trace_remote *r; + + if (!i_private) + return -ENODEV; + + guard(mutex)(&trace_remotes_lock); + + /* i_private is either a struct trace_remote or a struct remote_event */ + list_for_each_entry(r, &trace_remotes, node) { + if (r =3D=3D i_private) + return 0; + if (!r->events) + continue; + if (i_private >=3D (void *)r->events && + i_private < (void *)(r->events + r->nr_events)) + return 0; + } + + return -ENODEV; +} + +#define DEFINE_TRACE_REMOTE_ATTRIBUTE_FUNCS(__name) \ +static int __name ## _open(struct inode *inode, struct file *file) \ +{ \ + int ret =3D trace_remote_tracefs_open(inode, file); \ + \ + if (ret) \ + return ret; \ + \ + return single_open(file, __name ## _show, inode->i_private); \ +} + +#define DEFINE_TRACE_REMOTE_ATTRIBUTE(__name) \ +DEFINE_TRACE_REMOTE_ATTRIBUTE_FUNCS(__name) \ +static const struct file_operations __name ## _fops =3D { \ + .open =3D __name ## _open, \ + .read =3D seq_read, \ + .write =3D __name ## _write, \ + .llseek =3D seq_lseek, \ + .release =3D single_release, \ +} + +#define DEFINE_TRACE_REMOTE_SHOW_ATTRIBUTE(__name) \ +DEFINE_TRACE_REMOTE_ATTRIBUTE_FUNCS(__name) \ +static const struct file_operations __name ## _fops =3D { \ + .open =3D __name ## _open, \ + .read =3D seq_read, \ + .llseek =3D seq_lseek, \ + .release =3D single_release, \ +} + static ssize_t tracing_on_write(struct file *filp, const char __user *ubuf, size_t cnt, l= off_t *ppos) { @@ -198,7 +256,7 @@ static int tracing_on_show(struct seq_file *s, void *un= used) =20 return 0; } -DEFINE_SHOW_STORE_ATTRIBUTE(tracing_on); +DEFINE_TRACE_REMOTE_ATTRIBUTE(tracing_on); =20 static ssize_t buffer_size_kb_write(struct file *filp, const char __user *= ubuf, size_t cnt, loff_t *ppos) @@ -235,7 +293,7 @@ static int buffer_size_kb_show(struct seq_file *s, void= *unused) =20 return 0; } -DEFINE_SHOW_STORE_ATTRIBUTE(buffer_size_kb); +DEFINE_TRACE_REMOTE_ATTRIBUTE(buffer_size_kb); =20 static int trace_remote_get(struct trace_remote *remote, int cpu) { @@ -593,6 +651,11 @@ static int trace_pipe_open(struct inode *inode, struct= file *filp) struct trace_remote *remote =3D inode->i_private; struct trace_remote_iterator *iter; int cpu =3D tracing_get_cpu(inode); + int ret; + + ret =3D trace_remote_tracefs_open(inode, filp); + if (ret) + return ret; =20 guard(mutex)(&remote->lock); =20 @@ -734,22 +797,26 @@ static int trace_open(struct inode *inode, struct fil= e *filp) int cpu =3D tracing_get_cpu(inode); int ret; =20 + ret =3D trace_remote_tracefs_open(inode, filp); + if (ret) + return ret; + if (!(filp->f_mode & FMODE_READ)) return 0; =20 + ret =3D seq_open(filp, &trace_sops); + if (ret) + return ret; + guard(mutex)(&remote->lock); =20 iter =3D trace_remote_iter(remote, cpu, TRI_NONCONSUMING); - if (IS_ERR(iter)) + if (IS_ERR(iter)) { + seq_release(inode, filp); return PTR_ERR(iter); - - ret =3D seq_open(filp, &trace_sops); - if (ret) { - trace_remote_iter_free(iter); - return ret; } =20 - ((struct seq_file *)filp->private_data)->private =3D (void *)iter; + ((struct seq_file *)filp->private_data)->private =3D iter; =20 return 0; } @@ -932,8 +999,12 @@ int trace_remote_register(const char *name, struct tra= ce_remote_callbacks *cbs, } =20 ret =3D cbs->init ? cbs->init(remote->dentry, priv) : 0; - if (ret) + if (ret) { pr_err("Init failed for trace remote '%s' (%d)\n", name, ret); + } else { + guard(mutex)(&trace_remotes_lock); + list_add(&remote->node, &trace_remotes); + } =20 return ret; } @@ -1073,7 +1144,7 @@ static ssize_t remote_event_enable_write(struct file = *filp, const char __user *u =20 return count; } -DEFINE_SHOW_STORE_ATTRIBUTE(remote_event_enable); +DEFINE_TRACE_REMOTE_ATTRIBUTE(remote_event_enable); =20 static int remote_event_id_show(struct seq_file *s, void *unused) { @@ -1083,7 +1154,7 @@ static int remote_event_id_show(struct seq_file *s, v= oid *unused) =20 return 0; } -DEFINE_SHOW_ATTRIBUTE(remote_event_id); +DEFINE_TRACE_REMOTE_SHOW_ATTRIBUTE(remote_event_id); =20 static int remote_event_format_show(struct seq_file *s, void *unused) { @@ -1112,7 +1183,7 @@ static int remote_event_format_show(struct seq_file *= s, void *unused) =20 return 0; } -DEFINE_SHOW_ATTRIBUTE(remote_event_format); +DEFINE_TRACE_REMOTE_SHOW_ATTRIBUTE(remote_event_format); =20 static int remote_event_callback(const char *name, umode_t *mode, void **d= ata, const struct file_operations **fops) @@ -1198,6 +1269,7 @@ static ssize_t remote_events_dir_enable_read(struct f= ile *filp, char __user *ubu } =20 static const struct file_operations remote_events_dir_enable_fops =3D { + .open =3D trace_remote_tracefs_open, .write =3D remote_events_dir_enable_write, .read =3D remote_events_dir_enable_read, }; @@ -1222,6 +1294,7 @@ remote_events_dir_header_page_read(struct file *filp,= char __user *ubuf, size_t } =20 static const struct file_operations remote_events_dir_header_page_fops =3D= { + .open =3D trace_remote_tracefs_open, .read =3D remote_events_dir_header_page_read, }; =20 @@ -1245,6 +1318,7 @@ remote_events_dir_header_event_read(struct file *filp= , char __user *ubuf, size_t } =20 static const struct file_operations remote_events_dir_header_event_fops = =3D { + .open =3D trace_remote_tracefs_open, .read =3D remote_events_dir_header_event_read, }; =20 --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76E0A48F019 for ; Thu, 24 Sep 2026 14:58:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261916; cv=none; b=OlCWXGXu4EPN3bueswk+Pp2F0rDK/sX4KFF4o9AGwNbRVTHgEKyy4F1GN2wsAC12QiX+0hrnT7eH7UyvzaCghjzJAnIZVmr++zmhOig1dV3zM71lWNCEOMF9Fe+gDrzm4eRVzwRlZmPLwgUNQjBEI3WM2/zTfZlRiVFA91Xnvvo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261916; c=relaxed/simple; bh=8IP5M85GEc9DZCVpxOVA7q7jaHvKb5L/UyyoWCRHz7w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=E2oP0pj0Dm03sU/SIjPmTtBB921WmM5zP4BpRrZicsymUfVlwJSmIDdOXfp87YW34z9vRSPE1p59V5+UaweOIngGfpldij4kNfg7jRU8AX2f2X/2o39qN3BgKWOvY4C9SOYrS68RzbogjzJcAWZCnP+m3InL0RksP3g5NEipsjI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=rQTRGKJX; arc=none smtp.client-ip=209.85.221.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="rQTRGKJX" Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-4871575eebbso1812916f8f.2 for ; Thu, 24 Sep 2026 07:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261906; x=1790866706; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SB0f/oZzDgJUNrGoxHodiamfHa/t2U0me9tn4pyQ+fE=; b=rQTRGKJXjBbf9uNJtDdOt7lICUA4vrg+JDCIYl7e2MG6n1nDEFjHSGazwUnsJ1963u QtspGKk/6sfDYuKjTVMwx8Ymx70qgnMu6uHGEDo1zBD7rdwew9AT39eOQgY9MNZscQlx uuqsVkFYrUwkHeqL2SSlpjEkM7mowNjwoBuXz1qGgAWWm7EqAD88MVycHqJyLnPr3pJ8 WVdXZsVPmnDqid1e1Cs/GxZv2QLY7i288NCBmaseeYiXXT6mudzluwUiE0XcP1TZAdid sdRO8ydhZu17st17WGeXCXqEU8OoFwDhThgbyqMn9Xo6aOgjbihUZAmVcOomuMIG33nI ciGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261906; x=1790866706; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SB0f/oZzDgJUNrGoxHodiamfHa/t2U0me9tn4pyQ+fE=; b=j2ZkxPtdyHz2nQEyB7tdk4uQO2acQUE1zt/yF1JQHSxL3ZhQV07CotW6kcP3xtyPO3 0MXne4wg6SJj+qj4Uj/rELwkFYK7vCC76vdPZE/7S/Jz8awhz4RYmU4rtlDF6KI/1KEE fKLMEOeq7uS+Opu7wxIGZomH0pZltdy3oe3Tf1gWYv2uXTRsLwHGjCP1aVxkDA6fhrYZ ac5tKrCuwOK6MUO1rmzvJzXltGV/X7sjSSYr9Hvk0n/y0rlx24mnoC6saR5E0CV9AJQu /NpwBjLuAKB8hQQjegZhynCz8cT1mUeQfkBhTjEA0bi26B95IWeXPNnYzehRZDPdGFj8 S1Ig== X-Forwarded-Encrypted: i=1; AKwUvBwC0dbm4v7QvbHEAQc54dJifX7xYuvdultQVPqaMitTOTjo5LeA7gj5pP/EhqiOW3FKX8kBvTF/2/AsTDg=@vger.kernel.org X-Gm-Message-State: AFuF++kWtVGAwdmlhPkneeCu2XSrZiKpdhtPkx19UkzX0Jycb3gR99nb 6qrpwKdqruvSh2GWZJ6MrNWbsvo1LfMJPKQ+tL74AOcnBqdu6+BAMOvg5rSs1c6IE4u6HIEOZqv i1dDNcRDu9kqQ5zFxi36tow== X-Received: from wrbft9.prod.google.com ([2002:a05:6000:2b09:b0:488:5a78:17c]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2c07:b0:486:fa7b:d3aa with SMTP id ffacd0b85a97d-4887172d776mr4922520f8f.23.1790261905912; Thu, 24 Sep 2026 07:58:25 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:36 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-3-vdonnefort@google.com> Subject: [PATCH v7 02/20] tracing/remotes: Release tracefs,eventfs on registration failure From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In trace_remote_register(), if registration of events or the init callback fails, the created tracefs and eventfs directories are leaked. Release the entire eventfs and tracefs hierarchy on trace_remote registration failure. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 137 ++++++++++++++++++++++++------------ 1 file changed, 93 insertions(+), 44 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index e8cbbd01964d..a1b84290be2d 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -45,7 +45,8 @@ struct trace_remote { struct trace_buffer *trace_buffer; struct trace_buffer_desc *trace_buffer_desc; struct dentry *dentry; - struct eventfs_inode *eventfs; + struct eventfs_inode *eventfs_root; + struct eventfs_inode *eventfs_subdir; struct remote_event *events; unsigned long nr_events; unsigned long trace_buffer_size; @@ -60,6 +61,7 @@ struct trace_remote { =20 static DEFINE_MUTEX(trace_remotes_lock); static LIST_HEAD(trace_remotes); +static struct dentry *trace_remotes_root; =20 static bool trace_remote_loaded(struct trace_remote *remote) { @@ -865,23 +867,21 @@ static const struct file_operations trace_fops =3D { static int trace_remote_init_tracefs(const char *name, struct trace_remote= *remote) { struct dentry *remote_d, *percpu_d, *d; - static struct dentry *root; - static DEFINE_MUTEX(lock); bool root_inited =3D false; int cpu; =20 - guard(mutex)(&lock); + lockdep_assert_held(&trace_remotes_lock); =20 - if (!root) { - root =3D tracefs_create_dir(TRACEFS_DIR, NULL); - if (!root) { + if (!trace_remotes_root) { + trace_remotes_root =3D tracefs_create_dir(TRACEFS_DIR, NULL); + if (!trace_remotes_root) { pr_err("Failed to create tracefs dir "TRACEFS_DIR"\n"); return -ENOMEM; } root_inited =3D true; } =20 - remote_d =3D tracefs_create_dir(name, root); + remote_d =3D tracefs_create_dir(name, trace_remotes_root); if (!remote_d) { pr_err("Failed to create tracefs dir "TRACEFS_DIR"%s/\n", name); goto err; @@ -939,8 +939,8 @@ static int trace_remote_init_tracefs(const char *name, = struct trace_remote *remo =20 err: if (root_inited) { - tracefs_remove(root); - root =3D NULL; + tracefs_remove(trace_remotes_root); + trace_remotes_root =3D NULL; } else { tracefs_remove(remote_d); } @@ -948,8 +948,26 @@ static int trace_remote_init_tracefs(const char *name,= struct trace_remote *remo return -ENOMEM; } =20 +static void trace_remote_remove_tracefs(struct trace_remote *remote) +{ + lockdep_assert_held(&trace_remotes_lock); + + if (!remote->dentry) + return; + + tracefs_remove(remote->dentry); + remote->dentry =3D NULL; + + if (!list_empty(&trace_remotes)) + return; + + tracefs_remove(trace_remotes_root); + trace_remotes_root =3D NULL; +} + static int trace_remote_register_events(const char *remote_name, struct tr= ace_remote *remote, struct remote_event *events, size_t nr_events); +static void trace_remote_unregister_events(struct trace_remote *remote); =20 /** * trace_remote_register() - Register a Tracefs remote @@ -972,10 +990,9 @@ static int trace_remote_register_events(const char *re= mote_name, struct trace_re int trace_remote_register(const char *name, struct trace_remote_callbacks = *cbs, void *priv, struct remote_event *events, size_t nr_events) { - struct trace_remote *remote; + struct trace_remote *remote __free(kfree) =3D kzalloc_obj(*remote); int ret; =20 - remote =3D kzalloc_obj(*remote); if (!remote) return -ENOMEM; =20 @@ -986,13 +1003,15 @@ int trace_remote_register(const char *name, struct t= race_remote_callbacks *cbs, mutex_init(&remote->lock); init_rwsem(&remote->reader_lock); =20 - if (trace_remote_init_tracefs(name, remote)) { - kfree(remote); - return -ENOMEM; - } + guard(mutex)(&trace_remotes_lock); + + ret =3D trace_remote_init_tracefs(name, remote); + if (ret) + return ret; =20 ret =3D trace_remote_register_events(name, remote, events, nr_events); if (ret) { + trace_remote_remove_tracefs(remote); pr_err("Failed to register events for trace remote '%s' (%d)\n", name, ret); return ret; @@ -1000,13 +1019,16 @@ int trace_remote_register(const char *name, struct = trace_remote_callbacks *cbs, =20 ret =3D cbs->init ? cbs->init(remote->dentry, priv) : 0; if (ret) { + trace_remote_unregister_events(remote); + trace_remote_remove_tracefs(remote); pr_err("Init failed for trace remote '%s' (%d)\n", name, ret); - } else { - guard(mutex)(&trace_remotes_lock); - list_add(&remote->node, &trace_remotes); + return ret; } =20 - return ret; + list_add(&remote->node, &trace_remotes); + retain_and_null_ptr(remote); + + return 0; } EXPORT_SYMBOL_GPL(trace_remote_register); =20 @@ -1349,7 +1371,6 @@ static int remote_events_dir_callback(const char *nam= e, umode_t *mode, void **da static int trace_remote_init_eventfs(const char *remote_name, struct trace= _remote *remote, struct remote_event *evt) { - struct eventfs_inode *eventfs =3D remote->eventfs; static struct eventfs_entry dir_entries[] =3D { { .name =3D "enable", @@ -1374,35 +1395,37 @@ static int trace_remote_init_eventfs(const char *re= mote_name, struct trace_remot .callback =3D remote_event_callback, } }; - bool eventfs_create =3D false; + struct eventfs_inode *eventfs_root, *eventfs_subdir, *e; =20 - if (!eventfs) { - eventfs =3D eventfs_create_events_dir("events", remote->dentry, dir_entr= ies, - ARRAY_SIZE(dir_entries), remote); - if (IS_ERR(eventfs)) - return PTR_ERR(eventfs); + eventfs_root =3D remote->eventfs_root; + eventfs_subdir =3D remote->eventfs_subdir; + if (!eventfs_root) { + eventfs_root =3D eventfs_create_events_dir("events", remote->dentry, dir= _entries, + ARRAY_SIZE(dir_entries), remote); + if (IS_ERR(eventfs_root)) + return PTR_ERR(eventfs_root); =20 /* * Create similar hierarchy as local events even if a single system is s= upported at * the moment */ - eventfs =3D eventfs_create_dir(remote_name, eventfs, NULL, 0, NULL); - if (IS_ERR(eventfs)) - return PTR_ERR(eventfs); - - remote->eventfs =3D eventfs; - eventfs_create =3D true; - } - - eventfs =3D eventfs_create_dir(evt->name, eventfs, entries, ARRAY_SIZE(en= tries), evt); - if (IS_ERR(eventfs)) { - if (eventfs_create) { - eventfs_remove_events_dir(remote->eventfs); - remote->eventfs =3D NULL; + eventfs_subdir =3D eventfs_create_dir(remote_name, eventfs_root, NULL, 0= , NULL); + if (IS_ERR(eventfs_subdir)) { + eventfs_remove_events_dir(eventfs_root); + return PTR_ERR(eventfs_subdir); } - return PTR_ERR(eventfs); } =20 + e =3D eventfs_create_dir(evt->name, eventfs_subdir, entries, ARRAY_SIZE(e= ntries), evt); + if (IS_ERR(e)) { + if (!remote->eventfs_root) + eventfs_remove_events_dir(eventfs_root); + return PTR_ERR(e); + } + + remote->eventfs_root =3D eventfs_root; + remote->eventfs_subdir =3D eventfs_subdir; + return 0; } =20 @@ -1417,11 +1440,11 @@ static int trace_remote_attach_events(struct trace_= remote *remote, struct remote if (evt->remote) return -EEXIST; =20 - evt->remote =3D remote; - /* We need events to be sorted for efficient lookup */ if (i && evt->id <=3D events[i - 1].id) return -EINVAL; + + evt->remote =3D remote; } =20 remote->events =3D events; @@ -1430,14 +1453,33 @@ static int trace_remote_attach_events(struct trace_= remote *remote, struct remote return 0; } =20 +static void trace_remote_detach_events(struct trace_remote *remote, struct= remote_event *events, + size_t nr_events) +{ + int i; + + for (i =3D 0; i < nr_events; i++) { + struct remote_event *evt =3D &events[i]; + + if (evt->remote =3D=3D remote) + evt->remote =3D NULL; + } + + remote->events =3D NULL; + remote->nr_events =3D 0; +} + static int trace_remote_register_events(const char *remote_name, struct tr= ace_remote *remote, struct remote_event *events, size_t nr_events) { int i, ret; =20 ret =3D trace_remote_attach_events(remote, events, nr_events); - if (ret) + if (ret) { + /* It is safe to call detach on a half-registered array */ + trace_remote_detach_events(remote, events, nr_events); return ret; + } =20 for (i =3D 0; i < nr_events; i++) { struct remote_event *evt =3D &events[i]; @@ -1451,6 +1493,13 @@ static int trace_remote_register_events(const char *= remote_name, struct trace_re return 0; } =20 +static void trace_remote_unregister_events(struct trace_remote *remote) +{ + trace_remote_detach_events(remote, remote->events, remote->nr_events); + if (remote->eventfs_root) + eventfs_remove_events_dir(remote->eventfs_root); +} + static int __cmp_events(const void *key, const void *data) { const struct remote_event *evt =3D data; --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 317173B83F9 for ; Thu, 24 Sep 2026 14:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261915; cv=none; b=q1pu+TfBoGyax5lZb3DsUVMNV5NS6rJtSqZaumr2i1Iax8fNQeiBhOCJL4epx65ahnwv0dY6RSaR+yUhL8o+5mb9P2ySt5Cjw+FVmRTNMPCmeEF3MTHwlS1dc+k4w1s647FPIhBhmu76aeglMlpEsk36iH7YKMCvuIUpRnI2QqY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261915; c=relaxed/simple; bh=e2G7J84G1D4XCfSLdP3gUfTkL5hqpo1OoPHtnVanTCI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=oU8nwizeocFQBLEmP9e9xYNlvR+HoQVLXKV1W77axnrfZDVHmbvaKuoC0t4FPJ5mKPPY0MAi5paKW5i4c6syFEMcXdLc0GSQTqoE3JjesWZBO6TFvf4zu0x7StX887ep8680falNc1KNdW4Co7n3YEOylRNrcKtdu9Tw0NvEpqU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=pLvkzAZN; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="pLvkzAZN" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-49e65f2f1baso20656795e9.3 for ; Thu, 24 Sep 2026 07:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261907; x=1790866707; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=vM356NruxwMMdbIb0iHJaJTYDI/MzfDme3zT783DwBE=; b=pLvkzAZNyoUzqoZCbRSt6bQnN0UniSb5igWj26j2J7itpiDfUD53ny6tTZ0UT8cxyM TJtnNtzW0mNJwuok9QmIBYa4iDrufqmb1a+zqK8NuLt71mRIqoUd5UiDbUyFLZ6hRZoH nY9hyCCwiOZ+OITR0f2O70Anr2zi2Nga7hoEH0YpYHyqoKues5aBq1Mjx0zsRvIo/bBE hbGRo3WJ3J+GabriMM9f9MgFKmsqmK1hN+H3mXC2EI+7H1ziUBlbyDuJO/f5cjBS3V1G F8937akE4qBfzJb9QZrXf/vGRVrz+xwlIJq11/0if4kdPMfj+kNkewSDSAorCIpzHkVz wFSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261907; x=1790866707; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vM356NruxwMMdbIb0iHJaJTYDI/MzfDme3zT783DwBE=; b=ADKZ2qmZzPziHHSODkwIAyyKmAmuHNxhYVpFMI0EWOtiYGGhaghuHRxgA2rN4KNB+h V5ZNEfT6QbhANHU7XcmfkVWQBZ4Wh2y5mDJXKVJ+PUzTHPHJ6OP1D98Csuo9HISFd4UE q7D0PHZbP0mxY4e04iIrVZKDACc6PtXfgpBkBiRcZZV6eJ5Kk0eY+q1JjXLPX/G1pLei KR3DmGSaq3zQlW0p0Q2YpAzbtytf9HaaKSUGGUW6WNqUDFMCReQnH13vK3HfbT4AXrom 5wX6lfn+ZkZw9kOlBXRbuDApUDEDQQdfahx6Mv7IY+jhqBX2mSa6/PNpdVUIMYPIshd7 hx+Q== X-Forwarded-Encrypted: i=1; AKwUvByyH12954oCVToXJc5NsLJoKT0xE40CfiuWWrBQPMn1eQFusbeVc/DJhtI8bIBEbQN2vnhTD08ysg/TDDo=@vger.kernel.org X-Gm-Message-State: AFuF++nflrif7gT3+b9BMXqSStgMiQZnxBFgD8d3S6Scf9cJ/CDDnW/M FuLIku//2Wa1f4PPbPnS8XE5y3iEzn9VyBqIhG222H4jsl16hlczHRRn4QVKZHeydCOLKSElROo euCEzGgUebvNS0+ju2bJepw== X-Received: from wrbda3.prod.google.com ([2002:a05:6000:1963:b0:488:54c8:2f06]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1546:b0:49c:fa20:cc00 with SMTP id 5b1f17b1804b1-49fe66f4f59mr48865125e9.23.1790261907159; Thu, 24 Sep 2026 07:58:27 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:37 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-4-vdonnefort@google.com> Subject: [PATCH v7 03/20] tracing/remotes: Use kstrtobool for boolean tracefs files From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use kstrtobool in trace_remote.c where possible. This is more user-friendly as it allows a better variety of input strings. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index a1b84290be2d..ae22d13308a5 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -235,10 +235,10 @@ tracing_on_write(struct file *filp, const char __user= *ubuf, size_t cnt, loff_t { struct seq_file *seq =3D filp->private_data; struct trace_remote *remote =3D seq->private; - unsigned long val; + bool val; int ret; =20 - ret =3D kstrtoul_from_user(ubuf, cnt, 10, &val); + ret =3D kstrtobool_from_user(ubuf, cnt, &val); if (ret) return ret; =20 @@ -1151,10 +1151,10 @@ static ssize_t remote_event_enable_write(struct fil= e *filp, const char __user *u struct seq_file *seq =3D filp->private_data; struct remote_event *evt =3D seq->private; struct trace_remote *remote =3D evt->remote; - u8 enable; + bool enable; int ret; =20 - ret =3D kstrtou8_from_user(ubuf, count, 10, &enable); + ret =3D kstrtobool_from_user(ubuf, count, &enable); if (ret) return ret; =20 @@ -1235,10 +1235,10 @@ static ssize_t remote_events_dir_enable_write(struc= t file *filp, const char __us size_t count, loff_t *ppos) { struct trace_remote *remote =3D file_inode(filp)->i_private; + bool enable; int i, ret; - u8 enable; =20 - ret =3D kstrtou8_from_user(ubuf, count, 10, &enable); + ret =3D kstrtobool_from_user(ubuf, count, &enable); if (ret) return ret; =20 --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 321C949BD94 for ; Thu, 24 Sep 2026 14:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261915; cv=none; b=Ch4UsJAiO2Xeff4rozPAH4/PJqUiOd1FwF26ZhqTDvuJ3/MrKrGARaPqJZsDtzvsbSJSFg92eaXorykLNswXQORBEVgXswhDorR1S3geyYnw1nt92KydAcFColhBoc6UlwivIHUhQV4SIF9NbtB5BRboLAjExt+K4RmnLDrIjak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261915; c=relaxed/simple; bh=w1cqUyc/Ize4PtxGR8ncKrrTkut9WX1VnYvd2cwe5OE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YqGdTsz0ooy4t414/fwiIL/sKdwrrcv0Y458as4bUJ8cFvgDXio/4l9AlVShkUXRKA+Vc0P8rLO8HK5EHCPvx4qdwnO/jrM9hQULsLQ7zTQpkzQEAGtWFQkVq3FeB9qBuGaw8afcstCDmQtiHOXa323DFF6TifPOA3JEM6mvgDQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FApVzSf2; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FApVzSf2" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-49e6b5c5f44so31618895e9.2 for ; Thu, 24 Sep 2026 07:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261908; x=1790866708; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Q/4Lk189uH8ybB/G/PRCaP8BERsbtAT8+BPaWTHQHns=; b=FApVzSf2BW279I+jATByGUptkqcd9qo12XJOi99MmMgJPH934cqnyO20E3WAKt63J4 Yq1Aj2Z55zn5nxsw5S1E0aERm2aUruCPm9/m7BS9+6PdC7c7XdW7sCbpFJWzm/K+Anaq yJcOSQjPNczGEDviqSNoUzg6mHwYoQZniKqKyiekS5oYwGYg6Bhl2oaK5WImBOZaehmS 4k7Bf7vGx4f2FB3a0mFmMtJLJk6IcbBHKs+6w/tPGXOOMAI29Fa2Thzansk4MckQ9n9E CnrQA5Ewt6BYuozj5ccvSUhp2/sAm1wbx5tRwfZe3mLAAW2jzJJ0HWF5F94nET3zEIYH 4WBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261908; x=1790866708; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Q/4Lk189uH8ybB/G/PRCaP8BERsbtAT8+BPaWTHQHns=; b=YOe9HezULRRvrYv72nC8WQEEv7k5SjtX7nEI5deU7J8ii5jBOIz0IVG7IuFGONlvUp VC17M0Voaq8V+mwNPssV0OHl7O41cUCAIJ+GvGIk2kMPaHQV7vSZLy9SwJrGq+fwjrPh UDlwfOW4iMRFgQB1hjXHdSNLs5mNLKUphF5eWFBfZ+k7C3e9CL996XgMVsiKc1DpSB+d +sgqN1N2jeXngtE4PAB0/I3K5kaSJbuWAbk2fBjawtuv6i50vYT8QUH2IvNYQAOvz3kd ZXKtIg354xelfjXvOeThFMEqThvAy8bt9hszu38/i3UDplW4CuaTfW2EjiyWdpdpwRxQ Z4pQ== X-Forwarded-Encrypted: i=1; AKwUvBxKskGSgkO8YUaDMo1gCgIUvZnFBAQbazagqbeccShbkfV2Wk/nibSLsmEjoBy1vDvAQr3sUyWQf7X0jXE=@vger.kernel.org X-Gm-Message-State: AFuF++lNaJpQrwwqB/zXn55l3yu/s4XH/MwFZ9UZQ7mSu8/T87oqy7O5 9kPmG2DV1gIrVxLV/ZDGRCZolEuIYUOupM+647R6mUhhw13b6B9S2GboFEJ6/fRAezgBkGiKE0g i+O/cUBJY6FLyLrXihsv9mg== X-Received: from wmpg33.prod.google.com ([2002:a05:600c:4ca1:b0:49d:f06:1f0b]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1d99:b0:49e:6c27:d093 with SMTP id 5b1f17b1804b1-49fe7b739f4mr38613285e9.15.1790261908146; Thu, 24 Sep 2026 07:58:28 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:38 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-5-vdonnefort@google.com> Subject: [PATCH v7 04/20] tracing/remotes: Initialise pos in trace_start() From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When *pos is 0, trace_start() passes a dummy local variable i to trace_next() to fetch the first entry without modifying *pos. In that branch, i was left uninitialized. While i is discarded and causes no functional issues, initialise i and keep static analysers happy. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index ae22d13308a5..aa76845a630a 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -748,12 +748,12 @@ static void *trace_start(struct seq_file *m, loff_t *= pos) =20 trace_remote_iter_read_start(iter); =20 + i =3D iter->pos; if (!*pos) { iter->pos =3D -1; return trace_next(m, NULL, &i); } =20 - i =3D iter->pos; while (i < *pos) { iter =3D trace_next(m, NULL, &i); if (!iter) --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5A2648551C for ; Thu, 24 Sep 2026 14:58:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261915; cv=none; b=ro8SnEMBX7ooNfnJx/p7+dyUvEOqwO6ewbJVUfahRKI+zK6U1kgPNY8FKbbRzgwwLolxyA2ih5T287cNSfvTZFvaj8lxvQBtKhAKm7BG4RoO2JRxyhh0xWIJ5BMMfy3TxF1QN98o6pNnyxi9o4uvtz3rudtlYto67fsFFlwoSrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261915; c=relaxed/simple; bh=GtXTawTkGaLEnygFpzjGviB4NZO0NEo7bzwgCMnHdD0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lWGWIzpDem8xGPt3U48QiOZ5UyUcBpq0FRVn6B/Aeoo/nFyctq8KolOHWu2WrartV3J7+Bn/+URdcIP5eMAk0MI98ZHay5TmTGCGh5ohB4+rGmek63sXhlqEUC51z6H1RwQaZY1ghIw/dRRgz34nBDnZ+0W17mMsL4YSliEtyMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=jr7IfXFP; arc=none smtp.client-ip=209.85.221.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="jr7IfXFP" Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-48706ee8fbaso1529201f8f.1 for ; Thu, 24 Sep 2026 07:58:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261910; x=1790866710; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9Ssz0kuZEB0oM4fbrjjlkUTjFkWgmAmLspvk/qGU7c0=; b=jr7IfXFP/j9NwmILP5UO8kvmbhcRUKkrSNMVw6sIdJrDYBsVjIRTFucXNQUyaiTBpp 1UCa0CqkinH33EZL4jiNoZT+/c5Un8anu4jy8SlilSf3jgMmn+tMzmOzkoRRbSi8ABey UqxH56xViho5dACa9t0xhQInBUIYqFEFRNla2sWa+/gsaaj/7pWmMHLWqBhRixBvrGzP /Jq6Lp3PswEyd1Ake7YK8DHIo687xKnjuT0NUXBwznZJlYh6yQD5LYLbkJ8+E893RPd2 2hA884RQdYXBY0vZaxZsTceiRcO9kquhyQyeH4UHSOFB34PWwCmUw3L/XQ820hFYBYc/ lgHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261910; x=1790866710; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9Ssz0kuZEB0oM4fbrjjlkUTjFkWgmAmLspvk/qGU7c0=; b=Gy0mju0bSoA6YsQF3nf5yuqTee2wuiKVK26YcFP9O7xlfI5nCWYtAGW1oK3MgzjtQF re/qBRGgPMxmcm6E41/I9dmXmoXgAl0WflpnW5RV9KvuC4NXpErJeum7R1kYB0xwAjyl /3wS+Pi01JRszO5cCFyj4+wErX2ZQ2qSggodc826sv92RHfQ6yNG6wg3wA9TGYUftw+E Zof2qX2ArZbbM/SHVbXUs0FxTj8ChKiubwuvpCFUhPeWZWiXCx7lLrlESZtlFmn5FzT5 RdPY6huJ+ub9BpxJ0OhrcySnRRpdIKxnUNH9pPDVeVXwV+PzJn83lPW9+qGiS1P0J1xQ 3Ing== X-Forwarded-Encrypted: i=1; AKwUvByGpIOfkPF90xwx5Oc2eV769KD4yKz9sbKDPYwIflDx8ACgERIhsGBkyAiKGhvm8LX+Cyrh/S1vVDIBr8k=@vger.kernel.org X-Gm-Message-State: AFuF++lDXOoOJh56yuiXpX0sQHn3JPPpzAgcaYDt5JUQN+02UD3gdcwj 86gWt0r8EwjHGgr8YolNDWqEPBOeYzebGLLA/HmE459vTwXnQabPQLg37UI3Qrq9b9AjSahAJHU TgMvK7jnISsHCthpVxy+gRg== X-Received: from wrbfk11.prod.google.com ([2002:a05:6000:270b:b0:482:e0a4:9fd8]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:64c8:0:b0:487:2589:ce4f with SMTP id ffacd0b85a97d-4887170f1c0mr5191154f8f.43.1790261909393; Thu, 24 Sep 2026 07:58:29 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:39 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-6-vdonnefort@google.com> Subject: [PATCH v7 05/20] tracing/remotes: Annotate remote shared fields with READ_ONCE/WRITE_ONCE From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tracing_on_show(), remote_event_enable_show(), and buffer_size_kb_show() read remote->tracing_on, evt->enabled, and remote->trace_buffer_size without holding remote->lock, while the corresponding write and cmdline functions modify them under the lock. While this is unlikely to cause issues in practice, annotate the accesses with READ_ONCE() and WRITE_ONCE() to keep KCSAN happy. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index aa76845a630a..517546e8343a 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -136,7 +136,7 @@ static int trace_remote_enable_tracing(struct trace_rem= ote *remote) return ret; } =20 - remote->tracing_on =3D true; + WRITE_ONCE(remote->tracing_on, true); =20 return 0; } @@ -155,7 +155,7 @@ static int trace_remote_disable_tracing(struct trace_re= mote *remote) return ret; =20 ring_buffer_poll_remote(remote->trace_buffer, RING_BUFFER_ALL_CPUS); - remote->tracing_on =3D false; + WRITE_ONCE(remote->tracing_on, false); trace_remote_try_unload(remote); =20 return 0; @@ -250,11 +250,12 @@ tracing_on_write(struct file *filp, const char __user= *ubuf, size_t cnt, loff_t =20 return cnt; } + static int tracing_on_show(struct seq_file *s, void *unused) { struct trace_remote *remote =3D s->private; =20 - seq_printf(s, "%d\n", remote->tracing_on); + seq_printf(s, "%d\n", READ_ONCE(remote->tracing_on)); =20 return 0; } @@ -281,7 +282,7 @@ static ssize_t buffer_size_kb_write(struct file *filp, = const char __user *ubuf, if (trace_remote_loaded(remote)) return -EBUSY; =20 - remote->trace_buffer_size =3D val; + WRITE_ONCE(remote->trace_buffer_size, val); =20 return cnt; } @@ -290,7 +291,7 @@ static int buffer_size_kb_show(struct seq_file *s, void= *unused) { struct trace_remote *remote =3D s->private; =20 - seq_printf(s, "%lu (%s)\n", remote->trace_buffer_size >> 10, + seq_printf(s, "%lu (%s)\n", READ_ONCE(remote->trace_buffer_size) >> 10, trace_remote_loaded(remote) ? "loaded" : "unloaded"); =20 return 0; @@ -1131,7 +1132,7 @@ trace_remote_enable_event(struct trace_remote *remote= , struct remote_event *evt, if (ret) return ret; =20 - evt->enabled =3D enable; + WRITE_ONCE(evt->enabled, enable); =20 return 0; } @@ -1140,7 +1141,7 @@ static int remote_event_enable_show(struct seq_file *= s, void *unused) { struct remote_event *evt =3D s->private; =20 - seq_printf(s, "%d\n", evt->enabled); + seq_printf(s, "%d\n", READ_ONCE(evt->enabled)); =20 return 0; } --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E132494809 for ; Thu, 24 Sep 2026 14:58:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261919; cv=none; b=CxZMAkb60U7olIz8fCOerN4EstKNsP9ZCU5gRyn5j/Rwbs/XqzSykJRdSo8yvYsravfAO4zpZQ+ENQJBH4nimYUvsjIrV4uyRZ5nG/Uz6XrWx7+UZIH7OkHf6Q4n+CP8MLmHtpsicaxIS0vCBfJXGMTGvzuqJP0+e7gKUNQyEDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261919; c=relaxed/simple; bh=ceyfEUZN+xc+92x1RwOTv9I75LstjiCDhz8o0xhoSSM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Z1f55RVKNPCsUB6fFukltEqmuLsPj/KhdjREVmbEmaSHhCNIPLFwpu6yUbfV1GPkE5r4lF1WJF5wqE+u2F3QlfjHKWo30T0cn7MoPd5WsHAdY2C5WbhLj0Vx+zoISdjLch6KIqoh3/DaNyEdkmxncRs0EXWF+Yt6VxrmZsxl0X4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=JV6UjNYY; arc=none smtp.client-ip=209.85.128.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="JV6UjNYY" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49d0ae342b9so14040805e9.1 for ; Thu, 24 Sep 2026 07:58:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261911; x=1790866711; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=eUD9nRafPnFAogygy4UT57EJvWHI6R+44Odk5FPBMD8=; b=JV6UjNYYXr7EcUMyQuJA5zCl80wXPGrhdInO+yljOzveKWAHen+f0tLDXmbZk/KTDB dWUlk/WVkhesmwB2mMh677qK6Kw9raLUdzNDziG6aSX/ZLin7dXi3B0p94VA8QlJFNuw kZbAWlq0CMyUlDtcPNxKH34PuP19N8wAzWNL4vBHET6o9LZvj1xsD3z0x+BJ1leoYnGn htSOepxd7MeN/x17FdAyMoWmf0ijJx+8VkN3+wjkE2KVwZHipc0vNB8xs/XDnv/IZe4u 9GTHOchqLS0CckjSrlGE+FJ+gyPPwKWl8JdLL3lAPOGL5M+fLAJGIAb0ST5Eehf+LdDo 2Wtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261911; x=1790866711; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=eUD9nRafPnFAogygy4UT57EJvWHI6R+44Odk5FPBMD8=; b=eIB1U8km+w6Gk9tURZqVQQTV9sExO+07Im94LSBUe5y/6kdI+jm/ujB1HCH7ohqqbI RNyMzIqMK5j3BX6PmM+P4FSOKe/QqJ3sTwuxinQrgMDcaCFz+MD+7Okc1sdimDFMbkvk 6V6FSdLCRBjc+OXjeRRN0R2o3WzqPLYo/Z86CQSGErOF6qnng3uqYRb/mlUd4+IG4FWC A3n6Z1BOM+RvEbIlmFAQY2gTnfbSq59rHF8wawG9Nfk4RErf+EZEqcgu0C+KmqA3IauF wjTnlKp/n8kX6BZcETR43Mrx3dn9+d4IjKXbOtIZxv/euzMMU1o7yjqm9GfL3VdTKPbV il5Q== X-Forwarded-Encrypted: i=1; AKwUvBzF9mw4zV0rQFm0Rn/3dIM5PZ3YwzgiA+RbWEUZpeXvmZV1G44i5zVupYaHfM+6TWH38VwKbdhV3yA3n3g=@vger.kernel.org X-Gm-Message-State: AFuF++lwskagFWz89G1C6HFFIZDP+vLbK3+w2J2ffOE5nutmVBtRLSXN y17Fy7teqP+Mx1dWbk3rjRa6vjtRKEORaaM0sZ+SqE88M2CNo0TLx22wlzE0stfzhNFsyweYJ29 Naw3hrXaMhFvMi/85b/gI0A== X-Received: from wmcm22.prod.google.com ([2002:a7b:ce16:0:b0:49f:e310:c9e6]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4e12:b0:49c:fc6e:a3df with SMTP id 5b1f17b1804b1-49fe66f82d8mr46837345e9.30.1790261910509; Thu, 24 Sep 2026 07:58:30 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:40 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-7-vdonnefort@google.com> Subject: [PATCH v7 06/20] tracing/remotes: Use a single per-remote polling work From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Having a per-iterator polling work is wasteful when logging several trace_remote per_cpu/trace_pipe files in parallel. This results in one work running per-CPU, where only one would suffice. Transition to a single per-remote polling work, scheduled on the first consumer creation and stopped when the last consuming iterator is freed. This blanket polls all CPUs, regardless of which ones are actually being read. This is acceptable because the poll consists of reading the meta-page, which is a fast operation. Also, it is more common to log all CPUs in the system than only one, so this use-case should be favoured. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 51 +++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index 517546e8343a..2b5020d2c138 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -26,7 +26,6 @@ enum tri_type { struct trace_remote_iterator { struct trace_remote *remote; struct trace_seq seq; - struct delayed_work poll_work; unsigned long lost_events; u64 ts; struct ring_buffer_iter *rb_iter; @@ -55,8 +54,10 @@ struct trace_remote { struct rw_semaphore reader_lock; struct rw_semaphore *pcpu_reader_locks; unsigned int nr_readers; + unsigned int poll_cnt; unsigned int poll_ms; bool tracing_on; + struct delayed_work poll_work; }; =20 static DEFINE_MUTEX(trace_remotes_lock); @@ -351,17 +352,6 @@ static bool trace_remote_has_cpu(struct trace_remote *= remote, int cpu) return ring_buffer_poll_remote(remote->trace_buffer, cpu) =3D=3D 0; } =20 -static void __poll_remote(struct work_struct *work) -{ - struct delayed_work *dwork =3D to_delayed_work(work); - struct trace_remote_iterator *iter; - - iter =3D container_of(dwork, struct trace_remote_iterator, poll_work); - ring_buffer_poll_remote(iter->remote->trace_buffer, iter->cpu); - schedule_delayed_work((struct delayed_work *)work, - msecs_to_jiffies(iter->remote->poll_ms)); -} - static void __free_ring_buffer_iter(struct trace_remote_iterator *iter, in= t cpu) { if (cpu !=3D RING_BUFFER_ALL_CPUS) { @@ -405,6 +395,36 @@ static int __alloc_ring_buffer_iter(struct trace_remot= e_iterator *iter, int cpu) return 0; } =20 +static void trace_remote_do_poll(struct trace_remote *remote) +{ + ring_buffer_poll_remote(remote->trace_buffer, RING_BUFFER_ALL_CPUS); + schedule_delayed_work(&remote->poll_work, msecs_to_jiffies(remote->poll_m= s)); +} + +static void __poll_remote(struct work_struct *work) +{ + struct delayed_work *dwork =3D to_delayed_work(work); + + trace_remote_do_poll(container_of(dwork, struct trace_remote, poll_work)); +} + +static void trace_remote_inc_poll(struct trace_remote *remote) +{ + /* poll_cnt <=3D nr_readers, inherits its overflow protection */ + if (!remote->poll_cnt++) + trace_remote_do_poll(remote); +} + +static void trace_remote_dec_poll(struct trace_remote *remote) +{ + if (WARN_ON_ONCE(!remote->poll_cnt)) + return; + + remote->poll_cnt--; + if (!remote->poll_cnt) + cancel_delayed_work_sync(&remote->poll_work); +} + static struct trace_remote_iterator *trace_remote_iter(struct trace_remote *remote, int cpu, enum tri_type typ= e) { @@ -434,9 +454,7 @@ static struct trace_remote_iterator =20 switch (type) { case TRI_CONSUMING: - ring_buffer_poll_remote(remote->trace_buffer, cpu); - INIT_DELAYED_WORK(&iter->poll_work, __poll_remote); - schedule_delayed_work(&iter->poll_work, msecs_to_jiffies(remote->poll_m= s)); + trace_remote_inc_poll(remote); break; case TRI_NONCONSUMING: ret =3D __alloc_ring_buffer_iter(iter, cpu); @@ -470,7 +488,7 @@ static void trace_remote_iter_free(struct trace_remote_= iterator *iter) =20 switch (iter->type) { case TRI_CONSUMING: - cancel_delayed_work_sync(&iter->poll_work); + trace_remote_dec_poll(remote); break; case TRI_NONCONSUMING: __free_ring_buffer_iter(iter, iter->cpu); @@ -1003,6 +1021,7 @@ int trace_remote_register(const char *name, struct tr= ace_remote_callbacks *cbs, remote->poll_ms =3D 100; mutex_init(&remote->lock); init_rwsem(&remote->reader_lock); + INIT_DELAYED_WORK(&remote->poll_work, __poll_remote); =20 guard(mutex)(&trace_remotes_lock); =20 --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B590489FA3 for ; Thu, 24 Sep 2026 14:58:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261918; cv=none; b=MzjTxNPGA72JUNQZ6kOslmXl8D/wtQPpGjlObyR7qTlkrt6Ul42KcJLWVwun9/rYqUr4QupzBTMM/r75GHqOPskhfE8EREdyIqp1oCZtEalgDjsy7uPcbImDWOYYiwedthgz07KiHDeJ8Fa7Fw+XU1+j9OFr2kTxFvoub0jlbyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261918; c=relaxed/simple; bh=AznFEGZWe1gMpFnOB0uOLCCbnZE1+JMQ2urDFsxgYjE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=F+K3QgVxMcRHTLozPO4044HYzc93Ke52TCz3DB1ZAv6dM4UNGFMSBsNVQ8kaXPMaj0cD1P2959f2bhl4IZNP9CduY39Q9vAv/Ub92PLRaZG0T6TSVdu1JnfO4NUkcqyBJRM/uOOifUacDjSOY4u167aV2wOfFryuuXmXYcUrCkU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ZvRpNGZW; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ZvRpNGZW" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-495689bfcc8so16084965e9.1 for ; Thu, 24 Sep 2026 07:58:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261912; x=1790866712; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=f2rSXjapMgKgpxKca/JVPfzG0C/68e17lAk891DH8pU=; b=ZvRpNGZWCiW2XktB3d+t4y034wtGMFC5Fld8hn4ejUsGMXh+6FcmPjOhoOYMpKvWEt hEIAhtQ8xjLJETH1oJ3+cXafe+LlGyjuvVL3l1f80MfVBa/PG0QiHNYhaxC/k97lhvW8 P9W++l4Ncil3g+lWN/LgOpdiRM0/hklLxY8eTs7MHZ+F/CLqUKlvbpPhpnd3kBN1WTSX alX01OCxzI/U5TaAmAwmrU/jOK7aQlk5kjJ9jwTwmgR2EN3NPuC1Jm8aDRj9slilmj/U EfeL7qqTo7ZJcLaCwN5YXINhxBHAxFtf8Rcdzi+RPe9x2ZFkKesnlKpJ5DCnDx6tq0v9 12/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261912; x=1790866712; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=f2rSXjapMgKgpxKca/JVPfzG0C/68e17lAk891DH8pU=; b=nBUS3hQEz5NGqIGFScsMnK9yx2XM7R1vFGIjKHza/urTrUIA5wttD6NKxo7o1I36rE lewt6Jyn2a6sW8ynUBtQChtyxPDXV0yeuREDsbdOJ+w+/qFi8B/xHMtrxfhuUCbUfCsO /UQxReLmCd0nA9DuDtJQuSVMqhhegXkMYvCvdReMAjqj/9LwbxGPXa2cYWE7N++YqOwz +4Dte2Bb6Mpq6oLCN122a6RgYK+mF0rMq8xCFMNZDOS8Ker1vZ14fv/kvEV6k4Po11us tbhwlZ62JnCrWORFEuFGFcMwN2n90gPtUSlBwLBST1H/68Wp8e/6Ej/8ZUV5sWzQumMA ELAg== X-Forwarded-Encrypted: i=1; AKwUvBxeY0wx3zhCmJolPXmRVa8e0X7fSo5LTqQBvzihmLUpwZ5uUdGoqItNTrhVsyUtTF3De7sgkSjzWAKJvTA=@vger.kernel.org X-Gm-Message-State: AFuF++muFc0n7LP8WwTqmFtSiwmmtkMODKyOiO+DVYL9w6cQiFEWe1vR ul3UgbmL2NjuzhGgqE+WrxzroNWENWbd7G7Kye1/IjXC4HT6sDO9BVmRL/tVavuF7DhR6qBErBV 4lfzxEbXZt5g9KF/37d6Ing== X-Received: from wmpz10.prod.google.com ([2002:a05:600c:a0a:b0:49f:e55e:dd64]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:8b22:b0:49f:bbab:aa10 with SMTP id 5b1f17b1804b1-49fe66f13f6mr48689765e9.20.1790261911477; Thu, 24 Sep 2026 07:58:31 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:41 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-8-vdonnefort@google.com> Subject: [PATCH v7 07/20] tracing/simple_ring_buffer: Add support for compressed length From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The array length is the total size in bytes of the data for the current event. It is possible to compress this value into the event header type, which has 28 unused types, saving 32 bits for sufficiently small events. The compressed length is expressed as a multiple of the ring-buffer alignment, 4-bytes by default. Enforce this alignment. Signed-off-by: Vincent Donnefort --- kernel/trace/simple_ring_buffer.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/kernel/trace/simple_ring_buffer.c b/kernel/trace/simple_ring_b= uffer.c index 49913bb0057a..70768666e365 100644 --- a/kernel/trace/simple_ring_buffer.c +++ b/kernel/trace/simple_ring_buffer.c @@ -207,7 +207,13 @@ static unsigned long rb_event_size(unsigned long lengt= h) { struct ring_buffer_event *event; =20 - return length + RB_EVNT_HDR_SIZE + sizeof(event->array[0]); + if (!length) + length++; + + if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT) + length +=3D sizeof(event->array[0]); + + return ALIGN(length + RB_EVNT_HDR_SIZE, RB_ARCH_ALIGNMENT); } =20 static struct ring_buffer_event * @@ -223,12 +229,15 @@ rb_event_add_ts_extend(struct ring_buffer_event *even= t, u64 delta) static struct ring_buffer_event * simple_rb_reserve_next(struct simple_rb_per_cpu *cpu_buffer, unsigned long= length, u64 timestamp) { - unsigned long ts_ext_size =3D 0, event_size =3D rb_event_size(length); struct simple_buffer_page *tail =3D cpu_buffer->tail_page; + unsigned long event_size, array_size, ts_ext_size =3D 0; struct ring_buffer_event *event; u32 write, prev_write; u64 time_delta; =20 + event_size =3D rb_event_size(length); + array_size =3D event_size - RB_EVNT_HDR_SIZE; + time_delta =3D timestamp - cpu_buffer->write_stamp; =20 if (test_time_stamp(time_delta)) @@ -259,9 +268,13 @@ simple_rb_reserve_next(struct simple_rb_per_cpu *cpu_b= uffer, unsigned long lengt time_delta =3D 0; } =20 - event->type_len =3D 0; + if (length > RB_MAX_SMALL_DATA || RB_FORCE_8BYTE_ALIGNMENT) { + event->type_len =3D 0; + event->array[0] =3D array_size; + } else { + event->type_len =3D DIV_ROUND_UP(array_size, RB_ALIGNMENT); + } event->time_delta =3D time_delta; - event->array[0] =3D event_size - RB_EVNT_HDR_SIZE; =20 return event; } @@ -284,7 +297,7 @@ void *simple_ring_buffer_reserve(struct simple_rb_per_c= pu *cpu_buffer, unsigned =20 rb_event =3D simple_rb_reserve_next(cpu_buffer, length, timestamp); =20 - return &rb_event->array[1]; + return rb_event->type_len ? &rb_event->array[0] : &rb_event->array[1]; } EXPORT_SYMBOL_GPL(simple_ring_buffer_reserve); =20 --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AACBF49BD77 for ; Thu, 24 Sep 2026 14:58:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261920; cv=none; b=pLR2TgE7R4uLXIFfr/uZxZMyAlg2UrEGXqQ36PhkMBn8swJTtKPtSxvtyaF5WqXBUdS9Q7fwI0kzDfAcplfcLo52Usw/TXS/qg4rYzC2+Ugozh3ZXfTyMerLlkbJgXGH0YyNTfi+MY1ROIIpFdY2MVTrucSJ44+0jGYSD/WigY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261920; c=relaxed/simple; bh=wwrgRkkwrAfEymNxm6IZDWBMrmKFtLhd6iSSndLt2dU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BxfwAT5Cpm53wvF5L5CmahMF9Ysf3FDa7MSwRZj1iraTB19dOWSxnM7nJhzTpXLR4CON9XnECbm76dXpRrvSLd5QJLupwjh7dtKv043zdSojSoUfgQ300i3rRcsboAY5t2pmkEyCnl+I3GMkrtK9pwFOeFR1UAuynCUC/4U5nk0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FEBie7DM; arc=none smtp.client-ip=209.85.221.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FEBie7DM" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-47d81cf0c4cso1533623f8f.2 for ; Thu, 24 Sep 2026 07:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261913; x=1790866713; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tUj0Ko9jiYVxaTw/TrN9RLHuqNpikUlhKmgKV9EDFGg=; b=FEBie7DMYRmtdAmU7Ms60QQwY5txFTa7Nh6aBRLk4OQ3w27HJ8lsvQMcJ5T+QWwR8v NkswUBW1Z2yfyNC8Tc8wSLIpOd8WRKCDACb/llLKD6YBeHz2SZy7rH8ggj7BCREaoNGk NDDUqorR6gcgMSUJVkqOehChsrqRI2MV91D/FHMmeCmZ1a8mipor/tQD9BmSuVq1ZqdG r/a7cG7ZHQApgbJo/b0CF2unVXjw+J6q0VOtF0WMkAfuBZG1pd6+w50lEm8LF/rqvZ4K zkXjcWcZU31BcqRBmBQkSWUmcg6C1NoFmKEZOdWOg3HEg0KcBdfZtp8+pI6jo6bI8/XV MN2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261913; x=1790866713; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tUj0Ko9jiYVxaTw/TrN9RLHuqNpikUlhKmgKV9EDFGg=; b=xQ/bR8aXeqxTs3Vy06XYW9R+IJsRCX5o1wdUC3N4ph5eQtmbok/eyGN27YolBm0I3c nYtxRjEjXSV2S3zb+ZADlg92h/D8qWR2Lo728miaBjkgCJGKQDspisvjvBM9415mszYQ lJLUO0hncwMdO37vjks+6h28s2HT1thaRHjg1rFvEVM+qnh2or1cC6G53sEhDgQ7mQ6/ ZTJXPlvAwCMOWYdj93KyDEZLP0yz1Mq61jKu91LSJhffCdzLHDn2O5/ihvGKJT1LBZXd OWU5JWkxFc5LY//Os+B27W5pfgGj+zrPk8lkRtN1XZqmtV27Lv73dkORwFhHUqBehFAC Nu5Q== X-Forwarded-Encrypted: i=1; AKwUvBxMtDBnkwA9i8dg00J9XLYbPQkq+Gqxxowrd7l47SYaN2Pz4eypVJqXh82lu2U3nVnyX13udeCxzssWwAs=@vger.kernel.org X-Gm-Message-State: AFuF++nUMST2R9xM0Ggf6wQ8DJhc0NfrwFky67T5b37INCcX30iOBJUG lXC303q7qCxfox5DzJ6MhnhJvfPcv6gCnMjADcWfxQDH83FenB51s85p4vMzwdc+LqbhZ00eaSU MxxgtzfQ+rs47tBWA5+SXpA== X-Received: from wrbfk16.prod.google.com ([2002:a05:6000:2710:b0:487:19c4:5c4b]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2f8a:b0:487:27f6:a4d2 with SMTP id ffacd0b85a97d-488716a5f27mr4984521f8f.34.1790261912738; Thu, 24 Sep 2026 07:58:32 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:42 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-9-vdonnefort@google.com> Subject: [PATCH v7 08/20] tracing/remotes: Add dmesg tracefs file From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When enabled, the dmesg tracefs file enables the redirection of all events to dmesg. This is similar to tp_printk. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 139 ++++++++++++++++++++++++++++++++---- 1 file changed, 125 insertions(+), 14 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index 2b5020d2c138..79afb2cdf358 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -21,6 +21,7 @@ enum tri_type { TRI_CONSUMING, TRI_NONCONSUMING, + TRI_DMESG, }; =20 struct trace_remote_iterator { @@ -43,6 +44,7 @@ struct trace_remote { void *priv; struct trace_buffer *trace_buffer; struct trace_buffer_desc *trace_buffer_desc; + struct trace_remote_iterator *dmesg; struct dentry *dentry; struct eventfs_inode *eventfs_root; struct eventfs_inode *eventfs_subdir; @@ -395,10 +397,15 @@ static int __alloc_ring_buffer_iter(struct trace_remo= te_iterator *iter, int cpu) return 0; } =20 +static bool trace_remote_do_dmesg(struct trace_remote *remote); + static void trace_remote_do_poll(struct trace_remote *remote) { + bool yield; + ring_buffer_poll_remote(remote->trace_buffer, RING_BUFFER_ALL_CPUS); - schedule_delayed_work(&remote->poll_work, msecs_to_jiffies(remote->poll_m= s)); + yield =3D trace_remote_do_dmesg(remote); + schedule_delayed_work(&remote->poll_work, yield ? 0 : msecs_to_jiffies(re= mote->poll_ms)); } =20 static void __poll_remote(struct work_struct *work) @@ -453,6 +460,14 @@ static struct trace_remote_iterator trace_seq_init(&iter->seq); =20 switch (type) { + case TRI_DMESG: + /* only one dmesg iter allowed */ + if (WARN_ON_ONCE(remote->dmesg)) { + ret =3D -EBUSY; + break; + } + smp_store_release(&remote->dmesg, iter); + fallthrough; case TRI_CONSUMING: trace_remote_inc_poll(remote); break; @@ -487,6 +502,11 @@ static void trace_remote_iter_free(struct trace_remote= _iterator *iter) lockdep_assert_held(&remote->lock); =20 switch (iter->type) { + case TRI_DMESG: + WARN_ON_ONCE(remote->dmesg !=3D iter); + smp_store_release(&remote->dmesg, NULL); + flush_delayed_work(&remote->poll_work); + fallthrough; case TRI_CONSUMING: trace_remote_dec_poll(remote); break; @@ -499,13 +519,24 @@ static void trace_remote_iter_free(struct trace_remot= e_iterator *iter) trace_remote_put(remote); } =20 +static bool trace_remote_iter_is_consuming(struct trace_remote_iterator *i= ter) +{ + switch (iter->type) { + case TRI_CONSUMING: + case TRI_DMESG: + return true; + default: + return false; + } +} + static void trace_remote_iter_read_start(struct trace_remote_iterator *ite= r) { struct trace_remote *remote =3D iter->remote; int cpu =3D iter->cpu; =20 /* Acquire global reader lock */ - if (cpu =3D=3D RING_BUFFER_ALL_CPUS && iter->type =3D=3D TRI_CONSUMING) + if (cpu =3D=3D RING_BUFFER_ALL_CPUS && trace_remote_iter_is_consuming(ite= r)) down_write(&remote->reader_lock); else down_read(&remote->reader_lock); @@ -522,7 +553,7 @@ static void trace_remote_iter_read_start(struct trace_r= emote_iterator *iter) if (WARN_ON_ONCE(!remote->pcpu_reader_locks)) return; =20 - if (iter->type =3D=3D TRI_CONSUMING) + if (trace_remote_iter_is_consuming(iter)) down_write(&remote->pcpu_reader_locks[cpu]); else down_read(&remote->pcpu_reader_locks[cpu]); @@ -539,14 +570,14 @@ static void trace_remote_iter_read_finished(struct tr= ace_remote_iterator *iter) * No need for the remote lock here, iter holds a reference on * remote->nr_readers */ - if (iter->type =3D=3D TRI_CONSUMING) + if (trace_remote_iter_is_consuming(iter)) up_write(&remote->pcpu_reader_locks[cpu]); else up_read(&remote->pcpu_reader_locks[cpu]); } =20 /* Release global reader lock */ - if (cpu =3D=3D RING_BUFFER_ALL_CPUS && iter->type =3D=3D TRI_CONSUMING) + if (cpu =3D=3D RING_BUFFER_ALL_CPUS && trace_remote_iter_is_consuming(ite= r)) up_write(&remote->reader_lock); else up_read(&remote->reader_lock); @@ -563,10 +594,9 @@ __peek_event(struct trace_remote_iterator *iter, int c= pu, u64 *ts, unsigned long struct ring_buffer_event *rb_evt; struct ring_buffer_iter *rb_iter; =20 - switch (iter->type) { - case TRI_CONSUMING: + if (trace_remote_iter_is_consuming(iter)) { return ring_buffer_peek(iter->remote->trace_buffer, cpu, ts, lost_events= ); - case TRI_NONCONSUMING: + } else { rb_iter =3D __get_rb_iter(iter, cpu); if (!rb_iter) return NULL; @@ -630,14 +660,10 @@ static void trace_remote_iter_move(struct trace_remot= e_iterator *iter) { struct trace_buffer *trace_buffer =3D iter->remote->trace_buffer; =20 - switch (iter->type) { - case TRI_CONSUMING: + if (trace_remote_iter_is_consuming(iter)) ring_buffer_consume(trace_buffer, iter->evt_cpu, NULL, NULL); - break; - case TRI_NONCONSUMING: + else ring_buffer_iter_advance(__get_rb_iter(iter, iter->evt_cpu)); - break; - } } =20 static struct remote_event *trace_remote_find_event(struct trace_remote *r= emote, unsigned short id); @@ -883,6 +909,87 @@ static const struct file_operations trace_fops =3D { .release =3D trace_release, }; =20 +static bool trace_remote_do_dmesg(struct trace_remote *remote) +{ + struct trace_remote_iterator *iter =3D smp_load_acquire(&remote->dmesg); + unsigned int max_events =3D 1000; + + if (!iter) + return false; + + trace_remote_iter_read_start(iter); + + while (trace_remote_iter_read_event(iter)) { + trace_seq_init(&iter->seq); + + trace_remote_iter_print_event(iter); + trace_seq_putc(&iter->seq, 0); + if (!pr_info("%s", seq_buf_str(&iter->seq.seq))) + break; + + trace_remote_iter_move(iter); + + if (!(--max_events)) + break; + } + + trace_remote_iter_read_finished(iter); + + return !max_events; +} + +static int trace_remote_enable_dmesg(struct trace_remote *remote, bool ena= ble) +{ + struct trace_remote_iterator *iter =3D remote->dmesg; + + lockdep_assert_held(&remote->lock); + + if (enable =3D=3D !!iter) + return 0; + + if (enable) { + iter =3D trace_remote_iter(remote, RING_BUFFER_ALL_CPUS, TRI_DMESG); + if (IS_ERR(iter)) + return PTR_ERR(iter); + } else { + trace_remote_iter_free(remote->dmesg); + /* trace_remote_iter_free has reset remote->dmesg */ + } + + return 0; +} + +static ssize_t +dmesg_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t= *ppos) +{ + struct seq_file *seq =3D filp->private_data; + struct trace_remote *remote =3D seq->private; + bool val; + int ret; + + ret =3D kstrtobool_from_user(ubuf, cnt, &val); + if (ret) + return ret; + + guard(mutex)(&remote->lock); + + ret =3D trace_remote_enable_dmesg(remote, val); + if (ret) + return ret; + + return cnt; +} + +static int dmesg_show(struct seq_file *s, void *unused) +{ + struct trace_remote *remote =3D s->private; + + seq_printf(s, "%d\n", !!READ_ONCE(remote->dmesg)); + + return 0; +} +DEFINE_TRACE_REMOTE_ATTRIBUTE(dmesg); + static int trace_remote_init_tracefs(const char *name, struct trace_remote= *remote) { struct dentry *remote_d, *percpu_d, *d; @@ -923,6 +1030,10 @@ static int trace_remote_init_tracefs(const char *name= , struct trace_remote *remo if (!d) goto err; =20 + d =3D trace_create_file("dmesg", TRACEFS_MODE_WRITE, remote_d, remote, &d= mesg_fops); + if (!d) + goto err; + percpu_d =3D tracefs_create_dir("per_cpu", remote_d); if (!percpu_d) { pr_err("Failed to create tracefs dir "TRACEFS_DIR"%s/per_cpu/\n", name); --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F218549E129 for ; Thu, 24 Sep 2026 14:58:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261920; cv=none; b=k7C1vkWoSq30OpxVhiHZD1cozLRIT1qrKaj/BaL5DjeQx1FVBgnWEPHYoFPXrlz1ISVqKRPHheBAbDVFpYvoSXCvyqYlhuOy+GemuwKXviMjdLnd74s4CY9MIja5eRfOYrQYDZUWG8vpxubig7s0vU8wVtp6THr0JT0hDSvIo0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261920; c=relaxed/simple; bh=cp1AhYwgoyBcNpnaWfbKwCvMcNX5AAJTHBA6wE+dkpc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=bffVjYPaMWvhKCb/ud2bbxlg+j+cvCrNwcDA/ji1dUO197ijcKDA2mQBJ9ahoyo7zVN55Dwqz4XiZl7ptI4S6l38XKOcIsHk+v1wcVNr8HzOQMOhIdrfap4U18N4+TxbKEGef3QZ609Zxn2gCeK72LjYI0zwzMzl5S7TBHbn4K4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gEQwkkvV; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gEQwkkvV" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-49fcd86b8d3so17761245e9.3 for ; Thu, 24 Sep 2026 07:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261914; x=1790866714; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=APC2vzzEaWI0IfcuCj+IJ6SBWsVQXpmXfTBg9jSKKIw=; b=gEQwkkvVD8VBv5z+N96rH5kPHhCX4WVZpLBAze0ArowGCu/x0RpeYRSXFQDqFi154B Usoaz7wFZpfubXxx2io2id3hD56FDeBU1BHExqkt+dCsShXS4zkJPnLDgiCBPGmaGiHo A6sPFU15+BYOl/1jDBzUX1LN5p8V2uubyTur7W7ko8ul1Lj6RhaunEtRRNwaI/9T/5Zs s6GDDknV7Y869KhYRYYKbu6dSNtDdFXpDEtAGCaC+IzeX4ztvSA//bY4dU3JeFHSMTAk YS6TNaC3++3dyPN+MqCf3xvfh+x3zxF+vFlrmL7S1R4oy8cCswFvwsb+XPgkN8ybNmPI VDvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261914; x=1790866714; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=APC2vzzEaWI0IfcuCj+IJ6SBWsVQXpmXfTBg9jSKKIw=; b=QaBfhvJ3CoW0wvX0lMTn3jlFLJeJX5oFTfBXfLwZiMz91W+cgdmROoKBR2etP29eHV FuFxRrmkAlCB1FtZ/yx6Tm1mpfQYCBQd0ULnZc1Aut0/ZBN43EHMkEn9ZvnUBTS8GxUb xMfnX3hdsD0Y9RoGbjmUrjpof92sv/J0Rw0MrIEs4sIpm7DTTvi0CR9c36Q7Zxv6IySi J5nWW4OaavsTrUqLlUFUwa48cL+dGb/CjU5hwXze135qiI9PF1bE8myE8XLLmZ60Wg5v zfhXU/TDXogMtJylCi9zlCc6q0QH0WM7UDDl4sudek5ZDGlkTZhLDwysR8paPvlOVZgC Kd7g== X-Forwarded-Encrypted: i=1; AKwUvBxjYtce0+REbUss2+92IYfTIeLu4+JfQGEBR8mg3sdgGqAaeiV4HYsGZdo9NuzU5UVdIDaxMJgplD4hyGw=@vger.kernel.org X-Gm-Message-State: AFuF++mRXoFRmwdzEd1IjDB9LvneKmpTUPnDOZJ06nbx7vsOpz5/E4ar ZuqpxaTYIMfuRb1l+RG73IW3GuaEFpa1LCYbITWRhy4laXL4QO59LNVxxPFomKrKeINgCv6OwzK a8PC7SWhueQD3MKIvDYk5FA== X-Received: from wmpo33.prod.google.com ([2002:a05:600c:33a1:b0:49e:661c:77f4]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:34c7:b0:49c:dca2:ac47 with SMTP id 5b1f17b1804b1-49fe66c8e71mr45572405e9.2.1790261913911; Thu, 24 Sep 2026 07:58:33 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:43 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-10-vdonnefort@google.com> Subject: [PATCH v7 09/20] tracing/remotes: selftests: Add a test for the dmesg tracefs file From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Exercise the newly introduced dmesg tracefs file that turns on and off the dmesg redirection. Signed-off-by: Vincent Donnefort --- .../selftests/ftrace/test.d/remotes/dmesg.tc | 86 +++++++++++++++++++ .../selftests/ftrace/test.d/remotes/functions | 1 + .../ftrace/test.d/remotes/hypervisor/dmesg.tc | 11 +++ 3 files changed, 98 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/remotes/dmesg.tc create mode 100644 tools/testing/selftests/ftrace/test.d/remotes/hyperviso= r/dmesg.tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/dmesg.tc b/tools= /testing/selftests/ftrace/test.d/remotes/dmesg.tc new file mode 100644 index 000000000000..a5dcdd91e516 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/remotes/dmesg.tc @@ -0,0 +1,86 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Test trace remote dmesg redirection +# requires: remotes/test remotes/test/dmesg + +. $TEST_DIR/remotes/functions + +test_dmesg() +{ + if [ ! -f /sys/module/printk/parameters/time ] || [ "$(cat /sys/module= /printk/parameters/time)" !=3D "Y" ]; then + echo "printk timestamps are disabled - please enable CONFIG_PRINTK= _TIME" + exit_unsupported + fi + + echo 0 > tracing_on + assert_unloaded + + # + # Test dmesg on/off when tracing is disabled + # + echo 1 > dmesg + test $(cat dmesg) -eq 1 + assert_loaded + + echo 0 > dmesg + test $(cat dmesg) -eq 0 + assert_unloaded + + # + # Test events are logged to dmesg + # + + echo 1 > tracing_on + assert_loaded + echo 1 > dmesg + test $(cat dmesg) -eq 1 + + # Timestamp format is '[ XXXX.YYYY]' + last_ts=3D$(dmesg | tail -1 | sed -n 's/^\[ *\([0-9]*.[0-9]*\)\].*/\1/= p') + if [ -z "$last_ts" ]; then + last_ts=3D0 + fi + + nr_events=3D128 + for i in $(seq 1 $nr_events); do + echo $i > write_event + done + + sleep 1 + output=3D$(mktemp $TMPDIR/remote_test.XXXXXX) + dmesg | awk -v ts=3D$last_ts ' + /^\[ *[0-9]+\.[0-9]+\]/ { + t=3D$0; sub(/^[[ \t]*/, "", t); sub(/].*/, "", t); + if (t+0 > ts+0) print $0 + }' | grep "selftest id=3D" | sed 's/^[^]]*] //'> $output + + check_trace 1 $nr_events $output + + rm $output + + # + # Disable dmesg and verify events were not consumed by dmesg + # + echo 0 > dmesg + test $(cat dmesg) -eq 0 + + start_id=3D$(($nr_events + 1)) + end_id=3D$(($start_id + $nr_events)) + + for i in $(seq $start_id $end_id); do + echo $i > write_event + done + + sleep 1 + + output=3D$(dump_trace_pipe) + check_trace $start_id $end_id $output + rm $output +} + +if [ -z "$SOURCE_REMOTE_TEST" ]; then + set -e + + setup_remote_test + test_dmesg +fi diff --git a/tools/testing/selftests/ftrace/test.d/remotes/functions b/tool= s/testing/selftests/ftrace/test.d/remotes/functions index 05224fac3653..c368dea2ac4e 100644 --- a/tools/testing/selftests/ftrace/test.d/remotes/functions +++ b/tools/testing/selftests/ftrace/test.d/remotes/functions @@ -8,6 +8,7 @@ setup_remote() =20 cd remotes/$name/ echo 0 > tracing_on + [ -f dmesg ] && echo 0 > dmesg clear_trace echo 7 > buffer_size_kb echo 0 > events/enable diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/dmesg= .tc b/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/dmesg.tc new file mode 100644 index 000000000000..4d6ce8fed3cb --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/dmesg.tc @@ -0,0 +1,11 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Test hypervisor trace dmesg redirection +# requires: remotes/hypervisor/write_event remotes/hypervisor/dmesg + +SOURCE_REMOTE_TEST=3D1 +. $TEST_DIR/remotes/dmesg.tc + +set -e +setup_remote "hypervisor" +test_dmesg --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0129549E139 for ; Thu, 24 Sep 2026 14:58:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261921; cv=none; b=WKcXLAvDJAyQwcsoDnF+VpMHHO3nvIySoR9yfhKZTGTEm0uu6AtL71pmOjEekKdjg71Hqv7ijv0yngKr0JkuiLsJsjidlbfq7RsmF13NFcf4Ihxh04e5uYjWTesmN5pXI//zPpv/axlHVN7cRj3kWfyDncy4Cgu+iuRVS3jcxoQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261921; c=relaxed/simple; bh=5Z9HBjj3BpRkfdWDMhxS9FgnjGjJlXwCNSHrKScn+9c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qYGgp78WzicKdPjR0xTsCv5MfbT3V1SQllRQRZ+2yy8lagT2fWOLuDKVkM2Z7o0anCbA9HXi+X0TcHnhi2PgxrCoF8bCVdrWFR590DVE0Azc4lTBL++zp2iHacjmq3cuiTV0EYbqLln0ouF0we86RHh0oBpQ0avQIdyjGQJCcCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ETGigr75; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ETGigr75" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49e65f2f1baso20657775e9.3 for ; Thu, 24 Sep 2026 07:58:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261915; x=1790866715; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4s+Lr1be2QzPPE5UoKaJzL/Psyq/ahw8/pNYZ50pvpc=; b=ETGigr75IZJep4DcLv2qcGFpqw2SVcWtefG/JA1gaI6wKyNrIM73/Y0XgRY4G358R7 +VFt1Gg6ZIdkpbCS/oZPs3nHzhqxdx0jpRORTLeGHk8yFpAiOILxU63ZMQ1qH1YvHgII BVIP8NPclzOz1L6lCJ8gFQe8Z4bHNgzeyb5V4iJ0KZ6Q6CkOKhu/QbsRXyjCmYoeiBkq dUZrdyfCkqqDNVRzvoGZ01QdZSgnzQlLOBUmYRRxtMYSUNdgHJl8xoj2kbf1w5D+LfnJ n0o9KD2CxZbS2yL65FNM47t33qJuMNlsjugTu9jX5Hy1g5uBQfeimvexD12O3SzUPQzf mQqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261915; x=1790866715; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4s+Lr1be2QzPPE5UoKaJzL/Psyq/ahw8/pNYZ50pvpc=; b=PEKd8rkpV05u9/BVKaDCHuugID8AO0sHrFo6Al50a3mpMVaQWmo4bwP3iAOvv8+oHb 7E98RN9F5SMGsSHYNQJl/q6MLaCwSecVqzu7IIXv/UypbuS4xFtUhLehtNC0M6FmTCbB B6u7vq5LWwy8ZfzTjOIKhxbXxWzR0RIkr6HRJo4kz3R8Gvdf1uftEbQlicx1IokXalmS KWY4P9NSMwNsB9eQkyUwtb/x8FBE8h+wUNE4jxEsIhOGw51le4PNaLYMIgj0p+u1Ldjf uKW2w7zuD7nCQVrwrJT8+4nUNJS5I0yxpA0RfGCejSmP1YBRoC+snb0MVjGpsQIGCfjJ NftQ== X-Forwarded-Encrypted: i=1; AKwUvBxaUGAxT6865ZKFvhY1juhjEynQMIBB6GN260pokTYHNJc8MtLlkD4Vv64hWxVJWDwuMPQIG6sQgyxoxvo=@vger.kernel.org X-Gm-Message-State: AFuF++mtGvcKbSgdxVqxtcvURHTFUyJ5XvovMvoBmVllNZDBvBKmYIns Km/OjCpf+BUOfbOHEy9JUKWJ7xN2Jf6N1I/prEl7eBQ9V6QONtFE26FMkhAubODpqCvBjTgZau2 C7aT/BwrELXLEqvzhjxmZsw== X-Received: from wmpd22.prod.google.com ([2002:a05:600c:4c16:b0:49f:e43f:afd1]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:698c:b0:493:aa0a:45ad with SMTP id 5b1f17b1804b1-49fe66c385fmr46796115e9.2.1790261915081; Thu, 24 Sep 2026 07:58:35 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:44 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-11-vdonnefort@google.com> Subject: [PATCH v7 10/20] tracing/remotes: selftests: Prefix hypervisor folder From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename the hypervisor tests directory to "00hypervisor" to ensure they run first. This prevents the hypervisor tests from being interleaved with other remote tests which is confusing. Signed-off-by: Vincent Donnefort --- .../test.d/remotes/{hypervisor =3D> 00hypervisor}/buffer_size.tc | 0 .../ftrace/test.d/remotes/{hypervisor =3D> 00hypervisor}/dmesg.tc | 0 .../ftrace/test.d/remotes/{hypervisor =3D> 00hypervisor}/hotplug.tc | 0 .../ftrace/test.d/remotes/{hypervisor =3D> 00hypervisor}/reset.tc | 0 .../ftrace/test.d/remotes/{hypervisor =3D> 00hypervisor}/trace.tc | 0 .../test.d/remotes/{hypervisor =3D> 00hypervisor}/trace_pipe.tc | 0 .../test.d/remotes/{hypervisor =3D> 00hypervisor}/unloading.tc | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/buffer_size.tc (100%) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/dmesg.tc (100%) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/hotplug.tc (100%) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/reset.tc (100%) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/trace.tc (100%) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/trace_pipe.tc (100%) rename tools/testing/selftests/ftrace/test.d/remotes/{hypervisor =3D> 00hy= pervisor}/unloading.tc (100%) diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/buffe= r_size.tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/buff= er_size.tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/buffer= _size.tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/buffer= _size.tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/dmesg= .tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/dmesg.tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/dmesg.= tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/dmesg.= tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/hotpl= ug.tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/hotplug.= tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/hotplu= g.tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/hotplu= g.tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/reset= .tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/reset.tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/reset.= tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/reset.= tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/trace= .tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/trace.tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/trace.= tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/trace.= tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/trace= _pipe.tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/trace= _pipe.tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/trace_= pipe.tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/trace_= pipe.tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/hypervisor/unloa= ding.tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/unload= ing.tc similarity index 100% rename from tools/testing/selftests/ftrace/test.d/remotes/hypervisor/unload= ing.tc rename to tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/unload= ing.tc --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18A5F49DBA4 for ; Thu, 24 Sep 2026 14:58:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261922; cv=none; b=Xg0K/lgoCHJ5JceCYRY5euInf8HB8FrABEiPFtThqqbxZ3gwdrZAhNAoHcWSsElGQgFgAALr0ORRiL50ncVPAuXdLSt5qYSoo8gUy38pNrBRBTklnLto0AdKFSW+F5JlSAAED10uA8KUGcY+KMJyV5dNW+PXjAiVRii8sH9TiME= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261922; c=relaxed/simple; bh=THyM3E7Fj3Vkv4BmRFd3L43wu4SNvkcXwFz4JsGaHaw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lDAzT4qH8X7JbtkpJpvbWrLmV0Gb7+5DMyES7xAXNTs0bTqQG1+WYSs+biN0NUdGWg54NBV8gwA1/967uwvcsnHxMf/ZEscbnKY7QtLSLeQt7ZJl0FPOK/uracFeuHIde15zCVC6MmX4K8XOMhkaeVxskDlso7BC3vIeLVkQM8c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YMXG9QVT; arc=none smtp.client-ip=209.85.221.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YMXG9QVT" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4843227cfcfso738953f8f.1 for ; Thu, 24 Sep 2026 07:58:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261916; x=1790866716; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=hzfHMglUF4C/2b0MksPPNroPt2DUwh1HTrH/0JRGEXU=; b=YMXG9QVT97zudihhCUdG22EOHgZGAqR5X1zVxLcja6X3DL529fICFC42LNgXX+TTIZ Rp5t7V5j/LPCO4ZAzftdct/O0HnghHb57OiZ2Ahan/bcn5uvUjlGASstJwDFKViB8kFj /yUxPFZmvAkI15L1FW4dPSmRwPcwIwxVq5ARrwFvXbgz8yc8YjdzJKQ5QyQrBvEvKBTu mL8ETm/mAjUSinsJ5WqMnpJ0F5CtkzFazQmFhqXfLmvLt44PV4d9F07zDwGNKgljQPNf 7/c9w2Ke2uDOjWK5YfvNZjry+JTkUyzHF5eefTxiz1+0nzd8vixYGoKEV/vnmb6SP/8g 9Eig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261916; x=1790866716; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=hzfHMglUF4C/2b0MksPPNroPt2DUwh1HTrH/0JRGEXU=; b=hbAI+v68NAZlNxEeUEcMTJlKB6HDhnCpN+ozKMo3dloYpf0ISJfS4v0SIFe1tYqdeu E0gAZRxZRoWIUeFajhneg5yaHU2+C1hnOQphN+5CDOzxaZc4BUjjfPJHD+aT2BmsO6Pl 38WXUSDAP1TbVLO47SFjJbPdiHHaRt9yTd0zYNQMz6B88u5EckCqmooj43jnq9N7E3OQ XBYC7s4ZOGIfvfNWX178ICEiV3eRnErNHBd7C/F1OzXprRYj4j7747ds+xe63LPDDd1q ptyRiejViEJY1/DZLZOfkW+HYKN3NI9NS5ZYpIGqWd8slyD2pI3dQE1N3x6j3KkdNZJK Ylwg== X-Forwarded-Encrypted: i=1; AKwUvBx2BL+a72aL6P3t+bERZKjBp1DVw9jUlLr5/xiUCAUTAkpfqq5UIwnFJj3W3uXXP0mpwC9kekrJQPdgECM=@vger.kernel.org X-Gm-Message-State: AFuF++kgcXffSBsnZKwklN60eRRBCVuQNhfr/yLsIIFL79MjMyNEfAZc FR/cG+emBlgxVX/Wxsz+VTNQYVEjL9XhVIpFNM922qI8Fm7aqIWRv92Yhzj5+2Lp+o4RWUuRvpK HxQ/24ECR+lrydprYRazLCQ== X-Received: from wraj27.prod.google.com ([2002:a5d:453b:0:b0:488:5480:74f9]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:468c:b0:488:76f5:c7d with SMTP id ffacd0b85a97d-48876f50d2bmr1281513f8f.6.1790261915989; Thu, 24 Sep 2026 07:58:35 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:45 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-12-vdonnefort@google.com> Subject: [PATCH v7 11/20] ring-buffer: Use irqsave for the reader lock in ring_buffer_poll_remote From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort , Sashiko Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Calling rb_wakeups with the reader lock held but interrupts enabled can lead to a deadlock: the irq_work might run on the same CPU, but will block when acquiring that very same reader spinlock. First, rb_wakeups does not even need to be called under the reader lock. Move the function outside of the reader lock scope. Second, the reader lock must be acquired with IRQs disabled anyway. Use the irqsave variant of the spinlock. Fixes: 2e67fabd8b77 ("ring-buffer: Introduce ring-buffer remotes") Reported-by: Sashiko Signed-off-by: Vincent Donnefort --- kernel/trace/ring_buffer.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 04bb94c29f58..507ab1fab0fd 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -6895,13 +6895,17 @@ int ring_buffer_poll_remote(struct trace_buffer *bu= ffer, int cpu) struct ring_buffer_per_cpu *cpu_buffer; =20 if (cpu !=3D RING_BUFFER_ALL_CPUS) { + bool wakeup; + if (!cpumask_test_cpu(cpu, buffer->cpumask)) return -EINVAL; =20 cpu_buffer =3D buffer->buffers[cpu]; =20 - guard(raw_spinlock)(&cpu_buffer->reader_lock); - if (rb_read_remote_meta_page(cpu_buffer)) + scoped_guard(raw_spinlock_irqsave, &cpu_buffer->reader_lock) + wakeup =3D rb_read_remote_meta_page(cpu_buffer); + + if (wakeup) rb_wakeups(buffer, cpu_buffer); =20 return 0; @@ -6916,7 +6920,7 @@ int ring_buffer_poll_remote(struct trace_buffer *buff= er, int cpu) for_each_buffer_cpu(buffer, cpu) { cpu_buffer =3D buffer->buffers[cpu]; =20 - guard(raw_spinlock)(&cpu_buffer->reader_lock); + guard(raw_spinlock_irqsave)(&cpu_buffer->reader_lock); rb_read_remote_meta_page(cpu_buffer); } =20 --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9207649E5D4 for ; Thu, 24 Sep 2026 14:58:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261922; cv=none; b=BMrdZmQFkGz3TbFNx9O1nv15aXwEg7dw1LhQysdxTKL4P8+jqC6Tz5IC3gpywkbIbGFu6h1sLuX2LRZiISpHQVF15QUChySG7jFjS6IAriGnhD7GLrQkf122qiDTWUbT3Fvy4d1EFyEriCp3wqQKW6gVs6NEJErTd8njCHC2weE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261922; c=relaxed/simple; bh=95PAoWhYs9fl55L20UPN13Q1UjKONr8ycP+35DM6Vz8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=LRmw92xPY+if7bb5h/5WUDiEBmP8+MPzSYxshnU9UN4xieyhUipjPFLnTAEu8oxQZ5PT52+lI8CTn3/qVxdOPvgoWc19FD5qpjoti3Fhkqcq9VBI4oJoxu7wP6861d6tAoa2tZ2dF6DHOzltTnyAQUKRttTd+nLRKNp1SGlLdEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ERjxKx7I; arc=none smtp.client-ip=209.85.208.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ERjxKx7I" Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-6aa47eed2c3so2735770a12.2 for ; Thu, 24 Sep 2026 07:58:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261917; x=1790866717; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=BHfIQa3c5HGjai+QOtcEMEXeF4Yu9XjOtKwEKN+u8bI=; b=ERjxKx7IUXMRJFnazRMRTAmhmYasLvErje4O86LiVQhragrUKT2rRDuomHhl8rvs8H 1JO4ynLejBJaUfqLd3SEscoNw+UyH3iVKxXLQrj+DUkKIUHRvnTw8/cOUEa0IODUufYq 9gOSaL1Lb3bFPGp3xsHfM/Bql0KjM2Oa9+6LdFtPi68nGhlTfGIQyJlKWzrCSRXcVP1Q DR+uRa4uOLKdX2L1QW+kUJ5fRMJf/bMP/OqxPjqNyJio+BllRQa5A2RqUtLl3enBt7Cd So3EVcbPqunoi08Jhft5mHqynlSGzD5K1niLjizi00hKbmf2QHeVon+OeHNfv+7liUcv c+Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261917; x=1790866717; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BHfIQa3c5HGjai+QOtcEMEXeF4Yu9XjOtKwEKN+u8bI=; b=lpNVqf+dHJL3ZM8YGRA7l92qtFcuZq5JUVJbeueVeyhequ26vRip6/zi2XuC0ZYGQM M6rBnQ/fQi33D8lsMu7EMBMGsbgBMhKnswBba4kIFjCFdggqOdyMjgjw86UTqHk1YkdQ xUCexIKCWfubLgQslH12WRPZkhlWo6Z/bEXrIGvWbLGXRZBFzNtTZ7vn9noVwmCChnXC r5+PjeHbRWcxNXC0A2kTQx2DIzlu77Uh7yCO/Lz+ezceqnGq06DqcWW1xA0dkNEmGWOo d7fPxXL4zvf4xLmd4I1PcuP81Yc+XQ7chnX4ihkh88Bhu/DMif/sioJ9gtnvE9WpH6mY 9Fag== X-Forwarded-Encrypted: i=1; AKwUvBxt6pMz8SJ+n5dNIxh5nI559yeG4P4Uk4pd26E7qwSjNJgB0yMw/HLFkSc8/c1IbMpBokDZGPY+U72OBJk=@vger.kernel.org X-Gm-Message-State: AFuF++nuwjNiCS/E1jY5PFYl0E1G1oHFdQVynGdiZp/NYzZxD22RygIA BEvxgpNERUBmE+u7LPir8nHKZlu9U2bn9iReFqPFIGMu+UA+P9D3uMcEAQquV68JZuUEN92T8my PyHtEucPLYDt+4MRJZTw3AA== X-Received: from edcpl8.prod.google.com ([2002:a05:6402:c148:b0:6a8:1d4c:399]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:4390:b0:6a5:fbc6:cad1 with SMTP id 4fb4d7f45d1cf-6aac8f22fcemr2498337a12.7.1790261916925; Thu, 24 Sep 2026 07:58:36 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:46 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-13-vdonnefort@google.com> Subject: [PATCH v7 12/20] ring-buffer: Use panic-friendly locking in ring_buffer_iter interface From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for allowing trace_remote to dump the buffer on panic, make the non-consuming iterator functions panic-friendly. Signed-off-by: Vincent Donnefort --- kernel/trace/ring_buffer.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 507ab1fab0fd..f9533a97e2f4 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -5687,6 +5687,9 @@ static void rb_iter_reset(struct ring_buffer_iter *it= er) } } =20 +static inline bool rb_reader_lock(struct ring_buffer_per_cpu *cpu_buffer); +static inline void rb_reader_unlock(struct ring_buffer_per_cpu *cpu_buffer= , bool locked); + /** * ring_buffer_iter_reset - reset an iterator * @iter: The iterator to reset @@ -5698,15 +5701,18 @@ void ring_buffer_iter_reset(struct ring_buffer_iter= *iter) { struct ring_buffer_per_cpu *cpu_buffer; unsigned long flags; + bool dolock; =20 if (!iter) return; =20 cpu_buffer =3D iter->cpu_buffer; =20 - raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); + local_irq_save(flags); + dolock =3D rb_reader_lock(cpu_buffer); rb_iter_reset(iter); - raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); + rb_reader_unlock(cpu_buffer, dolock); + local_irq_restore(flags); } EXPORT_SYMBOL_GPL(ring_buffer_iter_reset); =20 @@ -6386,11 +6392,14 @@ ring_buffer_iter_peek(struct ring_buffer_iter *iter= , u64 *ts) struct ring_buffer_per_cpu *cpu_buffer =3D iter->cpu_buffer; struct ring_buffer_event *event; unsigned long flags; + bool dolock; =20 again: - raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); + local_irq_save(flags); + dolock =3D rb_reader_lock(cpu_buffer); event =3D rb_iter_peek(iter, ts); - raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); + rb_reader_unlock(cpu_buffer, dolock); + local_irq_restore(flags); =20 if (event && event->type_len =3D=3D RINGBUF_TYPE_PADDING) goto again; @@ -6536,12 +6545,15 @@ void ring_buffer_iter_advance(struct ring_buffer_it= er *iter) { struct ring_buffer_per_cpu *cpu_buffer =3D iter->cpu_buffer; unsigned long flags; + bool dolock; =20 - raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); + local_irq_save(flags); + dolock =3D rb_reader_lock(cpu_buffer); iter->missed_events =3D 0; rb_advance_iter(iter); =20 - raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); + rb_reader_unlock(cpu_buffer, dolock); + local_irq_restore(flags); } EXPORT_SYMBOL_GPL(ring_buffer_iter_advance); =20 --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7759749E5EF for ; Thu, 24 Sep 2026 14:58:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261922; cv=none; b=e4MgBerQSr5XIxKF7w77grTddmjSs70KwKps14mySjf3NRHY9xO9lpwhbXSRhP1TzfqRuyAsvGCP8DP6L8O4qiEGi3Gi2X69mMb6ENqfzbAChH0CGNOwl1cC/873ZkLCObd0OuSnqkj+JwTvkLexBeQWtv02R14LS4GszcVaFwU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261922; c=relaxed/simple; bh=j71Sqg0HqieWplu84cLXf0UWFIJkhiNp/QWh/moIYSM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=U3Kv3D1IxsI4ojAeJrF9MfwAlDTh6W/uDX2vHxYNYAH7IN8atkeglYjofb8ZNdntycw92Yjznp5DuiOs7f27NVA6ax0bloTMasz67tjOnhPEYfWD4dtDPcpJPpo90TreE0r7kbj6QEbEZraATC1fDft1q8MMmhO4NMD8U5bMmcE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=K7nCJLkV; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="K7nCJLkV" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49e661c6440so12992445e9.3 for ; Thu, 24 Sep 2026 07:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261918; x=1790866718; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=p7BbaNLQdlfwNnIQp6SkICmB6RAILmmvxnVT02lEHvo=; b=K7nCJLkVnm+qQI2d2eRHd7M9CROBV97Ua5llehx3Pead34v5HyEE74aoWb9dnhMR2Q bH2AXqVz1Mvxlpz21CgAcaNYsYR/CYq8bkIV7YD+ZXITeNI1wSezRuE9fRM+iWjgI4Sq cI6HffsZT5bFOVKIB6JU709QVnQ7epiQTDHTsqLO6L1gIDS32qNevP99NjIzf/qLWIEZ 2zgxDDkmYKpU9TG6vf/aK/G16UA3B4QXABG5S6i9gmr6j2OH+PZty2MpLfDPMJ7DNCP1 HEKrtjWg8RKjnW//55QqSss57KQDJ8W0bw7zApJtpIP0QKRrkm7K1X9qlUrn+BAkqiiZ t2MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261918; x=1790866718; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=p7BbaNLQdlfwNnIQp6SkICmB6RAILmmvxnVT02lEHvo=; b=olVXPHIN2FUkIMIFmLV22/hl6WEv6EjHu+/hwf8sZaAcvVuwc2fj3I+uCa7Zt9RwpI Z2Zqpjvn+ykGrnh7mRDTqtND3KCoWdpkiHod5sCqHutKzc3kSfMBlV+9WLjljrc/mk8N 5FsWs9lP2VoOWfzO2yuXFzfF8qZ9QS9PvEfuvY17ab/uyiGle33p3SyPMyBK1B/lIli1 YPVcPq2w1IVr9pyT52PHyeDKrJ6of4R84a1Z7NORhRG2QknJQCwdsXqVEKWvJ/rWAOZz OVYlIV4D3t/nalwNvsi2SnksA0/lkA9+2qVNpDJ8HUG4Un+m7XPaH5xvQWIznSwG33pC ZkQw== X-Forwarded-Encrypted: i=1; AKwUvBzbCnxLgX0NZGRP7uDDXUa2Nsj8ND831u/bySVz88VvFSXfqTX+Wyp5+cJoiyv+ukVTspThdCyb4VuqaUE=@vger.kernel.org X-Gm-Message-State: AFuF++mEOsSXRGcj0LdSs8HonQk1cXBhsLPCjWxh6FPamL7YmKw2nbzO jhZyzZOS6/n4yajoDJFzAcFtAMRc7PNhUcQqCxh+ylyUc73KpAoAH3XSW56DCMYNpS0HXfnb3W3 k9ktZoSpLFRzyizLoVZXreA== X-Received: from wmsr18.prod.google.com ([2002:a05:600c:8b12:b0:49e:602d:8036]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:8b86:b0:49d:1fd8:b874 with SMTP id 5b1f17b1804b1-49fe66f13c2mr49000245e9.19.1790261917979; Thu, 24 Sep 2026 07:58:37 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:47 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-14-vdonnefort@google.com> Subject: [PATCH v7 13/20] ring-buffer: Add ring_buffer_read_remote_meta_page() From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for the introduction of a panic handler for trace remotes, add ring_buffer_read_remote_meta_page(). This is similar to ring_buffer_poll_remote, but it doesn't try to wake up readers and, in the !RING_BUFFER_ALL_CPUS case, uses panic-friendly locks. While at it, update trace_remote_has_cpu() to use this new function instead of ring_buffer_poll_remote(), avoiding unnecessary wakeups when verifying if a CPU buffer is active. Signed-off-by: Vincent Donnefort --- include/linux/ring_buffer.h | 1 + kernel/trace/ring_buffer.c | 41 +++++++++++++++++++++++++++++++++++++ kernel/trace/trace_remote.c | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index eac3e9080c3c..31ad626f48b6 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h @@ -315,6 +315,7 @@ struct ring_buffer_remote { void *priv; }; =20 +int ring_buffer_read_remote_meta_page(struct trace_buffer *buffer, int cpu= ); int ring_buffer_poll_remote(struct trace_buffer *buffer, int cpu); =20 struct trace_buffer * diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index f9533a97e2f4..df16e05d7049 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -6902,6 +6902,47 @@ bool ring_buffer_empty_cpu(struct trace_buffer *buff= er, int cpu) } EXPORT_SYMBOL_GPL(ring_buffer_empty_cpu); =20 +/** + * ring_buffer_read_remote_meta_page - read the meta page of a remote ring= buffer + * @buffer: The ring buffer + * @cpu: The CPU buffer to read (or RING_BUFFER_ALL_CPUS) + * + * Returns: + * 0 on success, or -EINVAL if the CPU is not in the buffer's cpumask. + */ +int ring_buffer_read_remote_meta_page(struct trace_buffer *buffer, int cpu) +{ + struct ring_buffer_per_cpu *cpu_buffer; + + if (cpu !=3D RING_BUFFER_ALL_CPUS) { + unsigned long flags; + bool dolock; + + if (!cpumask_test_cpu(cpu, buffer->cpumask)) + return -EINVAL; + + cpu_buffer =3D buffer->buffers[cpu]; + + local_irq_save(flags); + dolock =3D rb_reader_lock(cpu_buffer); + rb_read_remote_meta_page(cpu_buffer); + rb_reader_unlock(cpu_buffer, dolock); + local_irq_restore(flags); + return 0; + } + + guard(cpus_read_lock)(); + + for_each_buffer_cpu(buffer, cpu) { + cpu_buffer =3D buffer->buffers[cpu]; + + guard(raw_spinlock_irqsave)(&cpu_buffer->reader_lock); + rb_read_remote_meta_page(cpu_buffer); + } + + return 0; +} + int ring_buffer_poll_remote(struct trace_buffer *buffer, int cpu) { struct ring_buffer_per_cpu *cpu_buffer; diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index 79afb2cdf358..ea0fc347dff8 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -351,7 +351,7 @@ static bool trace_remote_has_cpu(struct trace_remote *r= emote, int cpu) if (cpu =3D=3D RING_BUFFER_ALL_CPUS) return true; =20 - return ring_buffer_poll_remote(remote->trace_buffer, cpu) =3D=3D 0; + return ring_buffer_read_remote_meta_page(remote->trace_buffer, cpu) =3D= =3D 0; } =20 static void __free_ring_buffer_iter(struct trace_remote_iterator *iter, in= t cpu) --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CD5249BD92 for ; Thu, 24 Sep 2026 14:58:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261924; cv=none; b=Al+MF94p/apE8jXUNcEHSrqc5p7C2co1w5Fcmv8/Vu89VDXd8OxVDQJNa9sd/QS2bkqUeefFycVf1Hvj/cYcUjEVqu0nXjLK8VRflVy1+fs3RJvssi3nlZ4DIyQXo3ho3bVbF0qqMLQ6FW6R1aZ05smDJqa35Uw3RyNk3qTCiUg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261924; c=relaxed/simple; bh=29OEV1XRj92C0jmL9xqVACrPk1/1JdAX4Z/bbOoFKsc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SscWMcb/y46IQvWOUl5U7PWwK93UINfllOjCC5fOE44tz6FaEwNifXANqwb94vuLjoJhYCrs0I1FlCDZwEvU9Cff01PTntuMZ+tJxPoetryjV4oQEC30qxfFap1vKogqiBVyVOUMfFzjYxp147/Y8mTtWMHHr/8a37LOIpyKpc4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vxPo8PUQ; arc=none smtp.client-ip=209.85.221.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vxPo8PUQ" Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-4887782ab2dso215127f8f.3 for ; Thu, 24 Sep 2026 07:58:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261919; x=1790866719; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/rK/bC4txKuETskqWy3KUoq+SaTW39LjoZD3qIqTAvo=; b=vxPo8PUQo7VLn7zrm+rmJKXVfNvtQd4cpMA99DNWxu75AYSG6US3knq958/x4BYSc9 6deD50Ro1auFA/VbhrZlonvm9lX3cjXKuiNVSQfV/tCPsf+J0gdx3U74LByoqetk6qDA ffdZ1Gag7coX48vYb2ivP6CFPIaijDZj25TY48O1nQHnbGFVnhkhutlNz2XYlyne5Ny9 OFIkfcdLdDKyEib8xsz/eltA8XXkfVVRvwEcQLLOzP+bDL6FIKrwR/3gYeF2+BWHyq75 Qoe+rKmy5J7/OPyzfefBso2n1SR2ynbc6jUjqLUm5soP6r/MbN1nHJrFEEEV32+5BBw1 ne3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261919; x=1790866719; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/rK/bC4txKuETskqWy3KUoq+SaTW39LjoZD3qIqTAvo=; b=A4s2kNhznAOtf/tVE1g/rqPWoWXRr4Ank13Ln5cUtx5Hojojr+oSEYf23IKWX4jHkl Lx3T2PAVLVIeoOgpzmLGpHQSVGg+I7sm1WDEfdcSItg30yLAat7IuE9Fs0vqbaV7RJSi 4IEjeNm4qFObw6KmEuIyHU59bWZ1GFOS5PBp4r7lw3G+oLK4aq7yKGZ/aQ4DJ3yQCMc0 qOHNK0GxsXV2vTy8b6m6w2mWbDdzCo0cZjjQuYt/l4gjhvWh8IW7N2dZnYWXrvEDJwN2 Idg9TGvegDgpbbPZ67y/dDMX9+sC/HN9/m9evAr1SD5Gf4GiKdi4LPZPD4AMhGPzOFWk tojg== X-Forwarded-Encrypted: i=1; AKwUvBzWUfZxnzSihnd/Gmxed0vhE+xejrWeSdVgaLGlqxotG+i0o3U6Ni/UoJc/LASofUTpvrMUtQMsX3ma/q8=@vger.kernel.org X-Gm-Message-State: AFuF++m0yWGHsBLGMRXVSDHVMDXDfHcStsGHHr0DioF2HU4AwyoFLJP/ 2/vA8u+yCXJHZ3mUH5fxSLyPLgytPkOlJzNFKQpjW87tIc1skEzWoZ39dieya7VpDbYRy9Wiriy yGNhvFJRkyIyxefLDoIZxAg== X-Received: from wrbev3.prod.google.com ([2002:a05:6000:23c3:b0:488:614b:b574]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:4108:b0:488:78e4:5e34 with SMTP id ffacd0b85a97d-48878e460c1mr853815f8f.9.1790261919207; Thu, 24 Sep 2026 07:58:39 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:48 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-15-vdonnefort@google.com> Subject: [PATCH v7 14/20] ring-buffer: Add kerneldoc for ring_buffer_poll_remote From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document ring_buffer_poll_remote(). Signed-off-by: Vincent Donnefort --- kernel/trace/ring_buffer.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index df16e05d7049..5dec079e28f1 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -6943,6 +6943,17 @@ int ring_buffer_read_remote_meta_page(struct trace_b= uffer *buffer, int cpu) return 0; } =20 +/** + * ring_buffer_poll_remote - poll a remote ring buffer for new data + * @buffer: The ring buffer + * @cpu: The CPU buffer to poll (or RING_BUFFER_ALL_CPUS) + * + * This function polls the specified remote CPU buffer (or all of them) + * by reading its meta page to update the local reader's view. If new + * entries are detected, it triggers wakeups for any waiting readers. + * Returns: + * 0 on success, or -EINVAL if the CPU is not in the buffer's cpumask. + */ int ring_buffer_poll_remote(struct trace_buffer *buffer, int cpu) { struct ring_buffer_per_cpu *cpu_buffer; --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6EB84A0130 for ; Thu, 24 Sep 2026 14:58:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261926; cv=none; b=Jmtjk+1SfhI4WAcEbXVYcz0Yr5qGmmXuqaDOMKe/YI83dsyRuEPnTYkXOIee3+VFJGEe6fF0l0OGiUZrdbkpEJym6KdVWJ7cEuDlmZcyNaptFt8+9uz7syRRJzr04lbeaTpINn7CLNw0iu4LgKwwoIs+4zKf2dANP/tBreKl7II= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261926; c=relaxed/simple; bh=AKWz0iw5jfF2tGwtx6OioIU2neT19g0ybB86g2N45Yg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tq2/8BKQZso9oUcJAL1sY+539XpPVhD6+/51LLXlYIMEfX/pU+u7GlOnN5P7fet8oxrHUYQvqxvPCHfmaGbdLQ9GRTp0k0L2OrHfFsEbttR4YAxEL31eT+ScoTTR0p0BVqDIuNwmkPwfHibM9PDteLsHar40Xq3t3MKH+9wDFy4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YMFLRHEB; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YMFLRHEB" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-49e65f2f1baso20658795e9.3 for ; Thu, 24 Sep 2026 07:58:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261921; x=1790866721; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3tlGds+/Whf8GVsVT0m3lg/Uwm9Llopn7YWRo47lBI0=; b=YMFLRHEBxcSUD/5Rp18nnIU0vSXuMfOb2NXMaUXdZoCdVFk/Onn230ZrJpP9yUfsqI N3ASvnvtOVnXPfGi+VZtdEneflThUbm3FG8IrhWFLxA2ZXfC6+TSsdLscsGREgVhBrmQ 8xU08Eh8zIakPdqHLrfBqUNE83tNStAuuNyv+OPIzv8VOhlgb0KEDT7Q4KQ5a761/AX4 x6CN6+r4EVIgyECLuGK5oVlLc9tI1kQ3XkB2MLgqyYWRvQpZCNmNLjxVIxOdd52iAIbh CqqpBOFpLNxrJUHnn75NcdRhgR6ktsocxe4YOlK+Wpey07V4VgJshPUH5HXlyqAdG3bM NY6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261921; x=1790866721; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3tlGds+/Whf8GVsVT0m3lg/Uwm9Llopn7YWRo47lBI0=; b=YPBNctQfyWBNxVw+pIrrXohYgjI2MhG7MDOAXkjVahoSoIORIO5eSpNfUNoPziwvCZ JvS7/OnE1b2je94E5Tg4IoduBg3imTbhOH6HcNdffnkaGNVG6N/ChXt891g3GVdbOEt7 CtoNv/J+h+WrtmP9j+1nS3VvgZT6ncm7dRpWiaLA3bfwQL3PxBMbZ0BZaze8k30BcMSg EkidCzUu0Vipis2GAamC4Nw3beoMry/njO0R9IPMVyjrrJVO/vM7uuaER7DBGhoxZ2GE +sB5BhgYsSUF4Ey+eNscqKByzZe9tTA4hUDflg6W8hmwoQ30UAFFYO5BZ52dnJ5frNyr VXhQ== X-Forwarded-Encrypted: i=1; AKwUvBytBZNhw6XvZoCAp6cUyXW5nWMA3w2c6FCqz1qgBqd72JWxarcKuLAyyFldqZtI4oiwj7tT4CXyfRe4lxI=@vger.kernel.org X-Gm-Message-State: AFuF++m35tgshXubLQwzZSJCzq/bTmcXsZYgExpXbRG+zxlGT0o/Vogx mWHURT7Bi9GAA9A/It29kScSnhRz68dkljmvLOLpHNiUba7bBQDXKZ2XjmuWVWfS2M5oATzeeq0 my3org8w6gQEYmNSpJl3lug== X-Received: from wmpc40.prod.google.com ([2002:a05:600c:4a28:b0:49f:e371:2ada]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:19d3:b0:49e:6777:da79 with SMTP id 5b1f17b1804b1-49fe66fb4a7mr44847125e9.26.1790261920560; Thu, 24 Sep 2026 07:58:40 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:49 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-16-vdonnefort@google.com> Subject: [PATCH v7 15/20] tracing/remotes: Add dump_on_panic tracefs file From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When enabled, dump_on_panic will dump the content of the trace remote buffer if the system panics. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 233 +++++++++++++++++++++++++++++------- 1 file changed, 193 insertions(+), 40 deletions(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index ea0fc347dff8..0a360690b174 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include #include @@ -22,6 +24,7 @@ enum tri_type { TRI_CONSUMING, TRI_NONCONSUMING, TRI_DMESG, + TRI_PANIC, }; =20 struct trace_remote_iterator { @@ -59,6 +62,9 @@ struct trace_remote { unsigned int poll_cnt; unsigned int poll_ms; bool tracing_on; + bool panic_on; + struct notifier_block panic_notifier; + struct trace_remote_iterator *panic_iter; struct delayed_work poll_work; }; =20 @@ -71,10 +77,15 @@ static bool trace_remote_loaded(struct trace_remote *re= mote) return !!remote->trace_buffer; } =20 +static void trace_remote_unload(struct trace_remote *remote); +static int trace_remote_panic_load(struct trace_remote *remote); +static void trace_remote_panic_unload(struct trace_remote *remote); + static int trace_remote_load(struct trace_remote *remote) { struct ring_buffer_remote *rb_remote =3D &remote->rb_remote; struct trace_buffer_desc *desc; + int ret =3D 0; =20 lockdep_assert_held(&remote->lock); =20 @@ -89,15 +100,28 @@ static int trace_remote_load(struct trace_remote *remo= te) rb_remote->swap_reader_page =3D remote->cbs->swap_reader_page; rb_remote->priv =3D remote->priv; rb_remote->reset =3D remote->cbs->reset; + remote->trace_buffer_desc =3D desc; remote->trace_buffer =3D ring_buffer_alloc_remote(rb_remote); if (!remote->trace_buffer) { remote->cbs->unload_trace_buffer(desc, remote->priv); return -ENOMEM; } =20 - remote->trace_buffer_desc =3D desc; + if (remote->panic_on) { + ret =3D trace_remote_panic_load(remote); + if (ret) + trace_remote_unload(remote); + } =20 - return 0; + return ret; +} + +static void trace_remote_unload(struct trace_remote *remote) +{ + trace_remote_panic_unload(remote); + ring_buffer_free(remote->trace_buffer); + remote->trace_buffer =3D NULL; + remote->cbs->unload_trace_buffer(remote->trace_buffer_desc, remote->priv); } =20 static void trace_remote_try_unload(struct trace_remote *remote) @@ -115,9 +139,7 @@ static void trace_remote_try_unload(struct trace_remote= *remote) if (!ring_buffer_empty(remote->trace_buffer)) return; =20 - ring_buffer_free(remote->trace_buffer); - remote->trace_buffer =3D NULL; - remote->cbs->unload_trace_buffer(remote->trace_buffer_desc, remote->priv); + trace_remote_unload(remote); } =20 static int trace_remote_enable_tracing(struct trace_remote *remote) @@ -435,58 +457,68 @@ static void trace_remote_dec_poll(struct trace_remote= *remote) static struct trace_remote_iterator *trace_remote_iter(struct trace_remote *remote, int cpu, enum tri_type typ= e) { - struct trace_remote_iterator *iter =3D NULL; + struct trace_remote_iterator *iter __free(kfree) =3D kzalloc_obj(*iter); int ret; =20 lockdep_assert_held(&remote->lock); =20 - if (type =3D=3D TRI_NONCONSUMING && !trace_remote_loaded(remote)) - return NULL; + if (!iter) + return ERR_PTR(-ENOMEM); =20 - ret =3D trace_remote_get(remote, cpu); - if (ret) - return ERR_PTR(ret); + switch (type) { + case TRI_NONCONSUMING: + if (!trace_remote_loaded(remote)) + return NULL; + fallthrough; + case TRI_CONSUMING: + case TRI_DMESG: + ret =3D trace_remote_get(remote, cpu); + if (ret) + return ERR_PTR(ret); + break; + case TRI_PANIC: + break; + } =20 if (!trace_remote_has_cpu(remote, cpu)) { ret =3D -ENODEV; goto err; } =20 - iter =3D kzalloc_obj(*iter); - if (iter) { - iter->remote =3D remote; - iter->cpu =3D cpu; - iter->type =3D type; - trace_seq_init(&iter->seq); + iter->remote =3D remote; + iter->cpu =3D cpu; + iter->type =3D type; + trace_seq_init(&iter->seq); =20 - switch (type) { - case TRI_DMESG: - /* only one dmesg iter allowed */ - if (WARN_ON_ONCE(remote->dmesg)) { - ret =3D -EBUSY; - break; - } - smp_store_release(&remote->dmesg, iter); - fallthrough; - case TRI_CONSUMING: - trace_remote_inc_poll(remote); - break; - case TRI_NONCONSUMING: - ret =3D __alloc_ring_buffer_iter(iter, cpu); - break; + switch (type) { + case TRI_DMESG: + /* only one dmesg iter allowed */ + if (WARN_ON_ONCE(remote->dmesg)) { + ret =3D -EBUSY; + goto err; } - + smp_store_release(&remote->dmesg, iter); + fallthrough; + case TRI_CONSUMING: + trace_remote_inc_poll(remote); + break; + case TRI_PANIC: + case TRI_NONCONSUMING: + ret =3D __alloc_ring_buffer_iter(iter, cpu); if (ret) goto err; - - return iter; + break; } - ret =3D -ENOMEM; + + return no_free_ptr(iter); =20 err: - kfree(iter); - trace_remote_put(remote); - + switch (type) { + case TRI_PANIC: + break; + default: + trace_remote_put(remote); + } return ERR_PTR(ret); } =20 @@ -509,14 +541,18 @@ static void trace_remote_iter_free(struct trace_remot= e_iterator *iter) fallthrough; case TRI_CONSUMING: trace_remote_dec_poll(remote); + trace_remote_put(remote); break; case TRI_NONCONSUMING: + __free_ring_buffer_iter(iter, iter->cpu); + trace_remote_put(remote); + break; + case TRI_PANIC: __free_ring_buffer_iter(iter, iter->cpu); break; } =20 kfree(iter); - trace_remote_put(remote); } =20 static bool trace_remote_iter_is_consuming(struct trace_remote_iterator *i= ter) @@ -990,6 +1026,118 @@ static int dmesg_show(struct seq_file *s, void *unus= ed) } DEFINE_TRACE_REMOTE_ATTRIBUTE(dmesg); =20 +static int trace_remote_panic_handler(struct notifier_block *self, unsigne= d long ev, void *v) +{ + struct trace_remote *remote =3D container_of(self, struct trace_remote, p= anic_notifier); + struct trace_remote_iterator *iter =3D smp_load_acquire(&remote->panic_it= er); + int cpu; + + if (!iter) { + pr_warn("Unexpected error: no panic iterator for the trace remote\n"); + return NOTIFY_DONE; + } + + for_each_possible_cpu(cpu) { + if (iter->rb_iters[cpu]) { + /* No RING_BUFFER_ALL_CPUS to avoid taking cpu_read_lock() */ + ring_buffer_read_remote_meta_page(remote->trace_buffer, cpu); + ring_buffer_iter_reset(iter->rb_iters[cpu]); + } + } + + while (trace_remote_iter_read_event(iter)) { + trace_seq_init(&iter->seq); + + trace_remote_iter_print_event(iter); + trace_seq_putc(&iter->seq, 0); + pr_emerg("%s", seq_buf_str(&iter->seq.seq)); + + trace_remote_iter_move(iter); + touch_nmi_watchdog(); + } + + return NOTIFY_DONE; +} + +static int trace_remote_panic_load(struct trace_remote *remote) +{ + struct notifier_block *notifier =3D &remote->panic_notifier; + struct trace_remote_iterator *iter; + + lockdep_assert_held(&remote->lock); + + if (remote->panic_iter) + return 0; + + iter =3D trace_remote_iter(remote, RING_BUFFER_ALL_CPUS, TRI_PANIC); + if (IS_ERR(iter)) + return PTR_ERR(iter); + + smp_store_release(&remote->panic_iter, iter); + + notifier->notifier_call =3D trace_remote_panic_handler; + notifier->priority =3D INT_MAX - 1; + atomic_notifier_chain_register(&panic_notifier_list, notifier); + + return 0; +} + +static void trace_remote_panic_unload(struct trace_remote *remote) +{ + struct trace_remote_iterator *iter =3D remote->panic_iter; + + lockdep_assert_held(&remote->lock); + + if (!iter) + return; + + atomic_notifier_chain_unregister(&panic_notifier_list, &remote->panic_not= ifier); + smp_store_release(&remote->panic_iter, NULL); + trace_remote_iter_free(iter); +} + +static ssize_t dump_on_panic_write(struct file *filp, const char __user *u= buf, + size_t cnt, loff_t *ppos) +{ + struct seq_file *seq =3D filp->private_data; + struct trace_remote *remote =3D seq->private; + bool enable; + int ret; + + ret =3D kstrtobool_from_user(ubuf, cnt, &enable); + if (ret) + return ret; + + guard(mutex)(&remote->lock); + + if (enable =3D=3D remote->panic_on) + return cnt; + + if (trace_remote_loaded(remote)) { + if (enable) { + ret =3D trace_remote_panic_load(remote); + if (ret) + return ret; + } else { + trace_remote_panic_unload(remote); + } + } + + WRITE_ONCE(remote->panic_on, enable); + + return cnt; +} + +static int dump_on_panic_show(struct seq_file *s, void *unused) +{ + struct trace_remote *remote =3D s->private; + + seq_printf(s, "%d\n", READ_ONCE(remote->panic_on)); + + return 0; +} +DEFINE_TRACE_REMOTE_ATTRIBUTE(dump_on_panic); + static int trace_remote_init_tracefs(const char *name, struct trace_remote= *remote) { struct dentry *remote_d, *percpu_d, *d; @@ -1017,6 +1165,11 @@ static int trace_remote_init_tracefs(const char *nam= e, struct trace_remote *remo if (!d) goto err; =20 + d =3D trace_create_file("dump_on_panic", TRACEFS_MODE_WRITE, remote_d, re= mote, + &dump_on_panic_fops); + if (!d) + goto err; + d =3D trace_create_file("buffer_size_kb", TRACEFS_MODE_WRITE, remote_d, r= emote, &buffer_size_kb_fops); if (!d) --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3C3B4A0922 for ; Thu, 24 Sep 2026 14:58:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261926; cv=none; b=fimMFhIygNI2Fsj8Bd7oU5GWkiVV5G3AYNEa9otcwI07lXLdidOwd5nixtct6jSRIAy5E9aAuviIHHBaIxVoROvaTsteY04pH5/sWZNXIJuLLd0qt2Wn0bmcppZ5c/8aPWfYlcE+0DYVRWZUrs8KF7GyvfSODI538DCD4RgkHyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261926; c=relaxed/simple; bh=x7ZsEPn+08PivkGNNY7yMioERj5C50CMJucDPlVw1Bs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hjNOTfiyjHqGiF9oekCoN2EKIiiK8wdzwm0zNx+oCRBz9ml/UBHiEtmwOqF6juaAltV0DWrm3XOrCBBNxz2vDRu0F5XpPtr8jWEboYa2tI0n6Mu7eBMYIvHbclxpKbN+g+2LjC6vfthUj4GpEagcbCfdqulX0DuHsdlmyVp5+4U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XKtF21sf; arc=none smtp.client-ip=209.85.128.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XKtF21sf" Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4994d67d0e3so15030235e9.2 for ; Thu, 24 Sep 2026 07:58:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261922; x=1790866722; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Uku/5cGCHX3mD6RwBtTFznDSRiqK3GB3+4Rvtb284U8=; b=XKtF21sfBfTzuICOUn3I2PpsJwnqsNzMRL3s7FB/9YLfs0NKZ80KGWwQ5uMbkFDa0T 4UB5IRYh+Nj6atrfvtqEARjUzGfnAYLa+3gPF8wnMntd+C0K/fsfpuz9KGLnQFacSCuw 1c/KX5ensylQI46ytXJ0RIZxItXXJ+7hvluRsJRTg4AF+6oW9/qDhFs0byTp7FpdtARf anPw671gXrXPpTKW+mPcFYha4oZo+m848zT9PncHxnyUfWMRrNmfrU/KpZAOHvVDy364 5KHUAfFhgHHNwBEGUjTQCZMnB0yKq4VR2DqmQfFG4WECICHL4uvlxCcwqdU8QB2NUM3g kb4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261922; x=1790866722; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Uku/5cGCHX3mD6RwBtTFznDSRiqK3GB3+4Rvtb284U8=; b=AooBXWAXqWbto+2uCF1jFCxQ0hEMP4KR6ph9rjN2SYNgxpVu3D6oIgIUQTINWjjR9r ZRBsbRTrhS+2d8ulnnerQKd1T90CoB0VQVmMPM/fyXM7iEax8OeFwr0HFW/tP1wQzCjh xqP9lR5yMoqk5gMDRKLU3j8OUcMfsKHyzVxnsZgvr0IPhMxHqdweivAn8HUpKRtCjUt6 gmHhugkhKqc0JzLC/ZfJ+SBlnnWA8md5kKg9baa7jZgfmGTWmiR16xv3idB1JUmPxLLg hN7f3t3BtSch4bo1D9IXSSWC6kLqn6+aY6PSj7MA2PFhwmvTjeC9+1xjCvgkg8CrXhcz YARA== X-Forwarded-Encrypted: i=1; AKwUvBzgV/Q6tzsRiecSKWYPOZwTHAoPd/RNftVwO533PrLu75ztf0URthtfxoXVDXrldnGp0J+PKqxk9cdtcS4=@vger.kernel.org X-Gm-Message-State: AFuF++m82tVh8opDNfbC/gTK1k1s5X+BmHhrW0mLTZ6QSBvxCmfYQdT9 aOLNXYMzXUKT5XBjUq4g3JOhjwRwVgkuHW7D66asSeW/2FFDF1/ZMaC/raDqzssYmgFGuCHocSb 2FR6zKGdgp+4C7cQmjA6kiQ== X-Received: from wmin24.prod.google.com ([2002:a7b:cbd8:0:b0:49f:e42a:bc6a]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:c48e:b0:49f:ce72:dfe7 with SMTP id 5b1f17b1804b1-49fe6710a41mr43535605e9.35.1790261921755; Thu, 24 Sep 2026 07:58:41 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:50 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-17-vdonnefort@google.com> Subject: [PATCH v7 16/20] tracing/remotes: selftests: Add a test for the dump_on_panic tracefs file From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Exercise the newly introduced dump_on_panic tracefs file that turns on or off the trace remote buffer dump on system panic. Signed-off-by: Vincent Donnefort --- .../remotes/00hypervisor/dump_on_panic.tc | 11 ++++ .../ftrace/test.d/remotes/dump_on_panic.tc | 50 +++++++++++++++++++ .../selftests/ftrace/test.d/remotes/functions | 1 + 3 files changed, 62 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/remotes/00hypervi= sor/dump_on_panic.tc create mode 100644 tools/testing/selftests/ftrace/test.d/remotes/dump_on_p= anic.tc diff --git a/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/dum= p_on_panic.tc b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/= dump_on_panic.tc new file mode 100644 index 000000000000..1b6bf21c5d9c --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/remotes/00hypervisor/dump_on_pa= nic.tc @@ -0,0 +1,11 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Test hypervisor trace dump_on_panic +# requires: remotes/hypervisor/write_event remotes/hypervisor/dump_on_panic + +SOURCE_REMOTE_TEST=3D1 +. $TEST_DIR/remotes/dump_on_panic.tc + +set -e +setup_remote "hypervisor" +test_dump_on_panic diff --git a/tools/testing/selftests/ftrace/test.d/remotes/dump_on_panic.tc= b/tools/testing/selftests/ftrace/test.d/remotes/dump_on_panic.tc new file mode 100644 index 000000000000..ff5ca29fb1b5 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/remotes/dump_on_panic.tc @@ -0,0 +1,50 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Test trace remote dump_on_panic +# requires: remotes/test remotes/test/dump_on_panic + +. $TEST_DIR/remotes/functions + +test_dump_on_panic() +{ + # + # Toggle when the buffer is loaded + # + assert_loaded + echo 1 > dump_on_panic + echo 0 > dump_on_panic + + # + # Toggle when the buffer is unloaded + # + echo 0 > tracing_on + assert_unloaded + echo 1 > dump_on_panic + echo 0 > dump_on_panic + + # + # Load and unload buffer while dump_on_panic is enabled + # + echo 0 > tracing_on + assert_unloaded + + echo 1 > dump_on_panic + echo 1 > tracing_on + echo 0 > tracing_on + + [ -z "$TRIGGER_PANIC" ] && return + + echo 1 > tracing_on + + for i in $(seq 1 32); do + echo $i > write_event + done + + echo c > /proc/sysrq-trigger +} + +if [ -z "$SOURCE_REMOTE_TEST" ]; then + set -e + setup_remote_test + test_dump_on_panic +fi diff --git a/tools/testing/selftests/ftrace/test.d/remotes/functions b/tool= s/testing/selftests/ftrace/test.d/remotes/functions index c368dea2ac4e..f0225af23714 100644 --- a/tools/testing/selftests/ftrace/test.d/remotes/functions +++ b/tools/testing/selftests/ftrace/test.d/remotes/functions @@ -9,6 +9,7 @@ setup_remote() cd remotes/$name/ echo 0 > tracing_on [ -f dmesg ] && echo 0 > dmesg + [ -f dump_on_panic ] && echo 0 > dump_on_panic clear_trace echo 7 > buffer_size_kb echo 0 > events/enable --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B4FC49D5BF for ; Thu, 24 Sep 2026 14:58:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261928; cv=none; b=p/Bp3+SnLOQXGCe0wkzt7gaAc6oGFCSOcorDOTTLAK5Ud0U5MaK2fsmYcmFhs/N5YOIijgxbTATB7tYzbSyDSN/BK+VujeDTrxfaz5A8yQLp99qtL5LK2ElsBT3GjbfvLMfl8zOHd2BIieWGu2qxYM6Xg9PIxFCvtYgs+sj5XTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261928; c=relaxed/simple; bh=gyLVAF3tlmRS8yu7R0Sj0qry/ybOo5qjXc2qNQmb9wo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XAp8voNVy1CTwsX6lan08gPBafCLCRekDHr766fP7fFiFEEyfi0NlS1xmTWmvfSZrXcOGSUR7pGr/mlb94PhT9HO5B7RPuQcWMueF4+tn0rg2CHjxIzL6cFTpLAl/7tGUTzSQP28ORDfZM0SLv7nzfLmGwV6Hr+sKzym5aBzHt8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=KlLbPsRo; arc=none smtp.client-ip=209.85.221.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="KlLbPsRo" Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-4887782ab2dso215190f8f.3 for ; Thu, 24 Sep 2026 07:58:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261923; x=1790866723; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=41Mral2Iew9L1eDAhCS002LBnxt3yzfpo/S93Hv8u3M=; b=KlLbPsRoArAkcoE/hIs7bSqdYJFb0CdFxlAtdUVJsRtbY/HIge4MtaVQEj/Dl+NLIC jaCWS4ySxaiPVQ0qd1QZTXyO95W/EGXrTQEKknHgUubcMhBjId4m4Zo8k6t5HVm97xSc dKkj5JzfKzLU//HfLaSh1jGny6zABRpX/3CzVE0eQphQt9mb+/SHHkcY4uEsiAsRZZdo fey/8UlVNf+hVjlgCPyytz/PvfaD3+2G+qR0QpVNkranizxLrp+nxr0hUhldlx5KKfs0 BmHilDHuns5Bk0z8OYxsmENQflNrU7ZScFA7wbevWGDX7pRQ/uJ6xvg5P3sGc9Vly0fU 8Akg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261923; x=1790866723; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=41Mral2Iew9L1eDAhCS002LBnxt3yzfpo/S93Hv8u3M=; b=gdGgDsqviArXjyz2P60tHc+9QW1TX1hvJtt13U7J70v02si2LN0wB5bt9tRRpwiFzw sA0tnCL+XGpcER0x6hdngiqRX0iZEAyiLLFtLEbMffza/7iulxy87Tvf+h+axUCTummh kfKk2SP+SJFBxIG7Ukzy9gXZQBWXkiBOYY8LdyqFpCPQoXidB8RgXZ98jOoPL9O929f5 us782sxdgP+TsrS2hzjn/TN6tLTnTPUl1iJW631u6+zCgSgofIfj6lGoZWlvuPIWmfwc s0IX5yxB6h1KqwE39puLz2TlsMdkDsGnAoRv2U3Ad7/A6onPEt+1vrTg2gUlN87E27o6 Fo4Q== X-Forwarded-Encrypted: i=1; AKwUvBzwrZ+0gPiBcuWQf8saLaN4Qmk0LPJB22K6/uk2txNzwvlkWFSqYQlx1EAtR1RHYp2dhF5k8g5Eotj8+EI=@vger.kernel.org X-Gm-Message-State: AFuF++nTTMvF0PHXWCp6NJdivGOvDCAODosRV7QFN6/jHOFr/rGoBAyW r/yo/qo4UEGpi/6VIBkoDBKy0pUZwuvo/o27HxacFvg8nvKx0Vwk3Q3xRL45rek+dKRXAsisG99 iM8kOikBQkGvAF9C/UTQtbQ== X-Received: from wrck17.prod.google.com ([2002:a5d:5251:0:b0:488:658b:25a9]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:4703:b0:487:242a:c020 with SMTP id ffacd0b85a97d-48872a5cdb4mr4380837f8f.6.1790261922940; Thu, 24 Sep 2026 07:58:42 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:51 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-18-vdonnefort@google.com> Subject: [PATCH v7 17/20] tracing/remotes: Add poll_ms tracefs file From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a tracefs file to configure the trace remote polling period. Keep the default value to 100ms. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 41 ++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index 0a360690b174..b2547eb117f8 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -427,7 +427,8 @@ static void trace_remote_do_poll(struct trace_remote *r= emote) =20 ring_buffer_poll_remote(remote->trace_buffer, RING_BUFFER_ALL_CPUS); yield =3D trace_remote_do_dmesg(remote); - schedule_delayed_work(&remote->poll_work, yield ? 0 : msecs_to_jiffies(re= mote->poll_ms)); + schedule_delayed_work(&remote->poll_work, + yield ? 0 : msecs_to_jiffies(READ_ONCE(remote->poll_ms))); } =20 static void __poll_remote(struct work_struct *work) @@ -1138,6 +1139,40 @@ static int dump_on_panic_show(struct seq_file *s, vo= id *unused) } DEFINE_TRACE_REMOTE_ATTRIBUTE(dump_on_panic); =20 +static ssize_t poll_ms_write(struct file *filp, const char __user *ubuf, s= ize_t cnt, loff_t *ppos) +{ + struct seq_file *seq =3D filp->private_data; + struct trace_remote *remote =3D seq->private; + unsigned int val; + int ret; + + ret =3D kstrtouint_from_user(ubuf, cnt, 10, &val); + if (ret) + return ret; + + if (!val) + return -EINVAL; + + guard(mutex)(&remote->lock); + + if (val < remote->poll_ms && remote->poll_cnt) + mod_delayed_work(system_percpu_wq, &remote->poll_work, msecs_to_jiffies(= val)); + + WRITE_ONCE(remote->poll_ms, val); + + return cnt; +} + +static int poll_ms_show(struct seq_file *s, void *unused) +{ + struct trace_remote *remote =3D s->private; + + seq_printf(s, "%u\n", READ_ONCE(remote->poll_ms)); + + return 0; +} +DEFINE_TRACE_REMOTE_ATTRIBUTE(poll_ms); + static int trace_remote_init_tracefs(const char *name, struct trace_remote= *remote) { struct dentry *remote_d, *percpu_d, *d; @@ -1170,6 +1205,10 @@ static int trace_remote_init_tracefs(const char *nam= e, struct trace_remote *remo if (!d) goto err; =20 + d =3D trace_create_file("poll_ms", TRACEFS_MODE_WRITE, remote_d, remote, = &poll_ms_fops); + if (!d) + goto err; + d =3D trace_create_file("buffer_size_kb", TRACEFS_MODE_WRITE, remote_d, r= emote, &buffer_size_kb_fops); if (!d) --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 56D3F4A0F07 for ; Thu, 24 Sep 2026 14:58:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261929; cv=none; b=RP57Xlvr5iVcDJc23Rtqzxyv5tNyLT4vtPiYlYuu8WxYQsi7Dd/RGzTix39ty8q/M/8Ik3zs3jJkJXhUUzeaCJk5cyZlaqNu2a53m+c8bKRpFVSopPZpSS0eS8d37GRP90naOs66+6YwEpvUT5S/78pvefSVm6n3TpIMKS3NYwA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261929; c=relaxed/simple; bh=Jrp7mt6cQSQ3EkaTbrA76OUMeNLl2/PHGv5RXvN55+4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=co9VUtEZNCYmTPdiWWKVaJnD9p6CF+wVdfemDE/zGMWlV9GqdLWxmwmI+ga5u/9LOKaOFXxa6ZKMtKWoDHV/RG+4lI5u+u2BIvbckHwQiEwalqucUwXtKWYJfv/NwL6tRUw9s6nJ80C8WYm3d5hEpfpUd0WXT/8FvszJAOxoqDk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=B+w7Itjk; arc=none smtp.client-ip=209.85.221.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="B+w7Itjk" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4886af459afso1292068f8f.0 for ; Thu, 24 Sep 2026 07:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261924; x=1790866724; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GSVp2wd2bElbaVHZ4PZQs4KwrjTqCz18IG8mqkgeKvc=; b=B+w7ItjktoYHM6m8cA4oa//tTiFen4fgn6uUFGJx+Nrt+LH7lAATI2IilVEFF3lAvS StUG0ly5LdkyafYMPfrEHeCMzgAddzTswz2S0fqge716Y9oBQD6eNwo4TNq6LtQPvfdI w3pUQg9VOlvs8knqRH8hhB82Y9FVEuICTfDdyadhBIytPvNzb2I4ENtE++Scir88DgCv hV92Jhp0AP5ujO70DPdY1/55paYZ8uPyZjgxva2rGLNaJsM4IYubL/i7+klxQSYddVOm JuaufW6d27qQhbtyoxXt0EUGRpDQMxT6p4dTFFOALragppUZfH9tRy8xf/UpPkPysGmS /6Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261924; x=1790866724; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GSVp2wd2bElbaVHZ4PZQs4KwrjTqCz18IG8mqkgeKvc=; b=BwvnANyK46Jd9aQ9JCqnoEpWr99thNeeLe99LhE6arRnLTbFSX/Rk9W0Ii3MIDeV4L MIzHy9GHVSsSsobFzh51lYrL9qrVDp9BjQcmqoqUqCQ29HietnG886owij6Cg/Qn1kDL pcgvxEEiyohPpDkNZTKOfVkjXSPcP2SEB38H6RIr1hUQ/Z4w1WwQi7WDy+j+VQ+MY/Nf oKOZtlhODbk2MZ/X3pNZ3HXDDtd7cilaYYXJnLdiJN+XJ8EuGovSQV+mAmt+GtpcIH4a 4ZBaIVbXNNEbcekO/BI/MeZv1ei2ibpSjwWtsEn0mfsyejVGX+miCiAQRty9I6W+WwJg mgjw== X-Forwarded-Encrypted: i=1; AKwUvBxPpcdxbSmKGbobQotgQCr/clni+HHtyuIzw6psZfKWiKrDlbwdM5hYvoxfRpDFT3q4vFbWUIe0hiCLmGk=@vger.kernel.org X-Gm-Message-State: AFuF++l7MEVZgHcW668diVBDc2smHW8LIrZrKpzW6rPTjH/HRMChnBZL k6A7Yx2aVWyBRGsUeXmsQfLlbjIPzYXMs9CsliU5hao/fNJ1DOC4GpvXdvrvPFC5Njpo0z78jAZ RRVCrZZH0JzAu98PkdMSqfA== X-Received: from wraj5.prod.google.com ([2002:a5d:4525:0:b0:487:2ee:a313]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2088:b0:487:27f6:a4e9 with SMTP id ffacd0b85a97d-488716c3819mr4666334f8f.57.1790261924227; Thu, 24 Sep 2026 07:58:44 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:52 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-19-vdonnefort@google.com> Subject: [PATCH v7 18/20] tracing/remotes: Add trace_remote cmdline options From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Following the same format as trace_instance, add a cmdline to configure a trace remote on registration: trace_remote=3D^^,, Enabling events automatically turns on tracing. Signed-off-by: Vincent Donnefort --- kernel/trace/trace_remote.c | 137 ++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c index b2547eb117f8..de41f36e9a0e 100644 --- a/kernel/trace/trace_remote.c +++ b/kernel/trace/trace_remote.c @@ -14,6 +14,8 @@ #include #include =20 +#include + #include "trace.h" =20 #define TRACEFS_DIR "remotes" @@ -1173,6 +1175,128 @@ static int poll_ms_show(struct seq_file *s, void *u= nused) } DEFINE_TRACE_REMOTE_ATTRIBUTE(poll_ms); =20 +static char trace_remote_cmdline[COMMAND_LINE_SIZE]; + +static int __init set_trace_remote_cmdline(char *str) +{ + trace_append_boot_param(trace_remote_cmdline, str, '\t', COMMAND_LINE_SIZ= E); + return 1; +} +__setup("trace_remote=3D", set_trace_remote_cmdline); + +static bool trace_remote_apply_cmdline_opts(struct trace_remote *remote, c= har *cmdline) +{ + bool dmesg_on =3D false; + char *opt; + + while ((opt =3D strsep(&cmdline, "^"))) { + if (!*opt) + continue; + + if (!strcmp(opt, "dump_on_panic")) { + WRITE_ONCE(remote->panic_on, true); + } else if (!strcmp(opt, "dmesg")) { + dmesg_on =3D true; + } else if (!strncmp(opt, "buf_size=3D", 9)) { + WRITE_ONCE(remote->trace_buffer_size, memparse(opt + 9, NULL)); + } else if (!strncmp(opt, "poll=3D", 5)) { + unsigned int poll_ms; + + if (!kstrtouint(opt + 5, 10, &poll_ms) && poll_ms > 0) + remote->poll_ms =3D poll_ms; + else + pr_warn("Invalid trace remote poll '%s'\n", opt); + } else { + pr_warn("Unknown trace remote option '%s'\n", opt); + } + } + + return dmesg_on; +} + +static struct remote_event * +trace_remote_find_event_by_name(struct trace_remote *remote, const char *n= ame); + +static int +trace_remote_enable_event(struct trace_remote *remote, struct remote_event= *evt, bool enable); + +static bool trace_remote_apply_cmdline_events(struct trace_remote *remote,= char *cmdline) +{ + bool tracing_on =3D false; + char *token; + + while ((token =3D strsep(&cmdline, ","))) { + struct remote_event *evt; + int ret; + + if (!*token) + continue; + + evt =3D trace_remote_find_event_by_name(remote, token); + if (!evt) { + pr_warn("trace remote event '%s' not found\n", token); + continue; + } + + ret =3D trace_remote_enable_event(remote, evt, true); + if (ret) + pr_warn("Failed to enable trace remote event '%s' (%d)\n", token, ret); + else + tracing_on =3D true; + } + + return tracing_on; +} + +static void trace_remote_apply_cmdline(const char *name, struct trace_remo= te *remote) +{ + char *cmdline __free(kfree) =3D NULL; + char *events_cmdline =3D NULL; + char *opts_cmdline =3D NULL; + bool tracing_on =3D false; + bool dmesg_on =3D false; + char *curr, *next; + int ret; + + if (!trace_remote_cmdline[0]) + return; + + cmdline =3D kstrdup(trace_remote_cmdline, GFP_KERNEL); + if (!cmdline) + return; + + guard(mutex)(&remote->lock); + + next =3D cmdline; + while ((curr =3D strsep(&next, "\t"))) { + char *token =3D strsep(&curr, ","); + char *rname =3D strsep(&token, "^"); + + if (strcmp(rname, name)) + continue; + + opts_cmdline =3D token; + events_cmdline =3D curr; + + if (opts_cmdline) + dmesg_on |=3D trace_remote_apply_cmdline_opts(remote, opts_cmdline); + if (events_cmdline) + tracing_on |=3D trace_remote_apply_cmdline_events(remote, events_cmdlin= e); + } + + if (dmesg_on) { + ret =3D trace_remote_enable_dmesg(remote, true); + if (ret) + pr_warn("Failed to enable trace remote dmesg (%d)\n", ret); + } + + if (tracing_on) { + ret =3D trace_remote_enable_tracing(remote); + if (ret) + pr_warn("Failed to enable trace remote tracing (%d)\n", ret); + } +} + static int trace_remote_init_tracefs(const char *name, struct trace_remote= *remote) { struct dentry *remote_d, *percpu_d, *d; @@ -1349,6 +1473,7 @@ int trace_remote_register(const char *name, struct tr= ace_remote_callbacks *cbs, } =20 list_add(&remote->node, &trace_remotes); + trace_remote_apply_cmdline(name, remote); retain_and_null_ptr(remote); =20 return 0; @@ -1836,3 +1961,15 @@ static struct remote_event *trace_remote_find_event(= struct trace_remote *remote, return bsearch((const void *)(unsigned long)id, remote->events, remote->n= r_events, sizeof(*remote->events), __cmp_events); } + +static struct remote_event * +trace_remote_find_event_by_name(struct trace_remote *remote, const char *n= ame) +{ + int i; + + for (i =3D 0; i < remote->nr_events; i++) { + if (!strcmp(remote->events[i].name, name)) + return &remote->events[i]; + } + return NULL; +} --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46B1E4A2638 for ; Thu, 24 Sep 2026 14:58:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261930; cv=none; b=E4RQBr1CwGrbAiPVPqfN1vaH71Xxi1TjGCs06HEVf5sIWSxzT1EM/h3u2JuFoWZ2tHltRZ2jK0JlqtpzhvJnVzGlEy1j61j0TFcDagJIdrWGeFQkfM33nv6KUaaAFyPuGX/0TwfgVyhfXYoXNg8mB906AWgTDJQ9c3WbhoHYZ/A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261930; c=relaxed/simple; bh=TbFOs9zt00KhvKUvxUFIuV2Gmx+KhcVjVQo5GM8TGZY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=LNheMRf4guMjoInCMUfGaMmwuVDOVG4sYGW3Eb9I1pQzEQsDGiStU42dANXzinizLqS5Jwj1r8jZPZj5Wd2/8ETQe6dMcOXqDUj3W5ACNp+SPs8/MeC5yRKZcMmeD/Q2hJC1WCkXnEiNhDLR54XmA9TrAuNu9VsWMMkdkSsJzK8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=auAFAJJ/; arc=none smtp.client-ip=209.85.221.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="auAFAJJ/" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4843227cfcfso739029f8f.1 for ; Thu, 24 Sep 2026 07:58:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261926; x=1790866726; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4k6Ha9rPmjVxi9itLklgWGlg9FSwku/SVehRY8VEz5Q=; b=auAFAJJ/0FsMq0p+d8hF7o28BK1Pt2OO472Zi5xX7FEufd+XbMR3c2EeXDiyjmO4aO Ct1gv6IUTJUMdjzJWwKEhUdpOxK6IJNvaeIYIpM5+He2QJ3zY3FoQ5oD7YanCeS5aVS6 1QjZp/VnL5QNbePY4ZFX2W3N5pj6zJOa660YbV7gwrD9pnwDcT9/wUO6sJMJ+sIWUnh2 VoeAWl/gc3u8p4JPP3seO1AVQs7lEGpn9FEFGfgtTN/7mQNxMkVpMLBBB3CRQCGu1Ccx tt+B50ecAsZJuriKWxR4hiyHqAxYIk+QThUtD5xu2iIAX7Z/xA0Imol4dJ5lnmdSa583 9Ivg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261926; x=1790866726; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4k6Ha9rPmjVxi9itLklgWGlg9FSwku/SVehRY8VEz5Q=; b=Gk363Hpjm/EuYNLkKq1JM3ADXGzyJc/AlFCtO1r4YtEknC8ewf55YSxjJQ2mQlzN9l 3fN3knpQBwip3/PV39pczDSCrcRjbTNXhR51FNIiE5wfsnf7e7EmHVA8/BCKWtnRN/gV mnOyBhDEgyFNnFp/4GM54Vf0Ro8VOujidY6ZfC+8/2AzrdLn7hbLmluTyuoJfKKcpgP+ m6O6hz8lD5ljiqGc4hKKYynNBdlgs8JvoC28cRQJIFrjtyJxaNcQVX3SOuS7AKWYK3h/ WMbW61vvhzq3jK+31tZfK7GwBfiXetP+h2zYrePjRxBIMVkFRT0jxFFCfqFnqTtBn3ha ZOsg== X-Forwarded-Encrypted: i=1; AKwUvBwJDhcL7xHzEsZzzt/FtHPxRX2tOESXEKA1Qn9XxOgpjztWzH04gNhddgJD9ubyn9GRK/t+je/hX4rJ7zQ=@vger.kernel.org X-Gm-Message-State: AFuF++n414dRDZh2WR3UbjyeeaCFHaKjBMlOBEyOOh2RMYxp8A/P3LrG RZz3tXeyxXBxL35gJE9Ou7mqf+rsp85ehIGVIOT8qQLmRrO61rKSRbDAnKHq22xEyna1y1oVJEZ Hdrr7+NYwC4puD1AQen+oNQ== X-Received: from wmdp1.prod.google.com ([2002:a05:600c:5c1:b0:49d:f3f:1e8b]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:8b5b:b0:49c:f13e:e4d with SMTP id 5b1f17b1804b1-49fe66f17damr45644795e9.10.1790261925621; Thu, 24 Sep 2026 07:58:45 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:53 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-20-vdonnefort@google.com> Subject: [PATCH v7 19/20] Documentation: tracing/remotes: Add detailed tracefs layout From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a description for each tracefs file available in a trace remote instance. Signed-off-by: Vincent Donnefort --- Documentation/trace/remotes.rst | 66 +++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/Documentation/trace/remotes.rst b/Documentation/trace/remotes.= rst index 1f9d764f69aa..b02ebed4a03f 100644 --- a/Documentation/trace/remotes.rst +++ b/Documentation/trace/remotes.rst @@ -19,8 +19,8 @@ for which the host kernel can see and expose to user spac= e. =20 Register a remote =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -A remote must provide a set of callbacks `struct trace_remote_callbacks` w= hom -description can be found below. Those callbacks allows Tracefs to enable a= nd +A remote must provide a set of callbacks `struct trace_remote_callbacks` w= hose +description can be found below. Those callbacks allow Tracefs to enable and disable tracing and events, to load and unload a tracing buffer (a set of ring-buffers) and to swap a reader page with the head page, which enables consuming reading. @@ -28,8 +28,66 @@ consuming reading. .. kernel-doc:: include/linux/trace_remote.h =20 Once registered, an instance will appear for this remote in the Tracefs -directory **remotes/**. Buffers can then be read using the usual Tracefs f= iles -**trace_pipe** and **trace**. +directory **remotes/**. The files within this directory allow configuring +and reading the remote buffer (see `The File System` below). + +The File System +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +A remote tracing instance is represented by a directory in Tracefs under +**remotes/**. The layout and files within it are very similar to standard = ftrace +instances. Inside the remote directory, the following files and directorie= s are +available: + + tracing_on + This file allows enabling or disabling the remote tracing. + + buffer_size_kb + This file displays and allows changing the size of the per-CPU ring + buffers used by the remote. It also shows if the buffer is **loaded** or + **unloaded**. To change the size, the remote buffers must be unloaded + first. Remote buffers are automatically unloaded when **tracing_on** is + off, no one is reading the buffer (either by accessing **trace_pipe** or + when **dmesg** is on) and no events remain in the buffer. + + trace + Display the human-readable content of the remote buffers. Reading this + file is non-consuming. Writing to this file clears the ring buffers. + + trace_pipe + Similar to **trace** but reading it consumes the events from the ring + buffers (consuming read). It blocks if there are no new events. + + dmesg + When enabled, all events from the remote are redirected to the kernel + dmesg. This is similar to the **tp_printk** option for in-kernel events. + It counts as a reader of the remote buffers and prevents unloading. + + dump_on_panic + When enabled, the remote tracing buffer is dumped to the console when a + kernel panic occurs. + + poll_ms + Modifies the polling interval for the trace_remote. + + per_cpu/ + This directory contains subdirectories for each possible CPU (e.g., + **cpu0/**, **cpu1/** ...) + + per_cpu/cpuX/trace + This is similar to the **trace** file, but it will only display the data + specific for the CPU. If written to, it only clears the specific CPU + buffer. + + per_cpu/cpuX/trace_pipe + This is similar to the **trace_pipe** file, and is a consuming read, but + it will only display (and consume) the data specific to the CPU. + + events/ + This directory contains remote events that can be enabled or disabled. + + events/enable + Allows enabling or disabling all the remote events. + =20 Declare a remote event =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --=20 2.56.0.rc1.310.g51773c2048-goog From nobody Mon Sep 28 21:03:33 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A7934A2A41 for ; Thu, 24 Sep 2026 14:58:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261930; cv=none; b=kW7ZZReUDG44wonOH89ADAG5wh20PQw/b6PAGODC9jfwhBI0WNubvXTk+BOtG7FPuRpJaTxrf1Hp+aHujRYHaRDcuKESldLVL751ZvwxE0yBGnnzfe4V9V4i/Uprky280NZC93x7R+Da/2iJitiz+ga/YGKi5JCtJ1Z4m39fLoU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790261930; c=relaxed/simple; bh=sMZVeVn0ZsaC75Ss0oixACQGBD0RScWRyElS7yqU6Fo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Y5y7DYs3Da2BN4XLj6cdDEknz/cRel3lq5YL68aEJWpDhICSiR4yhvfMoRgbOOEyoZz7xNxwlOqzY9nDG1wUcdZJ/g40v37AjiN56L7Ylqgu9u3Mo6PJ7BvMfhH6DGktTO0jpr/wPXZIP90+84uYxFZ15M6uhwU92jXaunYHI6E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=bGxw2E+C; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="bGxw2E+C" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49cf5bd2f12so25406015e9.1 for ; Thu, 24 Sep 2026 07:58:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1790261927; x=1790866727; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JOlgtvFIgZLsG8Gc5kS/gNU5ZmWQiSJ6dcHFxVQsvJs=; b=bGxw2E+CfGIiKO3zgfZIG16nUukAxIN2Wx21doGPSfuwABoYC5jz4HMoxe8dUCnWN7 vZxxDyHHxnN8PallVtHow9i8mLynUiBndpU7PGlLCYSYjYa4I+Ozq0A17nT8AwyprSPc SSdFBYngRttz8kfTxQ+MwM3SRaopVAqUiei4Z9gbzA3ylwQtkSeSun9uu2GeX4wNLUyp QjJGu+4EOovpCysElPnl/0P/wxJHEeb3EZxLlnIjShmc6R0715nNMRu8AhXieyGbwuJ1 onoqY3uiQH0ikD+1nH2B5HGt1OZ2t8p3gimMt02T5hZegSFONgx9tId+EwzRKxwxCMe2 5Rhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790261927; x=1790866727; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JOlgtvFIgZLsG8Gc5kS/gNU5ZmWQiSJ6dcHFxVQsvJs=; b=zyrz2rGSjvpSPPayldk/myHocSsvwqwFhIcBznHV+eC71R5uIdn2lArEswRhCMQ8/J q8Fo28KdsZIhLzc5KltBs1neIl+04BeO60i9ssJl9ppFspvBttIvyJZYVo7lfPKb8Omr AnQgkAyMA1g0xiKPKOBETJL79jzGJ+dZc25i/amJZxiXqi2UJCmgjNtAzpRpTsSMHUCf DYH3a43h1Xq5+SHgIumXpE9CnMtavwsvpV8p8SK4betqLHsNzlVFlqtwCXVq08y96rpB M5ToNFvFEeUdaPlis03Wt5gWkohAxqtFE3Fh+xVjmn8TAy8h0tRGhbaupsfyIVQCi8wk ixHg== X-Forwarded-Encrypted: i=1; AKwUvBy35/l62lhCKJ3LvXfe9iXfHGvnrdnhUCZLNudA8bmXRML6yNpe2W7rhzuhI1+IAyy3dafGrC6B9foINYo=@vger.kernel.org X-Gm-Message-State: AFuF++lGrGotnyk/FE6lj4s8Vkcen+xWpCUqpZMb7OImeF3dNJe3AmlM JFlGHNx1Qr60fOzKHdY8naHs0qsZ/NkNZmNae2OoTcbKrdJgSfy41K9I2YqGOV4r/l6HQOg4Vo4 lfMurI/iwriScy12t4lNKVw== X-Received: from wmpb24.prod.google.com ([2002:a05:600c:4a98:b0:49f:e303:ee0c]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:154f:b0:49c:fa21:1c86 with SMTP id 5b1f17b1804b1-49fe7bbaf51mr38477895e9.27.1790261926538; Thu, 24 Sep 2026 07:58:46 -0700 (PDT) Date: Thu, 24 Sep 2026 15:57:54 +0100 In-Reply-To: <20260924145754.1285146-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260924145754.1285146-1-vdonnefort@google.com> X-Mailer: git-send-email 2.56.0.rc1.310.g51773c2048-goog Message-ID: <20260924145754.1285146-21-vdonnefort@google.com> Subject: [PATCH v7 20/20] Documentation/kernel-parameters: Add trace_remote From: Vincent Donnefort To: rostedt@goodmis.org, mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The trace_remote parameter allows configuring a trace remote on registration. The syntax is similar to trace_instance. Signed-off-by: Vincent Donnefort --- .../admin-guide/kernel-parameters.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 33cd30996e47..613941ea31c9 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -7824,6 +7824,25 @@ Kernel parameters See also Documentation/trace/ftrace.rst "trace options" section. =20 + trace_remote=3D[remote-info] + [FTRACE] Configure a trace remote instance at boot. + Format: [^option1[^option2...]][,event1[,event2...]] + + Supported options: + + dump_on_panic - Enable dumping the trace buffer on + panic. + dmesg - Redirect tracing output to dmesg. + buf_size=3D - Set the trace buffer size (e.g. 2M). + poll=3D - Set the trace remote polling interval + in milliseconds. + + Events are a comma-separated list of events to enable. + If events are specified, tracing is automatically enabled. + + Multiple remotes can be configured by specifying this + parameter multiple times. + trace_trigger=3D[trigger-list] [FTRACE] Add an event trigger on specific events. Set a trigger on top of a specific event, with an optional --=20 2.56.0.rc1.310.g51773c2048-goog