Re: [PATCH 1/2] x86/math-emu: Add support for FCMOVcc and F[U]COMI[P] insns

From: Ingo Molnar
Date: Fri Sep 18 2015 - 03:34:08 EST



* Denys Vlasenko <dvlasenk@xxxxxxxxxx> wrote:

> Run-tested by booting with "no387 nofxsr" and running test programs:
>
> # ./test_FCMOV
> [RUN] Testing fcmovCC instructions
> [OK] fcmovCC
> # ./test_FCOMI
> [RUN] Testing f[u]comi[p] instructions
> [OK] f[u]comi[p]
>
> Signed-off-by: Denys Vlasenko <dvlasenk@xxxxxxxxxx>
> CC: Ingo Molnar <mingo@xxxxxxxxxx>
> CC: Borislav Petkov <bp@xxxxxxxxx>
> CC: "H. Peter Anvin" <hpa@xxxxxxxxx>
> CC: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
> CC: Kees Cook <keescook@xxxxxxxxxxxx>
> CC: x86@xxxxxxxxxx
> CC: linux-kernel@xxxxxxxxxxxxxxx
> ---
>
> The patches did not change since last submission.
> The difference, now they are run-tested.
>
> arch/x86/math-emu/fpu_aux.c | 70 ++++++++++++++++++++++
> arch/x86/math-emu/fpu_entry.c | 49 +++++++++------
> arch/x86/math-emu/fpu_proto.h | 12 ++++
> arch/x86/math-emu/reg_compare.c | 128 ++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 241 insertions(+), 18 deletions(-)

I wanted to apply this patch, but noticed the following problem: why are two
instruction families added in a single patch?

Note that regressing math-emu for real is a real concern here: we start
interpreting real instructions. If anything breaks, and the failure isn't right at
the instruction that is buggy (but some time later), it would be nice which new
instruction causes the problem and make it all bisectable ...

So we should be finegrained and only add a single (family) of instructions in a
single patch. Please split this patch into two:

> +extern void fcmovb(void);
> +extern void fcmove(void);
> +extern void fcmovbe(void);
> +extern void fcmovu(void);
> +extern void fcmovnb(void);
> +extern void fcmovne(void);
> +extern void fcmovnbe(void);
> +extern void fcmovnu(void);
> extern void ffree_(void);
> extern void ffreep(void);
> extern void fst_i_(void);
> @@ -108,6 +116,10 @@ extern void fcompp(void);
> extern void fucom_(void);
> extern void fucomp(void);
> extern void fucompp(void);
> +extern void fcomi_(void);
> +extern void fcomip(void);
> +extern void fucomi_(void);
> +extern void fucomip(void);

Thanks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/