mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
re: Make sure re_rxeof() is called in net epoch context
It may pass packets up the stack and so needs to be called in a network epoch. When a watchdog timeout happens, we need to enter a section explicitly. Reviewed by: zlei, glebius, adrian MFC after: 2 weeks Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D51885 (cherry picked from commit b653a281f5a977ba73b3d405874f8af8e8b6b50d)
This commit is contained in:
parent
ffe852bafb
commit
7db381a43f
1 changed files with 3 additions and 0 deletions
|
|
@ -3560,6 +3560,7 @@ re_ioctl(if_t ifp, u_long command, caddr_t data)
|
|||
static void
|
||||
re_watchdog(struct rl_softc *sc)
|
||||
{
|
||||
struct epoch_tracker et;
|
||||
if_t ifp;
|
||||
|
||||
RL_LOCK_ASSERT(sc);
|
||||
|
|
@ -3580,7 +3581,9 @@ re_watchdog(struct rl_softc *sc)
|
|||
if_printf(ifp, "watchdog timeout\n");
|
||||
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
|
||||
|
||||
NET_EPOCH_ENTER(et);
|
||||
re_rxeof(sc, NULL);
|
||||
NET_EPOCH_EXIT(et);
|
||||
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
|
||||
re_init_locked(sc);
|
||||
if (!if_sendq_empty(ifp))
|
||||
|
|
|
|||
Loading…
Reference in a new issue