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 X-Spam-Level: X-Spam-Status: No, score=-14.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A450C43331 for ; Mon, 30 Mar 2020 13:36:32 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D04F320757 for ; Mon, 30 Mar 2020 13:36:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TiaQr3F3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D04F320757 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6D83F6B0032; Mon, 30 Mar 2020 09:36:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 661E76B0037; Mon, 30 Mar 2020 09:36:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 529CB8E0001; Mon, 30 Mar 2020 09:36:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0135.hostedemail.com [216.40.44.135]) by kanga.kvack.org (Postfix) with ESMTP id 34F8E6B0032 for ; Mon, 30 Mar 2020 09:36:31 -0400 (EDT) Received: from smtpin28.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 0D792180AD815 for ; Mon, 30 Mar 2020 13:36:31 +0000 (UTC) X-FDA: 76652128182.28.stop26_38d56b75d5703 X-HE-Tag: stop26_38d56b75d5703 X-Filterd-Recvd-Size: 8770 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) by imf48.hostedemail.com (Postfix) with ESMTP for ; Mon, 30 Mar 2020 13:36:30 +0000 (UTC) Received: by mail-pj1-f68.google.com with SMTP id z3so6814089pjr.4 for ; Mon, 30 Mar 2020 06:36:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=+fPXtMG18qVY4m9WOhWXblaoaSCV2T3IidYfdO9v5Bc=; b=TiaQr3F3G4sHFGghYrgGwKp0NaGg24ZtNvzhKty6okkTsTWOPvxU96ouJBGQj/Enyw egiqQsVpSOKQuaZ6N4A884zyozvrV9QbK9YlYFjv9wKnRa9yWTgw+MHygPpi3E2FID6I Ur3HrluZBkCiay3u05YMyvQFI3xjCCIwA+Svvz7xlUdIihOByRyArbRWSNTpN80A6dAv MNpd+HPd7CbsU+y2/de563cF5A03Vn5AT6plaGQwMHB4ADxlJc3ORyd/qvSVYP7s4Amb hWrb/LZyJMLLsljS8x/dtOj9MVT04NU1wcHoVJ1Gc2EZyYUUH/N+YexuDhgTs8px37Z1 KdTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=+fPXtMG18qVY4m9WOhWXblaoaSCV2T3IidYfdO9v5Bc=; b=RMhtB4HNHIMXF2QexsdSnygZdLla9xL2KkWw+/uSDGEC1+qJrc0bLirLCM470MssOl y2MwkHDhDyWWbeFgk9qs9QtqyUIHaeEF9KroVi5boXyyo4u3l0In6DEnWhUdtVL3/a+k C2zcTpmRLvQidg0a1cpbBczIGt03A6rK+Ot53JriVQZfiKGxHAUqY7LPu8k3q2qZtz6o zYsop+/LRsRnPysgn+BnWSfXCKOAcFYXjsuuywI32Lf4l81L9+Ac5arFcbzCbpzLZu8N fSs0o7M2WkZ5rrC3E8v6mZbArwsYj3JbDiDS6yCwAWJ73YdlJASUizTUiqOilTLu8pj5 AL5g== X-Gm-Message-State: ANhLgQ2H1xBvM55r76h9IddBYisRuK2vJ9uqEh5Z9mxePS++pzqLz10x f4XWj3zzoW9t/M/DILZoFdK8HoC+lbQZTjvNSMXchA== X-Google-Smtp-Source: ADFU+vsdoVK1+sTJYRrov9oxNIYXYb47vKR9Emii9lGzmnHqLKm8++J8YLiHT2q6OoFxOQnwPTi+FQiRHJYTvH0gj8o= X-Received: by 2002:a17:90b:1985:: with SMTP id mv5mr16056656pjb.69.1585575389008; Mon, 30 Mar 2020 06:36:29 -0700 (PDT) MIME-Version: 1.0 References: <20200325161249.55095-1-glider@google.com> <20200325161249.55095-2-glider@google.com> In-Reply-To: <20200325161249.55095-2-glider@google.com> From: Andrey Konovalov Date: Mon, 30 Mar 2020 15:36:17 +0200 Message-ID: Subject: Re: [PATCH v5 01/38] stackdepot: reserve 5 extra bits in depot_stack_handle_t To: Alexander Potapenko Cc: Vegard Nossum , Dmitry Vyukov , Marco Elver , Linux Memory Management List , Alexander Viro , Andreas Dilger , Andrew Morton , Andrey Ryabinin , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Christoph Hellwig , Christoph Hellwig , "Darrick J. Wong" , "David S. Miller" , Dmitry Torokhov , Eric Biggers , Eric Dumazet , Eric Van Hensbergen , Greg Kroah-Hartman , Harry Wentland , Herbert Xu , Ilya Leoshkevich , Ingo Molnar , Jason Wang , Jens Axboe , Marek Szyprowski , Mark Rutland , "Martin K. Petersen" , Martin Schwidefsky , Matthew Wilcox , "Michael S . Tsirkin" , Michal Hocko , Michal Simek , Petr Mladek , Qian Cai , Randy Dunlap , Robin Murphy , Sergey Senozhatsky , Steven Rostedt , Takashi Iwai , "Theodore Ts'o" , Thomas Gleixner , Vasily Gorbik , Wolfram Sang Content-Type: text/plain; charset="UTF-8" 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: On Wed, Mar 25, 2020 at 5:12 PM wrote: > > Some users (currently only KMSAN) may want to use spare bits in > depot_stack_handle_t. Let them do so and provide get_dsh_extra_bits() > and set_dsh_extra_bits() to access those bits. > > Signed-off-by: Alexander Potapenko > To: Alexander Potapenko > Cc: Vegard Nossum > Cc: Dmitry Vyukov > Cc: Marco Elver > Cc: Andrey Konovalov > Cc: linux-mm@kvack.org > --- > > Change-Id: I23580dbde85908eeda0bdd8f83a8c3882ab3e012 > --- > include/linux/stackdepot.h | 8 ++++++++ > lib/stackdepot.c | 24 +++++++++++++++++++++++- > 2 files changed, 31 insertions(+), 1 deletion(-) > > diff --git a/include/linux/stackdepot.h b/include/linux/stackdepot.h > index 24d49c732341a..ac1b5a78d7f65 100644 > --- a/include/linux/stackdepot.h > +++ b/include/linux/stackdepot.h > @@ -12,6 +12,11 @@ > #define _LINUX_STACKDEPOT_H > > typedef u32 depot_stack_handle_t; > +/* > + * Number of bits in the handle that stack depot doesn't use. Users may store > + * information in them. > + */ Could it be that stack depot starts using those bits at some point in the future and then external users will get broken? If not, maybe it makes sense to change the language here that stack depot explicitly dedicates these 5 bits to external use. Otherwise this looks a bit confusing IMO. > +#define STACK_DEPOT_EXTRA_BITS 5 > > depot_stack_handle_t stack_depot_save(unsigned long *entries, > unsigned int nr_entries, gfp_t gfp_flags); > @@ -20,5 +25,8 @@ unsigned int stack_depot_fetch(depot_stack_handle_t handle, > unsigned long **entries); > > unsigned int filter_irq_stacks(unsigned long *entries, unsigned int nr_entries); > +depot_stack_handle_t set_dsh_extra_bits(depot_stack_handle_t handle, > + unsigned int bits); > +unsigned int get_dsh_extra_bits(depot_stack_handle_t handle); > > #endif > diff --git a/lib/stackdepot.c b/lib/stackdepot.c > index 2caffc64e4c82..195ce3dc7c37e 100644 > --- a/lib/stackdepot.c > +++ b/lib/stackdepot.c > @@ -40,8 +40,10 @@ > #define STACK_ALLOC_ALIGN 4 > #define STACK_ALLOC_OFFSET_BITS (STACK_ALLOC_ORDER + PAGE_SHIFT - \ > STACK_ALLOC_ALIGN) > + > #define STACK_ALLOC_INDEX_BITS (DEPOT_STACK_BITS - \ > - STACK_ALLOC_NULL_PROTECTION_BITS - STACK_ALLOC_OFFSET_BITS) > + STACK_ALLOC_NULL_PROTECTION_BITS - \ > + STACK_ALLOC_OFFSET_BITS - STACK_DEPOT_EXTRA_BITS) > #define STACK_ALLOC_SLABS_CAP 8192 > #define STACK_ALLOC_MAX_SLABS \ > (((1LL << (STACK_ALLOC_INDEX_BITS)) < STACK_ALLOC_SLABS_CAP) ? \ > @@ -54,6 +56,7 @@ union handle_parts { > u32 slabindex : STACK_ALLOC_INDEX_BITS; > u32 offset : STACK_ALLOC_OFFSET_BITS; > u32 valid : STACK_ALLOC_NULL_PROTECTION_BITS; > + u32 extra : STACK_DEPOT_EXTRA_BITS; > }; > }; > > @@ -72,6 +75,24 @@ static int next_slab_inited; > static size_t depot_offset; > static DEFINE_SPINLOCK(depot_lock); > > +depot_stack_handle_t set_dsh_extra_bits(depot_stack_handle_t handle, > + u32 bits) > +{ > + union handle_parts parts = { .handle = handle }; > + > + parts.extra = bits & ((1U << STACK_DEPOT_EXTRA_BITS) - 1); > + return parts.handle; > +} > +EXPORT_SYMBOL_GPL(set_dsh_extra_bits); > + > +u32 get_dsh_extra_bits(depot_stack_handle_t handle) > +{ > + union handle_parts parts = { .handle = handle }; > + > + return parts.extra; > +} > +EXPORT_SYMBOL_GPL(get_dsh_extra_bits); > + > static bool init_stack_slab(void **prealloc) > { > if (!*prealloc) > @@ -136,6 +157,7 @@ static struct stack_record *depot_alloc_stack(unsigned long *entries, int size, > stack->handle.slabindex = depot_index; > stack->handle.offset = depot_offset >> STACK_ALLOC_ALIGN; > stack->handle.valid = 1; > + stack->handle.extra = 0; > memcpy(stack->entries, entries, size * sizeof(unsigned long)); > depot_offset += required_size; > > -- > 2.25.1.696.g5e7596f4ac-goog >