On Mon, Apr 05, 2021 at 08:49:56AM +0300, Leon Romanovsky wrote: > @@ -2293,6 +2295,17 @@ static void ib_sa_event(struct ib_event_handler *handler, > } > } > > +static bool ib_sa_client_supported(struct ib_device *device) > +{ > + unsigned int i; > + > + rdma_for_each_port(device, i) { > + if (rdma_cap_ib_sa(device, i)) > + return true; > + } > + return false; > +} This is already done though: for (i = 0; i <= e - s; ++i) { spin_lock_init(&sa_dev->port[i].ah_lock); if (!rdma_cap_ib_sa(device, i + 1)) continue; [..] if (!count) { ret = -EOPNOTSUPP; goto free; Why does it need to be duplicated? The other patches are all basically like that too. The add_one function should return -EOPNOTSUPP if it doesn't want to run on this device and any supported checks should just be at the front - this is how things work right now Jason