From nobody Mon Jun 29 06:34:27 2026 X-Original-To: dev-commits-src-branches@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 4gpc2D1Vfpz6k5LJ for ; Mon, 29 Jun 2026 06:34:28 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gpc2C71R1z4Gl5 for ; Mon, 29 Jun 2026 06:34:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782714868; 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=JKQhfqp+4PiO+xi6awzZ0Pc2jDVRuhCmvL5yKoQTKC0=; b=S/0XpNy5VJ/FNNUrgGppP8OOTjy3Gg7QZb5vjjOybdMGaO6laWvR8YpcQx/UUuKuAW7n+u Z4k7vjNne4NcWF2tSCwcZOuAVGYh3jeSF67uHnGtKreStlsjLp3s/Jp6QcY42OBs9zdway Lsw74xIFoWOAxQvJScfuIYG72QL2WAb4johX5ioiTn32+jhTEEe0KU3Lgjn2mzFs6gnMc7 bKDWxU8TnRsS4+letuDfJz4FDNoPSiuiMcYV/DoYGvlywPCtFepuZysJtqPSlPDCJKXOpV hKr0YusW5LZ5zKvg4eiBvPxhb1/JdfA9FC5QI0D+7GmRYe1teS2ypJvIh3EnTw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782714868; a=rsa-sha256; cv=none; b=ebkH0SAR0hr9oFyPR0lw9x31AC0pQLko44nDnba6uooAMMU6+yJ9knKiz2crz15LlhpKsk uIVKaZh6bVi7dxA7UJnv4jQOG23SVPeQDhqOv6SssXReH/Q5qGy0mNJ0RvkxLowWn6GO8+ f0tiB6mx6kBUW5SC7BpsLcpfKr0Q86DIug9CHGoRNj/xihoRSBVVLTggOtBoyCkRsBnYnL uA6CiiMe0E56lX1suLe3ZhsXBLet8W/kuEnRF+8K5nI5M2bVe2cKtfakSqF+l4uoTLKBm3 glOs7wnGX+uTXKwRG5mYLF+g1VilvQ07cUWc3vDfyXRX0AhhyZh6sUqt2/QbFA== 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=1782714868; 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=JKQhfqp+4PiO+xi6awzZ0Pc2jDVRuhCmvL5yKoQTKC0=; b=B0gVsy2EEhY1vQJ/uglCTHK7HQGmwPuLDScudYvLf5rWeG6jXNvumPcLX7Yr78+wCd6GYa qfLVLq5CHuOJyrANjPXc53oAGW0dj6Bh3LMGZ0ma508d1fd/ANNwk8EOiwtpUeZvwYfsfk 8Rg8gXYPuy5FGNlQ1c9heRvGmHUuZyk/TVkDo7YZoTsRpBAa72mlpBZt0RbldIOQIw7p2H kACHlwzuGk9WSRZrVMrk4Rn4ogiACg6ABs5RZX6n60yZRnQjULRpuvCEpG0+8oiAJUWdUL KFuq1MINxOjr9AktP3zVomqUmmRWC6b0qcekGVF4olpXQAGknpBERxbmeXlvjg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gpc2C5M27zmkB for ; Mon, 29 Jun 2026 06:34:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4674d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 29 Jun 2026 06:34:27 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 0acc685b19b9 - stable/15 - mt76: ensure net80211 com instance before returning from driver load List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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: bz X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 0acc685b19b9b3f3592bd28a0fa4ec753d9e6305 Auto-Submitted: auto-generated Date: Mon, 29 Jun 2026 06:34:27 +0000 Message-Id: <6a4211f3.4674d.2900ddf3@gitrepo.freebsd.org> The branch stable/15 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=0acc685b19b9b3f3592bd28a0fa4ec753d9e6305 commit 0acc685b19b9b3f3592bd28a0fa4ec753d9e6305 Author: Bjoern A. Zeeb AuthorDate: 2026-06-08 06:50:30 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-06-29 03:53:33 +0000 mt76: ensure net80211 com instance before returning from driver load Do as we have done for iwlwifi (f808c43ad923, bee60c989745) add a completion event for device registration which calls into 802.11 and creates the wifi "device" (net80211 com instance). This is needed as otherwise the deferred work in the mt76 drivers (mt7915, mt7921, mt7925, mt7996; but not the 7615 [*]) would make driver loading return before the wifi device is there. We would then continue, e.g., during rc startup and race possibly trying to create a vap (wlan interface) with the underlying device not being registered yet and fail. [*] the 7615 does not seem to do this asynchronously so is fine. Sponsored by: The FreeBSD Foundation Tested on: 7921, others to be tested at time (cherry picked from commit baf8561bdc3f39c542a82cd1235fbf4bf97b4310) --- sys/contrib/dev/mediatek/mt76/mac80211.c | 4 ++++ sys/contrib/dev/mediatek/mt76/mt76.h | 3 +++ sys/contrib/dev/mediatek/mt76/mt7915/init.c | 6 ++++++ sys/contrib/dev/mediatek/mt76/mt7921/init.c | 7 +++++++ sys/contrib/dev/mediatek/mt76/mt7925/init.c | 7 +++++++ sys/contrib/dev/mediatek/mt76/mt7996/init.c | 6 ++++++ 6 files changed, 33 insertions(+) diff --git a/sys/contrib/dev/mediatek/mt76/mac80211.c b/sys/contrib/dev/mediatek/mt76/mac80211.c index bd7aaeb4398e..1f38b7ad6697 100644 --- a/sys/contrib/dev/mediatek/mt76/mac80211.c +++ b/sys/contrib/dev/mediatek/mt76/mac80211.c @@ -814,6 +814,10 @@ int mt76_register_device(struct mt76_dev *dev, bool vht, set_bit(MT76_STATE_REGISTERED, &phy->state); sched_set_fifo_low(dev->tx_worker.task); +#if defined(__FreeBSD__) + complete(&dev->drv_start_complete); +#endif + return 0; } EXPORT_SYMBOL_GPL(mt76_register_device); diff --git a/sys/contrib/dev/mediatek/mt76/mt76.h b/sys/contrib/dev/mediatek/mt76/mt76.h index 840725b8b020..ca26a4e43b92 100644 --- a/sys/contrib/dev/mediatek/mt76/mt76.h +++ b/sys/contrib/dev/mediatek/mt76/mt76.h @@ -1026,6 +1026,9 @@ struct mt76_dev { } test_mtd; #endif struct workqueue_struct *wq; +#if defined(__FreeBSD__) + struct completion drv_start_complete; +#endif union { struct mt76_mmio mmio; diff --git a/sys/contrib/dev/mediatek/mt76/mt7915/init.c b/sys/contrib/dev/mediatek/mt76/mt7915/init.c index 4128942361ff..d87878f9a86e 100644 --- a/sys/contrib/dev/mediatek/mt76/mt7915/init.c +++ b/sys/contrib/dev/mediatek/mt76/mt7915/init.c @@ -862,6 +862,9 @@ mt7915_init_hardware(struct mt7915_dev *dev, struct mt7915_phy *phy2) mt76_wr(dev, MT_INT_SOURCE_CSR, ~0); INIT_WORK(&dev->init_work, mt7915_init_work); +#if defined(__FreeBSD__) + init_completion(&dev->mt76.drv_start_complete); +#endif ret = mt7915_dma_init(dev, phy2); if (ret) @@ -1298,6 +1301,9 @@ int mt7915_register_device(struct mt7915_dev *dev) } ieee80211_queue_work(mt76_hw(dev), &dev->init_work); +#if defined(__FreeBSD__) + wait_for_completion(&dev->mt76.drv_start_complete); +#endif dev->recovery.hw_init_done = true; diff --git a/sys/contrib/dev/mediatek/mt76/mt7921/init.c b/sys/contrib/dev/mediatek/mt76/mt7921/init.c index dbbc9e945fe2..ece84a826ea4 100644 --- a/sys/contrib/dev/mediatek/mt76/mt7921/init.c +++ b/sys/contrib/dev/mediatek/mt76/mt7921/init.c @@ -308,6 +308,9 @@ int mt7921_register_device(struct mt792x_dev *dev) INIT_WORK(&dev->reset_work, mt7921_mac_reset_work); INIT_WORK(&dev->init_work, mt7921_init_work); +#if defined(__FreeBSD__) + init_completion(&dev->mt76.drv_start_complete); +#endif INIT_WORK(&dev->phy.roc_work, mt7921_roc_work); timer_setup(&dev->phy.roc_timer, mt792x_roc_timer, 0); @@ -359,6 +362,10 @@ int mt7921_register_device(struct mt792x_dev *dev) queue_work(system_percpu_wq, &dev->init_work); +#if defined(__FreeBSD__) + wait_for_completion(&dev->mt76.drv_start_complete); +#endif + return 0; } EXPORT_SYMBOL_GPL(mt7921_register_device); diff --git a/sys/contrib/dev/mediatek/mt76/mt7925/init.c b/sys/contrib/dev/mediatek/mt76/mt7925/init.c index 31592775feb3..3b7c1668dc61 100644 --- a/sys/contrib/dev/mediatek/mt76/mt7925/init.c +++ b/sys/contrib/dev/mediatek/mt76/mt7925/init.c @@ -228,6 +228,9 @@ int mt7925_register_device(struct mt792x_dev *dev) INIT_WORK(&dev->reset_work, mt7925_mac_reset_work); INIT_WORK(&dev->init_work, mt7925_init_work); +#if defined(__FreeBSD__) + init_completion(&dev->mt76.drv_start_complete); +#endif INIT_WORK(&dev->phy.roc_work, mt7925_roc_work); timer_setup(&dev->phy.roc_timer, mt792x_roc_timer, 0); @@ -282,6 +285,10 @@ int mt7925_register_device(struct mt792x_dev *dev) queue_work(system_percpu_wq, &dev->init_work); +#if defined(__FreeBSD__) + wait_for_completion(&dev->mt76.drv_start_complete); +#endif + return 0; } EXPORT_SYMBOL_GPL(mt7925_register_device); diff --git a/sys/contrib/dev/mediatek/mt76/mt7996/init.c b/sys/contrib/dev/mediatek/mt76/mt7996/init.c index 34f1df207f19..6568f77bba37 100644 --- a/sys/contrib/dev/mediatek/mt76/mt7996/init.c +++ b/sys/contrib/dev/mediatek/mt76/mt7996/init.c @@ -1222,6 +1222,9 @@ static int mt7996_init_hardware(struct mt7996_dev *dev) } INIT_WORK(&dev->init_work, mt7996_init_work); +#if defined(__FreeBSD__) + init_completion(&dev->mt76.drv_start_complete); +#endif INIT_WORK(&dev->wed_rro.work, mt7996_wed_rro_work); INIT_LIST_HEAD(&dev->wed_rro.poll_list); spin_lock_init(&dev->wed_rro.lock); @@ -1736,6 +1739,9 @@ int mt7996_register_device(struct mt7996_dev *dev) #endif ieee80211_queue_work(mt76_hw(dev), &dev->init_work); +#if defined(__FreeBSD__) + wait_for_completion(&dev->mt76.drv_start_complete); +#endif dev->recovery.hw_init_done = true;