All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Ebbert <cebbert@redhat.com>
To: Jan Beulich <jbeulich@novell.com>
Cc: mingo@elte.hu, tglx@linutronix.de, hpa@zytor.com,
	linux-kernel@vger.kernel.org
Subject: Re: [RFC] x86: bitops asm constraint fixes
Date: Fri, 14 Mar 2008 17:07:21 -0400	[thread overview]
Message-ID: <47DAE909.20006@redhat.com> (raw)
In-Reply-To: <47D8FD33.76E4.0078.0@novell.com>

On 03/13/2008 05:08 AM, Jan Beulich wrote:
> This (simplified) piece of code didn't behave as expected due to
> incorrect constraints in some of the bitops functions, when
> X86_FEATURE_xxx is referring to other than the first long:
> 
> int test(struct cpuinfo_x86 *c) {
> 	if (cpu_has(c, X86_FEATURE_xxx))
> 		clear_cpu_cap(c, X86_FEATURE_xxx);
> 	return cpu_has(c, X86_FEATURE_xxx);
> }
> 

This is a long-standing bug and your patch appears to fix it.

> --- linux-2.6.25-rc5/include/asm-x86/bitops.h	2008-03-10 13:24:33.000000000 +0100
> +++ 2.6.25-rc5-x86-clear-bit/include/asm-x86/bitops.h	2008-03-13 08:45:40.000000000 +0100
> @@ -24,9 +24,12 @@
>  /* Technically wrong, but this avoids compilation errors on some gcc
>     versions. */
>  #define ADDR "=m" (*(volatile long *) addr)
> +#define BIT_ADDR "=m" (((volatile int *) addr)[nr >> 5])
>  #else
>  #define ADDR "+m" (*(volatile long *) addr)
> +#define BIT_ADDR "+m" (((volatile int *) addr)[nr >> 5])
>  #endif
> +#define BASE_ADDR "m" (*(volatile int *) addr)

Can't you just do everything with unsigned longs, like this?

In include/asm-x86/types.h:

 ifdef CONFIG_X86_32
 # define BITS_PER_LONG 32
+# define BITMAP_ORDER 5
 #else
 # define BITS_PER_LONG 64
+# define BITMAP_ORDER 6
 #endif

Then:

>  #define ADDR "=m" (*(volatile long *) addr)
> +#define BIT_ADDR "=m" (((volatile long *) addr)[nr >> BITMAP_ORDER])
>  #else
>  #define ADDR "+m" (*(volatile long *) addr)
> +#define BIT_ADDR "+m" (((volatile long *) addr)[nr >> BITMAP_ORDER])
>  #endif

No need for BASE_ADDR that way (or ADDR could be renamed to that.)

  parent reply	other threads:[~2008-03-14 21:07 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-13  9:08 [RFC] x86: bitops asm constraint fixes Jan Beulich
2008-03-14  7:51 ` H. Peter Anvin
2008-03-14  8:09   ` Jan Beulich
2008-03-14 18:56 ` Jeremy Fitzhardinge
2008-03-17  9:08   ` Jan Beulich
2008-03-14 21:07 ` Chuck Ebbert [this message]
2008-03-17  9:16   ` Jan Beulich
2008-03-19 13:19     ` H. Peter Anvin
2008-03-21 13:54 ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2008-03-27  8:12 Jan Beulich
2008-03-27  8:41 ` Ingo Molnar
2008-04-14 12:53   ` Jan Beulich
2008-03-28 19:55 Jan Beulich
2008-04-14 13:31 Jan Beulich
2008-04-14 16:21 ` Jeremy Fitzhardinge
2008-04-15  7:03   ` Jan Beulich

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=47DAE909.20006@redhat.com \
    --to=cebbert@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jbeulich@novell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --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.