在Linux/ARM上运行时,是否有任何可靠的方法(最好没有误报和误报)来检测LDREX/STREX原子操作的可用性?我在aux vector 的AT_HWCAP字段中寻找了一些东西,发现了一些可能间接暗示可用性的东西(例如HWCAP_LPAE应该这样做),但它们可能会有假阴性。

最佳答案

LDREX/STREX是ARMv6架构中引入的,因此您只需要检查架构版本-如果是v6或更高版本,就可以使用它们。如果没有,您就不会。从特权代码中,您可以直接读取MIDR,否则可以使用/proc/cpuinfo这样的用户空间界面。

如果您确实需要实现适用于所有体系结构版本的原子,那么最好不依赖于Kernel User helpers提供的cmpxchg,而是尝试自己滚动。

09-07 03:19