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:
parent
fbf423bbf2
commit
ad3727f71f
@ -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:
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user