ath: Convert timers to use timer_setup()
authorKees Cook <keescook@chromium.org>
Tue, 24 Oct 2017 09:29:54 +0000 (02:29 -0700)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 27 Oct 2017 13:54:19 +0000 (16:54 +0300)
In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly.

Cc: Kalle Valo <kvalo@qca.qualcomm.com>
Cc: linux-wireless@vger.kernel.org
Cc: netdev@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
22 files changed:
drivers/net/wireless/ath/ar5523/ar5523.c
drivers/net/wireless/ath/ath10k/htt_rx.c
drivers/net/wireless/ath/ath10k/pci.c
drivers/net/wireless/ath/ath10k/pci.h
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/core.h
drivers/net/wireless/ath/ath6kl/main.c
drivers/net/wireless/ath/ath6kl/txrx.c
drivers/net/wireless/ath/ath6kl/wmi.c
drivers/net/wireless/ath/ath6kl/wmi.h
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/channel.c
drivers/net/wireless/ath/ath9k/gpio.c
drivers/net/wireless/ath/ath9k/htc.h
drivers/net/wireless/ath/ath9k/htc_drv_init.c
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
drivers/net/wireless/ath/ath9k/init.c
drivers/net/wireless/ath/ath9k/link.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/wil6210/main.c
drivers/net/wireless/ath/wil6210/p2p.c
drivers/net/wireless/ath/wil6210/wil6210.h

index 68f0463ed8dfe9d29493666e439099f37e9cb0ff..b94759daeaccf68c84d71b9938627bb6a2b1c793 100644 (file)
@@ -889,9 +889,9 @@ static void ar5523_tx_work(struct work_struct *work)
        mutex_unlock(&ar->mutex);
 }
 
-static void ar5523_tx_wd_timer(unsigned long arg)
+static void ar5523_tx_wd_timer(struct timer_list *t)
 {
-       struct ar5523 *ar = (struct ar5523 *) arg;
+       struct ar5523 *ar = from_timer(ar, t, tx_wd_timer);
 
        ar5523_dbg(ar, "TX watchdog timer triggered\n");
        ieee80211_queue_work(ar->hw, &ar->tx_wd_work);
@@ -1599,8 +1599,7 @@ static int ar5523_probe(struct usb_interface *intf,
        mutex_init(&ar->mutex);
 
        INIT_DELAYED_WORK(&ar->stat_work, ar5523_stat_work);
-       init_timer(&ar->tx_wd_timer);
-       setup_timer(&ar->tx_wd_timer, ar5523_tx_wd_timer, (unsigned long) ar);
+       timer_setup(&ar->tx_wd_timer, ar5523_tx_wd_timer, 0);
        INIT_WORK(&ar->tx_wd_work, ar5523_tx_wd_work);
        INIT_WORK(&ar->tx_work, ar5523_tx_work);
        INIT_LIST_HEAD(&ar->tx_queue_pending);
index a3f5dc78353fb2fdddbdb6806457b2bc2ece2ac8..f068376ec565f6afc3883c552673e0879e5b2de4 100644 (file)
@@ -200,9 +200,9 @@ static void ath10k_htt_rx_msdu_buff_replenish(struct ath10k_htt *htt)
        spin_unlock_bh(&htt->rx_ring.lock);
 }
 
-static void ath10k_htt_rx_ring_refill_retry(unsigned long arg)
+static void ath10k_htt_rx_ring_refill_retry(struct timer_list *t)
 {
-       struct ath10k_htt *htt = (struct ath10k_htt *)arg;
+       struct ath10k_htt *htt = from_timer(htt, t, rx_ring.refill_retry_timer);
 
        ath10k_htt_rx_msdu_buff_replenish(htt);
 }
@@ -507,7 +507,7 @@ int ath10k_htt_rx_alloc(struct ath10k_htt *htt)
        *htt->rx_ring.alloc_idx.vaddr = 0;
 
        /* Initialize the Rx refill retry timer */
-       setup_timer(timer, ath10k_htt_rx_ring_refill_retry, (unsigned long)htt);
+       timer_setup(timer, ath10k_htt_rx_ring_refill_retry, 0);
 
        spin_lock_init(&htt->rx_ring.lock);
 
index d790ea20b95d920756178909bdaaf102563196ff..ffea348b2190a66a642bf3cba9de533a2816d954 100644 (file)
@@ -585,10 +585,10 @@ skip:
        spin_unlock_irqrestore(&ar_pci->ps_lock, flags);
 }
 
