problem with libertas driver, Marvell W8686, and PXA270 on 2.6.27-rc7
Jeff Sutherland
jeffs at fomsystems.com
Thu Oct 2 22:25:14 EDT 2008
On Thursday 02 October 2008, Dan Williams wrote:
> On Thu, 2008-10-02 at 10:17 -0400, Jeff Sutherland wrote:
> > I'm seeking some insight into the structure of the command flow when
> > communicating with a Murata wifi module using the W8686 chip connected
> > via SDIO on a PXA270-based system. On about 2 out of 3 boot ups, and
> > occasionally when configuring the network interface by hand after the
> > system is up and running, the kernel will oops from the BUG() instruction
> > at line 147 of drivers/net/wireless/libertas/if_sdio.c. When this
> > happens, the value of priv->resp_len[resp_idx] is always sitting at 142.
> > It's almost as if the command processing in
> > drivers/net/wireless/libertas/main.c is missing a command somehow.
> > Curiously, this only seems to happen when the interface is
>
> Hmm, could well be. The flow is supposed to be that the interface code
> puts responses into the unused slot and wakes up the main thread, and
> the main thread processes the response. Could be that if a second
> command response comes back from the card too soon the main thread
> wouldn't be woken up to process it yet.
>
> Everything I've seen and read indicates that commands are serialized and
> thus we can only have one command outstanding at any one time. Thus we
> can probably rule out fundamental problems with the implementation, but
> instead focus on bugs and/or quirks.
>
> Could you by any chance minimally parse the command response in
> if_sdio_handle_cmd() with something like:
>
> diff --git a/drivers/net/wireless/libertas/if_sdio.c
> b/drivers/net/wireless/libertas/if_sdio.c index b54e2ea..024a81e 100644
> --- a/drivers/net/wireless/libertas/if_sdio.c
> +++ b/drivers/net/wireless/libertas/if_sdio.c
> @@ -144,6 +144,18 @@ static int if_sdio_handle_cmd(struct if_sdio_card
> *card, spin_lock_irqsave(&priv->driver_lock, flags);
>
> i = (priv->resp_idx == 0) ? 1 : 0;
> +
> +if (priv->resp_len[i])
> +{
> +struct cmd_header *resp = (void *) buffer;
> +uint16_t respcmd = le16_to_cpu(resp->command);
> +uint16_t result = le16_to_cpu(resp->result);
> +uint16_t seqnum = le16_to_cpu(resp->seqnum);
> +
> +lbs_deb_sdio("CMD_RESP: response 0x%04x, result 0x%04x, seq %d, size
> %d\n", + respcmd, result, seqnum, size);
> +}
> +
> BUG_ON(priv->resp_len[i]);
> priv->resp_len[i] = size;
> memcpy(priv->resp_buf[i], buffer, size);
>
> that coupled with turning on LBS_DEB_CMD and LBS_DEB_SDIO would be quite
> interesting to see the results of and should help narrow down what's
> going on. I'm especially interested in the sequence number to see if if
> the before-BUG_ON response is the same sequence # as the BUG_ON
> response.
>
> Dan
Well I've had a bit of luck here. The driver will not BUG() with LBS_DEB_CMD
and LBS_DEB_SDIO enabled at the same time, but WILL bug pretty regularly if
these are enabled singly in turn. The transcript is getting pretty long so
please see attached log file.
Regards,
-Jeff
--
FOM Systems Inc. www.fomsystems.com
-------------- next part --------------
libertas_debug=0x404000:
Setting up IP spoofing protection: rp_filter.
Configuring network interfaces... libertas cmd: DNLD_CMD: command 0x0010, seq 7, size 18
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas cmd: CMD_RESP: response 0x8010, seq 7, size 18
libertas cmd: DNLD_CMD: command 0x0028, seq 8, size 12
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas cmd: CMD_RESP: response 0x8028, seq 8, size 12
libertas cmd: DNLD_CMD: command 0x001e, seq 9, size 14
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas cmd: CMD_RESP: response 0x801e, seq 9, size 14
libertas cmd: SET_WEP: add key 0 (104 bit)
libertas cmd: DNLD_CMD: command 0x0013, seq 10, size 80
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 84 bytes
libertas cmd: CMD_RESP: response 0x8013, seq 10, size 80
libertas cmd: DNLD_CMD: command 0x0028, seq 11, size 12
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas cmd: CMD_RESP: response 0x8028, seq 11, size 12
libertas cmd: DNLD_CMD: command 0x0028, seq 12, size 12
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas cmd: CMD_RESP: response 0x8028, seq 12, size 12
libertas cmd: DNLD_CMD: command 0x002f, seq 13, size 12
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas cmd: CMD_RESP: response 0x802f, seq 13, size 12
libertas cmd: DNLD_CMD: command 0x0016, seq 14, size 142
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas cmd: CMD_RESP: response 0x8016, seq 14, size 142
libertas cmd: DNLD_CMD: command 0x0006, seq 15, size 75
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 15 bytes
libertas cmd: CMD_RESP: response 0x8006, seq 15, size 11
libertas cmd: DNLD_CMD: command 0x0016, seq 16, size 142
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas cmd: CMD_RESP: response 0x8016, seq 16, size 142
libertas cmd: DNLD_CMD: command 0x0006, seq 17, size 75
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 15 bytes
libertas cmd: CMD_RESP: response 0x8006, seq 17, size 11
libertas cmd: DNLD_CMD: command 0x0016, seq 18, size 142
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas cmd: CMD_RESP: response 0x8016, seq 18, size 142
libertas cmd: DNLD_CMD: command 0x0006, seq 19, size 68
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 94 bytes
libertas cmd: CMD_RESP: response 0x8006, seq 19, size 90
libertas cmd: DNLD_CMD: command 0x0011, seq 20, size 25
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 29 bytes
libertas cmd: CMD_RESP: response 0x8011, seq 20, size 25
libertas cmd: RADIO_CONTROL: radio ON, preamble 0
libertas cmd: DNLD_CMD: command 0x001c, seq 21, size 12
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas cmd: CMD_RESP: response 0x801c, seq 21, size 12
libertas cmd: DNLD_CMD: command 0x0050, seq 22, size 64
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 45 bytes
libertas cmd: CMD_RESP: response 0x8012, seq 22, size 41
libertas cmd: DNLD_CMD: command 0x001f, seq 23, size 16
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 20 bytes
libertas cmd: CMD_RESP: response 0x801f, seq 23, size 16
libertas cmd: RSSI: beacon 217, avg 0
libertas cmd: DNLD_CMD: command 0x000b, seq 24, size 60
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 64 bytes
libertas cmd: CMD_RESP: response 0x800b, seq 24, size 60
libertas cmd: DNLD_CMD: command 0x001f, seq 25, size 16
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 20 bytes
libertas cmd: CMD_RESP: response 0x801f, seq 25, size 16
libertas cmd: RSSI: beacon 218, avg 0
libertas cmd: DNLD_CMD: command 0x001e, seq 26, size 14
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas cmd: CMD_RESP: response 0x801e, seq 26, size 14
libertas cmd: DNLD_CMD: command 0x0016, seq 27, size 142
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas cmd: CMD_RESP: response 0x8016, seq 27, size 142
libertas cmd: DNLD_CMD: command 0x0016, seq 28, size 142
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas cmd: CMD_RESP: response 0x8016, seq 28, size 142
libertas cmd: DNLD_CMD: command 0x0016, seq 29, size 142
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas cmd: CMD_RESP: response 0x8016, seq 29, size 142
udhcpc (v1.2.1) started
udhcpc[1502]: udhcpc (v1.2.1) started
run-parts: /etc/udhcpc.d/00avahi-autoipd exited with return code 1: Success
libertas cmd: DNLD_CMD: command 0x0010, seq 30, size 18
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas cmd: CMD_RESP: response 0x8010, seq 30, size 18
Sending discover...
udhcpc[1502]: Sending discover...
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 92 bytes
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 390 bytes
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 92 bytes
Sending select for 192.168.13.49...
udhcpc[1502]: Sending select for 192.168.13.49...
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 92 bytes
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 390 bytes
Lease of 192.168.13.49 obtained, lease time 999999
udhcpc[1502]: Lease of 192.168.13.49 obtained, lease time 999999
run-parts: /etc/udhcpc.d/00avahi-autoipd exited with return code 1: Success
libertas cmd: DNLD_CMD: command 0x0010, seq 31, size 18
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas cmd: CMD_RESP: response 0x8010, seq 31, size 18
libertas cmd: DNLD_CMD: command 0x0010, seq 32, size 18
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas cmd: CMD_RESP: response 0x8010, seq 32, size 18
adding dns 192.168.13.200
adding dns 192.168.13.1
done.
Starting portmap daemon: portmap.
With debug level set to 0x400000 instead of 0x404000:
Setting up IP spoofing protection: rp_filter.
Configuring network interfaces... libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 84 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 15 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 15 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 94 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 29 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 45 bytes
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#1)
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#2)
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#3)
libertas: command 0x0016 timed out
libertas: Excessive timeouts submitting command 0x0016
libertas: PREP_CMD: command 0x0016 failed: -110
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas: Received CMD_RESP with invalid sequence 26 (expected 27)
libertas sdio: packet of type 1 and size 146 bytes
libertas: Received CMD_RESP with invalid sequence 26 (expected 27)
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 20 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 64 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 20 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
udhcpc (v1.2.1) started
udhcpc[1502]: udhcpc (v1.2.1) started
run-parts: /etc/udhcpc.d/00avahi-autoipd exited with return code 1: Success
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
Sending discover...
udhcpc[1502]: Sending discover...
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 92 bytes
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 390 bytes
Sending select for 192.168.13.49...
udhcpc[1502]: Sending select for 192.168.13.49...
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 390 bytes
Lease of 192.168.13.49 obtained, lease time 999999
udhcpc[1502]: Lease of 192.168.13.49 obtained, lease time 999999
run-parts: /etc/udhcpc.d/00avahi-autoipd exited with return code 1: Success
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
adding dns 192.168.13.200
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 92 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 94 bytes
libertas sdio: interrupt: 0x2
adding dns 192.168.13.1
done.
Starting portmap daemon: portmap.
and finally, here is an oops with libertas_debug set to 0x400000:
Setting up IP spoofing protection: rp_filter.
Configuring network interfaces...
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 22 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 84 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 15 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 15 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 94 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 18 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 29 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 16 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 45 bytes
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#1)
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#2)
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#3)
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 0 and size 92 bytes
libertas: command 0x0016 timed out
libertas: Excessive timeouts submitting command 0x0016
libertas: PREP_CMD: command 0x0016 failed: -110
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 146 bytes
libertas sdio: interrupt: 0x2
libertas sdio: interrupt: 0x1
libertas sdio: packet of type 1 and size 20 bytes
libertas sdio: CMD_RESP: response 0x801f, result 0x0000, seq 27, size 16
kernel BUG at drivers/net/wireless/libertas/if_sdio.c:159!
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 817 [#1]
Modules linked in: snd_soc_phreedom snd_soc_wm9713 snd_soc_pxa2xx_ac97
snd_soc_pxa2xx snd_soc_core snd_pcm snd_timer snd
_page_alloc ac97_bus libertas_sdio libertas pxamci i2c_pxa mmc_core i2c_core
pxa27x_keypad gpio_keys
CPU: 0 Not tainted (2.6.27-rc7 #92)
PC is at __bug+0x20/0x2c
LR is at log_wait+0x0/0x8
pc : [<c002ad2c>] lr : [<c0303154>] psr: 60000093
sp : c79e5f30 ip : c0303154 fp : c79e5f3c
r10: 00000010 r9 : bf049ca0 r8 : c78f8380
r7 : 00000000 r6 : 80000013 r5 : c714001c r4 : 0000008e
r3 : 00000000 r2 : 20000093 r1 : 00000001 r0 : 0000003e
Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0000397f Table: a7980000 DAC: 00000017
Process ksdiorqd (pid: 1328, stack limit = 0xc79e4270)
Stack: (0xc79e5f30 to 0xc79e6000)
5f20: c79e5f8c c79e5f40 bf04c5f0 c002ad18
5f40: 0000001b 00000010 00000000 c7140018 00000034 00000195 00000000 00000000
5f60: 00000000 00000000 c79aac00 c71b0e00 c71b0e00 00000001 7fffffff 00000000
5f80: c79e5fd4 c79e5f90 bf0129bc bf04c140 00000000 c79e5fa7 00000001 c79e4000
5fa0: 00000001 029e5fb0 c02590f0 c79e4000 c79aac00 bf0128c4 00000000 00000000
5fc0: 00000000 00000000 c79e5ff4 c79e5fd8 c004c1c4 bf0128d0 00000000 00000000
5fe0: 00000000 00000000 00000000 c79e5ff8 c003b384 c004c174 00001496 0014a60b
Backtrace:
[<c002ad0c>] (__bug+0x0/0x2c) from [<bf04c5f0>] (if_sdio_interrupt+0x4bc/0x9c8
[libertas_sdio])
[<bf04c134>] (if_sdio_interrupt+0x0/0x9c8 [libertas_sdio]) from [<bf0129bc>]
(sdio_irq_thread+0xf8/0x1f8 [mmc_core])
[<bf0128c4>] (sdio_irq_thread+0x0/0x1f8 [mmc_core]) from [<c004c1c4>]
(kthread+0x5c/0x94)
[<c004c168>] (kthread+0x0/0x94) from [<c003b384>] (do_exit+0x0/0x6ec)
r6:00000000 r5:00000000 r4:00000000
Code: e1a01000 e59f000c eb003a2a e3a03000 (e5833000)
---[ end trace 59b42b1d9f381fc4 ]---
Here is an oops with libertas_debug=0x4000:
Configuring network interfaces...
libertas cmd: DNLD_CMD: command 0x0010, seq 7, size 18
libertas cmd: CMD_RESP: response 0x8010, seq 7, size 18
libertas cmd: DNLD_CMD: command 0x0028, seq 8, size 12
libertas cmd: CMD_RESP: response 0x8028, seq 8, size 12
libertas cmd: DNLD_CMD: command 0x001e, seq 9, size 14
libertas cmd: CMD_RESP: response 0x801e, seq 9, size 14
libertas cmd: DNLD_CMD: command 0x0016, seq 10, size 142
libertas cmd: CMD_RESP: response 0x8016, seq 10, size 142
libertas cmd: DNLD_CMD: command 0x0016, seq 11, size 142
libertas cmd: CMD_RESP: response 0x8016, seq 11, size 142
libertas cmd: SET_WEP: add key 0 (104 bit)
libertas cmd: DNLD_CMD: command 0x0013, seq 12, size 80
libertas cmd: CMD_RESP: response 0x8013, seq 12, size 80
libertas cmd: DNLD_CMD: command 0x0016, seq 13, size 142
libertas cmd: CMD_RESP: response 0x8016, seq 13, size 142
libertas cmd: DNLD_CMD: command 0x0028, seq 14, size 12
libertas cmd: CMD_RESP: response 0x8028, seq 14, size 12
libertas cmd: DNLD_CMD: command 0x0028, seq 15, size 12
libertas cmd: CMD_RESP: response 0x8028, seq 15, size 12
libertas cmd: DNLD_CMD: command 0x002f, seq 16, size 12
libertas cmd: CMD_RESP: response 0x802f, seq 16, size 12
libertas cmd: DNLD_CMD: command 0x0006, seq 17, size 75
libertas cmd: CMD_RESP: response 0x8006, seq 17, size 11
libertas cmd: DNLD_CMD: command 0x0006, seq 18, size 75
libertas cmd: CMD_RESP: response 0x8006, seq 18, size 11
libertas cmd: DNLD_CMD: command 0x0006, seq 19, size 68
libertas cmd: CMD_RESP: response 0x8006, seq 19, size 90
libertas cmd: DNLD_CMD: command 0x001e, seq 20, size 14
libertas cmd: CMD_RESP: response 0x801e, seq 20, size 14
libertas cmd: DNLD_CMD: command 0x0011, seq 21, size 25
libertas cmd: CMD_RESP: response 0x8011, seq 21, size 25
libertas cmd: DNLD_CMD: command 0x0016, seq 22, size 142
libertas cmd: RADIO_CONTROL: radio ON, preamble 0
libertas cmd: CMD_RESP: response 0x8016, seq 22, size 142
libertas cmd: DNLD_CMD: command 0x001c, seq 23, size 12
libertas cmd: CMD_RESP: response 0x801c, seq 23, size 12
libertas cmd: DNLD_CMD: command 0x0016, seq 24, size 142
libertas cmd: CMD_RESP: response 0x8016, seq 24, size 142
libertas cmd: DNLD_CMD: command 0x0050, seq 25, size 64
libertas cmd: CMD_RESP: response 0x8012, seq 25, size 41
libertas cmd: DNLD_CMD: command 0x0016, seq 26, size 142
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#1)
libertas cmd: DNLD_CMD: command 0x0016, seq 26, size 142
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#2)
libertas cmd: DNLD_CMD: command 0x0016, seq 26, size 142
libertas: command 0x0016 timed out
libertas: requeueing command 0x0016 due to timeout (#3)
libertas cmd: DNLD_CMD: command 0x0016, seq 26, size 142
libertas: command 0x0016 timed out
libertas: Excessive timeouts submitting command 0x0016
libertas: PREP_CMD: command 0x0016 failed: -110
libertas cmd: DNLD_CMD: command 0x001f, seq 27, size 16
libertas cmd: CMD_RESP: response 0x8016, seq 26, size 142
libertas: Received CMD_RESP with invalid sequence 26 (expected 27)
kernel BUG at drivers/net/wireless/libertas/if_sdio.c:159!
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 817 [#1]
Modules linked in: snd_soc_phreedom snd_soc_wm9713 snd_soc_pxa2xx_ac97
snd_soc_pxa2xx snd_soc_core snd_pcm snd_timer snd
_page_alloc ac97_bus libertas_sdio libertas pxamci i2c_pxa mmc_core i2c_core
pxa27x_keypad gpio_keys
CPU: 0 Not tainted (2.6.27-rc7 #92)
PC is at __bug+0x20/0x2c
LR is at log_wait+0x0/0x8
pc : [<c002ad2c>] lr : [<c0303154>] psr: 60000093
sp : c731df30 ip : c0303154 fp : c731df3c
r10: 00000010 r9 : bf049ca0 r8 : c791c380
r7 : 00000000 r6 : 80000013 r5 : c79e001c r4 : 0000008e
r3 : 00000000 r2 : 20000093 r1 : 00000001 r0 : 0000003e
Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0000397f Table: a78d8000 DAC: 00000017
Process ksdiorqd (pid: 1352, stack limit = 0xc731c270)
Stack: (0xc731df30 to 0xc731e000)
df20: c731df8c c731df40 bf04c5f0 c002ad18
df40: 00000a00 00001002 00000000 c79e0018 00000034 00000195 00000000 00000000
df60: 00000000 00000000 c79cac00 c78cce00 c78cce00 00000001 7fffffff 00000000
df80: c731dfd4 c731df90 bf0129bc bf04c140 00000000 c731dfa7 00000001 c731c000
dfa0: 00000001 0231dfb0 c02590f0 c731c000 c79cac00 bf0128c4 00000000 00000000
dfc0: 00000000 00000000 c731dff4 c731dfd8 c004c1c4 bf0128d0 00000000 00000000
dfe0: 00000000 00000000 00000000 c731dff8 c003b384 c004c174 961a01eb 23020000
Backtrace:
[<c002ad0c>] (__bug+0x0/0x2c) from [<bf04c5f0>] (if_sdio_interrupt+0x4bc/0x9c8
[libertas_sdio])
[<bf04c134>] (if_sdio_interrupt+0x0/0x9c8 [libertas_sdio]) from [<bf0129bc>]
(sdio_irq_thread+0xf8/0x1f8 [mmc_core])
[<bf0128c4>] (sdio_irq_thread+0x0/0x1f8 [mmc_core]) from [<c004c1c4>]
(kthread+0x5c/0x94)
[<c004c168>] (kthread+0x0/0x94) from [<c003b384>] (do_exit+0x0/0x6ec)
r6:00000000 r5:00000000 r4:00000000
Code: e1a01000 e59f000c eb003a2a e3a03000 (e5833000)
---[ end trace 59b42b1d9f381fc4 ]---
libertas: command 0x001f timed out
libertas: requeueing command 0x001f due to timeout (#1)
libertas cmd: DNLD_CMD: command 0x001f, seq 27, size 16
libertas: command 0x001f timed out
libertas: requeueing command 0x001f due to timeout (#2)
libertas cmd: DNLD_CMD: command 0x001f, seq 27, size 16
libertas: command 0x001f timed out
libertas: requeueing command 0x001f due to timeout (#3)
libertas cmd: DNLD_CMD: command 0x001f, seq 27, size 16
libertas: command 0x001f timed out
libertas: Excessive timeouts submitting command 0x001f
(kernel locked up at this point)
More information about the libertas-dev
mailing list