There is no BUG_ON in the code path where your stack trace comes from.
Unfortunately you omitted the interesting part of the message, which
is printed _before_ the stack trace:
"BUG: scheduling while atomic: .....
Sorry, I do not understand what you mean.
When you use rt you won't be in that code path. -rt uses the
preemptible BKL implementation.
That's ok, when we the task is preempted here. lock_depth needs to be
set to -1 before we call down() and it is restored
afterwards. preempt_schedule_irq() handles the BKL in the right way.
Thanks,
tglx
--