mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
rust/hpet: return errors from realize if properties are incorrect
Match the code in hpet.c; this also allows removing the BqlCell from the num_timers field. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
14b5a79933
commit
4d2fec89cb
2 changed files with 10 additions and 13 deletions
|
@ -725,18 +725,16 @@ impl HPETState {
|
|||
}
|
||||
|
||||
fn realize(&self) -> qemu_api::Result<()> {
|
||||
if self.num_timers.get() < HPET_MIN_TIMERS || self.num_timers.get() > HPET_MAX_TIMERS {
|
||||
Err(format!(
|
||||
"hpet.num_timers must be between {HPET_MIN_TIMERS} and {HPET_MAX_TIMERS}"
|
||||
))?;
|
||||
}
|
||||
if self.int_route_cap == 0 {
|
||||
// TODO: Add error binding: warn_report()
|
||||
println!("Hpet's hpet-intcap property not initialized");
|
||||
Err("hpet.hpet-intcap property not initialized")?;
|
||||
}
|
||||
|
||||
self.hpet_id.set(HPETFwConfig::assign_hpet_id());
|
||||
|
||||
if self.num_timers.get() < HPET_MIN_TIMERS {
|
||||
self.num_timers.set(HPET_MIN_TIMERS);
|
||||
} else if self.num_timers.get() > HPET_MAX_TIMERS {
|
||||
self.num_timers.set(HPET_MAX_TIMERS);
|
||||
}
|
||||
self.hpet_id.set(HPETFwConfig::assign_hpet_id()?);
|
||||
|
||||
self.init_timer();
|
||||
// 64-bit General Capabilities and ID Register; LegacyReplacementRoute.
|
||||
|
|
|
@ -36,7 +36,7 @@ pub static mut hpet_fw_cfg: HPETFwConfig = HPETFwConfig {
|
|||
};
|
||||
|
||||
impl HPETFwConfig {
|
||||
pub(crate) fn assign_hpet_id() -> usize {
|
||||
pub(crate) fn assign_hpet_id() -> Result<usize, &'static str> {
|
||||
assert!(bql_locked());
|
||||
// SAFETY: all accesses go through these methods, which guarantee
|
||||
// that the accesses are protected by the BQL.
|
||||
|
@ -48,13 +48,12 @@ impl HPETFwConfig {
|
|||
}
|
||||
|
||||
if fw_cfg.count == 8 {
|
||||
// TODO: Add error binding: error_setg()
|
||||
panic!("Only 8 instances of HPET is allowed");
|
||||
Err("Only 8 instances of HPET are allowed")?;
|
||||
}
|
||||
|
||||
let id: usize = fw_cfg.count.into();
|
||||
fw_cfg.count += 1;
|
||||
id
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
pub(crate) fn update_hpet_cfg(hpet_id: usize, timer_block_id: u32, address: u64) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue