Thread (79 messages) 79 messages, 5 authors, 2016-01-07

[PATCH v5 01/58] mtd: nand: denali: add missing nand_release() call in denali_remove()

From: Dinh Nguyen <hidden>
Date: 2015-12-11 17:22:01
Also in: linux-omap, linux-samsung-soc, lkml

On Fri, Dec 11, 2015 at 11:08 AM, Boris Brezillon
[off-list ref] wrote:
Hi Dinh,

On Fri, 11 Dec 2015 10:50:21 -0600
Dinh Nguyen [off-list ref] wrote:
quoted
Hi Boris,

On Fri, Dec 11, 2015 at 9:10 AM, Boris Brezillon
[off-list ref] wrote:
quoted
+ Dinh (who made commit 2a0a288ec258)

Also added back the Fixes tag.

On Fri, 11 Dec 2015 15:02:34 +0100
Boris Brezillon [off-list ref] wrote:
quoted
Unregister the NAND device from the NAND subsystem when removing a denali
NAND controller, otherwise the MTD attached to the NAND device is still
exposed by the MTD layer, and accesses to this device will likely crash
the system.

Signed-off-by: Boris Brezillon <redacted>
Fixes: 2a0a288ec258 ("mtd: denali: split the generic driver and PCI layer")
quoted
---
Changes since v4:
- remove Cc stable and fixes tags
- calculate the dma buffer size before calling nand_release()

 drivers/mtd/nand/denali.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
index 67eb2be..fdfea05 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -1622,9 +1622,11 @@ EXPORT_SYMBOL(denali_init);
 /* driver exit point */
 void denali_remove(struct denali_nand_info *denali)
 {
+     int bufsize = denali->mtd.writesize + denali->mtd.oobsize;
+
+     nand_release(&denali->mtd);
      denali_irq_cleanup(denali->irq, denali);
-     dma_unmap_single(denali->dev, denali->buf.dma_buf,
-                      denali->mtd.writesize + denali->mtd.oobsize,
+     dma_unmap_single(denali->dev, denali->buf.dma_buf, bufsize,
                       DMA_BIDIRECTIONAL);
Not sure what is the need to add bufsize here, but the commit message
doesn't reflect the change.
You were not in Cc of the first version (my fault), but Brian pointed
that the mtd fields could be in an unknown state after the
nand_release() call (this is currently not the case, but it change in
the future). The idea is to pre-compute the DMA buffer size before
releasing the mtd/nand device to prevent any future issues.

I don't think it is worth mentioning this in the commit message,
because these are just implementation details, but I can add the
following comment before the bufsize declaration:

        /*
         * Pre-compute DMA buffer size to avoid any problems in case
         * nand_release() ever changes in a way that mtd->writesize and
         * mtd->oobsize are not reliable after this call.
         */

What do you think?
Ah, perfect! With the updated comment,

Acked-by: Dinh Nguyen <redacted>

Thanks,
Dinh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help