On 1/19/21 10:37 PM, Chuck Lever wrote:
On Jan 18, 2021, at 8:22 PM, Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx> wrote:
Do you mind posting the cap and ecap of the iommu used by your device?
You can get it via sysfs, for example:
/sys/bus/pci/devices/0000:00:14.0/iommu/intel-iommu# ls
address cap domains_supported domains_used ecap version
[root@manet intel-iommu]# lspci | grep Mellanox
03:00.0 Network controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
[root@manet intel-iommu]# pwd
/sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/iommu/intel-iommu
[root@manet intel-iommu]# for i in *; do echo -n $i ": "; cat $i; done
address : c7ffc000
cap : d2078c106f0466
MGAW: 101111 (supporting 48-bit address width)
SAGAW: 00100 (supporting 48-bit 4-level page table)
So the calculation of domain->domain.geometry.aperture_end is right.
domains_supported : 65536
domains_used : 62
ecap : f020de
version : 1:0
[root@manet intel-iommu]#
Fwiw, this system uses the Intel C612 chipset with Intel(R) Xeon(R)
E5-2603 v3 @ 1.60GHz CPUs.
Can you please also hack a line of code to check the return value of
iommu_dma_map_sg()?
diff --git a/net/sunrpc/xprtrdma/frwr_ops.c b/net/sunrpc/xprtrdma/frwr_ops.c
index baca49fe83af..e811562ead0e 100644
--- a/net/sunrpc/xprtrdma/frwr_ops.c
+++ b/net/sunrpc/xprtrdma/frwr_ops.c
@@ -328,6 +328,7 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
dma_nents = ib_dma_map_sg(ep->re_id->device, mr->mr_sg, mr->mr_nents,
mr->mr_dir);
+ trace_printk("ib_dma_map_sg(%d) returns %d\n", mr->mr_nents, dma_nents);
if (!dma_nents)
goto out_dmamap_err;
mr->mr_device = ep->re_id->device;
During the 256KB iozone test I used before, this trace log is generated:
kworker/u28:3-1269 [000] 336.054743: bprint: frwr_map: ib_dma_map_sg(30) returns 1
kworker/u28:3-1269 [000] 336.054835: bprint: frwr_map: ib_dma_map_sg(30) returns 1
kworker/u28:3-1269 [000] 336.055022: bprint: frwr_map: ib_dma_map_sg(4) returns 1
kworker/u28:3-1269 [000] 336.055118: bprint: frwr_map: ib_dma_map_sg(30) returns 1
kworker/u28:3-1269 [000] 336.055312: bprint: frwr_map: ib_dma_map_sg(30) returns 1
kworker/u28:3-1269 [000] 336.055407: bprint: frwr_map: ib_dma_map_sg(4) returns 1
This is the result after commit c062db039f40, right? It also looks good
to me. Are you using iotlb strict mode (intel_iommu=strict) or lazy mode
(by default)?
Best regards,
baolu