@@ -3256,71 +3256,70 @@ int hclge_rss_init_hw(struct hclge_dev *hdev)
3256
3256
return ret ;
3257
3257
}
3258
3258
3259
- int hclge_map_vport_ring_to_vector (struct hclge_vport * vport , int vector_id ,
3260
- struct hnae3_ring_chain_node * ring_chain )
3259
+ int hclge_bind_ring_with_vector (struct hclge_vport * vport ,
3260
+ int vector_id , bool en ,
3261
+ struct hnae3_ring_chain_node * ring_chain )
3261
3262
{
3262
3263
struct hclge_dev * hdev = vport -> back ;
3263
- struct hclge_ctrl_vector_chain_cmd * req ;
3264
3264
struct hnae3_ring_chain_node * node ;
3265
3265
struct hclge_desc desc ;
3266
- int ret ;
3266
+ struct hclge_ctrl_vector_chain_cmd * req
3267
+ = (struct hclge_ctrl_vector_chain_cmd * )desc .data ;
3268
+ enum hclge_cmd_status status ;
3269
+ enum hclge_opcode_type op ;
3270
+ u16 tqp_type_and_id ;
3267
3271
int i ;
3268
3272
3269
- hclge_cmd_setup_basic_desc (& desc , HCLGE_OPC_ADD_RING_TO_VECTOR , false);
3270
-
3271
- req = (struct hclge_ctrl_vector_chain_cmd * )desc .data ;
3273
+ op = en ? HCLGE_OPC_ADD_RING_TO_VECTOR : HCLGE_OPC_DEL_RING_TO_VECTOR ;
3274
+ hclge_cmd_setup_basic_desc (& desc , op , false);
3272
3275
req -> int_vector_id = vector_id ;
3273
3276
3274
3277
i = 0 ;
3275
3278
for (node = ring_chain ; node ; node = node -> next ) {
3276
- u16 type_and_id = 0 ;
3277
-
3278
- hnae_set_field ( type_and_id , HCLGE_INT_TYPE_M , HCLGE_INT_TYPE_S ,
3279
+ tqp_type_and_id = le16_to_cpu ( req -> tqp_type_and_id [ i ]) ;
3280
+ hnae_set_field ( tqp_type_and_id , HCLGE_INT_TYPE_M ,
3281
+ HCLGE_INT_TYPE_S ,
3279
3282
hnae_get_bit (node -> flag , HNAE3_RING_TYPE_B ));
3280
- hnae_set_field (type_and_id , HCLGE_TQP_ID_M , HCLGE_TQP_ID_S ,
3281
- node -> tqp_index );
3282
- hnae_set_field (type_and_id , HCLGE_INT_GL_IDX_M ,
3283
- HCLGE_INT_GL_IDX_S ,
3284
- hnae_get_bit (node -> flag , HNAE3_RING_TYPE_B ));
3285
- req -> tqp_type_and_id [i ] = cpu_to_le16 (type_and_id );
3286
- req -> vfid = vport -> vport_id ;
3287
-
3283
+ hnae_set_field (tqp_type_and_id , HCLGE_TQP_ID_M ,
3284
+ HCLGE_TQP_ID_S , node -> tqp_index );
3285
+ req -> tqp_type_and_id [i ] = cpu_to_le16 (tqp_type_and_id );
3288
3286
if (++ i >= HCLGE_VECTOR_ELEMENTS_PER_CMD ) {
3289
3287
req -> int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD ;
3288
+ req -> vfid = vport -> vport_id ;
3290
3289
3291
- ret = hclge_cmd_send (& hdev -> hw , & desc , 1 );
3292
- if (ret ) {
3290
+ status = hclge_cmd_send (& hdev -> hw , & desc , 1 );
3291
+ if (status ) {
3293
3292
dev_err (& hdev -> pdev -> dev ,
3294
3293
"Map TQP fail, status is %d.\n" ,
3295
- ret );
3296
- return ret ;
3294
+ status );
3295
+ return - EIO ;
3297
3296
}
3298
3297
i = 0 ;
3299
3298
3300
3299
hclge_cmd_setup_basic_desc (& desc ,
3301
- HCLGE_OPC_ADD_RING_TO_VECTOR ,
3300
+ op ,
3302
3301
false);
3303
3302
req -> int_vector_id = vector_id ;
3304
3303
}
3305
3304
}
3306
3305
3307
3306
if (i > 0 ) {
3308
3307
req -> int_cause_num = i ;
3309
-
3310
- ret = hclge_cmd_send (& hdev -> hw , & desc , 1 );
3311
- if (ret ) {
3308
+ req -> vfid = vport -> vport_id ;
3309
+ status = hclge_cmd_send (& hdev -> hw , & desc , 1 );
3310
+ if (status ) {
3312
3311
dev_err (& hdev -> pdev -> dev ,
3313
- "Map TQP fail, status is %d.\n" , ret );
3314
- return ret ;
3312
+ "Map TQP fail, status is %d.\n" , status );
3313
+ return - EIO ;
3315
3314
}
3316
3315
}
3317
3316
3318
3317
return 0 ;
3319
3318
}
3320
3319
3321
- static int hclge_map_handle_ring_to_vector (
3322
- struct hnae3_handle * handle , int vector ,
3323
- struct hnae3_ring_chain_node * ring_chain )
3320
+ static int hclge_map_ring_to_vector ( struct hnae3_handle * handle ,
3321
+ int vector ,
3322
+ struct hnae3_ring_chain_node * ring_chain )
3324
3323
{
3325
3324
struct hclge_vport * vport = hclge_get_vport (handle );
3326
3325
struct hclge_dev * hdev = vport -> back ;
@@ -3329,24 +3328,20 @@ static int hclge_map_handle_ring_to_vector(
3329
3328
vector_id = hclge_get_vector_index (hdev , vector );
3330
3329
if (vector_id < 0 ) {
3331
3330
dev_err (& hdev -> pdev -> dev ,
3332
- "Get vector index fail. ret =%d\n" , vector_id );
3331
+ "Get vector index fail. vector_id =%d\n" , vector_id );
3333
3332
return vector_id ;
3334
3333
}
3335
3334
3336
- return hclge_map_vport_ring_to_vector (vport , vector_id , ring_chain );
3335
+ return hclge_bind_ring_with_vector (vport , vector_id , true , ring_chain );
3337
3336
}
3338
3337
3339
- static int hclge_unmap_ring_from_vector (
3340
- struct hnae3_handle * handle , int vector ,
3341
- struct hnae3_ring_chain_node * ring_chain )
3338
+ static int hclge_unmap_ring_frm_vector ( struct hnae3_handle * handle ,
3339
+ int vector ,
3340
+ struct hnae3_ring_chain_node * ring_chain )
3342
3341
{
3343
3342
struct hclge_vport * vport = hclge_get_vport (handle );
3344
3343
struct hclge_dev * hdev = vport -> back ;
3345
- struct hclge_ctrl_vector_chain_cmd * req ;
3346
- struct hnae3_ring_chain_node * node ;
3347
- struct hclge_desc desc ;
3348
- int i , vector_id ;
3349
- int ret ;
3344
+ int vector_id , ret ;
3350
3345
3351
3346
vector_id = hclge_get_vector_index (hdev , vector );
3352
3347
if (vector_id < 0 ) {
@@ -3355,54 +3350,17 @@ static int hclge_unmap_ring_from_vector(
3355
3350
return vector_id ;
3356
3351
}
3357
3352
3358
- hclge_cmd_setup_basic_desc (& desc , HCLGE_OPC_DEL_RING_TO_VECTOR , false);
3359
-
3360
- req = (struct hclge_ctrl_vector_chain_cmd * )desc .data ;
3361
- req -> int_vector_id = vector_id ;
3362
-
3363
- i = 0 ;
3364
- for (node = ring_chain ; node ; node = node -> next ) {
3365
- u16 type_and_id = 0 ;
3366
-
3367
- hnae_set_field (type_and_id , HCLGE_INT_TYPE_M , HCLGE_INT_TYPE_S ,
3368
- hnae_get_bit (node -> flag , HNAE3_RING_TYPE_B ));
3369
- hnae_set_field (type_and_id , HCLGE_TQP_ID_M , HCLGE_TQP_ID_S ,
3370
- node -> tqp_index );
3371
- hnae_set_field (type_and_id , HCLGE_INT_GL_IDX_M ,
3372
- HCLGE_INT_GL_IDX_S ,
3373
- hnae_get_bit (node -> flag , HNAE3_RING_TYPE_B ));
3374
-
3375
- req -> tqp_type_and_id [i ] = cpu_to_le16 (type_and_id );
3376
- req -> vfid = vport -> vport_id ;
3377
-
3378
- if (++ i >= HCLGE_VECTOR_ELEMENTS_PER_CMD ) {
3379
- req -> int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD ;
3380
-
3381
- ret = hclge_cmd_send (& hdev -> hw , & desc , 1 );
3382
- if (ret ) {
3383
- dev_err (& hdev -> pdev -> dev ,
3384
- "Unmap TQP fail, status is %d.\n" ,
3385
- ret );
3386
- return ret ;
3387
- }
3388
- i = 0 ;
3389
- hclge_cmd_setup_basic_desc (& desc ,
3390
- HCLGE_OPC_DEL_RING_TO_VECTOR ,
3391
- false);
3392
- req -> int_vector_id = vector_id ;
3393
- }
3353
+ ret = hclge_bind_ring_with_vector (vport , vector_id , false, ring_chain );
3354
+ if (ret ) {
3355
+ dev_err (& handle -> pdev -> dev ,
3356
+ "Unmap ring from vector fail. vectorid=%d, ret =%d\n" ,
3357
+ vector_id ,
3358
+ ret );
3359
+ return ret ;
3394
3360
}
3395
3361
3396
- if (i > 0 ) {
3397
- req -> int_cause_num = i ;
3398
-
3399
- ret = hclge_cmd_send (& hdev -> hw , & desc , 1 );
3400
- if (ret ) {
3401
- dev_err (& hdev -> pdev -> dev ,
3402
- "Unmap TQP fail, status is %d.\n" , ret );
3403
- return ret ;
3404
- }
3405
- }
3362
+ /* Free this MSIX or MSI vector */
3363
+ hclge_free_vector (hdev , vector_id );
3406
3364
3407
3365
return 0 ;
3408
3366
}
@@ -4423,7 +4381,7 @@ static int hclge_get_reset_status(struct hclge_dev *hdev, u16 queue_id)
4423
4381
return hnae_get_bit (req -> ready_to_reset , HCLGE_TQP_RESET_B );
4424
4382
}
4425
4383
4426
- static void hclge_reset_tqp (struct hnae3_handle * handle , u16 queue_id )
4384
+ void hclge_reset_tqp (struct hnae3_handle * handle , u16 queue_id )
4427
4385
{
4428
4386
struct hclge_vport * vport = hclge_get_vport (handle );
4429
4387
struct hclge_dev * hdev = vport -> back ;
@@ -4995,8 +4953,8 @@ static const struct hnae3_ae_ops hclge_ops = {
4995
4953
.uninit_ae_dev = hclge_uninit_ae_dev ,
4996
4954
.init_client_instance = hclge_init_client_instance ,
4997
4955
.uninit_client_instance = hclge_uninit_client_instance ,
4998
- .map_ring_to_vector = hclge_map_handle_ring_to_vector ,
4999
- .unmap_ring_from_vector = hclge_unmap_ring_from_vector ,
4956
+ .map_ring_to_vector = hclge_map_ring_to_vector ,
4957
+ .unmap_ring_from_vector = hclge_unmap_ring_frm_vector ,
5000
4958
.get_vector = hclge_get_vector ,
5001
4959
.set_promisc_mode = hclge_set_promisc_mode ,
5002
4960
.set_loopback = hclge_set_loopback ,
0 commit comments