From: andrey.konovalov@linux.dev
To: Marco Elver <elver@google.com>, Alexander Potapenko <glider@google.com>
Cc: Andrey Konovalov <andreyknvl@gmail.com>,
Vlastimil Babka <vbabka@suse.cz>,
kasan-dev@googlegroups.com, Evgenii Stepanov <eugenis@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Andrey Konovalov <andreyknvl@google.com>
Subject: [PATCH v2 14/18] lib/stackdepot: rename next_pool_inited to next_pool_required
Date: Fri, 10 Feb 2023 22:16:02 +0100 [thread overview]
Message-ID: <484fd2695dff7a9bdc437a32f8a6ee228535aa02.1676063693.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1676063693.git.andreyknvl@google.com>
From: Andrey Konovalov <andreyknvl@google.com>
Stack depot uses next_pool_inited to mark that either the next pool is
initialized or the limit on the number of pools is reached. However,
the flag name only reflects the former part of its purpose, which is
confusing.
Rename next_pool_inited to next_pool_required and invert its value.
Also annotate usages of next_pool_required with comments.
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
lib/stackdepot.c | 30 +++++++++++++++++++++---------
1 file changed, 21 insertions(+), 9 deletions(-)
diff --git a/lib/stackdepot.c b/lib/stackdepot.c
index c4bc198c3d93..4df162a84bfe 100644
--- a/lib/stackdepot.c
+++ b/lib/stackdepot.c
@@ -96,8 +96,14 @@ static int pool_index;
static size_t pool_offset;
/* Lock that protects the variables above. */
static DEFINE_RAW_SPINLOCK(pool_lock);
-/* Whether the next pool is initialized. */
-static int next_pool_inited;
+/*
+ * Stack depot tries to keep an extra pool allocated even before it runs out
+ * of space in the currently used pool.
+ * This flag marks that this next extra pool needs to be allocated and
+ * initialized. It has the value 0 when either the next pool is not yet
+ * initialized or the limit on the number of pools is reached.
+ */
+static int next_pool_required = 1;
static int __init disable_stack_depot(char *str)
{
@@ -222,10 +228,12 @@ EXPORT_SYMBOL_GPL(stack_depot_init);
static void depot_init_pool(void **prealloc)
{
/*
+ * If the next pool is already initialized or the maximum number of
+ * pools is reached, do not use the preallocated memory.
* smp_load_acquire() here pairs with smp_store_release() below and
* in depot_alloc_stack().
*/
- if (smp_load_acquire(&next_pool_inited))
+ if (!smp_load_acquire(&next_pool_required))
return;
/* Check if the current pool is not yet allocated. */
@@ -243,10 +251,13 @@ static void depot_init_pool(void **prealloc)
*prealloc = NULL;
}
/*
+ * At this point, either the next pool is initialized or the
+ * maximum number of pools is reached. In either case, take
+ * note that initializing another pool is not required.
* This smp_store_release pairs with smp_load_acquire() above
* and in stack_depot_save().
*/
- smp_store_release(&next_pool_inited, 1);
+ smp_store_release(&next_pool_required, 0);
}
}
@@ -271,11 +282,13 @@ depot_alloc_stack(unsigned long *entries, int size, u32 hash, void **prealloc)
pool_index++;
pool_offset = 0;
/*
+ * If the maximum number of pools is not reached, take note
+ * that the next pool needs to initialized.
* smp_store_release() here pairs with smp_load_acquire() in
* stack_depot_save() and depot_init_pool().
*/
if (pool_index + 1 < DEPOT_MAX_POOLS)
- smp_store_release(&next_pool_inited, 0);
+ smp_store_release(&next_pool_required, 1);
}
/* Assign the preallocated memory to a pool if required. */
@@ -406,14 +419,13 @@ depot_stack_handle_t __stack_depot_save(unsigned long *entries,
goto exit;
/*
- * Check if the current or the next stack pool need to be initialized.
- * If so, allocate the memory - we won't be able to do that under the
- * lock.
+ * Check if another stack pool needs to be initialized. If so, allocate
+ * the memory now - we won't be able to do that under the lock.
*
* The smp_load_acquire() here pairs with smp_store_release() to
* |next_pool_inited| in depot_alloc_stack() and depot_init_pool().
*/
- if (unlikely(can_alloc && !smp_load_acquire(&next_pool_inited))) {
+ if (unlikely(can_alloc && smp_load_acquire(&next_pool_required))) {
/*
* Zero out zone modifiers, as we don't have specific zone
* requirements. Keep the flags related to allocation in atomic
--
2.25.1
next prev parent reply other threads:[~2023-02-10 21:19 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-10 21:15 [PATCH v2 00/18] lib/stackdepot: fixes and clean-ups andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 01/18] lib/stackdepot: put functions in logical order andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 02/18] lib/stackdepot: use pr_fmt to define message format andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 03/18] lib/stackdepot, mm: rename stack_depot_want_early_init andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 04/18] lib/stackdepot: rename stack_depot_disable andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 05/18] lib/stackdepot: annotate init and early init functions andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 06/18] lib/stackdepot: lower the indentation in stack_depot_init andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 07/18] lib/stackdepot: reorder and annotate global variables andrey.konovalov
2023-02-13 10:33 ` Alexander Potapenko
2023-02-10 21:15 ` [PATCH v2 08/18] lib/stackdepot: rename hash table constants and variables andrey.konovalov
2023-02-13 10:34 ` Alexander Potapenko
2023-02-10 21:15 ` [PATCH v2 09/18] lib/stackdepot: rename slab to pool andrey.konovalov
2023-02-13 10:20 ` Vlastimil Babka
2023-02-13 10:35 ` Alexander Potapenko
2023-02-10 21:15 ` [PATCH v2 10/18] lib/stackdepot: rename handle and pool constants andrey.konovalov
2023-02-10 21:15 ` [PATCH v2 11/18] lib/stackdepot: rename init_stack_pool andrey.konovalov
2023-02-10 21:16 ` [PATCH v2 12/18] lib/stacktrace: drop impossible WARN_ON for depot_init_pool andrey.konovalov
2023-02-13 11:02 ` Alexander Potapenko
2023-02-10 21:16 ` [PATCH v2 13/18] lib/stackdepot: annotate depot_init_pool and depot_alloc_stack andrey.konovalov
2023-02-13 11:03 ` Alexander Potapenko
2023-02-10 21:16 ` andrey.konovalov [this message]
2023-02-13 11:26 ` [PATCH v2 14/18] lib/stackdepot: rename next_pool_inited to next_pool_required Alexander Potapenko
2023-02-10 21:16 ` [PATCH v2 15/18] lib/stacktrace, kasan, kmsan: rework extra_bits interface andrey.konovalov
2023-02-13 11:40 ` Alexander Potapenko
2023-02-10 21:16 ` [PATCH v2 16/18] lib/stackdepot: annotate racy pool_index accesses andrey.konovalov
2023-02-13 11:52 ` Alexander Potapenko
2023-02-10 21:16 ` [PATCH v2 17/18] lib/stackdepot: various comments clean-ups andrey.konovalov
2023-02-13 13:26 ` Alexander Potapenko
2023-02-17 9:46 ` Andrey Konovalov
2023-02-10 21:16 ` [PATCH v2 18/18] lib/stackdepot: move documentation comments to stackdepot.h andrey.konovalov
2023-02-13 13:27 ` Alexander Potapenko
2023-02-17 9:50 ` Andrey Konovalov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=484fd2695dff7a9bdc437a32f8a6ee228535aa02.1676063693.git.andreyknvl@google.com \
--to=andrey.konovalov@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=andreyknvl@google.com \
--cc=elver@google.com \
--cc=eugenis@google.com \
--cc=glider@google.com \
--cc=kasan-dev@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®