Re: [PATCH] ethtool: Report speed and duplex as unknown when device is runtime suspended

From: Kai-Heng Feng
Date: Thu Mar 26 2020 - 23:11:25 EST




> On Mar 27, 2020, at 10:56, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote:
>
>
>
> On 3/26/2020 7:45 PM, Kai-Heng Feng wrote:
>> Device like igb 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 directly report the speed and duplex as unknown.
>>
>> Cc: Jeff Kirsher <jeffrey.t.kirsher@xxxxxxxxx>
>> Cc: Aaron Brown <aaron.f.brown@xxxxxxxxx>
>> Suggested-by: Alexander Duyck <alexander.duyck@xxxxxxxxx>
>> Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
>
> I would push this to the responsibility of the various drivers instead
> of making this part of the standard ethtool implementation.

My original approach [1] is to ask device to runtime resume before calling __ethtool_get_link_ksettings().
Unfortunately it will cause a deadlock if the runtime resume routine wants to hold rtnl_lock.

However, it should be totally fine (and sometimes necessary) to be able to hold rtnl_lock in runtime resume routine as Alexander explained [2].
As suggested, this patch handles the situation directly in __ethtool_get_link_ksettings().

[1] https://lore.kernel.org/lkml/20200207101005.4454-2-kai.heng.feng@xxxxxxxxxxxxx/
[2] https://lkml.org/lkml/2020/3/26/989

Kai-Heng

> --
> Florian