@@ -3163,54 +3163,30 @@ static void bnxt_init_rxbd_pages(struct bnxt_ring_struct *ring, u32 type)
3163
3163
}
3164
3164
}
3165
3165
3166
- static int bnxt_init_one_rx_ring (struct bnxt * bp , int ring_nr )
3166
+ static int bnxt_alloc_one_rx_ring (struct bnxt * bp , int ring_nr )
3167
3167
{
3168
+ struct bnxt_rx_ring_info * rxr = & bp -> rx_ring [ring_nr ];
3168
3169
struct net_device * dev = bp -> dev ;
3169
- struct bnxt_rx_ring_info * rxr ;
3170
- struct bnxt_ring_struct * ring ;
3171
- u32 prod , type ;
3170
+ u32 prod ;
3172
3171
int i ;
3173
3172
3174
- type = (bp -> rx_buf_use_size << RX_BD_LEN_SHIFT ) |
3175
- RX_BD_TYPE_RX_PACKET_BD | RX_BD_FLAGS_EOP ;
3176
-
3177
- if (NET_IP_ALIGN == 2 )
3178
- type |= RX_BD_FLAGS_SOP ;
3179
-
3180
- rxr = & bp -> rx_ring [ring_nr ];
3181
- ring = & rxr -> rx_ring_struct ;
3182
- bnxt_init_rxbd_pages (ring , type );
3183
-
3184
- if (BNXT_RX_PAGE_MODE (bp ) && bp -> xdp_prog ) {
3185
- bpf_prog_add (bp -> xdp_prog , 1 );
3186
- rxr -> xdp_prog = bp -> xdp_prog ;
3187
- }
3188
3173
prod = rxr -> rx_prod ;
3189
3174
for (i = 0 ; i < bp -> rx_ring_size ; i ++ ) {
3190
- if (bnxt_alloc_rx_data (bp , rxr , prod , GFP_KERNEL ) != 0 ) {
3175
+ if (bnxt_alloc_rx_data (bp , rxr , prod , GFP_KERNEL )) {
3191
3176
netdev_warn (dev , "init'ed rx ring %d with %d/%d skbs only\n" ,
3192
3177
ring_nr , i , bp -> rx_ring_size );
3193
3178
break ;
3194
3179
}
3195
3180
prod = NEXT_RX (prod );
3196
3181
}
3197
3182
rxr -> rx_prod = prod ;
3198
- ring -> fw_ring_id = INVALID_HW_RING_ID ;
3199
-
3200
- ring = & rxr -> rx_agg_ring_struct ;
3201
- ring -> fw_ring_id = INVALID_HW_RING_ID ;
3202
3183
3203
3184
if (!(bp -> flags & BNXT_FLAG_AGG_RINGS ))
3204
3185
return 0 ;
3205
3186
3206
- type = ((u32 )BNXT_RX_PAGE_SIZE << RX_BD_LEN_SHIFT ) |
3207
- RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP ;
3208
-
3209
- bnxt_init_rxbd_pages (ring , type );
3210
-
3211
3187
prod = rxr -> rx_agg_prod ;
3212
3188
for (i = 0 ; i < bp -> rx_agg_ring_size ; i ++ ) {
3213
- if (bnxt_alloc_rx_page (bp , rxr , prod , GFP_KERNEL ) != 0 ) {
3189
+ if (bnxt_alloc_rx_page (bp , rxr , prod , GFP_KERNEL )) {
3214
3190
netdev_warn (dev , "init'ed rx ring %d with %d/%d pages only\n" ,
3215
3191
ring_nr , i , bp -> rx_ring_size );
3216
3192
break ;
@@ -3219,30 +3195,58 @@ static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr)
3219
3195
}
3220
3196
rxr -> rx_agg_prod = prod ;
3221
3197
3222
- if (bp -> flags & BNXT_FLAG_TPA ) {
3223
- if (rxr -> rx_tpa ) {
3224
- u8 * data ;
3225
- dma_addr_t mapping ;
3198
+ if (rxr -> rx_tpa ) {
3199
+ dma_addr_t mapping ;
3200
+ u8 * data ;
3226
3201
3227
- for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
3228
- data = __bnxt_alloc_rx_data (bp , & mapping ,
3229
- GFP_KERNEL );
3230
- if (!data )
3231
- return - ENOMEM ;
3202
+ for (i = 0 ; i < bp -> max_tpa ; i ++ ) {
3203
+ data = __bnxt_alloc_rx_data (bp , & mapping , GFP_KERNEL );
3204
+ if (!data )
3205
+ return - ENOMEM ;
3232
3206
3233
- rxr -> rx_tpa [i ].data = data ;
3234
- rxr -> rx_tpa [i ].data_ptr = data + bp -> rx_offset ;
3235
- rxr -> rx_tpa [i ].mapping = mapping ;
3236
- }
3237
- } else {
3238
- netdev_err (bp -> dev , "No resource allocated for LRO/GRO\n" );
3239
- return - ENOMEM ;
3207
+ rxr -> rx_tpa [i ].data = data ;
3208
+ rxr -> rx_tpa [i ].data_ptr = data + bp -> rx_offset ;
3209
+ rxr -> rx_tpa [i ].mapping = mapping ;
3240
3210
}
3241
3211
}
3242
-
3243
3212
return 0 ;
3244
3213
}
3245
3214
3215
+ static int bnxt_init_one_rx_ring (struct bnxt * bp , int ring_nr )
3216
+ {
3217
+ struct bnxt_rx_ring_info * rxr ;
3218
+ struct bnxt_ring_struct * ring ;
3219
+ u32 type ;
3220
+
3221
+ type = (bp -> rx_buf_use_size << RX_BD_LEN_SHIFT ) |
3222
+ RX_BD_TYPE_RX_PACKET_BD | RX_BD_FLAGS_EOP ;
3223
+
3224
+ if (NET_IP_ALIGN == 2 )
3225
+ type |= RX_BD_FLAGS_SOP ;
3226
+
3227
+ rxr = & bp -> rx_ring [ring_nr ];
3228
+ ring = & rxr -> rx_ring_struct ;
3229
+ bnxt_init_rxbd_pages (ring , type );
3230
+
3231
+ if (BNXT_RX_PAGE_MODE (bp ) && bp -> xdp_prog ) {
3232
+ bpf_prog_add (bp -> xdp_prog , 1 );
3233
+ rxr -> xdp_prog = bp -> xdp_prog ;
3234
+ }
3235
+ ring -> fw_ring_id = INVALID_HW_RING_ID ;
3236
+
3237
+ ring = & rxr -> rx_agg_ring_struct ;
3238
+ ring -> fw_ring_id = INVALID_HW_RING_ID ;
3239
+
3240
+ if ((bp -> flags & BNXT_FLAG_AGG_RINGS )) {
3241
+ type = ((u32 )BNXT_RX_PAGE_SIZE << RX_BD_LEN_SHIFT ) |
3242
+ RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP ;
3243
+
3244
+ bnxt_init_rxbd_pages (ring , type );
3245
+ }
3246
+
3247
+ return bnxt_alloc_one_rx_ring (bp , ring_nr );
3248
+ }
3249
+
3246
3250
static void bnxt_init_cp_rings (struct bnxt * bp )
3247
3251
{
3248
3252
int i , j ;
0 commit comments