linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Waiman Long <longman@redhat.com>
To: Will Deacon <will.deacon@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org, x86@kernel.org,
	Arnd Bergmann <arnd@arndb.de>, Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Davidlohr Bueso <dave@stgolabs.net>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Tim Chen <tim.c.chen@linux.intel.com>
Subject: Re: [PATCH-tip v2 02/10] locking/rwsem: Move owner setting code from rwsem.c to rwsem.h
Date: Thu, 21 Feb 2019 22:37:35 -0500	[thread overview]
Message-ID: <5f58af2f-b333-d3c3-a1e6-099dddd91f89@redhat.com> (raw)
In-Reply-To: <20190221141525.GF12696@fuggles.cambridge.arm.com>

On 02/21/2019 09:15 AM, Will Deacon wrote:
> Hi Waiman,
>
> On Fri, Feb 15, 2019 at 03:50:02PM -0500, Waiman Long wrote:
>> Moves all the owner setting code closer to the rwsem-xadd fast paths
>> directly within rwsem.h file.
>>
>> For __down_read() and __down_read_killable(), it is assumed that
>> rwsem will be marked as reader-owned when the functions return. That
>> is currently true except in the transient case that the waiter queue
>> just becomes empty. So a rwsem_set_reader_owned() call is added for
>> this case.
> Sorry, but I'm having a really hard time understanding the paragraph
> above. You make it sound like you're fixing a bug here, but that doesn't
> appear to be the case. Please can you elaborate?

Sorry for the confusion. I am referring to the code

if (list_empty(&sem->wait_list)) {
                /*
                 * In case the wait queue is empty and the lock isn't owned
                 * by a writer, this reader can exit the slowpath and return
                 * immediately as its RWSEM_ACTIVE_READ_BIAS has already
                 * been set in the count.
                 */
                if (atomic_long_read(&sem->count) >= 0) {
                        raw_spin_unlock_irq(&sem->wait_lock);
                        return sem;
                }
                adjustment += RWSEM_WAITING_BIAS;
        }

Here, a reader will return without going through the wakeup path. It is
here that I need to insert an explicit owner setting call.

>> The __rwsem_set_reader_owned() call in __rwsem_mark_wake()
>> is now necessary.
>>
>> Signed-off-by: Waiman Long <longman@redhat.com>
>> ---
>>  kernel/locking/rwsem-xadd.c |  6 +++---
>>  kernel/locking/rwsem.c      | 19 ++-----------------
>>  kernel/locking/rwsem.h      | 17 +++++++++++++++--
>>  3 files changed, 20 insertions(+), 22 deletions(-)
> I personally find the existing code easier to read, but I don't know if
> that's just because I'm used to it...

The check reason for this patch is because I want to add a RWSEM_DEBUG
check when a reader returns from the slowpath to make sure that the
wakeup path is being call and because of some kind race condition. This
check may be able to spot the wake_q race condition that was fixed
earlier. I will update the commit log to make my intention clearer.

Cheers,
Longman



  reply	other threads:[~2019-02-22  3:37 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-15 20:50 [PATCH-tip v2 00/10] locking/rwsem: Rwsem rearchitecture part 1 Waiman Long
2019-02-15 20:50 ` [PATCH-tip v2 01/10] locking/rwsem: Relocate rwsem_down_read_failed() Waiman Long
2019-02-21 14:14   ` Will Deacon
2019-02-15 20:50 ` [PATCH-tip v2 02/10] locking/rwsem: Move owner setting code from rwsem.c to rwsem.h Waiman Long
2019-02-21 14:15   ` Will Deacon
2019-02-22  3:37     ` Waiman Long [this message]
2019-02-15 20:50 ` [PATCH-tip v2 03/10] locking/rwsem: Move rwsem internal function declarations to rwsem-xadd.h Waiman Long
2019-02-21 14:15   ` Will Deacon
2019-02-15 20:50 ` [PATCH-tip v2 04/10] locking/rwsem: Micro-optimize rwsem_try_read_lock_unqueued() Waiman Long
2019-02-21 14:15   ` Will Deacon
2019-02-15 20:50 ` [PATCH-tip v2 05/10] locking/rwsem: Add debug check for __down_read*() Waiman Long
2019-02-15 20:50 ` [PATCH-tip v2 06/10] locking/rwsem: Enhance DEBUG_RWSEMS_WARN_ON() macro Waiman Long
2019-02-15 20:50 ` [PATCH-tip v2 07/10] locking/qspinlock_stat: Introduce a generic lockevent counting APIs Waiman Long
2019-02-15 20:50 ` [PATCH-tip v2 08/10] locking/lock_events: Make lock_events available for all archs & other locks Waiman Long
2019-02-15 20:50 ` [PATCH-tip v2 09/10] locking/lock_events: Don't show pvqspinlock events on bare metal Waiman Long
2019-02-15 20:50 ` [PATCH-tip v2 10/10] locking/rwsem: Enable lock event counting Waiman Long
2019-02-26 18:20 ` [PATCH-tip v2 00/10] locking/rwsem: Rwsem rearchitecture part 1 Davidlohr Bueso

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=5f58af2f-b333-d3c3-a1e6-099dddd91f89@redhat.com \
    --to=longman@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=bp@alien8.de \
    --cc=dave@stgolabs.net \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    --cc=torvalds@linux-foundation.org \
    --cc=will.deacon@arm.com \
    --cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).