lkml.org 
[lkml]   [2006]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 17 of 39] IB/ipath - use more appropriate gfp flags
    Date
    From
    This helps us to survive better when memory is fragmented.

    Signed-off-by: Dave Olson <dave.olson@qlogic.com>
    Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com>

    diff -r fd5e733f02ac -r 9d943b828776 drivers/infiniband/hw/ipath/ipath_file_ops.c
    --- a/drivers/infiniband/hw/ipath/ipath_file_ops.c Thu Jun 29 14:33:25 2006 -0700
    +++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c Thu Jun 29 14:33:25 2006 -0700
    @@ -705,6 +705,15 @@ static int ipath_create_user_egr(struct
    unsigned e, egrcnt, alloced, egrperchunk, chunk, egrsize, egroff;
    size_t size;
    int ret;
    + gfp_t gfp_flags;
    +
    + /*
    + * GFP_USER, but without GFP_FS, so buffer cache can be
    + * coalesced (we hope); otherwise, even at order 4,
    + * heavy filesystem activity makes these fail, and we can
    + * use compound pages.
    + */
    + gfp_flags = __GFP_WAIT | __GFP_IO | __GFP_COMP;

    egrcnt = dd->ipath_rcvegrcnt;
    /* TID number offset for this port */
    @@ -721,10 +730,8 @@ static int ipath_create_user_egr(struct
    * memory pressure (creating large files and then copying them over
    * NFS while doing lots of MPI jobs), we hit some allocation
    * failures, even though we can sleep... (2.6.10) Still get
    - * failures at 64K. 32K is the lowest we can go without waiting
    - * more memory again. It seems likely that the coalescing in
    - * free_pages, etc. still has issues (as it has had previously
    - * during 2.6.x development).
    + * failures at 64K. 32K is the lowest we can go without wasting
    + * additional memory.
    */
    size = 0x8000;
    alloced = ALIGN(egrsize * egrcnt, size);
    @@ -745,12 +752,6 @@ static int ipath_create_user_egr(struct
    goto bail_rcvegrbuf;
    }
    for (e = 0; e < pd->port_rcvegrbuf_chunks; e++) {
    - /*
    - * GFP_USER, but without GFP_FS, so buffer cache can be
    - * coalesced (we hope); otherwise, even at order 4,
    - * heavy filesystem activity makes these fail
    - */
    - gfp_t gfp_flags = __GFP_WAIT | __GFP_IO | __GFP_COMP;

    pd->port_rcvegrbuf[e] = dma_alloc_coherent(
    &dd->pcidev->dev, size, &pd->port_rcvegrbuf_phys[e],
    @@ -1167,9 +1168,10 @@ static int ipath_mmap(struct file *fp, s

    ureg = dd->ipath_uregbase + dd->ipath_palign * pd->port_port;

    - ipath_cdbg(MM, "ushare: pgaddr %llx vm_start=%lx, vmlen %lx\n",
    + ipath_cdbg(MM, "pgaddr %llx vm_start=%lx len %lx port %u:%u\n",
    (unsigned long long) pgaddr, vma->vm_start,
    - vma->vm_end - vma->vm_start);
    + vma->vm_end - vma->vm_start, dd->ipath_unit,
    + pd->port_port);

    if (pgaddr == ureg)
    ret = mmap_ureg(vma, dd, ureg);
    -
    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: 2006-06-29 23:50    [W:0.023 / U:62.276 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site