lkml.org 
[lkml]   [2011]   [Jan]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] ARM: mm: Regarding section when dealing with meminfo
    On Thu, Jan 20, 2011 at 06:45:39PM +0900, KyongHo Cho wrote:
    > Sparsemem allows that a bank of memory spans over several adjacent
    > sections if the start address and the end address of the bank
    > belong to different sections.
    > When gathering statictics of physical memory in mem_init() and
    > show_mem(), this possiblity was not considered.

    Please write down the result if we doesn't consider this patch.
    I can understand what happens but for making good description and review,
    merging easily, it would be better to write down the result without
    the patch explicitly.

    >
    > This patch guarantees that simple increasing the pointer to page
    > descriptors does not exceed the boundary of a section.
    >
    > Signed-off-by: KyongHo Cho <pullip.cho@samsung.com>
    > ---
    > arch/arm/mm/init.c | 74 +++++++++++++++++++++++++++++++++++----------------
    > 1 files changed, 51 insertions(+), 23 deletions(-)
    >
    > diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
    > index 57c4c5c..6ccecbe 100644
    > --- a/arch/arm/mm/init.c
    > +++ b/arch/arm/mm/init.c
    > @@ -93,24 +93,38 @@ void show_mem(void)
    >
    > pfn1 = bank_pfn_start(bank);
    > pfn2 = bank_pfn_end(bank);
    > -
    > +#ifndef CONFIG_SPARSEMEM
    > page = pfn_to_page(pfn1);
    > end = pfn_to_page(pfn2 - 1) + 1;
    > -
    > +#else
    > + pfn2--;
    > do {
    > - total++;
    > - if (PageReserved(page))
    > - reserved++;
    > - else if (PageSwapCache(page))
    > - cached++;
    > - else if (PageSlab(page))
    > - slab++;
    > - else if (!page_count(page))
    > - free++;
    > - else
    > - shared += page_count(page) - 1;
    > - page++;
    > - } while (page < end);
    > + page = pfn_to_page(pfn1);
    > + if (pfn_to_section_nr(pfn1) < pfn_to_section_nr(pfn2)) {
    > + pfn1 += PAGES_PER_SECTION;
    > + pfn1 &= PAGE_SECTION_MASK;
    > + } else {
    > + pfn1 = pfn2;
    > + }
    > + end = pfn_to_page(pfn1) + 1;
    > +#endif
    > + do {
    > + total++;
    > + if (PageReserved(page))
    > + reserved++;
    > + else if (PageSwapCache(page))
    > + cached++;
    > + else if (PageSlab(page))
    > + slab++;
    > + else if (!page_count(page))
    > + free++;
    > + else
    > + shared += page_count(page) - 1;
    > + page++;
    > + } while (page < end);
    > +#ifdef CONFIG_SPARSEMEM
    > + } while (pfn1 < pfn2);
    > +#endif
    > }
    >
    > printk("%d pages of RAM\n", total);
    > @@ -470,17 +484,31 @@ void __init mem_init(void)
    >
    > pfn1 = bank_pfn_start(bank);
    > pfn2 = bank_pfn_end(bank);
    > -
    > +#ifndef CONFIG_SPARSEMEM
    > page = pfn_to_page(pfn1);
    > end = pfn_to_page(pfn2 - 1) + 1;
    > -
    > +#else
    > + pfn2--;
    > do {
    > - if (PageReserved(page))
    > - reserved_pages++;
    > - else if (!page_count(page))
    > - free_pages++;
    > - page++;
    > - } while (page < end);
    > + page = pfn_to_page(pfn1);
    > + if (pfn_to_section_nr(pfn1) < pfn_to_section_nr(pfn2)) {
    > + pfn1 += PAGES_PER_SECTION;
    > + pfn1 &= PAGE_SECTION_MASK;
    > + } else {
    > + pfn1 = pfn2;
    > + }
    > + end = pfn_to_page(pfn1) + 1;
    > +#endif
    > + do {
    > + if (PageReserved(page))
    > + reserved_pages++;
    > + else if (!page_count(page))
    > + free_pages++;
    > + page++;
    > + } while (page < end);
    > +#ifdef CONFIG_SPARSEMEM
    > + } while (pfn1 < pfn2);
    > +#endif
    > }

    Hmm.. new ifndef magic makes code readability bad.
    Couldn't we do it by simple pfn iterator not page and pfn_valid check?

    >
    > /*
    > --
    > 1.6.2.5
    >
    > --
    > To unsubscribe, send a message with 'unsubscribe linux-mm' in
    > the body to majordomo@kvack.org. For more info on Linux MM,
    > see: http://www.linux-mm.org/ .
    > Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/
    > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

    --
    Kind regards,
    Minchan Kim


    \
     
     \ /
      Last update: 2011-01-20 15:31    [W:0.031 / U:32.776 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site