To send DTMF CID sequence [A11111CR]
POL_FORWARD
getOffhook = 0
Freq1 : 13990
Freq2 : 4657
BUG: scheduling while atomic: ash/0x00000100/2020
Call Trace:
[<800074cc>] dump_stack+0x8/0x34
[<80219a04>] schedule+0x778/0x920
[<8021a7c4>] schedule_timeout+0x70/0xdc
[<80030a18>] msleep+0x24/0x34
[] playDtmfTone+0x148/0x6a4 [slic3217x]
[] playDtmfTone+0x598/0x6a4 [slic3217x]
看來root cause是因為在timer中用了msleep
造成它reschedule就crash
解決方式就是透過將timer的call時間拉長
讓Oscillators播放時間p_cid->dtmf_on_ms拉長一點
init_timer(&cid_dtmf_timer);
cid_dtmf_timer.function = cid_dtmf_do_timer;
cid_dtmf_timer.expires = jiffies + ms2jiffies(p_cid->dtmf_on_ms);
add_timer(&cid_dtmf_timer);
才不會造成dtmf signal lost
沒有留言:
張貼留言