[linux-dvb] budget-av/CI-interface with SMP

Oliver Endriss o.endriss at gmx.de
Thu Aug 9 20:34:25 CEST 2007


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




More information about the linux-dvb mailing list