On 04/23/14 14:30, Hal Rosenstock wrote:
> On 4/22/2014 2:41 PM, Hefty, Sean wrote:
>>> +static u8 cma_get_ib_subnet_timeout(struct rdma_cm_id *id)
>>> +{
>>> + struct ib_port_attr attr;
>>> + int ret;
>>> +
>>> + ret = ib_query_port(id->device, id->port_num, &attr);
>>> + return ret == 0 ? attr.subnet_timeout : 18;
>>> +}
>>
>> Can we query the port once (or only on a change) and cache the result,
>> rather than querying it for every request?
>
> To be IBA spec compliant, SubnetTimeout could change so some new local
> event would need to be added and handled to avoid the requerying.
>
> In practice, however, that's not very likely AFAIK.
Thanks Sean and Hal for the feedback.
Regarding SubnetTimeout changes: the code in
drivers/infiniband/core/cache.c already queues a work request after each
port state change. Inside that work request e.g. the P_Key cache is
updated. Would it be acceptable to modify ib_cache_update() such that it
also queries the port attributes and caches these ? Cached port
attributes could e.g. be stored in struct ib_port. However, doing so
would probably require to protect the port_list member in struct
ib_device against concurrent modifications of that list by the sysfs code.
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html