RISCV下Dovetail移植(2)——原子操作
Dovetail将Linux中的中断全部虚拟化,来实现无论何时都能被中断以提供evl的实时性。在这种中断保护被虚拟化的情况下,需要在所有需要中断禁用以序列化调用者的地方,反转这种虚拟化效果。通常,以下文件会受到影响:
- include/asm-generic/atomic.h
- include/asm-generic/cmpxchg-local.h
- include/asm-generic/cmpxchg.h
同样,在架构特定的代码中,也可能存在以下文件:
- arch/arm/include/asm/atomic.h
- arch/arm/include/asm/bitops.h
- arch/arm/include/asm/cmpxchg.h
但riscv提供amo指令,AMO 指令能够在一个指令中完成读取、修改和写回操作,这些操作是不可分割的,不会被中断或重新排序,因此并不需要修改中断。