lkml.org 
[lkml]   [2021]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: core/rcu] bitmap_parse: Support 'all' semantics
    The following commit has been merged into the core/rcu branch of tip:

    Commit-ID: b18def121f077857ccf92fc620366e19850bc297
    Gitweb: https://git.kernel.org/tip/b18def121f077857ccf92fc620366e19850bc297
    Author: Yury Norov <yury.norov@gmail.com>
    AuthorDate: Tue, 20 Apr 2021 20:13:25 -07:00
    Committer: Paul E. McKenney <paulmck@kernel.org>
    CommitterDate: Mon, 10 May 2021 15:38:20 -07:00

    bitmap_parse: Support 'all' semantics

    RCU code supports an 'all' group as a special case when parsing rcu_nocbs
    parameter. This patch moves the 'all' support to the core bitmap_parse
    code, so that all bitmap users can enjoy this extension.

    Moving 'all' parsing to a bitmap_parse level also allows users to pass
    patterns together with 'all' in regular group:pattern format, for example,
    "rcu_nocbs=all:1/2" would offload all the even-numbered CPUs regardless
    of the number of CPUs on the system.

    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Yury Norov <yury.norov@gmail.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    ---
    Documentation/admin-guide/kernel-parameters.rst | 5 +++++
    lib/bitmap.c | 9 +++++++++
    lib/test_bitmap.c | 7 +++++++
    3 files changed, 21 insertions(+)

    diff --git a/Documentation/admin-guide/kernel-parameters.rst b/Documentation/admin-guide/kernel-parameters.rst
    index 3996b54..01ba293 100644
    --- a/Documentation/admin-guide/kernel-parameters.rst
    +++ b/Documentation/admin-guide/kernel-parameters.rst
    @@ -76,6 +76,11 @@ to change, such as less cores in the CPU list, then N and any ranges using N
    will also change. Use the same on a small 4 core system, and "16-N" becomes
    "16-3" and now the same boot input will be flagged as invalid (start > end).

    +The special case-tolerant group name "all" has a meaning of selecting all CPUs,
    +so that "nohz_full=all" is the equivalent of "nohz_full=0-N".
    +
    +The semantics of "N" and "all" is supported on a level of bitmaps and holds for
    +all users of bitmap_parse().

    This document may not be entirely up to date and comprehensive. The command
    "modinfo -p ${modulename}" shows a current list of all parameters of a loadable
    diff --git a/lib/bitmap.c b/lib/bitmap.c
    index 74ceb02..6e29b2a 100644
    --- a/lib/bitmap.c
    +++ b/lib/bitmap.c
    @@ -581,6 +581,14 @@ static const char *bitmap_parse_region(const char *str, struct region *r)
    {
    unsigned int lastbit = r->nbits - 1;

    + if (!strncasecmp(str, "all", 3)) {
    + r->start = 0;
    + r->end = lastbit;
    + str += 3;
    +
    + goto check_pattern;
    + }
    +
    str = bitmap_getnum(str, &r->start, lastbit);
    if (IS_ERR(str))
    return str;
    @@ -595,6 +603,7 @@ static const char *bitmap_parse_region(const char *str, struct region *r)
    if (IS_ERR(str))
    return str;

    +check_pattern:
    if (end_of_region(*str))
    goto no_pattern;

    diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c
    index 9cd5755..4ea73f5 100644
    --- a/lib/test_bitmap.c
    +++ b/lib/test_bitmap.c
    @@ -366,6 +366,13 @@ static const struct test_bitmap_parselist parselist_tests[] __initconst = {
    {0, "0-31:1/3,1-31:1/3,2-31:1/3", &exp1[8 * step], 32, 0},
    {0, "1-10:8/12,8-31:24/29,0-31:0/3", &exp1[9 * step], 32, 0},

    + {0, "all", &exp1[8 * step], 32, 0},
    + {0, "0, 1, all, ", &exp1[8 * step], 32, 0},
    + {0, "all:1/2", &exp1[4 * step], 32, 0},
    + {0, "ALL:1/2", &exp1[4 * step], 32, 0},
    + {-EINVAL, "al", NULL, 8, 0},
    + {-EINVAL, "alll", NULL, 8, 0},
    +
    {-EINVAL, "-1", NULL, 8, 0},
    {-EINVAL, "-0", NULL, 8, 0},
    {-EINVAL, "10-1", NULL, 8, 0},
    \
     
     \ /
      Last update: 2021-06-30 15:52    [W:3.142 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site