git: 108b6eb670ec - stable/13 - neta: Fix MTU change sequence
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 01 Sep 2022 07:21:27 UTC
The branch stable/13 has been updated by kd: URL: https://cgit.FreeBSD.org/src/commit/?id=108b6eb670ecced4674747fbec26c39fc8df0a55 commit 108b6eb670ecced4674747fbec26c39fc8df0a55 Author: Kornel Dulęba <kd@FreeBSD.org> AuthorDate: 2022-08-18 16:53:14 +0000 Commit: Kornel Dulęba <kd@FreeBSD.org> CommitDate: 2022-09-01 07:14:43 +0000 neta: Fix MTU change sequence The IFF_DRV_RUNNING flag is used to see if the interface needs to be temporarily brought down during MTU change sequence. The problem here is that this flag is cleared in mvneta_stop_locked, resulting in the reinitialization logic never being executed after MTU has been changed. Fix that by saving the flag value before the interface is brought down. Reported by: Jérôme Tomczyk <jerome.tomczyk@stormshield.eu> Approved by: mw(mentor) Obtained from: Semihalf Sponsored by: Stormshield MFC after: 2 weeks (cherry picked from commit 97ecdc00ac5ac506f4119be9570d13de2d3a003a) --- sys/dev/neta/if_mvneta.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/dev/neta/if_mvneta.c b/sys/dev/neta/if_mvneta.c index 215d35b1141a..4520680dc96b 100644 --- a/sys/dev/neta/if_mvneta.c +++ b/sys/dev/neta/if_mvneta.c @@ -2067,9 +2067,11 @@ mvneta_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) struct ifreq *ifr; int error, mask; uint32_t flags; + bool reinit; int q; error = 0; + reinit = false; sc = ifp->if_softc; ifr = (struct ifreq *)data; switch (cmd) { @@ -2170,8 +2172,10 @@ mvneta_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) * Reinitialize RX queues. * We need to update RX descriptor size. */ - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + reinit = true; mvneta_stop_locked(sc); + } for (q = 0; q < MVNETA_RX_QNUM_MAX; q++) { mvneta_rx_lockq(sc, q); @@ -2185,7 +2189,7 @@ mvneta_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) } mvneta_rx_unlockq(sc, q); } - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (reinit) mvneta_init_locked(sc); mvneta_sc_unlock(sc);