I want you to review all of your patches and resend them after you
have checked them carefully.
The first patch I even looked at, this one, is buggy.
You changed a schedule_timeout_interruptible(1) into a udelay(10)
That's not right.
schedule_timeout_interruptible() takes a "jiffies" argument, which
is a completely different unit than udelay() takes. You would have
to scale the argument to udelay() in some way using HZ.
Furthermore, the udelay argument you would come up with would
be way too long to be appropirate in this atomic context.
That's why the code tries to use a sleeping timeout, a long wait is
necessary here.