I don't know the details of the bce driver, but presumably the interrupt handling is happening in the context of a software interrupt thread, where it is safe to take mutexes and rwlocks. You are only in interrupt context in a "fast" interrupt handler.