mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 08:35:06 +07:00
013e6292aa
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> |
||
---|---|---|
.. | ||
bbm.h | ||
blktrans.h | ||
cfi_endian.h | ||
cfi.h | ||
concat.h | ||
doc2000.h | ||
flashchip.h | ||
ftl.h | ||
gen_probe.h | ||
inftl.h | ||
jedec.h | ||
latch-addr-flash.h | ||
lpc32xx_mlc.h | ||
lpc32xx_slc.h | ||
map.h | ||
mtd.h | ||
mtdram.h | ||
nand_bch.h | ||
nand_ecc.h | ||
nand-gpio.h | ||
nand.h | ||
ndfc.h | ||
nftl.h | ||
onenand_regs.h | ||
onenand.h | ||
onfi.h | ||
partitions.h | ||
pfow.h | ||
physmap.h | ||
pismo.h | ||
plat-ram.h | ||
platnand.h | ||
qinfo.h | ||
rawnand.h | ||
sh_flctl.h | ||
sharpsl.h | ||
spear_smi.h | ||
spi-nor.h | ||
spinand.h | ||
super.h | ||
ubi.h | ||
xip.h |