aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/catas.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/main.c25
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4.h3
3 files changed, 23 insertions, 7 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/catas.c b/drivers/net/ethernet/mellanox/mlx4/catas.c
index 87e90b5d4d7d..5b11557f1ae4 100644
--- a/drivers/net/ethernet/mellanox/mlx4/catas.c
+++ b/drivers/net/ethernet/mellanox/mlx4/catas.c
@@ -210,7 +210,7 @@ static void mlx4_handle_error_state(struct mlx4_dev_persistent *persist)
210 mutex_lock(&persist->interface_state_mutex); 210 mutex_lock(&persist->interface_state_mutex);
211 if (persist->interface_state & MLX4_INTERFACE_STATE_UP && 211 if (persist->interface_state & MLX4_INTERFACE_STATE_UP &&
212 !(persist->interface_state & MLX4_INTERFACE_STATE_DELETION)) { 212 !(persist->interface_state & MLX4_INTERFACE_STATE_DELETION)) {
213 err = mlx4_restart_one(persist->pdev, false, NULL); 213 err = mlx4_restart_one(persist->pdev);
214 mlx4_info(persist->dev, "mlx4_restart_one was ended, ret=%d\n", 214 mlx4_info(persist->dev, "mlx4_restart_one was ended, ret=%d\n",
215 err); 215 err);
216 } 216 }
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 07c204bd3fc4..a39c647c12dc 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -3931,6 +3931,10 @@ static void mlx4_devlink_param_load_driverinit_values(struct devlink *devlink)
3931 } 3931 }
3932} 3932}
3933 3933
3934static void mlx4_restart_one_down(struct pci_dev *pdev);
3935static int mlx4_restart_one_up(struct pci_dev *pdev, bool reload,
3936 struct devlink *devlink);
3937
3934static int mlx4_devlink_reload(struct devlink *devlink, 3938static int mlx4_devlink_reload(struct devlink *devlink,
3935 struct netlink_ext_ack *extack) 3939 struct netlink_ext_ack *extack)
3936{ 3940{
@@ -3941,9 +3945,11 @@ static int mlx4_devlink_reload(struct devlink *devlink,
3941 3945
3942 if (persist->num_vfs) 3946 if (persist->num_vfs)
3943 mlx4_warn(persist->dev, "Reload performed on PF, will cause reset on operating Virtual Functions\n"); 3947 mlx4_warn(persist->dev, "Reload performed on PF, will cause reset on operating Virtual Functions\n");
3944 err = mlx4_restart_one(persist->pdev, true, devlink); 3948 mlx4_restart_one_down(persist->pdev);
3949 err = mlx4_restart_one_up(persist->pdev, true, devlink);
3945 if (err) 3950 if (err)
3946 mlx4_err(persist->dev, "mlx4_restart_one failed, ret=%d\n", err); 3951 mlx4_err(persist->dev, "mlx4_restart_one_up failed, ret=%d\n",
3952 err);
3947 3953
3948 return err; 3954 return err;
3949} 3955}
@@ -4163,7 +4169,13 @@ static int restore_current_port_types(struct mlx4_dev *dev,
4163 return err; 4169 return err;
4164} 4170}
4165 4171
4166int mlx4_restart_one(struct pci_dev *pdev, bool reload, struct devlink *devlink) 4172static void mlx4_restart_one_down(struct pci_dev *pdev)
4173{
4174 mlx4_unload_one(pdev);
4175}
4176
4177static int mlx4_restart_one_up(struct pci_dev *pdev, bool reload,
4178 struct devlink *devlink)
4167{ 4179{
4168 struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev); 4180 struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
4169 struct mlx4_dev *dev = persist->dev; 4181 struct mlx4_dev *dev = persist->dev;
@@ -4175,7 +4187,6 @@ int mlx4_restart_one(struct pci_dev *pdev, bool reload, struct devlink *devlink)
4175 total_vfs = dev->persist->num_vfs; 4187 total_vfs = dev->persist->num_vfs;
4176 memcpy(nvfs, dev->persist->nvfs, sizeof(dev->persist->nvfs)); 4188 memcpy(nvfs, dev->persist->nvfs, sizeof(dev->persist->nvfs));
4177 4189
4178 mlx4_unload_one(pdev);
4179 if (reload) 4190 if (reload)
4180 mlx4_devlink_param_load_driverinit_values(devlink); 4191 mlx4_devlink_param_load_driverinit_values(devlink);
4181 err = mlx4_load_one(pdev, pci_dev_data, total_vfs, nvfs, priv, 1); 4192 err = mlx4_load_one(pdev, pci_dev_data, total_vfs, nvfs, priv, 1);
@@ -4194,6 +4205,12 @@ int mlx4_restart_one(struct pci_dev *pdev, bool reload, struct devlink *devlink)
4194 return err; 4205 return err;
4195} 4206}
4196 4207
4208int mlx4_restart_one(struct pci_dev *pdev)
4209{
4210 mlx4_restart_one_down(pdev);
4211 return mlx4_restart_one_up(pdev, false, NULL);
4212}
4213
4197#define MLX_SP(id) { PCI_VDEVICE(MELLANOX, id), MLX4_PCI_DEV_FORCE_SENSE_PORT } 4214#define MLX_SP(id) { PCI_VDEVICE(MELLANOX, id), MLX4_PCI_DEV_FORCE_SENSE_PORT }
4198#define MLX_VF(id) { PCI_VDEVICE(MELLANOX, id), MLX4_PCI_DEV_IS_VF } 4215#define MLX_VF(id) { PCI_VDEVICE(MELLANOX, id), MLX4_PCI_DEV_IS_VF }
4199#define MLX_GN(id) { PCI_VDEVICE(MELLANOX, id), 0 } 4216#define MLX_GN(id) { PCI_VDEVICE(MELLANOX, id), 0 }
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
index 23f1b5b512c2..527b52e48276 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
@@ -1043,8 +1043,7 @@ int mlx4_catas_init(struct mlx4_dev *dev);
1043void mlx4_catas_end(struct mlx4_dev *dev); 1043void mlx4_catas_end(struct mlx4_dev *dev);
1044int mlx4_crdump_init(struct mlx4_dev *dev); 1044int mlx4_crdump_init(struct mlx4_dev *dev);
1045void mlx4_crdump_end(struct mlx4_dev *dev); 1045void mlx4_crdump_end(struct mlx4_dev *dev);
1046int mlx4_restart_one(struct pci_dev *pdev, bool reload, 1046int mlx4_restart_one(struct pci_dev *pdev);
1047 struct devlink *devlink);
1048int mlx4_register_device(struct mlx4_dev *dev); 1047int mlx4_register_device(struct mlx4_dev *dev);
1049void mlx4_unregister_device(struct mlx4_dev *dev); 1048void mlx4_unregister_device(struct mlx4_dev *dev);
1050void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type, 1049void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type,