Skip to content

Commit a80d1b6

Browse files
author
Saeed Mahameed
committed
net/mlx5: Break load_one into three stages
Using foundation from previous patches to factor mlx5_load_one flow into three stages: 1. mlx5_function_setup() from previous patch to setup function 2. mlx5_init_once() from previous patch to init software objects according to hw caps 3. New mlx5_load() to load mlx5 components This provides a better logical separation of mlx5 core device initialization flow and will help to seamlessly support creating different mlx5 device types such as PF, VF and SF mlx5 sub-function virtual device. This patch does not change any functionality. Signed-off-by: Vu Pham <vuhuong@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
1 parent e161105 commit a80d1b6

File tree

1 file changed

+77
-71
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+77
-71
lines changed

drivers/net/ethernet/mellanox/mlx5/core/main.c

Lines changed: 77 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -918,6 +918,13 @@ static int mlx5_function_setup(struct mlx5_core_dev *dev, bool boot)
918918
struct pci_dev *pdev = dev->pdev;
919919
int err;
920920

921+
dev_info(&pdev->dev, "firmware version: %d.%d.%d\n", fw_rev_maj(dev),
922+
fw_rev_min(dev), fw_rev_sub(dev));
923+
924+
/* Only PFs hold the relevant PCIe information for this query */
925+
if (mlx5_core_is_pf(dev))
926+
pcie_print_link_status(dev->pdev);
927+
921928
/* wait for firmware to accept initialization segments configurations
922929
*/
923930
err = wait_fw_init(dev, FW_PRE_INIT_TIMEOUT_MILI);
@@ -1023,48 +1030,16 @@ static int mlx5_function_teardown(struct mlx5_core_dev *dev, bool boot)
10231030
return 0;
10241031
}
10251032

1026-
static int mlx5_load_one(struct mlx5_core_dev *dev, bool boot)
1033+
static int mlx5_load(struct mlx5_core_dev *dev)
10271034
{
10281035
struct pci_dev *pdev = dev->pdev;
10291036
int err;
10301037

1031-
dev->caps.embedded_cpu = mlx5_read_embedded_cpu(dev);
1032-
mutex_lock(&dev->intf_state_mutex);
1033-
if (test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) {
1034-
dev_warn(&dev->pdev->dev, "%s: interface is up, NOP\n",
1035-
__func__);
1036-
goto out;
1037-
}
1038-
1039-
dev_info(&pdev->dev, "firmware version: %d.%d.%d\n", fw_rev_maj(dev),
1040-
fw_rev_min(dev), fw_rev_sub(dev));
1041-
1042-
/* Only PFs hold the relevant PCIe information for this query */
1043-
if (mlx5_core_is_pf(dev))
1044-
pcie_print_link_status(dev->pdev);
1045-
1046-
/* on load removing any previous indication of internal error, device is
1047-
* up
1048-
*/
1049-
dev->state = MLX5_DEVICE_STATE_UP;
1050-
1051-
err = mlx5_function_setup(dev, boot);
1052-
if (err)
1053-
goto out;
1054-
1055-
if (boot) {
1056-
err = mlx5_init_once(dev);
1057-
if (err) {
1058-
dev_err(&pdev->dev, "sw objs init failed\n");
1059-
goto function_teardown;
1060-
}
1061-
}
1062-
10631038
dev->priv.uar = mlx5_get_uars_page(dev);
10641039
if (IS_ERR(dev->priv.uar)) {
10651040
dev_err(&pdev->dev, "Failed allocating uar, aborting\n");
10661041
err = PTR_ERR(dev->priv.uar);
1067-
goto err_get_uars;
1042+
return err;
10681043
}
10691044

10701045
mlx5_events_start(dev);
@@ -1124,55 +1099,95 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, bool boot)
11241099
goto err_ec;
11251100
}
11261101

1127-
if (mlx5_device_registered(dev)) {
1128-
mlx5_attach_device(dev);
1129-
} else {
1130-
err = mlx5_register_device(dev);
1131-
if (err) {
1132-
dev_err(&pdev->dev, "mlx5_register_device failed %d\n", err);
1133-
goto err_reg_dev;
1134-
}
1135-
}
1136-
1137-
set_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
1138-
out:
1139-
mutex_unlock(&dev->intf_state_mutex);
1140-
11411102
return 0;
11421103

