spi: fix refcount-related spidev oops-on-rmmod
authorDavid Brownell <dbrownell@users.sourceforge.net>
Fri, 6 Jun 2008 05:45:50 +0000 (22:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Jun 2008 18:29:08 +0000 (11:29 -0700)
commitb2c8daddcbe03a22402ecf943bb88302601c6835
tree326282263d7ef47c18e02fee77ffd586457c69e8
parent39b945a37bac2b692773a470890c8ba301485b15
spi: fix refcount-related spidev oops-on-rmmod

This addresses other oopsing paths in "spidev" by changing how it manages
refcounting.  It decouples the lifecycle of the per-device data from the
class device (not just the spi device):

  - Use class_{create,destroy} not class_{register,unregister}.
  - Use device_{create,destroy} not device_{register,unregister}.
  - Free the per-device data only when TWO conditions are true:
      * Driver is unbound from underlying SPI device, and
      * Device is no longer open (new)

Also, spi_{get,set}_drvdata not dev_{get,set}_drvdata for simpler code.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Sebastian Siewior <bigeasy@tglx.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/spi/spidev.c