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

Commit 8e61212d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Doug Ledford
Browse files

IB/iser: use IB_PD_UNSAFE_GLOBAL_RKEY

parent ed082d36
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -374,7 +374,6 @@ struct iser_reg_ops {
struct iser_device {
	struct ib_device             *ib_device;
	struct ib_pd	             *pd;
	struct ib_mr	             *mr;
	struct ib_event_handler      event_handler;
	struct list_head             ig_list;
	int                          refcount;
+5 −1
Original line number Diff line number Diff line
@@ -199,7 +199,11 @@ iser_reg_dma(struct iser_device *device, struct iser_data_buf *mem,
	 * FIXME: rework the registration code path to differentiate
	 * rkey/lkey use cases
	 */
	reg->rkey = device->mr ? device->mr->rkey : 0;

	if (device->pd->flags & IB_PD_UNSAFE_GLOBAL_RKEY)
		reg->rkey = device->pd->unsafe_global_rkey;
	else
		reg->rkey = 0;
	reg->sge.addr = ib_sg_dma_address(device->ib_device, &sg[0]);
	reg->sge.length = ib_sg_dma_len(device->ib_device, &sg[0]);

+3 −19
Original line number Diff line number Diff line
@@ -88,7 +88,8 @@ static int iser_create_device_ib_res(struct iser_device *device)
		  device->comps_used, ib_dev->name,
		  ib_dev->num_comp_vectors, max_cqe);

	device->pd = ib_alloc_pd(ib_dev, 0);
	device->pd = ib_alloc_pd(ib_dev,
		iser_always_reg ? 0 : IB_PD_UNSAFE_GLOBAL_RKEY);
	if (IS_ERR(device->pd))
		goto pd_err;

@@ -103,26 +104,13 @@ static int iser_create_device_ib_res(struct iser_device *device)
		}
	}

	if (!iser_always_reg) {
		int access = IB_ACCESS_LOCAL_WRITE |
			     IB_ACCESS_REMOTE_WRITE |
			     IB_ACCESS_REMOTE_READ;

		device->mr = ib_get_dma_mr(device->pd, access);
		if (IS_ERR(device->mr))
			goto cq_err;
	}

	INIT_IB_EVENT_HANDLER(&device->event_handler, ib_dev,
			      iser_event_handler);
	if (ib_register_event_handler(&device->event_handler))
		goto handler_err;
		goto cq_err;

	return 0;

handler_err:
	if (device->mr)
		ib_dereg_mr(device->mr);
cq_err:
	for (i = 0; i < device->comps_used; i++) {
		struct iser_comp *comp = &device->comps[i];
@@ -154,14 +142,10 @@ static void iser_free_device_ib_res(struct iser_device *device)
	}

	(void)ib_unregister_event_handler(&device->event_handler);
	if (device->mr)
		(void)ib_dereg_mr(device->mr);
	ib_dealloc_pd(device->pd);

	kfree(device->comps);
	device->comps = NULL;

	device->mr = NULL;
	device->pd = NULL;
}