lkml.org 
[lkml]   [2009]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/31] mm: serialize access to min_free_kbytes
    Date
    From: Peter Zijlstra <a.p.zijlstra@chello.nl> 

    There is a small race between the procfs caller and the memory hotplug caller
    of setup_per_zone_wmarks(). Not a big deal, but the next patch will add yet
    another caller. Time to close the gap.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
    ---
    mm/page_alloc.c | 16 +++++++++++++---
    1 file changed, 13 insertions(+), 3 deletions(-)

    Index: mmotm/mm/page_alloc.c
    ===================================================================
    --- mmotm.orig/mm/page_alloc.c
    +++ mmotm/mm/page_alloc.c
    @@ -121,6 +121,7 @@ static char * const zone_names[MAX_NR_ZO
    "Movable",
    };

    +static DEFINE_SPINLOCK(min_free_lock);
    int min_free_kbytes = 1024;

    unsigned long __meminitdata nr_kernel_pages;
    @@ -4448,13 +4449,13 @@ static void setup_per_zone_lowmem_reserv
    }

    /**
    - * setup_per_zone_wmarks - called when min_free_kbytes changes
    + * __setup_per_zone_wmarks - called when min_free_kbytes changes
    * or when memory is hot-{added|removed}
    *
    * Ensures that the watermark[min,low,high] values for each zone are set
    * correctly with respect to min_free_kbytes.
    */
    -void setup_per_zone_wmarks(void)
    +static void __setup_per_zone_wmarks(void)
    {
    unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
    unsigned long lowmem_pages = 0;
    @@ -4552,6 +4553,15 @@ static void __init setup_per_zone_inacti
    calculate_zone_inactive_ratio(zone);
    }

    +void setup_per_zone_wmarks(void)
    +{
    + unsigned long flags;
    +
    + spin_lock_irqsave(&min_free_lock, flags);
    + __setup_per_zone_wmarks();
    + spin_unlock_irqrestore(&min_free_lock, flags);
    +}
    +
    /*
    * Initialise min_free_kbytes.
    *
    @@ -4587,7 +4597,7 @@ static int __init init_per_zone_wmark_mi
    min_free_kbytes = 128;
    if (min_free_kbytes > 65536)
    min_free_kbytes = 65536;
    - setup_per_zone_wmarks();
    + __setup_per_zone_wmarks();
    setup_per_zone_lowmem_reserve();
    setup_per_zone_inactive_ratio();
    return 0;

    \
     
     \ /
      Last update: 2009-10-01 16:05    [W:0.031 / U:1.156 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site