mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-06 02:25:23 +00:00
devices: usb: remove interrupter pending variable
The pending variable was just duplicating state that can easily be determined based on whether the ring is empty. Remove the variable and replace it with an equivalent check in interrupt_if_needed() to avoid the possibility of accidentally getting these out of sync. BUG=chromium:1082930 TEST=cargo test -p devices Change-Id: Icb90e3d09c43de244f5fecffb0e55d4635be6d2b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2202744 Reviewed-by: Dylan Reid <dgreid@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
This commit is contained in:
parent
3730355406
commit
1182090a3e
2 changed files with 1 additions and 13 deletions
|
@ -144,11 +144,6 @@ impl EventRing {
|
|||
self.dequeue_pointer = addr;
|
||||
}
|
||||
|
||||
/// Get the enqueue pointer.
|
||||
pub fn get_enqueue_pointer(&self) -> GuestAddress {
|
||||
self.enqueue_pointer
|
||||
}
|
||||
|
||||
/// Check if event ring is empty.
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.enqueue_pointer == self.dequeue_pointer
|
||||
|
|
|
@ -45,7 +45,6 @@ pub struct Interrupter {
|
|||
erdp: Register<u64>,
|
||||
event_handler_busy: bool,
|
||||
enabled: bool,
|
||||
pending: bool,
|
||||
moderation_interval: u16,
|
||||
moderation_counter: u16,
|
||||
event_ring: EventRing,
|
||||
|
@ -61,7 +60,6 @@ impl Interrupter {
|
|||
erdp: regs.erdp.clone(),
|
||||
event_handler_busy: false,
|
||||
enabled: false,
|
||||
pending: false,
|
||||
moderation_interval: 0,
|
||||
moderation_counter: 0,
|
||||
event_ring: EventRing::new(mem),
|
||||
|
@ -76,7 +74,6 @@ impl Interrupter {
|
|||
/// Add event to event ring.
|
||||
fn add_event(&mut self, trb: Trb) -> Result<()> {
|
||||
self.event_ring.add_event(trb).map_err(Error::AddEvent)?;
|
||||
self.pending = true;
|
||||
self.interrupt_if_needed()
|
||||
}
|
||||
|
||||
|
@ -169,9 +166,6 @@ impl Interrupter {
|
|||
pub fn set_event_ring_dequeue_pointer(&mut self, addr: GuestAddress) -> Result<()> {
|
||||
usb_debug!("interrupter set dequeue ptr addr {:#x}", addr.0);
|
||||
self.event_ring.set_dequeue_pointer(addr);
|
||||
if addr == self.event_ring.get_enqueue_pointer() {
|
||||
self.pending = false;
|
||||
}
|
||||
self.interrupt_if_needed()
|
||||
}
|
||||
|
||||
|
@ -186,7 +180,6 @@ impl Interrupter {
|
|||
pub fn interrupt(&mut self) -> Result<()> {
|
||||
usb_debug!("sending interrupt");
|
||||
self.event_handler_busy = true;
|
||||
self.pending = false;
|
||||
self.usbsts.set_bits(USB_STS_EVENT_INTERRUPT);
|
||||
self.iman.set_bits(IMAN_INTERRUPT_PENDING);
|
||||
self.erdp.set_bits(ERDP_EVENT_HANDLER_BUSY);
|
||||
|
@ -194,7 +187,7 @@ impl Interrupter {
|
|||
}
|
||||
|
||||
fn interrupt_if_needed(&mut self) -> Result<()> {
|
||||
if self.enabled && self.pending && !self.event_handler_busy {
|
||||
if self.enabled && !self.event_ring.is_empty() && !self.event_handler_busy {
|
||||
self.interrupt()?;
|
||||
}
|
||||
Ok(())
|
||||
|
|
Loading…
Reference in a new issue