-
- Downloads
net: arcnet: Fix RESET flag handling
The main arcnet interrupt handler calls arcnet_close() then arcnet_open(), if the RESET status flag is encountered. This is invalid: 1) In general, interrupt handlers should never call ->ndo_stop() and ->ndo_open() functions. They are usually full of blocking calls and other methods that are expected to be called only from drivers init and exit code paths. 2) arcnet_close() contains a del_timer_sync(). If the irq handler interrupts the to-be-deleted timer, del_timer_sync() will just loop forever. 3) arcnet_close() also calls tasklet_kill(), which has a warning if called from irq context. 4) For device reset, the sequence "arcnet_close(); arcnet_open();" is not complete. Some children arcnet drivers have special init/exit code sequences, which then embed a call to arcnet_open() and arcnet_close() accordingly. Check drivers/net/arcnet/com20020.c. Run the device RESET sequence from a scheduled workqueue instead. Signed-off-by:Ahmed S. Darwish <a.darwish@linutronix.de> Signed-off-by:
Sebastian Andrzej Siewior <bigeasy@linutronix.de> Link: https://lore.kernel.org/r/20210128194802.727770-1-a.darwish@linutronix.de Signed-off-by:
Jakub Kicinski <kuba@kernel.org>
Showing
- drivers/net/arcnet/arc-rimi.c 2 additions, 2 deletionsdrivers/net/arcnet/arc-rimi.c
- drivers/net/arcnet/arcdevice.h 6 additions, 0 deletionsdrivers/net/arcnet/arcdevice.h
- drivers/net/arcnet/arcnet.c 62 additions, 4 deletionsdrivers/net/arcnet/arcnet.c
- drivers/net/arcnet/com20020-isa.c 2 additions, 2 deletionsdrivers/net/arcnet/com20020-isa.c
- drivers/net/arcnet/com20020-pci.c 1 addition, 1 deletiondrivers/net/arcnet/com20020-pci.c
- drivers/net/arcnet/com20020_cs.c 1 addition, 1 deletiondrivers/net/arcnet/com20020_cs.c
- drivers/net/arcnet/com90io.c 2 additions, 2 deletionsdrivers/net/arcnet/com90io.c
- drivers/net/arcnet/com90xx.c 2 additions, 2 deletionsdrivers/net/arcnet/com90xx.c
Loading
Please register or sign in to comment