On Tue, 3 Jun 2014, Ralf Baechle wrote: > > Do we need this CPU_HAS_SMARTMIPS setting at all? Can't we just > > save/restore this SmartMIPS ACX register on context switches where > > available (straightforward to detect at the run time) and have the > > relevant pieces of code excluded (#ifdef-ed out or suchlike) on > > non-supported configurations such as microMIPS or MIPS64? > > SmartMIPS has new instructions which are hardcoded in various assembler > fragments, where something like if (cpu_has_smartmips) won't work. > So until a more complex solution is implemented CPU_HAS_SMARTMIPS is > what there is. Well: .set push .set smartmips # Whatever SmartMIPS stuff. .set pop should do. It has been supported by GAS since forever (well, since it has included SmartMIPS instructions that is, which is 2.18; to support older versions we can use $(call as-instr,...) and some #ifdef-ry that we have anyway). It's <asm/stackframe.h> only BTW for six instructions total. So I think that is straightforward to implement and much more reasonable than the hacks we have now. A SmartMIPS-enabled kernel doesn't even check if the CPU it's run on implements the ASE so it'll just crash at some point trying to execute MFLHXU or MTLHX if it does not -- and obviously if two SmartMIPS user programs are run concurrently on a SmartMIPS-disabled kernel and use the ACX register, then they will yield random results. Maciej