Hi, I took a quick look at this code and I saw some strange things with locking... eg : spin_lock_irqsave(&priv->slock, flags); spin_unlock_irqrestore(&priv->slock, flags); I didn't investigate further but I don't think all this runs in interrupt context. And this lock is not meant to do this. ...And justice for all