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 | |
| 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>
| -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 | ||
