问题:在Linux内核中使用浮点寄存器和SIMD寄存器有什么要求?
操作系统内核调度用户和内核任务,应该保存和恢复它们的上下文。上下文涉及通用寄存器、浮点和SIMD (FPSIMD)寄存器以及必要的系统寄存器。
Linux内核为FPSIMD寄存器实现了惰性上下文处理,因为这些寄存器有相当大的成本,而且并非所有软件应用程序和内核任务都使用FPSIMD寄存器。出于性能原因,在内核中,FPSIMD寄存器不像通用寄存器那样在每次上下文切换时都保留和恢复。
在arm64 Linux内核空间中使用浮点寄存器和SIMD寄存器有什么要求?
答案:
在内核和用户空间中使用FPSIMD寄存器都有一些要求。如果不遵循这些要求,FPSIMD寄存器值可能会损坏。
在Linux内核中,使用FPSIMD指令的内核函数必须调用kernel_neon_begin()和kernel_neon_end()对。内核上下文可以是soft IRQ上下文。
如果用户上下文有效,kernel_neon_begin()将保存