-static void ath10k_pci_ps_timer(unsigned long ptr)
+static void ath10k_pci_ps_timer(struct timer_list *t)
 {
-       struct ath10k *ar = (void *)ptr;
-       struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
+       struct ath10k_pci *ar_pci = from_timer(ar_pci, t, ps_timer);
+       struct ath10k *ar = ar_pci->ar;
        unsigned long flags;
 
        spin_lock_irqsave(&ar_pci->ps_lock, flags);
@@ -838,9 +838,10 @@ void ath10k_pci_rx_post(struct ath10k *ar)
                ath10k_pci_rx_post_pipe(&ar_pci->pipe_info[i]);
 }
 
-void ath10k_pci_rx_replenish_retry(unsigned long ptr)
+void ath10k_pci_rx_replenish_retry(struct timer_list *t)
 {
-       struct ath10k *ar = (void *)ptr;
+       struct ath10k_pci *ar_pci = from_timer(ar_pci, t, rx_post_retry);
+       struct ath10k *ar = ar_pci->ar;
 
        ath10k_pci_rx_post(ar);
 }
@@ -3164,8 +3165,7 @@ int ath10k_pci_setup_resource(struct ath10k *ar)
        spin_lock_init(&ce->ce_lock);
        spin_lock_init(&ar_pci->ps_lock);
 
-       setup_timer(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry,
-                   (unsigned long)ar);
+       timer_setup(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry, 0);
 
        if (QCA_REV_6174(ar) || QCA_REV_9377(ar))
                ath10k_pci_override_ce_config(ar);
@@ -3291,8 +3291,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
        ar->id.subsystem_vendor = pdev->subsystem_vendor;
        ar->id.subsystem_device = pdev->subsystem_device;
 
-       setup_timer(&ar_pci->ps_timer, ath10k_pci_ps_timer,
-                   (unsigned long)ar);
+       timer_setup(&ar_pci->ps_timer, ath10k_pci_ps_timer, 0);
 
        ret = ath10k_pci_setup_resource(ar);
        if (ret) {
index 424ff323b2dc6397727c09344f25f08914eabcda..08704fbc11e3723f26bc5b5f3f25e18b27d4191d 100644 (file)
@@ -278,7 +278,7 @@ void ath10k_pci_hif_power_down(struct ath10k *ar);
 int ath10k_pci_alloc_pipes(struct ath10k *ar);
 void ath10k_pci_free_pipes(struct ath10k *ar);
 void ath10k_pci_free_pipes(struct ath10k *ar);
-void ath10k_pci_rx_replenish_retry(unsigned long ptr);
+void ath10k_pci_rx_replenish_retry(struct timer_list *t);
 void ath10k_pci_ce_deinit(struct ath10k *ar);
 void ath10k_pci_init_napi(struct ath10k *ar);
 int ath10k_pci_init_pipes(struct ath10k *ar);
index 414b5b596efcd92b7f97a059b710668e059f218c..b53eb2b85f02d115c4df6221f4a060942cdead1a 100644 (file)
@@ -3589,10 +3589,8 @@ static int ath6kl_cfg80211_vif_init(struct ath6kl_vif *vif)
                return -ENOMEM;
        }
 
-       setup_timer(&vif->disconnect_timer, disconnect_timer_handler,
-                   (unsigned long) vif->ndev);
-       setup_timer(&vif->sched_scan_timer, ath6kl_wmi_sscan_timer,
-                   (unsigned long) vif);
+       timer_setup(&vif->disconnect_timer, disconnect_timer_handler, 0);
+       timer_setup(&vif->sched_scan_timer, ath6kl_wmi_sscan_timer, 0);
 
        set_bit(WMM_ENABLED, &vif->flags);
        spin_lock_init(&vif->if_lock);
