On Thu, Jul 06, 2023 at 01:54:35PM +0000, Haiyang Zhang wrote:
quoted
This waiting loop is needed to let the pending Tx packets be sent. If
they weren't sent in 1 second, it most likely makes no sense already
whether they will be sent at all or not -- the destination host won't
wait for them for so long.
You say that it may happen only in case of HW issue. If so, I assume you
need to fix it some way, e.g. do a HW reset or so? If so, why bother
waiting for Tx completions if Tx is hung? You free all skbs later either
way, so there are no leaks.
At that point, we don't actually care if the pending packets are sent or not.
But if we free the queues too soon, and the HW is slow for unexpected
reasons, a delayed completion notice will DMA into the freed memory and
cause corruption. That's why we have a longer waiting time.
Aieiiie that is a horrible HW design to not have a strong fence of DMA.
"just wait and hope the HW doesn't UAF the kernel with DMA" is really
awful.
Jason