alistair23-linux/drivers/media
Mauro Carvalho Chehab e2c91d4d78 [media] media-device: get rid of the spinlock
Right now, the lock schema for media_device struct is messy,
since sometimes, it is protected via a spin lock, while, for
media graph traversal, it is protected by a mutex.

Solve this conflict by always using a mutex.

As a side effect, this prevents a bug when the media notifiers
is called at atomic context, while running the notifier callback:

 BUG: sleeping function called from invalid context at mm/slub.c:1289
 in_atomic(): 1, irqs_disabled(): 0, pid: 3479, name: modprobe
 4 locks held by modprobe/3479:
 #0:  (&dev->mutex){......}, at: [<ffffffff81ce8933>] __driver_attach+0xa3/0x160
 #1:  (&dev->mutex){......}, at: [<ffffffff81ce8941>] __driver_attach+0xb1/0x160
 #2:  (register_mutex#5){+.+.+.}, at: [<ffffffffa10596c7>] usb_audio_probe+0x257/0x1c90 [snd_usb_audio]
 #3:  (&(&mdev->lock)->rlock){+.+.+.}, at: [<ffffffffa0e6051b>] media_device_register_entity+0x1cb/0x700 [media]
 CPU: 2 PID: 3479 Comm: modprobe Not tainted 4.5.0-rc3+ #49
 Hardware name:                  /NUC5i7RYB, BIOS RYBDWi35.86A.0350.2015.0812.1722 08/12/2015
 0000000000000000 ffff8803b3f6f288 ffffffff81933901 ffff8803c4bae000
 ffff8803c4bae5c8 ffff8803b3f6f2b0 ffffffff811c6af5 ffff8803c4bae000
 ffffffff8285d7f6 0000000000000509 ffff8803b3f6f2f0 ffffffff811c6ce5
 Call Trace:
 [<ffffffff81933901>] dump_stack+0x85/0xc4
 [<ffffffff811c6af5>] ___might_sleep+0x245/0x3a0
 [<ffffffff811c6ce5>] __might_sleep+0x95/0x1a0
 [<ffffffff8155aade>] kmem_cache_alloc_trace+0x20e/0x300
 [<ffffffffa0e66e3d>] ? media_add_link+0x4d/0x140 [media]
 [<ffffffffa0e66e3d>] media_add_link+0x4d/0x140 [media]
 [<ffffffffa0e69931>] media_create_pad_link+0xa1/0x600 [media]
 [<ffffffffa0fe11b3>] au0828_media_graph_notify+0x173/0x360 [au0828]
 [<ffffffffa0e68a6a>] ? media_gobj_create+0x1ba/0x480 [media]
 [<ffffffffa0e606fb>] media_device_register_entity+0x3ab/0x700 [media]

Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2016-04-20 13:12:02 -03:00
..
common [media] siano: firmware buffer is too small 2016-02-16 09:29:13 -02:00
dvb-core [media] dvb-core: fix return code checking for devices with CA 2016-03-03 14:33:33 -03:00
dvb-frontends [media] m88ds3103: fix undefined division 2016-04-13 19:17:39 -03:00
firewire
i2c [media] m5mols: potential uninitialized variable 2016-04-13 17:10:59 -03:00
mmc
pci [media] cx23885: uninitialized variable in cx23885_av_work_handler() 2016-04-13 17:10:32 -03:00
platform [media] media: platform: rcar_jpu, vsp1: Use ARCH_RENESAS 2016-04-13 19:16:41 -03:00
radio [media] tea575x: convert to library 2016-02-10 09:34:28 -02:00
rc [media] mceusb: use %*ph for small buffer dumps 2016-03-10 13:37:44 -03:00
tuners [media] xc4000: shut up a bogus smatch message 2016-02-23 07:14:02 -03:00
usb [media] au0828: remove unused macro 2016-04-13 17:13:00 -03:00
v4l2-core Revert "[media] v4l2-ioctl: simplify code" 2016-04-13 19:09:09 -03:00
Kconfig
Makefile
media-device.c [media] media-device: get rid of the spinlock 2016-04-20 13:12:02 -03:00
media-devnode.c [media] media-devnode: add missing mutex lock in error handler 2016-04-06 05:39:56 -07:00
media-entity.c [media] media-device: get rid of the spinlock 2016-04-20 13:12:02 -03:00