Patch "wifi: wilc1000: unregister wiphy only after netdev registration" has been added to the 6.13-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    wifi: wilc1000: unregister wiphy only after netdev registration

to the 6.13-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     wifi-wilc1000-unregister-wiphy-only-after-netdev-reg.patch
and it can be found in the queue-6.13 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4326e19f57b4014cb35a5465a77bb78ffbf160ca
Author: Alexis Lothoré <alexis.lothore@xxxxxxxxxxx>
Date:   Tue Jan 14 11:45:34 2025 +0100

    wifi: wilc1000: unregister wiphy only after netdev registration
    
    [ Upstream commit 208dea9107e80a33dfeb029bdb93cb53eccf005d ]
    
    wiphy_unregister()/wiphy_free() has been recently decoupled from
    wilc_netdev_cleanup() to fix a faulty error path in sdio/spi probe
    functions. However this change introduced a new failure when simply
    loading then unloading the driver:
    
      $ modprobe wilc1000-sdio; modprobe -r wilc1000-sdio
      WARNING: CPU: 0 PID: 115 at net/wireless/core.c:1145 wiphy_unregister+0x904/0xc40 [cfg80211]
      Modules linked in: wilc1000_sdio(-) wilc1000 cfg80211 bluetooth ecdh_generic ecc
      CPU: 0 UID: 0 PID: 115 Comm: modprobe Not tainted 6.13.0-rc6+ #45
      Hardware name: Atmel SAMA5
      Call trace:
       unwind_backtrace from show_stack+0x18/0x1c
       show_stack from dump_stack_lvl+0x44/0x70
       dump_stack_lvl from __warn+0x118/0x27c
       __warn from warn_slowpath_fmt+0xcc/0x140
       warn_slowpath_fmt from wiphy_unregister+0x904/0xc40 [cfg80211]
       wiphy_unregister [cfg80211] from wilc_sdio_remove+0xb0/0x15c [wilc1000_sdio]
       wilc_sdio_remove [wilc1000_sdio] from sdio_bus_remove+0x104/0x3f0
       sdio_bus_remove from device_release_driver_internal+0x424/0x5dc
       device_release_driver_internal from driver_detach+0x120/0x224
       driver_detach from bus_remove_driver+0x17c/0x314
       bus_remove_driver from sys_delete_module+0x310/0x46c
       sys_delete_module from ret_fast_syscall+0x0/0x1c
      Exception stack(0xd0acbfa8 to 0xd0acbff0)
      bfa0:                   0044b210 0044b210 0044b24c 00000800 00000000 00000000
      bfc0: 0044b210 0044b210 00000000 00000081 00000000 0044b210 00000000 00000000
      bfe0: 00448e24 b6af99c4 0043ea0d aea2e12c
      irq event stamp: 0
      hardirqs last  enabled at (0): [<00000000>] 0x0
      hardirqs last disabled at (0): [<c01588f0>] copy_process+0x1c4c/0x7bec
      softirqs last  enabled at (0): [<c0158944>] copy_process+0x1ca0/0x7bec
      softirqs last disabled at (0): [<00000000>] 0x0
    
    The warning is triggered by the fact that there is still a
    wireless_device linked to the wiphy we are unregistering, due to
    wiphy_unregister() now being called after net device unregister (performed
    in wilc_netdev_cleanup()). Fix this warning by moving wiphy_unregister()
    after wilc_netdev_cleanup() is nominal paths (ie: driver removal).
    wilc_netdev_cleanup() ordering is left untouched in error paths in probe
    function because net device is not registered in those paths (so the
    warning can not trigger), yet the wiphy can still be registered, and we
    still some cleanup steps from wilc_netdev_cleanup().
    
    Fixes: 1be94490b6b8 ("wifi: wilc1000: unregister wiphy only if it has been registered")
    Signed-off-by: Alexis Lothoré <alexis.lothore@xxxxxxxxxxx>
    Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxx>
    Link: https://patch.msgid.link/20250114-wilc1000_modprobe-v1-1-ad19d46f0c07@xxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/microchip/wilc1000/sdio.c b/drivers/net/wireless/microchip/wilc1000/sdio.c
index 3751e2ee1ca95..af970f9991110 100644
--- a/drivers/net/wireless/microchip/wilc1000/sdio.c
+++ b/drivers/net/wireless/microchip/wilc1000/sdio.c
@@ -225,8 +225,8 @@ static void wilc_sdio_remove(struct sdio_func *func)
 	struct wilc *wilc = sdio_get_drvdata(func);
 	struct wilc_sdio *sdio_priv = wilc->bus_data;
 
-	wiphy_unregister(wilc->wiphy);
 	wilc_netdev_cleanup(wilc);
+	wiphy_unregister(wilc->wiphy);
 	wiphy_free(wilc->wiphy);
 	kfree(sdio_priv->cmd53_buf);
 	kfree(sdio_priv);
diff --git a/drivers/net/wireless/microchip/wilc1000/spi.c b/drivers/net/wireless/microchip/wilc1000/spi.c
index 31219fd0cfb3f..5bcabb7decea0 100644
--- a/drivers/net/wireless/microchip/wilc1000/spi.c
+++ b/drivers/net/wireless/microchip/wilc1000/spi.c
@@ -285,8 +285,8 @@ static void wilc_bus_remove(struct spi_device *spi)
 	struct wilc *wilc = spi_get_drvdata(spi);
 	struct wilc_spi *spi_priv = wilc->bus_data;
 
-	wiphy_unregister(wilc->wiphy);
 	wilc_netdev_cleanup(wilc);
+	wiphy_unregister(wilc->wiphy);
 	wiphy_free(wilc->wiphy);
 	kfree(spi_priv);
 }




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux