lkml.org 
[lkml]   [2010]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/4] alloc_contig_pages() allocate big chunk memory using migration
    On Fri, Nov 19, 2010 at 05:15:28PM +0900, KAMEZAWA Hiroyuki wrote:
    > From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    >
    > Add an function to allocate contiguous memory larger than MAX_ORDER.
    > The main difference between usual page allocator is that this uses
    > memory offline technique (Isolate pages and migrate remaining pages.).
    >
    > I think this is not 100% solution because we can't avoid fragmentation,
    > but we have kernelcore= boot option and can create MOVABLE zone. That
    > helps us to allow allocate a contiguous range on demand.
    >
    > The new function is
    >
    > alloc_contig_pages(base, end, nr_pages, alignment)
    >
    > This function will allocate contiguous pages of nr_pages from the range
    > [base, end). If [base, end) is bigger than nr_pages, some pfn which
    > meats alignment will be allocated. If alignment is smaller than MAX_ORDER,
    > it will be raised to be MAX_ORDER.
    >
    > __alloc_contig_pages() has much more arguments.
    >
    >
    > Some drivers allocates contig pages by bootmem or hiding some memory
    > from the kernel at boot. But if contig pages are necessary only in some
    > situation, kernelcore= boot option and using page migration is a choice.
    >
    > Changelog: 2010-11-19
    > - removed no_search
    > - removed some drain_ functions because they are heavy.
    > - check -ENOMEM case
    >
    > Changelog: 2010-10-26
    > - support gfp_t
    > - support zonelist/nodemask
    > - support [base, end)
    > - support alignment
    >
    > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Acked-by: Minchan Kim <minchan.kim@gmail.com>

    Trivial comment below.

    > +EXPORT_SYMBOL_GPL(alloc_contig_pages);
    > +
    > +struct page *alloc_contig_pages_host(unsigned long nr_pages, int align_order)
    > +{
    > + return __alloc_contig_pages(0, max_pfn, nr_pages, align_order, -1,
    > + GFP_KERNEL | __GFP_MOVABLE, NULL);
    > +}

    We need include #include <linux/bootmem.h> for using max_pfn.

    --
    Kind regards,
    Minchan Kim


    \
     
     \ /
      Last update: 2010-11-21 16:29    [W:0.054 / U:0.620 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site