From: Waiman Long <waiman.long@hp.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>,
kvm@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
virtualization@lists.linux-foundation.org,
Andi Kleen <andi@firstfloor.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Michel Lespinasse <walken@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arch@vger.kernel.org, Gleb Natapov <gleb@redhat.com>,
x86@kernel.org, Ingo Molnar <mingo@redhat.com>,
xen-devel@lists.xenproject.org,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Rik van Riel <riel@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Scott J Norton <scott.norton@hp.com>,
Steven Rostedt <rostedt@goodmis.org>,
Chris Wright <chrisw@sous-sol.org>,
Oleg Nesterov <oleg@redhat.com>,
Alok Kataria <akataria@vmware.com>,
Aswin Chandramouleeswaran <aswin@hp.com>,
Chegu
Subject: Re: [PATCH v6 04/11] qspinlock: Optimized code path for 2 contending tasks
Date: Mon, 17 Mar 2014 13:23:55 -0400 [thread overview]
Message-ID: <53272FAB.3070204@hp.com> (raw)
In-Reply-To: <20140313135701.GB25546@laptop.programming.kicks-ass.net>
On 03/13/2014 09:57 AM, Peter Zijlstra wrote:
> On Wed, Mar 12, 2014 at 03:08:24PM -0400, Waiman Long wrote:
>> On 03/12/2014 02:54 PM, Waiman Long wrote:
>>> + /*
>>> + * Set the lock bit& clear the waiting bit simultaneously
>>> + * It is assumed that there is no lock stealing with this
>>> + * quick path active.
>>> + *
>>> + * A direct memory store of _QSPINLOCK_LOCKED into the
>>> + * lock_wait field causes problem with the lockref code, e.g.
>>> + * ACCESS_ONCE(qlock->lock_wait) = _QSPINLOCK_LOCKED;
>>> + *
>>> + * It is not currently clear why this happens. A workaround
>>> + * is to use atomic instruction to store the new value.
>>> + */
>>> + {
>>> + u16 lw = xchg(&qlock->lock_wait, _QSPINLOCK_LOCKED);
>>> + BUG_ON(lw != _QSPINLOCK_WAITING);
>>> + }
>> It was found that when I used a direct memory store instead of an atomic op,
>> the following kernel crash might happen at filesystem dismount time:
>>
>> [ 1529.936714] Call Trace:
>> [ 1529.936714] [<ffffffff811c2d03>] d_walk+0xc3/0x260
>> [ 1529.936714] [<ffffffff811c1770>] ? check_and_collect+0x30/0x30
>> [ 1529.936714] [<ffffffff811c3985>] shrink_dcache_for_umount+0x75/0x120
>> [ 1529.936714] [<ffffffff811adf21>] generic_shutdown_super+0x21/0xf0
>> [ 1529.936714] [<ffffffff811ae207>] kill_block_super+0x27/0x70
>> [ 1529.936714] [<ffffffff811ae4ed>] deactivate_locked_super+0x3d/0x60
>> [ 1529.936714] [<ffffffff811aea96>] deactivate_super+0x46/0x60
>> [ 1529.936714] [<ffffffff811ca277>] mntput_no_expire+0xa7/0x140
>> [ 1529.936714] [<ffffffff811cb6ce>] SyS_umount+0x8e/0x100
>> [ 1529.936714] [<ffffffff815d2c29>] system_call_fastpath+0x16/0x1b
>> It was more readily reproducible in a KVM guest. It was harder to reproduce
>> in a bare metal machine, but kernel crash still happened after several
>> tries.
>>
>> I am not sure what exactly cause this crash, but it will have something to
>> do with the interaction between the lockref and the qspinlock code. I would
>> like more eyes on that to find the root cause of it.
> I cannot reproduce with my series that has the one word write.
>
> What I did was I made my swap partition (who needs that anyway on a
> machine with 16G of memory) into an XFS partition.
>
> Then I copied my linux.git onto it and unmounted.
>
> I'll try a few more times; the above trace seems to suggest it happens
> during dcache cleanup, so I suppose I should read the filesystem some
> and unmount again.
>
> Is there anything specific you did to make it go bang?
I had found the reason for the crash, it has to do with my original
definition of the queue_spin_value_unlocked() function. When I extended
it to cover the first 2 bytes (lock + wait bit), the problem is gone.
-Longman
WARNING: multiple messages have this Message-ID (diff)
From: Waiman Long <waiman.long@hp.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>,
kvm@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
virtualization@lists.linux-foundation.org,
Andi Kleen <andi@firstfloor.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Michel Lespinasse <walken@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arch@vger.kernel.org, Gleb Natapov <gleb@redhat.com>,
x86@kernel.org, Ingo Molnar <mingo@redhat.com>,
xen-devel@lists.xenproject.org,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Rik van Riel <riel@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Scott J Norton <scott.norton@hp.com>,
Steven Rostedt <rostedt@goodmis.org>,
Chris Wright <chrisw@sous-sol.org>,
Oleg Nesterov <oleg@redhat.com>,
Alok Kataria <akataria@vmware.com>,
Aswin Chandramouleeswaran <aswin@hp.com>,
Chegu Vino
Subject: Re: [PATCH v6 04/11] qspinlock: Optimized code path for 2 contending tasks
Date: Mon, 17 Mar 2014 13:23:55 -0400 [thread overview]
Message-ID: <53272FAB.3070204@hp.com> (raw)
In-Reply-To: <20140313135701.GB25546@laptop.programming.kicks-ass.net>
On 03/13/2014 09:57 AM, Peter Zijlstra wrote:
> On Wed, Mar 12, 2014 at 03:08:24PM -0400, Waiman Long wrote:
>> On 03/12/2014 02:54 PM, Waiman Long wrote:
>>> + /*
>>> + * Set the lock bit& clear the waiting bit simultaneously
>>> + * It is assumed that there is no lock stealing with this
>>> + * quick path active.
>>> + *
>>> + * A direct memory store of _QSPINLOCK_LOCKED into the
>>> + * lock_wait field causes problem with the lockref code, e.g.
>>> + * ACCESS_ONCE(qlock->lock_wait) = _QSPINLOCK_LOCKED;
>>> + *
>>> + * It is not currently clear why this happens. A workaround
>>> + * is to use atomic instruction to store the new value.
>>> + */
>>> + {
>>> + u16 lw = xchg(&qlock->lock_wait, _QSPINLOCK_LOCKED);
>>> + BUG_ON(lw != _QSPINLOCK_WAITING);
>>> + }
>> It was found that when I used a direct memory store instead of an atomic op,
>> the following kernel crash might happen at filesystem dismount time:
>>
>> [ 1529.936714] Call Trace:
>> [ 1529.936714] [<ffffffff811c2d03>] d_walk+0xc3/0x260
>> [ 1529.936714] [<ffffffff811c1770>] ? check_and_collect+0x30/0x30
>> [ 1529.936714] [<ffffffff811c3985>] shrink_dcache_for_umount+0x75/0x120
>> [ 1529.936714] [<ffffffff811adf21>] generic_shutdown_super+0x21/0xf0
>> [ 1529.936714] [<ffffffff811ae207>] kill_block_super+0x27/0x70
>> [ 1529.936714] [<ffffffff811ae4ed>] deactivate_locked_super+0x3d/0x60
>> [ 1529.936714] [<ffffffff811aea96>] deactivate_super+0x46/0x60
>> [ 1529.936714] [<ffffffff811ca277>] mntput_no_expire+0xa7/0x140
>> [ 1529.936714] [<ffffffff811cb6ce>] SyS_umount+0x8e/0x100
>> [ 1529.936714] [<ffffffff815d2c29>] system_call_fastpath+0x16/0x1b
>> It was more readily reproducible in a KVM guest. It was harder to reproduce
>> in a bare metal machine, but kernel crash still happened after several
>> tries.
>>
>> I am not sure what exactly cause this crash, but it will have something to
>> do with the interaction between the lockref and the qspinlock code. I would
>> like more eyes on that to find the root cause of it.
> I cannot reproduce with my series that has the one word write.
>
> What I did was I made my swap partition (who needs that anyway on a
> machine with 16G of memory) into an XFS partition.
>
> Then I copied my linux.git onto it and unmounted.
>
> I'll try a few more times; the above trace seems to suggest it happens
> during dcache cleanup, so I suppose I should read the filesystem some
> and unmount again.
>
> Is there anything specific you did to make it go bang?
I had found the reason for the crash, it has to do with my original
definition of the queue_spin_value_unlocked() function. When I extended
it to cover the first 2 bytes (lock + wait bit), the problem is gone.
-Longman
next prev parent reply other threads:[~2014-03-17 17:23 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-12 18:54 [PATCH v6 00/11] qspinlock: a 4-byte queue spinlock with PV support Waiman Long
2014-03-12 18:54 ` [PATCH v6 01/11] qspinlock: A generic 4-byte queue spinlock implementation Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 02/11] qspinlock, x86: Enable x86-64 to use queue spinlock Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 03/11] qspinlock: More optimized code for smaller NR_CPUS Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 04/11] qspinlock: Optimized code path for 2 contending tasks Waiman Long
2014-03-12 19:08 ` Waiman Long
2014-03-12 19:08 ` Waiman Long
2014-03-13 13:57 ` Peter Zijlstra
2014-03-13 13:57 ` Peter Zijlstra
2014-03-13 13:57 ` Peter Zijlstra
2014-03-17 17:23 ` Waiman Long
2014-03-17 17:23 ` Waiman Long [this message]
2014-03-17 17:23 ` Waiman Long
2014-03-12 19:08 ` Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 05/11] pvqspinlock, x86: Allow unfair spinlock in a PV guest Waiman Long
2014-03-13 10:54 ` David Vrabel
2014-03-13 10:54 ` David Vrabel
2014-03-13 10:54 ` David Vrabel
2014-03-13 13:16 ` Paolo Bonzini
2014-03-13 13:16 ` Paolo Bonzini
2014-03-13 13:16 ` Paolo Bonzini
2014-03-13 13:16 ` Paolo Bonzini
2014-03-17 19:05 ` Konrad Rzeszutek Wilk
2014-03-17 19:05 ` Konrad Rzeszutek Wilk
2014-03-17 19:05 ` Konrad Rzeszutek Wilk
2014-03-17 19:05 ` Konrad Rzeszutek Wilk
2014-03-18 8:14 ` Paolo Bonzini
2014-03-18 8:14 ` Paolo Bonzini
2014-03-19 3:15 ` Waiman Long
2014-03-19 3:15 ` Waiman Long
2014-03-19 3:15 ` Waiman Long
2014-03-19 3:15 ` Waiman Long
2014-03-19 10:07 ` Paolo Bonzini
2014-03-19 10:07 ` Paolo Bonzini
2014-03-19 16:58 ` Waiman Long
2014-03-19 16:58 ` Waiman Long
2014-03-19 16:58 ` Waiman Long
2014-03-19 17:08 ` Paolo Bonzini
2014-03-19 17:08 ` Paolo Bonzini
2014-03-19 17:08 ` Paolo Bonzini
2014-03-19 10:07 ` Paolo Bonzini
2014-03-19 3:15 ` Waiman Long
2014-03-18 8:14 ` Paolo Bonzini
2014-03-13 19:03 ` Waiman Long
2014-03-13 19:03 ` Waiman Long
2014-03-13 19:03 ` Waiman Long
2014-03-13 15:15 ` Peter Zijlstra
2014-03-13 15:15 ` Peter Zijlstra
2014-03-13 20:05 ` Waiman Long
2014-03-13 20:05 ` Waiman Long
2014-03-13 20:05 ` Waiman Long
2014-03-14 8:30 ` Peter Zijlstra
2014-03-14 8:30 ` Peter Zijlstra
2014-03-14 8:30 ` Peter Zijlstra
2014-03-14 8:48 ` Paolo Bonzini
2014-03-14 8:48 ` Paolo Bonzini
2014-03-14 8:48 ` Paolo Bonzini
2014-03-17 17:44 ` Waiman Long
2014-03-17 17:44 ` Waiman Long
2014-03-17 18:54 ` Peter Zijlstra
2014-03-17 18:54 ` Peter Zijlstra
2014-03-17 18:54 ` Peter Zijlstra
2014-03-18 8:16 ` Paolo Bonzini
2014-03-18 8:16 ` Paolo Bonzini
2014-03-18 8:16 ` Paolo Bonzini
2014-03-19 3:08 ` Waiman Long
2014-03-19 3:08 ` Waiman Long
2014-03-19 3:08 ` Waiman Long
2014-03-17 19:10 ` Konrad Rzeszutek Wilk
2014-03-17 19:10 ` Konrad Rzeszutek Wilk
2014-03-17 19:10 ` Konrad Rzeszutek Wilk
2014-03-19 3:11 ` Waiman Long
2014-03-19 3:11 ` Waiman Long
2014-03-19 3:11 ` Waiman Long
2014-03-19 15:25 ` Konrad Rzeszutek Wilk
2014-03-19 15:25 ` Konrad Rzeszutek Wilk
2014-03-19 15:25 ` Konrad Rzeszutek Wilk
2014-03-17 17:44 ` Waiman Long
2014-03-13 15:15 ` Peter Zijlstra
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 06/11] pvqspinlock, x86: Allow unfair queue spinlock in a KVM guest Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 07/11] pvqspinlock, x86: Allow unfair queue spinlock in a XEN guest Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH v6 08/11] pvqspinlock, x86: Rename paravirt_ticketlocks_enabled Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH RFC v6 09/11] pvqspinlock, x86: Add qspinlock para-virtualization support Waiman Long
2014-03-13 11:21 ` David Vrabel
2014-03-13 11:21 ` David Vrabel
2014-03-13 11:21 ` David Vrabel
2014-03-13 13:57 ` Paolo Bonzini
2014-03-13 13:57 ` Paolo Bonzini
2014-03-13 13:57 ` Paolo Bonzini
2014-03-13 13:57 ` Paolo Bonzini
2014-03-13 19:49 ` Waiman Long
2014-03-13 19:49 ` Waiman Long
2014-03-13 19:49 ` Waiman Long
2014-03-13 19:49 ` Waiman Long
2014-03-13 19:49 ` Waiman Long
2014-03-14 9:44 ` Paolo Bonzini
2014-03-14 9:44 ` Paolo Bonzini
2014-03-14 9:44 ` Paolo Bonzini
2014-03-13 13:57 ` Paolo Bonzini
2014-03-13 19:05 ` Waiman Long
2014-03-13 19:05 ` Waiman Long
2014-03-13 19:05 ` Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-12 18:54 ` [PATCH RFC v6 10/11] pvqspinlock, x86: Enable qspinlock PV support for KVM Waiman Long
2014-03-12 18:54 ` Waiman Long
2014-03-13 13:59 ` Paolo Bonzini
2014-03-13 13:59 ` Paolo Bonzini
2014-03-13 19:13 ` Waiman Long
2014-03-13 19:13 ` Waiman Long
2014-03-14 8:42 ` Paolo Bonzini
2014-03-14 8:42 ` Paolo Bonzini
2014-03-14 8:42 ` Paolo Bonzini
2014-03-17 17:47 ` Waiman Long
2014-03-17 17:47 ` Waiman Long
2014-03-17 17:47 ` Waiman Long
2014-03-18 8:18 ` Paolo Bonzini
2014-03-18 8:18 ` Paolo Bonzini
2014-03-18 8:18 ` Paolo Bonzini
2014-03-13 13:59 ` Paolo Bonzini
2014-03-13 15:25 ` Peter Zijlstra
2014-03-13 15:25 ` Peter Zijlstra
2014-03-13 15:25 ` Peter Zijlstra
2014-03-13 20:09 ` Waiman Long
2014-03-13 20:09 ` Waiman Long
2014-03-13 20:09 ` Waiman Long
2014-03-12 18:54 ` [PATCH RFC v6 11/11] pvqspinlock, x86: Enable qspinlock PV support for XEN Waiman Long
2014-03-12 18:54 ` Waiman Long
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=53272FAB.3070204@hp.com \
--to=waiman.long@hp.com \
--cc=akataria@vmware.com \
--cc=andi@firstfloor.org \
--cc=arnd@arndb.de \
--cc=aswin@hp.com \
--cc=boris.ostrovsky@oracle.com \
--cc=chrisw@sous-sol.org \
--cc=gleb@redhat.com \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=konrad.wilk@oracle.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=raghavendra.kt@linux.vnet.ibm.com \
--cc=riel@redhat.com \
--cc=rostedt@goodmis.org \
--cc=scott.norton@hp.com \
--cc=tglx@linutronix.de \
--cc=virtualization@lists.linux-foundation.org \
--cc=walken@google.com \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/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.