V4L/DVB: ngene: Do not call demuxer with interrupts disabled
authorOliver Endriss <o.endriss@gmx.de>
Sun, 16 May 2010 08:17:49 +0000 (05:17 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 1 Jun 2010 04:20:10 +0000 (01:20 -0300)
It is neither a good idea nor necessary to call the demuxer with interrupts disabled.

Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/ngene/ngene-core.c

index c8b4dfa..46749d6 100644 (file)
@@ -147,24 +147,24 @@ static void demux_tasklet(unsigned long data)
                } else {
                        if (chan->HWState == HWSTATE_RUN) {
                                u32 Flags = 0;
+                               IBufferExchange *exch1 = chan->pBufferExchange;
+                               IBufferExchange *exch2 = chan->pBufferExchange2;
                                if (Cur->ngeneBuffer.SR.Flags & 0x01)
                                        Flags |= BEF_EVEN_FIELD;
                                if (Cur->ngeneBuffer.SR.Flags & 0x20)
                                        Flags |= BEF_OVERFLOW;
-                               if (chan->pBufferExchange)
-                                       chan->pBufferExchange(chan,
-                                                             Cur->Buffer1,
-                                                             chan->
-                                                             Capture1Length,
-                                                             Cur->ngeneBuffer.
-                                                             SR.Clock, Flags);
-                               if (chan->pBufferExchange2)
-                                       chan->pBufferExchange2(chan,
-                                                              Cur->Buffer2,
-                                                              chan->
-                                                              Capture2Length,
-                                                              Cur->ngeneBuffer.
-                                                              SR.Clock, Flags);
+                               spin_unlock_irq(&chan->state_lock);
+                               if (exch1)
+                                       exch1(chan, Cur->Buffer1,
+                                               chan->Capture1Length,
+                                               Cur->ngeneBuffer.SR.Clock,
+                                               Flags);
+                               if (exch2)
+                                       exch2(chan, Cur->Buffer2,
+                                               chan->Capture2Length,
+                                               Cur->ngeneBuffer.SR.Clock,
+                                               Flags);
+                               spin_lock_irq(&chan->state_lock);
                        } else if (chan->HWState != HWSTATE_STOP)
                                chan->HWState = HWSTATE_RUN;
                }