[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] linux-next: manual merge of the xen-tip tree with the tip tree

On 08/12/2015 02:26 PM, Andy Lutomirski wrote:
On Wed, Aug 12, 2015 at 11:17 AM, Boris Ostrovsky
<boris.ostrovsky@xxxxxxxxxx> wrote:
On 08/12/2015 01:46 PM, Peter Zijlstra wrote:
On Wed, Aug 12, 2015 at 07:21:05PM +0200, Peter Zijlstra wrote:
On Wed, Aug 12, 2015 at 09:27:38AM -0400, Boris Ostrovsky wrote:

Incidentally, 11276d53 ("locking/static_keys: Add a new static_key
interface") breaks old-ish compilers (gcc version 4.4.4 20100503 (Red
4.4.4-2) (GCC)):

    CC      arch/x86/kernel/nmi.o
In file included from
                   from /home/build/linux-boris/arch/x86/kernel/nmi.c:14:
/home/build/linux-boris/arch/x86/include/asm/jump_label.h: In function
/home/build/linux-boris/arch/x86/include/asm/jump_label.h:21: warning:
operand 0 probably doesnât match constraints
/home/build/linux-boris/arch/x86/include/asm/jump_label.h:21: error:
impossible constraint in âasmâ
make[3]: *** [arch/x86/kernel/nmi.o] Error 1
make[2]: *** [arch/x86/kernel] Error 2
make[1]: *** [arch/x86] Error 2
Ugh bugger.

I bet its that: &((char *)key)[branch] business, an earlier variant
thereof tripped up more recent GCCs too.

So its an __always_inline function, and both argument are always compile
time constants, @key is the address of an object in static storage (a
global) and @branch is a simple 0/1 at the call site.

Now we wish to compute (unsigned long)key + branch at compile/link time
to feed to the assembler as an immediate, which should be possible,
given its all 'constants'.

It just appears GCC is having a hard time with this.

Let me see if I have a sufficiently old GCC around to play with.
Could you feed the below to your compiler? Its a bit cumbersome, but
its the next best I could come up with...

No, it produces the same error. This is Fedora 13, btw, uses gcc 4.4.4.
Is the problem just that it's being misdetected as supporting asm
goto?  What does gcc -E say?

static inline __attribute__((no_instrument_function)) __attribute__((always_inline)) bool arch_static_branch(struct static_key *key, bool branch)
do { asm goto("1:" ".byte " "0x0f,0x1f,0x44,0x00,0" "\n\t" ".pushsection __jump_table, \"aw\" \n\t" " " ".balign 8" " " "\n\t" " " ".quad" " " "1b, %l[l_yes], %c0 \n\t" ".popsection \n\t" : : "i" (&((char *)key)[branch]) : : l_yes); asm (""); } while (0)

return false;
 return true;


Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.