From: Boris Brezillon <boris.brezillon@collabora.com>
To: Sean Nyekjaer <sean@geanix.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Boris Brezillon <bbrezillon@kernel.org>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 1/4] mtd: rawnand: nand_bbt: hide suspend/resume hooks while scanning bbt
Date: Mon, 1 Nov 2021 08:38:24 +0100 [thread overview]
Message-ID: <20211101083824.236b9983@collabora.com> (raw)
In-Reply-To: <20211026055551.3053598-2-sean@geanix.com>
On Tue, 26 Oct 2021 07:55:48 +0200
Sean Nyekjaer <sean@geanix.com> wrote:
> From: Boris Brezillon <boris.brezillon@collabora.com>
>
> The BBT scan logic use the MTD helpers before the MTD layer had a
> chance to initialize the device, and that leads to issues when
> accessing the uninitialized suspend lock. Let's temporarily set the
> suspend/resume hooks to NULL to skip the lock acquire/release step.
>
> Fixes: 013e6292aaf5 ("mtd: rawnand: Simplify the locking")
I think I already mentioned this Fixes tag should not be there.
> Tested-by: Sean Nyekjaer <sean@geanix.com>
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> Signed-off-by: Sean Nyekjaer <sean@geanix.com>
> ---
> drivers/mtd/nand/raw/nand_bbt.c | 28 +++++++++++++++++++++++++++-
> 1 file changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c
> index b7ad030225f8..93d385703469 100644
> --- a/drivers/mtd/nand/raw/nand_bbt.c
> +++ b/drivers/mtd/nand/raw/nand_bbt.c
> @@ -1397,8 +1397,28 @@ static int nand_create_badblock_pattern(struct nand_chip *this)
> */
> int nand_create_bbt(struct nand_chip *this)
> {
> + struct mtd_info *mtd = nand_to_mtd(this);
> + int (*suspend) (struct mtd_info *) = mtd->_suspend;
> + void (*resume) (struct mtd_info *) = mtd->_resume;
> int ret;
>
> + /*
> + * The BBT scan logic use the MTD helpers before the MTD layer had a
> + * chance to initialize the device, and that leads to issues when
> + * accessing the uninitialized suspend lock. Let's temporarily set the
> + * suspend/resume hooks to NULL to skip the lock acquire/release step.
> + *
> + * FIXME: This is an ugly hack, so please don't copy this pattern to
> + * other MTD implementations. The proper fix would be to implement a
> + * generic BBT scan logic at the NAND level that's not using any of the
> + * MTD helpers to access pages. We also might consider doing a two
> + * step initialization at the MTD level (mtd_device_init() +
> + * mtd_device_register()) so some of the fields are initialized
> + * early.
> + */
> + mtd->_suspend = NULL;
> + mtd->_resume = NULL;
> +
> /* Is a flash based bad block table requested? */
> if (this->bbt_options & NAND_BBT_USE_FLASH) {
> /* Use the default pattern descriptors */
> @@ -1422,7 +1442,13 @@ int nand_create_bbt(struct nand_chip *this)
> return ret;
> }
>
> - return nand_scan_bbt(this, this->badblock_pattern);
> + ret = nand_scan_bbt(this, this->badblock_pattern);
> +
> + /* Restore the suspend/resume hooks. */
> + mtd->_suspend = suspend;
> + mtd->_resume = resume;
> +
> + return ret;
> }
> EXPORT_SYMBOL(nand_create_bbt);
>
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Sean Nyekjaer <sean@geanix.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Boris Brezillon <bbrezillon@kernel.org>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 1/4] mtd: rawnand: nand_bbt: hide suspend/resume hooks while scanning bbt
Date: Mon, 1 Nov 2021 08:38:24 +0100 [thread overview]
Message-ID: <20211101083824.236b9983@collabora.com> (raw)
In-Reply-To: <20211026055551.3053598-2-sean@geanix.com>
On Tue, 26 Oct 2021 07:55:48 +0200
Sean Nyekjaer <sean@geanix.com> wrote:
> From: Boris Brezillon <boris.brezillon@collabora.com>
>
> The BBT scan logic use the MTD helpers before the MTD layer had a
> chance to initialize the device, and that leads to issues when
> accessing the uninitialized suspend lock. Let's temporarily set the
> suspend/resume hooks to NULL to skip the lock acquire/release step.
>
> Fixes: 013e6292aaf5 ("mtd: rawnand: Simplify the locking")
I think I already mentioned this Fixes tag should not be there.
> Tested-by: Sean Nyekjaer <sean@geanix.com>
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> Signed-off-by: Sean Nyekjaer <sean@geanix.com>
> ---
> drivers/mtd/nand/raw/nand_bbt.c | 28 +++++++++++++++++++++++++++-
> 1 file changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c
> index b7ad030225f8..93d385703469 100644
> --- a/drivers/mtd/nand/raw/nand_bbt.c
> +++ b/drivers/mtd/nand/raw/nand_bbt.c
> @@ -1397,8 +1397,28 @@ static int nand_create_badblock_pattern(struct nand_chip *this)
> */
> int nand_create_bbt(struct nand_chip *this)
> {
> + struct mtd_info *mtd = nand_to_mtd(this);
> + int (*suspend) (struct mtd_info *) = mtd->_suspend;
> + void (*resume) (struct mtd_info *) = mtd->_resume;
> int ret;
>
> + /*
> + * The BBT scan logic use the MTD helpers before the MTD layer had a
> + * chance to initialize the device, and that leads to issues when
> + * accessing the uninitialized suspend lock. Let's temporarily set the
> + * suspend/resume hooks to NULL to skip the lock acquire/release step.
> + *
> + * FIXME: This is an ugly hack, so please don't copy this pattern to
> + * other MTD implementations. The proper fix would be to implement a
> + * generic BBT scan logic at the NAND level that's not using any of the
> + * MTD helpers to access pages. We also might consider doing a two
> + * step initialization at the MTD level (mtd_device_init() +
> + * mtd_device_register()) so some of the fields are initialized
> + * early.
> + */
> + mtd->_suspend = NULL;
> + mtd->_resume = NULL;
> +
> /* Is a flash based bad block table requested? */
> if (this->bbt_options & NAND_BBT_USE_FLASH) {
> /* Use the default pattern descriptors */
> @@ -1422,7 +1442,13 @@ int nand_create_bbt(struct nand_chip *this)
> return ret;
> }
>
> - return nand_scan_bbt(this, this->badblock_pattern);
> + ret = nand_scan_bbt(this, this->badblock_pattern);
> +
> + /* Restore the suspend/resume hooks. */
> + mtd->_suspend = suspend;
> + mtd->_resume = resume;
> +
> + return ret;
> }
> EXPORT_SYMBOL(nand_create_bbt);
>
next prev parent reply other threads:[~2021-11-01 7:39 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-26 5:55 [PATCH v4 0/4] mtd: core: protect access to mtd devices while in suspend Sean Nyekjaer
2021-10-26 5:55 ` Sean Nyekjaer
2021-10-26 5:55 ` [PATCH v4 1/4] mtd: rawnand: nand_bbt: hide suspend/resume hooks while scanning bbt Sean Nyekjaer
2021-10-26 5:55 ` Sean Nyekjaer
2021-11-01 7:38 ` Boris Brezillon [this message]
2021-11-01 7:38 ` Boris Brezillon
2021-11-01 8:46 ` Sean Nyekjaer
2021-11-01 8:46 ` Sean Nyekjaer
2021-11-02 8:43 ` Boris Brezillon
2021-11-02 8:43 ` Boris Brezillon
2021-10-26 5:55 ` [PATCH v4 2/4] mtd: mtdconcat: don't use mtd_{suspend,resume}() Sean Nyekjaer
2021-10-26 5:55 ` Sean Nyekjaer
2021-10-26 5:55 ` [PATCH v4 3/4] mtd: core: protect access to MTD devices while in suspend Sean Nyekjaer
2021-10-26 5:55 ` Sean Nyekjaer
2021-11-01 7:40 ` Boris Brezillon
2021-11-01 7:40 ` Boris Brezillon
2021-10-26 5:55 ` [PATCH v4 4/4] mtd: rawnand: remove suspended check Sean Nyekjaer
2021-10-26 5:55 ` Sean Nyekjaer
2021-11-01 7:46 ` [PATCH v4 0/4] mtd: core: protect access to mtd devices while in suspend Boris Brezillon
2021-11-01 7:46 ` Boris Brezillon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211101083824.236b9983@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=bbrezillon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=miquel.raynal@bootlin.com \
--cc=richard@nod.at \
--cc=sean@geanix.com \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.