On Mon, Jan 07, 2019 at 10:08:11AM +0200, Gal Pressman wrote: > On 06-Jan-19 23:39, Jason Gunthorpe wrote: > > 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? > > Will do. You need to be nice to users, and I see value in this warning. > > > > >> 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' > > ACK.
Attachment:
signature.asc
Description: PGP signature