diff --git a/net/wireless/core.c b/net/wireless/core.c index 828e29872633..df3ea9ee3ee9 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -1193,10 +1193,12 @@ void cfg80211_dev_free(struct cfg80211_registered_device *rdev) struct cfg80211_beacon_registration *reg, *treg; unsigned long flags; - spin_lock_irqsave(&rdev->wiphy_work_lock, flags); - WARN_ON(!list_empty(&rdev->wiphy_work_list)); - spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags); - cancel_work_sync(&rdev->wiphy_work); + if (!rdev->wiphy.rfkill) { + spin_lock_irqsave(&rdev->wiphy_work_lock, flags); + WARN_ON(!list_empty(&rdev->wiphy_work_list)); + spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags); + cancel_work_sync(&rdev->wiphy_work); + } rfkill_destroy(rdev->wiphy.rfkill); list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {