|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: Fix build following c/s 623c720f "x86: use CLFLUSHOPT when available"
On 11/02/16 19:25, Andrew Cooper wrote:
> CentOS 7 gets into trouble when compiling Xen citing:
>
> flushtlb.c: Assembler messages:
> flushtlb.c:149: Error: value of 256 too large for field of 1 bytes at 1
>
> The line number is wrong, and the error message not helpful. It turns out
> that the intermediate generated assembly was
>
> # 139 "arch/x86/flushtlb.c" 1
> 661:
> rex clflush (%r15)
> 662:
> .pushsection .altinstructions,"a"
>
> and it was having trouble combining the explicit REX prefix with the REX.B
> required for the use of %r15.
>
> Follow what Linux does and use a redundant %ds prefix instead, for a final
> generated instruction of `3e 41 0f ae 3f`
>
> While modifying this line, fix the indentation which was out by one space.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> ---
> xen/arch/x86/flushtlb.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/xen/arch/x86/flushtlb.c b/xen/arch/x86/flushtlb.c
> index 90a004f..727434e 100644
> --- a/xen/arch/x86/flushtlb.c
> +++ b/xen/arch/x86/flushtlb.c
> @@ -141,10 +141,10 @@ void flush_area_local(const void *va, unsigned int
> flags)
> {
> alternative(ASM_NOP3, "sfence", X86_FEATURE_CLFLUSHOPT);
> for ( i = 0; i < sz; i += c->x86_clflush_size )
> - alternative_input("rex clflush %0",
> - "data16 clflush %0",
> - X86_FEATURE_CLFLUSHOPT,
> - "m" (((const char *)va)[i]));
> + alternative_input(".byte 0x3e; clflush %0", /* %ds override.
> */
> + "data16 clflush %0", /* clflushopt.
> */
> + X86_FEATURE_CLFLUSHOPT,
> + "m" (((const char *)va)[i]));
> }
> else
> {
It turns out that Clang is far more useful at diagnosing this issue than
GCC.
flushtlb.c:144:18: error: invalid instruction mnemonic 'rex'
alternative_input("rex clflush %0",
^
/local/xen.git/xen/include/asm/alternative.h:98:16: note: expanded from
macro 'alternative_input'
asm volatile (ALTERNATIVE(oldinstr, newinstr, feature) \
^
/local/xen.git/xen/include/asm/alternative.h:60:2: note: expanded from
macro 'ALTERNATIVE'
OLDINSTR(oldinstr) \
^
/local/xen.git/xen/include/asm/alternative.h:28:40: note: expanded from
macro 'OLDINSTR'
#define OLDINSTR(oldinstr) "661:\n\t" oldinstr "\n662:\n"
^
<inline asm>:2:2: note: instantiated into assembly here
rex clflush (%r15,%rdx)
^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |