From: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
To: Yury Norov <yury.norov@gmail.com>,
linux-kernel@vger.kernel.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
linuxppc-dev@lists.ozlabs.org,
Michael Ellerman <mpe@ellerman.id.au>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Yury Norov <yury.norov@gmail.com>
Subject: Re: [RESEND PATCH 2/2] lib/nodemask: inline next_node_in() and node_random()
Date: Fri, 12 Aug 2022 10:46:57 +0530 [thread overview]
Message-ID: <87o7wqkpme.fsf@linux.ibm.com> (raw)
In-Reply-To: <20220723214537.2054208-3-yury.norov@gmail.com>
Yury Norov <yury.norov@gmail.com> writes:
> The functions are pretty thin wrappers around find_bit engine, and
> keeping them in c-file prevents compiler from small_const_nbits()
> optimization, which must take place for all systems with MAX_NUMNODES
> less than BITS_PER_LONG (default is 16 for me).
>
> Moving them to header file doesn't blow up the kernel size:
> add/remove: 1/2 grow/shrink: 9/5 up/down: 968/-88 (880)
>
> CC: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> CC: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> Signed-off-by: Yury Norov <yury.norov@gmail.com>
> ---
> MAINTAINERS | 1 -
> include/linux/nodemask.h | 27 ++++++++++++++++++++++-----
> lib/Makefile | 2 +-
> lib/nodemask.c | 30 ------------------------------
> 4 files changed, 23 insertions(+), 37 deletions(-)
> delete mode 100644 lib/nodemask.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 7c0b8f28aa25..19c8d0ef1177 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3540,7 +3540,6 @@ F: lib/bitmap.c
> F: lib/cpumask.c
> F: lib/find_bit.c
> F: lib/find_bit_benchmark.c
> -F: lib/nodemask.c
> F: lib/test_bitmap.c
> F: tools/include/linux/bitmap.h
> F: tools/include/linux/find.h
> diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
> index 0f233b76c9ce..48ebe4007955 100644
> --- a/include/linux/nodemask.h
> +++ b/include/linux/nodemask.h
> @@ -94,6 +94,7 @@
> #include <linux/bitmap.h>
> #include <linux/minmax.h>
> #include <linux/numa.h>
> +#include <linux/random.h>
>
> typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t;
> extern nodemask_t _unused_nodemask_arg_;
> @@ -276,7 +277,14 @@ static inline unsigned int __next_node(int n, const nodemask_t *srcp)
> * the first node in src if needed. Returns MAX_NUMNODES if src is empty.
> */
> #define next_node_in(n, src) __next_node_in((n), &(src))
> -unsigned int __next_node_in(int node, const nodemask_t *srcp);
> +static inline unsigned int __next_node_in(int node, const nodemask_t *srcp)
> +{
> + unsigned int ret = __next_node(node, srcp);
> +
> + if (ret == MAX_NUMNODES)
> + ret = __first_node(srcp);
> + return ret;
> +}
>
> static inline void init_nodemask_of_node(nodemask_t *mask, int node)
> {
> @@ -493,14 +501,23 @@ static inline int num_node_state(enum node_states state)
>
> #endif
>
> +/*
> + * Return the bit number of a random bit set in the nodemask.
> + * (returns NUMA_NO_NODE if nodemask is empty)
> + */
> +static inline int node_random(const nodemask_t *maskp)
> +{
> #if defined(CONFIG_NUMA) && (MAX_NUMNODES > 1)
> -extern int node_random(const nodemask_t *maskp);
> + int w, bit = NUMA_NO_NODE;
> +
> + w = nodes_weight(*maskp);
> + if (w)
> + bit = find_nth_bit(maskp->bits, MAX_NUMNODES, get_random_int() % w);
> + return bit;
> #else
> -static inline int node_random(const nodemask_t *mask)
> -{
> return 0;
> -}
> #endif
> +}
>
> #define node_online_map node_states[N_ONLINE]
> #define node_possible_map node_states[N_POSSIBLE]
> diff --git a/lib/Makefile b/lib/Makefile
> index f99bf61f8bbc..731cea0342d1 100644
> --- a/lib/Makefile
> +++ b/lib/Makefile
> @@ -33,7 +33,7 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \
> flex_proportions.o ratelimit.o show_mem.o \
> is_single_threaded.o plist.o decompress.o kobject_uevent.o \
> earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
> - nmi_backtrace.o nodemask.o win_minmax.o memcat_p.o \
> + nmi_backtrace.o win_minmax.o memcat_p.o \
> buildid.o
>
> lib-$(CONFIG_PRINTK) += dump_stack.o
> diff --git a/lib/nodemask.c b/lib/nodemask.c
> deleted file mode 100644
> index 7dad4ce8ff59..000000000000
> --- a/lib/nodemask.c
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/nodemask.h>
> -#include <linux/module.h>
> -#include <linux/random.h>
> -
> -unsigned int __next_node_in(int node, const nodemask_t *srcp)
> -{
> - unsigned int ret = __next_node(node, srcp);
> -
> - if (ret == MAX_NUMNODES)
> - ret = __first_node(srcp);
> - return ret;
> -}
> -EXPORT_SYMBOL(__next_node_in);
> -
> -#ifdef CONFIG_NUMA
> -/*
> - * Return the bit number of a random bit set in the nodemask.
> - * (returns NUMA_NO_NODE if nodemask is empty)
> - */
> -int node_random(const nodemask_t *maskp)
> -{
> - int w, bit = NUMA_NO_NODE;
> -
> - w = nodes_weight(*maskp);
> - if (w)
> - bit = find_nth_bit(maskp->bits, MAX_NUMNODES, get_random_int() % w);
> - return bit;
> -}
> -#endif
> --
> 2.34.1
The patch that got merged (36d4b36b69590fed99356a4426c940a253a93800) still have lib/nodemask.c
next prev parent reply other threads:[~2022-08-12 5:18 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-23 21:45 [PATCH 0/2] lib/nodemask: inline wrappers around bitmap Yury Norov
2022-07-23 21:45 ` [PATCH 1/2] powerpc: drop dependency on <asm/machdep.h> in archrandom.h Yury Norov
2022-07-25 7:28 ` Andy Shevchenko
2022-07-25 7:28 ` Andy Shevchenko
2022-07-25 16:17 ` Yury Norov
2022-07-25 16:17 ` Yury Norov
2022-07-25 21:39 ` Andy Shevchenko
2022-07-25 21:39 ` Andy Shevchenko
2022-07-25 23:32 ` Yury Norov
2022-07-25 23:32 ` Yury Norov
2022-07-26 6:13 ` Andy Shevchenko
2022-07-26 6:13 ` Andy Shevchenko
2022-07-26 6:15 ` Andy Shevchenko
2022-07-26 6:15 ` Andy Shevchenko
2022-07-26 6:57 ` Michael Ellerman
2022-07-26 6:57 ` Michael Ellerman
2022-07-26 15:19 ` Yury Norov
2022-07-26 15:19 ` Yury Norov
2022-07-25 8:34 ` Michael Ellerman
2022-07-25 12:22 ` Michael Ellerman
2022-07-25 16:28 ` Yury Norov
2022-07-25 16:28 ` Yury Norov
2022-07-26 2:46 ` Michael Ellerman
2022-07-26 2:46 ` Michael Ellerman
2022-07-25 12:22 ` Michael Ellerman
2022-07-23 21:45 ` [RESEND PATCH 2/2] lib/nodemask: inline next_node_in() and node_random() Yury Norov
2022-08-12 5:16 ` Aneesh Kumar K.V [this message]
2022-08-12 5:40 ` Yury Norov
2022-08-12 5:40 ` Yury Norov
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=87o7wqkpme.fsf@linux.ibm.com \
--to=aneesh.kumar@linux.ibm.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.org \
--cc=sfr@canb.auug.org.au \
--cc=yury.norov@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.