nfp: lock area cache earlier

We shouldn't access area_cache_list without its lock even
to check if it's empty.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jakub Kicinski 2017-03-21 17:59:12 -07:00 committed by David S. Miller
parent 61e81abdce
commit a831ffb560
1 changed files with 8 additions and 6 deletions

View File

@ -821,10 +821,7 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,
* the need for special case code below when
* checking against available cache size.
*/
if (length == 0)
return NULL;
if (list_empty(&cpp->area_cache_list) || id == 0)
if (length == 0 || id == 0)
return NULL;
/* Remap from cpp_island to cpp_target */
@ -832,10 +829,15 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,
if (err < 0)
return NULL;
addr += *offset;
mutex_lock(&cpp->area_cache_mutex);
if (list_empty(&cpp->area_cache_list)) {
mutex_unlock(&cpp->area_cache_mutex);
return NULL;
}
addr += *offset;
/* See if we have a match */
list_for_each_entry(cache, &cpp->area_cache_list, entry) {
if (id == cache->id &&