[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200901061251.41628.arvidjaar@mail.ru>
Date: Tue, 6 Jan 2009 12:51:39 +0300
From: Andrey Borzenkov <arvidjaar@...l.ru>
To: Dave <kilroyd@...glemail.com>
Cc: orinoco-devel@...ts.sourceforge.net,
linux-wireless@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: 2.6.28: warn_slowpath in orinoco receive path
On Понедельник 05 января 2009 23:32:13 Dave wrote:
> Looks like the RX interrupt occurred at an inconvenient point during
> the list_del call in the RX tasklet (orinoco_rx_isr_tasklet).
>
> The call needs to be protected from the RX interrupt.
>
> Quick patch included below - I'm not sure that the local_irq_*
> functions are the ones we need, but it compiles and runs.
>
As was already pointed out, we can't be sure tasklet runs on the same
CPU as interrupt handler. What about attached patch? It actually moves
list to temporary head which can be processed without races; the idea is
to minimize amount and number of times we need to disable interrupts.
Patch compiles and runs :)
> I don't suppose you're able to reproduce the error?
>
Right.
By the way. Agere driver takes different approach. The only thing it
does in interrupt handler directly is to turn off Hermes interrupts and
start off another thread to process pending events. After all events are
processed interrupts are enabled again. It means the bulk of code is
executed in non-interrupt context; and looking how much is done in
orinoco driver during interrupt processing, this does not sound like bad
idea. Do you see any obvious cons here?
Download attachment "orinoco-rx_list-protect" of type "message/rfc822" (4493 bytes)
Powered by blists - more mailing lists