[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