why no interrupt generated from Marvell wifi card in this case?

Dongas dongas86 at gmail.com
Thu Jul 9 10:22:58 EDT 2009


Dear ALL,

I'm debugging a transmit timeout issue when downloading files.
Finally i found the root cause was that the wifi card failed to
generate the interrupt as expected after a specific packet was sent to
card during the downloading process.
(According to the previous log i have , there shoud be a uploading
interrupt from card to notify the host that new packets received)
(Tried kernel 2.6.25 & 2.6.29, both have the same issue.)

Hopefully you can give me some help.

I have two questions:
1. There're many repeated packets sent to card via lbs_hard_start_xmit
fucntion during the downloading process. I'm not a expert on the TCP
protocol.
Is there any one who knows well about what 's function of them can
give some explain?
Are they used for handshaking for downloading between client and server?

2. Assume the packet is sent successfully to card,
Why the card didn't generte the uploading interrupt after its data is ready?
BTW, even the rssi command is sent when timeout happened, there's also
no command response interrupt from card, anybody knows why?

Please see in line for extra comments:

Below is the detailed log for 2.6.25(MMC log is simplified):
…………(Here the correct part of log is cut off)
-----------------------------> Begin to send the packet
<-------------------------
libertas enter (INT): lbs_hard_start_xmit():69
libertas tx (INT): lbs_hard_start_xmit lined up packet
libertas leave (INT): lbs_hard_start_xmit():169, ret 0

libertas thread: main-thread 111: intcounter=0 currenttxskb=00000000 dnld_sent=0
libertas thread: main-thread 222 (waking up): intcounter=0
currenttxskb=00000000 dnld_sent=0
libertas thread: main-thread 333: intcounter=0 currenttxskb=00000000 dnld_sent=0
libertas thread: main-thread 444: intcounter=0 currenttxskb=00000000 dnld_sent=0
libertas enter: lbs_execute_next_command():1748
libertas leave: lbs_execute_next_command():1883
libertas enter: if_sdio_host_to_card(type 0, bytes 90):711
libertas leave: if_sdio_host_to_card():782, ret 0

libertas thread: main-thread 111: intcounter=0 currenttxskb=00000000 dnld_sent=1
libertas thread: main-thread sleeping... Conn=0 IntC=0 PS_mode=0 PS_State=0

------------------> Here the packet is sent successfully <------------------
libertas enter: if_sdio_host_to_card_worker():363
mmc1: 52  10004000
irq 1  0x40000000
mmc1: d (52): 0: 00001009
mmc1: 53  92000060
irq 1  0x40e00000
irq 1  0x80000000
mmc1: d (53): 0: 00002000
libertas leave: if_sdio_host_to_card_worker():403

libertas enter (INT): lbs_hard_start_xmit():69
libertas tx (INT): lbs_hard_start_xmit lined up packet
libertas leave (INT): lbs_hard_start_xmit():169, ret 0

libertas thread: main-thread 222 (waking up): intcounter=0
currenttxskb=00000000 dnld_sent=1
libertas thread: main-thread 333: intcounter=0 currenttxskb=00000000 dnld_sent=1
libertas thread: main-thread 444: intcounter=0 currenttxskb=00000000 dnld_sent=1
libertas thread: main-thread 111: intcounter=0 currenttxskb=00000000 dnld_sent=1
libertas thread: main-thread sleeping... Conn=0 IntC=0 PS_mode=0 PS_State=0

-------------> Always no interrupt generated by card and timeout
happened <----------
NETDEV WATCHDOG: eth0: transmit timed out   -------- NETDEV WATCHDOG
libertas enter (INT): lbs_tx_timeout():471
libertas: tx watch dog timeout
libertas enter (INT): lbs_host_to_card_done():499
libertas leave (INT): lbs_host_to_card_done():510
libertas enter (INT): lbs_prepare_and_send_command():1317
libertas enter (INT): lbs_get_cmd_ctrl_node():1678
libertas leave (INT): lbs_get_cmd_ctrl_node():1696
libertas enter (INT): lbs_set_cmd_ctrl_node():1719
libertas leave (INT): lbs_set_cmd_ctrl_node():1727
libertas host (INT): PREP_CMD: command 0x001f
libertas enter (INT): lbs_cmd_802_11_rssi():828
libertas leave (INT): lbs_cmd_802_11_rssi():841
libertas enter (INT): lbs_queue_cmd():1091
libertas host (INT): QUEUE_CMD: inserted command 0x001f into cmdpendingq
libertas leave (INT): lbs_queue_cmd():1126
libertas leave (INT): lbs_prepare_and_send_command():1576, ret 0
libertas leave (INT): lbs_tx_timeout():492

libertas thread: main-thread 222 (waking up): intcounter=0
currenttxskb=00000000 dnld_sent=0
libertas thread: main-thread 333: intcounter=0 currenttxskb=00000000 dnld_sent=0
libertas thread: main-thread 444: intcounter=0 currenttxskb=00000000 dnld_sent=0

libertas enter: lbs_execute_next_command():1748
libertas host: EXEC_NEXT_CMD: OK to send command 0x001f in psstate 0
libertas host: EXEC_NEXT_CMD: sending command 0x001f
libertas enter: lbs_submit_command():1140
libertas host: DNLD_CMD: command 0x001f, seq 54, size 16, jiffies 676512
libertas enter: if_sdio_host_to_card(type 1, bytes 16):711

libertas enter: if_sdio_host_to_card_worker():363
mmc1: 52  10004000
irq 1  0x40000000
mmc1: d (52): 0: 00001008
mmc1: 53  92000014
irq 1  0xc0000000
irq 1  0x80000000
mmc1: d (53): 0: 00002000
libertas leave: if_sdio_host_to_card():782, ret 0
libertas cmd: DNLD_CMD: sent command 0x001f, jiffies 676517

libertas leave: if_sdio_host_to_card_worker():403
libertas leave: lbs_submit_command():1175
libertas leave: lbs_execute_next_command():1883

libertas thread: main-thread 111: intcounter=0 currenttxskb=00000000 dnld_sent=2
libertas thread: main-thread sleeping... Conn=0 IntC=0 PS_mode=0 PS_State=0

libertas enter (INT): command_timer_fn():970
libertas: Command 1f timed out
libertas leave (INT): command_timer_fn():984

libertas thread: main-thread 222 (waking up): intcounter=0
currenttxskb=00000000 dnld_sent=2
libertas thread: main-thread 333: intcounter=0 currenttxskb=00000000 dnld_sent=2
libertas thread: main-thread 444: intcounter=0 currenttxskb=00000000 dnld_sent=2
libertas: requeueing command 1f due to timeout (#1)
libertas thread: main-thread 111: intcounter=0 currenttxskb=00000000 dnld_sent=2
libertas thread: main-thread sleeping... Conn=0 IntC=0 PS_mode=0 PS_State=0

NETDEV WATCHDOG: eth0: transmit timed out
libertas enter (INT): lbs_tx_timeout():471
libertas: tx watch dog timeout

Any reply will be highly appreciated.

Thanks

Regards
Dongas



More information about the libertas-dev mailing list