From: Ben Greear <greearb@candelatech.com>
To: Tejun Heo <htejun@gmail.com>
Cc: Johannes Berg <johannes@sipsolutions.net>,
"Luis R. Rodriguez" <mcgrof@gmail.com>,
linux-wireless@vger.kernel.org
Subject: Re: [PATCH] mac80211: Fix deadlock in ieee80211_do_stop.
Date: Thu, 09 Dec 2010 09:27:01 -0800 [thread overview]
Message-ID: <4D011165.7060800@candelatech.com> (raw)
In-Reply-To: <4D010114.5020604@gmail.com>
On 12/09/2010 08:17 AM, Tejun Heo wrote:
> On 12/09/2010 03:46 PM, Tejun Heo wrote:
>>> Right, so we're flushing here under RTNL ... I believe this is the one
>>> that Ben hacked up to not flush or so?
>>
>> He made it to cancel instead of flush.
>
> This makes me think that it's more likely to be a problem in the
> flush_work() implementation. I went over the code carefully again but
> couldn't find anything suspicious. Plus, most of the implementation
> is shared between cancel and flush.
>
> I'm gonna write some test code and see whether the flush code behaves
> as expected but in the mean time can you please apply the following
> patch, trigger the problem and report the kernel log? Also, please
> include the sysrq task dump. Let's see whether the worker is always
> stuck at the same spot.
I'll test this later today and let you know how it turns out..
Thanks,
Ben
>
> Thanks.
>
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index b80c386..0ebc386 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -933,6 +933,10 @@ struct ieee80211_local {
> struct net_device napi_dev;
>
> struct napi_struct napi;
> +
> + struct timer_list iface_work_timer;
> + unsigned long iface_work_tstmp;
> + unsigned int iface_work_runcnt;
> };
>
> static inline struct ieee80211_sub_if_data *
> diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
> index 7aa8559..074d5bd 100644
> --- a/net/mac80211/iface.c
> +++ b/net/mac80211/iface.c
> @@ -715,6 +715,14 @@ static void ieee80211_if_setup(struct net_device *dev)
> dev->destructor = free_netdev;
> }
>
> +static void dbg_watchdog_timer(unsigned long __arg)
> +{
> + struct ieee80211_local *local = (void *)__arg;
> +
> + pr_warning("ieee80211_iface_work ran for> 5secs, processed %u\n",
> + local->iface_work_runcnt);
> +}
> +
> static void ieee80211_iface_work(struct work_struct *work)
> {
> struct ieee80211_sub_if_data *sdata =
> @@ -738,10 +746,21 @@ static void ieee80211_iface_work(struct work_struct *work)
> "interface work scheduled while going to suspend\n"))
> return;
>
> + local->iface_work_tstmp = jiffies;
> + local->iface_work_runcnt = 0;
> +
> + init_timer(&local->iface_work_timer);
> + local->iface_work_timer.function = dbg_watchdog_timer;
> + local->iface_work_timer.data = (unsigned long)local;
> + local->iface_work_timer.expires = local->iface_work_tstmp + 5 * HZ;
> + add_timer(&local->iface_work_timer);
> +
> /* first process frames */
> while ((skb = skb_dequeue(&sdata->skb_queue))) {
> struct ieee80211_mgmt *mgmt = (void *)skb->data;
>
> + local->iface_work_runcnt++;
> +
> if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) {
> ra_tid = (void *)&skb->cb;
> ieee80211_start_tx_ba_cb(&sdata->vif, ra_tid->ra,
> @@ -843,6 +862,12 @@ static void ieee80211_iface_work(struct work_struct *work)
> default:
> break;
> }
> +
> + del_timer_sync(&local->iface_work_timer);
> + if (time_after(jiffies, local->iface_work_tstmp + 4 * HZ))
> + pr_warning("iee80211_iface_work ran for %lu seconds, runcnt=%u\n",
> + (jiffies - local->iface_work_tstmp) / HZ,
> + local->iface_work_runcnt);
> }
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
next prev parent reply other threads:[~2010-12-09 17:27 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-12 20:07 [PATCH] mac80211: Fix deadlock in ieee80211_do_stop greearb
2010-11-12 20:08 ` Luis R. Rodriguez
2010-11-12 20:16 ` Ben Greear
2010-11-12 20:49 ` Johannes Berg
2010-11-12 20:57 ` Ben Greear
2010-11-12 21:08 ` Johannes Berg
2010-11-12 21:51 ` Ben Greear
2010-11-13 10:34 ` Tejun Heo
2010-11-15 21:16 ` Ben Greear
2010-11-16 14:19 ` Tejun Heo
2010-11-16 16:51 ` Ben Greear
2010-11-17 8:55 ` Tejun Heo
2010-11-17 17:37 ` Ben Greear
2010-11-16 17:40 ` Johannes Berg
2010-11-17 8:47 ` Tejun Heo
2010-11-17 18:53 ` Johannes Berg
2010-11-17 18:59 ` Ben Greear
2010-11-17 19:03 ` Johannes Berg
2010-11-18 6:34 ` Tejun Heo
2010-11-18 7:07 ` Johannes Berg
2010-11-18 7:22 ` Tejun Heo
2010-11-18 16:59 ` Johannes Berg
2010-11-19 14:34 ` Tejun Heo
2010-11-19 17:57 ` Johannes Berg
2010-11-19 20:55 ` Ben Greear
2010-11-19 22:27 ` Luis R. Rodriguez
2010-12-08 17:36 ` Ben Greear
2010-12-08 18:19 ` Ben Greear
2010-12-08 18:28 ` Ben Greear
2010-12-09 14:34 ` Tejun Heo
2010-12-09 14:42 ` Johannes Berg
2010-12-09 14:46 ` Tejun Heo
2010-12-09 16:17 ` Tejun Heo
[not found] ` <4D0156F6.4000306@candelate ch.com>
2010-12-09 17:27 ` Ben Greear [this message]
2010-12-09 22:23 ` Ben Greear
2010-12-10 15:11 ` Tejun Heo
2010-12-10 16:35 ` Ben Greear
2010-11-18 17:55 ` Ben Greear
2010-11-18 18:04 ` Tejun Heo
2010-11-18 18:11 ` Ben Greear
2010-11-17 20:13 ` Ben Greear
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=4D011165.7060800@candelatech.com \
--to=greearb@candelatech.com \
--cc=htejun@gmail.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=mcgrof@gmail.com \
/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: link
Be 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.