Re: Unbalanced calls to spi_master_get in coldfire-qspi and s3c64xx SPI master drivers

2012-08-16 Thread Thomas Abraham
On 14 August 2012 03:14, Guenter Roeck li...@roeck-us.net wrote:
 Hi all,

 looking through SPI master drivers, I noticed that the following drivers call
 spi_master_get() in their suspend and resume functions. Yet, there is no
 matching call to spi_master_put(), meaning the reference count will increase
 with each suspend/resume cycle.
 spi-coldfire-qspi.c
 spi-s3c64xx.c
 Other SPI master drivers also support suspend and resume, but do not call
 spi_master_get() in the suspend/resume functions. The spi-pl022 driver calls
 spi_master_suspend() and spi_master_resume() like the above, but does not
 call spi_master_get() either.

 This leads me to believe that the above drivers will hang on unload after a
 suspend/resume cycle due to the extra references.

 Can someone please have a look and confirm if my understanding is correct ?
 If so I'll send a set of patches to fix the problems.

For spi-s3c64xx.c, yes it does seem that the spi_master_get() and
spi_master_put() calls are not balanced.  The probable change could be

-  struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
+ struct spi_master *master = dev_get_drvdata(dev);

Thanks,
Thomas.
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Unbalanced calls to spi_master_get in coldfire-qspi and s3c64xx SPI master drivers

2012-08-16 Thread Guenter Roeck
On Thu, Aug 16, 2012 at 02:27:49PM +0530, Thomas Abraham wrote:
 On 14 August 2012 03:14, Guenter Roeck li...@roeck-us.net wrote:
  Hi all,
 
  looking through SPI master drivers, I noticed that the following drivers 
  call
  spi_master_get() in their suspend and resume functions. Yet, there is no
  matching call to spi_master_put(), meaning the reference count will increase
  with each suspend/resume cycle.
  spi-coldfire-qspi.c
  spi-s3c64xx.c
  Other SPI master drivers also support suspend and resume, but do not call
  spi_master_get() in the suspend/resume functions. The spi-pl022 driver calls
  spi_master_suspend() and spi_master_resume() like the above, but does not
  call spi_master_get() either.
 
  This leads me to believe that the above drivers will hang on unload after a
  suspend/resume cycle due to the extra references.
 
  Can someone please have a look and confirm if my understanding is correct ?
  If so I'll send a set of patches to fix the problems.
 
 For spi-s3c64xx.c, yes it does seem that the spi_master_get() and
 spi_master_put() calls are not balanced.  The probable change could be
 
 -  struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
 + struct spi_master *master = dev_get_drvdata(dev);
 
Yes, that is what I thought.

Thanks,
Guenter
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html