1143-
err_reg_dev:
1144-
mlx5_ec_cleanup(dev);
1145-
11461104
err_ec:
11471105
mlx5_sriov_detach(dev);
1148-
11491106
err_sriov:
11501107
mlx5_cleanup_fs(dev);
1151-
11521108
err_fs:
11531109
mlx5_accel_tls_cleanup(dev);
1154-
11551110
err_tls_start:
11561111
mlx5_accel_ipsec_cleanup(dev);
1157-
11581112
err_ipsec_start:
11591113
mlx5_fpga_device_stop(dev);
1160-
11611114
err_fpga_start:
11621115
mlx5_fw_tracer_cleanup(dev->tracer);
1163-
11641116
err_fw_tracer:
11651117
mlx5_eq_table_destroy(dev);
1166-
11671118
err_eq_table:
11681119
mlx5_pagealloc_stop(dev);
11691120
mlx5_events_stop(dev);
11701121
mlx5_put_uars_page(dev, dev->priv.uar);
1122+
return err;
1123+
}
1124+
1125+
static void mlx5_unload(struct mlx5_core_dev *dev)
1126+
{
1127+
mlx5_ec_cleanup(dev);
1128+
mlx5_sriov_detach(dev);
1129+
mlx5_cleanup_fs(dev);
1130+
mlx5_accel_ipsec_cleanup(dev);
1131+
mlx5_accel_tls_cleanup(dev);
1132+
mlx5_fpga_device_stop(dev);
1133+
mlx5_fw_tracer_cleanup(dev->tracer);
1134+
mlx5_eq_table_destroy(dev);
1135+
mlx5_pagealloc_stop(dev);
1136+
mlx5_events_stop(dev);
1137+
mlx5_put_uars_page(dev, dev->priv.uar);
1138+
}
1139+
1140+
static int mlx5_load_one(struct mlx5_core_dev *dev, bool boot)
1141+
{
1142+
struct pci_dev *pdev = dev->pdev;
1143+
int err = 0;
1144+
1145+
dev->caps.embedded_cpu = mlx5_read_embedded_cpu(dev);
1146+
mutex_lock(&dev->intf_state_mutex);
1147+
if (test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) {
1148+
mlx5_core_warn(dev, "interface is up, NOP\n");
1149+
goto out;
1150+
}
1151+
/* remove any previous indication of internal error */
1152+
dev->state = MLX5_DEVICE_STATE_UP;
1153+
1154+
err = mlx5_function_setup(dev, boot);
1155+
if (err)
1156+
goto out;
1157+
1158+
if (boot) {
1159+
err = mlx5_init_once(dev);
1160+
if (err) {
1161+
dev_err(&pdev->dev, "sw objs init failed\n");
1162+
goto function_teardown;
1163+
}
1164+
}
1165+
1166+
err = mlx5_load(dev);
1167+
if (err)
1168+
goto err_load;
1169+
1170+
if (mlx5_device_registered(dev)) {
1171+
mlx5_attach_device(dev);
1172+
} else {
1173+
err = mlx5_register_device(dev);
1174+
if (err) {
1175+
dev_err(&pdev->dev, "register device failed %d\n", err);
1176+
goto err_reg_dev;
1177+
}
1178+
}
1179+
1180+
set_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
1181+
out:
1182+
mutex_unlock(&dev->intf_state_mutex);
11711183

1172-
err_get_uars:
1184+
return err;
1185+
1186+
err_reg_dev:
1187+
mlx5_unload(dev);
1188+
err_load:
11731189
if (boot)
11741190
mlx5_cleanup_once(dev);
1175-
11761191
function_teardown:
11771192
mlx5_function_teardown(dev, boot);
11781193
dev->state = MLX5_DEVICE_STATE_INTERNAL_ERROR;
@@ -1202,17 +1217,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, bool cleanup)
12021217
if (mlx5_device_registered(dev))
12031218
mlx5_detach_device(dev);
12041219

1205-
mlx5_ec_cleanup(dev);
1206-
mlx5_sriov_detach(dev);
1207-
mlx5_cleanup_fs(dev);
1208-
mlx5_accel_ipsec_cleanup(dev);
1209-
mlx5_accel_tls_cleanup(dev);
1210-
mlx5_fpga_device_stop(dev);
1211-
mlx5_fw_tracer_cleanup(dev->tracer);
1212-
mlx5_eq_table_destroy(dev);
1213-
mlx5_pagealloc_stop(dev);
1214-
mlx5_events_stop(dev);
1215-
mlx5_put_uars_page(dev, dev->priv.uar);
1220+
mlx5_unload(dev);
1221+
12161222
if (cleanup)
12171223
mlx5_cleanup_once(dev);
12181224

0 commit comments

Comments
 (0)