1. clrex指令的效果:
《arm architecture reference manual》B2-1292以下简称arm arm手册
The ClearExclusiveLocal() procedure takes as arguments the processor identifier processorid . The procedure clearsthe local record of processor processorid for which an address has had a request for an exclusive access. It isIMPLEMENTATION DEFINED whether this operation also clears the global record of processor processorid that anaddress has had a request for an exclusive access
该指令的效果就是在独占拜访完毕时,铲除cpu中本地处理器针对某块内存区域的独占拜访标志(核中的某个状况寄存器),以防在未铲除时的其他操作,对体系产生影响。关于是否一起铲除大局的独占拜访标志,需要在规划cpu时的架构师决议。
2. clrex指令的效果很共同,在linux内核中用在什么当地呢?
用在如下当地:
(1)数据间断反常、指令预取间断反常的处理时调用
(调用linaro-aarch64/arch/arm/mm/abort-ev7.s v7_early_abort==》clrex)
(2)从svc形式下的irq反常、未定义指令反常、数据间断反常、指令预取间断反常,处理完毕回来时调用
(调用宏:linaro-aarch64/arch/arm/kernel/entry-header.s svc_exit)
(3) 回来到用户层的快速体系调用/慢速体系调用(ret_slow_syscall,ret_fast_syscall==》
调用宏:linaro-aarch64/arch/arm/kernel/entry-header.s restore_user_regs==》clrex)
(4) run_all_tests 函数调用(==》kprobe_arm_test_cases==》TEST_UNSUPPORTED(“clrex”) ==》clrex)
该函数是一个驱动模块,能够动态加载。
如上所示:根本一切的反常都要用到该指令,体系调用的回来也能用到。
尽管反常和体系调用的代码在内核中不多,可是当内核运转起来时,反常和体系调用的履行频率特别高!
所以该指令仍是十分有用的。