From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org
Subject: Re: [PATCH -rt] rt-slab: fix cpu inconsistency case
Date: Thu, 20 Mar 2008 13:10:52 -0700 [thread overview]
Message-ID: <47E2C4CC.5050401@ct.jp.nec.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0803201519160.21990@gandalf.stny.rr.com>
Steven Rostedt wrote:
> Hi Hiroshi,
Hi Steven,
>
> Thanks for looking into it. I'll take a deeper look at it later, but
> first I have a few nitpicks with the patch.
thanks for comments.
>
> On Thu, 20 Mar 2008, Hiroshi Shimamoto wrote:
>> Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
>> ---
>> mm/slab.c | 18 +++++++++---------
>> 1 files changed, 9 insertions(+), 9 deletions(-)
>>
>> diff --git a/mm/slab.c b/mm/slab.c
>> index 4bf6ca8..7beb378 100644
>> --- a/mm/slab.c
>> +++ b/mm/slab.c
>> @@ -138,8 +138,8 @@
>> *
>> * (On PREEMPT_RT, these are NOPs, but we have to drop/get the irq locks.)
>> */
>> -# define slab_irq_disable_nort() local_irq_disable()
>> -# define slab_irq_enable_nort() local_irq_enable()
>> +# define slab_irq_disable_nort(cpu) slab_irq_disable(cpu)
>> +# define slab_irq_enable_nort(cpu) slab_irq_enable(cpu)
>
> This is the !PREEMPT_RT version. It should stay as is (with the
> exception of ignoring the "cpu" variable. [ (void)cpu; ? ]
>
> #define slab_irq_disable_nort(cpu) \
> do { \
> (void)cpu; \
> local_irq_disable(); \
> } while(0)
I think "cpu" variable should be changed if current cpu is changed.
mm/slab.c:cache_alloc_refill()
if (unlikely(!ac->avail)) {
int x;
x = cache_grow(cachep, flags | GFP_THISNODE, cpu_to_node(*this_cpu), NULL, this_cpu);
/* cache_grow can reenable interrupts, then ac could change. */
ac = cpu_cache_get(cachep, *this_cpu);
The comment says, "ac could change", but it never if *this_cpu is same.
In cache_alloc_refill(), cpu_cache_get() should called with the valid cpu id
after cache_grow(). Because on !PREEMPT_RT, the array_cache is protected by
disabling irqs, so array_cache of other cpu shouldn't be accessed.
>
>> # define slab_irq_disable_rt(flags) do { (void)(flags); } while (0)
>> # define slab_irq_enable_rt(flags) do { (void)(flags); } while (0)
>> # define slab_spin_lock_irq(lock, cpu) \
>> @@ -160,8 +160,8 @@ DEFINE_PER_CPU_LOCKED(int, slab_irq_locks) = { 0, };
>> do { slab_irq_enable(cpu); (void) (flags); } while (0)
>> # define slab_irq_disable_rt(cpu) slab_irq_disable(cpu)
>> # define slab_irq_enable_rt(cpu) slab_irq_enable(cpu)
>> -# define slab_irq_disable_nort() do { } while (0)
>> -# define slab_irq_enable_nort() do { } while (0)
>> +# define slab_irq_disable_nort(cpu) do { } while (0)
>> +# define slab_irq_enable_nort(cpu) do { } while (0)
>
> And these are the PREEMPT_RT version. So basically, this patch is a nop
> for PREEMPT_RT. I doubt it will solve your bug ;-)
yes, it's nop. I'm sorry, I didn't show .config.
My kernel config is !PREEMPT_RT, it's same as the deadlock report.
I guess it's a problem only !PREEMPT_RT.
thanks,
Hiroshi Shimamoto
next prev parent reply other threads:[~2008-03-20 20:10 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-20 18:00 [PATCH -rt] rt-slab: fix cpu inconsistency case Hiroshi Shimamoto
2008-03-20 19:32 ` Steven Rostedt
2008-03-20 20:10 ` Hiroshi Shimamoto [this message]
2008-03-21 20:37 ` Steven Rostedt
2008-03-21 20:47 ` Hiroshi Shimamoto
2008-03-24 20:35 ` Steven Rostedt
2008-03-24 20:40 ` Steven Rostedt
2008-03-24 21:11 ` Hiroshi Shimamoto
2008-03-24 20:54 ` Hiroshi Shimamoto
2008-03-21 18:11 ` Daniel Walker
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=47E2C4CC.5050401@ct.jp.nec.com \
--to=h-shimamoto@ct.jp.nec.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.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: 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.