virtio spec 1.1 , 发现了个非原子资源的使用方法

2020-03-11 16:19:16 +08:00
 sockpuppet9527

2.4.1 Driver Requirements: Device Configuration Space

原文写的说:驱动不能假定从大于 32 位宽的字段进行的读取是原子的。 然后他提供了建议读方式:

do {
	before = get_config_generation(device);
	// read config entry/entries.
	after = get_config_generation(device);
} while (after != before);

看起来得在 before 和 after 之中做完所有初始化的事情啊? 假如两者不一致,还得重新做一遍

以前我想如果非原子资源的话,加把锁或者尽量保证数据原子性。 看起来遇到驱动不好加锁的场景,这个办法也是非常 trick 的。

1216 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/651899

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX