On Tue, Feb 02, 2016 at 09:14:06AM +0100, Stefan Sperling wrote: > On Sat, Jan 30, 2016 at 10:49:38PM +1300, Richard Procter wrote: > > + atomic_add_int(&ring->queued, ntxds); > > + /* XXX card may interrupt here and invalidate this guard; the > > You can easily prevent the card from interrupting by making rt2860_tx() > call splnet() before modifying data shared with the interrupt handler. > I think that's the real bug you're looking for. > Could you try that and send an updated diff if it works?
Hmm. Taking a closer look, if_start() is already called under splnet. So adding splnet to rt2860_tx() shouldn't make a difference. This also means the card cannot interrupt in the way your comment describes, i.e. the problem you're "fixing" here cannot exist... ?