Since videobuf_waiton is called with intr=1, it can return -EINTR and therefore
err may be non-zero. This happens when the system goes into the standby state.
Without the BUG() occurring, there's no problem with standby mode while DVB
is being used.
---
int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr);
[ 224.561803] Stopping tasks ... <0>------------[ cut here ]------------
[ 224.712939] kernel BUG at drivers/media/video/video-buf-dvb.c:59!
[ 224.712951] invalid opcode: 0000 [#1]
[ 224.712957] PREEMPT
[ 224.712969] Modules linked in:
[ 224.712985] CPU: 0
[ 224.712987] EIP: 0060:[<b03a0740>] Not tainted VLI
[ 224.712989] EFLAGS: 00010286 (2.6.23-rc2-git #282)
[ 224.713019] EIP is at videobuf_dvb_thread+0x160/0x170
[ 224.713028] eax: fffffffc ebx: 00000282 ecx: 00000000 edx: 00000000
[ 224.713038] esi: eeda63c0 edi: b1a1fa3c ebp: ea82bfcc esp: ea82bfb0
[ 224.713046] ds: 007b es: 007b fs: 0000 gs: 0000 ss: 0068
[ 224.713055] Process saa7134[0] dvb (pid: 6649, ti=ea82a000 task=eb1d5550 task.ti=ea82a000)
[ 224.713064] Stack: 00000009 b011ec68 b1a1fa44 b1a1fb28 b1a1fa3c b03a05e0 fffffffc ea82bfe0
[ 224.713103] b0135dec b0135d90 00000000 00000000 00000000 b0104e57 ea82fd70 00000000
[ 224.713140] 00000000 00000000 09010df7 862a0510
[ 224.713170] Call Trace:
[ 224.713178] [<b0104fca>] show_trace_log_lvl+0x1a/0x30
[ 224.713206] [<b010508b>] show_stack_log_lvl+0x8b/0xb0
[ 224.713220] [<b01052d3>] show_registers+0x1c3/0x320
[ 224.713235] [<b01055af>] die+0xff/0x210
[ 224.713248] [<b0105751>] do_trap+0x91/0xd0
[ 224.713261] [<b01059f8>] do_invalid_op+0x88/0xa0
[ 224.713274] [<b052206a>] error_code+0x6a/0x70
[ 224.713296] [<b0135dec>] kthread+0x5c/0x90
[ 224.713313] [<b0104e57>] kernel_thread_helper+0x7/0x10
[ 224.713327] =======================
[ 224.713335] Code: 8b 00 c7 04 24 c8 21 63 b0 89 44 24 04 e8 c9 29 d8 ff e9 cd fe ff ff 8b
07 c7 04 24 e8 21 63 b0 89 44 24 04 e8 b2 29 d8 ff eb c2 <0f> 0b eb fe 8d b6 00 00
00 00 8d bf 00 00 00 00 55 ba ea ff ff
[ 224.713590] EIP: [<b03a0740>] videobuf_dvb_thread+0x160/0x170 SS:ESP 0068:ea82bfb0
[ 224.713893] done.
drivers/media/video/video-buf-dvb.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/media/video/video-buf-dvb.c b/drivers/media/video/video-buf-dvb.c
index e617925..d2af82d 100644
--- a/drivers/media/video/video-buf-dvb.c
+++ b/drivers/media/video/video-buf-dvb.c
@@ -56,7 +56,6 @@ static int videobuf_dvb_thread(void *data)
struct videobuf_buffer, stream);
list_del(&buf->stream);
err = videobuf_waiton(buf,0,1);
- BUG_ON(0 != err);
/* no more feeds left or stop_feed() asked us to quit */
if (0 == dvb->nfeeds)
--
1.5.0.1
--
Simon Arlott