[v2] MIPS: Provide Kconfig option for default IEEE 754 conformance mode
diff mbox series

Message ID 20200801061147.1412187-1-jiaxun.yang@flygoat.com
State New
Headers show
Series
  • [v2] MIPS: Provide Kconfig option for default IEEE 754 conformance mode
Related show

Commit Message

Jiaxun Yang Aug. 1, 2020, 6:11 a.m. UTC
Requested by downstream distros, a Kconfig option for default
IEEE 754 conformance mode allows them to set their mode to
relaxed by default.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reviewed-by: WANG Xuerui <git@xen0n.name>
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
Reviewed-by: Huacai Chen <chenhc@lemote.com>

--
v2: Reword according to Xuerui's suggestion.
---
 arch/mips/Kconfig            | 22 ++++++++++++++++++++++
 arch/mips/kernel/cpu-probe.c | 12 +++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

Comments

Jiaxun Yang Aug. 5, 2020, 1:59 p.m. UTC | #1
在 2020/8/1 14:11, Jiaxun Yang 写道:
> Requested by downstream distros, a Kconfig option for default
> IEEE 754 conformance mode allows them to set their mode to
> relaxed by default.
>
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> Reviewed-by: WANG Xuerui <git@xen0n.name>
> Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
> Reviewed-by: Huacai Chen <chenhc@lemote.com>
>
> --
> v2: Reword according to Xuerui's suggestion.
> ---
Hi Thomas,

Is it possible to get this patch into 5.9 merge window?
I think it have got enough review tag, and the config option was requested
by a Debian developer. The next Debian release will take 5.9 lts kernel and
they don't want to ship a non-bootable kernel in a major release.

Thanks.

- Jiaxun
Thomas Bogendoerfer Aug. 6, 2020, 8:16 a.m. UTC | #2
On Wed, Aug 05, 2020 at 09:59:15PM +0800, Jiaxun Yang wrote:
> 
> 
> 在 2020/8/1 14:11, Jiaxun Yang 写道:
> >Requested by downstream distros, a Kconfig option for default
> >IEEE 754 conformance mode allows them to set their mode to
> >relaxed by default.
> >
> >Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> >Reviewed-by: WANG Xuerui <git@xen0n.name>
> >Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
> >Reviewed-by: Huacai Chen <chenhc@lemote.com>
> >
> >--
> >v2: Reword according to Xuerui's suggestion.
> >---
> Hi Thomas,
> 
> Is it possible to get this patch into 5.9 merge window?
> I think it have got enough review tag, and the config option was requested
> by a Debian developer. The next Debian release will take 5.9 lts kernel and
> they don't want to ship a non-bootable kernel in a major release.

no I won't include it into 5.9, I need to first go through links pointed
to by Maciej and fully understand what a proper solution could be.

Thomas.
WANG Xuerui Aug. 6, 2020, 10:26 a.m. UTC | #3
Hi Jiaxun,


On 2020/8/5 21:59, Jiaxun Yang wrote:
>
>
> 在 2020/8/1 14:11, Jiaxun Yang 写道:
>> Requested by downstream distros, a Kconfig option for default
>> IEEE 754 conformance mode allows them to set their mode to
>> relaxed by default.
>>
>> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
>> Reviewed-by: WANG Xuerui <git@xen0n.name>
>> Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
>> Reviewed-by: Huacai Chen <chenhc@lemote.com>
>>
>> -- 
>> v2: Reword according to Xuerui's suggestion.
>> ---
> Hi Thomas,
>
> Is it possible to get this patch into 5.9 merge window?
> I think it have got enough review tag, and the config option was
> requested
> by a Debian developer. The next Debian release will take 5.9 lts
> kernel and
> they don't want to ship a non-bootable kernel in a major release.

I have an idea. Can the downstream packagers make use of the builtin
command line config options, to inject the "ieee754=relaxed" or whatever
option necessary? If it is acceptable this patch should not be necessary
in the short term.

>
> Thanks.
>
> - Jiaxun
Huacai Chen Aug. 7, 2020, 2:07 a.m. UTC | #4
Hi, Xuerui,

On Thu, Aug 6, 2020 at 6:54 PM WANG Xuerui <kernel@xen0n.name> wrote:
>
> Hi Jiaxun,
>
>
> On 2020/8/5 21:59, Jiaxun Yang wrote:
> >
> >
> > 在 2020/8/1 14:11, Jiaxun Yang 写道:
> >> Requested by downstream distros, a Kconfig option for default
> >> IEEE 754 conformance mode allows them to set their mode to
> >> relaxed by default.
> >>
> >> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> >> Reviewed-by: WANG Xuerui <git@xen0n.name>
> >> Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
> >> Reviewed-by: Huacai Chen <chenhc@lemote.com>
> >>
> >> --
> >> v2: Reword according to Xuerui's suggestion.
> >> ---
> > Hi Thomas,
> >
> > Is it possible to get this patch into 5.9 merge window?
> > I think it have got enough review tag, and the config option was
> > requested
> > by a Debian developer. The next Debian release will take 5.9 lts
> > kernel and
> > they don't want to ship a non-bootable kernel in a major release.
>
> I have an idea. Can the downstream packagers make use of the builtin
> command line config options, to inject the "ieee754=relaxed" or whatever
> option necessary? If it is acceptable this patch should not be necessary
> in the short term.
Built-in "ieee754=relaxed" is already in upstream for Loongson-3.

