> From: Kai-Heng Feng <[email protected]> > Sent: Monday, May 4, 2020 9:02 PM > To: Kirsher, Jeffrey T <[email protected]> > Cc: Kai-Heng Feng <[email protected]>; Brown, Aaron F > <[email protected]>; David S. Miller <[email protected]>; > moderated list:INTEL ETHERNET DRIVERS <[email protected]>; > open list:NETWORKING DRIVERS <[email protected]>; open list <linux- > [email protected]> > Subject: [PATCH v2] igb: Report speed and duplex as unknown when device is > runtime suspended > > igb device gets runtime suspended when there's no link partner. We can't > get correct speed under that state: > $ cat /sys/class/net/enp3s0/speed > 1000 > > In addition to that, an error can also be spotted in dmesg: > [ 385.991957] igb 0000:03:00.0 enp3s0: PCIe link lost > > Since device can only be runtime suspended when there's no link partner, > we can skip reading register and let the following logic set speed and > duplex with correct status. > > The more generic approach will be wrap get_link_ksettings() with begin() > and complete() callbacks. However, for this particular issue, begin() > calls igb_runtime_resume() , which tries to rtnl_lock() while the lock > is already hold by upper ethtool layer. > > So let's take this approach until the igb_runtime_resume() no longer > needs to hold rtnl_lock. > > Cc: Jeff Kirsher <[email protected]> > Cc: Aaron Brown <[email protected]> > Suggested-by: Alexander Duyck <[email protected]> > Signed-off-by: Kai-Heng Feng <[email protected]> > --- > v2: > - Don't early return the routine so other info can be set. > > drivers/net/ethernet/intel/igb/igb_ethtool.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > Tested-by: Aaron Brown <[email protected]>

