@@ -3033,7 +3033,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
30333033 struct mlx4_port_info * info = & mlx4_priv (dev )-> port [port ];
30343034 int err ;
30353035
3036- err = devlink_port_register (devlink , & info -> devlink_port , port );
3036+ err = devl_port_register (devlink , & info -> devlink_port , port );
30373037 if (err )
30383038 return err ;
30393039
@@ -3071,7 +3071,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
30713071 err = device_create_file (& dev -> persist -> pdev -> dev , & info -> port_attr );
30723072 if (err ) {
30733073 mlx4_err (dev , "Failed to create file for port %d\n" , port );
3074- devlink_port_unregister (& info -> devlink_port );
3074+ devl_port_unregister (& info -> devlink_port );
30753075 info -> port = -1 ;
30763076 return err ;
30773077 }
@@ -3093,7 +3093,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
30933093 mlx4_err (dev , "Failed to create mtu file for port %d\n" , port );
30943094 device_remove_file (& info -> dev -> persist -> pdev -> dev ,
30953095 & info -> port_attr );
3096- devlink_port_unregister (& info -> devlink_port );
3096+ devl_port_unregister (& info -> devlink_port );
30973097 info -> port = -1 ;
30983098 return err ;
30993099 }
@@ -3109,7 +3109,7 @@ static void mlx4_cleanup_port_info(struct mlx4_port_info *info)
31093109 device_remove_file (& info -> dev -> persist -> pdev -> dev , & info -> port_attr );
31103110 device_remove_file (& info -> dev -> persist -> pdev -> dev ,
31113111 & info -> port_mtu_attr );
3112- devlink_port_unregister (& info -> devlink_port );
3112+ devl_port_unregister (& info -> devlink_port );
31133113
31143114#ifdef CONFIG_RFS_ACCEL
31153115 free_irq_cpu_rmap (info -> rmap );
@@ -3333,6 +3333,7 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,
33333333 int total_vfs , int * nvfs , struct mlx4_priv * priv ,
33343334 int reset_flow )
33353335{
3336+ struct devlink * devlink = priv_to_devlink (priv );
33363337 struct mlx4_dev * dev ;
33373338 unsigned sum = 0 ;
33383339 int err ;
@@ -3341,6 +3342,7 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,
33413342 struct mlx4_dev_cap * dev_cap = NULL ;
33423343 int existing_vfs = 0 ;
33433344
3345+ devl_assert_locked (devlink );
33443346 dev = & priv -> dev ;
33453347
33463348 INIT_LIST_HEAD (& priv -> ctx_list );
@@ -3999,6 +4001,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
39994001 devlink = devlink_alloc (& mlx4_devlink_ops , sizeof (* priv ), & pdev -> dev );
40004002 if (!devlink )
40014003 return - ENOMEM ;
4004+ devl_lock (devlink );
40024005 priv = devlink_priv (devlink );
40034006
40044007 dev = & priv -> dev ;
@@ -4026,6 +4029,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
40264029
40274030 pci_save_state (pdev );
40284031 devlink_set_features (devlink , DEVLINK_F_RELOAD );
4032+ devl_unlock (devlink );
40294033 devlink_register (devlink );
40304034 return 0 ;
40314035
@@ -4035,6 +4039,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
40354039err_devlink_unregister :
40364040 kfree (dev -> persist );
40374041err_devlink_free :
4042+ devl_unlock (devlink );
40384043 devlink_free (devlink );
40394044 return ret ;
40404045}
@@ -4056,8 +4061,11 @@ static void mlx4_unload_one(struct pci_dev *pdev)
40564061 struct mlx4_dev * dev = persist -> dev ;
40574062 struct mlx4_priv * priv = mlx4_priv (dev );
40584063 int pci_dev_data ;
4064+ struct devlink * devlink ;
40594065 int p , i ;
40604066
4067+ devlink = priv_to_devlink (priv );
4068+ devl_assert_locked (devlink );
40614069 if (priv -> removed )
40624070 return ;
40634071
@@ -4137,6 +4145,7 @@ static void mlx4_remove_one(struct pci_dev *pdev)
41374145
41384146 devlink_unregister (devlink );
41394147
4148+ devl_lock (devlink );
41404149 if (mlx4_is_slave (dev ))
41414150 persist -> interface_state |= MLX4_INTERFACE_STATE_NOWAIT ;
41424151
@@ -4172,6 +4181,7 @@ static void mlx4_remove_one(struct pci_dev *pdev)
41724181 devlink_params_unregister (devlink , mlx4_devlink_params ,
41734182 ARRAY_SIZE (mlx4_devlink_params ));
41744183 kfree (dev -> persist );
4184+ devl_unlock (devlink );
41754185 devlink_free (devlink );
41764186}
41774187
@@ -4292,15 +4302,20 @@ static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev,
42924302 pci_channel_state_t state )
42934303{
42944304 struct mlx4_dev_persistent * persist = pci_get_drvdata (pdev );
4305+ struct mlx4_dev * dev = persist -> dev ;
4306+ struct devlink * devlink ;
42954307
42964308 mlx4_err (persist -> dev , "mlx4_pci_err_detected was called\n" );
42974309 mlx4_enter_error_state (persist );
42984310
4311+ devlink = priv_to_devlink (mlx4_priv (dev ));
4312+ devl_lock (devlink );
42994313 mutex_lock (& persist -> interface_state_mutex );
43004314 if (persist -> interface_state & MLX4_INTERFACE_STATE_UP )
43014315 mlx4_unload_one (pdev );
43024316
43034317 mutex_unlock (& persist -> interface_state_mutex );
4318+ devl_unlock (devlink );
43044319 if (state == pci_channel_io_perm_failure )
43054320 return PCI_ERS_RESULT_DISCONNECT ;
43064321
@@ -4333,13 +4348,16 @@ static void mlx4_pci_resume(struct pci_dev *pdev)
43334348 struct mlx4_dev * dev = persist -> dev ;
43344349 struct mlx4_priv * priv = mlx4_priv (dev );
43354350 int nvfs [MLX4_MAX_PORTS + 1 ] = {0 , 0 , 0 };
4351+ struct devlink * devlink ;
43364352 int total_vfs ;
43374353 int err ;
43384354
43394355 mlx4_err (dev , "%s was called\n" , __func__ );
43404356 total_vfs = dev -> persist -> num_vfs ;
43414357 memcpy (nvfs , dev -> persist -> nvfs , sizeof (dev -> persist -> nvfs ));
43424358
4359+ devlink = priv_to_devlink (priv );
4360+ devl_lock (devlink );
43434361 mutex_lock (& persist -> interface_state_mutex );
43444362 if (!(persist -> interface_state & MLX4_INTERFACE_STATE_UP )) {
43454363 err = mlx4_load_one (pdev , priv -> pci_dev_data , total_vfs , nvfs ,
@@ -4358,19 +4376,23 @@ static void mlx4_pci_resume(struct pci_dev *pdev)
43584376 }
43594377end :
43604378 mutex_unlock (& persist -> interface_state_mutex );
4361-
4379+ devl_unlock ( devlink );
43624380}
43634381
43644382static void mlx4_shutdown (struct pci_dev * pdev )
43654383{
43664384 struct mlx4_dev_persistent * persist = pci_get_drvdata (pdev );
43674385 struct mlx4_dev * dev = persist -> dev ;
4386+ struct devlink * devlink ;
43684387
43694388 mlx4_info (persist -> dev , "mlx4_shutdown was called\n" );
4389+ devlink = priv_to_devlink (mlx4_priv (dev ));
4390+ devl_lock (devlink );
43704391 mutex_lock (& persist -> interface_state_mutex );
43714392 if (persist -> interface_state & MLX4_INTERFACE_STATE_UP )
43724393 mlx4_unload_one (pdev );
43734394 mutex_unlock (& persist -> interface_state_mutex );
4395+ devl_unlock (devlink );
43744396 mlx4_pci_disable_device (dev );
43754397}
43764398
@@ -4385,12 +4407,16 @@ static int __maybe_unused mlx4_suspend(struct device *dev_d)
43854407 struct pci_dev * pdev = to_pci_dev (dev_d );
43864408 struct mlx4_dev_persistent * persist = pci_get_drvdata (pdev );
43874409 struct mlx4_dev * dev = persist -> dev ;
4410+ struct devlink * devlink ;
43884411
43894412 mlx4_err (dev , "suspend was called\n" );
4413+ devlink = priv_to_devlink (mlx4_priv (dev ));
4414+ devl_lock (devlink );
43904415 mutex_lock (& persist -> interface_state_mutex );
43914416 if (persist -> interface_state & MLX4_INTERFACE_STATE_UP )
43924417 mlx4_unload_one (pdev );
43934418 mutex_unlock (& persist -> interface_state_mutex );
4419+ devl_unlock (devlink );
43944420
43954421 return 0 ;
43964422}
@@ -4402,13 +4428,16 @@ static int __maybe_unused mlx4_resume(struct device *dev_d)
44024428 struct mlx4_dev * dev = persist -> dev ;
44034429 struct mlx4_priv * priv = mlx4_priv (dev );
44044430 int nvfs [MLX4_MAX_PORTS + 1 ] = {0 , 0 , 0 };
4431+ struct devlink * devlink ;
44054432 int total_vfs ;
44064433 int ret = 0 ;
44074434
44084435 mlx4_err (dev , "resume was called\n" );
44094436 total_vfs = dev -> persist -> num_vfs ;
44104437 memcpy (nvfs , dev -> persist -> nvfs , sizeof (dev -> persist -> nvfs ));
44114438
4439+ devlink = priv_to_devlink (priv );
4440+ devl_lock (devlink );
44124441 mutex_lock (& persist -> interface_state_mutex );
44134442 if (!(persist -> interface_state & MLX4_INTERFACE_STATE_UP )) {
44144443 ret = mlx4_load_one (pdev , priv -> pci_dev_data , total_vfs ,
@@ -4422,6 +4451,7 @@ static int __maybe_unused mlx4_resume(struct device *dev_d)
44224451 }
44234452 }
44244453 mutex_unlock (& persist -> interface_state_mutex );
4454+ devl_unlock (devlink );
44254455
44264456 return ret ;
44274457}
0 commit comments