lkml.org 
[lkml]   [2017]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 01/23] percpu: setup_first_chunk enforce dynamic region must exist
    Date
    From: "Dennis Zhou (Facebook)" <dennisszhou@gmail.com>

    The first chunk is handled as a special case as it is composed of the
    static, reserved, and dynamic regions. The code handles each case
    individually. The next several patches will merge these code paths and
    lay the foundation for the bitmap allocator.

    This patch modifies logic to enforce that a dynamic region exists and
    changes the area map to account for that. This brings the logic closer
    to the dynamic chunk's init logic.

    Signed-off-by: Dennis Zhou <dennisszhou@gmail.com>
    ---
    mm/percpu.c | 9 ++++-----
    1 file changed, 4 insertions(+), 5 deletions(-)

    diff --git a/mm/percpu.c b/mm/percpu.c
    index 29244fb..3602d41 100644
    --- a/mm/percpu.c
    +++ b/mm/percpu.c
    @@ -1598,6 +1598,7 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,
    PCPU_SETUP_BUG_ON(offset_in_page(ai->unit_size));
    PCPU_SETUP_BUG_ON(ai->unit_size < PCPU_MIN_UNIT_SIZE);
    PCPU_SETUP_BUG_ON(ai->dyn_size < PERCPU_DYNAMIC_EARLY_SIZE);
    + PCPU_SETUP_BUG_ON(!ai->dyn_size);
    PCPU_SETUP_BUG_ON(pcpu_verify_alloc_info(ai) < 0);

    /* process group information and build config tables accordingly */
    @@ -1700,14 +1701,12 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,
    schunk->free_size = dyn_size;
    dyn_size = 0; /* dynamic area covered */
    }
    - schunk->contig_hint = schunk->free_size;

    + schunk->contig_hint = schunk->free_size;
    schunk->map[0] = 1;
    schunk->map[1] = ai->static_size;
    - schunk->map_used = 1;
    - if (schunk->free_size)
    - schunk->map[++schunk->map_used] = ai->static_size + schunk->free_size;
    - schunk->map[schunk->map_used] |= 1;
    + schunk->map[2] = (ai->static_size + schunk->free_size) | 1;
    + schunk->map_used = 2;
    schunk->has_reserved = true;

    /* init dynamic chunk if necessary */
    --
    2.9.3
    \
     
     \ /
      Last update: 2017-07-25 01:10    [W:4.037 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site