From: Anna-Maria Gleixner <anna-maria@linutronix.de> To: LKML <linux-kernel@vger.kernel.org> Cc: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Christoph Hellwig <hch@lst.org>, keescook@chromium.org, John Stultz <john.stultz@linaro.org>, Thomas Gleixner <tglx@linutronix.de>, Johannes Berg <johannes@sipsolutions.net>, Kalle Valo <kvalo@codeaurora.org>, linux-wireless@vger.kernel.org Subject: [PATCH 20/25] mac80211_hwsim: Replace hrtimer tasklet with softirq hrtimer Date: Thu, 31 Aug 2017 12:23:43 -0000 [thread overview] Message-ID: <20170831105827.172599262@linutronix.de> (raw) In-Reply-To: 20170831105725.809317030@linutronix.de From: Thomas Gleixner <tglx@linutronix.de> Switch the timer to CLOCK_MONOTONIC_SOFT, which executed the timer callback in softirq context and remove the hrtimer_tasklet. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> Cc: Johannes Berg <johannes@sipsolutions.net> Cc: Kalle Valo <kvalo@codeaurora.org> Cc: linux-wireless@vger.kernel.org --- drivers/net/wireless/mac80211_hwsim.c | 44 +++++++++++++++------------------- 1 file changed, 20 insertions(+), 24 deletions(-) --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -537,7 +537,7 @@ struct mac80211_hwsim_data { unsigned int rx_filter; bool started, idle, scanning; struct mutex mutex; - struct tasklet_hrtimer beacon_timer; + struct hrtimer beacon_timer; enum ps_mode { PS_DISABLED, PS_ENABLED, PS_AUTO_POLL, PS_MANUAL_POLL } ps; @@ -1420,7 +1420,7 @@ static void mac80211_hwsim_stop(struct i { struct mac80211_hwsim_data *data = hw->priv; data->started = false; - tasklet_hrtimer_cancel(&data->beacon_timer); + hrtimer_cancel(&data->beacon_timer); wiphy_debug(hw->wiphy, "%s\n", __func__); } @@ -1543,14 +1543,12 @@ static enum hrtimer_restart mac80211_hwsim_beacon(struct hrtimer *timer) { struct mac80211_hwsim_data *data = - container_of(timer, struct mac80211_hwsim_data, - beacon_timer.timer); + container_of(timer, struct mac80211_hwsim_data, beacon_timer); struct ieee80211_hw *hw = data->hw; u64 bcn_int = data->beacon_int; - ktime_t next_bcn; if (!data->started) - goto out; + return HRTIMER_NORESTART; ieee80211_iterate_active_interfaces_atomic( hw, IEEE80211_IFACE_ITER_NORMAL, @@ -1562,11 +1560,9 @@ mac80211_hwsim_beacon(struct hrtimer *ti data->bcn_delta = 0; } - next_bcn = ktime_add(hrtimer_get_expires(timer), - ns_to_ktime(bcn_int * 1000)); - tasklet_hrtimer_start(&data->beacon_timer, next_bcn, HRTIMER_MODE_ABS); -out: - return HRTIMER_NORESTART; + hrtimer_forward(&data->beacon_timer, hrtimer_get_expires(timer), + ns_to_ktime(bcn_int * NSEC_PER_USEC)); + return HRTIMER_RESTART; } static const char * const hwsim_chanwidths[] = { @@ -1640,15 +1636,15 @@ static int mac80211_hwsim_config(struct mutex_unlock(&data->mutex); if (!data->started || !data->beacon_int) - tasklet_hrtimer_cancel(&data->beacon_timer); - else if (!hrtimer_is_queued(&data->beacon_timer.timer)) { + hrtimer_cancel(&data->beacon_timer); + else if (!hrtimer_is_queued(&data->beacon_timer)) { u64 tsf = mac80211_hwsim_get_tsf(hw, NULL); u32 bcn_int = data->beacon_int; u64 until_tbtt = bcn_int - do_div(tsf, bcn_int); - tasklet_hrtimer_start(&data->beacon_timer, - ns_to_ktime(until_tbtt * 1000), - HRTIMER_MODE_REL); + hrtimer_start(&data->beacon_timer, + ns_to_ktime(until_tbtt * 1000), + HRTIMER_MODE_REL); } return 0; @@ -1711,7 +1707,7 @@ static void mac80211_hwsim_bss_info_chan info->enable_beacon, info->beacon_int); vp->bcn_en = info->enable_beacon; if (data->started && - !hrtimer_is_queued(&data->beacon_timer.timer) && + !hrtimer_is_queued(&data->beacon_timer) && info->enable_beacon) { u64 tsf, until_tbtt; u32 bcn_int; @@ -1719,9 +1715,9 @@ static void mac80211_hwsim_bss_info_chan tsf = mac80211_hwsim_get_tsf(hw, vif); bcn_int = data->beacon_int; until_tbtt = bcn_int - do_div(tsf, bcn_int); - tasklet_hrtimer_start(&data->beacon_timer, - ns_to_ktime(until_tbtt * 1000), - HRTIMER_MODE_REL); + hrtimer_start(&data->beacon_timer, + ns_to_ktime(until_tbtt * 1000), + HRTIMER_MODE_REL); } else if (!info->enable_beacon) { unsigned int count = 0; ieee80211_iterate_active_interfaces_atomic( @@ -1730,7 +1726,7 @@ static void mac80211_hwsim_bss_info_chan wiphy_debug(hw->wiphy, " beaconing vifs remaining: %u", count); if (count == 0) { - tasklet_hrtimer_cancel(&data->beacon_timer); + hrtimer_cancel(&data->beacon_timer); data->beacon_int = 0; } } @@ -2722,9 +2718,9 @@ static int mac80211_hwsim_new_radio(stru data->debugfs, data, &hwsim_simulate_radar); - tasklet_hrtimer_init(&data->beacon_timer, - mac80211_hwsim_beacon, - CLOCK_MONOTONIC, HRTIMER_MODE_ABS); + hrtimer_init(&data->beacon_timer, CLOCK_MONOTONIC_SOFT, + HRTIMER_MODE_ABS); + data->beacon_timer.function = mac80211_hwsim_beacon; spin_lock_bh(&hwsim_radio_lock); list_add_tail(&data->list, &hwsim_radios);
WARNING: multiple messages have this Message-ID (diff)
From: Anna-Maria Gleixner <anna-maria@linutronix.de> To: LKML <linux-kernel@vger.kernel.org> Cc: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Christoph Hellwig <hch@lst.org>, keescook@chromium.org, John Stultz <john.stultz@linaro.org>, Thomas Gleixner <tglx@linutronix.de>, Johannes Berg <johannes@sipsolutions.net>, Kalle Valo <kvalo@codeaurora.org>, linux-wireless@vger.kernel.org Subject: [PATCH 20/25] mac80211_hwsim: Replace hrtimer tasklet with softirq hrtimer Date: Thu, 31 Aug 2017 12:23:43 -0000 [thread overview] Message-ID: <20170831105827.172599262@linutronix.de> (raw) In-Reply-To: 20170831105725.809317030@linutronix.de [-- Attachment #1: mac80211_hwsim_Replace_hrtimer_tasklet_with_softirq_hrtimer.patch --] [-- Type: text/plain, Size: 4567 bytes --] From: Thomas Gleixner <tglx@linutronix.de> Switch the timer to CLOCK_MONOTONIC_SOFT, which executed the timer callback in softirq context and remove the hrtimer_tasklet. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> Cc: Johannes Berg <johannes@sipsolutions.net> Cc: Kalle Valo <kvalo@codeaurora.org> Cc: linux-wireless@vger.kernel.org --- drivers/net/wireless/mac80211_hwsim.c | 44 +++++++++++++++------------------- 1 file changed, 20 insertions(+), 24 deletions(-) --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -537,7 +537,7 @@ struct mac80211_hwsim_data { unsigned int rx_filter; bool started, idle, scanning; struct mutex mutex; - struct tasklet_hrtimer beacon_timer; + struct hrtimer beacon_timer; enum ps_mode { PS_DISABLED, PS_ENABLED, PS_AUTO_POLL, PS_MANUAL_POLL } ps; @@ -1420,7 +1420,7 @@ static void mac80211_hwsim_stop(struct i { struct mac80211_hwsim_data *data = hw->priv; data->started = false; - tasklet_hrtimer_cancel(&data->beacon_timer); + hrtimer_cancel(&data->beacon_timer); wiphy_debug(hw->wiphy, "%s\n", __func__); } @@ -1543,14 +1543,12 @@ static enum hrtimer_restart mac80211_hwsim_beacon(struct hrtimer *timer) { struct mac80211_hwsim_data *data = - container_of(timer, struct mac80211_hwsim_data, - beacon_timer.timer); + container_of(timer, struct mac80211_hwsim_data, beacon_timer); struct ieee80211_hw *hw = data->hw; u64 bcn_int = data->beacon_int; - ktime_t next_bcn; if (!data->started) - goto out; + return HRTIMER_NORESTART; ieee80211_iterate_active_interfaces_atomic( hw, IEEE80211_IFACE_ITER_NORMAL, @@ -1562,11 +1560,9 @@ mac80211_hwsim_beacon(struct hrtimer *ti data->bcn_delta = 0; } - next_bcn = ktime_add(hrtimer_get_expires(timer), - ns_to_ktime(bcn_int * 1000)); - tasklet_hrtimer_start(&data->beacon_timer, next_bcn, HRTIMER_MODE_ABS); -out: - return HRTIMER_NORESTART; + hrtimer_forward(&data->beacon_timer, hrtimer_get_expires(timer), + ns_to_ktime(bcn_int * NSEC_PER_USEC)); + return HRTIMER_RESTART; } static const char * const hwsim_chanwidths[] = { @@ -1640,15 +1636,15 @@ static int mac80211_hwsim_config(struct mutex_unlock(&data->mutex); if (!data->started || !data->beacon_int) - tasklet_hrtimer_cancel(&data->beacon_timer); - else if (!hrtimer_is_queued(&data->beacon_timer.timer)) { + hrtimer_cancel(&data->beacon_timer); + else if (!hrtimer_is_queued(&data->beacon_timer)) { u64 tsf = mac80211_hwsim_get_tsf(hw, NULL); u32 bcn_int = data->beacon_int; u64 until_tbtt = bcn_int - do_div(tsf, bcn_int); - tasklet_hrtimer_start(&data->beacon_timer, - ns_to_ktime(until_tbtt * 1000), - HRTIMER_MODE_REL); + hrtimer_start(&data->beacon_timer, + ns_to_ktime(until_tbtt * 1000), + HRTIMER_MODE_REL); } return 0; @@ -1711,7 +1707,7 @@ static void mac80211_hwsim_bss_info_chan info->enable_beacon, info->beacon_int); vp->bcn_en = info->enable_beacon; if (data->started && - !hrtimer_is_queued(&data->beacon_timer.timer) && + !hrtimer_is_queued(&data->beacon_timer) && info->enable_beacon) { u64 tsf, until_tbtt; u32 bcn_int; @@ -1719,9 +1715,9 @@ static void mac80211_hwsim_bss_info_chan tsf = mac80211_hwsim_get_tsf(hw, vif); bcn_int = data->beacon_int; until_tbtt = bcn_int - do_div(tsf, bcn_int); - tasklet_hrtimer_start(&data->beacon_timer, - ns_to_ktime(until_tbtt * 1000), - HRTIMER_MODE_REL); + hrtimer_start(&data->beacon_timer, + ns_to_ktime(until_tbtt * 1000), + HRTIMER_MODE_REL); } else if (!info->enable_beacon) { unsigned int count = 0; ieee80211_iterate_active_interfaces_atomic( @@ -1730,7 +1726,7 @@ static void mac80211_hwsim_bss_info_chan wiphy_debug(hw->wiphy, " beaconing vifs remaining: %u", count); if (count == 0) { - tasklet_hrtimer_cancel(&data->beacon_timer); + hrtimer_cancel(&data->beacon_timer); data->beacon_int = 0; } } @@ -2722,9 +2718,9 @@ static int mac80211_hwsim_new_radio(stru data->debugfs, data, &hwsim_simulate_radar); - tasklet_hrtimer_init(&data->beacon_timer, - mac80211_hwsim_beacon, - CLOCK_MONOTONIC, HRTIMER_MODE_ABS); + hrtimer_init(&data->beacon_timer, CLOCK_MONOTONIC_SOFT, + HRTIMER_MODE_ABS); + data->beacon_timer.function = mac80211_hwsim_beacon; spin_lock_bh(&hwsim_radio_lock); list_add_tail(&data->list, &hwsim_radios);
next prev parent reply other threads:[~2017-08-31 12:24 UTC|newest] Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-08-31 12:23 [PATCH 00/25] hrtimer: Provide softirq context hrtimers Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 01/25] hrtimer: Use predefined function for updating next_timer Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 02/25] hrtimer: Correct blantanly wrong comment Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 03/25] hrtimer: Fix kerneldoc for struct hrtimer_cpu_base Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 04/25] hrtimer: Cleanup clock argument in schedule_hrtimeout_range_clock() Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 05/25] hrtimer: Switch for loop to _ffs() evaluation Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 07/25] hrtimer: Reduce conditional code (hres_active) Anna-Maria Gleixner 2017-09-25 13:55 ` Peter Zijlstra 2017-09-25 14:28 ` Thomas Gleixner 2017-08-31 12:23 ` [PATCH 06/25] hrtimer: Store running timer in hrtimer_clock_base Anna-Maria Gleixner 2017-09-25 14:44 ` Peter Zijlstra 2017-09-28 12:45 ` Thomas Gleixner 2017-08-31 12:23 ` [PATCH 08/25] hrtimer: Reduce conditional code (expires_next, next_timer) Anna-Maria Gleixner 2017-09-26 12:10 ` Peter Zijlstra 2017-09-28 8:07 ` Thomas Gleixner 2017-08-31 12:23 ` [PATCH 09/25] hrtimer: Reduce conditional code (hrtimer_reprogram()) Anna-Maria Gleixner 2017-09-26 12:07 ` Peter Zijlstra 2017-08-31 12:23 ` [PATCH 10/25] hrtimer: Make handling of hrtimer reprogramming and enqueuing not conditional Anna-Maria Gleixner 2017-09-26 12:14 ` Peter Zijlstra 2017-09-28 8:09 ` Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 11/25] hrtimer: Allow remote hrtimer enqueue with "expires_next" as expiry time Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 13/25] hrtimer: Split out code from hrtimer_start_range_ns() for reuse Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 12/25] hrtimer: Simplify hrtimer_reprogram() call Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 14/25] hrtimer: Split out code from __hrtimer_get_next_event() for reuse Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 15/25] hrtimer: Add clock bases for soft irq context Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 16/25] hrtimer: Allow function reuse for softirq based hrtimer Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 18/25] hrtimer: Enable soft and hard hrtimer Anna-Maria Gleixner 2017-09-26 12:52 ` Peter Zijlstra 2017-09-27 14:18 ` Anna-Maria Gleixner 2017-09-27 15:54 ` Thomas Gleixner 2017-09-27 16:47 ` Peter Zijlstra 2017-08-31 12:23 ` [PATCH 17/25] hrtimer: Implementation of softirq hrtimer handling Anna-Maria Gleixner 2017-09-26 12:40 ` Peter Zijlstra 2017-09-26 15:03 ` Peter Zijlstra 2017-09-27 14:22 ` Anna-Maria Gleixner 2017-09-27 16:46 ` Peter Zijlstra 2017-09-27 16:40 ` Peter Zijlstra 2017-09-28 7:59 ` Thomas Gleixner 2017-09-28 8:15 ` Peter Zijlstra 2017-12-19 8:58 ` Sebastian Andrzej Siewior 2017-12-19 13:21 ` Peter Zijlstra 2017-12-20 8:44 ` Anna-Maria Gleixner 2017-08-31 12:23 ` Anna-Maria Gleixner [this message] 2017-08-31 12:23 ` [PATCH 20/25] mac80211_hwsim: Replace hrtimer tasklet with softirq hrtimer Anna-Maria Gleixner 2017-09-05 7:03 ` Johannes Berg 2017-09-05 8:49 ` Thomas Gleixner 2017-09-05 8:51 ` Johannes Berg 2017-08-31 12:23 ` [PATCH 19/25] can/bcm: Replace hrtimer_tasklet with softirq based hrtimer Anna-Maria Gleixner 2017-09-01 15:49 ` Oliver Hartkopp 2017-09-01 15:56 ` Thomas Gleixner 2017-09-01 17:02 ` Oliver Hartkopp 2017-09-02 17:56 ` Oliver Hartkopp 2017-08-31 12:23 ` [PATCH 21/25] xfrm: Replace hrtimer tasklet with softirq hrtimer Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 23/25] ALSA/dummy: Replace " Anna-Maria Gleixner 2017-08-31 14:21 ` Takashi Sakamoto 2017-08-31 14:21 ` Takashi Sakamoto 2017-08-31 14:26 ` Takashi Iwai 2017-08-31 14:26 ` Takashi Iwai 2017-08-31 15:36 ` Takashi Iwai 2017-08-31 15:36 ` Takashi Iwai 2017-09-01 10:25 ` Takashi Sakamoto 2017-09-01 10:25 ` Takashi Sakamoto 2017-09-01 11:58 ` Takashi Iwai 2017-09-01 11:58 ` Takashi Iwai 2017-09-02 1:19 ` Takashi Sakamoto 2017-09-02 1:19 ` Takashi Sakamoto 2017-09-04 12:45 ` Takashi Sakamoto 2017-09-05 15:53 ` [PATCH 23/25 v2] " Sebastian Andrzej Siewior 2017-09-05 15:53 ` Sebastian Andrzej Siewior 2017-09-05 16:02 ` Takashi Iwai 2017-09-05 16:02 ` Takashi Iwai 2017-09-05 16:05 ` Takashi Sakamoto 2017-09-05 16:18 ` [PATCH 23/25 v3] " Sebastian Andrzej Siewior 2017-09-05 16:18 ` Sebastian Andrzej Siewior 2017-09-06 4:30 ` Takashi Sakamoto 2017-09-06 4:30 ` Takashi Sakamoto 2017-09-08 8:28 ` [alsa-devel] " Takashi Iwai 2017-09-08 8:28 ` Takashi Iwai 2017-08-31 12:23 ` [PATCH 22/25] softirq: Remove tasklet_hrtimer Anna-Maria Gleixner 2017-08-31 12:23 ` [PATCH 25/25] usb/gadget/NCM: Replace tasklet with softirq hrtimer Anna-Maria Gleixner 2017-10-24 9:45 ` Felipe Balbi 2017-08-31 12:23 ` [PATCH 24/25] net/cdc_ncm: " Anna-Maria Gleixner 2017-08-31 13:33 ` Greg Kroah-Hartman 2017-08-31 13:57 ` Bjørn Mork 2017-09-05 15:42 ` [PATCH 24/25 v2] " Sebastian Andrzej Siewior 2017-08-31 12:36 ` [PATCH 00/25] hrtimer: Provide softirq context hrtimers Anna-Maria Gleixner
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170831105827.172599262@linutronix.de \ --to=anna-maria@linutronix.de \ --cc=hch@lst.org \ --cc=johannes@sipsolutions.net \ --cc=john.stultz@linaro.org \ --cc=keescook@chromium.org \ --cc=kvalo@codeaurora.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-wireless@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.