lkml.org 
[lkml]   [2005]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[RFC][PATCH 05/12] memory hotplug prep: fixup bad_range()
    From
    Date

    When doing memory hotplug operations, the size of existing zones can
    obviously change. This means that zone->zone_{start_pfn,spanned_pages}
    can change.

    There are currently no locks that protect these structure members.
    However, they are rarely accessed at runtime. Outside of swsusp, the
    only place that I can find is bad_range().

    So, split bad_range() up into two pieces: one that needs to be locked
    and anther that doesn't.

    Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
    ---

    memhotplug-dave/mm/page_alloc.c | 26 +++++++++++++++++++++-----
    1 files changed, 21 insertions(+), 5 deletions(-)

    diff -puN mm/page_alloc.c~C5.1-bad_range-rework mm/page_alloc.c
    --- memhotplug/mm/page_alloc.c~C5.1-bad_range-rework 2005-08-12 07:43:46.000000000 -0700
    +++ memhotplug-dave/mm/page_alloc.c 2005-08-12 07:43:46.000000000 -0700
    @@ -77,21 +77,37 @@ int min_free_kbytes = 1024;
    unsigned long __initdata nr_kernel_pages;
    unsigned long __initdata nr_all_pages;

    -/*
    - * Temporary debugging check for pages not lying within a given zone.
    - */
    -static int bad_range(struct zone *zone, struct page *page)
    +static int page_outside_zone_boundaries(struct zone *zone, struct page *page)
    {
    if (page_to_pfn(page) >= zone->zone_start_pfn + zone->spanned_pages)
    return 1;
    if (page_to_pfn(page) < zone->zone_start_pfn)
    return 1;
    +
    + return 0;
    +}
    +
    +static int page_is_consistent(struct zone *zone, struct page *page)
    +{
    #ifdef CONFIG_HOLES_IN_ZONE
    if (!pfn_valid(page_to_pfn(page)))
    - return 1;
    + return 0;
    #endif
    if (zone != page_zone(page))
    + return 0;
    +
    + return 1;
    +}
    +/*
    + * Temporary debugging check for pages not lying within a given zone.
    + */
    +static int bad_range(struct zone *zone, struct page *page)
    +{
    + if (page_outside_zone_boundaries(zone, page))
    return 1;
    + if (!page_is_consistent(zone, page))
    + return 1;
    +
    return 0;
    }

    _
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-08-12 16:54    [W:0.023 / U:1.344 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site