[Cc: [email protected]]
Dear Vitaly,
Thank you for your patch.
Am 05.06.25 um 09:06 schrieb Vitaly Lifshits:
I226 devices advertise support for the PCI-E link L1.2 substate. However,
due to a hardware limitation, the exit latency from this low-power state
is longer than the packet buffer can tolerate under high traffic
conditions. This can lead to packet loss and degraded performance.
It’d be great if you could add details about the exit latency times.
Despite, you referencing some of the problem report in the Link: tag,
that message is badly formatted, as lines are wrapped. As you have the
details about the problem currently in your had, it’d be great if you
added the report details too. Another advantage is, that the commit
message would be self-contained, and people would get more idea about it
without requiring Internet access or loading an HTML page.
To mitigate this, disable the L1.2 substate during both probe and resume
flows.
Were you able to reproduce the problem or only the reporter?
Link:
https://lore.kernel.org/intel-wired-lan/[email protected]
Signed-off-by: Vitaly Lifshits <[email protected]>
Fixes: 43546211738e ("igc: Add new device ID's")
---
drivers/net/ethernet/intel/igc/igc_main.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c
b/drivers/net/ethernet/intel/igc/igc_main.c
index 27575a1e1777..65ec705eac33 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -7074,6 +7074,8 @@ static int igc_probe(struct pci_dev *pdev,
const struct igc_info *ei = igc_info_tbl[ent->driver_data];
int err;
+ pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
+
Aren’t you disabling this unconditionally now? Also, a comment would be
nice, why this is disabled.
err = pci_enable_device_mem(pdev);
if (err)
return err;
@@ -7498,6 +7500,8 @@ static int __igc_resume(struct device *dev, bool rpm)
pci_enable_wake(pdev, PCI_D3hot, 0);
pci_enable_wake(pdev, PCI_D3cold, 0);ValdikSS <[email protected].
+ pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
+
if (igc_init_interrupt_scheme(adapter, true)) {
netdev_err(netdev, "Unable to allocate memory for queues\n");
return -ENOMEM;
@@ -7623,6 +7627,7 @@ static pci_ers_result_t igc_io_slot_reset(struct pci_dev
*pdev)
pci_enable_wake(pdev, PCI_D3hot, 0);
pci_enable_wake(pdev, PCI_D3cold, 0);
+ pci_disable_link_state_locked(pdev, PCIE_LINK_STATE_L1_2);
/* In case of PCI error, adapter loses its HW address
* so we should re-assign it here.
*/
Kind regards,
Paul