Re: [PATCH RFC 1/2] RDMA: Add indication for in kernel API support to IB device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 02, 2019 at 03:43:13PM +0200, Gal Pressman wrote:
> On 02-Jan-19 14:39, Leon Romanovsky wrote:
> > On Wed, Jan 02, 2019 at 01:51:29PM +0200, Gal Pressman wrote:
> >> On 02-Jan-19 13:22, Leon Romanovsky wrote:
> >>> On Wed, Jan 02, 2019 at 10:40:50AM +0200, Gal Pressman wrote:
> >>>> On 01-Jan-19 21:17, Leon Romanovsky wrote:
> >>>>> On Tue, Jan 01, 2019 at 11:30:24AM +0200, Gal Pressman wrote:
> >>>>>> Drivers that do not provide kernel verbs support should communicate that
> >>>>>> to the ULPs before they try to use the device and fail.
> >>>>>> This patch allows drivers to indicate whether the device provides
> >>>>>> support for kernel API usage with the 'kverbs_provider' flag and makes
> >>>>>> ib clients not add unsupported devices.
> >>>>>
> >>>>> General comment, if we decide to proceed this path, the implementation
> >>>>> shouldn't touch ULPs and drivers and needs to be implemented in IB/core
> >>>>> only.
> >>>>>
> >>>>> Thanks
> >>>>
> >>>> Hi Leon,
> >>>> How would that work?
> >>>> Each ULP should decide whether it wants to add the device or not, shouldn't that
> >>>> be coded in the ULP?
> >>>
> >>> Something like that,
> >>>
> >>> diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
> >>> index ac011836bb54..b2d307d3c193 100644
> >>> --- a/drivers/infiniband/core/verbs.c
> >>> +++ b/drivers/infiniband/core/verbs.c
> >>> @@ -512,6 +512,13 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
> >>>  	return ah;
> >>>  }
> >>>
> >>> +static bool is_kverbs_supported(struct ib_device *dev)
> >>> +{
> >>> +	if (unlikely(dev->driver_id == RDMA_DRIVER_USNIC))
> >>> +		return false;
> >>> +	return true;
> >>> +}
> >>> +
> >>>  /**
> >>>   * rdma_create_ah - Creates an address handle for the
> >>>   * given address vector.
> >>> @@ -530,6 +537,9 @@ struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
> >>>  	struct ib_ah *ah;
> >>>  	int ret;
> >>>
> >>> +	if (!is_kverbs_supported(pd->device))
> >>> +		return ERR_PTR(-ENOSYS);
> >>> +
> >>>  	ret = rdma_fill_sgid_attr(pd->device, ah_attr, &old_sgid_attr);
> >>>  	if (ret)
> >>>  		return ERR_PTR(ret);
> >>>
> >>
> >> Thanks,
> >> This approach falls back to the "try and fail" way, why should the client even
> >> try to use the device if it's not supported in the first place?
> >> In the ULP's perspective create AH fails, does it really matter if the core
> >> returns the error or the driver?
> >
> > It was an example, put is_kverbs_supported() into ib_register_client()
> > and it will do the trick.
> >
> > Thanks
>
> I can do that, it will require an additional check of
> "if (client != uverbs)", that should be registered regardless of whether kverbs
> are supported or not.
> This feels off to me, but it's possible.

introduce ib_register_client_nocheck() and use it for uverbs.

Anyway, it is better to close main thing raised in cover letter, before rushing
and doing extra version.

Thanks

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux