From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6534AD75E3A for ; Fri, 22 Nov 2024 12:53:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AF2F36B00BA; Fri, 22 Nov 2024 07:53:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AA2846B00BD; Fri, 22 Nov 2024 07:53:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 96AA56B00BC; Fri, 22 Nov 2024 07:53:52 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 75FDC6B009C for ; Fri, 22 Nov 2024 07:53:52 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 221A1AF23D for ; Fri, 22 Nov 2024 12:53:52 +0000 (UTC) X-FDA: 82813720626.08.9C29BC7 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf22.hostedemail.com (Postfix) with ESMTP id 14FE7C000E for ; Fri, 22 Nov 2024 12:52:42 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=oLsIV1EN; spf=pass (imf22.hostedemail.com: domain of "SRS0=OEAt=SR=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=OEAt=SR=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org"; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732279825; h=from:from:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vU/dJam1k7Qk+C1f6HRAeSY3h0dGrS0JC0vTR87vrgw=; b=rfa9cQ9X+hVuHi2+ELT0M/P9QpldcrlcBj295Jr2/80YNTYpuQiYWqUy3r3PGqx04PBMvv npoYPoRiOWtiP05sMdUHbmjdMxG88I8+FGeN9S0J4SuwPDvy/Ifaac9/aQ0ODEK0uvZikQ aq3KcuLxdOqIS9lBFkl9D+UTBBJhZ2s= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=oLsIV1EN; spf=pass (imf22.hostedemail.com: domain of "SRS0=OEAt=SR=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=OEAt=SR=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org"; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732279825; a=rsa-sha256; cv=none; b=ocGH7nxAGpVNV2kRMPkWm72L5FpNKQ/Y8UCyyG6AFtFVajUw01GrAFZQOzH5fYr/qNKTmP rKrPeHrIiwlyz7p6X011gVpOP51vfkw31fIfJTX1ghOtRC+grhElqCX1qb4xSzMQ6HR/77 o4Au/j3Ik4wSXzo13AS6nqW25MRuE+U= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 0BBED5C5A2F; Fri, 22 Nov 2024 12:53:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F350C4CECE; Fri, 22 Nov 2024 12:53:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1732280028; bh=//jUWkPnDeKfRmE6z8C5sOx1U9xYZqa2EA/4iJb5IuM=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=oLsIV1ENlDGQftG6yQCY/EpB8zrqkKUT69pzDQJAY3XLR/SLc9/EzLWeMHn/hEC/6 doErMA7pZLaVEVBhEGHzz2odGEodVKCFpUbAzdH2pAE8DDR+lN5c9GZ1a85l5/sJRr Sn7IR4Zfx2w6+8N8tybnxkwBu6Bsiu5C4+jZagfffWrXBp3EL9m9dsszw5bOIUmaN7 BxdpzTfTeVqT0QwaITMc1JuHtXaBrB2T/JN8h0YMAROrH4EXxK/bd59UId0xQ7urbI Qfn8CQlmUWeUnIX0X9E4EL79apdDUuTCctH1NpKd8NulSl8gmRRgaSTGqBQs8eMQTT Q1AvSRmge2OIQ== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 14E3BCE0BC4; Fri, 22 Nov 2024 04:53:48 -0800 (PST) Date: Fri, 22 Nov 2024 04:53:48 -0800 From: "Paul E. McKenney" To: Valentin Schneider Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org, bpf@vger.kernel.org, x86@kernel.org, rcu@vger.kernel.org, linux-kselftest@vger.kernel.org, Steven Rostedt , Masami Hiramatsu , Jonathan Corbet , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Paolo Bonzini , Wanpeng Li , Vitaly Kuznetsov , Andy Lutomirski , Peter Zijlstra , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , Lorenzo Stoakes , Josh Poimboeuf , Jason Baron , Kees Cook , Sami Tolvanen , Ard Biesheuvel , Nicholas Piggin , Juerg Haefliger , Nicolas Saenz Julienne , "Kirill A. Shutemov" , Nadav Amit , Dan Carpenter , Chuang Wang , Yang Jihong , Petr Mladek , "Jason A. Donenfeld" , Song Liu , Julian Pidancet , Tom Lendacky , Dionna Glaze , Thomas =?iso-8859-1?Q?Wei=DFschuh?= , Juri Lelli , Marcelo Tosatti , Yair Podemsky , Daniel Wagner , Petr Tesarik Subject: Re: [RFC PATCH v3 04/15] rcu: Add a small-width RCU watching counter debug option Message-ID: Reply-To: paulmck@kernel.org References: <20241119153502.41361-1-vschneid@redhat.com> <20241119153502.41361-5-vschneid@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241119153502.41361-5-vschneid@redhat.com> X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 14FE7C000E X-Stat-Signature: ofaf6xbgng1ga3myxwdqd7qbcjbd4f7h X-Rspam-User: X-HE-Tag: 1732279962-387620 X-HE-Meta: U2FsdGVkX1/MTD+roDy8YJRnnfslLDyUbtBe7auAj4q+ikeLOtau+/HnkQerI/GEQerwMyVHHFAYdN8VuY/qGAdXKRwvsgn43+9dVvV95253frMlAXu969Ty3Gyc9sKGGOYsNeFFfcUL5/YOmi7FfBguODTvM7zLmf6QQez5SMVHe8oAuRzjCamx7zqpjPomrLKpdKp6aMiT2OG+k1MFftPdCRRLKVT2ou3F1Y6DV/TctErurJOl8SkZz9jGmEDSrR+bQEKR7vbrBrJc+aasYfmabEZb8on9Qs7rgIieqXCpx1tM+Q/s978imUOfSjl9LjV6sJHpC3KJyOY5MiOGYJVnoZGQ05Fg8z/lNOi0G/ZRgQfII/mDgfySqwbV5C1sYniUilu0sjntDomUinXp+vAxzB27hm94RtA4UCUPcIJ3UeEpAQMXVfYeCdhZpQJswJ7f8WgR7XBkTSbmC0/uMmbd4nZvaw+/t3hhYMyxHUUZ/uZXdv2MT4xRQaPfrd5mKbtmz1wvnbnCsaqwgwsHlOZ95Kp76HIeMV4ZkpKcRq8/Spqjg3ohaaYDx+ECukHZy/prnj6kpM2Rs3jFw37o9acaN9mp51wx7LH3GxIUb0pgCxBIXQsLgFr8y8UUfIkKX7o1eABdHQNjkZxxtNe5SAINLC/ghasPHHL0QdJ0kLR223/Xu1OOtBrlfeFGjb18UYOPj07Kx1GpUJuYVO46tIxuQ86mgq1uHTrkDwKba+/QnYwSRl5PHJ3ymPuA2uJ7u1Km2+FrK4XAvMIuEhjVWk9ECP8sHHJZdig7FaTGe714lDCQYlvKojVtRvZKmqavXxYvGyWz734VkmOxdjSVVgMfrkahj1CQ79iNH2tZzVAfIB/Zc+hR3nfXZRTijSSHGvO11KacpeNjIHSjo/TQdHIGhi6pF2PDvvUs9EdhPkX+mjnttOTcBu4uQF2WgrzfcRfawcZdkiE9vQ8rBGd fnWwHk9j VYN1jEdls/82IikEhhumMIFOAk0ibgM4023aiQvYdz38tMO19jf2e3C0WpoZQ97Et5/qPZAyMeZPGvVmbe6NLTTIKf5j8+wdVHScJ8k/tL37m+WedrET4E2/Fe+FB/NPRUFbL4EdBqpPLNhlLX1ZiHGqotJaWCDk9+r8GomVWsJe+6wVT9C162FhhfvaLEIrSoqW5T6sbWlkjfiDD3XlG0e72jWsu9Zh1T1u4egTB584rwtXwqoa53KZeuerSFdcOlXVYciWCj+UC4KiANlBlfmhi2PcEl1H0JIwwVbFrcQwL5WgEkhCslpU7zKE6lkFC4d3sSpXnleWshInU1gknyQue9FSR7uWzqxV1l5AvOP3Yl0qOfMylJF9gIQcpsHaadgfPPFKucdgks6nrNwugxpHrBG2icWeHtRQnCFAv/3UJrPuFDgtVd18B8W80DTGMX1F76EHJR6UnGvkyDpYen6ii5U2jfDc63Pxs7FmOk6eO2Zz3xakOemXowBN5Z0FvOrpZ9d12+oQMgqekZRO9TDDVN5wVBQGFblTJ76FazzIvhhqYieXS+S5Na6AdNmzANGt3pxtVI6N4v4eJoiJmmf4obUVfVxmVKjmuKZ4PuXmlaqDg4Q9LfUz12wlOhfYBxWvwtHmg67EByLXTuQf3MwB3mgN/IiVxzgKj6PMwBL+aqyKjEMEO5gyK8xwKAK7i6mzjN+MAZpdBh1Nq/krD2yvuuw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Nov 19, 2024 at 04:34:51PM +0100, Valentin Schneider wrote: > A later commit will reduce the size of the RCU watching counter to free up > some bits for another purpose. Paul suggested adding a config option to > test the extreme case where the counter is reduced to its minimum usable > width for rcutorture to poke at, so do that. > > Make it only configurable under RCU_EXPERT. While at it, add a comment to > explain the layout of context_tracking->state. > > Link: http://lore.kernel.org/r/4c2cb573-168f-4806-b1d9-164e8276e66a@paulmck-laptop > Suggested-by: Paul E. McKenney > Signed-off-by: Valentin Schneider Looks good, one help-text nit below. Reviewed-by: Paul E. McKenney > --- > include/linux/context_tracking_state.h | 44 ++++++++++++++++++++++---- > kernel/rcu/Kconfig.debug | 14 ++++++++ > 2 files changed, 51 insertions(+), 7 deletions(-) > > diff --git a/include/linux/context_tracking_state.h b/include/linux/context_tracking_state.h > index 7b8433d5a8efe..0b81248aa03e2 100644 > --- a/include/linux/context_tracking_state.h > +++ b/include/linux/context_tracking_state.h > @@ -18,12 +18,6 @@ enum ctx_state { > CT_STATE_MAX = 4, > }; > > -/* Odd value for watching, else even. */ > -#define CT_RCU_WATCHING CT_STATE_MAX > - > -#define CT_STATE_MASK (CT_STATE_MAX - 1) > -#define CT_RCU_WATCHING_MASK (~CT_STATE_MASK) > - > struct context_tracking { > #ifdef CONFIG_CONTEXT_TRACKING_USER > /* > @@ -44,9 +38,45 @@ struct context_tracking { > #endif > }; > > +/* > + * We cram two different things within the same atomic variable: > + * > + * CT_RCU_WATCHING_START CT_STATE_START > + * | | > + * v v > + * MSB [ RCU watching counter ][ context_state ] LSB > + * ^ ^ > + * | | > + * CT_RCU_WATCHING_END CT_STATE_END > + * > + * Bits are used from the LSB upwards, so unused bits (if any) will always be in > + * upper bits of the variable. > + */ > #ifdef CONFIG_CONTEXT_TRACKING > +#define CT_SIZE (sizeof(((struct context_tracking *)0)->state) * BITS_PER_BYTE) > + > +#define CT_STATE_WIDTH bits_per(CT_STATE_MAX - 1) > +#define CT_STATE_START 0 > +#define CT_STATE_END (CT_STATE_START + CT_STATE_WIDTH - 1) > + > +#define CT_RCU_WATCHING_MAX_WIDTH (CT_SIZE - CT_STATE_WIDTH) > +#define CT_RCU_WATCHING_WIDTH (IS_ENABLED(CONFIG_RCU_DYNTICKS_TORTURE) ? 2 : CT_RCU_WATCHING_MAX_WIDTH) > +#define CT_RCU_WATCHING_START (CT_STATE_END + 1) > +#define CT_RCU_WATCHING_END (CT_RCU_WATCHING_START + CT_RCU_WATCHING_WIDTH - 1) > +#define CT_RCU_WATCHING BIT(CT_RCU_WATCHING_START) > + > +#define CT_STATE_MASK GENMASK(CT_STATE_END, CT_STATE_START) > +#define CT_RCU_WATCHING_MASK GENMASK(CT_RCU_WATCHING_END, CT_RCU_WATCHING_START) > + > +#define CT_UNUSED_WIDTH (CT_RCU_WATCHING_MAX_WIDTH - CT_RCU_WATCHING_WIDTH) > + > +static_assert(CT_STATE_WIDTH + > + CT_RCU_WATCHING_WIDTH + > + CT_UNUSED_WIDTH == > + CT_SIZE); > + > DECLARE_PER_CPU(struct context_tracking, context_tracking); > -#endif > +#endif /* CONFIG_CONTEXT_TRACKING */ > > #ifdef CONFIG_CONTEXT_TRACKING_USER > static __always_inline int __ct_state(void) > diff --git a/kernel/rcu/Kconfig.debug b/kernel/rcu/Kconfig.debug > index 9b0b52e1836fa..8dc505d841f8d 100644 > --- a/kernel/rcu/Kconfig.debug > +++ b/kernel/rcu/Kconfig.debug > @@ -168,4 +168,18 @@ config RCU_STRICT_GRACE_PERIOD > when looking for certain types of RCU usage bugs, for example, > too-short RCU read-side critical sections. > > + > +config RCU_DYNTICKS_TORTURE > + bool "Minimize RCU dynticks counter size" > + depends on RCU_EXPERT > + default n > + help > + This option controls the width of the dynticks counter. > + > + Lower values will make overflows more frequent, which will increase > + the likelihood of extending grace-periods. This option sets the width > + to its minimum usable value. The second sentence ("Lower values ...") sounds at first reading like this Kconfig option directly controls the width. The third sentence sets things straight, but the reader might well be irretrievably confused by that point. How about something like this instead? help This option sets the width of the dynticks counter to its minimum usable value. This minimum width greatly increases the probability of flushing out bugs involving counter wrap, but it also increases the probability of extending grace period durations. This Kconfig option should therefore be avoided in production due to the consequent increased probability of OOMs. This has no value for production and is only for testing. > endmenu # "RCU Debugging" > -- > 2.43.0 >