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: Fri, 21 Mar 2008 13:47:23 -0700 [thread overview]
Message-ID: <47E41EDB.7030908@ct.jp.nec.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0803211635160.3220@gandalf.stny.rr.com>
Steven Rostedt wrote:
>
> On Thu, 20 Mar 2008, Hiroshi Shimamoto wrote:
>
>> 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.
>
> Ah, sorry I missed the !PREEMPT_RT part.
no problem. I also missed to say clearly this issue is on !PREEMPT_RT :-)
>
>>>> # 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.
>
> Hmm, I'll have to look deeper into this on Monday (I'm off today -
> Friday).
thanks for taking time.
>
> Is this a bug in mainline? The !PREEMPT_RT case should be as close to
> mainline as possible, with no actual changes in object code. If this is
> not the case, then we need to fix that.
No, this issue is in -rt only.
thanks,
Hiroshi Shimamoto
next prev parent reply other threads:[~2008-03-21 20:47 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
2008-03-21 20:37 ` Steven Rostedt
2008-03-21 20:47 ` Hiroshi Shimamoto [this message]
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=47E41EDB.7030908@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.