Files
odroid-linux/include/linux
Boris Brezillon 013e6292aa mtd: rawnand: Simplify the locking
nand_get_device() was complex for apparently no good reason. Let's
replace this locking scheme with 2 mutexes: one attached to the
controller and another one attached to the chip.

Every time the core calls nand_get_device(), it will first lock the
chip and if the chip is not suspended, will then lock the controller.
nand_release_device() will release both lock in the reverse order.

nand_get_device() can sleep, just like the previous implementation,
which means you should never call that from an atomic context.

We also get rid of

- the chip->state field, since all it was used for was flagging the
  chip as suspended. We replace it by a field called chip->suspended
  and directly set it from nand_suspend/resume()
- the controller->wq and controller->active fields which are no longer
  needed since the new controller->lock (now a mutex) guarantees that
  all operations are serialized at the controller level
- panic_nand_get_device() which would anyway be a no-op. Talking about
  panic write, I keep thinking the rawnand implementation is unsafe
  because there's not negotiation with the controller to know when it's
  actually done with it's previous operation. I don't intend to fix
  that here, but that's probably something we should look at, or maybe
  we should consider dropping the ->_panic_write() implementation

Last important change to mention: we now return -EBUSY when someone
tries to access a device that as been suspended, and propagate this
error to the upper layer.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2019-02-05 15:39:40 +01:00
..
2018-11-14 10:56:33 -08:00
2018-12-11 09:57:47 -08:00
2018-10-16 11:13:50 +02:00
2018-11-12 10:33:49 +01:00
2019-02-05 15:39:40 +01:00
2018-11-26 18:41:21 -05:00
2018-12-07 22:26:38 -07:00
2018-12-18 17:50:47 +01:00
2018-11-07 13:44:59 -07:00
2018-11-07 13:44:59 -07:00
2018-12-18 17:50:47 +01:00
2018-10-19 13:24:31 -07:00
2018-12-03 17:40:18 +01:00
2018-11-13 21:55:24 +01:00
2018-12-20 19:13:07 +01:00
2018-12-19 10:42:08 +01:00
2018-12-28 16:55:46 -08:00
2018-12-28 12:11:52 -08:00
2018-12-10 09:22:34 +01:00
2018-11-10 08:03:52 -07:00
2018-10-21 10:46:33 -04:00
2018-12-07 12:59:08 -08:00
2018-11-07 13:42:32 -07:00
2018-11-19 19:03:46 -07:00
2018-12-06 13:57:03 +01:00
2018-11-30 13:29:04 +00:00
2019-01-04 13:13:48 -08:00
2019-01-04 13:13:48 -08:00
2018-10-17 13:56:58 -07:00
2018-12-13 09:58:57 +01:00
2018-12-06 15:45:46 +01:00
2018-10-21 10:46:39 -04:00
2018-09-18 17:52:15 -05:00
2018-10-26 16:26:35 -07:00
2018-10-08 22:53:10 +11:00
2018-12-03 17:11:02 -08:00
2018-09-25 20:17:35 -07:00
2018-12-21 11:50:02 -05:00
2018-12-06 17:22:53 +01:00
2018-09-29 22:47:49 -04:00
2018-10-11 09:16:44 -07:00
2018-12-10 10:17:45 +01:00
2018-09-25 20:33:24 +02:00
2018-12-22 12:15:29 +01:00