forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/chelsio/cxgb4/l2t.c
....@@ -59,7 +59,7 @@
5959 rwlock_t lock;
6060 atomic_t nfree; /* number of free entries */
6161 struct l2t_entry *rover; /* starting point for next allocation */
62
- struct l2t_entry l2tab[0]; /* MUST BE LAST */
62
+ struct l2t_entry l2tab[]; /* MUST BE LAST */
6363 };
6464
6565 static inline unsigned int vlan_prio(const struct l2t_entry *e)
....@@ -231,7 +231,7 @@
231231 if (e->state == L2T_STATE_STALE)
232232 e->state = L2T_STATE_VALID;
233233 spin_unlock_bh(&e->lock);
234
- /* fall through */
234
+ fallthrough;
235235 case L2T_STATE_VALID: /* fast-path, send the packet on */
236236 return t4_ofld_send(adap, skb);
237237 case L2T_STATE_RESOLVING:
....@@ -351,15 +351,13 @@
351351 static void _t4_l2e_free(struct l2t_entry *e)
352352 {
353353 struct l2t_data *d;
354
- struct sk_buff *skb;
355354
356355 if (atomic_read(&e->refcnt) == 0) { /* hasn't been recycled */
357356 if (e->neigh) {
358357 neigh_release(e->neigh);
359358 e->neigh = NULL;
360359 }
361
- while ((skb = __skb_dequeue(&e->arpq)) != NULL)
362
- kfree_skb(skb);
360
+ __skb_queue_purge(&e->arpq);
363361 }
364362
365363 d = container_of(e, struct l2t_data, l2tab[e->idx]);
....@@ -370,7 +368,6 @@
370368 static void t4_l2e_free(struct l2t_entry *e)
371369 {
372370 struct l2t_data *d;
373
- struct sk_buff *skb;
374371
375372 spin_lock_bh(&e->lock);
376373 if (atomic_read(&e->refcnt) == 0) { /* hasn't been recycled */
....@@ -378,8 +375,7 @@
378375 neigh_release(e->neigh);
379376 e->neigh = NULL;
380377 }
381
- while ((skb = __skb_dequeue(&e->arpq)) != NULL)
382
- kfree_skb(skb);
378
+ __skb_queue_purge(&e->arpq);
383379 }
384380 spin_unlock_bh(&e->lock);
385381
....@@ -433,10 +429,12 @@
433429 else
434430 lport = netdev2pinfo(physdev)->lport;
435431
436
- if (is_vlan_dev(neigh->dev))
432
+ if (is_vlan_dev(neigh->dev)) {
437433 vlan = vlan_dev_vlan_id(neigh->dev);
438
- else
434
+ vlan |= vlan_dev_get_egress_qos_mask(neigh->dev, priority);
435
+ } else {
439436 vlan = VLAN_NONE;
437
+ }
440438
441439 write_lock_bh(&d->lock);
442440 for (e = d->l2tab[hash].first; e; e = e->next)
....@@ -493,14 +491,11 @@
493491 ntuple |= (u64)IPPROTO_TCP << tp->protocol_shift;
494492
495493 if (tp->vnic_shift >= 0 && (tp->ingress_config & VNIC_F)) {
496
- u32 viid = cxgb4_port_viid(dev);
497
- u32 vf = FW_VIID_VIN_G(viid);
498
- u32 pf = FW_VIID_PFN_G(viid);
499
- u32 vld = FW_VIID_VIVLD_G(viid);
494
+ struct port_info *pi = (struct port_info *)netdev_priv(dev);
500495
501
- ntuple |= (u64)(FT_VNID_ID_VF_V(vf) |
502
- FT_VNID_ID_PF_V(pf) |
503
- FT_VNID_ID_VLD_V(vld)) << tp->vnic_shift;
496
+ ntuple |= (u64)(FT_VNID_ID_VF_V(pi->vin) |
497
+ FT_VNID_ID_PF_V(adap->pf) |
498
+ FT_VNID_ID_VLD_V(pi->vivld)) << tp->vnic_shift;
504499 }
505500
506501 return ntuple;
....@@ -614,6 +609,7 @@
614609 }
615610
616611 /**
612
+ * cxgb4_l2t_alloc_switching - Allocates an L2T entry for switch filters
617613 * @dev: net_device pointer
618614 * @vlan: VLAN Id
619615 * @port: Associated port
....@@ -643,7 +639,7 @@
643639 if (l2t_size < L2T_MIN_HASH_BUCKETS)
644640 return NULL;
645641
646
- d = kvzalloc(sizeof(*d) + l2t_size * sizeof(struct l2t_entry), GFP_KERNEL);
642
+ d = kvzalloc(struct_size(d, l2tab, l2t_size), GFP_KERNEL);
647643 if (!d)
648644 return NULL;
649645
....@@ -701,6 +697,17 @@
701697 }
702698 }
703699
700
+bool cxgb4_check_l2t_valid(struct l2t_entry *e)
701
+{
702
+ bool valid;
703
+
704
+ spin_lock(&e->lock);
705
+ valid = (e->state == L2T_STATE_VALID);
706
+ spin_unlock(&e->lock);
707
+ return valid;
708
+}
709
+EXPORT_SYMBOL(cxgb4_check_l2t_valid);
710
+
704711 static int l2t_seq_show(struct seq_file *seq, void *v)
705712 {
706713 if (v == SEQ_START_TOKEN)