Skip to content

Commit

Permalink
cxgb4: smt: Use normal int for refcount
Browse files Browse the repository at this point in the history
All refcount operations are protected by spinlocks now.
Then the atomic counter can be replaced by a normal int.

This patch depends on PATCH 1/2.

Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Chuhong Yuan authored and David S. Miller committed Aug 9, 2019
1 parent 4a8937b commit ad2dcba
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
14 changes: 7 additions & 7 deletions drivers/net/ethernet/chelsio/cxgb4/smt.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ struct smt_data *t4_init_smt(void)
s->smtab[i].state = SMT_STATE_UNUSED;
memset(&s->smtab[i].src_mac, 0, ETH_ALEN);
spin_lock_init(&s->smtab[i].lock);
atomic_set(&s->smtab[i].refcnt, 0);
s->smtab[i].refcnt = 0;
}
return s;
}
Expand All @@ -68,7 +68,7 @@ static struct smt_entry *find_or_alloc_smte(struct smt_data *s, u8 *smac)
struct smt_entry *e, *end;

for (e = &s->smtab[0], end = &s->smtab[s->smt_size]; e != end; ++e) {
if (atomic_read(&e->refcnt) == 0) {
if (e->refcnt == 0) {
if (!first_free)
first_free = e;
} else {
Expand Down Expand Up @@ -97,7 +97,7 @@ static struct smt_entry *find_or_alloc_smte(struct smt_data *s, u8 *smac)

static void t4_smte_free(struct smt_entry *e)
{
if (atomic_read(&e->refcnt) == 0) { /* hasn't been recycled */
if (e->refcnt == 0) { /* hasn't been recycled */
e->state = SMT_STATE_UNUSED;
}
}
Expand All @@ -110,7 +110,7 @@ static void t4_smte_free(struct smt_entry *e)
void cxgb4_smt_release(struct smt_entry *e)
{
spin_lock_bh(&e->lock);
if (atomic_dec_and_test(&e->refcnt))
if ((--e->refcnt) == 0)
t4_smte_free(e);
spin_unlock_bh(&e->lock);
}
Expand Down Expand Up @@ -215,14 +215,14 @@ static struct smt_entry *t4_smt_alloc_switching(struct adapter *adap, u16 pfvf,
e = find_or_alloc_smte(s, smac);
if (e) {
spin_lock(&e->lock);
if (!atomic_read(&e->refcnt)) {
atomic_set(&e->refcnt, 1);
if (!e->refcnt) {
e->refcnt = 1;
e->state = SMT_STATE_SWITCHING;
e->pfvf = pfvf;
memcpy(e->src_mac, smac, ETH_ALEN);
write_smt_entry(adap, e);
} else {
atomic_inc(&e->refcnt);
++e->refcnt;
}
spin_unlock(&e->lock);
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ethernet/chelsio/cxgb4/smt.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ struct smt_entry {
u16 idx;
u16 pfvf;
u8 src_mac[ETH_ALEN];
atomic_t refcnt;
int refcnt;
spinlock_t lock; /* protect smt entry add,removal */
};

Expand Down

0 comments on commit ad2dcba

Please sign in to comment.