Skip to contentSkip to conversation

2.6.4 remove intermittent warnings from spinlock code

PATCH In review Keith Owens 3 participants 3 messages Mar 15, 2004 – Mar 16, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 2.6.4 remove intermittent warnings from spinlock code

The spinlock code writes to p14. If gcc reuses p14 in the bundles immediately after the spinlock then we get warning messages. Append a stop bit to the spinlock code to remove the warnings. gcc 3.2.3, binutils 2.14.90.0.4.

{standard input}: Assembler messages:
{standard input}:2217: Warning: Use of 'tbit.z' violates WAW dependency 'PR%, % in 1 - 15' (impliedf), specific resource number is 14 {standard input}:2217: Warning: Only the first path encountering the conflict is reported
{standard input}:2211: Warning: This is the location of the conflicting usage

Index: linux-2.6.4/include/asm-ia64/spinlock.h

include/asm-ia64/spinlock.h +4 -0
@@ -52,6 +52,7 @@
 		      "cmp4.ne p14, p0 = r30, r0\n\t"
 		      "mov b6 = r29;;\n"
 		      "(p14) br.cond.spnt.many b6"
+		      ";;"
 		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
 # else
 	asm volatile ("{\n\t"
@@ -62,6 +63,7 @@
 		      "cmpxchg4.acq r30 = [%1], r30, ar.ccv;;\n\t"
 		      "cmp4.ne p14, p0 = r30, r0\n"
 		      "(p14) brl.cond.spnt.many ia64_spinlock_contention_pre3_4"
+		      ";;"
 		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
 # endif /* CONFIG_MCKINLEY */
 #else
@@ -75,6 +77,7 @@
 		      "cmp4.ne p14, p0 = r30, r0\n\t"
 		      "mov b6 = r29;;\n"
 		      "(p14) br.call.spnt.many b6 = b6"
+		      ";;"
 		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
 # else
 	asm volatile ("mov r30 = 1\n\t"
@@ -82,6 +85,7 @@
 		      "cmpxchg4.acq r30 = [%0], r30, ar.ccv;;\n\t"
 		      "cmp4.ne p14, p0 = r30, r0\n\t"
 		      "(p14) brl.call.spnt.many b6=ia64_spinlock_contention"
+		      ";;"
 		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
 # endif /* CONFIG_MCKINLEY */
 #endif
#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Keith Owens

Keith> The spinlock code writes to p14. If gcc reuses p14 in the Keith> bundles immediately after the spinlock then we get warning Keith> messages. Append a stop bit to the spinlock code to remove Keith> the warnings. gcc 3.2.3, binutils 2.14.90.0.4.

Keith> {standard input}: Assembler messages: {standard input}:2217:
Keith> Warning: Use of 'tbit.z' violates WAW dependency 'PR%, % in 1 Keith> - 15' (impliedf), specific resource number is 14 {standard Keith> input}:2217: Warning: Only the first path encountering the Keith> conflict is reported {standard input}:2211: Warning: This is Keith> the location of the conflicting usage

Hmmh, in my opinion GCC should put a stop-bit when using a register after an "asm" that marks that register as "clobbered". For now, I put an explicit stop-bit after the McKinley spinlock versions (the Merced ones should be OK because they already have a stop-bit after writing p14). We should still sort out why GCC doesn't get this right.

	--david
#2 lore raw
In reply to Keith Owens
Quoted 6 lines · David Mosberger

Hmmh, in my opinion GCC should put a stop-bit when using a register after an "asm" that marks that register as "clobbered". For now, I put an explicit stop-bit after the McKinley spinlock versions (the Merced ones should be OK because they already have a stop-bit after writing p14). We should still sort out why GCC doesn't get this right.

I'm not a compiler person, but ...

Seems to me that doing exactly what you're asking for is hard. Editing the inline asm to use a stop-bit if the compiler needs to reuse that register would be a really awful layering violation. But it shouldn't be too hard for p14 to be considered unavailable until the next stop bit has been issued.

Al, want to raise this on the gcc mailing list?

Signature · 6 lines
"Next the statesmen will invent cheap lies, putting the blame upon 
the nation that is attacked, and every man will be glad of those
conscience-soothing falsities, and will diligently study them, and refuse
to examine any refutations of them; and thus he will by and by convince 
himself that the war is just, and will thank God for the better sleep 
he enjoys after this process of grotesque self-deception." -- Mark Twain