]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
RDMA/core: Set DMA parameters correctly
authorBart Van Assche <bvanassche@acm.org>
Fri, 25 Oct 2019 22:58:30 +0000 (15:58 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 28 Oct 2019 17:52:04 +0000 (14:52 -0300)
The dma_set_max_seg_size() call in setup_dma_device() does not have any
effect since device->dev.dma_parms is NULL. Fix this by initializing
device->dev.dma_parms first.

Link: https://lore.kernel.org/r/20191025225830.257535-5-bvanassche@acm.org
Fixes: d10bcf947a3e ("RDMA/umem: Combine contiguous PAGE_SIZE regions in SGEs")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/device.c

index eb35b663a7421137c21884b66a15d8fcfb16ecd7..a93c23867fb5f69b9f0bcaed7ac416b6237e90dc 100644 (file)
@@ -1196,9 +1196,21 @@ static void setup_dma_device(struct ib_device *device)
                WARN_ON_ONCE(!parent);
                device->dma_device = parent;
        }
-       /* Setup default max segment size for all IB devices */
-       dma_set_max_seg_size(device->dma_device, SZ_2G);
 
+       if (!device->dev.dma_parms) {
+               if (parent) {
+                       /*
+                        * The caller did not provide DMA parameters, so
+                        * 'parent' probably represents a PCI device. The PCI
+                        * core sets the maximum segment size to 64
+                        * KB. Increase this parameter to 2 GB.
+                        */
+                       device->dev.dma_parms = parent->dma_parms;
+                       dma_set_max_seg_size(device->dma_device, SZ_2G);
+               } else {
+                       WARN_ON_ONCE(true);
+               }
+       }
 }
 
 /*