diff options
author | Jingkui Wang <jkwang@google.com> | 2019-03-07 12:23:42 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-08 21:20:19 -0800 |
commit | 886ed246b39dccfd9b16026c2464d655ff0bcd75 (patch) | |
tree | 45c57108607517d310573febfd8a66071fbd47d2 /devices/src/register_space | |
parent | 9fc96ec8fb6bd23dbe2eff6e44ebe7549787e5d0 (diff) | |
download | crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.tar crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.tar.gz crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.tar.bz2 crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.tar.lz crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.tar.xz crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.tar.zst crosvm-886ed246b39dccfd9b16026c2464d655ff0bcd75.zip |
register_space: fix u64 write callback
u64 register callback will only be invoked when the write is done. BUG=chromium:831850 TEST=local build CQ-DEPEND=CL:1509514 Change-Id: Id0be69535898fdcc4ba24d3151df7a5107a2725b Reviewed-on: https://chromium-review.googlesource.com/1509515 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Jingkui Wang <jkwang@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices/src/register_space')
-rw-r--r-- | devices/src/register_space/register.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/devices/src/register_space/register.rs b/devices/src/register_space/register.rs index 44beaf5..eae5abc 100644 --- a/devices/src/register_space/register.rs +++ b/devices/src/register_space/register.rs @@ -267,6 +267,14 @@ impl<T: RegisterValue> RegisterInterface for Register<T> { ); } } + + // A single u64 register is done by write to lower 32 bit and then higher 32 bit. Callback + // should only be invoked when higher is written. + if my_range.to != overlap.to { + self.lock().value = reg_value; + return; + } + // Taking the callback out of register when executing it. This prevent dead lock if // callback want to read current register value. // Note that the only source of callback comes from mmio writing, which is synchronized. |