If multiple packets are written quickly and the high watermark is exceeded, then the -EAGAIN return code is returned (A) and the code is checked and the tx processing is throttled (B) until a low-watermark notification is received (C). If the packet queue is drained and the low-watermark notification is delivered between steps (A) and (B), then the order of events will be ACB and the tx queue will be permanently stalled. To fix this, a spinlock is held to ensure that the sequence is always either ABC. CRs-Fixed: 401544 Signed-off-by: Eric Holmberg <eholmber@codeaurora.org> (cherry picked from commit cb24b09ebcf924b43e14cfbf78dcc29c98f3a79b) Change-Id: I729333f7d6cf7f0c1b39518705571b744ee4b924 Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>