@@ -3421,15 +3421,11 @@ static void bnxt_free_one_rx_agg_ring(struct bnxt *bp, struct bnxt_rx_ring_info
3421
3421
}
3422
3422
}
3423
3423
3424
- static void bnxt_free_one_rx_ring_skbs (struct bnxt * bp , int ring_nr )
3424
+ static void bnxt_free_one_tpa_info_data (struct bnxt * bp ,
3425
+ struct bnxt_rx_ring_info * rxr )
3425
3426
{
3426
- struct bnxt_rx_ring_info * rxr = & bp -> rx_ring [ring_nr ];
3427
- struct bnxt_tpa_idx_map * map ;
3428
3427
int i ;
3429
3428
3430
- if (!rxr -> rx_tpa )
3431
- goto skip_rx_tpa_free ;
3432
-
3433
3429
for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
3434
3430
struct bnxt_tpa_info * tpa_info = & rxr -> rx_tpa [i ];
3435
3431
u8 * data = tpa_info -> data ;
@@ -3440,6 +3436,17 @@ static void bnxt_free_one_rx_ring_skbs(struct bnxt *bp, int ring_nr)
3440
3436
tpa_info -> data = NULL ;
3441
3437
page_pool_free_va (rxr -> head_pool , data , false);
3442
3438
}
3439
+ }
3440
+
3441
+ static void bnxt_free_one_rx_ring_skbs (struct bnxt * bp ,
3442
+ struct bnxt_rx_ring_info * rxr )
3443
+ {
3444
+ struct bnxt_tpa_idx_map * map ;
3445
+
3446
+ if (!rxr -> rx_tpa )
3447
+ goto skip_rx_tpa_free ;
3448
+
3449
+ bnxt_free_one_tpa_info_data (bp , rxr );
3443
3450
3444
3451
skip_rx_tpa_free :
3445
3452
if (!rxr -> rx_buf_ring )
@@ -3467,7 +3474,7 @@ static void bnxt_free_rx_skbs(struct bnxt *bp)
3467
3474
return ;
3468
3475
3469
3476
for (i = 0 ; i < bp -> rx_nr_rings ; i ++ )
3470
- bnxt_free_one_rx_ring_skbs (bp , i );
3477
+ bnxt_free_one_rx_ring_skbs (bp , & bp -> rx_ring [ i ] );
3471
3478
}
3472
3479
3473
3480
static void bnxt_free_skbs (struct bnxt * bp )
@@ -3608,29 +3615,64 @@ static int bnxt_alloc_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem)
3608
3615
return 0 ;
3609
3616
}
3610
3617
3618
+ static void bnxt_free_one_tpa_info (struct bnxt * bp ,
3619
+ struct bnxt_rx_ring_info * rxr )
3620
+ {
3621
+ int i ;
3622
+
3623
+ kfree (rxr -> rx_tpa_idx_map );
3624
+ rxr -> rx_tpa_idx_map = NULL ;
3625
+ if (rxr -> rx_tpa ) {
3626
+ for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
3627
+ kfree (rxr -> rx_tpa [i ].agg_arr );
3628
+ rxr -> rx_tpa [i ].agg_arr = NULL ;
3629
+ }
3630
+ }
3631
+ kfree (rxr -> rx_tpa );
3632
+ rxr -> rx_tpa = NULL ;
3633
+ }
3634
+
3611
3635
static void bnxt_free_tpa_info (struct bnxt * bp )
3612
3636
{
3613
- int i , j ;
3637
+ int i ;
3614
3638
3615
3639
for (i = 0 ; i < bp -> rx_nr_rings ; i ++ ) {
3616
3640
struct bnxt_rx_ring_info * rxr = & bp -> rx_ring [i ];
3617
3641
3618
- kfree (rxr -> rx_tpa_idx_map );
3619
- rxr -> rx_tpa_idx_map = NULL ;
3620
- if (rxr -> rx_tpa ) {
3621
- for (j = 0 ; j < bp -> max_tpa ; j ++ ) {
3622
- kfree (rxr -> rx_tpa [j ].agg_arr );
3623
- rxr -> rx_tpa [j ].agg_arr = NULL ;
3624
- }
3625
- }
3626
- kfree (rxr -> rx_tpa );
3627
- rxr -> rx_tpa = NULL ;
3642
+ bnxt_free_one_tpa_info (bp , rxr );
3628
3643
}
3629
3644
}
3630
3645
3646
+ static int bnxt_alloc_one_tpa_info (struct bnxt * bp ,
3647
+ struct bnxt_rx_ring_info * rxr )
3648
+ {
3649
+ struct rx_agg_cmp * agg ;
3650
+ int i ;
3651
+
3652
+ rxr -> rx_tpa = kcalloc (bp -> max_tpa , sizeof (struct bnxt_tpa_info ),
3653
+ GFP_KERNEL );
3654
+ if (!rxr -> rx_tpa )
3655
+ return - ENOMEM ;
3656
+
3657
+ if (!(bp -> flags & BNXT_FLAG_CHIP_P5_PLUS ))
3658
+ return 0 ;
3659
+ for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
3660
+ agg = kcalloc (MAX_SKB_FRAGS , sizeof (* agg ), GFP_KERNEL );
3661
+ if (!agg )
3662
+ return - ENOMEM ;
3663
+ rxr -> rx_tpa [i ].agg_arr = agg ;
3664
+ }
3665
+ rxr -> rx_tpa_idx_map = kzalloc (sizeof (* rxr -> rx_tpa_idx_map ),
3666
+ GFP_KERNEL );
3667
+ if (!rxr -> rx_tpa_idx_map )
3668
+ return - ENOMEM ;
3669
+
3670
+ return 0 ;
3671
+ }
3672
+
3631
3673
static int bnxt_alloc_tpa_info (struct bnxt * bp )
3632
3674
{
3633
- int i , j ;
3675
+ int i , rc ;
3634
3676
3635
3677
bp -> max_tpa = MAX_TPA ;
3636
3678
if (bp -> flags & BNXT_FLAG_CHIP_P5_PLUS ) {
@@ -3641,25 +3683,10 @@ static int bnxt_alloc_tpa_info(struct bnxt *bp)
3641
3683
3642
3684
for (i = 0 ; i < bp -> rx_nr_rings ; i ++ ) {
3643
3685
struct bnxt_rx_ring_info * rxr = & bp -> rx_ring [i ];
3644
- struct rx_agg_cmp * agg ;
3645
-
3646
- rxr -> rx_tpa = kcalloc (bp -> max_tpa , sizeof (struct bnxt_tpa_info ),
3647
- GFP_KERNEL );
3648
- if (!rxr -> rx_tpa )
3649
- return - ENOMEM ;
3650
3686
3651
- if (!(bp -> flags & BNXT_FLAG_CHIP_P5_PLUS ))
3652
- continue ;
3653
- for (j = 0 ; j < bp -> max_tpa ; j ++ ) {
3654
- agg = kcalloc (MAX_SKB_FRAGS , sizeof (* agg ), GFP_KERNEL );
3655
- if (!agg )
3656
- return - ENOMEM ;
3657
- rxr -> rx_tpa [j ].agg_arr = agg ;
3658
- }
3659
- rxr -> rx_tpa_idx_map = kzalloc (sizeof (* rxr -> rx_tpa_idx_map ),
3660
- GFP_KERNEL );
3661
- if (!rxr -> rx_tpa_idx_map )
3662
- return - ENOMEM ;
3687
+ rc = bnxt_alloc_one_tpa_info (bp , rxr );
3688
+ if (rc )
3689
+ return rc ;
3663
3690
}
3664
3691
return 0 ;
3665
3692
}
@@ -4268,10 +4295,31 @@ static void bnxt_alloc_one_rx_ring_page(struct bnxt *bp,
4268
4295
rxr -> rx_agg_prod = prod ;
4269
4296
}
4270
4297
4298
+ static int bnxt_alloc_one_tpa_info_data (struct bnxt * bp ,
4299
+ struct bnxt_rx_ring_info * rxr )
4300
+ {
4301
+ dma_addr_t mapping ;
4302
+ u8 * data ;
4303
+ int i ;
4304
+
4305
+ for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
4306
+ data = __bnxt_alloc_rx_frag (bp , & mapping , rxr ,
4307
+ GFP_KERNEL );
4308
+ if (!data )
4309
+ return - ENOMEM ;
4310
+
4311
+ rxr -> rx_tpa [i ].data = data ;
4312
+ rxr -> rx_tpa [i ].data_ptr = data + bp -> rx_offset ;
4313
+ rxr -> rx_tpa [i ].mapping = mapping ;
4314
+ }
4315
+
4316
+ return 0 ;
4317
+ }
4318
+
4271
4319
static int bnxt_alloc_one_rx_ring (struct bnxt * bp , int ring_nr )
4272
4320
{
4273
4321
struct bnxt_rx_ring_info * rxr = & bp -> rx_ring [ring_nr ];
4274
- int i ;
4322
+ int rc ;
4275
4323
4276
4324
bnxt_alloc_one_rx_ring_skb (bp , rxr , ring_nr );
4277
4325
@@ -4281,19 +4329,9 @@ static int bnxt_alloc_one_rx_ring(struct bnxt *bp, int ring_nr)
4281
4329
bnxt_alloc_one_rx_ring_page (bp , rxr , ring_nr );
4282
4330
4283
4331
if (rxr -> rx_tpa ) {
4284
- dma_addr_t mapping ;
4285
- u8 * data ;
4286
-
4287
- for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
4288
- data = __bnxt_alloc_rx_frag (bp , & mapping , rxr ,
4289
- GFP_KERNEL );
4290
- if (!data )
4291
- return - ENOMEM ;
4292
-
4293
- rxr -> rx_tpa [i ].data = data ;
4294
- rxr -> rx_tpa [i ].data_ptr = data + bp -> rx_offset ;
4295
- rxr -> rx_tpa [i ].mapping = mapping ;
4296
- }
4332
+ rc = bnxt_alloc_one_tpa_info_data (bp , rxr );
4333
+ if (rc )
4334
+ return rc ;
4297
4335
}
4298
4336
return 0 ;
4299
4337
}
@@ -13663,7 +13701,7 @@ static void bnxt_rx_ring_reset(struct bnxt *bp)
13663
13701
bnxt_reset_task (bp , true);
13664
13702
break ;
13665
13703
}
13666
- bnxt_free_one_rx_ring_skbs (bp , i );
13704
+ bnxt_free_one_rx_ring_skbs (bp , rxr );
13667
13705
rxr -> rx_prod = 0 ;
13668
13706
rxr -> rx_agg_prod = 0 ;
13669
13707
rxr -> rx_sw_agg_prod = 0 ;
0 commit comments