Skip to contentSkip to conversation

kernel panic in update_wstats()

at76_usb Stefano Brivio 3 participants 5 messages Apr 15, 2007 – Apr 17, 2007

lore
Share & tools
lore
#0 lore raw

I'm using the at76c503a driver (0.14beta1, but it looks almost identical to a76c503a git) on Linux 2.6.18.

I got the following kernel panic while using an AT76C503A card with firmware version 1.101.2 #84 (fcs_len 4). This happens almost immediately under heavy load in ad-hoc mode. It never happened when using the device on another box which had an OHCI USB controller, and I'm currently using an UHCI controller (but I wouldn't say this is related by any means).

I tried to comment out the whole update_wstats() function, and the kernel doesn't panic anymore.

BTW: is there any related development mailing list or IRC channel? I could be interested in development, in future.

Here comes the panic message (I just copied the relevant information by hand, as I didn't set up netconsole, but I can do that if needed):

PREEMPT

Modules linked in: orinoco_cs orinoco hermes apm at76_usb snd_pcm_oss

snd_mixer_oss xt_tcpudp ipt_MASQUERADE iptable_nat ip_nat ip_conntrack ip_tables x_tables ohci_hcd parport_pc parport crc_ccitt pcspkr pcmcia
yenta_socket rsrc_nonstatic pcmcia_core ide_scsi scsi_mod CPU: 0
EIP 0060:[<c2ff61c3>] Not tainted VLI
EFLAGS: 0010246 (2.6.18 #4)
EIP is at update_wstats+0x83/0xc0 [at76_usb]

Call Trace:
 rx_mgmt+0x9e/0x1180 [at76_usb]
 hcd_submit_urb+0x1c5/0x910
 rx_tasklet+0x247/0x1660 [at76_usb]
 uhci_free_urb_priv+0x6e/0xb0
 uhci_unlink_qh+0x66/0xd0
 usb_free_urb+0x1c/0x20
 uhci_giveback_urb+0xd0/0x1e0
 kfree_skbmem+0x42/0xa0
 at76c503_tx+0x404/0x590 [at76_usb]
 __qdisc_run+0x78/0x1f0
 tasklet_action+0x3e/0x70
 __do_softirq+0x42/0x90
 do_softirq+0x26/0x30
 irq_exit+0x35/0x40
 do_IRQ+0x36/0x70
 do_setitimer+0x52a/0x570
 common_interrupt+0x1a/0x20
 sys_select+0x3/0x1c0
 sys_sigreturn+0xaf/0xc8
 syscall_call+0x7/0xb
EIP: [<c2ff61c3>] update_wstats+0x83/0xc0 [at76_usb] SS:ESP 0068:c0ba9d54
  <0>Kernel panic - not syncing: Fatal exception in interrupt
Signature · 2 lines
Ciao
Stefano
#1 lore raw
Quoted 2 lines · Stefano Brivio

I'm using the at76c503a driver (0.14beta1, but it looks almost identical to a76c503a git) on Linux 2.6.18.

Are you sure you're running a version that has this fix from git:
4b50804c047272075f07edb5b62d857e3200d6a0

If you already have this fix, please try to comment out the different at76_calc_* functions to see which one causes the problem. Cheers,
-- Guido

#2 lore raw
Quoted 5 lines · On Mon, 16 Apr 2007 10:29:12 +0200 Guido Guenther <[email protected]> wrote:
Quoted 2 lines · Stefano Brivio

I'm using the at76c503a driver (0.14beta1, but it looks almost identical to a76c503a git) on Linux 2.6.18.

Are you sure you're running a version that has this fix from git:
4b50804c047272075f07edb5b62d857e3200d6a0

I missed it, it works now. Thanks Pavel and sorry for the noise. BTW, stats are still bogus (link, signal, noise level == 0). But I don't think it makes sense to debug this now, as you will probably have to deal with mac80211 soon.

I had to make a little patch in order to build the driver on a kernel version < 2.6.20. I don't think you want to merge this, as you are working for inclusion into mainline, but in case, here it is:

---

at76_usb.c +6 -0
index e39e31e..159901b 100644
@@ -35,6 +35,7 @@
 #include <net/iw_handler.h>
 #include <linux/firmware.h>
 #include <linux/leds.h>
+#include <linux/version.h>
 
 #include "at76_usb.h"
 #include "at76_usb_ids.h"
@@ -5961,7 +5962,12 @@ static struct at76_priv *alloc_new_device(struct usb_device *udev,
 	dev->netdev = netdev;
 
 	init_MUTEX(&dev->sem);
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+	INIT_WORK(&dev->devent_queue, at76_devent, (void *)&dev->devent_queue);
+#else
 	INIT_WORK(&dev->devent_queue, at76_devent);
+#endif
 
 	dev->open_count = 0;
 

--
Ciao
Stefano

#3 lore raw
Quoted 4 lines · Stefano Brivio

I missed it, it works now. Thanks Pavel and sorry for the noise. BTW, stats are still bogus (link, signal, noise level == 0). But I don't think it makes sense to debug this now, as you will probably have to deal with mac80211 soon.

If you mean Ad-Hoc, I agree. Quality of an Ad-Hoc connection is not well defined. It's better implemented across the board than for every driver.

Indeed, the driver is quite "soft", and could be a good candidate for mac80211 conversion. Although it wasn't a requirement for submission.

Quoted 4 lines

I had to make a little patch in order to build the driver on a kernel version < 2.6.20. I don't think you want to merge this, as you are working
for inclusion into mainline, but in case, here it is:

Correct, it's not what we want at this point, but thanks anyway.

Signature · 2 lines
Regards,
Pavel Roskin