| 857 | |
| 858 | impl IommuEpollHandler { |
| 859 | fn request_queue(&mut self) -> Result<bool, Error> { |
| 860 | let mut used_descs = false; |
| 861 | while let Some(mut desc_chain) = self.request_queue.pop_descriptor_chain(self.mem.memory()) |
| 862 | { |
| 863 | let len = Request::parse( |
| 864 | &mut desc_chain, |
| 865 | &self.mapping, |
| 866 | &self.ext_mapping.lock().unwrap(), |
| 867 | self.msi_iova_space, |
| 868 | self.input_range, |
| 869 | )?; |
| 870 | |
| 871 | self.request_queue |
| 872 | .add_used(desc_chain.memory(), desc_chain.head_index(), len as u32) |
| 873 | .map_err(Error::QueueAddUsed)?; |
| 874 | |
| 875 | used_descs = true; |
| 876 | } |
| 877 | |
| 878 | Ok(used_descs) |
| 879 | } |
| 880 | |
| 881 | fn signal_used_queue(&self, queue_index: u16) -> result::Result<(), DeviceError> { |
| 882 | self.interrupt_cb |