summaryrefslogtreecommitdiff
path: root/drivers/usb/image/Kconfig
blob: 320d368c8dace716b9f6e4a52085efba50d552bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#
# USB Imaging devices configuration
#
comment "USB Imaging devices"

config USB_MDC800
	tristate "USB Mustek MDC800 Digital Camera support"
	---help---
	  Say Y here if you want to connect this type of still camera to
	  your computer's USB port. This driver can be used with gphoto 0.4.3
	  and higher (look at <http://www.gphoto.org/>).
	  To use it create a device node with "mknod /dev/mustek c 180 32" and
	  configure it in your software.

	  To compile this driver as a module, choose M here: the
	  module will be called mdc800.

config USB_MICROTEK
	tristate "Microtek X6USB scanner support"
	depends on SCSI
	help
	  Say Y here if you want support for the Microtek X6USB and
	  possibly the Phantom 336CX, Phantom C6 and ScanMaker V6U(S)L.
	  Support for anything but the X6 is experimental.
	  Please report failures and successes.
	  The scanner will appear as a scsi generic device to the rest
	  of the system. Scsi support is required.
	  This driver can be compiled as a module, called microtek.
c3341'>sound/soc/kirkwood/Kconfig parent1b1bc42c1692e9b62756323c675a44cb1a1f9dbd (diff)
percpu-refcount: fix reference leak during percpu-atomic transition
percpu_ref_tryget() and percpu_ref_tryget_live() should return "true" IFF they acquire a reference. But the return value from atomic_long_inc_not_zero() is a long and may have high bits set, e.g. PERCPU_COUNT_BIAS, and the return value of the tryget routines is bool so the reference may actually be acquired but the routines return "false" which results in a reference leak since the caller assumes it does not need to do a corresponding percpu_ref_put(). This was seen when performing CPU hotplug during I/O, as hangs in blk_mq_freeze_queue_wait where percpu_ref_kill (blk_mq_freeze_queue_start) raced with percpu_ref_tryget (blk_mq_timeout_work). Sample stack trace: __switch_to+0x2c0/0x450 __schedule+0x2f8/0x970 schedule+0x48/0xc0 blk_mq_freeze_queue_wait+0x94/0x120 blk_mq_queue_reinit_work+0xb8/0x180 blk_mq_queue_reinit_prepare+0x84/0xa0 cpuhp_invoke_callback+0x17c/0x600 cpuhp_up_callbacks+0x58/0x150 _cpu_up+0xf0/0x1c0 do_cpu_up+0x120/0x150 cpu_subsys_online+0x64/0xe0 device_online+0xb4/0x120 online_store+0xb4/0xc0 dev_attr_store+0x68/0xa0 sysfs_kf_write+0x80/0xb0 kernfs_fop_write+0x17c/0x250 __vfs_write+0x6c/0x1e0 vfs_write+0xd0/0x270 SyS_write+0x6c/0x110 system_call+0x38/0xe0 Examination of the queue showed a single reference (no PERCPU_COUNT_BIAS, and __PERCPU_REF_DEAD, __PERCPU_REF_ATOMIC set) and no requests. However, conditions at the time of the race are count of PERCPU_COUNT_BIAS + 0 and __PERCPU_REF_DEAD and __PERCPU_REF_ATOMIC set. The fix is to make the tryget routines use an actual boolean internally instead of the atomic long result truncated to a int. Fixes: e625305b3907 percpu-refcount: make percpu_ref based on longs instead of ints Link: https://bugzilla.kernel.org/show_bug.cgi?id=190751 Signed-off-by: Douglas Miller <dougmill@linux.vnet.ibm.com> Reviewed-by: Jens Axboe <axboe@fb.com> Signed-off-by: Tejun Heo <tj@kernel.org> Fixes: e625305b3907 ("percpu-refcount: make percpu_ref based on longs instead of ints") Cc: stable@vger.kernel.org # v3.18+
Diffstat (limited to 'sound/soc/kirkwood/Kconfig')