Skip to content

Commit 3d7a3f2

Browse files
mosheshemesh2Saeed Mahameed
authored andcommitted
net/mlx5: Nack sync reset request when HotPlug is enabled
Current sync reset flow is not supported when PCIe bridge connected directly to mlx5 device has HotPlug interrupt enabled and can be triggered on link state change event. Return nack on reset request in such case. Fixes: 92501fa ("net/mlx5: Ack on sync_reset_request only if PF can do reset_now") Signed-off-by: Moshe Shemesh <[email protected]> Reviewed-by: Shay Drory <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent ccbe330 commit 3d7a3f2

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,29 @@ static void mlx5_fw_live_patch_event(struct work_struct *work)
325325
mlx5_core_err(dev, "Failed to reload FW tracer\n");
326326
}
327327

328+
#if IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE)
329+
static int mlx5_check_hotplug_interrupt(struct mlx5_core_dev *dev)
330+
{
331+
struct pci_dev *bridge = dev->pdev->bus->self;
332+
u16 reg16;
333+
int err;
334+
335+
if (!bridge)
336+
return -EOPNOTSUPP;
337+
338+
err = pcie_capability_read_word(bridge, PCI_EXP_SLTCTL, &reg16);
339+
if (err)
340+
return err;
341+
342+
if ((reg16 & PCI_EXP_SLTCTL_HPIE) && (reg16 & PCI_EXP_SLTCTL_DLLSCE)) {
343+
mlx5_core_warn(dev, "FW reset is not supported as HotPlug is enabled\n");
344+
return -EOPNOTSUPP;
345+
}
346+
347+
return 0;
348+
}
349+
#endif
350+
328351
static int mlx5_check_dev_ids(struct mlx5_core_dev *dev, u16 dev_id)
329352
{
330353
struct pci_bus *bridge_bus = dev->pdev->bus;
@@ -357,6 +380,12 @@ static bool mlx5_is_reset_now_capable(struct mlx5_core_dev *dev)
357380
return false;
358381
}
359382

383+
#if IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE)
384+
err = mlx5_check_hotplug_interrupt(dev);
385+
if (err)
386+
return false;
387+
#endif
388+
360389
err = pci_read_config_word(dev->pdev, PCI_DEVICE_ID, &dev_id);
361390
if (err)
362391
return false;

0 commit comments

Comments
 (0)