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 的。