index 87e99c12d4baa373f6a1ce1b22713a98c823df27..e23d450babd24025c8e2d09d5e6d86b57b8ef848 100644 (file)
@@ -893,7 +893,7 @@ static inline u32 ath6kl_get_hi_item_addr(struct ath6kl *ar,
 
 int ath6kl_configure_target(struct ath6kl *ar);
 void ath6kl_detect_error(unsigned long ptr);
-void disconnect_timer_handler(unsigned long ptr);
+void disconnect_timer_handler(struct timer_list *t);
 void init_netdev(struct net_device *dev);
 void ath6kl_cookie_init(struct ath6kl *ar);
 void ath6kl_cookie_cleanup(struct ath6kl *ar);
index b90c77ef792ef8908173aa2f762d15089dce55fd..db95f85751e3448302b3a6afe103396ff1b951d2 100644 (file)
@@ -494,10 +494,9 @@ void ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,
        netif_wake_queue(vif->ndev);
 }
 
-void disconnect_timer_handler(unsigned long ptr)
+void disconnect_timer_handler(struct timer_list *t)
 {
-       struct net_device *dev = (struct net_device *)ptr;
-       struct ath6kl_vif *vif = netdev_priv(dev);
+       struct ath6kl_vif *vif = from_timer(vif, t, disconnect_timer);
 
        ath6kl_init_profile_info(vif);
        ath6kl_disconnect(vif);
index 4e5cc2b7045a844f65be3f3174ba3bcf076892f1..1379906bf8498831478ce5ebdf94701f93f18018 100644 (file)
@@ -1620,10 +1620,10 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
        ath6kl_deliver_frames_to_nw_stack(vif->ndev, skb);
 }
 
-static void aggr_timeout(unsigned long arg)
+static void aggr_timeout(struct timer_list *t)
 {
        u8 i, j;
-       struct aggr_info_conn *aggr_conn = (struct aggr_info_conn *) arg;
+       struct aggr_info_conn *aggr_conn = from_timer(aggr_conn, t, timer);
        struct rxtid *rxtid;
        struct rxtid_stats *stats;
 
@@ -1753,7 +1753,7 @@ void aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,
 
        aggr_conn->aggr_sz = AGGR_SZ_DEFAULT;
        aggr_conn->dev = vif->ndev;
-       setup_timer(&aggr_conn->timer, aggr_timeout, (unsigned long)aggr_conn);
+       timer_setup(&aggr_conn->timer, aggr_timeout, 0);
        aggr_conn->aggr_info = aggr_info;
 
        aggr_conn->timer_scheduled = false;
index bfc20b45b806cea3ce1764c8be4add34a8408c1a..777acc564ac9917d331de8f2ef87657199ce482a 100644 (file)
@@ -1078,9 +1078,9 @@ static int ath6kl_wmi_tkip_micerr_event_rx(struct wmi *wmi, u8 *datap, int len,
        return 0;
 }
 
-void ath6kl_wmi_sscan_timer(unsigned long ptr)
+void ath6kl_wmi_sscan_timer(struct timer_list *t)
 {
-       struct ath6kl_vif *vif = (struct ath6kl_vif *) ptr;
+       struct ath6kl_vif *vif = from_timer(vif, t, sched_scan_timer);
 
        cfg80211_sched_scan_results(vif->ar->wiphy, 0);
 }
index 3af464a73b58ca00759b21fba892ad5f64ac81ac..a60bb49fe920c1959eccb5eb4b975d1c2fb46949 100644 (file)
@@ -2719,7 +2719,7 @@ int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
 
 int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout);
 
-void ath6kl_wmi_sscan_timer(unsigned long ptr);
+void ath6kl_wmi_sscan_timer(struct timer_list *t);
 
 int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source);
 
index cf076719c27ec983db66794a3f41a5deb6f640d2..ef0de4f1312c369ed47dffac19f4681375e1e912 100644 (file)
@@ -750,14 +750,14 @@ void ath_reset_work(struct work_struct *work);
 bool ath_hw_check(struct ath_softc *sc);
 void ath_hw_pll_work(struct work_struct *work);
 void ath_paprd_calibrate(struct work_struct *work);
-void ath_ani_calibrate(unsigned long data);
+void ath_ani_calibrate(struct timer_list *t);
 void ath_start_ani(struct ath_softc *sc);
 void ath_stop_ani(struct ath_softc *sc);
 void ath_check_ani(struct ath_softc *sc);
 int ath_update_survey_stats(struct ath_softc *sc);
 void ath_update_survey_nf(struct ath_softc *sc, int channel);
 void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type);
