Date: Wed, 05 Aug 2026 04:43:38 +0000 From: Kevin Bowling <kbowling@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih <seuros@seuros.com> Subject: git: 30ccf2f48c11 - main - igc: defer sysctl-driven reinit to the admin task Message-ID: <6a72bf7a.19964.3eb1671b@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=30ccf2f48c11e54fc0540510dcec7cd006a2c366 commit 30ccf2f48c11e54fc0540510dcec7cd006a2c366 Author: Abdelkader Boudih <seuros@seuros.com> AuthorDate: 2026-08-05 04:40:58 +0000 Commit: Kevin Bowling <kbowling@FreeBSD.org> CommitDate: 2026-08-05 04:40:58 +0000 igc: defer sysctl-driven reinit to the admin task igc_sysctl_eee() and igc_sysctl_dmac() called igc_if_init() directly. Request the reset through iflib instead, and skipping while the interface is down; the new value is picked up by the next init. Unlike e1000, igc has no ASSERT_CTX_LOCK_HELD and no acquire_swflag path, so the defect is silent here rather than an assertion failure. While here also remove unnecessary igc_if_init uses: iflib_if_init_locked() already runs after IFDI_RESUME and IFDI_MEDIA_CHANGE, so the trailing *_if_init() only added an unstopped IFDI_INIT that the following iflib_stop() undoes. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58629 --- sys/dev/igc/if_igc.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sys/dev/igc/if_igc.c b/sys/dev/igc/if_igc.c index 1f10d244f2dd..0900689e5f01 100644 --- a/sys/dev/igc/if_igc.c +++ b/sys/dev/igc/if_igc.c @@ -816,8 +816,6 @@ igc_if_resume(if_ctx_t ctx) */ igc_disable_broken_l1_2(ctx); - igc_if_init(ctx); - return(0); } @@ -1297,8 +1295,6 @@ igc_if_media_change(if_ctx_t ctx) device_printf(sc->dev, "Unsupported media type\n"); } - igc_if_init(ctx); - return (0); } @@ -3357,6 +3353,16 @@ igc_set_flowcntl(SYSCTL_HANDLER_ARGS) return (error); } +static void +igc_sysctl_request_reinit(struct igc_softc *sc) +{ + if ((if_getflags(iflib_get_ifp(sc->ctx)) & IFF_UP) == 0) + return; + + iflib_request_reset(sc->ctx); + iflib_admin_intr_deferred(sc->ctx); +} + /* * Manage DMA Coalesce: * Control values: @@ -3402,7 +3408,7 @@ igc_sysctl_dmac(SYSCTL_HANDLER_ARGS) return (EINVAL); } /* Reinit the interface */ - igc_if_init(sc->ctx); + igc_sysctl_request_reinit(sc); return (error); } @@ -3423,7 +3429,7 @@ igc_sysctl_eee(SYSCTL_HANDLER_ARGS) return (error); sc->hw.dev_spec._i225.eee_disable = (value != 0); - igc_if_init(sc->ctx); + igc_sysctl_request_reinit(sc); return (0); }home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a72bf7a.19964.3eb1671b>
