From nobody Fri May 16 02:34:48 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZzB4T03dBz5vt11; Fri, 16 May 2025 02:34:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZzB4S6DbDz3xNc; Fri, 16 May 2025 02:34:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747362888; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8ie8k7+93f6PriClyhnzF9uwc7Iv8KJiaMvmbW+9ZF4=; b=LcbhUKT+wS+0F2HV+xaQkHNkrUEvCiAZeZOkQUIxOS+Y5/nJ5Lvt7TJ8iFQCwmYmI1RP06 XnV5KpF6O6jBukQj7YMBlHDJzeXDK6qfV5t9L763OzK3Pk7AdKYCbO5vDCg+KToF4WiWdc JWRHEtczlyYB79HSqlP5LM77zpxzWx9OTwpECM7SuZRHE+SS+FXokiU9En98jhq0Q+XvhU cEhtSBQOSpB8Ga65A905M4Ub+hrymWzRhiTTrX5cMtLk0tGC4lCu4XkISaZ7ROueU/cvz1 0QTos/u4bXu+utwjk/Qs0uG28s0aFcCR41BLNWCMzdN9zwoAdjj+19fEym2n6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747362888; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8ie8k7+93f6PriClyhnzF9uwc7Iv8KJiaMvmbW+9ZF4=; b=nTGDWLG6079QWg+pXB3jYk05keR3i89tvIz1z463hb8HdRUuByZSz6v10kXFWele7q/bmv sodm6VTSRFBzw6wADQQ77MZUGlhzfidGcfewR9gGGxaL4x90LHvaJw5xGsJ5iNGCPysrnQ TIo3fnsi2nh4ryxuUd0hkcmrTPn3v6RqGUeXgc6J6zd/NoYnkaK7kRs7/sfKlnnaIQypUz nyAWTXbWHzZqpCB4XfW+tceObBPSgBFE+mkMRSnajKq5UJhkkLRUFLYN8ob6FU91PLCrSZ m1kEfuEXab525K5a/wYNUDpmUCtQ6ZP4hZtF0hFp6eeYGUrWt3AkcBqyEuFH9Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1747362888; a=rsa-sha256; cv=none; b=QcJiTyQq9zN6lE1+bLNC0cpHqvd8an2CdqpEYDDeP3taLC8URUeFPaye5PXllC0Qxpeq3A c3CRbnYFiNDaHtrvbDN8ki3ON8Esg2g9WDusu6NKRJef6ZSFQsvhHePLhjJGSDBpYsbcaH e1N4QLHx7+fK/SE9IV+f0Hzz/72/aBh+DGhyQuaAVFAjYUXPdXxQIX7Qf3/BjHdPBI7KY7 Fh1gBsSBFtuqWkTUQi1+FFa4+mJa7b6skLSV0J3QTrp+pIUcjSVauES0fPPV15gFKMJU/a nZ+2iGo9muvQ0iPfk4Fayidl6Z8D07sVsyeM9cBzw7WJm3VMN3Yxs+6g5mh9Qg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZzB4S5364zl2g; Fri, 16 May 2025 02:34:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54G2YmVA026311; Fri, 16 May 2025 02:34:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54G2YmIw026308; Fri, 16 May 2025 02:34:48 GMT (envelope-from git) Date: Fri, 16 May 2025 02:34:48 GMT Message-Id: <202505160234.54G2YmIw026308@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: c8e97aa6ac77 - main - e6000sw: fix bus ordering; don't panic if miibus devices are destroyed List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c8e97aa6ac77fa5cce7afc06849685599795c982 Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=c8e97aa6ac77fa5cce7afc06849685599795c982 commit c8e97aa6ac77fa5cce7afc06849685599795c982 Author: Adrian Chadd AuthorDate: 2025-05-11 02:31:16 +0000 Commit: Adrian Chadd CommitDate: 2025-05-16 02:34:26 +0000 e6000sw: fix bus ordering; don't panic if miibus devices are destroyed Unloading the e6000sw driver with a "fixed" ixgbe (which is doing MDIO transfers faster than 8ms per) has exposed another fun race condition - the MII busses were being torn down before the etherswitch device. * Modify e6000sw_miiforphy() to return NULL if the mii bus device isn't setup, which stops the panic * Change the module order so the e6000sw module is detached first, before the miibus entries and attached PHYs are destroyed. This ensures that the miibus entries aren't destroyed outside of the driver lock, and e6000sw_tick() doesn't try dereferencing dead miibus device_t's. Differential Revision: https://reviews.freebsd.org/D50294 Reviewed by: jhb --- sys/dev/etherswitch/e6000sw/e6000sw.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/dev/etherswitch/e6000sw/e6000sw.c b/sys/dev/etherswitch/e6000sw/e6000sw.c index 0041119ca300..d26fc32ed6a6 100644 --- a/sys/dev/etherswitch/e6000sw/e6000sw.c +++ b/sys/dev/etherswitch/e6000sw/e6000sw.c @@ -196,8 +196,8 @@ DEFINE_CLASS_0(e6000sw, e6000sw_driver, e6000sw_methods, sizeof(e6000sw_softc_t)); DRIVER_MODULE(e6000sw, mdio, e6000sw_driver, 0, 0); -DRIVER_MODULE(etherswitch, e6000sw, etherswitch_driver, 0, 0); DRIVER_MODULE(miibus, e6000sw, miibus_driver, 0, 0); +DRIVER_MODULE_ORDERED(etherswitch, e6000sw, etherswitch_driver, 0, 0, SI_ORDER_ANY); MODULE_DEPEND(e6000sw, mdio, 1, 1, 1); MODULE_DEPEND(e6000sw, etherswitch, 1, 1, 1); @@ -1402,11 +1402,17 @@ e6000sw_getvgroup(device_t dev, etherswitch_vlangroup_t *vg) static __inline struct mii_data* e6000sw_miiforphy(e6000sw_softc_t *sc, unsigned int phy) { + device_t mii_dev; if (!e6000sw_is_phyport(sc, phy)) return (NULL); + mii_dev = sc->miibus[phy]; + if (mii_dev == NULL) + return (NULL); + if (device_get_state(mii_dev) != DS_ATTACHED) + return (NULL); - return (device_get_softc(sc->miibus[phy])); + return (device_get_softc(mii_dev)); } static int