-void ath_ps_full_sleep(unsigned long data);
+void ath_ps_full_sleep(struct timer_list *t);
 void __ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop,
                   bool sw_pending, bool timeout_override);
 
index fad020aa222e86a2d9c7c031ba415fe804174e88..dfb26f03c1a27a48ad97e681310b3d41a9bab129 100644 (file)
@@ -1043,9 +1043,9 @@ static void ath_scan_channel_start(struct ath_softc *sc)
        mod_timer(&sc->offchannel.timer, jiffies + sc->offchannel.duration);
 }
 
-static void ath_chanctx_timer(unsigned long data)
+static void ath_chanctx_timer(struct timer_list *t)
 {
-       struct ath_softc *sc = (struct ath_softc *) data;
+       struct ath_softc *sc = from_timer(sc, t, sched.timer);
        struct ath_common *common = ath9k_hw_common(sc->sc_ah);
 
        ath_dbg(common, CHAN_CTX,
@@ -1054,9 +1054,9 @@ static void ath_chanctx_timer(unsigned long data)
        ath_chanctx_event(sc, NULL, ATH_CHANCTX_EVENT_TSF_TIMER);
 }
 
-static void ath_offchannel_timer(unsigned long data)
+static void ath_offchannel_timer(struct timer_list *t)
 {
-       struct ath_softc *sc = (struct ath_softc *)data;
+       struct ath_softc *sc = from_timer(sc, t, offchannel.timer);
        struct ath_chanctx *ctx;
        struct ath_common *common = ath9k_hw_common(sc->sc_ah);
 
@@ -1362,10 +1362,8 @@ void ath9k_init_channel_context(struct ath_softc *sc)
 {
        INIT_WORK(&sc->chanctx_work, ath_chanctx_work);
 
-       setup_timer(&sc->offchannel.timer, ath_offchannel_timer,
-                   (unsigned long)sc);
-       setup_timer(&sc->sched.timer, ath_chanctx_timer,
-                   (unsigned long)sc);
+       timer_setup(&sc->offchannel.timer, ath_offchannel_timer, 0);
+       timer_setup(&sc->sched.timer, ath_chanctx_timer, 0);
 
        init_completion(&sc->go_beacon);
 }
index ddb28861e7feeef9e14cda5fe2b80e6e14d44cc2..b457e52dd365cc05f9f966d7440ab3256550b779 100644 (file)
@@ -191,9 +191,9 @@ static void ath_mci_ftp_adjust(struct ath_softc *sc)
  * 45ms, bt traffic will be given priority during 55% of this
  * period while wlan gets remaining 45%
  */
-static void ath_btcoex_period_timer(unsigned long data)
+static void ath_btcoex_period_timer(struct timer_list *t)
 {
-       struct ath_softc *sc = (struct ath_softc *) data;
+       struct ath_softc *sc = from_timer(sc, t, btcoex.period_timer);
        struct ath_hw *ah = sc->sc_ah;
        struct ath_btcoex *btcoex = &sc->btcoex;
        enum ath_stomp_type stomp_type;
@@ -252,9 +252,9 @@ skip_hw_wakeup:
  * Generic tsf based hw timer which configures weight
  * registers to time slice between wlan and bt traffic
  */
-static void ath_btcoex_no_stomp_timer(unsigned long arg)
+static void ath_btcoex_no_stomp_timer(struct timer_list *t)
 {
-       struct ath_softc *sc = (struct ath_softc *)arg;
+       struct ath_softc *sc = from_timer(sc, t, btcoex.no_stomp_timer);
        struct ath_hw *ah = sc->sc_ah;
        struct ath_btcoex *btcoex = &sc->btcoex;
 
@@ -284,10 +284,8 @@ static void ath_init_btcoex_timer(struct ath_softc *sc)
                                   btcoex->btcoex_period / 100;
        btcoex->bt_stomp_type = ATH_BTCOEX_STOMP_LOW;
 
-       setup_timer(&btcoex->period_timer, ath_btcoex_period_timer,
-                       (unsigned long) sc);
-       setup_timer(&btcoex->no_stomp_timer, ath_btcoex_no_stomp_timer,
-                       (unsigned long) sc);
+       timer_setup(&btcoex->period_timer, ath_btcoex_period_timer, 0);
+       timer_setup(&btcoex->no_stomp_timer, ath_btcoex_no_stomp_timer, 0);
 
        spin_lock_init(&btcoex->btcoex_lock);
 }
index 16dff4b89a86fc43635f0e91c2981372e575eda6..9f64e32381f9451cc2cb2949c03a697172758685 100644 (file)
@@ -584,7 +584,7 @@ void ath9k_htc_tx_clear_slot(struct ath9k_htc_priv *priv, int slot);
 void ath9k_htc_tx_drain(struct ath9k_htc_priv *priv);
 void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event);
 void ath9k_tx_failed_tasklet(unsigned long data);
-void ath9k_htc_tx_cleanup_timer(unsigned long data);
+void ath9k_htc_tx_cleanup_timer(struct timer_list *t);
 bool ath9k_htc_csa_is_finished(struct ath9k_htc_priv *priv);
 
 int ath9k_rx_init(struct ath9k_htc_priv *priv);
index 57de6fa6ff03f6dc63cef6b02b18b17bb4d8f50b..e89e5ef2c2a4edd467ee842ce7316031f2e1c9d2 100644 (file)
@@ -654,8 +654,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
        INIT_DELAYED_WORK(&priv->ani_work, ath9k_htc_ani_work);
        INIT_WORK(&priv->ps_work, ath9k_ps_work);
        INIT_WORK(&priv->fatal_work, ath9k_fatal_work);
-       setup_timer(&priv->tx.cleanup_timer, ath9k_htc_tx_cleanup_timer,
-                   (unsigned long)priv);
+       timer_setup(&priv->tx.cleanup_timer, ath9k_htc_tx_cleanup_timer, 0);
 
        /*
         * Cache line size is used to size and align various
index 2682da02da54118e090b1391d8a2ddb1137ef274..585736a837ed8df30c84702fadc861384e17a418 100644 (file)
@@ -752,9 +752,9 @@ static void ath9k_htc_tx_cleanup_queue(struct ath9k_htc_priv *priv,
        }
 }
 
-void ath9k_htc_tx_cleanup_timer(unsigned long data)
+void ath9k_htc_tx_cleanup_timer(struct timer_list *t)
 {
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) data;
+       struct ath9k_htc_priv *priv = from_timer(priv, t, tx.cleanup_timer);
        struct ath_common *common = ath9k_hw_common(priv->ah);
        struct ath9k_htc_tx_event *event, *tmp;
        struct sk_buff *skb;
index 4bc403620cf935635865d56569310ec37c9edaff..fa58a32227f5b216c97bb4cee871b87178f489e9 100644 (file)
@@ -369,7 +369,7 @@ static void ath9k_init_misc(struct ath_softc *sc)
        struct ath_common *common = ath9k_hw_common(sc->sc_ah);
        int i = 0;
 
-       setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
+       timer_setup(&common->ani.timer, ath_ani_calibrate, 0);
 
        common->last_rssi = ATH_RSSI_DUMMY_MARKER;
        memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
@@ -678,7 +678,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
        tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
                     (unsigned long)sc);
 
-       setup_timer(&sc->sleep_timer, ath_ps_full_sleep, (unsigned long)sc);
+       timer_setup(&sc->sleep_timer, ath_ps_full_sleep, 0);
        INIT_WORK(&sc->hw_reset_work, ath_reset_work);
        INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
        INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
index 3f4f01c829f026ec8fa7643da4f72d0dc4d41074..9d84003db800e9513f07ee85a4203dbb7636edf0 100644 (file)
@@ -301,11 +301,11 @@ fail_paprd:
  *  When the task is complete, it reschedules itself depending on the
  *  appropriate interval that was calculated.
  */
-void ath_ani_calibrate(unsigned long data)
+void ath_ani_calibrate(struct timer_list *t)
 {
-       struct ath_softc *sc = (struct ath_softc *)data;
+       struct ath_common *common = from_timer(common, t, ani.timer);
+       struct ath_softc *sc = (struct ath_softc *)common->priv;
        struct ath_hw *ah = sc->sc_ah;
-       struct ath_common *common = ath9k_hw_common(ah);
        bool longcal = false;
        bool shortcal = false;
        bool aniflag = false;
index 918773a9231bf577b31b8b8d945114ac5f0d01a6..a3be8add56e112f560fec5a381c60382210307f0 100644 (file)
@@ -93,9 +93,9 @@ static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode)
        return ret;
 }
 
-void ath_ps_full_sleep(unsigned long data)
+void ath_ps_full_sleep(struct timer_list *t)
 {
-       struct ath_softc *sc = (struct ath_softc *) data;
+       struct ath_softc *sc = from_timer(sc, t, sleep_timer);
        struct ath_common *common = ath9k_hw_common(sc->sc_ah);
        unsigned long flags;
        bool reset;
index bac829aa950d5e4019e90b5ee247d9d5cb8267bb..885924abf61cc75a4e129ac16347c2b77053ec9d 100644 (file)
@@ -336,9 +336,9 @@ static void wil_disconnect_worker(struct work_struct *work)
        clear_bit(wil_status_fwconnecting, wil->status);
 }
 
-static void wil_connect_timer_fn(ulong x)
+static void wil_connect_timer_fn(struct timer_list *t)
 {
-       struct wil6210_priv *wil = (void *)x;
+       struct wil6210_priv *wil = from_timer(wil, t, connect_timer);
        bool q;
 
        wil_err(wil, "Connect timeout detected, disconnect station\n");
@@ -351,9 +351,9 @@ static void wil_connect_timer_fn(ulong x)
        wil_dbg_wmi(wil, "queue_work of disconnect_worker -> %d\n", q);
 }
 
-static void wil_scan_timer_fn(ulong x)
+static void wil_scan_timer_fn(struct timer_list *t)
 {
-       struct wil6210_priv *wil = (void *)x;
+       struct wil6210_priv *wil = from_timer(wil, t, scan_timer);
 
        clear_bit(wil_status_fwready, wil->status);
        wil_err(wil, "Scan timeout detected, start fw error recovery\n");
@@ -540,10 +540,9 @@ int wil_priv_init(struct wil6210_priv *wil)
        init_completion(&wil->halp.comp);
 
        wil->bcast_vring = -1;
-       setup_timer(&wil->connect_timer, wil_connect_timer_fn, (ulong)wil);
-       setup_timer(&wil->scan_timer, wil_scan_timer_fn, (ulong)wil);
-       setup_timer(&wil->p2p.discovery_timer, wil_p2p_discovery_timer_fn,
-                   (ulong)wil);
+       timer_setup(&wil->connect_timer, wil_connect_timer_fn, 0);
+       timer_setup(&wil->scan_timer, wil_scan_timer_fn, 0);
+       timer_setup(&wil->p2p.discovery_timer, wil_p2p_discovery_timer_fn, 0);
 
        INIT_WORK(&wil->disconnect_worker, wil_disconnect_worker);
        INIT_WORK(&wil->wmi_event_worker, wmi_event_worker);
index 792484756654bcd5e27b831409411f2840c5bd8e..7dbee2c3e482c3702812ec393060fce2d7fd636e 100644 (file)
@@ -65,9 +65,9 @@ bool wil_p2p_is_social_scan(struct cfg80211_scan_request *request)
               (request->channels[0]->hw_value == P2P_DMG_SOCIAL_CHANNEL);
 }
 
-void wil_p2p_discovery_timer_fn(ulong x)
+void wil_p2p_discovery_timer_fn(struct timer_list *t)
 {
-       struct wil6210_priv *wil = (void *)x;
+       struct wil6210_priv *wil = from_timer(wil, t, p2p.discovery_timer);
 
        wil_dbg_misc(wil, "p2p_discovery_timer_fn\n");
 
index 315ec8b5966285e7917bd529eea6f4c2c1b8a8c0..1e340d04bd70c5ed0e746a620c03c08fc3c05e8b 100644 (file)
@@ -918,7 +918,7 @@ void wil6210_mask_halp(struct wil6210_priv *wil);
 
 /* P2P */
 bool wil_p2p_is_social_scan(struct cfg80211_scan_request *request);
-void wil_p2p_discovery_timer_fn(ulong x);
+void wil_p2p_discovery_timer_fn(struct timer_list *t);
 int wil_p2p_search(struct wil6210_priv *wil,
                   struct cfg80211_scan_request *request);
 int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,