[Home]

Summary:DAHLIN-00328: dahdi_dynamic kernel warning then crash due to driver flush in interrupt context
Reporter:Michael Walton (mike@farsouthnet.com)Labels:
Date Opened:2013-10-01 01:18:18Date Closed:2014-08-15 15:01:01
Priority:CriticalRegression?
Status:Closed/CompleteComponents:dahdi_dynamic dahdi_dynamic_eth
Versions:2.7.0 Frequency of
Occurrence
Constant
Related
Issues:
Environment:Ubuntu 10.04 with natty backport kernel 2.6.38-13Attachments:
Description:Steps to reproduce
* Build dahdi-linux, in my case:
{{make ARCH=i386 KVERS=2.6.38-13-generic-pae}}
* Set up a dynamic_eth span (e.g. dynamic = eth,eth1/00:50:c2:97:93:a1/3,16,4)
* Start dahdi driver, kernel WARN below:

{{WARNING: at .../kernel/softirq.c:159 local_bh_enable+0x60/0x90()}}

* After some time (seconds to minutes), on my system, I get a kernel freeze with no additional messages
Comments:By: Michael Walton (mike@farsouthnet.com) 2013-10-01 01:20:39.168-0500

I believe the bug is simply dahdi_dynamic.c:213 (see code snippet below from line 213 onward) - the #ifdef should in fact be #ifndef (as implied by the comment).

{code:title=dahdi_dynamic.c:213}
#ifdef ENABLE_TASKLETS
/* If tasklets are not enabled, the above section will be called in
* interrupt context and the flushing of each driver will be called in a
* separate tasklet that only handles that. This is necessary since some
* of the dynamic spans need to call functions that require interrupts
* to be enabled but dahdi_transmit / ...sendmessage needs to be called
* each time the masterspan is processed which happens with interrupts
* disabled.
*
*/
tasklet_hi_schedule(&dahdi_dynamic_flush_tlet);
#else
{code}

Should be:

{code:title=dahdi_dynamic.c:213}
#ifndef ENABLE_TASKLETS
{code}


This change solves the problem for me. I have tried with ENABLE_TASKLETS defined and undefined, both OK.

By: Russ Meyerriecks (rmeyerriecks) 2014-08-12 15:08:18.121-0500

patch in code review

By: Russ Meyerriecks (rmeyerriecks) 2014-08-15 15:00:42.699-0500

Pushed into master. Thanks Michael!

http://git.asterisk.org/gitweb/?p=dahdi/linux.git;a=commitdiff;h=eedb4bf9441ae3545a4ab74eac2d10fa57681355