public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* [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