Re: [RFC v2 1/2] ppc/fpu: Add generic FPU api similar to x86
From: Christoph Hellwig <hch@infradead.org>
Date: 2021-07-21 07:01:46
Also in:
amd-gfx, lkml
+ +/* + * Use kernel_fpu_begin/end() if you intend to use FPU in kernel context. It + * disables preemption so be careful if you intend to use it for long periods + * of time. + * TODO: If you intend to use the FPU in irq/softirq you need to check first with + * irq_fpu_usable() if it is possible.
Please avoid the overly lone lines comments.
+extern bool kernel_fpu_enabled(void); +extern void kernel_fpu_begin(void); +extern void kernel_fpu_end(void);
No need for the externs.
+/* + * Track whether the kernel is using the FPU state + * currently.
This all fits on a single line.
+static bool fpu_support(void)
+{
+ if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
+ return true;
+ } else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) {
+ return true;
+ } else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) {
+ return true;
+ }No need for the braces, or else after a return. In fact this could be simplified down to: return cpu_has_feature(CPU_FTR_VSX_COMP) || cpu_has_feature(CPU_FTR_ALTIVEC_COMP) || cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE));
+ preempt_disable();
+
+#ifdef CONFIG_VSX
+ if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
+ enable_kernel_vsx();
+ return;
+ }
+#endif
+
+#ifdef CONFIG_ALTIVEC
+ if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) {
+ enable_kernel_altivec();
+ return;
+ }
+#endif
+
+#ifdef CONFIG_PPC_FPU
+ if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) {
+ enable_kernel_fp();
+ return;
+ }
+#endifAll the features are defined away if not supported (and we already rely on that in fpu_support()). So this could become: if (cpu_has_feature(CPU_FTR_VSX_COMP)) enable_kernel_vsx(); else if (cpu_has_feature(CPU_FTR_ALTIVEC_COMP)) enable_kernel_altivec(); else if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE)) enable_kernel_fp(); Same for the disable path.