linux/drivers
Ian Abbott 9329f13956 staging: comedi: protect against detach during write operation
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: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-11-11 16:16:44 -08:00
..
accessibility
acpi ACPI / PM: Drop two functions that are not used any more 2013-10-17 15:44:48 +02:00
amba
ata ATA / ACPI: remove power dependent device handling 2013-10-17 15:38:53 +02:00
atm atm: nicstar: fix regression made by previous patch 2013-09-15 22:18:55 -04:00
auxdisplay
base driver core: Release device_hotplug_lock when store_mem_state returns EINVAL 2013-10-16 18:42:41 -07:00
bcma bcma: make bcma_core_pci_{up,down}() callable from atomic context 2013-09-26 14:02:33 -04:00
block cciss: fix info leak in cciss_ioctl32_passthru() 2013-09-24 17:00:26 -07:00
bluetooth Bluetooth: btusb: Add support for Belkin F8065bf 2013-09-23 17:44:25 -03:00
bus bus: mvebu-mbus: Fix optional pcie-mem/io-aperture properties 2013-10-01 17:04:17 +00:00
cdrom
char A small fix for Xen on x86_32 and a build fix for xen-tpmfront on arm64. 2013-10-15 16:22:11 -07:00
clk The common clk framework changes for 3.12 are dominated by clock driver 2013-09-09 15:49:04 -07:00
clocksource clocksource: em_sti: Set cpu_possible_mask to fix SMP broadcast 2013-09-26 02:31:04 +02:00
connector
cpufreq cpufreq: s3c64xx: Rename index to driver_data 2013-10-16 23:53:38 +02:00
cpuidle ACPI and power management fixes for 3.12-rc1 2013-09-12 11:22:45 -07:00
crypto Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux 2013-09-07 12:53:35 +10:00
dca
devfreq
dio
dma dma: edma.c: remove edma_desc leakage 2013-10-11 07:31:47 +05:30
edac Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2013-09-06 11:14:33 -07:00
eisa
extcon Driver core patches for 3.12-rc1 2013-09-03 11:37:15 -07:00
firewire firewire: ohci: Fix deadlock at bus reset 2013-08-29 22:35:05 +02:00
firmware firmware/dmi_scan: drop OOM messages 2013-09-11 15:58:51 -07:00
fmc
gpio gpiolib: let gpiod_request() return -EPROBE_DEFER 2013-10-11 16:31:54 +02:00
gpu Revert "i915: Update VGA arbiter support for newer devices" 2013-10-11 15:19:22 +10:00
hid Merge 3.12-rc6 into staging-next. 2013-10-19 13:14:34 -07:00
hsi
hv Revert "Drivers: hv: vmbus: Fix a bug in channel rescind code" 2013-10-17 09:30:10 -07:00
hwmon hwmon: (applesmc) Always read until end of data 2013-10-09 09:48:55 -07:00
hwspinlock
i2c i2c: i2c-mux-pinctrl: use deferred probe when adapter not found 2013-10-10 10:22:35 +02:00
ide ide: sgiioc4: Staticize ioc4_ide_attach_one() 2013-09-05 15:21:30 -04:00
idle
iio iio: light: vcnl4000: Remove redundant code 2013-10-24 14:48:14 +01:00
infiniband Last batch of IB changes for 3.12: many mlx5 hardware driver fixes plus 2013-10-14 17:43:33 -07:00
input First round of new drivers, functionality and cleanups for IIO in the 3.13 cycle 2013-09-22 11:30:12 -07:00
iommu x86, build, pci: Fix PCI_MSI build on !SMP 2013-10-04 10:43:34 -07:00
ipack
irqchip ARM: SoC late changes for v3.12 2013-09-09 16:35:29 -07:00
isdn isdn: hfcpci_softirq: get func return to suppress compiler warning 2013-09-15 22:27:04 -04:00
leds Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds 2013-09-12 11:35:33 -07:00
lguest lguest: fix guest kernel stack overflow when TF bit set. 2013-09-06 08:09:27 +09:30
macintosh
mailbox mailbox: remove unnecessary platform_set_drvdata() 2013-09-18 12:02:00 -07:00
md dm snapshot: fix data corruption 2013-10-16 03:17:47 +01:00
media Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
memory ARM: SoC platform changes for 3.12 2013-09-06 13:30:06 -07:00
memstick memstick: add support for legacy memorysticks 2013-09-11 15:59:35 -07:00
message
mfd Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
misc mei: cancel stall timers in mei_reset 2013-09-26 13:56:53 -07:00
mmc ARM: shmobile: update SDHI DT compatibility string to the <unit>-<soc> format 2013-09-21 09:55:32 -07:00
mtd mtd: m25p80: Fix 4 byte addressing mode for Micron devices. 2013-09-27 05:56:22 -05:00
net Last batch of IB changes for 3.12: many mlx5 hardware driver fixes plus 2013-10-14 17:43:33 -07:00
nfc
ntb ntb: clean up unnecessary MSI/MSI-X capability find 2013-09-05 11:08:01 -07:00
nubus
of Revert "drivers: of: add initialization code for dma reserved memory" 2013-10-15 09:26:07 +01:00
oprofile oprofile: get rid of pointless forward declarations of struct super_block 2013-09-03 22:52:48 -04:00
parisc PCI changes for the v3.12 merge window: 2013-09-03 16:24:35 -07:00
parport drivers: parport: Kconfig: exclude h8300 for PARPORT_PC 2013-08-30 12:08:04 -07:00
pci ACPI / hotplug / PCI: Drop WARN_ON() from acpiphp_enumerate_slots() 2013-10-12 01:49:48 +02:00
pcmcia
pinctrl pinctrl: palmas: do not abort pin configuration for BIAS_DEFAULT 2013-09-27 16:22:43 +02:00
platform Merge branch 'for_linus' of git://cavan.codon.org.uk/platform-drivers-x86 2013-09-15 17:42:59 -04:00
pnp pnp: change pnp bus pm_ops to invoke pnp driver dev_pm_ops if specified 2013-09-11 15:58:15 -07:00
power Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
pps Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
ps3
ptp
pwm ARM: SoC cleanups for 3.12 2013-09-06 13:21:16 -07:00
rapidio
regulator Merge remote-tracking branch 'regulator/fix/wm8350' into regulator-linus 2013-09-30 12:04:33 +01:00
remoteproc
reset
rpmsg
rtc HID RTC: Open sensor hub open close 2013-10-01 22:06:15 +01:00
s390 s390/sclp: properly detect line mode console 2013-09-30 13:04:39 +02:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-09-19 13:57:28 -05:00
sfi
sh
sn
spi Merge remote-tracking branch 'spi/fix/s3c64xx' into spi-linus 2013-10-07 14:51:59 +01:00
ssb
staging staging: comedi: protect against detach during write operation 2013-11-11 16:16:44 -08:00
target iscsi-target; Allow an extra tag_num / 2 number of percpu_ida tags 2013-10-03 14:22:45 -07:00
tc
thermal drivers: thermal: add check when unregistering cpu cooling 2013-09-03 09:10:34 -04:00
tty serial: vt8500: add missing braces 2013-10-16 13:22:16 -07:00
uio Driver core patches for 3.12-rc1 2013-09-03 11:37:15 -07:00
usb usb: misc: usb3503: Fix compile error due to incorrect regmap depedency 2013-10-16 13:52:16 -07:00
uwb
vfio VFIO: vfio_iommu_type1: fix bug caused by break in nested loop 2013-10-11 10:40:46 -06:00
vhost vhost/scsi: Use GFP_ATOMIC with percpu_ida_alloc for obtaining tag 2013-10-01 21:27:31 -07:00
video video: mxsfb: Add missing break 2013-09-26 15:33:23 +03:00
virt
virtio virtio_pci: pm: Use CONFIG_PM_SLEEP instead of CONFIG_PM 2013-09-09 10:02:53 +09:30
vlynq
vme
w1 w1 - call request_module with w1 master mutex unlocked 2013-10-07 00:12:14 -07:00
watchdog watchdog: sunxi: Fix section mismatch 2013-10-13 20:02:03 +02:00
xen Bug-fixes: 2013-09-25 15:50:53 -07:00
zorro
Kconfig
Makefile