From nobody Thu Oct 1 15:54:29 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 671CB41D4FC for ; Thu, 6 Aug 2026 21:13:18 +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=1786050799; cv=none; b=DgPBWQhhFByPbnfquyqSDrNmfuKDpcpzxT6C0rv0kKGUgGjEweWlGH19wbSrVQHHnDQaEIO2i6TcibPm3cu8ZNbQ+Ail617NGob9ITDT2+80zLdNKH24LFan2iGbwbNi6bDC8jKKshYdqEVaW/HVjJyPdGxl5+Fat0PzA/OpE5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786050799; c=relaxed/simple; bh=+gnfElGGQK5T9MdcVzAlpd12lgFMxbtMTdOesSKWdDE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GwbjZpwhrWNmUVnwG/fwayx2wdciEBlzqe5a0wbvZRBFQBpCMI2JPvq0ZFZNzH2JF013TEBUtyNvxHR+DQ4NRlNW4KaOL6Hfn8riH1wcfy2QwhZUzmGkSQJYc+MvYkvKfYSYXQRi2siawK5eV7OOqMVDwvQ8vmUY61yp3sDuGSM= 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=XTTHAfD+; 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="XTTHAfD+" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4955843c6cdso22825705e9.1 for ; Thu, 06 Aug 2026 14:13:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786050796; x=1786655596; 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=7u8F7+F+C1XVXYeKDzyuJSSv0Vmszc5Sx19/+zjpRcM=; b=XTTHAfD+IdCQV1MLlEudSzfe1vFmcn+ms3seyuStDh05s8FDHRWWufxZ+9cYvu0NV/ npWAUiuQNJZupOBiWHrRKp2c06YniugZTN7voygPe4Y/TbpdNtNdbP3Ho4ysThMCBgSa b2tHGgoWQzy0y+6YZHSS2paRQfSSFvvsfjc2+H/sSv2ZrF4xpCRPTXuT64TnWYLImLEG 6jDfxW9QZC4kvmArLsaJT65f2nkzFNyu22v3RGv0HirVS4xLnd/1ul16W2Htl9CcesOl 5y1O38kqeJgl9dqR6xYy6o5K7YkQHczDbAp6i7f/99F4P0HEvXs9gp39XDklwh8XTxvZ wPlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786050796; x=1786655596; 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=7u8F7+F+C1XVXYeKDzyuJSSv0Vmszc5Sx19/+zjpRcM=; b=e6iTNrMSWo4q88eaEh6ZYluiQ10Lzt2ls3LQY0beR9NLDtVuJ9tj85Zb0kq71/h/l4 KKTP1gnId/9gFkxgxg1jAEfuePCSelhyRBNSqXlf14T35NC3jNatQQ/xAk/qmk4Ovg9k L7b9qtGXSLH1A+hn3F4MiF4L2SKKSelEYlrA0OghJRGFTwZCMlcHN7Wv3xSdWWljN1j4 vZ+7W9ouZM0j4MLPd6QbbcNBYHesVoSVrEANXQZLOkNIdieLD7XDKwhtTDtKkeltg6ld 0jYVpfLQTBke4A053R7/Mr9azOPfCUkyZcBglx48TlOQcersrwBH8PbYWhErb5mIx4FW DyWQ== X-Forwarded-Encrypted: i=1; AHgh+Ro6+hGFXWuABNj3Rm9LOfaWicShDGwQbckVyeay1TWrfUWvu6cnETN8zUfaeMjFGi/ez2cRBB2vzf/GWzc=@vger.kernel.org X-Gm-Message-State: AOJu0YwakgOAnRB4Hcx/Ti44D7p30/uATU3v56SYh+ycfjKvAsFoCYRF Od4sH3o5bAGZDmREnmp5ldrPt5ToMiUkui/tC2q+agL2u9T7WEse0IzM9lZImX/rtEk+AW0QUX8 WWlUSSckoPBdlidsXHCfkfA== X-Received: from wmjf20.prod.google.com ([2002:a7b:cd14:0:b0:493:aecc:774a]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a7b:cc0b:0:b0:496:cb48:5eb8 with SMTP id 5b1f17b1804b1-49959e38ecamr50626375e9.15.1786050796387; Thu, 06 Aug 2026 14:13:16 -0700 (PDT) Date: Thu, 6 Aug 2026 22:13:01 +0100 In-Reply-To: <20260806211306.3704194-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: <20260806211306.3704194-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Message-ID: <20260806211306.3704194-2-vdonnefort@google.com> Subject: [PATCH 1/6] ring-buffer: Prevent resizing of persistent ring buffer 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" Dynamically resizing a persistent ring buffer is not possible. Disable the feature. Fixes: be68d63a139b ("ring-buffer: Add ring_buffer_alloc_range()") Signed-off-by: Vincent Donnefort diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 8e2485bb3aa8..afe75ad2bbf2 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2528,6 +2528,8 @@ rb_allocate_cpu_buffer(struct trace_buffer *buffer, l= ong nr_pages, int cpu) if (cpu_buffer->ring_meta->head_buffer) rb_meta_buffer_update(cpu_buffer, bpage); bpage->range =3D 1; + + atomic_inc(&cpu_buffer->resize_disabled); } else if (buffer->remote) { struct ring_buffer_desc *desc =3D ring_buffer_desc(buffer->remote->desc,= cpu); =20 --=20 2.55.0.654.g21b8a5bc05-goog From nobody Thu Oct 1 15:54:29 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 C37DF41D64A for ; Thu, 6 Aug 2026 21:13:19 +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=1786050801; cv=none; b=thsrJ7D2MFLyVely/75VjxaCdRugUlD4dXXF7euNUUHfwUtjyR3K8NPR76GeZzRxnvDHAwrGMIcm+DB4IVd1qAV7BRNfBYkCutFytANSnxVgQEX8uvST9QRXFV5NoyYQJkIxQmQ+PcyT7oan/a055DxlMJTmVlu+q+kgYyfL6uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786050801; c=relaxed/simple; bh=QABeFqv5vm7y4l9zYcsDQh/2hptTBzOFxvoQQTklkNk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=q1HdGQvUrtLZczXTvjInM5gpbCAiZvjB3rNMBrsTZ5PoW24NboLNLYFKS857/LcE80/Ok8UrFAgV1Jj1YKAHGkLFSpcYOVUIqhHJqMQL6nba4AOCBdVNND4ho/zZ4+49/yzlv1lJG0PVbMWsgMKLA9ryrR82MtpbBL39/Sdd864= 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=DuXiSy0q; 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="DuXiSy0q" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-47f81362fb1so1594603f8f.1 for ; Thu, 06 Aug 2026 14:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786050798; x=1786655598; 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=ZDpTMgs+MuJW7J1fuvMNA6XwWWg7jUXIYsnAB+W7ptE=; b=DuXiSy0q7a9F91nhgHJCOmMGbXWV+jtmSZyGzmmMGgY0TLVy3C7bDU4+dYYTX51lmO ZzjDaJU8oN6Xol9+oCRVeflBeQn3zxUpjNFnXAf+K7ATPhiUfd9g76oj+y1lD1bUHyrm N2tj+kYjRgmk3ibIZ5BQT1C4xw4BZUexeQL9UQvIKXCEkSqmRmsdbcGPC7NAQICvP3tb CZlP4Vf2dkDSzaVg5sZq4Bz8j74gB7iEt9lpCPR82XaYZ4SWhEwROXcVVSkx/PTKzC7E xGjVPzwk4UT9cmPCoI3D2M2bHWAytO2IBao9USUTPZFkh9sBB8YTYSCmfwpGy2Id14JF b8Tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786050798; x=1786655598; 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=ZDpTMgs+MuJW7J1fuvMNA6XwWWg7jUXIYsnAB+W7ptE=; b=IIpf8SXOE6TL3PKD/LdfHvwI7UJ8t5BT1SvtAtVGSF0WNpKRe1D9rYv5zMJyEPOls1 yg/sG/n/Y7Pgj8COVDWyPp06n1Bipib/jaQNGc/Yu+l+o34AjSIhFrTkDAOozAmI2Q25 2bjZRxIX2LmL2FidVnp8CQFRbDUB69/HBB2hud7p/JBp/29Gad1Zh69AAr/hLpEIoX31 q3M17anbtbrmt6UIJ0xSvHPZtPegfIoHakLo2kcp4/6LtQ+Je5raqErM3Ad/udONi9z4 X6bkGgUcH1cnN8RbiKQW4oaKUs8MJfEclRLgwYUso7rXXKsW/q4i5knlwTpDtzJi0FZY yw0Q== X-Forwarded-Encrypted: i=1; AHgh+RpKYCqP1ONrmwAQ8K2qtzvAxaQK27wzhpM9rPrSAp3wz4BCdWXXm1uHxySSOByq7cYoUcBuSOijh7xZG+g=@vger.kernel.org X-Gm-Message-State: AOJu0YxDGfDxDWVz4mWRBsMmirguypla17Kewcz/8a80+H+panCY+fzP bUHeJ9O4UeUiBh1BW/f6b8kCMwVyIywjiYOVetRdqsGETfyqx584b281a+UwAC3kR81J8Ujh5GE 33fG4nChWRh8xlTB1NJ2JUQ== X-Received: from wrtw18.prod.google.com ([2002:a5d:6092:0:b0:47f:6d55:abcd]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:adf:d006:0:b0:47f:9171:bca2 with SMTP id ffacd0b85a97d-47fec62a14amr22660270f8f.27.1786050797658; Thu, 06 Aug 2026 14:13:17 -0700 (PDT) Date: Thu, 6 Aug 2026 22:13:02 +0100 In-Reply-To: <20260806211306.3704194-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: <20260806211306.3704194-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Message-ID: <20260806211306.3704194-3-vdonnefort@google.com> Subject: [PATCH 2/6] ring-buffer: Prevent subbuf order change when resizing is disabled 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 , syzbot+e0cc44465d6bae735679@syzkaller.appspotmail.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Because ring_buffer_subbuf_order_set() frees buffer pages, we can't allow it when resizing is disabled. A non-consuming reader is at risk of use-after-free (rb_advance_iter()). Return -EBUSY on resize_disabled, matching ring_buffer_resize() behaviour. Fixes: f9b94daa542a ("ring-buffer: Set new size of the ring buffer sub page= ") Reported-by: syzbot+e0cc44465d6bae735679@syzkaller.appspotmail.com Signed-off-by: Vincent Donnefort diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index afe75ad2bbf2..9bc467c4dbbb 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -7360,7 +7360,7 @@ int ring_buffer_subbuf_order_set(struct trace_buffer = *buffer, int order) =20 cpu_buffer =3D buffer->buffers[cpu]; =20 - if (cpu_buffer->mapped) { + if (atomic_read(&cpu_buffer->resize_disabled)) { err =3D -EBUSY; goto error; } --=20 2.55.0.654.g21b8a5bc05-goog From nobody Thu Oct 1 15:54:29 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 8A10241D640 for ; Thu, 6 Aug 2026 21:13:20 +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=1786050804; cv=none; b=MusQL/hlUlqNA/vsnH7eg5uGI5oHwp6vGyUuZ2yDUCm63eQ5ERkC8MzDI83p5T488y+TjSWbYYTyEImz/RBTcpWs7j98GZtKQ4S9waA5d+y19uBDl3LEh9HeQL+NNDAxH3NMFQfd6Wm9pyMimXMQggqwjoZI+wMo15+bbEgLFKo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786050804; c=relaxed/simple; bh=VlE2z08t6X+XiA0gzWlpQ0jC0Shgst1Sw2nE7qYF9Rc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=s/X8y3K6IMqs5p8m4sDqa2R68WZPOdnVgmtOyHWLyvr6ozOL/shFuP6NPa74yw/wpyoe8tI+DLt0R3Jl0vOt9mq2L+S0nZIZZLv7hbZmg89lcVdPozQMwX7ljFGpijXDpxLm+05+XCKFzHoWYhlxfYFKtKCSG+mgBqe+9DGWJBs= 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=voo+6P/x; 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="voo+6P/x" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-47feac2021eso1540904f8f.3 for ; Thu, 06 Aug 2026 14:13:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786050799; x=1786655599; 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=SqgSmYxo3yxK1py85ThH2dimY8H9aTvliysywkSNw6M=; b=voo+6P/x7E02YLOUqqcXg4eOV7s9n29Pz1C1uPoTtXao83OHkIh7zUbx+4lzMs3NUe xV7054D1k4N80N1gTMB6hH6PCe0LntpKMZQA03saIWqmYMDz6gs0I1/s7CGIrencrS6q S4oJFH5jyb5PKT15KbMUtax7VlZkz+9TsL1+a717OJhwpKxwr2pCAwGWTMo4dpwSJJtG ZVi7YYjUMUV2ytbCo+DP9WzlAn8BotJgYStxWHr2M8Rhbo02tppx4pq81mL+W9mJw2rH Oh9bs1fwMV0ExBSv+LJkggRJnrTxmbC4TegOvi9wgmEYkzSSLPUG9JZ9TRI++lijXCfg 1VAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786050799; x=1786655599; 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=SqgSmYxo3yxK1py85ThH2dimY8H9aTvliysywkSNw6M=; b=bUxAkGY3yjFgJPpJsmCTOOpX2jjjLDfiBytyu3zMrJXwmA3/yOrrhCDoBs+sgpq6zz +jqIdJxpOsi72k9nflMCa/OKyTdvmo/aQdAeCDhKTIpKI8PcqZZrQf82qDRl6HHkPy1w PXa26UVIMFt0El7TKtZIbjmhXKyljPhQx0gM/kBV2W9Oao+0xLxK18eptCV1Vm2QQPRR SoZjpuQtcot1jDTnqmQkCuqPbWnePShL1xKL0EdWEZSB/Tx/a7Y7bSjoel6cf8GOse9t GHfROp2wMG5b6eqoMIuOU6yBoaOUYDb1v7XwXekqGzkBzx4yXriuivuVlGjrL+FeWnir rvTQ== X-Forwarded-Encrypted: i=1; AHgh+RrnJtDNXDmvWVsOq0iA3ZTQUCNdtXO/pOuCv48ZFhVxWMQQOZqmJH/3d8UIwyYyrNEESJBwhpEUoNd+tL8=@vger.kernel.org X-Gm-Message-State: AOJu0YwwkHO+MgLrLt8kFFefUP10pJFFMGrmNHEfNLRHphw7buZ4cBrv amREWxQX+hZcaouFdF+RMmRzy6LZ+FZcxx6bLMA/3qa8LeFzHGtNS7/9X7zZzsI2FwYKjGIqi3M /Oj2X3/FuCvSaZ4seiwGHuA== X-Received: from wrmj5.prod.google.com ([2002:adf:e505:0:b0:47f:5376:d9bb]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:1208:b0:47f:6fe0:294a with SMTP id ffacd0b85a97d-47fec62b8d5mr22301130f8f.23.1786050798715; Thu, 06 Aug 2026 14:13:18 -0700 (PDT) Date: Thu, 6 Aug 2026 22:13:03 +0100 In-Reply-To: <20260806211306.3704194-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: <20260806211306.3704194-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Message-ID: <20260806211306.3704194-4-vdonnefort@google.com> Subject: [PATCH 3/6] ring-buffer: Initialise reader page order in rb_allocate_cpu_buffer() 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 rb_allocate_cpu_buffer(), bpage->order was omitted, leaving it as 0. This is an issue for a ring-buffer with subbufs bigger than PAGE_SIZE if when freed: free_buffer_page() relies on this value. Align the value with the actual allocation size (buffer::subbuf_order). Fixes: f9b94daa542a ("ring-buffer: Set new size of the ring buffer sub page= ") Signed-off-by: Vincent Donnefort diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 9bc467c4dbbb..4747cf427575 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2510,6 +2510,7 @@ rb_allocate_cpu_buffer(struct trace_buffer *buffer, l= ong nr_pages, int cpu) bpage =3D alloc_cpu_page(cpu); if (!bpage) return NULL; + bpage->order =3D cpu_buffer->buffer->subbuf_order; =20 rb_check_bpage(cpu_buffer, bpage); =20 --=20 2.55.0.654.g21b8a5bc05-goog From nobody Thu Oct 1 15:54:29 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 37F8941D65C for ; Thu, 6 Aug 2026 21:13:22 +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=1786050809; cv=none; b=YDWu1OyVVQq84KOx8bkP27S1QxQnQNymOYPUUMRmBcAk6jNhdhN2RP7eTQQatC3C3DgcLGGRy/dnok2Xi/AN9qvQqmS2mqdKyy6BfzU97CfKeDM6SHK0Ju5HiqLoC+kmu+4PrZlJKloi/nT5ig2gsFMEFXY1e8IyQE1lk/P9gas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786050809; c=relaxed/simple; bh=jhUj8h83w1RSFGOM1U/1YIFr0D6Nz41c3Q3nTG4y/0k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Pu1Fv3d667yCpkUAwn6rKoODF43pClrjJsB9GRbitOQTHi4YCmjXE0OLz/8YXPiKQghqyp4exOGdxBil8oLTmQb1ml/eVlAdLYjA5run01/5/UNy/KgiIuHXcuojSn1YQ2nJ1wgHmie27tct7V+H632e33BLEYsBQMQcOAe4Yqc= 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=s+TTd39y; 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="s+TTd39y" Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-6a0cb14adc2so3501651a12.0 for ; Thu, 06 Aug 2026 14:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786050800; x=1786655600; 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=tsdP14GiySZYVRKXcIA9GSNe8JZwqDW+4ZdvbTyJTx4=; b=s+TTd39yig6bFYbHMCEsRJ2ZBce+7GvnuTZSWof/mYD9VB+kw0Yehp6jQqCSldvJoP neUztw+wY/4SCdi5KdpFZ5Thsrjm8HkDj/NP3sdnmzExuxLCgX2hmMbQ9ABQCia5mR1d i9DZ5uyCC59ESirfnAZfgap4Vcs4uTDG4TmFh+/JtxaShgoSqkYNqM8BWTNjkinGcw2z lwcLE+PA+sq0HuEDKrZQ21e2cdaXBe+KA8RCz/7ly9Ofjc00WBqUlbS8wFVCIs3Qrp47 c0HGn5k0pnXo5tNNjmu/+RIdAQEbcvGdsy2k50CklwwvsBWi2tIdBLqycOGoxm+eWzsi 7uhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786050800; x=1786655600; 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=tsdP14GiySZYVRKXcIA9GSNe8JZwqDW+4ZdvbTyJTx4=; b=fp6En+BUWi68hREDVnc1NUYi3H16jWg1zirhkmaQYsAMibbupUv2v/GF1ygi3SlUsM eh7BP3daCKGeVyX7QNu774bzewIkK8d+nwHowzG5mjVwF1uaVhe2XpeCTuY7JY1isnDg jVWqlL4E2fVBLsr7hyPl3SUq4+b+Tk8fxVMM7tceU/99BCPucrgbKEMZWM4PLQMIo/Gm 14NiB4Xhv0UmqcTUS8vSfTmgUUnjfriaAkQ/rIjDVUXZpqv5czennyECgU2VoUP1r8le BlIawafr6SM5OGlzycO7KHA56HKPzbgjRsJ5ae7r5+YiJRQWC4O/FIi1CMjbs11XdpTr RTtg== X-Forwarded-Encrypted: i=1; AHgh+Ro1MWixKCAuFFd9mfoCXPg8sPuRV50H+mGs4QGl43GirF06i/zF97bUM5hIN8gYQ6cX3HAwbPbYUSGbD60=@vger.kernel.org X-Gm-Message-State: AOJu0YzpZ83eGJfeFpKfboG1VLe3UABke0EvzHTixBKtMe1zE/pkMvoh Qfhe4n/z0WU8dNxI4D+msAzmFYBLPp4vv68VuVlsBo/DpPfPhPqFGdgyVu4mAvqBEF8Sg4zhlzU tFIls6dFZLJZt3Fw5o6aIQQ== X-Received: from edvo5.prod.google.com ([2002:a05:6402:385:b0:698:6fd7:ef0c]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:190d:b0:6a1:23a4:737a with SMTP id 4fb4d7f45d1cf-6a14f0d41bamr9663018a12.7.1786050799960; Thu, 06 Aug 2026 14:13:19 -0700 (PDT) Date: Thu, 6 Aug 2026 22:13:04 +0100 In-Reply-To: <20260806211306.3704194-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: <20260806211306.3704194-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Message-ID: <20260806211306.3704194-5-vdonnefort@google.com> Subject: [PATCH 4/6] ring-buffer: Fix subbuf resize concurrency 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" trace_buffer subbuf_size is read lockless in ring_buffer_read_page() and ring_buffer_read_start(), while it can simultaneously be resized with ring_buffer_subbuf_order_set(). Instead of trace_buffer::subbuf_size, use bpage::order in ring_buffer_read_start() and ring_buffer_read_page(). In ring_buffer_read_start(), even with resize_disabled, there is still a possibility of a race with a buffer modification. Hold the trace_buffer mutex to synchronise with any pending ring buffer order modification. trace_buffer::subbuf_size is now actually useless, remove it. Also, create accessors rb_subbuf_capacity() and rb_page_capacity() which return the actual size available for storing events, while rb_subbuf_size() returns the actual subbuf page-size. Reported-by: Sashiko Fixes: f9b94daa542a ("ring-buffer: Set new size of the ring buffer sub page= ") Signed-off-by: Vincent Donnefort diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 4747cf427575..3531005aab43 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -586,11 +586,25 @@ struct trace_buffer { =20 struct ring_buffer_meta *meta; =20 - unsigned int subbuf_size; unsigned int subbuf_order; unsigned int max_data_size; }; =20 +static inline unsigned int rb_subbuf_size(struct trace_buffer *buffer) +{ + return PAGE_SIZE << buffer->subbuf_order; +} + +static inline unsigned int rb_subbuf_capacity(struct trace_buffer *buffer) +{ + return rb_subbuf_size(buffer) - BUF_PAGE_HDR_SIZE; +} + +static inline unsigned int rb_page_capacity(struct buffer_page *bpage) +{ + return (PAGE_SIZE << bpage->order) - BUF_PAGE_HDR_SIZE; +} + struct ring_buffer_iter { struct ring_buffer_per_cpu *cpu_buffer; unsigned long head; @@ -630,7 +644,7 @@ int ring_buffer_print_page_header(struct trace_buffer *= buffer, struct trace_seq trace_seq_printf(s, "\tfield: char data;\t" "offset:%u;\tsize:%u;\tsigned:%u;\n", (unsigned int)offsetof(typeof(field), data), - (unsigned int)(buffer ? buffer->subbuf_size : + (unsigned int)(buffer ? rb_subbuf_capacity(buffer) : PAGE_SIZE - BUF_PAGE_HDR_SIZE), (unsigned int)is_signed_type(char)); =20 @@ -1620,7 +1634,7 @@ rb_range_align_subbuf(unsigned long addr, int subbuf_= size, int nr_subbufs) */ static void *rb_range_meta(struct trace_buffer *buffer, int nr_pages, int = cpu) { - int subbuf_size =3D buffer->subbuf_size + BUF_PAGE_HDR_SIZE; + int subbuf_size =3D rb_subbuf_size(buffer); struct ring_buffer_cpu_meta *meta; struct ring_buffer_meta *bmeta; unsigned long ptr; @@ -2432,8 +2446,8 @@ static int __rb_allocate_pages(struct ring_buffer_per= _cpu *cpu_buffer, bpage->id =3D i + 1; cpu_buffer->subbuf_ids[i + 1] =3D bpage; } else { - int order =3D cpu_buffer->buffer->subbuf_order; - bpage->page =3D alloc_cpu_data(cpu_buffer->cpu, order); + bpage->page =3D alloc_cpu_data(cpu_buffer->cpu, + cpu_buffer->buffer->subbuf_order); if (!bpage->page) goto free_pages; } @@ -2556,8 +2570,7 @@ rb_allocate_cpu_buffer(struct trace_buffer *buffer, l= ong nr_pages, int cpu) bpage->range =3D 1; cpu_buffer->subbuf_ids[0] =3D bpage; } else { - int order =3D cpu_buffer->buffer->subbuf_order; - bpage->page =3D alloc_cpu_data(cpu, order); + bpage->page =3D alloc_cpu_data(cpu, bpage->order); if (!bpage->page) goto fail_free_reader; } @@ -2731,10 +2744,9 @@ static struct trace_buffer *alloc_buffer(unsigned lo= ng size, unsigned flags, =20 buffer->subbuf_order =3D order; subbuf_size =3D (PAGE_SIZE << order); - buffer->subbuf_size =3D subbuf_size - BUF_PAGE_HDR_SIZE; =20 /* Max payload is buffer page size - header (8bytes) */ - buffer->max_data_size =3D buffer->subbuf_size - (sizeof(u32) * 2); + buffer->max_data_size =3D rb_subbuf_capacity(buffer) - (sizeof(u32) * 2); =20 buffer->flags =3D flags; buffer->clock =3D trace_clock_local; @@ -2818,9 +2830,8 @@ static struct trace_buffer *alloc_buffer(unsigned lon= g size, unsigned flags, if (nr_pages < 2) goto fail_free_buffers; } else { - /* need at least two pages */ - nr_pages =3D DIV_ROUND_UP(size, buffer->subbuf_size); + nr_pages =3D DIV_ROUND_UP(size, rb_subbuf_capacity(buffer)); if (nr_pages < 2) nr_pages =3D 2; } @@ -3203,7 +3214,7 @@ static void update_pages_handler(struct work_struct *= work) * @size: the new size. * @cpu_id: the cpu buffer to resize * - * Minimum size is 2 * buffer->subbuf_size. + * Minimum size is 2 * rb_subbuf_capacity(buffer). * * Returns 0 on success and < 0 on failure. */ @@ -3225,12 +3236,6 @@ int ring_buffer_resize(struct trace_buffer *buffer, = unsigned long size, !cpumask_test_cpu(cpu_id, buffer->cpumask)) return 0; =20 - nr_pages =3D DIV_ROUND_UP(size, buffer->subbuf_size); - - /* we need a minimum of two pages */ - if (nr_pages < 2) - nr_pages =3D 2; - /* * Keep CPUs from coming online while resizing to synchronize * with new per CPU buffers being created. @@ -3241,6 +3246,12 @@ int ring_buffer_resize(struct trace_buffer *buffer, = unsigned long size, mutex_lock(&buffer->mutex); atomic_inc(&buffer->resizing); =20 + nr_pages =3D DIV_ROUND_UP(size, rb_subbuf_capacity(buffer)); + + /* we need a minimum of two pages */ + if (nr_pages < 2) + nr_pages =3D 2; + if (cpu_id =3D=3D RING_BUFFER_ALL_CPUS) { /* * Don't succeed if resizing is disabled, as a reader might be @@ -3513,7 +3524,7 @@ rb_event_index(struct ring_buffer_per_cpu *cpu_buffer= , struct ring_buffer_event { unsigned long addr =3D (unsigned long)event; =20 - addr &=3D (PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1; + addr &=3D rb_subbuf_size(cpu_buffer->buffer) - 1; =20 return addr - BUF_PAGE_HDR_SIZE; } @@ -3755,8 +3766,8 @@ static inline void rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, unsigned long tail, struct rb_event_info *info) { - unsigned long bsize =3D READ_ONCE(cpu_buffer->buffer->subbuf_size); struct buffer_page *tail_page =3D info->tail_page; + unsigned long bsize =3D rb_page_capacity(tail_page); struct ring_buffer_event *event; unsigned long length =3D info->length; =20 @@ -4102,7 +4113,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buf= fer, new_index =3D rb_event_index(cpu_buffer, event); old_index =3D new_index + rb_event_ts_length(event); addr =3D (unsigned long)event; - addr &=3D ~((PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1); + addr &=3D ~(rb_subbuf_size(cpu_buffer->buffer) - 1); =20 bpage =3D READ_ONCE(cpu_buffer->tail_page); =20 @@ -4767,7 +4778,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buf= fer, tail =3D write - info->length; =20 /* See if we shot pass the end of this buffer page */ - if (unlikely(write > cpu_buffer->buffer->subbuf_size)) { + if (unlikely(write > rb_page_capacity(tail_page))) { check_buffer(cpu_buffer, info, CHECK_FULL_PAGE); return rb_move_tail(cpu_buffer, tail, info); } @@ -5012,7 +5023,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_bu= ffer, struct buffer_page *bpage =3D cpu_buffer->commit_page; struct buffer_page *start; =20 - addr &=3D ~((PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1); + addr &=3D ~(rb_subbuf_size(cpu_buffer->buffer) - 1); =20 /* Do the likely case first */ if (likely(bpage->page =3D=3D (void *)addr)) { @@ -5799,7 +5810,6 @@ static struct buffer_page * __rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) { int max_loops =3D cpu_buffer->ring_meta ? cpu_buffer->nr_pages : 3; - unsigned long bsize =3D READ_ONCE(cpu_buffer->buffer->subbuf_size); struct buffer_page *reader =3D NULL; unsigned long overwrite; unsigned long flags; @@ -5947,7 +5957,7 @@ __rb_get_reader_page(struct ring_buffer_per_cpu *cpu_= buffer) #define USECS_WAIT 1000000 for (nr_loops =3D 0; nr_loops < USECS_WAIT; nr_loops++) { /* If the write is past the end of page, a writer is still updating it */ - if (likely(!reader || rb_page_write(reader) <=3D bsize)) + if (likely(!reader || rb_page_write(reader) <=3D rb_page_capacity(reader= ))) break; =20 udelay(1); @@ -6380,36 +6390,44 @@ EXPORT_SYMBOL_GPL(ring_buffer_consume); struct ring_buffer_iter * ring_buffer_read_start(struct trace_buffer *buffer, int cpu, gfp_t flags) { + struct ring_buffer_iter *iter __free(kfree) =3D kzalloc_obj(*iter, flags); struct ring_buffer_per_cpu *cpu_buffer; - struct ring_buffer_iter *iter; + + if (!iter) + return NULL; =20 if (!cpumask_test_cpu(cpu, buffer->cpumask)) return NULL; =20 - iter =3D kzalloc_obj(*iter, flags); - if (!iter) - return NULL; - - /* Holds the entire event: data and meta data */ - iter->event_size =3D buffer->subbuf_size; - iter->event =3D kmalloc(iter->event_size, flags); - if (!iter->event) { - kfree(iter); - return NULL; - } - cpu_buffer =3D buffer->buffers[cpu]; =20 - iter->cpu_buffer =3D cpu_buffer; + /* + * Only KDB is using GFP_ATOMIC, for the others, lock the buffer to + * prevent concurrent resizing. + */ + if (gfpflags_allow_blocking(flags)) + mutex_lock(&buffer->mutex); =20 atomic_inc(&cpu_buffer->resize_disabled); =20 + if (gfpflags_allow_blocking(flags)) + mutex_unlock(&buffer->mutex); + + /* Holds the entire event: data and meta data. */ + iter->event_size =3D rb_page_capacity(READ_ONCE(cpu_buffer->reader_page)); + iter->event =3D kmalloc(iter->event_size, flags); + if (!iter->event) { + atomic_dec(&cpu_buffer->resize_disabled); + return NULL; + } + iter->cpu_buffer =3D cpu_buffer; + guard(raw_spinlock_irqsave)(&cpu_buffer->reader_lock); arch_spin_lock(&cpu_buffer->lock); rb_iter_reset(iter); arch_spin_unlock(&cpu_buffer->lock); =20 - return iter; + return_ptr(iter); } EXPORT_SYMBOL_GPL(ring_buffer_read_start); =20 @@ -6463,7 +6481,7 @@ unsigned long ring_buffer_size(struct trace_buffer *b= uffer, int cpu) if (!cpumask_test_cpu(cpu, buffer->cpumask)) return 0; =20 - return buffer->subbuf_size * buffer->buffers[cpu]->nr_pages; + return rb_subbuf_capacity(buffer) * buffer->buffers[cpu]->nr_pages; } EXPORT_SYMBOL_GPL(ring_buffer_size); =20 @@ -7094,15 +7112,15 @@ int ring_buffer_read_page(struct trace_buffer *buff= er, if (!data_page || !data_page->data) return -1; =20 - if (data_page->order !=3D buffer->subbuf_order) - return -1; - dpage =3D data_page->data; if (!dpage) return -1; =20 guard(raw_spinlock_irqsave)(&cpu_buffer->reader_lock); =20 + if (data_page->order !=3D cpu_buffer->reader_page->order) + return -1; + reader =3D rb_get_reader_page(cpu_buffer); if (!reader) return -1; @@ -7228,7 +7246,7 @@ int ring_buffer_read_page(struct trace_buffer *buffer, * missed events, then record it there. */ if (missed_events > 0 && - buffer->subbuf_size - size >=3D sizeof(missed_events)) { + rb_page_capacity(reader) - size >=3D sizeof(missed_events)) { memcpy(&dpage->data[size], &missed_events, sizeof(missed_events)); local_add(RB_MISSED_STORED, &dpage->commit); @@ -7248,8 +7266,8 @@ int ring_buffer_read_page(struct trace_buffer *buffer, /* * This page may be off to user land. Zero it out here. */ - if (size < buffer->subbuf_size) - memset(&dpage->data[size], 0, buffer->subbuf_size - size); + if (size < rb_page_capacity(reader)) + memset(&dpage->data[size], 0, rb_page_capacity(reader) - size); =20 return read; } @@ -7275,7 +7293,7 @@ EXPORT_SYMBOL_GPL(ring_buffer_read_page_data); */ int ring_buffer_subbuf_size_get(struct trace_buffer *buffer) { - return buffer->subbuf_size + BUF_PAGE_HDR_SIZE; + return rb_subbuf_size(buffer); } EXPORT_SYMBOL_GPL(ring_buffer_subbuf_size_get); =20 @@ -7320,7 +7338,8 @@ int ring_buffer_subbuf_order_set(struct trace_buffer = *buffer, int order) { struct ring_buffer_per_cpu *cpu_buffer; struct buffer_page *bpage, *tmp; - int old_order, old_size; + unsigned int old_capacity; + int old_order; int nr_pages; int psize; int err; @@ -7329,9 +7348,6 @@ int ring_buffer_subbuf_order_set(struct trace_buffer = *buffer, int order) if (!buffer || order < 0) return -EINVAL; =20 - if (buffer->subbuf_order =3D=3D order) - return 0; - psize =3D (1 << order) * PAGE_SIZE; if (psize <=3D BUF_PAGE_HDR_SIZE) return -EINVAL; @@ -7340,18 +7356,21 @@ int ring_buffer_subbuf_order_set(struct trace_buffe= r *buffer, int order) if (psize > RB_WRITE_MASK + 1) return -EINVAL; =20 - old_order =3D buffer->subbuf_order; - old_size =3D buffer->subbuf_size; - /* prevent another thread from changing buffer sizes */ guard(mutex)(&buffer->mutex); + + old_order =3D buffer->subbuf_order; + if (old_order =3D=3D order) + return 0; + + old_capacity =3D (PAGE_SIZE << old_order) - BUF_PAGE_HDR_SIZE; + atomic_inc(&buffer->record_disabled); =20 /* Make sure all commits have finished */ synchronize_rcu(); =20 buffer->subbuf_order =3D order; - buffer->subbuf_size =3D psize - BUF_PAGE_HDR_SIZE; =20 /* Make sure all new buffers are allocated, before deleting the old ones = */ for_each_buffer_cpu(buffer, cpu) { @@ -7367,8 +7386,8 @@ int ring_buffer_subbuf_order_set(struct trace_buffer = *buffer, int order) } =20 /* Update the number of pages to match the new size */ - nr_pages =3D old_size * buffer->buffers[cpu]->nr_pages; - nr_pages =3D DIV_ROUND_UP(nr_pages, buffer->subbuf_size); + nr_pages =3D old_capacity * buffer->buffers[cpu]->nr_pages; + nr_pages =3D DIV_ROUND_UP(nr_pages, rb_subbuf_capacity(buffer)); =20 /* we need a minimum of two pages */ if (nr_pages < 2) @@ -7454,7 +7473,6 @@ int ring_buffer_subbuf_order_set(struct trace_buffer = *buffer, int order) =20 error: buffer->subbuf_order =3D old_order; - buffer->subbuf_size =3D old_size; =20 atomic_dec(&buffer->record_disabled); =20 @@ -7532,7 +7550,7 @@ static void rb_setup_ids_meta_page(struct ring_buffer= _per_cpu *cpu_buffer, =20 meta->meta_struct_len =3D sizeof(*meta); meta->nr_subbufs =3D nr_subbufs; - meta->subbuf_size =3D cpu_buffer->buffer->subbuf_size + BUF_PAGE_HDR_SIZE; + meta->subbuf_size =3D rb_subbuf_size(cpu_buffer->buffer); meta->meta_page_size =3D meta->subbuf_size; =20 rb_update_meta_page(cpu_buffer); @@ -7894,7 +7912,7 @@ int ring_buffer_map_get_reader(struct trace_buffer *b= uffer, int cpu) * missed events, then record it there. */ commit =3D rb_page_size(reader); - if (buffer->subbuf_size - commit >=3D sizeof(missed_events)) { + if (rb_subbuf_capacity(buffer) - commit >=3D sizeof(missed_events)) { memcpy(&dpage->data[commit], &missed_events, sizeof(missed_events)); local_add(RB_MISSED_STORED, &dpage->commit); @@ -7926,7 +7944,7 @@ int ring_buffer_map_get_reader(struct trace_buffer *b= uffer, int cpu) out: /* Some archs do not have data cache coherency between kernel and user-sp= ace */ flush_kernel_vmap_range(cpu_buffer->reader_page->page, - buffer->subbuf_size + BUF_PAGE_HDR_SIZE); + rb_subbuf_size(buffer)); =20 rb_update_meta_page(cpu_buffer); =20 --=20 2.55.0.654.g21b8a5bc05-goog From nobody Thu Oct 1 15:54:29 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 2C42141D4FE for ; Thu, 6 Aug 2026 21:13:23 +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=1786050804; cv=none; b=BE+/nvczJOi+CfoYXIuoghCavrhfnlpddrHBf9Al6CbiULjq4TGrkSQEeKa4afzcr/Vb5FPDtiZGG/H6yxGT/tk/ug7NHYocVC/FywPMHgVhyZqX+JIQmHCg2OxCX+1zxb/iEc8BK6TEJySouhRkVLW7BxGAiHrVu5k3nHJUqZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786050804; c=relaxed/simple; bh=CNQvFhVdRoGryLzJvLKX3hSTsH+qre2RJpUcVf9nXh4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=P/13r1uuHlq9L+RKrzCibee8+82HdA9BME/4VAnH6DImCVu/B0eGDSr7UMQbBRROOT4I9rnyNYTSUrapCWrYrH9HzOr8hTLx+GrVCzM1vTJL78JFIDDGL3nPJZxHjQphhFVBDadc9bdaVrjDpAWLcXYnv2XMSIhyec/+7hLaCtY= 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=IccDDM99; 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="IccDDM99" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4994d67d0e3so18763695e9.2 for ; Thu, 06 Aug 2026 14:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786050801; x=1786655601; 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=cXf5OkyQb5t84Kc/wGzH1+QneGiHelNLSJRdaS24HXA=; b=IccDDM99e7E1RAIfTfbyL7r97zFtwKJF28/mG7tHKgjjMHrRyMDI9HZBi5BRqIaI9F kYU65IBfh8JyuES9n6ZSUn5D2oS7rzmYSR3wqaeka3hULvuQ/Um0zXKOlWzbbF3VrdkK s8Bj18bqiRnht2URu9HtedVOFcMlg/e88Z9UYM3y0UE2wtxMMSpnbetMVawu3HxszkHy sVM4eYTLNEZJwCz1BOm/9z5fcga43Ximpm/AQ0TOvZQ/knZh+gjUGbN6vs3c/bfDfuO5 GpMDbA8+xuC/wrga7YYZrswgmqg9vU+dM2Jy2h9egfRJmQd40Wg3rXR3T9nAknF/Ge9Y ZyhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786050801; x=1786655601; 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=cXf5OkyQb5t84Kc/wGzH1+QneGiHelNLSJRdaS24HXA=; b=TklOMCwdfg6VOCDd9zMghLoV/NiOvw1dUataWLTyICYWSUK6sYbMxpWqmkZKAb6UDV JMCZuvuCSjBK90LIYtq0ws12gV4Lko432kXy9m664SXVZ72C0fxtBFtbMjl8vuv1L5V9 sDxmNyNI5CFPTkruLjYtFJk7MPj1HaJmMx/kR1/VJdyNbPIG2dCVkVgOHTi4gtkP3jr6 iRdi4b5B//AfhGx0KHMxEhksEzdir8IhPnutGlYV2mHngiW9PJg0DUBGRZwTZtQXOGiM UAMCmFcJ32o37qkI/r1War4qgQCccbTYx+T1HCIZc6DjTnr0JdMIt5nzcYoxl5LtFN0p qn2Q== X-Forwarded-Encrypted: i=1; AHgh+RquVGa5k/kQrS8BTIFANrWXtdaTWb7mGObRXX1WZa7hrdM2+HZ0P3mKyyJ4Ubb0fKqTTimhqn9is8dAgQs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0ItAlqkVwSznPNd0GgOenO5sXtTMmhxnLADbSDlONnHFpS1cZ umaKR1cKwfzrH5+Dthxclmtnn8mfsAhfjwX52cUfw3GOuCJ6DHOxiYL37gYlNk4dwdn9w/m878E QEg9EPAnK2Nckav6VpvEGGw== X-Received: from wmbb14.prod.google.com ([2002:a05:600c:588e:b0:495:4a25:69f7]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4f4a:b0:499:51f0:a9b2 with SMTP id 5b1f17b1804b1-49959e0179bmr50513235e9.1.1786050801122; Thu, 06 Aug 2026 14:13:21 -0700 (PDT) Date: Thu, 6 Aug 2026 22:13:05 +0100 In-Reply-To: <20260806211306.3704194-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: <20260806211306.3704194-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Message-ID: <20260806211306.3704194-6-vdonnefort@google.com> Subject: [PATCH 5/6] ring-buffer: Dynamically calculate max_data_size 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 ring buffer order can be dynamically modified and temporarily disables writing to do so. It is therefore safe to use the updated value to calculate the maximum event size which can be written onto the ring buffer. However, notice it is hardly making any difference for trace_marker because of the TRACE_MARKER_MAX_SIZE limit. For an 8KiB subbuf size, trace_marker can take 4096 characters while it can 'only' take 4054 bytes for smaller subbufs. Fixes: f9b94daa542a ("ring-buffer: Set new size of the ring buffer sub page= ") Signed-off-by: Vincent Donnefort diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 3531005aab43..d2480ccc81b8 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -587,7 +587,6 @@ struct trace_buffer { struct ring_buffer_meta *meta; =20 unsigned int subbuf_order; - unsigned int max_data_size; }; =20 static inline unsigned int rb_subbuf_size(struct trace_buffer *buffer) @@ -600,6 +599,17 @@ static inline unsigned int rb_subbuf_capacity(struct t= race_buffer *buffer) return rb_subbuf_size(buffer) - BUF_PAGE_HDR_SIZE; } =20 +static inline unsigned int rb_max_data_size(struct trace_buffer *buffer) +{ + struct ring_buffer_event *event; + + /* + * surely rb_subbuf_capacity() is bigger than + * RINGBUF_TYPE_DATA_TYPE_LEN_MAX (see ring_buffer_event_length). + */ + return rb_subbuf_capacity(buffer) - RB_EVNT_HDR_SIZE - sizeof(event->arra= y[0]); +} + static inline unsigned int rb_page_capacity(struct buffer_page *bpage) { return (PAGE_SIZE << bpage->order) - BUF_PAGE_HDR_SIZE; @@ -2745,9 +2755,6 @@ static struct trace_buffer *alloc_buffer(unsigned lon= g size, unsigned flags, buffer->subbuf_order =3D order; subbuf_size =3D (PAGE_SIZE << order); =20 - /* Max payload is buffer page size - header (8bytes) */ - buffer->max_data_size =3D rb_subbuf_capacity(buffer) - (sizeof(u32) * 2); - buffer->flags =3D flags; buffer->clock =3D trace_clock_local; buffer->reader_lock_key =3D key; @@ -4914,7 +4921,7 @@ rb_reserve_next_event(struct trace_buffer *buffer, if (ring_buffer_time_stamp_abs(cpu_buffer->buffer)) { add_ts_default =3D RB_ADD_STAMP_ABSOLUTE; info.length +=3D RB_LEN_TIME_EXTEND; - if (info.length > cpu_buffer->buffer->max_data_size) + if (info.length > rb_max_data_size(cpu_buffer->buffer)) goto out_fail; } else { add_ts_default =3D RB_ADD_STAMP_NONE; @@ -4989,7 +4996,7 @@ ring_buffer_lock_reserve(struct trace_buffer *buffer,= unsigned long length) if (unlikely(atomic_read(&cpu_buffer->record_disabled))) goto out; =20 - if (unlikely(length > buffer->max_data_size)) + if (unlikely(length > rb_max_data_size(buffer))) goto out; =20 if (unlikely(trace_recursive_lock(cpu_buffer))) @@ -5136,7 +5143,7 @@ int ring_buffer_write(struct trace_buffer *buffer, if (atomic_read(&cpu_buffer->record_disabled)) return -EBUSY; =20 - if (length > buffer->max_data_size) + if (length > rb_max_data_size(buffer)) return -EBUSY; =20 if (unlikely(trace_recursive_lock(cpu_buffer))) @@ -6495,8 +6502,9 @@ unsigned long ring_buffer_max_event_size(struct trace= _buffer *buffer) { /* If abs timestamp is requested, events have a timestamp too */ if (ring_buffer_time_stamp_abs(buffer)) - return buffer->max_data_size - RB_LEN_TIME_EXTEND; - return buffer->max_data_size; + return rb_max_data_size(buffer) - RB_LEN_TIME_EXTEND; + + return rb_max_data_size(buffer); } EXPORT_SYMBOL_GPL(ring_buffer_max_event_size); =20 --=20 2.55.0.654.g21b8a5bc05-goog From nobody Thu Oct 1 15:54:29 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 3B2DA41DDE3 for ; Thu, 6 Aug 2026 21:13:24 +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=1786050808; cv=none; b=hn8aGTYZ2Qtc6YGs5Z1MrpdeyitKWgJ3s81GVYo1KHkAu/HG6ZbuYRNsXDSMelniU97HUMJlQnOT4BMRZgIWiFJwkBZuSeKBMyH+aOb4iokgnPhADNB/Lwxe6wM2CEv+MDozaDRaOsGF3GkvX6X6htbwaCmroiVEtsHR10RPGbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786050808; c=relaxed/simple; bh=SvJyWwsI9ZU6rrrZROxXRUnmssX8edBRrxKJszTFRnA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=E0atzU05QFgcR36tOf7mIDz58FiSBA1laK3zSuX/LO1mAQkYI9EKnmsitcRqJ/UjJEKFnxAXGiFx22JplhEOsOTNwUtJxmcXvwsrfIMI3kWjSiLMzwGeBdULqAXdg4obvwFzIlT0y/XY7l3FHEy4SUOm56jo0x8sbNwSQIcmjdI= 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=hNVG9j1W; 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="hNVG9j1W" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-495569acf8dso16233965e9.1 for ; Thu, 06 Aug 2026 14:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786050802; x=1786655602; 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=RFyN105iXFuGlJPAnwQ0AEHc6sQHsfnwpATvskXdjFw=; b=hNVG9j1WY2UnWZyh381PiWMiBAo3n2TUmziviC3VKjOgf6sOsPQ73zCj2ejCFr0vhb s18kpqR9XN3iJwc+iBE9KkZDjm0rMU8sR/QE3fqxgwZNWkJ0Ul9T7Mb2kG/G8QZf4K2r gTgvxmsiv3HUmSanEstXfUP8jXhg3LhdnmOx1X8JUD8EW0SD+MTTwGjEB3Dq5Fv0Jkh7 m/74CU1GPyLVIxS58YwrypM1qiBa+lXtBenHSXVWgRDz68WgWjszxbmQuZdSKP0Jb/Db SLBqG/6hQ0GZ4N6RldbX1pTbI+gzQ8LIxr98qXlkIfozGqQ+Cf4U/PmabSrYBzxAhgAo etdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786050802; x=1786655602; 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=RFyN105iXFuGlJPAnwQ0AEHc6sQHsfnwpATvskXdjFw=; b=eTQooVHRFqQbJzRSL1/y9D7oIkmkzgBY2OcEd56OhXPCrVgpjtMaY/I3I/dvLi6qtg X8rZczn2yEgn8Ou18wDTVndbx0s+4+sK0dez6xlfOxo3PE44DMQIb4oSoHOvcaE3wJJd vuGQTTDMeBIZhEWG9Gjayb/HUldOYUAGy0SMiGAFMnvbaG6je+aJKS68SZzk54ydVlv/ KJh7Mb1iecnCwD7IarWmW6FO1wERJuofe0N7Wu2bA/C4NGZH8grwvuF7fXj4h7vMNmhI qjibQgEOjrNG1M9nWhV2cuV+aIfaJx/et9ONp1OUe0VMCaiW3cuOFg+79zKT3EvF9cJ3 lHQA== X-Forwarded-Encrypted: i=1; AHgh+RpMpLMz3fw0Wwn/t9oUpDYHLxfC6XDGmyKdsohBcIQcPRBs9EVcHR04FnvQ6SuDI/3qPwVLxDhMTfzBia8=@vger.kernel.org X-Gm-Message-State: AOJu0YwHWiNiFgxS8L3wLHfYH01h8+A1Q0hSfk4GLYHnPg7QxqAIGNxk khp9EMlaP+6jWyx2su3kgbAh8quO7OB4405mt3S2Tx2vDwz1KMh3zJ4W+Y5XJg1TayBLxUBBWar hS2odjJ0X5FTpWRQrtcSNcw== X-Received: from wmbd15.prod.google.com ([2002:a05:600c:58cf:b0:493:b719:1145]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:19cd:b0:498:519:e660 with SMTP id 5b1f17b1804b1-4994e72f7b6mr228897425e9.4.1786050802294; Thu, 06 Aug 2026 14:13:22 -0700 (PDT) Date: Thu, 6 Aug 2026 22:13:06 +0100 In-Reply-To: <20260806211306.3704194-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: <20260806211306.3704194-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Message-ID: <20260806211306.3704194-7-vdonnefort@google.com> Subject: [PATCH 6/6] ring-buffer: Remove ring_buffer_per_cpu::mapped 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" ring_buffer_per_cpu::mapped tracks if a ring-buffer is either mapped by user-space or if it is a persistent buffer. We already have user_mapped for the former and ring_meta for the latter. Get rid of mapped and instead create rb_is_static(). A static ring-buffer cannot be resized, swapped or have its pages extracted. Signed-off-by: Vincent Donnefort diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index d2480ccc81b8..e18e2c315545 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -503,7 +503,7 @@ struct ring_buffer_per_cpu { int cpu; atomic_t record_disabled; atomic_t resize_disabled; - struct trace_buffer *buffer; + struct trace_buffer *buffer; raw_spinlock_t reader_lock; /* serialize readers */ arch_spinlock_t lock; struct lock_class_key lock_key; @@ -541,7 +541,6 @@ struct ring_buffer_per_cpu { /* pages removed since last reset */ unsigned long pages_removed; =20 - unsigned int mapped; unsigned int user_mapped; /* user space mapping */ struct mutex mapping_lock; struct buffer_page **subbuf_ids; /* ID to subbuf VA */ @@ -615,6 +614,11 @@ static inline unsigned int rb_page_capacity(struct buf= fer_page *bpage) return (PAGE_SIZE << bpage->order) - BUF_PAGE_HDR_SIZE; } =20 +static inline bool rb_is_static(struct ring_buffer_per_cpu *cpu_buffer) +{ + return cpu_buffer->user_mapped || cpu_buffer->remote || cpu_buffer->ring_= meta; +} + struct ring_buffer_iter { struct ring_buffer_per_cpu *cpu_buffer; unsigned long head; @@ -2545,7 +2549,6 @@ rb_allocate_cpu_buffer(struct trace_buffer *buffer, l= ong nr_pages, int cpu) * Range mapped buffers have the same restrictions as memory * mapped ones do. */ - cpu_buffer->mapped =3D 1; cpu_buffer->ring_meta =3D rb_range_meta(buffer, nr_pages, cpu); bpage->page =3D rb_range_buffer(cpu_buffer, 0); if (!bpage->page) @@ -6636,12 +6639,11 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) rb_head_page_activate(cpu_buffer); cpu_buffer->pages_removed =3D 0; =20 - if (cpu_buffer->mapped) { - rb_update_meta_page(cpu_buffer); - if (cpu_buffer->ring_meta) { - struct ring_buffer_cpu_meta *meta =3D cpu_buffer->ring_meta; - meta->commit_buffer =3D meta->head_buffer; - } + rb_update_meta_page(cpu_buffer); + if (cpu_buffer->ring_meta) { + struct ring_buffer_cpu_meta *meta =3D cpu_buffer->ring_meta; + + meta->commit_buffer =3D meta->head_buffer; } } =20 @@ -6890,8 +6892,8 @@ int ring_buffer_swap_cpu(struct trace_buffer *buffer_= a, cpu_buffer_a =3D buffer_a->buffers[cpu]; cpu_buffer_b =3D buffer_b->buffers[cpu]; =20 - /* It's up to the callers to not try to swap mapped buffers */ - if (WARN_ON_ONCE(cpu_buffer_a->mapped || cpu_buffer_b->mapped)) + /* It's up to the callers to not try to swap static buffers */ + if (WARN_ON_ONCE(rb_is_static(cpu_buffer_a) || rb_is_static(cpu_buffer_b)= )) return -EBUSY; =20 /* At least make sure the two buffers are somewhat the same */ @@ -7103,7 +7105,6 @@ int ring_buffer_read_page(struct trace_buffer *buffer, unsigned int size; unsigned int read; u64 save_timestamp; - bool force_memcpy; =20 if (!cpumask_test_cpu(cpu, buffer->cpumask)) return -1; @@ -7142,8 +7143,6 @@ int ring_buffer_read_page(struct trace_buffer *buffer, /* Check if any events were dropped */ missed_events =3D cpu_buffer->lost_events; =20 - force_memcpy =3D cpu_buffer->mapped || cpu_buffer->remote; - /* * If this page has been partially read or * if len is not big enough to read the rest of the page or @@ -7153,7 +7152,7 @@ int ring_buffer_read_page(struct trace_buffer *buffer, */ if (read || (len < (size - read)) || cpu_buffer->reader_page =3D=3D cpu_buffer->commit_page || - force_memcpy) { + rb_is_static(cpu_buffer)) { struct buffer_data_page *rpage =3D cpu_buffer->reader_page->page; unsigned int rpos =3D read; unsigned int pos =3D 0; @@ -7600,11 +7599,7 @@ static int __rb_inc_dec_mapped(struct ring_buffer_pe= r_cpu *cpu_buffer, =20 lockdep_assert_held(&cpu_buffer->mapping_lock); =20 - /* mapped is always greater or equal to user_mapped */ - if (WARN_ON(cpu_buffer->mapped < cpu_buffer->user_mapped)) - return -EINVAL; - - if (inc && cpu_buffer->mapped =3D=3D UINT_MAX) + if (inc && cpu_buffer->user_mapped =3D=3D UINT_MAX) return -EBUSY; =20 if (WARN_ON(!inc && cpu_buffer->user_mapped =3D=3D 0)) @@ -7613,13 +7608,10 @@ static int __rb_inc_dec_mapped(struct ring_buffer_p= er_cpu *cpu_buffer, mutex_lock(&cpu_buffer->buffer->mutex); raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); =20 - if (inc) { + if (inc) cpu_buffer->user_mapped++; - cpu_buffer->mapped++; - } else { + else cpu_buffer->user_mapped--; - cpu_buffer->mapped--; - } =20 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); mutex_unlock(&cpu_buffer->buffer->mutex); @@ -7791,7 +7783,6 @@ int ring_buffer_map(struct trace_buffer *buffer, int = cpu, if (!err) { raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); /* This is the first time it is mapped by user */ - cpu_buffer->mapped++; cpu_buffer->user_mapped =3D 1; raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); } else { @@ -7848,8 +7839,6 @@ int ring_buffer_unmap(struct trace_buffer *buffer, in= t cpu) raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); =20 /* This is the last user space mapping */ - if (!WARN_ON_ONCE(cpu_buffer->mapped < cpu_buffer->user_mapped)) - cpu_buffer->mapped--; cpu_buffer->user_mapped =3D 0; =20 raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); --=20 2.55.0.654.g21b8a5bc05-goog