@@ -758,9 +758,13 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
758
758
759
759
static void bnxt_tx_int (struct bnxt * bp , struct bnxt_napi * bnapi , int budget )
760
760
{
761
- struct bnxt_tx_ring_info * txr = bnapi -> tx_ring ;
761
+ struct bnxt_tx_ring_info * txr ;
762
+ int i ;
762
763
763
- __bnxt_tx_int (bp , txr , budget );
764
+ bnxt_for_each_napi_tx (i , bnapi , txr ) {
765
+ if (txr -> tx_hw_cons != txr -> tx_cons )
766
+ __bnxt_tx_int (bp , txr , budget );
767
+ }
764
768
bnapi -> events &= ~BNXT_TX_CMP_EVENT ;
765
769
}
766
770
@@ -2596,15 +2600,13 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
2596
2600
{
2597
2601
struct bnxt_napi * bnapi = cpr -> bnapi ;
2598
2602
u32 raw_cons = cpr -> cp_raw_cons ;
2599
- struct bnxt_tx_ring_info * txr ;
2600
2603
u32 cons ;
2601
2604
int rx_pkts = 0 ;
2602
2605
u8 event = 0 ;
2603
2606
struct tx_cmp * txcmp ;
2604
2607
2605
2608
cpr -> has_more_work = 0 ;
2606
2609
cpr -> had_work_done = 1 ;
2607
- txr = bnapi -> tx_ring ;
2608
2610
while (1 ) {
2609
2611
int rc ;
2610
2612
@@ -2620,8 +2622,10 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
2620
2622
dma_rmb ();
2621
2623
if (TX_CMP_TYPE (txcmp ) == CMP_TYPE_TX_L2_CMP ) {
2622
2624
u32 opaque = txcmp -> tx_cmp_opaque ;
2625
+ struct bnxt_tx_ring_info * txr ;
2623
2626
u16 tx_freed ;
2624
2627
2628
+ txr = bnapi -> tx_ring [TX_OPAQUE_RING (opaque )];
2625
2629
event |= BNXT_TX_CMP_EVENT ;
2626
2630
txr -> tx_hw_cons = TX_OPAQUE_PROD (bp , opaque );
2627
2631
tx_freed = (txr -> tx_hw_cons - txr -> tx_cons ) &
@@ -2671,7 +2675,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
2671
2675
xdp_do_flush ();
2672
2676
2673
2677
if (event & BNXT_TX_EVENT ) {
2674
- struct bnxt_tx_ring_info * txr = bnapi -> tx_ring ;
2678
+ struct bnxt_tx_ring_info * txr = bnapi -> tx_ring [ 0 ] ;
2675
2679
u16 prod = txr -> tx_prod ;
2676
2680
2677
2681
/* Sync BD data before updating doorbell */
@@ -3657,7 +3661,7 @@ static int bnxt_alloc_cp_rings(struct bnxt *bp)
3657
3661
3658
3662
static void bnxt_init_ring_struct (struct bnxt * bp )
3659
3663
{
3660
- int i ;
3664
+ int i , j ;
3661
3665
3662
3666
for (i = 0 ; i < bp -> cp_nr_rings ; i ++ ) {
3663
3667
struct bnxt_napi * bnapi = bp -> bnapi [i ];
@@ -3702,18 +3706,16 @@ static void bnxt_init_ring_struct(struct bnxt *bp)
3702
3706
rmem -> vmem = (void * * )& rxr -> rx_agg_ring ;
3703
3707
3704
3708
skip_rx :
3705
- txr = bnapi -> tx_ring ;
3706
- if (!txr )
3707
- continue ;
3708
-
3709
- ring = & txr -> tx_ring_struct ;
3710
- rmem = & ring -> ring_mem ;
3711
- rmem -> nr_pages = bp -> tx_nr_pages ;
3712
- rmem -> page_size = HW_RXBD_RING_SIZE ;
3713
- rmem -> pg_arr = (void * * )txr -> tx_desc_ring ;
3714
- rmem -> dma_arr = txr -> tx_desc_mapping ;
3715
- rmem -> vmem_size = SW_TXBD_RING_SIZE * bp -> tx_nr_pages ;
3716
- rmem -> vmem = (void * * )& txr -> tx_buf_ring ;
3709
+ bnxt_for_each_napi_tx (j , bnapi , txr ) {
3710
+ ring = & txr -> tx_ring_struct ;
3711
+ rmem = & ring -> ring_mem ;
3712
+ rmem -> nr_pages = bp -> tx_nr_pages ;
3713
+ rmem -> page_size = HW_TXBD_RING_SIZE ;
3714
+ rmem -> pg_arr = (void * * )txr -> tx_desc_ring ;
3715
+ rmem -> dma_arr = txr -> tx_desc_mapping ;
3716
+ rmem -> vmem_size = SW_TXBD_RING_SIZE * bp -> tx_nr_pages ;
3717
+ rmem -> vmem = (void * * )& txr -> tx_buf_ring ;
3718
+ }
3717
3719
}
3718
3720
}
3719
3721
@@ -4512,7 +4514,7 @@ static int bnxt_alloc_stats(struct bnxt *bp)
4512
4514
4513
4515
static void bnxt_clear_ring_indices (struct bnxt * bp )
4514
4516
{
4515
- int i ;
4517
+ int i , j ;
4516
4518
4517
4519
if (!bp -> bnapi )
4518
4520
return ;
@@ -4529,8 +4531,7 @@ static void bnxt_clear_ring_indices(struct bnxt *bp)
4529
4531
cpr = & bnapi -> cp_ring ;
4530
4532
cpr -> cp_raw_cons = 0 ;
4531
4533
4532
- txr = bnapi -> tx_ring ;
4533
- if (txr ) {
4534
+ bnxt_for_each_napi_tx (j , bnapi , txr ) {
4534
4535
txr -> tx_prod = 0 ;
4535
4536
txr -> tx_cons = 0 ;
4536
4537
txr -> tx_hw_cons = 0 ;
@@ -4703,7 +4704,7 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool irq_re_init)
4703
4704
else
4704
4705
txr -> tx_cpr = & bp -> bnapi [i ]-> cp_ring ;
4705
4706
txr -> bnapi = bp -> bnapi [j ];
4706
- bp -> bnapi [j ]-> tx_ring = txr ;
4707
+ bp -> bnapi [j ]-> tx_ring [ 0 ] = txr ;
4707
4708
bp -> tx_ring_map [i ] = bp -> tx_nr_rings_xdp + i ;
4708
4709
if (i >= bp -> tx_nr_rings_xdp ) {
4709
4710
txr -> txq_index = i - bp -> tx_nr_rings_xdp ;
@@ -6910,10 +6911,21 @@ static int
6910
6911
bnxt_hwrm_set_tx_coal (struct bnxt * bp , struct bnxt_napi * bnapi ,
6911
6912
struct hwrm_ring_cmpl_ring_cfg_aggint_params_input * req )
6912
6913
{
6913
- u16 ring_id = bnxt_cp_ring_for_tx (bp , bnapi -> tx_ring );
6914
+ struct bnxt_tx_ring_info * txr ;
6915
+ int i , rc ;
6914
6916
6915
- req -> ring_id = cpu_to_le16 (ring_id );
6916
- return hwrm_req_send (bp , req );
6917
+ bnxt_for_each_napi_tx (i , bnapi , txr ) {
6918
+ u16 ring_id ;
6919
+
6920
+ ring_id = bnxt_cp_ring_for_tx (bp , txr );
6921
+ req -> ring_id = cpu_to_le16 (ring_id );
6922
+ rc = hwrm_req_send (bp , req );
6923
+ if (rc )
6924
+ return rc ;
6925
+ if (!(bp -> flags & BNXT_FLAG_CHIP_P5 ))
6926
+ return 0 ;
6927
+ }
6928
+ return 0 ;
6917
6929
}
6918
6930
6919
6931
int bnxt_hwrm_set_coal (struct bnxt * bp )
@@ -6950,7 +6962,7 @@ int bnxt_hwrm_set_coal(struct bnxt *bp)
6950
6962
if (!(bp -> flags & BNXT_FLAG_CHIP_P5 ))
6951
6963
continue ;
6952
6964
6953
- if (bnapi -> rx_ring && bnapi -> tx_ring ) {
6965
+ if (bnapi -> rx_ring && bnapi -> tx_ring [ 0 ] ) {
6954
6966
rc = bnxt_hwrm_set_tx_coal (bp , bnapi , req_tx );
6955
6967
if (rc )
6956
6968
break ;
@@ -11575,15 +11587,13 @@ static int bnxt_dbg_hwrm_ring_info_get(struct bnxt *bp, u8 ring_type,
11575
11587
11576
11588
static void bnxt_dump_tx_sw_state (struct bnxt_napi * bnapi )
11577
11589
{
11578
- struct bnxt_tx_ring_info * txr = bnapi -> tx_ring ;
11579
- int i = bnapi -> index ;
11580
-
11581
- if (!txr )
11582
- return ;
11590
+ struct bnxt_tx_ring_info * txr ;
11591
+ int i = bnapi -> index , j ;
11583
11592
11584
- netdev_info (bnapi -> bp -> dev , "[%d]: tx{fw_ring: %d prod: %x cons: %x}\n" ,
11585
- i , txr -> tx_ring_struct .fw_ring_id , txr -> tx_prod ,
11586
- txr -> tx_cons );
11593
+ bnxt_for_each_napi_tx (j , bnapi , txr )
11594
+ netdev_info (bnapi -> bp -> dev , "[%d.%d]: tx{fw_ring: %d prod: %x cons: %x}\n" ,
11595
+ i , j , txr -> tx_ring_struct .fw_ring_id , txr -> tx_prod ,
11596
+ txr -> tx_cons );
11587
11597
}
11588
11598
11589
11599
static void bnxt_dump_rx_sw_state (struct bnxt_napi * bnapi )
0 commit comments