@@ -436,62 +436,62 @@ static int nsim_dev_resources_register(struct devlink *devlink)
436
436
int err ;
437
437
438
438
/* Resources for IPv4 */
439
- err = devlink_resource_register (devlink , "IPv4" , (u64 )- 1 ,
440
- NSIM_RESOURCE_IPV4 ,
441
- DEVLINK_RESOURCE_ID_PARENT_TOP ,
442
- & params );
439
+ err = devl_resource_register (devlink , "IPv4" , (u64 )- 1 ,
440
+ NSIM_RESOURCE_IPV4 ,
441
+ DEVLINK_RESOURCE_ID_PARENT_TOP ,
442
+ & params );
443
443
if (err ) {
444
444
pr_err ("Failed to register IPv4 top resource\n" );
445
445
goto out ;
446
446
}
447
447
448
- err = devlink_resource_register (devlink , "fib" , (u64 )- 1 ,
449
- NSIM_RESOURCE_IPV4_FIB ,
450
- NSIM_RESOURCE_IPV4 , & params );
448
+ err = devl_resource_register (devlink , "fib" , (u64 )- 1 ,
449
+ NSIM_RESOURCE_IPV4_FIB ,
450
+ NSIM_RESOURCE_IPV4 , & params );
451
451
if (err ) {
452
452
pr_err ("Failed to register IPv4 FIB resource\n" );
453
453
return err ;
454
454
}
455
455
456
- err = devlink_resource_register (devlink , "fib-rules" , (u64 )- 1 ,
457
- NSIM_RESOURCE_IPV4_FIB_RULES ,
458
- NSIM_RESOURCE_IPV4 , & params );
456
+ err = devl_resource_register (devlink , "fib-rules" , (u64 )- 1 ,
457
+ NSIM_RESOURCE_IPV4_FIB_RULES ,
458
+ NSIM_RESOURCE_IPV4 , & params );
459
459
if (err ) {
460
460
pr_err ("Failed to register IPv4 FIB rules resource\n" );
461
461
return err ;
462
462
}
463
463
464
464
/* Resources for IPv6 */
465
- err = devlink_resource_register (devlink , "IPv6" , (u64 )- 1 ,
466
- NSIM_RESOURCE_IPV6 ,
467
- DEVLINK_RESOURCE_ID_PARENT_TOP ,
468
- & params );
465
+ err = devl_resource_register (devlink , "IPv6" , (u64 )- 1 ,
466
+ NSIM_RESOURCE_IPV6 ,
467
+ DEVLINK_RESOURCE_ID_PARENT_TOP ,
468
+ & params );
469
469
if (err ) {
470
470
pr_err ("Failed to register IPv6 top resource\n" );
471
471
goto out ;
472
472
}
473
473
474
- err = devlink_resource_register (devlink , "fib" , (u64 )- 1 ,
475
- NSIM_RESOURCE_IPV6_FIB ,
476
- NSIM_RESOURCE_IPV6 , & params );
474
+ err = devl_resource_register (devlink , "fib" , (u64 )- 1 ,
475
+ NSIM_RESOURCE_IPV6_FIB ,
476
+ NSIM_RESOURCE_IPV6 , & params );
477
477
if (err ) {
478
478
pr_err ("Failed to register IPv6 FIB resource\n" );
479
479
return err ;
480
480
}
481
481
482
- err = devlink_resource_register (devlink , "fib-rules" , (u64 )- 1 ,
483
- NSIM_RESOURCE_IPV6_FIB_RULES ,
484
- NSIM_RESOURCE_IPV6 , & params );
482
+ err = devl_resource_register (devlink , "fib-rules" , (u64 )- 1 ,
483
+ NSIM_RESOURCE_IPV6_FIB_RULES ,
484
+ NSIM_RESOURCE_IPV6 , & params );
485
485
if (err ) {
486
486
pr_err ("Failed to register IPv6 FIB rules resource\n" );
487
487
return err ;
488
488
}
489
489
490
490
/* Resources for nexthops */
491
- err = devlink_resource_register (devlink , "nexthops" , (u64 )- 1 ,
492
- NSIM_RESOURCE_NEXTHOPS ,
493
- DEVLINK_RESOURCE_ID_PARENT_TOP ,
494
- & params );
491
+ err = devl_resource_register (devlink , "nexthops" , (u64 )- 1 ,
492
+ NSIM_RESOURCE_NEXTHOPS ,
493
+ DEVLINK_RESOURCE_ID_PARENT_TOP ,
494
+ & params );
495
495
496
496
out :
497
497
return err ;
@@ -557,15 +557,15 @@ static int nsim_dev_dummy_region_init(struct nsim_dev *nsim_dev,
557
557
struct devlink * devlink )
558
558
{
559
559
nsim_dev -> dummy_region =
560
- devlink_region_create (devlink , & dummy_region_ops ,
561
- NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX ,
562
- NSIM_DEV_DUMMY_REGION_SIZE );
560
+ devl_region_create (devlink , & dummy_region_ops ,
561
+ NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX ,
562
+ NSIM_DEV_DUMMY_REGION_SIZE );
563
563
return PTR_ERR_OR_ZERO (nsim_dev -> dummy_region );
564
564
}
565
565
566
566
static void nsim_dev_dummy_region_exit (struct nsim_dev * nsim_dev )
567
567
{
568
- devlink_region_destroy (nsim_dev -> dummy_region );
568
+ devl_region_destroy (nsim_dev -> dummy_region );
569
569
}
570
570
571
571
static int
@@ -832,7 +832,11 @@ static void nsim_dev_trap_report_work(struct work_struct *work)
832
832
/* For each running port and enabled packet trap, generate a UDP
833
833
* packet with a random 5-tuple and report it.
834
834
*/
835
- devl_lock (priv_to_devlink (nsim_dev ));
835
+ if (!devl_trylock (priv_to_devlink (nsim_dev ))) {
836
+ schedule_delayed_work (& nsim_dev -> trap_data -> trap_report_dw , 0 );
837
+ return ;
838
+ }
839
+
836
840
list_for_each_entry (nsim_dev_port , & nsim_dev -> port_list , list ) {
837
841
if (!netif_running (nsim_dev_port -> ns -> netdev ))
838
842
continue ;
@@ -880,18 +884,18 @@ static int nsim_dev_traps_init(struct devlink *devlink)
880
884
nsim_trap_data -> nsim_dev = nsim_dev ;
881
885
nsim_dev -> trap_data = nsim_trap_data ;
882
886
883
- err = devlink_trap_policers_register (devlink , nsim_trap_policers_arr ,
884
- policers_count );
887
+ err = devl_trap_policers_register (devlink , nsim_trap_policers_arr ,
888
+ policers_count );
885
889
if (err )
886
890
goto err_trap_policers_cnt_free ;
887
891
888
- err = devlink_trap_groups_register (devlink , nsim_trap_groups_arr ,
889
- ARRAY_SIZE (nsim_trap_groups_arr ));
892
+ err = devl_trap_groups_register (devlink , nsim_trap_groups_arr ,
893
+ ARRAY_SIZE (nsim_trap_groups_arr ));
890
894
if (err )
891
895
goto err_trap_policers_unregister ;
892
896
893
- err = devlink_traps_register (devlink , nsim_traps_arr ,
894
- ARRAY_SIZE (nsim_traps_arr ), NULL );
897
+ err = devl_traps_register (devlink , nsim_traps_arr ,
898
+ ARRAY_SIZE (nsim_traps_arr ), NULL );
895
899
if (err )
896
900
goto err_trap_groups_unregister ;
897
901
@@ -903,11 +907,11 @@ static int nsim_dev_traps_init(struct devlink *devlink)
903
907
return 0 ;
904
908
905
909
err_trap_groups_unregister :
906
- devlink_trap_groups_unregister (devlink , nsim_trap_groups_arr ,
907
- ARRAY_SIZE (nsim_trap_groups_arr ));
910
+ devl_trap_groups_unregister (devlink , nsim_trap_groups_arr ,
911
+ ARRAY_SIZE (nsim_trap_groups_arr ));
908
912
err_trap_policers_unregister :
909
- devlink_trap_policers_unregister (devlink , nsim_trap_policers_arr ,
910
- ARRAY_SIZE (nsim_trap_policers_arr ));
913
+ devl_trap_policers_unregister (devlink , nsim_trap_policers_arr ,
914
+ ARRAY_SIZE (nsim_trap_policers_arr ));
911
915
err_trap_policers_cnt_free :
912
916
kfree (nsim_trap_data -> trap_policers_cnt_arr );
913
917
err_trap_items_free :
@@ -923,12 +927,12 @@ static void nsim_dev_traps_exit(struct devlink *devlink)
923
927
924
928
/* caution, trap work takes devlink lock */
925
929
cancel_delayed_work_sync (& nsim_dev -> trap_data -> trap_report_dw );
926
- devlink_traps_unregister (devlink , nsim_traps_arr ,
927
- ARRAY_SIZE (nsim_traps_arr ));
928
- devlink_trap_groups_unregister (devlink , nsim_trap_groups_arr ,
929
- ARRAY_SIZE (nsim_trap_groups_arr ));
930
- devlink_trap_policers_unregister (devlink , nsim_trap_policers_arr ,
931
- ARRAY_SIZE (nsim_trap_policers_arr ));
930
+ devl_traps_unregister (devlink , nsim_traps_arr ,
931
+ ARRAY_SIZE (nsim_traps_arr ));
932
+ devl_trap_groups_unregister (devlink , nsim_trap_groups_arr ,
933
+ ARRAY_SIZE (nsim_trap_groups_arr ));
934
+ devl_trap_policers_unregister (devlink , nsim_trap_policers_arr ,
935
+ ARRAY_SIZE (nsim_trap_policers_arr ));
932
936
kfree (nsim_dev -> trap_data -> trap_policers_cnt_arr );
933
937
kfree (nsim_dev -> trap_data -> trap_items_arr );
934
938
kfree (nsim_dev -> trap_data );
@@ -943,24 +947,19 @@ static int nsim_dev_reload_down(struct devlink *devlink, bool netns_change,
943
947
struct netlink_ext_ack * extack )
944
948
{
945
949
struct nsim_dev * nsim_dev = devlink_priv (devlink );
946
- struct nsim_bus_dev * nsim_bus_dev ;
947
-
948
- nsim_bus_dev = nsim_dev -> nsim_bus_dev ;
949
- if (!mutex_trylock (& nsim_bus_dev -> nsim_bus_reload_lock ))
950
- return - EOPNOTSUPP ;
951
950
951
+ devl_lock (devlink );
952
952
if (nsim_dev -> dont_allow_reload ) {
953
953
/* For testing purposes, user set debugfs dont_allow_reload
954
954
* value to true. So forbid it.
955
955
*/
956
956
NL_SET_ERR_MSG_MOD (extack , "User forbid the reload for testing purposes" );
957
- mutex_unlock ( & nsim_bus_dev -> nsim_bus_reload_lock );
957
+ devl_unlock ( devlink );
958
958
return - EOPNOTSUPP ;
959
959
}
960
- nsim_bus_dev -> in_reload = true;
961
960
962
961
nsim_dev_reload_destroy (nsim_dev );
963
- mutex_unlock ( & nsim_bus_dev -> nsim_bus_reload_lock );
962
+ devl_unlock ( devlink );
964
963
return 0 ;
965
964
}
966
965
@@ -969,25 +968,21 @@ static int nsim_dev_reload_up(struct devlink *devlink, enum devlink_reload_actio
969
968
struct netlink_ext_ack * extack )
970
969
{
971
970
struct nsim_dev * nsim_dev = devlink_priv (devlink );
972
- struct nsim_bus_dev * nsim_bus_dev ;
973
971
int ret ;
974
972
975
- nsim_bus_dev = nsim_dev -> nsim_bus_dev ;
976
- mutex_lock (& nsim_bus_dev -> nsim_bus_reload_lock );
977
- nsim_bus_dev -> in_reload = false;
978
-
973
+ devl_lock (devlink );
979
974
if (nsim_dev -> fail_reload ) {
980
975
/* For testing purposes, user set debugfs fail_reload
981
976
* value to true. Fail right away.
982
977
*/
983
978
NL_SET_ERR_MSG_MOD (extack , "User setup the reload to fail for testing purposes" );
984
- mutex_unlock ( & nsim_bus_dev -> nsim_bus_reload_lock );
979
+ devl_unlock ( devlink );
985
980
return - EINVAL ;
986
981
}
987
982
988
983
* actions_performed = BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT );
989
984
ret = nsim_dev_reload_create (nsim_dev , extack );
990
- mutex_unlock ( & nsim_bus_dev -> nsim_bus_reload_lock );
985
+ devl_unlock ( devlink );
991
986
return ret ;
992
987
}
993
988
@@ -1434,11 +1429,9 @@ static void nsim_dev_port_del_all(struct nsim_dev *nsim_dev)
1434
1429
{
1435
1430
struct nsim_dev_port * nsim_dev_port , * tmp ;
1436
1431
1437
- devl_lock (priv_to_devlink (nsim_dev ));
1438
1432
list_for_each_entry_safe (nsim_dev_port , tmp ,
1439
1433
& nsim_dev -> port_list , list )
1440
1434
__nsim_dev_port_del (nsim_dev_port );
1441
- devl_unlock (priv_to_devlink (nsim_dev ));
1442
1435
}
1443
1436
1444
1437
static int nsim_dev_port_add_all (struct nsim_dev * nsim_dev ,
@@ -1447,9 +1440,7 @@ static int nsim_dev_port_add_all(struct nsim_dev *nsim_dev,
1447
1440
int i , err ;
1448
1441
1449
1442
for (i = 0 ; i < port_count ; i ++ ) {
1450
- devl_lock (priv_to_devlink (nsim_dev ));
1451
1443
err = __nsim_dev_port_add (nsim_dev , NSIM_DEV_PORT_TYPE_PF , i );
1452
- devl_unlock (priv_to_devlink (nsim_dev ));
1453
1444
if (err )
1454
1445
goto err_port_del_all ;
1455
1446
}
@@ -1537,6 +1528,7 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
1537
1528
nsim_bus_dev -> initial_net , & nsim_bus_dev -> dev );
1538
1529
if (!devlink )
1539
1530
return - ENOMEM ;
1531
+ devl_lock (devlink );
1540
1532
nsim_dev = devlink_priv (devlink );
1541
1533
nsim_dev -> nsim_bus_dev = nsim_bus_dev ;
1542
1534
nsim_dev -> switch_id .id_len = sizeof (nsim_dev -> switch_id .id );
@@ -1555,7 +1547,7 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
1555
1547
GFP_KERNEL | __GFP_NOWARN );
1556
1548
if (!nsim_dev -> vfconfigs ) {
1557
1549
err = - ENOMEM ;
1558
- goto err_devlink_free ;
1550
+ goto err_devlink_unlock ;
1559
1551
}
1560
1552
1561
1553
err = nsim_dev_resources_register (devlink );
@@ -1608,6 +1600,7 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
1608
1600
1609
1601
nsim_dev -> esw_mode = DEVLINK_ESWITCH_MODE_LEGACY ;
1610
1602
devlink_set_features (devlink , DEVLINK_F_RELOAD );
1603
+ devl_unlock (devlink );
1611
1604
devlink_register (devlink );
1612
1605
return 0 ;
1613
1606
@@ -1631,10 +1624,11 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
1631
1624
devlink_params_unregister (devlink , nsim_devlink_params ,
1632
1625
ARRAY_SIZE (nsim_devlink_params ));
1633
1626
err_dl_unregister :
1634
- devlink_resources_unregister (devlink );
1627
+ devl_resources_unregister (devlink );
1635
1628
err_vfc_free :
1636
1629
kfree (nsim_dev -> vfconfigs );
1637
- err_devlink_free :
1630
+ err_devlink_unlock :
1631
+ devl_unlock (devlink );
1638
1632
devlink_free (devlink );
1639
1633
dev_set_drvdata (& nsim_bus_dev -> dev , NULL );
1640
1634
return err ;
@@ -1648,13 +1642,11 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev)
1648
1642
return ;
1649
1643
debugfs_remove (nsim_dev -> take_snapshot );
1650
1644
1651
- devl_lock (devlink );
1652
1645
if (nsim_dev_get_vfs (nsim_dev )) {
1653
1646
nsim_bus_dev_set_vfs (nsim_dev -> nsim_bus_dev , 0 );
1654
1647
if (nsim_esw_mode_is_switchdev (nsim_dev ))
1655
1648
nsim_esw_legacy_enable (nsim_dev , NULL );
1656
1649
}
1657
- devl_unlock (devlink );
1658
1650
1659
1651
nsim_dev_port_del_all (nsim_dev );
1660
1652
nsim_dev_hwstats_exit (nsim_dev );
@@ -1671,14 +1663,16 @@ void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev)
1671
1663
struct devlink * devlink = priv_to_devlink (nsim_dev );
1672
1664
1673
1665
devlink_unregister (devlink );
1666
+ devl_lock (devlink );
1674
1667
nsim_dev_reload_destroy (nsim_dev );
1675
1668
1676
1669
nsim_bpf_dev_exit (nsim_dev );
1677
1670
nsim_dev_debugfs_exit (nsim_dev );
1678
1671
devlink_params_unregister (devlink , nsim_devlink_params ,
1679
1672
ARRAY_SIZE (nsim_devlink_params ));
1680
- devlink_resources_unregister (devlink );
1673
+ devl_resources_unregister (devlink );
1681
1674
kfree (nsim_dev -> vfconfigs );
1675
+ devl_unlock (devlink );
1682
1676
devlink_free (devlink );
1683
1677
dev_set_drvdata (& nsim_bus_dev -> dev , NULL );
1684
1678
}
0 commit comments