lkml.org 
[lkml]   [2007]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 13/14] get_unmapped_area handles MAP_FIXED in generic code
    and change the caller now that everybody can handle it.

    Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    ---
    mm/mmap.c | 25 +++++++++++++++----------
    1 file changed, 15 insertions(+), 10 deletions(-)
    Index: linux-cell/mm/mmap.c
    ===================================================================
    --- linux-cell.orig/mm/mmap.c 2007-03-22 16:29:22.000000000 +1100
    +++ linux-cell/mm/mmap.c 2007-03-22 16:30:06.000000000 +1100
    @@ -1199,6 +1199,9 @@ arch_get_unmapped_area(struct file *filp
    if (len > TASK_SIZE)
    return -ENOMEM;

    + if (flags & MAP_FIXED)
    + return addr;
    +
    if (addr) {
    addr = PAGE_ALIGN(addr);
    vma = find_vma(mm, addr);
    @@ -1272,6 +1275,9 @@ arch_get_unmapped_area_topdown(struct fi
    if (len > TASK_SIZE)
    return -ENOMEM;

    + if (flags & MAP_FIXED)
    + return addr;
    +
    /* requesting a specific address */
    if (addr) {
    addr = PAGE_ALIGN(addr);
    @@ -1360,22 +1366,21 @@ get_unmapped_area(struct file *file, uns
    unsigned long pgoff, unsigned long flags)
    {
    unsigned long ret;
    + unsigned long (*get_area)(struct file *, unsigned long,
    + unsigned long, unsigned long, unsigned long);

    - if (!(flags & MAP_FIXED)) {
    - unsigned long (*get_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
    -
    - get_area = current->mm->get_unmapped_area;
    - if (file && file->f_op && file->f_op->get_unmapped_area)
    - get_area = file->f_op->get_unmapped_area;
    - addr = get_area(file, addr, len, pgoff, flags);
    - if (IS_ERR_VALUE(addr))
    - return addr;
    - }
    + get_area = current->mm->get_unmapped_area;
    + if (file && file->f_op && file->f_op->get_unmapped_area)
    + get_area = file->f_op->get_unmapped_area;
    + addr = get_area(file, addr, len, pgoff, flags);
    + if (IS_ERR_VALUE(addr))
    + return addr;

    if (addr > TASK_SIZE - len)
    return -ENOMEM;
    if (addr & ~PAGE_MASK)
    return -EINVAL;
    +
    if (file && is_file_hugepages(file)) {
    /*
    * Check if the given range is hugepage aligned, and
    -
    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: 2007-04-04 06:07    [W:0.325 / U:0.008 seconds]
    ©2003-2011 Jasper Spaans. Advertise on this site