From: Andrew Morton <akpm@linux-foundation.org>
To: Xiaotian Feng <xtfeng@gmail.com>
Cc: linux-kernel@vger.kernel.org,
Xiaotian Feng <dannyfeng@tencent.com>,
Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [RFC PATCH] tasklet: ignore disabled tasklet in tasklet_action
Date: Mon, 5 Nov 2012 14:52:07 -0800 [thread overview]
Message-ID: <20121105145207.6d2fae92.akpm@linux-foundation.org> (raw)
In-Reply-To: <1351824534-2861-1-git-send-email-xtfeng@gmail.com>
On Fri, 2 Nov 2012 10:48:54 +0800
Xiaotian Feng <xtfeng@gmail.com> wrote:
> We met a ksoftirqd 100% issue, the perf top shows kernel is busy
> with tasklet_action(), but no actual action is shown. From dumped
> kernel, there's only one disabled tasklet on the tasklet_vec.
>
> tasklet_action might be handled after tasklet is disabled, this will
> make disabled tasklet stayed on tasklet_vec. tasklet_action will not
> handle disabled tasklet, but place it on the tail of tasklet_vec,
> still raise softirq for this tasklet. Things will become worse if
> device driver uses tasklet_disable on its device remove/close code.
> The disabled tasklet will stay on the vec, frequently __raise_softirq_off()
> and make ksoftirqd wakeup even if no tasklets need to be handled.
>
> This patch introduced a new TASKLET_STATE_HI bit to indicate HI_SOFTIRQ,
> in tasklet_action(), simply ignore the disabled tasklet and don't raise
> the softirq nr. In my previous patch, I remove tasklet_hi_enable() since
> it is the same as tasklet_enable(). So only tasklet_enable() needs to be
> modified, if tasklet state is changed from disable to enable, use
> __tasklet_schedule() to put it on the right vec.
gee, I haven't looked at the tasklet code in 100 years. I think I'll
send this in Thomas's direction ;)
The race description seems real and the patch looks sane to me. Are
you sure we can get away with never clearing TASKLET_STATE_HI? For
example, what would happen if code does a tasklet_hi_schedule(t) and
later does a tasklet_schedule(t)?
next prev parent reply other threads:[~2012-11-05 22:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-02 2:48 [RFC PATCH] tasklet: ignore disabled tasklet in tasklet_action Xiaotian Feng
2012-11-05 22:52 ` Andrew Morton [this message]
2012-11-06 1:22 ` Xiaotian Feng
2012-11-06 1:37 ` Andrew Morton
2012-11-28 18:00 ` [BUG -next-20121127] kernel BUG at kernel/softirq.c:471! Peter Hurley
2012-11-28 22:12 ` Peter Hurley
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=20121105145207.6d2fae92.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=dannyfeng@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=xtfeng@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.