
From: qianfan Zhao qianfanguijin@163.com
tftp_handler do eth_halt when TFTP_ERROR, but eth_halt will remove eth device if it is an usb network. usbeth's private data will be unaccessable when usb_eth_free_pkt, touch it will trigger data abort.
Next is the console messages:
=> tftp xxx ... Loading: * TFTP error: 'open failed: No such file or directory' (1) Not retrying... data abort pc : [<9feb6ba2>] lr : [<9feb6b9f>]
Fix it.
Signed-off-by: qianfan Zhao qianfanguijin@163.com --- net/eth-uclass.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/net/eth-uclass.c b/net/eth-uclass.c index c6eb1bc8f8..27baf52c26 100644 --- a/net/eth-uclass.c +++ b/net/eth-uclass.c @@ -405,6 +405,13 @@ int eth_rx(void) flags = 0; if (ret > 0) net_process_received_packet(packet, ret); + + /* ethernet maybe halted when packet_handler, check again */ + if (!eth_is_active(current)) { + ret = 0; + break; + } + if (ret >= 0 && eth_get_ops(current)->free_pkt) eth_get_ops(current)->free_pkt(current, packet, ret); if (ret <= 0)