Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9f79bdc authored by Ralph Campbell's avatar Ralph Campbell Committed by Roland Dreier
Browse files

IB/ipath: Fix ib_ipath driver to work with SRP



I am still working on a proposal to remove the phys_to_virt() calls
in the ib_ipath driver.  In the mean time, this patch allows SRP
to work by fixing the R_Key check and conversion from IB address
to kernel virtual address.  It also returns the correct page size
for FMRs.

Signed-off-by: default avatarRalph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 3d37b9e2
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -197,6 +197,21 @@ int ipath_rkey_ok(struct ipath_ibdev *dev, struct ipath_sge_state *ss,
	size_t off;
	int ret;

	/*
	 * We use RKEY == zero for physical addresses
	 * (see ipath_get_dma_mr).
	 */
	if (rkey == 0) {
		sge->mr = NULL;
		sge->vaddr = phys_to_virt(vaddr);
		sge->length = len;
		sge->sge_length = len;
		ss->sg_list = NULL;
		ss->num_sge = 1;
		ret = 1;
		goto bail;
	}

	mr = rkt->table[(rkey >> (32 - ib_ipath_lkey_table_size))];
	if (unlikely(mr == NULL || mr->lkey != rkey)) {
		ret = 0;
+1 −0
Original line number Diff line number Diff line
@@ -627,6 +627,7 @@ static int ipath_query_device(struct ib_device *ibdev,
	props->device_cap_flags = IB_DEVICE_BAD_PKEY_CNTR |
		IB_DEVICE_BAD_QKEY_CNTR | IB_DEVICE_SHUTDOWN_PORT |
		IB_DEVICE_SYS_IMAGE_GUID;
	props->page_size_cap = PAGE_SIZE;
	props->vendor_id = ipath_layer_get_vendorid(dev->dd);
	props->vendor_part_id = ipath_layer_get_deviceid(dev->dd);
	props->hw_ver = ipath_layer_get_pcirev(dev->dd);