| [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
 
To: Andy Lutomirski <luto@xxxxxxxxxxxxxx>From: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>Date: Wed, 12 Aug 2015 14:30:37 -0400Cc: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>,	Jeremy Fitzhardinge <jeremy@xxxxxxxx>,	Xen Devel <Xen-devel@xxxxxxxxxxxxxxxxxxx>,	Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>,	Peter Zijlstra <peterz@xxxxxxxxxxxxx>,	"linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>,	"linux-next@xxxxxxxxxxxxxxx" <linux-next@xxxxxxxxxxxxxxx>,	David Vrabel <david.vrabel@xxxxxxxxxx>, Andy Lutomirski <luto@xxxxxxxxxx>,	"H. Peter Anvin" <hpa@xxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>,	Ingo Molnar <mingo@xxxxxxx>Delivery-date: Wed, 12 Aug 2015 18:32:19 +0000List-id: Xen developer discussion <xen-devel.lists.xen.org> 
 
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
Hat
4.4.4-2) (GCC)):
    CC      arch/x86/kernel/nmi.o
In file included from
/home/build/linux-boris/include/linux/jump_label.h:109,
                   from
/home/build/linux-boris/arch/x86/include/asm/spinlock.h:5,
                   from
/home/build/linux-boris/include/linux/spinlock.h:88,
                   from /home/build/linux-boris/arch/x86/kernel/nmi.c:14:
/home/build/linux-boris/arch/x86/include/asm/jump_label.h: In function
ânmi_handleâ:
/home/build/linux-boris/arch/x86/include/asm/jump_label.h:21: warning:
asm
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;
l_yes:
 return true;
}
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
 
 |