Re: [PATCH RT v2] x86/mce: Defer mce wakeups to threads for PREEMPT_RT

Steven Rostedt
2013-05-02T14:27:01Z

Grumble, somehow these emails got lost in the crowd.

On Fri, 2013-04-26 at 10:24 +0200, Sebastian Andrzej Siewior wrote:
> * Steven Rostedt | 2013-04-11 14:33:34 [-0400]:
>
> >diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
> >index e8d8ad0..060e473 100644
> >--- a/arch/x86/kernel/cpu/mcheck/mce.c
> >+++ b/arch/x86/kernel/cpu/mcheck/mce.c
> >@@ -1308,6 +1309,61 @@ static void mce_do_trigger(struct work_struct *work)
> >
> > static DECLARE_WORK(mce_trigger_work, mce_do_trigger);
> >
> >+static void __mce_notify_work(void)
> >+{
> >+ /* Not more than two messages every minute */
> >+ static DEFINE_RATELIMIT_STATE(ratelimit, 60*HZ, 2);
> >+
> >+ /* wake processes polling /dev/mcelog */
> >+ wake_up_interruptible(&mce_chrdev_wait);
> >+
> >+ /*
> >+ * There is no risk of missing notifications because
> >+ * work_pending is always cleared before the function is
> >+ * executed.
> >+ */
> >+ if (mce_helper[0] && !work_pending(&mce_trigger_work))
> >+ schedule_work(&mce_trigger_work);
>
> Why is here this work_pending() check? You can't enqueue a work item
> twice.

Yep, that doesn't look needed. Looking at the current code we have this
commit:

commit 4d899be584d4b4c5d6b49d655176b25cebf6ff1a
Author: Tejun Heo <tj@kernel.org>
Date: Fri Dec 21 17:57:05 2012 -0800

x86/mce: don't use [delayed_]work_pending()

There's no need to test whether a (delayed) work item in pending
before queueing, flushing or cancelling it. Most uses are unnecessary
and quite a few of them are buggy.

Remove unnecessary pending tests from x86/mce. Only compile tested.

v2: Local var work removed from mce_schedule_work() as suggested by
Borislav.

-- Steve