summary refs log tree commit diff stats
path: root/rust/hw/timer/hpet/src/device.rs
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-05-23 18:37:55 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2025-06-06 14:32:54 +0200
commit4d2fec89cb8651ee760ff9296c8d3e2ade4cc063 (patch)
tree4eb3875ba1b34a4e28a3ba252967b25631059f59 /rust/hw/timer/hpet/src/device.rs
parent14b5a799339d2d21826eac5ab1e98d00b1f1f89f (diff)
downloadfocaccia-qemu-4d2fec89cb8651ee760ff9296c8d3e2ade4cc063.tar.gz
focaccia-qemu-4d2fec89cb8651ee760ff9296c8d3e2ade4cc063.zip
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>
Diffstat (limited to 'rust/hw/timer/hpet/src/device.rs')
-rw-r--r--rust/hw/timer/hpet/src/device.rs16
1 files changed, 7 insertions, 9 deletions
diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs
index a957de1e76..cd439f90b7 100644
--- a/rust/hw/timer/hpet/src/device.rs
+++ b/rust/hw/timer/hpet/src/device.rs
@@ -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.