Comment 15 for bug 556350

Revision history for this message
Kirk Wolff (kirk-stpaulinternet) wrote :

Francisco,

I've found the solution to this problem. Its simpler than it appears, the problem is tracking down the source of the problem as linux doesn't necessarily tell you when a driver fails or locks up.

The problem is this (drum roll) the netjet driver.

The netjet ISDN PCI card and the digium wildcard PCI card happen to use the same PCI interface chip. This interface chip provides a PCI-bus abstraction to hardware designers and can be used in many applications though its marketed to VOIP. Unfortunately for us (or perhaps fortunately) the PCI interface chip isn't what the DAHDI and netnet drivers talk to, but the hardware that uses the chip to interface with the PCI bus. Apparently, due to some poor compliance considerations by both the netjet and the wildcard designers, they use the default PCI VID/PID for that chip, perhaps from their development kit. Since netjet became part of the linux kernel and dahdi has not, linux attempts to load the netjet driver. The netjet driver thinks its talking to a netjet PCI card when a Digium wildcard is installed, so it attempts to initialize it as such and locks the kernel up in the process. In some cases, and under what conditions I have no idea, dahdi loads first and netjet doesn't get probed so some people don't see a problem.

In order to prevent the netjet driver from taking over the digium wildcard, do the following:

1) power-off your machine and remove the digium card
2) Boot your machine
3) Append the following line to the file /etc/modprobe.d/blacklist.conf: "blacklist netjet"
4) Power-off your machine and re-install your digium card
5) Boot your machine and check that your digium card isn't sharing interrupts with any other device in your system by checking /proc/interrupts

- Kirk