pci, virtio-devices: Restore proper BAR type

When restoring a VM, the BAR type can be found directly from the
snapshot resources. It is more reliable than the previous method which
was using self.use_64bit_bar from VirtioPciDevice because at the time
the BARs are allocated, the VirtioDevice hasn't been restored yet,
meaning the way to determine the value of use_64bit_bar is wrong for a
device like vDPA. At this time, the device type is not known and relying
on the stored resources is the only reliable way.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf
2022-10-11 15:49:42 +02:00
parent 204bf2e3f5
commit 2b150ac2ea
2 changed files with 20 additions and 6 deletions

View File

@@ -21,6 +21,8 @@ pub enum Error {
IoRegistrationFailed(u64, configuration::Error),
/// Expected resource not found.
MissingResource,
/// Invalid resource.
InvalidResource(Resource),
}
pub type Result<T> = std::result::Result<T, Error>;
@@ -37,6 +39,7 @@ impl Display for Error {
write!(f, "failed to register an IO BAR, addr={} err={}", addr, e)
}
MissingResource => write!(f, "failed to find expected resource"),
InvalidResource(r) => write!(f, "invalid resource {:?}", r),
}
}
}