On Wed, Jan 09, 2019 at 10:44:56AM +0200, Leon Romanovsky wrote: > On Tue, Jan 08, 2019 at 04:39:21PM -0700, Jason Gunthorpe wrote: > > On Tue, Jan 08, 2019 at 09:55:54PM +0000, Majd Dibbiny wrote: > > > > @@ -537,11 +538,13 @@ static int setup_device(struct ib_device *device) > > > > } > > > > > > > > memset(&device->attrs, 0, sizeof(device->attrs)); > > > > - ret = device->ops.query_device(device, &device->attrs, &uhw); > > > > - if (ret) { > > > > - dev_warn(&device->dev, > > > > - "Couldn't query the device attributes\n"); > > > > - goto port_cleanup; > > > > + if (device->ops.query_device) { > > > > > Why do we need these kind of checks now? In case device doesn’t > > > implement all mandatory kverbs, then clients won’t add it.. uverbs > > > has uverbs_cmd_mask in write path, and checks function pointer in > > > the ioctl path.. Maybe I’m missing something.. > > > > Yah, I agree, the checks should be in the uverbs layer, and presumably > > they are all there already, it just needs careful checking. > > Didn't we plan to remove uverbs_cmd_mask and move to != NULL checks? The uverbs layer now uses the NULL checks exhaustively, I think. Jason