> I love this topic!
Well, I'm glad *you're* having fun! ;-)
> Instead of replying to 10 different emails, I decide to sort out my best
> understanding of this topic and list them here, including some of MY
> to some of the issues.
> 1. Config option approach :
> In the kernel config menu, one picks one or more CPUs. One also specifies
> whether the CPU(s) have a FPU.
> All FPU related code in kernel is configured in or out based on the CONFIG
As has been noted in other messages in this exchange, whether one
has an FPU or not isn't really the determining factor in including FP
support code in the kernel. The bulk of it is the emulator, and the
emulator needs to be there if you want to execute binaries built
to include MIPS FP instructions, whether in full emulation or using
the FPU (for the denormal cases, etc.).
So your CONFIG option would really be to say, regardless of
the CPU, whether your kernel can handle an FPU-ful userland,
or is stripped down to support only 100% integer binaries.
> 2. run-time detection approach:
> CPU probing code probes CPU and sets has_fpu field in the mips_cpu
> All FPU related code is on a conditional branch based on has_fpu value.
Again, the FPU-related code has to be there any time you're
going to run FP binaries. The MIPS_CPU_FPU bit simply
tells the kernel how/when to use it.
> My Conclusion
> Clearly, it is a trade-off decision based how much one values the minuses
> pluses of both approaches.
> While I do agree the minus for run-time detection are not serious ones, I
> think the minus for config option is even less serious. Having the same
> kernel image runs on multiple CPUs is very nice. I just doubt about the
> usefulness of requiring the same kernel image to run on CPUs both with a
> and without a FPU.
If you're building kernels for a workstation, that may be
true. If you're building kernels for a testbed where you're
swapping CPU modules, it's actually rather nice to have
a single kernel that boots on any of them. I personally
find myself in this situation. Or to provide a less lab-oriented
example, NEC has the R43xx family which have FPUs,
and Toshiba markets some R49xx parts that are pin-compatible
but cheaper - because they have no FPU. If I were building
a Linux-based system around either one, memory permitting,
I would want to have a kernel that could cope with either of
them, to simplify the product management problem if I ever
ended up wanting to cut over from one to the other.