diff options
author | Kulikov Vasiliy <segooon@gmail.com> | 2010-07-27 14:42:40 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-08 22:43:06 -0400 |
commit | d0a38ce27e1b11116f02835b076fcb79db987e2c (patch) | |
tree | d1b638662451edc34b83ac31b4d31acf65b2be1b /drivers | |
parent | e03b9843dc30ba44dedffdfa4180f0723f04e3ab (diff) |
V4L/DVB: dvb: siano: free spinlock before schedule()
Calling schedule() holding spinlock with disables irqs is improper. As
spinlock protects list coredev->buffers, it can be unlocked untill wakeup.
This bug was introduced in a9349315f65cd6a16e8fab1f6cf0fd40f379c4db.
Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/dvb/siano/smscoreapi.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/media/dvb/siano/smscoreapi.c b/drivers/media/dvb/siano/smscoreapi.c index 7f2c94a15ab1..d93468cd3a85 100644 --- a/drivers/media/dvb/siano/smscoreapi.c +++ b/drivers/media/dvb/siano/smscoreapi.c | |||
@@ -1113,9 +1113,11 @@ struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev) | |||
1113 | */ | 1113 | */ |
1114 | 1114 | ||
1115 | prepare_to_wait(&coredev->buffer_mng_waitq, &wait, TASK_INTERRUPTIBLE); | 1115 | prepare_to_wait(&coredev->buffer_mng_waitq, &wait, TASK_INTERRUPTIBLE); |
1116 | 1116 | if (list_empty(&coredev->buffers)) { | |
1117 | if (list_empty(&coredev->buffers)) | 1117 | spin_unlock_irqrestore(&coredev->bufferslock, flags); |
1118 | schedule(); | 1118 | schedule(); |
1119 | spin_lock_irqsave(&coredev->bufferslock, flags); | ||
1120 | } | ||
1119 | 1121 | ||
1120 | finish_wait(&coredev->buffer_mng_waitq, &wait); | 1122 | finish_wait(&coredev->buffer_mng_waitq, &wait); |
1121 | 1123 | ||