KVM: 'asm' operand has impossible constraints
PATCH 1/1 KVM: 'asm' operand has impossible constraints
Hi;
-rc6 fails with latest gcc 4.2 snapshot as following;
CC [M] drivers/kvm/svm.odrivers/kvm/svm.c:206: warning: 'inject_db' defined but not used drivers/kvm/svm.c: In function 'svm_vcpu_run':drivers/kvm/kvm.h:560: error: 'asm' operand has impossible constraints make[2]: *** [drivers/kvm/svm.o] Error 1
make[1]: *** [drivers/kvm] Error 2
make: *** [drivers] Error 2
And according to this thread http://lkml.org/lkml/2006/11/11/129, solution is converting g to rm, patch follows
drivers/kvm/kvm.h +1 -1
@@ -557,7 +557,7 @@#ifndef load_ldtstatic inline void load_ldt (u16 sel) { - asm ("lldt %0" : :"g" (sel)); + asm ("lldt %0" : :"rm" (sel)); }#endif
Signature · 4 lines
S.Çağlar Onur <[email protected]> http://cekirdek.pardus.org.tr/~caglar/ Linux is like living in a teepee. No Windows, no Gates and an Apache in house!
Quoted 12 lines · S.Çağlar Onur
Hi;
-rc6 fails with latest gcc 4.2 snapshot as following;
CC [M]
drivers/kvm/svm.odrivers/kvm/svm.c:206: warning: 'inject_db' defined but not useddrivers/kvm/svm.c: In function 'svm_vcpu_run':drivers/kvm/kvm.h:560: error: 'asm' operand has impossible constraints make[2]: *** [drivers/kvm/svm.o] Error 1
make[1]: *** [drivers/kvm] Error 2
make: *** [drivers] Error 2
Quoted 4 lines
And according to this thread http://lkml.org/lkml/2006/11/11/129, solution is converting g to rm, patch follows
The patch looks correct, but I don't understand the gcc error message. Are we sure this isn't a gcc 4.2 bug?
"g" appears to be equivalent to "rmi", if "i" is impossible, gcc is free to use "r" or "m", no?
Quoted 17 lines
Signed-off-by S.Çağlar Onur <[email protected]>Index:
linux-2.6/drivers/kvm/kvm.h
===================================================================drivers/kvm/kvm.h +1
-1@@ -557,7 +557,7 @@#ifndef load_ldtstatic inline void load_ldt (u16 sel) { - asm ("lldt %0" : :"g" (sel)); + asm ("lldt %0" : :"rm" (sel)); }#endif
Signature · 12 lines
Do not meddle in the internals of kernels, for they are subtle and quick to panic. ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ kvm-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/kvm-devel
Quoted 2 lines · On Saturday 27 of January 2007 10:05:53 Avi Kivity wrote:
"g" appears to be equivalent to "rmi", if "i" is impossible, gcc is free to use "r" or "m", no?
`r'
A register operand is allowed provided that it is in a general register.
`g'
Any register, memory or immediate integer operand is allowed, except for registers that are not general registers.
so, it looks like g == !r for registers ( not general vs. general regs ).
Quoted 7 lines · Paweł Sikora
Quoted 3 lines · On Saturday 27 of January 2007 10:05:53 Avi Kivity wrote:
"g" appears to be equivalent to "rmi", if "i" is impossible, gcc is free to use "r" or "m", no?
Quoted 9 lines
`r'
A register operand is allowed provided that it is in a general register.
`g'
Any register, memory or immediate integer operand is allowed, except for registers that are not general registers.so, it looks like g == !r for registers ( not general vs. general regs ).
I read it as g == !!r for registers ("except" and "not" constitute a double negative).
Signature · 12 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ kvm-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/kvm-devel
27 Oca 2007 Cts tarihinde, Avi Kivity şunları yazmıştı:
Quoted 5 lines
The patch looks correct, but I don't understand the gcc error message. Are we sure this isn't a gcc 4.2 bug?
"g" appears to be equivalent to "rmi", if "i" is impossible, gcc is free to use "r" or "m", no?
Accorgind to GCC devs. its not a bug
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29808), on comment #5 the problem described like;
"g" means "r"+"i" so the register allocator in the -O0 case is selecting "r" while in the optimize case is selecting "i"
Signature · 4 lines
S.Çağlar Onur <[email protected]> http://cekirdek.pardus.org.tr/~caglar/ Linux is like living in a teepee. No Windows, no Gates and an Apache in house!
Quoted 7 lines · S.Çağlar Onur
27 Oca 2007 Cts tarihinde, Avi Kivity şunları yazmıştı:
Quoted 5 lines
The patch looks correct, but I don't understand the gcc error message. Are we sure this isn't a gcc 4.2 bug?
"g" appears to be equivalent to "rmi", if "i" is impossible, gcc is free to use "r" or "m", no?
Quoted 6 lines
Accorgind to GCC devs. its not a bug
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29808), on comment #5 the problem described like;"g" means "r"+"i" so the register allocator in the -O0 case is selecting "r" while in the optimize case is selecting "i"
Sounds like a bug to me! After all, shouldn't the different sections of code be selecting the *same* bits ?
DRH
Quoted 3 lines · S.Çağlar Onur
"g" means "r"+"i" so the register allocator in the -O0 case is selecting "r" while in the optimize case is selecting "i"
"g" means "rmi", not "ri".
-hpa
Quoted 9 lines · S.Çağlar Onur
27 Oca 2007 Cts tarihinde, Avi Kivity şunları yazmıştı:
Quoted 6 lines
The patch looks correct, but I don't understand the gcc error message. Are we sure this isn't a gcc 4.2 bug?
"g" appears to be equivalent to "rmi", if "i" is impossible, gcc is free to use "r" or "m", no?
Quoted 8 lines
Accorgind to GCC devs. its not a bug
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29808), on comment #5 the problem described like;"g" means "r"+"i" so the register allocator in the -O0 case is selecting "r" while in the optimize case is selecting "i"
That's a different bug. The gcc PR has an assembler error message, as expected, whereas the kvm miscompile has a compiler error, which I don't understand.
Anyhow, your patch is correct (because selecting "i" is indeed erroneous) so I'll apply it, but I'm worried that there's a gcc bug in there that we ought to report.
Signature · 12 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ kvm-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/kvm-devel