* [bug report] mtd: nand: omap2: fix return value check in omap_nand_probe()
@ 2016-08-03 12:32 Dan Carpenter
2016-08-04 7:05 ` Roger Quadros
0 siblings, 1 reply; 4+ messages in thread
From: Dan Carpenter @ 2016-08-03 12:32 UTC (permalink / raw)
To: yongjun_wei; +Cc: Richard Weinberger, linux-mtd
Hello Wei Yongjun,
The patch de3bfc4a1616: "mtd: nand: omap2: fix return value check in
omap_nand_probe()" from Jul 14, 2016, leads to the following static
checker warning:
drivers/mtd/nand/omap2.c:2173 omap_nand_probe()
error: 'info->dma' dereferencing possible ERR_PTR()
drivers/mtd/nand/omap2.c
1921 case NAND_OMAP_PREFETCH_DMA:
1922 dma_cap_zero(mask);
1923 dma_cap_set(DMA_SLAVE, mask);
1924 info->dma = dma_request_chan(pdev->dev.parent, "rxtx");
1925
1926 if (IS_ERR(info->dma)) {
^^^^^^^^^
1927 dev_err(&pdev->dev, "DMA engine request failed\n");
1928 err = PTR_ERR(info->dma);
1929 goto return_error;
1930 } else {
1931 struct dma_slave_config cfg;
1932
1933 memset(&cfg, 0, sizeof(cfg));
1934 cfg.src_addr = info->phys_base;
1935 cfg.dst_addr = info->phys_base;
1936 cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
1937 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
1938 cfg.src_maxburst = 16;
1939 cfg.dst_maxburst = 16;
1940 err = dmaengine_slave_config(info->dma, &cfg);
1941 if (err) {
1942 dev_err(&pdev->dev, "DMA engine slave config failed: %d\n",
1943 err);
1944 goto return_error;
1945 }
1946 nand_chip->read_buf = omap_read_buf_dma_pref;
1947 nand_chip->write_buf = omap_write_buf_dma_pref;
1948 }
1949 break;
1950
[ snip ]
2170
2171 return_error:
2172 if (info->dma)
2173 dma_release_channel(info->dma);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
We can't pass error pointers to dma_release_channel(). I can't compile
this code though, so I'm not going to patch it.
2174 if (nand_chip->ecc.priv) {
2175 nand_bch_free(nand_chip->ecc.priv);
2176 nand_chip->ecc.priv = NULL;
2177 }
2178 return err;
2179 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [bug report] mtd: nand: omap2: fix return value check in omap_nand_probe()
2016-08-03 12:32 [bug report] mtd: nand: omap2: fix return value check in omap_nand_probe() Dan Carpenter
@ 2016-08-04 7:05 ` Roger Quadros
2016-08-10 13:48 ` Boris Brezillon
0 siblings, 1 reply; 4+ messages in thread
From: Roger Quadros @ 2016-08-04 7:05 UTC (permalink / raw)
To: Dan Carpenter, yongjun_wei, Cooper Jr., Franklin
Cc: Richard Weinberger, linux-mtd
+Franklin
On 03/08/16 15:32, Dan Carpenter wrote:
> Hello Wei Yongjun,
>
> The patch de3bfc4a1616: "mtd: nand: omap2: fix return value check in
> omap_nand_probe()" from Jul 14, 2016, leads to the following static
> checker warning:
>
> drivers/mtd/nand/omap2.c:2173 omap_nand_probe()
> error: 'info->dma' dereferencing possible ERR_PTR()
>
> drivers/mtd/nand/omap2.c
> 1921 case NAND_OMAP_PREFETCH_DMA:
> 1922 dma_cap_zero(mask);
> 1923 dma_cap_set(DMA_SLAVE, mask);
> 1924 info->dma = dma_request_chan(pdev->dev.parent, "rxtx");
> 1925
> 1926 if (IS_ERR(info->dma)) {
> ^^^^^^^^^
> 1927 dev_err(&pdev->dev, "DMA engine request failed\n");
> 1928 err = PTR_ERR(info->dma);
> 1929 goto return_error;
> 1930 } else {
> 1931 struct dma_slave_config cfg;
> 1932
> 1933 memset(&cfg, 0, sizeof(cfg));
> 1934 cfg.src_addr = info->phys_base;
> 1935 cfg.dst_addr = info->phys_base;
> 1936 cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
> 1937 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
> 1938 cfg.src_maxburst = 16;
> 1939 cfg.dst_maxburst = 16;
> 1940 err = dmaengine_slave_config(info->dma, &cfg);
> 1941 if (err) {
> 1942 dev_err(&pdev->dev, "DMA engine slave config failed: %d\n",
> 1943 err);
> 1944 goto return_error;
> 1945 }
> 1946 nand_chip->read_buf = omap_read_buf_dma_pref;
> 1947 nand_chip->write_buf = omap_write_buf_dma_pref;
> 1948 }
> 1949 break;
> 1950
>
> [ snip ]
>
> 2170
> 2171 return_error:
> 2172 if (info->dma)
> 2173 dma_release_channel(info->dma);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> We can't pass error pointers to dma_release_channel(). I can't compile
> this code though, so I'm not going to patch it.
>
> 2174 if (nand_chip->ecc.priv) {
> 2175 nand_bch_free(nand_chip->ecc.priv);
> 2176 nand_chip->ecc.priv = NULL;
> 2177 }
> 2178 return err;
> 2179 }
>
> regards,
> dan carpenter
>
--
cheers,
-roger
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [bug report] mtd: nand: omap2: fix return value check in omap_nand_probe()
2016-08-04 7:05 ` Roger Quadros
@ 2016-08-10 13:48 ` Boris Brezillon
2016-08-15 7:24 ` Roger Quadros
0 siblings, 1 reply; 4+ messages in thread
From: Boris Brezillon @ 2016-08-10 13:48 UTC (permalink / raw)
To: Roger Quadros
Cc: Dan Carpenter, yongjun_wei, Cooper Jr., Franklin,
Richard Weinberger, linux-mtd
Hi,
On Thu, 4 Aug 2016 10:05:09 +0300
Roger Quadros <rogerq@ti.com> wrote:
> +Franklin
>
> On 03/08/16 15:32, Dan Carpenter wrote:
> > Hello Wei Yongjun,
> >
> > The patch de3bfc4a1616: "mtd: nand: omap2: fix return value check in
> > omap_nand_probe()" from Jul 14, 2016, leads to the following static
> > checker warning:
> >
> > drivers/mtd/nand/omap2.c:2173 omap_nand_probe()
> > error: 'info->dma' dereferencing possible ERR_PTR()
> >
> > drivers/mtd/nand/omap2.c
> > 1921 case NAND_OMAP_PREFETCH_DMA:
> > 1922 dma_cap_zero(mask);
> > 1923 dma_cap_set(DMA_SLAVE, mask);
> > 1924 info->dma = dma_request_chan(pdev->dev.parent, "rxtx");
> > 1925
> > 1926 if (IS_ERR(info->dma)) {
> > ^^^^^^^^^
> > 1927 dev_err(&pdev->dev, "DMA engine request failed\n");
> > 1928 err = PTR_ERR(info->dma);
> > 1929 goto return_error;
> > 1930 } else {
> > 1931 struct dma_slave_config cfg;
> > 1932
> > 1933 memset(&cfg, 0, sizeof(cfg));
> > 1934 cfg.src_addr = info->phys_base;
> > 1935 cfg.dst_addr = info->phys_base;
> > 1936 cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
> > 1937 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
> > 1938 cfg.src_maxburst = 16;
> > 1939 cfg.dst_maxburst = 16;
> > 1940 err = dmaengine_slave_config(info->dma, &cfg);
> > 1941 if (err) {
> > 1942 dev_err(&pdev->dev, "DMA engine slave config failed: %d\n",
> > 1943 err);
> > 1944 goto return_error;
> > 1945 }
> > 1946 nand_chip->read_buf = omap_read_buf_dma_pref;
> > 1947 nand_chip->write_buf = omap_write_buf_dma_pref;
> > 1948 }
> > 1949 break;
> > 1950
> >
> > [ snip ]
> >
> > 2170
> > 2171 return_error:
> > 2172 if (info->dma)
> > 2173 dma_release_channel(info->dma);
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > We can't pass error pointers to dma_release_channel(). I can't compile
> > this code though, so I'm not going to patch it.
if (!IS_ERR_OR_NULL(info->dma))
dma_release_channel(info->dma);
Should do the trick.
Franklin, Roger, can you check if I'm right and send a fix?
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [bug report] mtd: nand: omap2: fix return value check in omap_nand_probe()
2016-08-10 13:48 ` Boris Brezillon
@ 2016-08-15 7:24 ` Roger Quadros
0 siblings, 0 replies; 4+ messages in thread
From: Roger Quadros @ 2016-08-15 7:24 UTC (permalink / raw)
To: Boris Brezillon
Cc: Dan Carpenter, yongjun_wei, Cooper Jr., Franklin,
Richard Weinberger, linux-mtd
Boris,
On 10/08/16 16:48, Boris Brezillon wrote:
> Hi,
>
> On Thu, 4 Aug 2016 10:05:09 +0300
> Roger Quadros <rogerq@ti.com> wrote:
>
>> +Franklin
>>
>> On 03/08/16 15:32, Dan Carpenter wrote:
>>> Hello Wei Yongjun,
>>>
>>> The patch de3bfc4a1616: "mtd: nand: omap2: fix return value check in
>>> omap_nand_probe()" from Jul 14, 2016, leads to the following static
>>> checker warning:
>>>
>>> drivers/mtd/nand/omap2.c:2173 omap_nand_probe()
>>> error: 'info->dma' dereferencing possible ERR_PTR()
>>>
>>> drivers/mtd/nand/omap2.c
>>> 1921 case NAND_OMAP_PREFETCH_DMA:
>>> 1922 dma_cap_zero(mask);
>>> 1923 dma_cap_set(DMA_SLAVE, mask);
>>> 1924 info->dma = dma_request_chan(pdev->dev.parent, "rxtx");
>>> 1925
>>> 1926 if (IS_ERR(info->dma)) {
>>> ^^^^^^^^^
>>> 1927 dev_err(&pdev->dev, "DMA engine request failed\n");
>>> 1928 err = PTR_ERR(info->dma);
>>> 1929 goto return_error;
>>> 1930 } else {
>>> 1931 struct dma_slave_config cfg;
>>> 1932
>>> 1933 memset(&cfg, 0, sizeof(cfg));
>>> 1934 cfg.src_addr = info->phys_base;
>>> 1935 cfg.dst_addr = info->phys_base;
>>> 1936 cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
>>> 1937 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
>>> 1938 cfg.src_maxburst = 16;
>>> 1939 cfg.dst_maxburst = 16;
>>> 1940 err = dmaengine_slave_config(info->dma, &cfg);
>>> 1941 if (err) {
>>> 1942 dev_err(&pdev->dev, "DMA engine slave config failed: %d\n",
>>> 1943 err);
>>> 1944 goto return_error;
>>> 1945 }
>>> 1946 nand_chip->read_buf = omap_read_buf_dma_pref;
>>> 1947 nand_chip->write_buf = omap_write_buf_dma_pref;
>>> 1948 }
>>> 1949 break;
>>> 1950
>>>
>>> [ snip ]
>>>
>>> 2170
>>> 2171 return_error:
>>> 2172 if (info->dma)
>>> 2173 dma_release_channel(info->dma);
>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>> We can't pass error pointers to dma_release_channel(). I can't compile
>>> this code though, so I'm not going to patch it.
>
> if (!IS_ERR_OR_NULL(info->dma))
> dma_release_channel(info->dma);
>
> Should do the trick.
>
> Franklin, Roger, can you check if I'm right and send a fix?
>
I'll send a patch by today. Thanks.
cheers,
-roger
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-08-15 7:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-03 12:32 [bug report] mtd: nand: omap2: fix return value check in omap_nand_probe() Dan Carpenter
2016-08-04 7:05 ` Roger Quadros
2016-08-10 13:48 ` Boris Brezillon
2016-08-15 7:24 ` Roger Quadros
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox