Tx underrun in lpc lwip port

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Tx underrun in lpc lwip port

ankish
I spent days debugging the emac driver which is an lwip lpc  driver but with
no success.

I am getting Tx underrun interrupt in lpc lwip port which causing the
retransmission from the client side

with no trace of packet lost in lwip stack


However disabling the naggle alogrithum increases the time it takes for a Tx
underrun to happen.

Attaching the lwip lpc port and the trace of the internal registers of the
cpu where a tx underrun can be seen clearly and the lwip debug trace which
shows the low level output is called but there is no trace of the packet in
the wireshark
lpc17xx_40xx_emac.c
<http://lwip.100.n7.nabble.com/file/t2176/lpc17xx_40xx_emac.c>  
2019-03-12_08_37_37-Greenshot.png
<http://lwip.100.n7.nabble.com/file/t2176/2019-03-12_08_37_37-Greenshot.png>  

tcp_receive: ACK for 101450, unacked->seqno 101191:101450
tcp_receive: removing 101191:101450 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
pbuf_remove_header: old 0xa00092fe new 0xa0009305 (7)
pbuf_free(0xa00092b4)
pbuf_free: deallocating 0xa00092b4
pbuf_alloc(length=12)
pbuf_alloc(length=12) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 66
(index=0)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 0)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa00091bc
lpc_rxqueue_pbuf: pbuf packet queued: 0xa00091bc (free desc=0)
lpc_low_level_input: Packet received: 0xa0009eec, size 66 (index=0)
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa0009f00 new 0xa0009f0e (14)
pbuf_remove_header: old 0xa0009f0e new 0xa0009f22 (20)
pbuf_remove_header: old 0xa0009f22 new 0xa0009f36 (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 101462, unacked->seqno 101450:101462
tcp_receive: removing 101450:101462 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
pbuf_remove_header: old 0xa0009f36 new 0xa0009f3d (7)
pbuf_free(0xa0009eec)
pbuf_free: deallocating 0xa0009eec
pbuf_alloc(length=11)
pbuf_alloc(length=11) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 65
(index=1)
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa0009eec
lpc_rxqueue_pbuf: pbuf packet queued: 0xa0009eec (free desc=0)
lpc_low_level_input: Packet received: 0xa000a508, size 92 (index=1)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 1)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa000b140
lpc_rxqueue_pbuf: pbuf packet queued: 0xa000b140 (free desc=0)
lpc_low_level_input: Packet received: 0xa00098d0, size 66 (index=2)
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa000b75c
lpc_rxqueue_pbuf: pbuf packet queued: 0xa000b75c (free desc=0)
lpc_low_level_input: Packet received: 0xa000ab24, size 69 (index=3)
ethernet_input: dest:ff:ff:ff:ff:ff:ff, src:90:1b:0e:ba:02:26, type:800
pbuf_remove_header: old 0xa000a51c new 0xa000a52a (14)
pbuf_free(0xa000a508)
pbuf_free: deallocating 0xa000a508
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa00098e4 new 0xa00098f2 (14)
pbuf_remove_header: old 0xa00098f2 new 0xa0009906 (20)
pbuf_remove_header: old 0xa0009906 new 0xa000991a (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: duplicate seqno 215610
pbuf_alloc(length=20)
pbuf_alloc(length=20) == 0xa00097d8
pbuf_add_header: old 0xa0009810 new 0xa00097fc (20)
pbuf_add_header: old 0xa00097fc new 0xa00097ee (14)
ethernet_output: sending packet 0xa00097d8
lpc_low_level_output: pbuf packet(0xa00097ee) sent, chain#=0, size = 54
(index=2)
pbuf_free(0xa00097d8)
pbuf_free: 0xa00097d8 has ref 1, ending here.
pbuf_free(0xa00098d0)
pbuf_free: deallocating 0xa00098d0
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa000ab38 new 0xa000ab46 (14)
pbuf_remove_header: old 0xa000ab46 new 0xa000ab5a (20)
pbuf_remove_header: old 0xa000ab5a new 0xa000ab6e (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 101473, unacked->seqno 101462:101473
tcp_receive: removing 101462:101473 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
lpc_tx_reclaim_st: Freeing packet 0xa00097d8 (index 2)
pbuf_free(0xa00097d8)
pbuf_free: deallocating 0xa00097d8
pbuf_remove_header: old 0xa000ab6e new 0xa000ab75 (7)
pbuf_free(0xa000ab24)
pbuf_free: deallocating 0xa000ab24
pbuf_alloc(length=12)
pbuf_alloc(length=12) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 66
(index=3)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 3)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa00097d8
lpc_rxqueue_pbuf: pbuf packet queued: 0xa00097d8 (free desc=0)
lpc_low_level_input: Packet received: 0xa00091bc, size 66 (index=0)
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa00091d0 new 0xa00091de (14)
pbuf_remove_header: old 0xa00091de new 0xa00091f2 (20)
pbuf_remove_header: old 0xa00091f2 new 0xa0009206 (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 101485, unacked->seqno 101473:101485
tcp_receive: removing 101473:101485 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
pbuf_remove_header: old 0xa0009206 new 0xa000920d (7)
pbuf_free(0xa00091bc)
pbuf_free: deallocating 0xa00091bc
pbuf_alloc(length=17)
pbuf_alloc(length=17) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 71
(index=0)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 0)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa000a508
lpc_rxqueue_pbuf: pbuf packet queued: 0xa000a508 (free desc=0)
lpc_low_level_input: Packet received: 0xa0009eec, size 66 (index=1)
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa0009f00 new 0xa0009f0e (14)
pbuf_remove_header: old 0xa0009f0e new 0xa0009f22 (20)
pbuf_remove_header: old 0xa0009f22 new 0xa0009f36 (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 101502, unacked->seqno 101485:101502
tcp_receive: removing 101485:101502 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
pbuf_remove_header: old 0xa0009f36 new 0xa0009f3d (7)
pbuf_free(0xa0009eec)
pbuf_free: deallocating 0xa0009eec
pbuf_alloc(length=17)
pbuf_alloc(length=17) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 71
(index=1)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 1)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa0009df4
lpc_rxqueue_pbuf: pbuf packet queued: 0xa0009df4 (free desc=0)
lpc_low_level_input: Packet received: 0xa000b140, size 66 (index=2)
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa000b154 new 0xa000b162 (14)
pbuf_remove_header: old 0xa000b162 new 0xa000b176 (20)
pbuf_remove_header: old 0xa000b176 new 0xa000b18a (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 101519, unacked->seqno 101502:101519
tcp_receive: removing 101502:101519 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
pbuf_remove_header: old 0xa000b18a new 0xa000b191 (7)
pbuf_free(0xa000b140)
pbuf_free: deallocating 0xa000b140
pbuf_alloc(length=17)
pbuf_alloc(length=17) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 71
(index=2)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 2)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa000ab24
lpc_rxqueue_pbuf: pbuf packet queued: 0xa000ab24 (free desc=0)
lpc_low_level_input: Packet received: 0xa000b75c, size 66 (index=3)
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa000b770 new 0xa000b77e (14)
pbuf_remove_header: old 0xa000b77e new 0xa000b792 (20)
pbuf_remove_header: old 0xa000b792 new 0xa000b7a6 (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 101536, unacked->seqno 101519:101536
tcp_receive: removing 101519:101536 from pcb->unacked
pbuf_free(0xa000915c)
pbuf_free: deallocating 0xa000915c
pbuf_remove_header: old 0xa000b7a6 new 0xa000b7ad (7)
pbuf_free(0xa000b75c)
pbuf_free: deallocating 0xa000b75c
pbuf_alloc(length=249)
pbuf_alloc(length=249) == 0xa000915c
pbuf_add_header: old 0xa00091a8 new 0xa0009194 (20)
pbuf_add_header: old 0xa0009194 new 0xa0009180 (20)
pbuf_add_header: old 0xa0009180 new 0xa0009172 (14)
ethernet_output: sending packet 0xa000915c
lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 303
(index=3)
lpc_tx_reclaim_st: Freeing packet 0xa000915c (index 3)
pbuf_free(0xa000915c)
pbuf_free: 0xa000915c has ref 1, ending here.
pbuf_alloc(length=1536)
pbuf_alloc(length=1536) == 0xa000b140
lpc_rxqueue_pbuf: pbuf packet queued: 0xa000b140 (free desc=0)
lpc_low_level_input: Packet received: 0xa00097d8, size 66 (index=0)
ethernet_input: dest:24:ea:40:10:10:38, src:00:1b:1b:13:4c:fe, type:800
pbuf_remove_header: old 0xa00097ec new 0xa00097fa (14)
pbuf_remove_header: old 0xa00097fa new 0xa000980e (20)
pbuf_remove_header: old 0xa000980e new 0xa0009822 (20)
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+

Above is the debug trace from the lwip2.1.0 stack with freertos which shows
the seqno 101450:101462 received by the stack and a response is outputed
with lpc_low_level_output: pbuf packet(0xa0009172) sent, chain#=0, size = 65
(index=1) but doesnot showed up in the Wireshark and the receiver and
causing the client to retransmit the request as shown in the attached
Wireshark trace.I am confused why is it happening if someone can have a look
and explain it thanks






--
Sent from: http://lwip.100.n7.nabble.com/lwip-users-f3.html

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users