mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 14:53:54 -06:00
rust: hpet: do not access fields of SysBusDevice
Fields of SysBusDevice must only be accessed with the BQL taken. Add a wrapper that verifies that. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
fc22d650d5
commit
09fda8f5dc
2 changed files with 13 additions and 3 deletions
|
@ -730,8 +730,6 @@ impl HPETState {
|
|||
}
|
||||
|
||||
fn reset_hold(&self, _type: ResetType) {
|
||||
let sbd = self.upcast::<SysBusDevice>();
|
||||
|
||||
for timer in self.timers.iter().take(self.num_timers.get()) {
|
||||
timer.borrow_mut().reset();
|
||||
}
|
||||
|
@ -744,7 +742,7 @@ impl HPETState {
|
|||
HPETFwConfig::update_hpet_cfg(
|
||||
self.hpet_id.get(),
|
||||
self.capability.get() as u32,
|
||||
sbd.mmio[0].addr,
|
||||
self.mmio_addr(0).unwrap(),
|
||||
);
|
||||
|
||||
// to document that the RTC lowers its output on reset as well
|
||||
|
|
|
@ -64,6 +64,18 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: do we want a type like GuestAddress here?
|
||||
fn mmio_addr(&self, id: u32) -> Option<u64> {
|
||||
assert!(bql_locked());
|
||||
let sbd = self.upcast();
|
||||
let id: usize = id.try_into().unwrap();
|
||||
if sbd.mmio[id].memory.is_null() {
|
||||
None
|
||||
} else {
|
||||
Some(sbd.mmio[id].addr)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: do we want a type like GuestAddress here?
|
||||
fn mmio_map(&self, id: u32, addr: u64) {
|
||||
assert!(bql_locked());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue