linux/drivers
Mike Isely 794b16072e V4L/DVB (7321): pvrusb2: Rework context handling and initialization
This change significantly rearranges pvr2_context level initialization
and operation:

1. A new kernel thread is set up for management of the context.

2. Destruction of the pvr2_context instance is moved into the kernel
   thread.  No other context is able to remove the instance; doing
   this simplifies lock handling.

3. The callback into pvrusb2-main, which is used to trigger
   initialization of each interface, is now issued from this kernel
   thread.  Previously it had been indirectly issued out of the work
   queue thread in pvr2_hdw, which led to deadlock issues if the
   interface needed to change a control setting (which in turn
   requires dispatch of another work queue entry).

4. Callbacks into the interfaces (via the pvr2_channel structure) are
   now issued strictly from this thread.  The net result of this is
   that such callback functions can now also safely operate driver
   controls without deadlocking the work queue.  (At the moment this
   is not actually a problem, but I'm anticipating issues with this in
   the future).

5. There is no longer any need for anyone to enter / exit the
   pvr2_context structure.  Implementation of the kernel thread here
   allows this all to be internal now, simplifying other logic.

6. A very very longstanding issue involving a mutex deadlock between
   the pvrusb2 driver and v4l should now be solved.  The deadlock
   involved the pvr2_context mutex and a globals-protecting mutex in
   v4l.  During initialization the driver would take the pvr2_context
   mutex first then the v4l2 interface would register with v4l and
   implicitly take the v4l mutex.  Later when v4l would call back into
   the driver, the two mutexes could possibly be taken in the opposite
   order, a situation that can lead to deadlock.  In practice this
   really wasn't an issue unless a v4l app tried to start VERY early
   after the driver appeared.  However it still needed to be solved,
   and with the use of the kernel thread relieving need for
   pvr2_context mutex, the problem should be finally solved.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-24 14:07:48 -03:00
..
acorn/char
acpi Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/juhl/trivial 2008-04-21 16:36:46 -07:00
amba
ata Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2008-04-21 15:49:58 -07:00
atm drivers/atm: use time_before, time_before_eq, etc 2008-04-19 18:14:50 -07:00
auxdisplay
base bus_remove_device: be more careful about incomplete initialization 2008-04-22 17:40:36 -07:00
block fix brd allocation flags 2008-04-22 13:38:03 -07:00
bluetooth hci_usb: remove code obfuscation 2008-04-19 18:17:26 -07:00
cdrom cdrom: use kmalloced buffers instead of buffers on stack 2008-04-21 09:50:08 +02:00
char Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/juhl/trivial 2008-04-21 16:36:46 -07:00
clocksource tclib: Fix compile warnings 2008-03-13 22:53:29 +01:00
connector connector: convert to single-threaded workqueue 2008-03-23 21:51:12 -07:00
cpufreq
cpuidle cpuidle: fix 100% C0 statistics regression 2008-03-26 00:58:19 -04:00
crypto [CRYPTO] padlock-aes: Use generic setkey function 2008-04-21 10:19:34 +08:00
dca
dio
dma DMA engine: typo fixes 2008-04-21 22:38:45 +00:00
edac
eisa
firewire Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
firmware Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2008-04-21 15:49:58 -07:00
gpio gpio/pca953x bugfix: mark as can_sleep 2008-03-10 18:01:19 -07:00
hid HID: Suppress hidinput for Samsung IR control 2008-04-22 11:34:59 +02:00
hwmon hwmon: (w83781d) Fix I/O resource conflict with PNP 2008-03-27 08:40:41 -04:00
i2c i2c: Fix platform driver hotplug/coldplug 2008-04-22 22:16:49 +02:00
ide cdrom: make unregister_cdrom() return void 2008-04-21 09:50:08 +02:00
ieee1394 Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
infiniband IB/ipath: Correct capitalization "IntX" -> "INTx" 2008-04-21 18:19:15 -07:00
input Merge branch 'semaphore' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc 2008-04-21 15:41:27 -07:00
isdn Merge branch 'irq-cleanups-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/misc-2.6 2008-04-21 15:56:19 -07:00
leds Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-23 12:23:45 -07:00
lguest drivers: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:16:32 -04:00
macintosh Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
mca
md RAID: remove trailing space from printk line 2008-04-21 22:42:58 +00:00
media V4L/DVB (7321): pvrusb2: Rework context handling and initialization 2008-04-24 14:07:48 -03:00
memstick memstick: convert struct class_device to struct device 2008-04-19 19:10:29 -07:00
message SCSI: convert struct class_device to struct device 2008-04-19 19:10:33 -07:00
mfd Merge branch 'semaphore' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc 2008-04-21 15:41:27 -07:00
misc [IA64] run drivers/misc/sgi-xp through scripts/checkpatch.pl 2008-04-22 15:08:55 -07:00
mmc mmc: sdio_ops.c should #include "sdio_ops.h" 2008-04-18 20:05:33 +02:00
mtd Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-04-21 15:50:49 -07:00
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-23 12:23:45 -07:00
nubus
of [POWERPC] i2c: Fix build breakage introduced by OF helpers 2008-04-20 13:03:35 +10:00
oprofile
parisc PCI: remove parisc consumer of the pci global_list 2008-04-20 21:47:01 -07:00
parport avr32: don't offer PARPORT_PC 2008-04-19 20:40:10 -04:00
pci Fix cardbus resource allocation 2008-04-22 18:16:30 -07:00
pcmcia Merge branch 'merge-fixes' into devel 2008-04-19 17:17:34 +01:00
pnp pnpacpi: fix potential corruption on "pnpacpi: exceeded the max number of IRQ resources 2" 2008-04-23 12:22:13 -07:00
power
ps3 [POWERPC] PS3: Sys-manager Wake-on-LAN support 2008-04-01 20:43:08 +11:00
rapidio
rtc rtc: rtc-sh: Add support for periodic IRQs. 2008-04-18 09:50:01 -07:00
s390 Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
sbus
scsi Merge branch 'for-2.6.26' of git://git.kernel.dk/linux-2.6-block 2008-04-21 16:03:40 -07:00
serial Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-04-21 15:50:49 -07:00
sh
sn ioc3.c: replace remaining __FUNCTION__ occurrences 2008-03-17 08:11:48 -04:00
spi spi: spi_s3c24xx must initialize num_chipselect 2008-04-15 19:35:41 -07:00
ssb Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-04-17 23:56:30 -07:00
tc
telephony
thermal acpi thermal trip points increased to 12 2008-04-15 19:35:41 -07:00
uio UIO: hold a reference to the device's owner while the device is open 2008-04-19 19:10:18 -07:00
usb Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6 2008-04-21 15:44:57 -07:00
video Merge branch 'merge-fixes' into devel 2008-04-19 17:17:34 +01:00
virtio virtio: remove overzealous BUG_ON. 2008-04-07 13:14:22 -07:00
w1
watchdog Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
xen xen: fix grant table bug 2008-04-04 18:36:46 +02:00
zorro
Kconfig
Makefile