From nobody Fri Aug 28 02:23:29 2026 X-Original-To: dev-commits-src-all@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 4hWMcy0crrz6ptXn for ; Fri, 28 Aug 2026 02:23:30 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hWMcx5hdSz3K5v for ; Fri, 28 Aug 2026 02:23:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787883809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8tyHY+q7kQJIokFQnkEYV/MKJ94JoMZK8fQ27iVwXbI=; b=nrjFTEXEQzZNrHH9/a7RHCEmSms4k56S4zLTnB6FRiWE2CfdTlitb3WXOejuP//j6+Pmi1 LDVw1WQKK2oA2oEdcweVY3y9ozcwPPI+j4jW5ltN+Zli0Xzvo68dPGnekzFh+/DiI4v1wE otYmGpqGYomxOdaItQWN3ycDl1aTIXlS5q0u1BiTaP7F+MNSLp1nmRB15euYL0L3yYH7pD eUjA5lxUWVXaMLZBfegB0/F9q9icakYzbprWoSovNE3JN2YyuvYQ/Yv/ZX2I03zOBXpsnT 1YsgfEKeopLcGAsrvt2U8plUblQoMa+dlAkSK+lEFyS0U/2eFIkEblQReZe2ag== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787883809; a=rsa-sha256; cv=none; b=eZsRi0bwW7Cum2Ieyyhuu69c9VXdy3N8adBOAByIVP1uZdn8mVN1ZRrJgt8Vlk5Ji2G8iV IyJUwQBcBpefPmVI5jMnb69NykCfJuSnepJQyzCW3U/mVZlvKXF6PDRtxLplDAniG7LWzr 7c2j4hwIHSCXHUdM++6XakrjWzjF5s8WJSr8ZfKEmjhuFOUIMhN4HTRaEOpxZ+pMsjiMCT U6hWLrLZBPijF3kdAfksSZC9rpoD5AO9r5JYAPDDYahhkysjH9dKnc7zvMgqOJDJcm/v+N B1OHKLVXCM8dHQim2qXb62JgYaxhBHPhf0RW/mCLvp2xokFYnNeQyrd+J1EKmw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787883809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8tyHY+q7kQJIokFQnkEYV/MKJ94JoMZK8fQ27iVwXbI=; b=uORRfzlnQMa1ny9EEtmSZgcHqtQ92Zw0wq3UrRAmjNJkVENlt6WP1aBBbazZWf3uyDAImX L02wPK2TCQmqz2qaj0eWTNNE6L1DDjclFs42BAGastS5luYByqlRd1tzlxAdeE9mAluCKI FLalN7AkTGY3/v+dyr7bll75MYC6IqXW2yjdq7XpNjzBc9aqgU7J3wldwduDHQ/gMp1aIS yuYyw6uk1IcRMllbALolrVMjfXcUWU00428+//9AvzBbWgnYu3Iiox0FEScIJyc0cyhmSI G+J9lp3UUUg8jGoEFyVBZ/PMoVwH9Rm9til4wnJdbsFXNlZuvkoaqkNTANAkUg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hWMcx3p1mzrLK for ; Fri, 28 Aug 2026 02:23:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3713d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 28 Aug 2026 02:23:29 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Sumit Saxena From: Kevin Bowling Subject: git: 18c03a9df09d - stable/14 - iflib: drain admin task and fix teardown order on register failure List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 18c03a9df09db380eb77a45d5f654d8af66a60c9 Auto-Submitted: auto-generated Date: Fri, 28 Aug 2026 02:23:29 +0000 Message-Id: <6a90f121.3713d.4e232fb7@gitrepo.freebsd.org> The branch stable/14 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=18c03a9df09db380eb77a45d5f654d8af66a60c9 commit 18c03a9df09db380eb77a45d5f654d8af66a60c9 Author: Sumit Saxena AuthorDate: 2026-04-13 06:33:46 +0000 Commit: Kevin Bowling CommitDate: 2026-08-28 02:20:51 +0000 iflib: drain admin task and fix teardown order on register failure When IFDI_ATTACH_POST() fails (or netmap attach fails), iflib tears down with ether_ifdetach(), taskqueue_free(ifc_tq), and IFDI_DETACH(). CTX_LOCK is still held after ether_ifattach. ether_ifdetach() and taskqueue_drain(admin) must not run under CTX_LOCK. Teardown ordering (match iflib_device_deregister): - Free the per-interface admin taskqueue after IFDI_DETACH / IFDI_QUEUES_FREE, not before. - Drop IFNET_WLOCK() across IFDI_DETACH / IFDI_QUEUES_FREE so driver detach can sleep in LinuxKPI workqueue drain, then retake IFNET_WLOCK() before iflib_free_intr_mem and fail_unlock. Reviewed by: gallatin, kgalazka, #iflib Differential Revision: https://reviews.freebsd.org/D56316 (cherry picked from commit 439132310ae1f623f6c0a3dc241d0a34e98e040b) --- sys/net/iflib.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sys/net/iflib.c b/sys/net/iflib.c index 0a446adffc9c..0ed570adcff8 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -5439,16 +5439,33 @@ iflib_device_register(device_t dev, void *sc, if_shared_ctx_t sctx, if_ctx_t *ct return (0); fail_detach: + CTX_UNLOCK(ctx); + taskqueue_drain(ctx->ifc_tq, &ctx->ifc_admin_task); ether_ifdetach(ctx->ifc_ifp); + CTX_LOCK(ctx); fail_queues: sysctl_ctx_free(&ctx->ifc_sysctl_ctx); ctx->ifc_sysctl_node = NULL; - taskqueue_free(ctx->ifc_tq); + /* + * Drain without holding CTX_LOCK so _task_fn_admin can run to + * completion if it needs the context lock. On fail_detach we already + * drained above; a second drain is a no-op when the queue is empty. + */ + CTX_UNLOCK(ctx); + taskqueue_drain(ctx->ifc_tq, &ctx->ifc_admin_task); + CTX_LOCK(ctx); iflib_tqg_detach(ctx); iflib_tx_structures_free(ctx); iflib_rx_structures_free(ctx); + /* + * Match iflib_device_deregister: IFDI_DETACH before taskqueue_free. + * Avoid IFNET_WLOCK across driver detach (LinuxKPI workqueue drain). + */ + IFNET_WUNLOCK(); IFDI_DETACH(ctx); IFDI_QUEUES_FREE(ctx); + IFNET_WLOCK(); + taskqueue_free(ctx->ifc_tq); fail_intr_free: iflib_free_intr_mem(ctx); fail_unlock: