移植Dovetail中需要关注的原子操作

Legonext 2023-06-09 09:41:30

在需要禁用中断以实现序列化的地方,无论他们运行在哪个阶段(实时阶段或非实时阶段,即out-of-band或in-band阶段),对于原子操作来说,虚拟化中断保护就起不到我们需要的严格的序列化的作用,所以需要进行修改。通常,涉及以下文件:

  • include/asm-generic/atomic.h
  • include/asm-generic/cmpxchg-local.h
  • include/asm-generic/cmpxchg.h

同样地,也涉及一些和cpu架构相关的特定代码,譬如:

  • arch/arm/include/asm/atomic.h
  • arch/arm/include/asm/bitops.h
  • arch/arm/include/asm/cmpxchg.h

这些修改是为了使这些原子操作可用于保护那些需要同时从两个阶段(实时和非实时阶段)访问的数据。替换中断虚拟化的一种常见方法涉及将对使用虚拟化 的local_irq_save()、local_irq_restore() API 的调用替换为hard非虚拟化的对应API。

  • 为通用原子计数器上的操作恢复为严格的序列化:

同样,此类操作也存在于特定于体系结构的代码中,需要覆盖它们的通用定义。例如,ARM 端口定义了自己的原子操作版本,必须修改成真正的中断保护:

  • 恢复对 ARM 原子计数器操作的严格的序列化:

翻译自https://evlproject.org/dovetail/porting/atomic/ ,请指正。

...全文
202 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

131

社区成员

发帖
与我相关
我的任务
社区描述
Xenomai中文社区。 Upstream - xenomai.org Mirror - gitee.com/Xenomai CSDN - bbs.csdn.net/forums/Xenomai
社区管理员
  • Xenomai
  • legonext
  • Cajb
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