nfp: flower: fix stats id allocation
[ Upstream commit 39f14c00b13c47186739a4cbc7a16e04d7fdbb60 ] As flower rules are added, they are given a stats ID based on the number of rules that can be supported in firmware. Only after the initial allocation of all available IDs does the driver begin to reuse those that have been released. The initial allocation of IDs was modified to account for multiple memory units on the offloaded device. However, this introduced a bug whereby the counter that controls the IDs could be decremented before the ID was assigned (where it is further decremented). This means that the stats ID could be assigned as -1/0xfffffff which is out of range. Fix this by only decrementing the main counter after the current ID has been assigned. Fixes: 467322e2627f ("nfp: flower: support multiple memory units for filter offloads") Signed-off-by: John Hurley <john.hurley@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
eaf60f6e25
commit
cfa681271c
@ -65,17 +65,17 @@ static int nfp_get_stats_entry(struct nfp_app *app, u32 *stats_context_id)
|
||||
freed_stats_id = priv->stats_ring_size;
|
||||
/* Check for unallocated entries first. */
|
||||
if (priv->stats_ids.init_unalloc > 0) {
|
||||
if (priv->active_mem_unit == priv->total_mem_units) {
|
||||
priv->stats_ids.init_unalloc--;
|
||||
priv->active_mem_unit = 0;
|
||||
}
|
||||
|
||||
*stats_context_id =
|
||||
FIELD_PREP(NFP_FL_STAT_ID_STAT,
|
||||
priv->stats_ids.init_unalloc - 1) |
|
||||
FIELD_PREP(NFP_FL_STAT_ID_MU_NUM,
|
||||
priv->active_mem_unit);
|
||||
priv->active_mem_unit++;
|
||||
|
||||
if (++priv->active_mem_unit == priv->total_mem_units) {
|
||||
priv->stats_ids.init_unalloc--;
|
||||
priv->active_mem_unit = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user