[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <419eea59adc7af954f98ac81ec41a7be9cc0d9bb.camel@sipsolutions.net>
Date: Fri, 30 Apr 2021 14:08:32 +0200
From: Johannes Berg <johannes@...solutions.net>
To: Nikolai Zhubr <zhubr.2@...il.com>,
Chris Snook <chris.snook@...il.com>, netdev@...r.kernel.org,
nic-devel@...lcomm.com
Subject: Re: A problem with "ip=..." ipconfig and Atheros alx driver.
Hi Nikolai,
Wow - old code. And yet I'm still even using the device. Time to replace
the system that has it ;-)
> Now, after debugging it a little bit more, I've apparently found the
> root cause. One can see in net/ipv4/ipconfig.c that ic_open_devs() tries
> to ensure carrier is physically present. But before opening device(s)
> and starting wait for the carrier, it calls rtnl_lock(). Now in
> ethernet/atheros/alx/main.c one can see that at opening, it first calls
> netif_carrier_off() then schedules alx_link_check() to do actual work,
> so carrier detection is supposed to happen a bit later. Now looking at
> this alx_link_check() carefully, first thing is does is rtnl_lock().
> Bingo! Double-lock. Effectively actual carrier check in alx is therefore
> delayed just until ic_open_devs() gave up waiting for it and called
> rtnl_unlock(). Hence this delay and timeout.
Fun. But we can just do it synchronously?
https://p.sipsolutions.net/e4f076ed1b4c8a78.txt
johannes
Powered by blists - more mailing lists