forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/chelsio/cxgb4/smt.c
....@@ -47,8 +47,7 @@
4747
4848 smt_size = SMT_SIZE;
4949
50
- s = kvzalloc(sizeof(*s) + smt_size * sizeof(struct smt_entry),
51
- GFP_KERNEL);
50
+ s = kvzalloc(struct_size(s, smtab, smt_size), GFP_KERNEL);
5251 if (!s)
5352 return NULL;
5453 s->smt_size = smt_size;
....@@ -56,9 +55,9 @@
5655 for (i = 0; i < s->smt_size; ++i) {
5756 s->smtab[i].idx = i;
5857 s->smtab[i].state = SMT_STATE_UNUSED;
59
- memset(&s->smtab[i].src_mac, 0, ETH_ALEN);
58
+ eth_zero_addr(s->smtab[i].src_mac);
6059 spin_lock_init(&s->smtab[i].lock);
61
- atomic_set(&s->smtab[i].refcnt, 0);
60
+ s->smtab[i].refcnt = 0;
6261 }
6362 return s;
6463 }
....@@ -69,7 +68,7 @@
6968 struct smt_entry *e, *end;
7069
7170 for (e = &s->smtab[0], end = &s->smtab[s->smt_size]; e != end; ++e) {
72
- if (atomic_read(&e->refcnt) == 0) {
71
+ if (e->refcnt == 0) {
7372 if (!first_free)
7473 first_free = e;
7574 } else {
....@@ -98,12 +97,13 @@
9897
9998 static void t4_smte_free(struct smt_entry *e)
10099 {
101
- if (atomic_read(&e->refcnt) == 0) { /* hasn't been recycled */
100
+ if (e->refcnt == 0) { /* hasn't been recycled */
102101 e->state = SMT_STATE_UNUSED;
103102 }
104103 }
105104
106105 /**
106
+ * cxgb4_smt_release - Release SMT entry
107107 * @e: smt entry to release
108108 *
109109 * Releases ref count and frees up an smt entry from SMT table
....@@ -111,7 +111,7 @@
111111 void cxgb4_smt_release(struct smt_entry *e)
112112 {
113113 spin_lock_bh(&e->lock);
114
- if (atomic_dec_and_test(&e->refcnt))
114
+ if ((--e->refcnt) == 0)
115115 t4_smte_free(e);
116116 spin_unlock_bh(&e->lock);
117117 }
....@@ -216,14 +216,14 @@
216216 e = find_or_alloc_smte(s, smac);
217217 if (e) {
218218 spin_lock(&e->lock);
219
- if (!atomic_read(&e->refcnt)) {
220
- atomic_set(&e->refcnt, 1);
219
+ if (!e->refcnt) {
220
+ e->refcnt = 1;
221221 e->state = SMT_STATE_SWITCHING;
222222 e->pfvf = pfvf;
223223 memcpy(e->src_mac, smac, ETH_ALEN);
224224 write_smt_entry(adap, e);
225225 } else {
226
- atomic_inc(&e->refcnt);
226
+ ++e->refcnt;
227227 }
228228 spin_unlock(&e->lock);
229229 }
....@@ -232,6 +232,7 @@
232232 }
233233
234234 /**
235
+ * cxgb4_smt_alloc_switching - Allocates an SMT entry for switch filters.
235236 * @dev: net_device pointer
236237 * @smac: MAC address to add to SMT
237238 * Returns pointer to the SMT entry created