2004-09-13 12:22:52

by Zwane Mwaikambo

[permalink] [raw]
Subject: [PATCH] Allow multiple inputs in alternative_input

Hi Andi,
I had to use the following patch to allow multiple arguments to be
passed down to the asm stub for alternative_input whilst writing
alternatives for mwait code, it seems like a simple enough fix.

Signed-off-by: Zwane Mwaikambo <[email protected]>

Index: linux-2.6.9-rc1-bk18-stage/include/asm-i386/system.h
===================================================================
RCS file: /home/cvsroot/linux-2.6.9-rc1-bk18/include/asm-i386/system.h,v
retrieving revision 1.1.1.1
diff -u -p -B -r1.1.1.1 system.h
--- linux-2.6.9-rc1-bk18-stage/include/asm-i386/system.h 11 Sep 2004 14:17:54 -0000 1.1.1.1
+++ linux-2.6.9-rc1-bk18-stage/include/asm-i386/system.h 12 Sep 2004 04:18:35 -0000
@@ -321,7 +321,7 @@ struct alt_instr {
* If you use variable sized constraints like "m" or "g" in the
* replacement maake sure to pad to the worst case length.
*/
-#define alternative_input(oldinstr, newinstr, feature, input) \
+#define alternative_input(oldinstr, newinstr, feature, input...) \
asm volatile ("661:\n\t" oldinstr "\n662:\n" \
".section .altinstructions,\"a\"\n" \
" .align 4\n" \
@@ -333,7 +333,7 @@ struct alt_instr {
".previous\n" \
".section .altinstr_replacement,\"ax\"\n" \
"663:\n\t" newinstr "\n664:\n" /* replacement */ \
- ".previous" :: "i" (feature), input)
+ ".previous" :: "i" (feature), ##input)

/*
* Force strict CPU ordering.
Index: linux-2.6.9-rc1-bk18-stage/include/asm-x86_64/system.h
===================================================================
RCS file: /home/cvsroot/linux-2.6.9-rc1-bk18/include/asm-x86_64/system.h,v
retrieving revision 1.1.1.1
diff -u -p -B -r1.1.1.1 system.h
--- linux-2.6.9-rc1-bk18-stage/include/asm-x86_64/system.h 11 Sep 2004 14:17:56 -0000 1.1.1.1
+++ linux-2.6.9-rc1-bk18-stage/include/asm-x86_64/system.h 13 Sep 2004 12:22:39 -0000
@@ -123,7 +123,7 @@ struct alt_instr {
* If you use variable sized constraints like "m" or "g" in the
* replacement maake sure to pad to the worst case length.
*/
-#define alternative_input(oldinstr, newinstr, feature, input) \
+#define alternative_input(oldinstr, newinstr, feature, input...) \
asm volatile ("661:\n\t" oldinstr "\n662:\n" \
".section .altinstructions,\"a\"\n" \
" .align 8\n" \
@@ -135,7 +135,7 @@ struct alt_instr {
".previous\n" \
".section .altinstr_replacement,\"ax\"\n" \
"663:\n\t" newinstr "\n664:\n" /* replacement */ \
- ".previous" :: "i" (feature), input)
+ ".previous" :: "i" (feature), ##input)

/*
* Clear and set 'TS' bit respectively


2004-09-13 12:24:17

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Allow multiple inputs in alternative_input

On Mon, Sep 13, 2004 at 08:26:55AM -0400, Zwane Mwaikambo wrote:
> Hi Andi,
> I had to use the following patch to allow multiple arguments to be
> passed down to the asm stub for alternative_input whilst writing
> alternatives for mwait code, it seems like a simple enough fix.

Looks good.

-Andi