public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	the arch/x86 maintainers <x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Nick Piggin <npiggin@kernel.dk>,
	Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Subject: Re: [PATCH 07/12] x86: use cmpxchg_flag() where applicable
Date: Wed, 24 Aug 2011 15:02:47 -0700	[thread overview]
Message-ID: <4E557507.2000302@goop.org> (raw)
In-Reply-To: <CA+55aFwEH16JAynxQzNTff0ikGnON9jq1mJOx1doDASV2a2fpg@mail.gmail.com>

On 08/24/2011 02:56 PM, Linus Torvalds wrote:
> Ok, I see nothing horrible in this series.
>
> The one reaction I have is that the cmpxchg_flag() thing returns an
> 8-bit value, but then a lot of the users end up having to extend it to
> a full "int" purely for calling convention reasons (eg I think
> 'down_write_trylock()' will have 'sete + movzl' - not a new problem,
> but since the whole point was to remove extraneous instructions and we
> no longer have the silly 'testl', it now annoys me more).
>
> So it seems a bit sad. But I guess it doesn't really matter.

It's still annoying because in practice sete sets a result, but most
users are just going to have to testb it to do a conditional anyway -
it's a pity there's no way to tell gcc that an asm has already set the
flags, and it can generate a jcc/setcc based on that.

I experimented with a variant based on "asm goto", so that the
conditional control flow is done by the asm itself, and gcc should be
able to make use of that (via constant folding).  But the resulting code
wasn't very spectacular, with quite a few unnecessary jumps.

    J

  parent reply	other threads:[~2011-08-24 22:02 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-24 17:52 [PATCH 00/18] x86: Ticket lock + cmpxchg cleanup Jeremy Fitzhardinge
2011-08-24 17:52 ` [PATCH 01/18] x86/ticketlock: clean up types and accessors Jeremy Fitzhardinge
2011-08-24 17:52 ` [PATCH 02/18] x86/ticketlock: convert spin loop to C Jeremy Fitzhardinge
2011-08-24 20:02   ` Andi Kleen
2011-08-24 17:52 ` [PATCH 03/18] x86/ticketlock: Use C for __ticket_spin_unlock Jeremy Fitzhardinge
2011-08-24 18:01   ` Linus Torvalds
2011-08-24 17:52 ` [PATCH 04/18] x86/ticketlock: make large and small ticket versions of spin_lock the same Jeremy Fitzhardinge
2011-08-24 17:52 ` [PATCH 05/18] x86/ticketlock: make __ticket_spin_lock common Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 06/18] x86/ticketlock: make __ticket_spin_trylock common Jeremy Fitzhardinge
2011-08-24 20:00   ` Andi Kleen
2011-08-24 21:38     ` Linus Torvalds
2011-08-24 21:43       ` Jeremy Fitzhardinge
2011-08-24 21:43       ` Andi Kleen
2011-08-24 21:48         ` Jeremy Fitzhardinge
2011-08-24 21:53           ` Andi Kleen
2011-08-24 17:53 ` [PATCH 07/18] x86: add xadd helper macro Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 08/18] x86/ticketlock: use xadd helper Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 09/18] x86/cmpxchg: linux/alternative.h has LOCK_PREFIX Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 10/18] x86/cmpxchg: move 32-bit __cmpxchg_wrong_size to match 64 bit Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 11/18] x86/cmpxchg: move 64-bit set64_bit() to match 32-bit Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 12/18] x86/cmpxchg: unify cmpxchg into cmpxchg.h Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 13/18] x86: add cmpxchg_flag() variant Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 14/18] x86/ticketlocks: use cmpxchg_flag for trylock Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 15/18] x86: use cmpxchg_flag() where applicable Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 16/18] x86: report xchg/cmpxchg/xadd usage errors consistently Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 17/18] x86: add local and sync variants of xadd Jeremy Fitzhardinge
2011-08-24 17:53 ` [PATCH 18/18] x86: use xadd helper more widely Jeremy Fitzhardinge
2011-08-24 18:03 ` [PATCH 00/18] x86: Ticket lock + cmpxchg cleanup Peter Zijlstra
2011-08-24 18:24   ` Linus Torvalds
2011-08-24 20:10     ` Jeremy Fitzhardinge
2011-08-24 22:53       ` Linus Torvalds
2011-08-24 22:59         ` Jeremy Fitzhardinge
2011-08-24 23:05           ` H. Peter Anvin
2011-08-24 23:09             ` Linus Torvalds
2011-08-24 23:21               ` Linus Torvalds
2011-08-24 23:30                 ` Jeremy Fitzhardinge
2011-08-24 23:10             ` Jeremy Fitzhardinge
2011-08-24 21:36 ` [PATCH 01/12] x86/cmpxchg: linux/alternative.h has LOCK_PREFIX Jeremy Fitzhardinge
2011-08-24 21:36   ` [PATCH 02/12] x86/cmpxchg: move 32-bit __cmpxchg_wrong_size to match 64 bit Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 03/12] x86/cmpxchg: move 64-bit set64_bit() to match 32-bit Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 04/12] x86/cmpxchg: unify cmpxchg into cmpxchg.h Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 05/12] x86: add xadd helper macro Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 06/12] x86: add cmpxchg_flag() variant Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 07/12] x86: use cmpxchg_flag() where applicable Jeremy Fitzhardinge
2011-08-24 21:56     ` Linus Torvalds
2011-08-24 22:01       ` H. Peter Anvin
2011-08-24 22:03         ` Jeremy Fitzhardinge
2011-08-24 22:05           ` H. Peter Anvin
2011-08-24 22:02       ` Jeremy Fitzhardinge [this message]
2011-08-24 21:37   ` [PATCH 08/12] x86: use xadd helper more widely Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 09/12] x86/ticketlock: clean up types and accessors Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 10/12] x86/ticketlock: convert spin loop to C Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 11/12] x86/ticketlock: convert __ticket_spin_lock to use xadd() Jeremy Fitzhardinge
2011-08-24 21:37   ` [PATCH 12/12] x86/ticketlock: make __ticket_spin_trylock common Jeremy Fitzhardinge
2011-08-24 21:46 ` [PATCH 00/18] x86: Ticket lock + cmpxchg cleanup Jeremy Fitzhardinge

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=4E557507.2000302@goop.org \
    --to=jeremy@goop.org \
    --cc=hpa@zytor.com \
    --cc=jeremy.fitzhardinge@citrix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=npiggin@kernel.dk \
    --cc=peterz@infradead.org \
    --cc=torvalds@linux-foundation.org \
    --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