Re: [PATCH RFC v2 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 Sun, Jan 06, 2019 at 11:23:02AM +0200, Gal Pressman wrote:
> Drivers that do not provide kernel verbs support should not be used by
> ib kernel clients and fail.
> In case a device does not implement all mandatory verbs for kverbs usage
> mark it as a non kverbs provider and prevent its usage for all clients
> except for uverbs.
> 
> The device is marked as a non kverbs provider using the
> 'kverbs_provider' flag which should only be set by the core code.
> The clients can choose whether kverbs are requested for it usage using
> the 'no_kverbs_req' flag which is currently set for uverbs only.
> 
> This patch allows drivers to remove mandatory verbs stubs and simply set
> the callback to NULL. The IB device will be registered as a non-kverbs
> provider.
> 
> Signed-off-by: Gal Pressman <galpress@xxxxxxxxxx>
>  drivers/infiniband/core/device.c      | 12 ++++++++----
>  drivers/infiniband/core/uverbs_main.c |  1 +
>  include/rdma/ib_verbs.h               |  5 +++++
>  3 files changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
> index 47ab34ee1a9d..6c1f71007ec4 100644
> +++ b/drivers/infiniband/core/device.c
> @@ -121,13 +121,15 @@ static int ib_device_check_mandatory(struct ib_device *device)
>  	};
>  	int i;
>  
> +	device->kverbs_provider = true;
>  	for (i = 0; i < ARRAY_SIZE(mandatory_table); ++i) {
>  		if (!*(void **) ((void *) &device->ops +
>  				 mandatory_table[i].offset)) {
>  			dev_warn(&device->dev,
> -				 "Device is missing mandatory function %s\n",
> +				 "Device is missing mandatory function %s, disabling kverbs support\n",
>  				 mandatory_table[i].name);

Why not get rid of the message?

> diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
> index a3ceed3a040a..6ac5b7c3dddc 100644
> +++ b/include/rdma/ib_verbs.h
> @@ -2561,6 +2561,8 @@ struct ib_device {
>  	__be64			     node_guid;
>  	u32			     local_dma_lkey;
>  	u16                          is_switch:1;
> +	/* Indicates kernel verbs support, should not be used in drivers */
> +	u8                           kverbs_provider:1;
>  	u8                           node_type;
>  	u8                           phys_port_cnt;
>  	struct ib_device_attr        attrs;
> @@ -2615,6 +2617,9 @@ struct ib_client {
>  			const struct sockaddr *addr,
>  			void *client_data);
>  	struct list_head list;
> +
> +	/* kverbs are not required by the device */

'by the client'

Jason



[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