Message ID | 20220328095745.19516-2-qianfanguijin@163.com |
---|---|
State | Superseded |
Delegated to: | Ramon Fried |
Headers | show |
Series | [v2,1/2] net: eth-uclass: Fix eth_halt | expand |
On Mon, Mar 28, 2022 at 12:58 PM <qianfanguijin@163.com> wrote: > > 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) > -- > 2.17.1 > Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
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)