Huacai
>
> >
> > Thanks.
> >
> > - Jiaxun
Zhou Yanjie Aug. 7, 2020, 3:59 p.m. UTC | #5
Hello Jiaxun,

Reviewed-by: 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>

在 2020/8/1 下午2:11, Jiaxun Yang 写道:
> Requested by downstream distros, a Kconfig option for default
> IEEE 754 conformance mode allows them to set their mode to
> relaxed by default.
>
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> Reviewed-by: WANG Xuerui <git@xen0n.name>
> Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
> Reviewed-by: Huacai Chen <chenhc@lemote.com>
>
> --
> v2: Reword according to Xuerui's suggestion.
> ---
>   arch/mips/Kconfig            | 22 ++++++++++++++++++++++
>   arch/mips/kernel/cpu-probe.c | 12 +++++++++++-
>   2 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index eaf7519e3033..ac35df2b9133 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -2899,6 +2899,28 @@ config MIPS_NR_CPU_NR_MAP
>   	default 1024 if MIPS_NR_CPU_NR_MAP_1024
>   	default NR_CPUS if !MIPS_NR_CPU_NR_MAP_1024
>   
> +choice
> +	prompt "Default IEEE 754 conformance mode"
> +	default IEEE754_DEFAULT_STRICT
> +	help
> +	  Sets the default IEEE 754 conformance mode, same as overriding the
> +	  default value for the ieee754= kernel parameter. See the kernel
> +	  parameter for details.
> +
> +	config IEEE754_DEFAULT_STRICT
> +		bool "Strict"
> +
> +	config IEEE754_DEFAULT_LEGACY
> +		bool "Legacy"
> +
> +	config IEEE754_DEFAULT_STD2008
> +		bool "2008"
> +
> +	config IEEE754_DEFAULT_RELAXED
> +		bool "Relaxed"
> +
> +endchoice
> +
>   #
>   # Timer Interrupt Frequency Configuration
>   #
> diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
> index c231c1b67889..a5b8fe019afc 100644
> --- a/arch/mips/kernel/cpu-probe.c
> +++ b/arch/mips/kernel/cpu-probe.c
> @@ -157,7 +157,17 @@ static void cpu_set_fpu_2008(struct cpuinfo_mips *c)
>    * IEEE 754 conformance mode to use.  Affects the NaN encoding and the
>    * ABS.fmt/NEG.fmt execution mode.
>    */
> -static enum { STRICT, LEGACY, STD2008, RELAXED } ieee754 = STRICT;
> +enum ieee754_mode { STRICT, LEGACY, STD2008, RELAXED };
> +
> +#if defined(CONFIG_IEEE754_DEFAULT_STRICT)
> +static enum ieee754_mode ieee754 = STRICT;
> +#elif defined(CONFIG_IEEE754_DEFAULT_LEGACY)
> +static enum ieee754_mode ieee754 = LEGACY;
> +#elif defined(CONFIG_IEEE754_DEFAULT_STD2008)
> +static enum ieee754_mode ieee754 = STD2008;
> +#elif defined(CONFIG_IEEE754_DEFAULT_RELAXED)
> +static enum ieee754_mode ieee754 = RELAXED;
> +#endif
>   
>   /*
>    * Set the IEEE 754 NaN encodings and the ABS.fmt/NEG.fmt execution modes

Patch
diff mbox series

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index eaf7519e3033..ac35df2b9133 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2899,6 +2899,28 @@  config MIPS_NR_CPU_NR_MAP
 	default 1024 if MIPS_NR_CPU_NR_MAP_1024
 	default NR_CPUS if !MIPS_NR_CPU_NR_MAP_1024
 
+choice
+	prompt "Default IEEE 754 conformance mode"
+	default IEEE754_DEFAULT_STRICT
+	help
+	  Sets the default IEEE 754 conformance mode, same as overriding the
+	  default value for the ieee754= kernel parameter. See the kernel
+	  parameter for details.
+
+	config IEEE754_DEFAULT_STRICT
+		bool "Strict"
+
+	config IEEE754_DEFAULT_LEGACY
+		bool "Legacy"
+
+	config IEEE754_DEFAULT_STD2008
+		bool "2008"
+
+	config IEEE754_DEFAULT_RELAXED
+		bool "Relaxed"
+
+endchoice
+
 #
 # Timer Interrupt Frequency Configuration
 #
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index c231c1b67889..a5b8fe019afc 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -157,7 +157,17 @@  static void cpu_set_fpu_2008(struct cpuinfo_mips *c)
  * IEEE 754 conformance mode to use.  Affects the NaN encoding and the
  * ABS.fmt/NEG.fmt execution mode.
  */
-static enum { STRICT, LEGACY, STD2008, RELAXED } ieee754 = STRICT;
+enum ieee754_mode { STRICT, LEGACY, STD2008, RELAXED };
+
+#if defined(CONFIG_IEEE754_DEFAULT_STRICT)
+static enum ieee754_mode ieee754 = STRICT;
+#elif defined(CONFIG_IEEE754_DEFAULT_LEGACY)
+static enum ieee754_mode ieee754 = LEGACY;
+#elif defined(CONFIG_IEEE754_DEFAULT_STD2008)
+static enum ieee754_mode ieee754 = STD2008;
+#elif defined(CONFIG_IEEE754_DEFAULT_RELAXED)
+static enum ieee754_mode ieee754 = RELAXED;
+#endif
 
 /*
  * Set the IEEE 754 NaN encodings and the ABS.fmt/NEG.fmt execution modes