wifi: mac80211: use wiphy work for sdata->work
authorJohannes Berg <johannes.berg@intel.com>
Tue, 6 Jun 2023 12:49:26 +0000 (14:49 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 7 Jun 2023 17:53:18 +0000 (19:53 +0200)
We'll need this later to convert other works that might
be cancelled from here, so convert this one first.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ibss.c
net/mac80211/ieee80211_i.h
net/mac80211/iface.c
net/mac80211/mesh.c
net/mac80211/mesh_hwmp.c
net/mac80211/mlme.c
net/mac80211/ocb.c
net/mac80211/rx.c
net/mac80211/scan.c
net/mac80211/status.c
net/mac80211/util.c

index faa01ee..1901781 100644 (file)
@@ -743,7 +743,7 @@ static void ieee80211_csa_connection_drop_work(struct work_struct *work)
        skb_queue_purge(&sdata->skb_queue);
 
        /* trigger a scan to find another IBSS network to join */
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 
        sdata_unlock(sdata);
 }
@@ -1244,7 +1244,7 @@ void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata,
        spin_lock(&ifibss->incomplete_lock);
        list_add(&sta->list, &ifibss->incomplete_stations);
        spin_unlock(&ifibss->incomplete_lock);
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 }
 
 static void ieee80211_ibss_sta_expire(struct ieee80211_sub_if_data *sdata)
@@ -1723,7 +1723,7 @@ static void ieee80211_ibss_timer(struct timer_list *t)
        struct ieee80211_sub_if_data *sdata =
                from_timer(sdata, t, u.ibss.timer);
 
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 }
 
 void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
@@ -1858,7 +1858,7 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
        sdata->deflink.needed_rx_chains = local->rx_chains;
        sdata->control_port_over_nl80211 = params->control_port_over_nl80211;
 
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 
        return 0;
 }
index 0370407..1cefe69 100644 (file)
@@ -1061,7 +1061,7 @@ struct ieee80211_sub_if_data {
        /* used to reconfigure hardware SM PS */
        struct work_struct recalc_smps;
 
-       struct work_struct work;
+       struct wiphy_work work;
        struct sk_buff_head skb_queue;
        struct sk_buff_head status_queue;
 
index 2e2115a..f820098 100644 (file)
@@ -43,7 +43,7 @@
  * by either the RTNL, the iflist_mtx or RCU.
  */
 
-static void ieee80211_iface_work(struct work_struct *work);
+static void ieee80211_iface_work(struct wiphy *wiphy, struct wiphy_work *work);
 
 bool __ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata)
 {
@@ -614,7 +614,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, bool going_do
                RCU_INIT_POINTER(local->p2p_sdata, NULL);
                fallthrough;
        default:
-               cancel_work_sync(&sdata->work);
+               wiphy_work_cancel(sdata->local->hw.wiphy, &sdata->work);
                /*
                 * When we get here, the interface is marked down.
                 * Free the remaining keys, if there are any
@@ -1173,7 +1173,7 @@ int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
 
        skb_queue_head_init(&sdata->skb_queue);
        skb_queue_head_init(&sdata->status_queue);
-       INIT_WORK(&sdata->work, ieee80211_iface_work);
+       wiphy_work_init(&sdata->work, ieee80211_iface_work);
 
        return 0;
 }
@@ -1625,7 +1625,7 @@ static void ieee80211_iface_process_status(struct ieee80211_sub_if_data *sdata,
        }
 }
 
-static void ieee80211_iface_work(struct work_struct *work)
+static void ieee80211_iface_work(struct wiphy *wiphy, struct wiphy_work *work)
 {
        struct ieee80211_sub_if_data *sdata =
                container_of(work, struct ieee80211_sub_if_data, work);
@@ -1737,7 +1737,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
 
        skb_queue_head_init(&sdata->skb_queue);
        skb_queue_head_init(&sdata->status_queue);
-       INIT_WORK(&sdata->work, ieee80211_iface_work);
+       wiphy_work_init(&sdata->work, ieee80211_iface_work);
        INIT_WORK(&sdata->recalc_smps, ieee80211_recalc_smps_work);
        INIT_WORK(&sdata->activate_links_work, ieee80211_activate_links_work);
 
index a4d8764..af8c5fc 100644 (file)
@@ -45,7 +45,7 @@ static void ieee80211_mesh_housekeeping_timer(struct timer_list *t)
 
        set_bit(MESH_WORK_HOUSEKEEPING, &ifmsh->wrkq_flags);
 
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 }
 
 /**
@@ -703,7 +703,7 @@ static void ieee80211_mesh_path_timer(struct timer_list *t)
        struct ieee80211_sub_if_data *sdata =
                from_timer(sdata, t, u.mesh.mesh_path_timer);
 
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 }
 
 static void ieee80211_mesh_path_root_timer(struct timer_list *t)
@@ -714,7 +714,7 @@ static void ieee80211_mesh_path_root_timer(struct timer_list *t)
 
        set_bit(MESH_WORK_ROOT, &ifmsh->wrkq_flags);
 
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 }
 
 void ieee80211_mesh_root_setup(struct ieee80211_if_mesh *ifmsh)
@@ -1177,7 +1177,7 @@ void ieee80211_mbss_info_change_notify(struct ieee80211_sub_if_data *sdata,
        for_each_set_bit(bit, &bits, sizeof(changed) * BITS_PER_BYTE)
                set_bit(bit, &ifmsh->mbss_changed);
        set_bit(MESH_WORK_MBSS_CHANGED, &ifmsh->wrkq_flags);
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 }
 
 int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
@@ -1202,7 +1202,7 @@ int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
        ifmsh->sync_offset_clockdrift_max = 0;
        set_bit(MESH_WORK_HOUSEKEEPING, &ifmsh->wrkq_flags);
        ieee80211_mesh_root_setup(ifmsh);
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
        sdata->vif.bss_conf.ht_operation_mode =
                                ifmsh->mshcfg.ht_opmode;
        sdata->vif.bss_conf.enable_beacon = true;
index 5217e1d..5136907 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2008, 2009 open80211s Ltd.
- * Copyright (C) 2019, 2021-2022 Intel Corporation
+ * Copyright (C) 2019, 2021-2023 Intel Corporation
  * Author:     Luis Carlos Cobo <luisca@cozybit.com>
  */
 
@@ -1026,14 +1026,14 @@ static void mesh_queue_preq(struct mesh_path *mpath, u8 flags)
        spin_unlock_bh(&ifmsh->mesh_preq_queue_lock);
 
        if (time_after(jiffies, ifmsh->last_preq + min_preq_int_jiff(sdata)))
-               ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+               wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 
        else if (time_before(jiffies, ifmsh->last_preq)) {
                /* avoid long wait if did not send preqs for a long time
                 * and jiffies wrapped around
                 */
                ifmsh->last_preq = jiffies - min_preq_int_jiff(sdata) - 1;
-               ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+               wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
        } else
                mod_timer(&ifmsh->mesh_path_timer, ifmsh->last_preq +
                                                min_preq_int_jiff(sdata));
index 7ec0ad2..03251a7 100644 (file)
@@ -3161,7 +3161,7 @@ void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata,
                sdata->u.mgd.probe_send_count = 0;
        else
                sdata->u.mgd.nullfunc_failed = true;
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 }
 
 static void ieee80211_mlme_send_probe_req(struct ieee80211_sub_if_data *sdata,
@@ -6074,7 +6074,7 @@ static void ieee80211_sta_timer(struct timer_list *t)
        struct ieee80211_sub_if_data *sdata =
                from_timer(sdata, t, u.mgd.timer);
 
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
 }
 
 void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata,
