[PATCH] mtd: rawnand: gpmi: fix reference count leak in gpmi ops
Han Xu
han.xu at nxp.com
Mon Nov 9 18:23:55 EST 2020
> -----Original Message-----
> From: Zhang Qilong <zhangqilong3 at huawei.com>
> Sent: Saturday, November 7, 2020 5:06 AM
> To: Han Xu <han.xu at nxp.com>; miquel.raynal at bootlin.com; vigneshr at ti.com
> Cc: richard at nod.at; linux-mtd at lists.infradead.org
> Subject: [PATCH] mtd: rawnand: gpmi: fix reference count leak in gpmi ops
>
> pm_runtime_get_sync() will increment pm usage at first and it will resume the
> device later. If runtime of the device has error or device is in inaccessible
> state(or other error state), resume operation will fail. If we do not call put
> operation to decrease the reference, it will result in reference leak in the two
> functions(gpmi_init and gpmi_nfc_exec_op). Moreover, this device cannot enter
> the idle state and always stay busy or other non-idle state later. So we fixed it
> through adding pm_runtime_put_noidle.
>
> Fixes: 5bc6bb603b4d0 ("mtd: rawnand: gpmi: Fix suspend/resume problem")
>
> Signed-off-by: Zhang Qilong <zhangqilong3 at huawei.com>
> ---
> drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
> b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
> index dc8104e67506..b5f46f214a58 100644
> --- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
> +++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
> @@ -149,8 +149,10 @@ static int gpmi_init(struct gpmi_nand_data *this)
> int ret;
>
> ret = pm_runtime_get_sync(this->dev);
> - if (ret < 0)
> + if (ret < 0) {
> + pm_runtime_put_noidle(this->dev);
> return ret;
> + }
>
> ret = gpmi_reset_block(r->gpmi_regs, false);
> if (ret)
> @@ -2263,8 +2265,10 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip,
> this->transfers[i].direction = DMA_NONE;
>
> ret = pm_runtime_get_sync(this->dev);
> - if (ret < 0)
> + if (ret < 0) {
> + pm_runtime_put_noidle(this->dev);
> return ret;
> + }
>
Acked-by: Han Xu <han.xu at nxp.com>
> /*
> * This driver currently supports only one NAND chip. Plus, dies share
> --
> 2.25.4
More information about the linux-mtd
mailing list