net/sfc/base: refactor filter lookup loop in EF10

The code is refactored to make it more clear and allow for
more convenient further changes.

Fixes: e7cd430c864f ("net/sfc/base: import SFN7xxx family support")
Cc: stable@dpdk.org

Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
This commit is contained in:
Igor Romanov 2020-03-10 09:48:38 +00:00 committed by Ferruh Yigit
parent fbf423bbf2
commit ad3727f71f

View File

@ -628,28 +628,32 @@ ef10_filter_add_internal(
* else a free slot to insert at. If any of them are busy,
* we have to wait and retry.
*/
for (;;) {
ins_index = -1;
depth = 1;
retry:
EFSYS_LOCK(enp->en_eslp, state);
locked = B_TRUE;
for (;;) {
ins_index = -1;
for (depth = 1; depth <= EF10_FILTER_SEARCH_LIMIT; depth++) {
i = (hash + depth) & (EFX_EF10_FILTER_TBL_ROWS - 1);
saved_spec = ef10_filter_entry_spec(eftp, i);
if (!saved_spec) {
if (ins_index < 0) {
if (saved_spec == NULL) {
if (ins_index < 0)
ins_index = i;
}
} else if (ef10_filter_equal(spec, saved_spec)) {
if (ef10_filter_entry_is_busy(eftp, i))
break;
if (saved_spec->efs_priority
== EFX_FILTER_PRI_AUTO) {
if (ef10_filter_entry_is_busy(eftp, i)) {
EFSYS_UNLOCK(enp->en_eslp, state);
locked = B_FALSE;
goto retry;
}
if (saved_spec->efs_priority == EFX_FILTER_PRI_AUTO) {
ins_index = i;
goto found;
} else if (ef10_filter_is_exclusive(spec)) {
}
if (ef10_filter_is_exclusive(spec)) {
if (may_replace) {
ins_index = i;
goto found;
@ -661,24 +665,16 @@ ef10_filter_add_internal(
/* Leave existing */
}
}
/*
* Once we reach the maximum search depth, use
* the first suitable slot or return EBUSY if
* there was none.
* Once we reach the maximum search depth, use the first suitable slot
* or return EBUSY if there was none.
*/
if (depth == EF10_FILTER_SEARCH_LIMIT) {
if (ins_index < 0) {
rc = EBUSY;
goto fail2;
}
goto found;
}
depth++;
}
EFSYS_UNLOCK(enp->en_eslp, state);
locked = B_FALSE;
}
found:
/*