x86_64: Add separate error for getting sregs

Re-using the set error could cause confusion.

BUG=none
TEST=none

Change-Id: I47445b28946484028bf96cff9ee0bc8c89b6f3e5
Signed-off-by: Dylan Reid <dgreid@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/974741
Reviewed-by: Zach Reizner <zachr@chromium.org>
This commit is contained in:
Dylan Reid 2018-03-21 18:26:22 -07:00 committed by chrome-bot
parent 5fc80ebd71
commit 1776c645c9

View file

@ -22,10 +22,12 @@ pub enum Error {
MsrIoctlFailed(sys_util::Error),
/// Failed to configure the FPU.
FpuIoctlFailed(sys_util::Error),
/// Failed to get sregs for this cpu.
GetSRegsIoctlFailed(sys_util::Error),
/// Failed to set base registers for this cpu.
SettingRegistersIoctl(sys_util::Error),
/// Failed to set sregs for this cpu.
SRegsIoctlFailed(sys_util::Error),
SetSRegsIoctlFailed(sys_util::Error),
/// Writing the GDT to RAM failed.
WriteGDTFailure,
/// Writing the IDT to RAM failed.
@ -46,9 +48,11 @@ impl error::Error for Error {
"Setting up msrs failed",
&Error::FpuIoctlFailed(_) =>
"Failed to configure the FPU",
&Error::GetSRegsIoctlFailed(_) =>
"Failed to get sregs for this cpu",
&Error::SettingRegistersIoctl(_) =>
"Failed to set base registers for this cpu",
&Error::SRegsIoctlFailed(_) =>
&Error::SetSRegsIoctlFailed(_) =>
"Failed to set sregs for this cpu",
&Error::WriteGDTFailure =>
"Writing the GDT to RAM failed",
@ -298,12 +302,12 @@ fn setup_page_tables(mem: &GuestMemory, sregs: &mut kvm_sregs) -> Result<()> {
/// * `mem` - The memory that will be passed to the guest.
/// * `vcpu_fd` - The FD returned from the KVM_CREATE_VCPU ioctl.
pub fn setup_sregs(mem: &GuestMemory, vcpu: &kvm::Vcpu) -> Result<()> {
let mut sregs: kvm_sregs = vcpu.get_sregs().map_err(Error::SRegsIoctlFailed)?;
let mut sregs: kvm_sregs = vcpu.get_sregs().map_err(Error::GetSRegsIoctlFailed)?;
configure_segments_and_sregs(mem, &mut sregs)?;
setup_page_tables(mem, &mut sregs)?; // TODO(dgreid) - Can this be done once per system instead?
vcpu.set_sregs(&sregs).map_err(Error::SRegsIoctlFailed)?;
vcpu.set_sregs(&sregs).map_err(Error::SetSRegsIoctlFailed)?;
Ok(())
}