1. 12 Nov, 2013 14 commits
    • Ian Abbott's avatar
      staging: comedi: increment reference while file open · fc406986
      Ian Abbott authored
      In the 'open' file operation handler `comedi_open()` in "comedi_fops.c",
      call `comedi_dev_get_from_minor()` instead of `comedi_dev_from_minor()`
      to get the pointer to the `struct comedi_device`.  This increments the
      reference to prevent it being freed.  Call `comedi_dev_put()` to
      decrement the reference  on failure, and also call it from the 'release'
      file operation handler `comedi_close()`.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fc406986
    • Ian Abbott's avatar
      staging: comedi: add comedi_dev_get_from_minor() · b449c1ca
      Ian Abbott authored
      Add function `struct comedi_device *comedi_dev_get_from_minor(unsigned
      minor)`.  This behaves like the existing `comedi_dev_from_minor()`
      except that it also increments the `struct kref refcount` member (via
      new helper function `comedi_dev_get()`) to prevent it being freed.  If
      it returns a valid pointer, the caller is responsible for calling
      `comedi_dev_put()` to decrement the reference count.
      
      Export `comedi_dev_get_from_minor()` and `comedi_dev_put()` as they will
      be used by the "kcomedilib" module in addition to the "comedi" module
      itself.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b449c1ca
    • Ian Abbott's avatar
      staging: comedi: add a kref to comedi device · 5b13ed94
      Ian Abbott authored
      Add a `struct kref refcount` member to `struct comedi_device` to allow
      safe destruction of the comedi device.  Only free the comedi device via
      the 'release' callback `kref_put()`.  Currently, nothing calls
      `kref_put()`, so the safe destruction is ineffective, but this will be
      addressed by later patches.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5b13ed94
    • Ian Abbott's avatar
      staging: comedi: protect against detach during read operation · 45c2bc55
      Ian Abbott authored
      The 'read' file operation for comedi devices does not use the main mutex
      in the `struct comedi_device` to avoid contention with some ioctls that
      may take a while to complete.  Use the `attach_lock` semaphore to
      protect against detachment while the 'read' operation is in progress.
      This is a `struct rw_semaphore` and we read-lock it to protect against
      device detachment.
      
      Note that `comedi_device_cancel_all()` is called during device
      detachment, which cancels any ongoing asynchronous commands.  This will
      wake up any blocked readers which will then release the `attach_lock`
      semaphore and complete the 'read' operation early.
      
      The only time the 'read' file operation does use the main mutex is at
      the end of the command when it has to call `do_become_nonbusy()` to mark
      the subdevice as no longer busy handling an asynchronous command.  To
      avoid deadlock, it has to remove the task from the wait queue and
      release the `attach_lock` semaphore before acquiring the main mutex.  It
      then needs to confirm the device is still attached.  Unfortunately, we
      do not yet protect against a dynamically allocated `struct
      comedi_device` being deleted during the operation.  This will be
      addressed by a later patch.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      45c2bc55
    • Ian Abbott's avatar
      staging: comedi: protect against detach during write operation · 9329f139
      Ian Abbott authored
      The 'write' file operation for comedi devices does not use the main
      mutex in the `struct comedi_device` to avoid contention with some ioctls
      that may take a while to complete.  Use the `attach_lock` semaphore to
      protect against detachment while the 'write' operation is in progress.
      This is a `struct rw_semaphore` and we read-lock it to protect against
      device detachment.
      
      Note that `comedi_device_cancel_all()` is called during device
      detachment, which cancels any ongoing asynchronous commands.  This will
      wake up any blocked writers which will then release the `attach_lock`
      semaphore and complete the 'write' operation early.
      
      The only time the 'write' file operation does use the main mutex is at
      the end of the command when it has to call `do_become_nonbusy()` to mark
      the subdevice as no longer busy handling an asynchronous command.  To
      avoid deadlock, it has to remove the task from the wait queue and
      release the `attach_lock` semaphore before acquiring the main mutex.  It
      then needs to confirm that the device is still attached.  Unfortunately,
      we do not yet protect against a dynamically allocated `struct
      comedi_device` being deleted during the operation.  This will be
      addressed by a later patch.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9329f139
    • Ian Abbott's avatar
      staging: comedi: add detachment counter for validity checks · ef77c0b2
      Ian Abbott authored
      Add a member `detach_count` to `struct comedi_device` that is
      incremented every time the device gets detached.  This will be used in
      some validity checks in the 'read' and 'write' file operations to make
      sure the attachment remains valid.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ef77c0b2
    • Ian Abbott's avatar
      staging: comedi: cancel commands before detaching device · d19db51a
      Ian Abbott authored
      The comedi core module's handling of the `COMEDI_DEVCONFIG` ioctl will
      not allow a device to be detached if it is busy.  However, comedi
      devices can also be auto-detached due to a removal of a hardware device.
      One of the things we should do in that case is cancel any asynchronous
      commands that are running.  Add a new function
      `comedi_device_cancel_all()` to do that and call it from
      `comedi_device_detach()`.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d19db51a
    • Ian Abbott's avatar
      staging: comedi: wake up async waiters when become non-busy · 8da8c86f
      Ian Abbott authored
      Wake up all waiters on the comedi subdevice's async wait queue whenever
      the subdevice is marked "non-busy".  This happens when an asynchronous
      command is cancelled or when a command is terminated and all data has
      been read or written.  Note: use `wake_up_interruptible_all()` as we
      only use interruptible waits.
      
      Remove the call to `wake_up_interruptible()` from `do_cancel_ioctl()` as
      it will call `wake_up_interruptible_all()` indirectly via `do_cancel()`
      and `do_become_nonbusy()`.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8da8c86f
    • Ian Abbott's avatar
      staging: comedi: cleanup_device() -> comedi_device_detach_cleanup() · 3867e20d
      Ian Abbott authored
      Rename the local function `cleanup_device()` to
      `comedi_device_detach_cleanup()`.  It is only called from the
      `comedi_device_detach()` function and that is called from
      `comedi_device_cleanup()` and other places.  The more specific function
      name seems less confusing.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3867e20d
    • Ian Abbott's avatar
      staging: comedi: use attach_lock semaphore during attach and detach · bf11c134
      Ian Abbott authored
      Acquire the `attach_lock` semaphore in the `struct comedi_device` while
      modifying the `attached` flag.  This is a "write" acquire.  Note that
      the main mutex in the `struct comedi_device` is also held at this time.
      Tasks wishing to check the device is attached will need to either
      acquire the main mutex, or "read" acquire the `attach_lock` semaphore,
      or both in that order.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bf11c134
    • Ian Abbott's avatar
      staging: comedi: add rw_semaphore to protect against device detachment · 2f3fdcd7
      Ian Abbott authored
      The 'read' and 'write' file operations on comedi devices do not use the
      main mutex in the `struct comedi_device` to avoid contention with ioctls
      that may take a while to complete.  However, it is necessary to protect
      against the device being detached while the operation is in progress.
      Add member `struct rw_semaphore attach_lock` to `struct comedi_device`
      for this purpose and initialize it on creation.
      
      The actual locking and unlocking will be implemented by subsequent
      patches.  Tasks that are attaching or detaching comedi devices will
      write-acquire the new semaphore whilst also holding the main mutex in
      the `struct comedi_device`.  Tasks that wish to protect against the
      comedi device being detached need to acquire either the main mutex, or
      read-acquire the new semaphore, or both in that order.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2f3fdcd7
    • Ian Abbott's avatar
      staging: comedi: add a couple of #includes to comedidev.h · ab3cb2e3
      Ian Abbott authored
      Two structures defined in "comedidev.h" have an element of type
      `spinlock_t`, so add `#include <linux/spinlock_types.h>` to declare it.
      One structure has an element of type `struct mutex` so add `#include
      <linux/mutex.h>` to declare it.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ab3cb2e3
    • Ian Abbott's avatar
      staging: comedi: remove unused command callback support · c265be01
      Ian Abbott authored
      The 'kcomedilib' module used to provide functions to allow asynchronous
      comedi commands to be set up from another kernel module, but now
      commands can only be set up by ioctls from user space via the core
      comedi module.  Since support for commands initiated from kernel space
      has been dropped, the `cb_func` and `cb_arg` members of `struct
      comedi_async` are never set (although the `cb_mask` member is still used
      to mask comedi events).  The `SRF_USER` bit of the comedi subdevice
      runflags is no longer needed to distinguish commands from user and
      kernel space since they only come from user space.
      
      Don't bother setting or testing the `SRF_USER` flag, and get rid of it,
      along with the `cb_func` and `cb_arg` members.
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c265be01
    • Dulshani Gunawardhana's avatar
      staging: lustre: Fix sparse warning for one-bit signed bitfield · 5fb0a2fa
      Dulshani Gunawardhana authored
      Fix the following sparse warning:
      drivers/staging/lustre/lustre/llite/llite_internal.h:461:49: error:dubious one-bit signed bitfield
      Signed-off-by: default avatarDulshani Gunawardhana <dulshani.gunawardhana89@gmail.com>
      Reviewed-by: default avatarPeter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5fb0a2fa
  2. 11 Nov, 2013 16 commits
  3. 10 Nov, 2013 10 commits