Julian Scheel wrote: > Oliver Endriss schrieb: > > Julian Scheel wrote: > > > >> Attached is a patch which fixes an issue which I see with budget-av based > >> cards using libdvben50221 based programs. > >> After some time (sometimes just a few minutes, sometimes hours) the stack > >> breaks with error -2 or -3 and won't recover until the modules are reloaded. > >> > > > > Please post the error log. > > > > > >> This does not happen anymore with this patch, but if no CI-interface is > >> connected this patch floads the syslog with weird error-messages of which I > >> have no idea why they are shown. > >> > > > > Please post a log of these error messages. > > > > Thanks, > > > > Oliver > > > > > Sure, this is the error that loops all over: > BUG: scheduling while atomic: kdvb-ca-0:0/0x00000001/3030 > [<c03c51a6>] __sched_text_start+0x56/0x7a4 > [<c012c4bd>] lock_timer_base+0x15/0x2f > [<c012c5c9>] __mod_timer+0x94/0x9e > [<c03c6054>] schedule_timeout+0x70/0x8d > [<c03c5869>] __sched_text_start+0x719/0x7a4 > [<c012bbfd>] process_timeout+0x0/0x5 > [<c012c5e0>] msleep+0xd/0x12 > [<e0bfbe23>] saa7146_wait_for_debi_done+0xda/0xec [saa7146] > [<e0be778f>] ttpci_budget_debiread+0x47/0xd6 [budget_core] > [<e0c3728b>] ciintf_poll_slot_status+0x99/0x146 [budget_av] > [<e0c1d2d0>] dvb_ca_en50221_check_camstatus+0x37/0xae [dvb_core] > [<e0c1e493>] dvb_ca_en50221_thread+0x1c7/0xb24 [dvb_core] > [<c0134be4>] autoremove_wake_function+0x0/0x35 > [<c0127072>] do_exit+0x6a9/0x6ad > [<c03c8a61>] do_page_fault+0x277/0x525 > [<c03c9612>] kprobe_flush_task+0x4b/0x80 > [<c012118f>] schedule_tail+0x4f/0x87 > [<c0103d46>] ret_from_fork+0x6/0x1c > [<e0c1e2cc>] dvb_ca_en50221_thread+0x0/0xb24 [dvb_core] > [<c0104a37>] kernel_thread_helper+0x7/0x10 > ======================= Well, that's not surprising. If you set uselocks=1, ttpci_budget_debiread/write must not sleep, i.e. you have to set nobusyloop=0. Does it work now? Nevertheless I don't like busy looping with interrupts disabled. AFAICS the budget_debi routines are never called from interrupt context, so it should be sufficient to use spin_[un]lock_bh() instead of spin_[un]lock_irq_save(). Could you please try this? CU Oliver -- ---------------------------------------------------------------- VDR Remote Plugin 0.3.9: http://www.escape-edv.de/endriss/vdr/ ---------------------------------------------------------------- _______________________________________________ linux-dvb mailing list linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb