Workaround for "fatal firmware error" iwn(4) problem.

Olivier Cochard-Labbé olivier at cochard.me
Sun May 18 13:57:29 UTC 2014


On Fri, May 16, 2014 at 8:06 PM, Edward Tomasz Napierała
<trasz at freebsd.org>wrote:

> I've started using FreeBSD laptop and iwn(4) failing at random moments
> like this...
>
> I had the same problem too with iwn(4).

>
> ... has been driving me crazy, so I wrote a workaround.  The patch
> can be found here:
>
> http://people.freebsd.org/~trasz/iwn.diff
>
>
I've tested you patch on a r266396, but it generate a panic:

wlan0: Ethernet address: 00:1d:e0:29:19:65
Starting wpa_supplicant.
Starting dhclient.
wlan0: no link .............. giving up
/etc/rc.d/dhclient: WARNING: failed to start dhclient
iwn0: iwn_intr: fatal firmware error
firmware error log:
  error type      = "NMI_INTERRUPT_WDG" (0x00000004)
  program counter = 0x0000046C
  source line     = 0x000000D0
  error data      = 0x0000000207030000
  branch link     = 0x00008370000004C2
  interrupt link  = 0x000006DE000018B8
  time            = 11427825
driver status:
  tx ring  0: qid=0  cur=0   queued=0
  tx ring  1: qid=1  cur=0   queued=0
  tx ring  2: qid=2  cur=0   queued=0
  tx ring  3: qid=3  cur=1   queued=0
  tx ring  4: qid=4  cur=68  queued=0
  tx ring  5: qid=5  cur=0   queued=0
  tx ring  6: qid=6  cur=0   queued=0
  tx ring  7: qid=7  cur=0   queued=0
  tx ring  8: qid=8  cur=0   queued=0
  tx ring  9: qid=9  cur=0   queued=0
  tx ring 10: qid=10 cur=0   queued=0
  tx ring 11: qid=11 cur=0   queued=0
  tx ring 12: qid=12 cur=0   queued=0
  tx ring 13: qid=13 cur=0   queued=0
  tx ring 14: qid=14 cur=0   queued=0
  tx ring 15: qid=15 cur=0   queued=0
  rx ring: cur=22
iwn0: iwn_intr: reinit; 0xfffffe00008090b0
iwn0: iwn_reinit_thread: controller panicked; resetting...


Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address   = 0xffff
fault code              = supervisor read data, page not present
instruction pointer     = 0x20:0xffffffff805a4b10
stack pointer           = 0x28:0xfffffe0120353b30
frame pointer           = 0x28:0xfffffe0120353b60
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 0 (iwn_reinit)

About the instruction pointer code:

addr2line -e /boot/kernel/kernel.symbols 0xffffffff805a4b10
/usr/src/sys/dev/iwn/if_iwn.c:6792

Regards,

Olivier


More information about the freebsd-hackers mailing list