diff options
author | Matt Delco <delco@chromium.org> | 2019-09-25 11:21:51 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-10-23 06:22:00 +0000 |
commit | 893c1200ddd16567b184652bbf4df70df578b658 (patch) | |
tree | 92ec5efcbc38a1276d14f592ab796330d3e7d2d4 /src/plugin | |
parent | 3156937410b99e7b27283c6dc566e72ca4de53ab (diff) | |
download | crosvm-893c1200ddd16567b184652bbf4df70df578b658.tar crosvm-893c1200ddd16567b184652bbf4df70df578b658.tar.gz crosvm-893c1200ddd16567b184652bbf4df70df578b658.tar.bz2 crosvm-893c1200ddd16567b184652bbf4df70df578b658.tar.lz crosvm-893c1200ddd16567b184652bbf4df70df578b658.tar.xz crosvm-893c1200ddd16567b184652bbf4df70df578b658.tar.zst crosvm-893c1200ddd16567b184652bbf4df70df578b658.zip |
crosvm: defer IPC on set calls
If a plugin makes a set call on vcpu registers then we can improve performance by deferring the IPC and instead conbining the request with the next resume call. BUG=None TEST=build and run. Change-Id: I4eb54a3f6eb30c98971aa2f099e3ea5899767eed Signed-off-by: Matt Delco <delco@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1825262 Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'src/plugin')
-rw-r--r-- | src/plugin/vcpu.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/plugin/vcpu.rs b/src/plugin/vcpu.rs index 5ca27da..05970f7 100644 --- a/src/plugin/vcpu.rs +++ b/src/plugin/vcpu.rs @@ -444,6 +444,20 @@ impl PluginVcpu { Err(SysError::new(EPROTO)) } else if request.has_resume() { send_response = false; + let resume = request.get_resume(); + if !resume.get_regs().is_empty() { + set_vcpu_state(vcpu, VcpuRequest_StateSet::REGS, resume.get_regs())?; + } + if !resume.get_sregs().is_empty() { + set_vcpu_state(vcpu, VcpuRequest_StateSet::SREGS, resume.get_sregs())?; + } + if !resume.get_debugregs().is_empty() { + set_vcpu_state( + vcpu, + VcpuRequest_StateSet::DEBUGREGS, + resume.get_debugregs(), + )?; + } resume_data = Some(request.take_resume().take_data()); Ok(()) } else if request.has_get_state() { |