[RFC PATCH 1/2] mtd: nand: schedule() after releasing the device
Peter Zijlstra
peterz at infradead.org
Mon Nov 23 13:18:11 EST 2015
On Mon, Nov 23, 2015 at 07:09:06PM +0100, Sebastian Andrzej Siewior wrote:
> /* Release the controller and the chip */
> spin_lock(&chip->controller->lock);
> chip->controller->active = NULL;
> chip->state = FL_READY;
> + /*
> + * Check if we have a waiter. If so we will schedule() right away so the
> + * waiter can grab the device while it is released and not after _this_
> + * caller gained the device (again) without leaving the CPU in between.
> + */
> + if (waitqueue_active(&chip->controller->wq))
> + do_sched = true;
> wake_up(&chip->controller->wq);
> spin_unlock(&chip->controller->lock);
> + if (do_sched)
> + schedule();
I've not looked at the code, but this _cannot_ be a correct fix.
schedule() can be a no-op, that is, current can be the most eligible
task to run and be selected again.
(with FIFO and this the highest prio task in the system that is a
guarantee)
I'll try and have an actual look at the problem description later.
More information about the linux-mtd
mailing list