@@ -6218,7 +6218,7 @@ void ieee80211_mgd_conn_tx_status(struct ieee80211_sub_if_data *sdata,
        sdata->u.mgd.status_acked = acked;
        sdata->u.mgd.status_received = true;
 
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 }
 
 void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata)
index cf20576..b44896e 100644 (file)
@@ -81,7 +81,7 @@ void ieee80211_ocb_rx_no_sta(struct ieee80211_sub_if_data *sdata,
        spin_lock(&ifocb->incomplete_lock);
        list_add(&sta->list, &ifocb->incomplete_stations);
        spin_unlock(&ifocb->incomplete_lock);
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 }
 
 static struct sta_info *ieee80211_ocb_finish_sta(struct sta_info *sta)
@@ -157,7 +157,7 @@ static void ieee80211_ocb_housekeeping_timer(struct timer_list *t)
 
        set_bit(OCB_WORK_HOUSEKEEPING, &ifocb->wrkq_flags);
 
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 }
 
 void ieee80211_ocb_setup_sdata(struct ieee80211_sub_if_data *sdata)
@@ -197,7 +197,7 @@ int ieee80211_ocb_join(struct ieee80211_sub_if_data *sdata,
        ifocb->joined = true;
 
        set_bit(OCB_WORK_HOUSEKEEPING, &ifocb->wrkq_flags);
-       ieee80211_queue_work(&local->hw, &sdata->work);
+       wiphy_work_queue(local->hw.wiphy, &sdata->work);
 
        netif_carrier_on(sdata->dev);
        return 0;
index d996aa2..ed99394 100644 (file)
@@ -229,7 +229,7 @@ static void __ieee80211_queue_skb_to_iface(struct ieee80211_sub_if_data *sdata,
        }
 
        skb_queue_tail(&sdata->skb_queue, skb);
-       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
        if (sta)
                sta->deflink.rx_stats.packets++;
 }
index 32fa8ac..ea53831 100644 (file)
@@ -502,7 +502,7 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
         */
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
                if (ieee80211_sdata_running(sdata))
-                       ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+                       wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
        }
 
        if (was_scanning)
index 2b13a52..44d83da 100644 (file)
@@ -5,7 +5,7 @@
  * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
  * Copyright 2008-2010 Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
- * Copyright 2021-2022  Intel Corporation
+ * Copyright 2021-2023  Intel Corporation
  */
 
 #include <linux/export.h>
@@ -747,8 +747,8 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local,
                                        if (qskb) {
                                                skb_queue_tail(&sdata->status_queue,
                                                               qskb);
-                                               ieee80211_queue_work(&local->hw,
-                                                                    &sdata->work);
+                                               wiphy_work_queue(local->hw.wiphy,
+                                                                &sdata->work);
                                        }
                                }
                        } else {
index 4f29c30..083ad56 100644 (file)
@@ -2942,7 +2942,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
 
                /* Requeue all works */
                list_for_each_entry(sdata, &local->interfaces, list)
-                       ieee80211_queue_work(&local->hw, &sdata->work);
+                       wiphy_work_queue(local->hw.wiphy, &sdata->work);
        }
 
        ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,