lkml.org 
[lkml]   [2020]   [Nov]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 01/28] refscale: Bounds-check module parameters
    Date
    From: "Paul E. McKenney" <paulmck@kernel.org>

    The default value for refscale.nreaders is -1, which results in the code
    setting the value to three-quarters of the number of CPUs. On single-CPU
    systems, this results in three-quarters of the value one, which the C
    language's integer arithmetic rounds to zero. This in turn results in
    a divide-by-zero error.

    This commit therefore adds bounds checking to the refscale module
    parameters, so that if they are less than one, they are set to the
    value one.

    Reported-by: kernel test robot <lkp@intel.com>
    Tested-by "Chen, Rong A" <rong.a.chen@intel.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    ---
    kernel/rcu/refscale.c | 6 ++++++
    1 file changed, 6 insertions(+)

    diff --git a/kernel/rcu/refscale.c b/kernel/rcu/refscale.c
    index 952595c..fb5f20d 100644
    --- a/kernel/rcu/refscale.c
    +++ b/kernel/rcu/refscale.c
    @@ -681,6 +681,12 @@ ref_scale_init(void)
    // Reader tasks (default to ~75% of online CPUs).
    if (nreaders < 0)
    nreaders = (num_online_cpus() >> 1) + (num_online_cpus() >> 2);
    + if (WARN_ONCE(loops <= 0, "%s: loops = %ld, adjusted to 1\n", __func__, loops))
    + loops = 1;
    + if (WARN_ONCE(nreaders <= 0, "%s: nreaders = %d, adjusted to 1\n", __func__, nreaders))
    + nreaders = 1;
    + if (WARN_ONCE(nruns <= 0, "%s: nruns = %d, adjusted to 1\n", __func__, nruns))
    + nruns = 1;
    reader_tasks = kcalloc(nreaders, sizeof(reader_tasks[0]),
    GFP_KERNEL);
    if (!reader_tasks) {
    --
    2.9.5
    \
     
     \ /
      Last update: 2020-11-06 00:48    [W:4.070 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site