mtd: onenand: Use mtd->oops_panic_write as condition
authorThomas Gleixner <tglx@linutronix.de>
Fri, 13 Nov 2020 14:14:22 +0000 (15:14 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 10 Dec 2020 21:37:32 +0000 (22:37 +0100)
struct mtd_info has a flag oops_panic_write which is set when the write
operation is issued via the panic_write() callback. That allows controller
drivers to distinguish the panic write from a regular write.

Replace the open coded 'in_interrupt() | oops_in_progress' checks with a
check for that flag. in_interrupt() is an unrealiable indicator anyway as
it covers all sorts of atomic contexts not only hard and soft interrupt
service routines.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Vignesh Raghavendra <vigneshr@ti.com>
Cc: Tudor Ambarus <tudor.ambarus@microchip.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Boris Brezillon <boris.brezillon@collabora.com>
Cc: linux-mtd@lists.infradead.org
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20201113141422.2214771-1-bigeasy@linutronix.de
drivers/mtd/nand/onenand/onenand_omap2.c
drivers/mtd/nand/raw/nand_legacy.c

index d8c0bd002c2b47a9567138203bde7d284892f586..12825eb97938bee88922dc2351ecd2bb3f8cc5cf 100644 (file)
@@ -371,12 +371,12 @@ static int omap2_onenand_read_bufferram(struct mtd_info *mtd, int area,
 
        bram_offset = omap2_onenand_bufferram_offset(mtd, area) + area + offset;
        /*
-        * If the buffer address is not DMA-able, len is not long enough to make
-        * DMA transfers profitable or panic_write() may be in an interrupt
-        * context fallback to PIO mode.
+        * If the buffer address is not DMA-able, len is not long enough to
+        * make DMA transfers profitable or if invoked from panic_write()
+        * fallback to PIO mode.
         */
        if (!virt_addr_valid(buf) || bram_offset & 3 || (size_t)buf & 3 ||
-           count < 384 || in_interrupt() || oops_in_progress)
+           count < 384 || mtd->oops_panic_write)
                goto out_copy;
 
        xtra = count & 3;
@@ -418,12 +418,12 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
 
        bram_offset = omap2_onenand_bufferram_offset(mtd, area) + area + offset;
        /*
-        * If the buffer address is not DMA-able, len is not long enough to make
-        * DMA transfers profitable or panic_write() may be in an interrupt
-        * context fallback to PIO mode.
+        * If the buffer address is not DMA-able, len is not long enough to
+        * make DMA transfers profitable or if invoked from panic_write()
+        * fallback to PIO mode.
         */
        if (!virt_addr_valid(buf) || bram_offset & 3 || (size_t)buf & 3 ||
-           count < 384 || in_interrupt() || oops_in_progress)
+           count < 384 || mtd->oops_panic_write)
                goto out_copy;
 
        dma_src = dma_map_single(dev, buf, count, DMA_TO_DEVICE);
index 2bcc03714432b9a2e9bc78dd9af611b98ede0a2c..eccc18b266d5f5fa87703c49cf43c3de0ed41714 100644 (file)
@@ -192,9 +192,10 @@ static void panic_nand_wait_ready(struct nand_chip *chip, unsigned long timeo)
  */
 void nand_wait_ready(struct nand_chip *chip)
 {
+       struct mtd_info *mtd = nand_to_mtd(chip);
        unsigned long timeo = 400;
 
-       if (in_interrupt() || oops_in_progress)
+       if (mtd->oops_panic_write)
                return panic_nand_wait_ready(chip, timeo);
 
        /* Wait until command is processed or timeout occurs */
@@ -531,7 +532,7 @@ EXPORT_SYMBOL(nand_get_set_features_notsupp);
  */
 static int nand_wait(struct nand_chip *chip)
 {
-
+       struct mtd_info *mtd = nand_to_mtd(chip);
        unsigned long timeo = 400;
        u8 status;
        int ret;
@@ -546,9 +547,9 @@ static int nand_wait(struct nand_chip *chip)
        if (ret)
                return ret;
 
-       if (in_interrupt() || oops_in_progress)
+       if (mtd->oops_panic_write) {
                panic_nand_wait(chip, timeo);
-       else {
+       else {
                timeo = jiffies + msecs_to_jiffies(timeo);
                do {
                        if (chip->legacy.dev_ready) {