Messages in this thread | ![/](/images/icornerl.gif) | | Subject | Re: [PATCH v4 for-next 3/3] IB/core: Obtain subnet_prefix from cache in IB devices | From | Anand Khoje <> | Date | Wed, 16 Jun 2021 13:13:51 +0530 |
| |
On 6/16/2021 1:00 PM, Leon Romanovsky wrote: > On Wed, Jun 16, 2021 at 12:22:13PM +0530, Anand Khoje wrote: >> ib_query_port() calls device->ops.query_port() to get the port >> attributes. The method of querying is device driver specific. >> The same function calls device->ops.query_gid() to get the GID and >> extract the subnet_prefix (gid_prefix). >> >> The GID and subnet_prefix are stored in a cache. But they do not get >> read from the cache if the device is an Infiniband device. The >> following change takes advantage of the cached subnet_prefix. >> Testing with RDBMS has shown a significant improvement in performance >> with this change. >> >> The function ib_cache_is_initialised() is introduced because >> ib_query_port() gets called early in the stage when the cache is not >> built while reading port immutable property. >> >> In that case, the default GID still gets read from HCA for IB link- >> layer devices. >> >> In the situation of an event causing cache update, the subnet_prefix >> will get retrieved from newly updated GID cache in ib_cache_update(), >> so that we do not end up reading a stale value from cache via >> ib_query_port(). >> >> Fixes: fad61ad ("IB/core: Add subnet prefix to port info") >> Suggested-by: Leon Romanovsky <leonro@nvidia.com> >> Suggested-by: Aru Kolappan <aru.kolappan@oracle.com> >> Signed-off-by: Anand Khoje <anand.a.khoje@oracle.com> >> Signed-off-by: Haakon Bugge <haakon.bugge@oracle.com> >> --- > > <...> > >> @@ -1523,13 +1526,21 @@ static int config_non_roce_gid_cache(struct ib_device *device, >> device->port_data[port].cache.lmc = tprops->lmc; >> device->port_data[port].cache.port_state = tprops->state; >> >> - device->port_data[port].cache.subnet_prefix = tprops->subnet_prefix; >> + ret = rdma_query_gid(device, port, 0, &gid); >> + if (ret) { >> + write_unlock_irq(&device->cache.lock); > > And this patch can't compile. It should be cache_lock and not cache.lock. > > Thanks > Unfortunate typo from my end. Thanks for pointing this out. I will share the updated patch.
| ![\](/images/icornerr.gif) |