public inbox for [email protected]
 help / color / mirror / Atom feed
* [PATCH v1] x86/delay: Fix the wrong asm constraint in `delay_loop()`
@ 2022-01-10 21:21 Ammar Faizi
  0 siblings, 0 replies; only message in thread
From: Ammar Faizi @ 2022-01-10 21:21 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: x86ml, Joerg Roedel, GNU/Weeb Mailing List, Josh Poimboeuf,
	Ammar Faizi, Peter Zijlstra, Dave Hansen, lkml, Ingo Molnar,
	Masami Hiramatsu, Andy Lutomirski, H. Peter Anvin,
	Kirill A. Shutemov, Ingo Molnar, Thomas Gleixner

The asm constraint does not reflect that the asm statement can modify
the value of @loops. But the asm statement in delay_loop() does change
the @loops.

If by any chance the compiler inlines this function, it may clobber
random stuff (e.g. local variable, important temporary value in reg,
etc.).

Fortunately, delay_loop() is only called indirectly (so it can't
inline), and then the register it clobbers is %rax (which is by the
nature of the calling convention, it's a caller saved register), so it
didn't yield any bug.

^ That shouldn't be an excuse for using the wrong constraint anyway.

This changes "a" (as an input) to "+a" (as an input and output).

Fixes: e01b70ef3eb3080fecc35e15f68cd274c0a48163 ("x86: fix bug in arch/i386/lib/delay.c file, delay_loop function")
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Masami Hiramatsu <[email protected]>
Cc: Josh Poimboeuf <[email protected]>
Cc: "Kirill A. Shutemov" <[email protected]>
Cc: Joerg Roedel <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: lkml <[email protected]>
Cc: x86ml <[email protected]>
Cc: GNU/Weeb Mailing List <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
 arch/x86/lib/delay.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/lib/delay.c b/arch/x86/lib/delay.c
index 65d15df6212d..0e65d00e2339 100644
--- a/arch/x86/lib/delay.c
+++ b/arch/x86/lib/delay.c
@@ -54,8 +54,8 @@ static void delay_loop(u64 __loops)
 		"	jnz 2b		\n"
 		"3:	dec %0		\n"
 
-		: /* we don't need output */
-		:"a" (loops)
+		: "+a" (loops)
+		:
 	);
 }
 

base-commit: bf4eebf8cfa2cd50e20b7321dfb3effdcdc6e909
-- 
2.32.0

-- 
GWML mailing list
[email protected]
https://gwml.gnuweeb.org/listinfo/gwml

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-10 21:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-10 21:21 [PATCH v1] x86/delay: Fix the wrong asm constraint in `delay_loop()` Ammar Faizi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox