Subject: Re: [PATCH rdma-next 4/8] IB/core: Skip device which doesn't have necessary capabilities

From: Jason Gunthorpe <[email-masked]>
Date: Tue, 6 Apr 2021 12:46:46 -0300

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