aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBryan O'Sullivan <bos@pathscale.com>2006-07-01 07:36:01 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-07-01 12:56:00 -0400
commit0ed9a4a0b6df0548f9ccadb62add2c0155d5262c (patch)
tree8652f891b78b8c7048ff6d75d272fdab6a2ddaee /drivers
parenta40f55fc333cc20d85af92887334f41f7844e0c2 (diff)
[PATCH] IB/ipath: use more appropriate gfp flags
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> Cc: "Michael S. Tsirkin" <mst@mellanox.co.il> Cc: Roland Dreier <rolandd@cisco.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/hw/ipath/ipath_file_ops.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c
index cd2d5cd05e88..03689dbe1a9e 100644
--- a/drivers/infiniband/hw/ipath/ipath_file_ops.c
+++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c
@@ -705,6 +705,15 @@ static int ipath_create_user_egr(struct ipath_portdata *pd)
705 unsigned e, egrcnt, alloced, egrperchunk, chunk, egrsize, egroff; 705 unsigned e, egrcnt, alloced, egrperchunk, chunk, egrsize, egroff;
706 size_t size; 706 size_t size;
707 int ret; 707 int ret;
708 gfp_t gfp_flags;
709
710 /*
711 * GFP_USER, but without GFP_FS, so buffer cache can be
712 * coalesced (we hope); otherwise, even at order 4,
713 * heavy filesystem activity makes these fail, and we can
714 * use compound pages.
715 */
716 gfp_flags = __GFP_WAIT | __GFP_IO | __GFP_COMP;
708 717
709 egrcnt = dd->ipath_rcvegrcnt; 718 egrcnt = dd->ipath_rcvegrcnt;
710 /* TID number offset for this port */ 719 /* TID number offset for this port */
@@ -721,10 +730,8 @@ static int ipath_create_user_egr(struct ipath_portdata *pd)
721 * memory pressure (creating large files and then copying them over 730 * memory pressure (creating large files and then copying them over
722 * NFS while doing lots of MPI jobs), we hit some allocation 731 * NFS while doing lots of MPI jobs), we hit some allocation
723 * failures, even though we can sleep... (2.6.10) Still get 732 * failures, even though we can sleep... (2.6.10) Still get
724 * failures at 64K. 32K is the lowest we can go without waiting 733 * failures at 64K. 32K is the lowest we can go without wasting
725 * more memory again. It seems likely that the coalescing in 734 * additional memory.
726 * free_pages, etc. still has issues (as it has had previously
727 * during 2.6.x development).
728 */ 735 */
729 size = 0x8000; 736 size = 0x8000;
730 alloced = ALIGN(egrsize * egrcnt, size); 737 alloced = ALIGN(egrsize * egrcnt, size);
@@ -745,12 +752,6 @@ static int ipath_create_user_egr(struct ipath_portdata *pd)
745 goto bail_rcvegrbuf; 752 goto bail_rcvegrbuf;
746 } 753 }
747 for (e = 0; e < pd->port_rcvegrbuf_chunks; e++) { 754 for (e = 0; e < pd->port_rcvegrbuf_chunks; e++) {
748 /*
749 * GFP_USER, but without GFP_FS, so buffer cache can be
750 * coalesced (we hope); otherwise, even at order 4,
751 * heavy filesystem activity makes these fail
752 */
753 gfp_t gfp_flags = __GFP_WAIT | __GFP_IO | __GFP_COMP;
754 755
755 pd->port_rcvegrbuf[e] = dma_alloc_coherent( 756 pd->port_rcvegrbuf[e] = dma_alloc_coherent(
756 &dd->pcidev->dev, size, &pd->port_rcvegrbuf_phys[e], 757 &dd->pcidev->dev, size, &pd->port_rcvegrbuf_phys[e],
@@ -1167,9 +1168,10 @@ static int ipath_mmap(struct file *fp, struct vm_area_struct *vma)
1167 1168
1168 ureg = dd->ipath_uregbase + dd->ipath_palign * pd->port_port; 1169 ureg = dd->ipath_uregbase + dd->ipath_palign * pd->port_port;
1169 1170
1170 ipath_cdbg(MM, "ushare: pgaddr %llx vm_start=%lx, vmlen %lx\n", 1171 ipath_cdbg(MM, "pgaddr %llx vm_start=%lx len %lx port %u:%u\n",
1171 (unsigned long long) pgaddr, vma->vm_start, 1172 (unsigned long long) pgaddr, vma->vm_start,
1172 vma->vm_end - vma->vm_start); 1173 vma->vm_end - vma->vm_start, dd->ipath_unit,
1174 pd->port_port);
1173 1175
1174 if (pgaddr == ureg) 1176 if (pgaddr == ureg)
1175 ret = mmap_ureg(vma, dd, ureg); 1177 ret = mmap_ureg(vma, dd, ureg);