nand: mxs: fix error handling for mxs_nand_init
Subsystems (3)
PATCH RESEND 1/1 nand: mxs: fix error handling for mxs_nand_init
Fix error handling for mxs_nand_init.
The original error handling is wrong for err2 and err1. Should first free desc[x], then free desc.
This patch also correctly handle err3, should use MXS_DMA_CHANNEL_AHB_APBH_GPMI0 as the check point.
Cc Stefano Babic <[email protected]>
CC Fabio Estevam <[email protected]>
Cc Scott Wood <[email protected]>
Cc Marek Vasut <[email protected]>
Signed-off-by Peng Fan <[email protected]>
--- drivers/mtd/nand/mxs_nand.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-)
drivers/mtd/nand/mxs_nand.c +15 -9
@@ -1090,24 +1090,29 @@ int mxs_nand_init(struct mxs_nand_info *info) (struct mxs_gpmi_regs *)MXS_GPMI_BASE ;struct mxs_bch_regs *bch_regs = (struct mxs_bch_regs *)MXS_BCH_BASE ; -int i =0 , j; +int i =0 , j, ret =0 ; info->desc =malloc (sizeof (struct mxs_dma_desc *) *MXS_NAND_DMA_DESCRIPTOR_COUNT ); -if (!info->desc) +if (!info->desc) { + ret = -ENOMEM ; goto err1; + }/* Allocate the DMA descriptors. */ for (i =0 ; i <MXS_NAND_DMA_DESCRIPTOR_COUNT ; i++) { info->desc[i] =mxs_dma_desc_alloc (); -if (!info->desc[i]) +if (!info->desc[i]) { + ret = -ENOMEM ; goto err2; + } }/* Init the DMA controller. */ for (j =MXS_DMA_CHANNEL_AHB_APBH_GPMI0 ; j <=MXS_DMA_CHANNEL_AHB_APBH_GPMI7 ; j++) { -if (mxs_dma_init_channel (j)) + ret =mxs_dma_init_channel (j); +if (ret) goto err3; }
@@ -1127,15 +1132,16 @@ int mxs_nand_init(struct mxs_nand_info *info)return 0 ; err3: -for (--j; j >=0 ; j--) +for (--j; j >=MXS_DMA_CHANNEL_AHB_APBH_GPMI0 ; j--)mxs_dma_release (j); err2: -free (info->desc); -err1:for (--i; i >=0 ; i--)mxs_dma_desc_free (info->desc[i]); -printf ("MXS NAND: Unable to allocate DMA descriptors\n" ); -return -ENOMEM ; +free (info->desc); +err1: +if (ret == -ENOMEM ) +printf ("MXS NAND: Unable to allocate DMA descriptors\n" ); +return ret; }/*!
Signature · 1 line
2.6.2
PATCH RESEND 1/1 nand: mxs: fix error handling for mxs_nand_init
Quoted 5 lines · Peng Fan
Fix error handling for
mxs_nand_init.The original error handling is wrong for err2 and err1. Should first free desc[x], then free desc.
Quoted 8 lines
This patch also correctly handle err3, should use
MXS_DMA_CHANNEL_AHB_APBH_GPMI0as the check point.Cc Stefano Babic <[email protected]>CC Fabio Estevam <[email protected]>Cc Scott Wood <[email protected]>Cc Marek Vasut <[email protected]>Signed-off-by Peng Fan <[email protected]>
It looks fine,
Reviewed-by Marek Vasut <[email protected]>
Why the resend btw ?
Best regards,
Marek Vasut