mirror of
https://github.com/rust-vmm/vhost-device.git
synced 2025-12-30 17:49:08 +00:00
i2c: Always pass vring to process_requests()
For tests we can pass a non related vring to just make it run, hence no need of making it optional. Always pass the vring. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
b783e94040
commit
78da64c7f2
@ -114,7 +114,7 @@ impl<D: I2cDevice> VhostUserI2cBackend<D> {
|
||||
fn process_requests(
|
||||
&self,
|
||||
requests: Vec<I2cDescriptorChain>,
|
||||
vring: Option<&VringRwLock>,
|
||||
vring: &VringRwLock,
|
||||
) -> Result<bool> {
|
||||
let mut reqs: Vec<I2cReq> = Vec::new();
|
||||
|
||||
@ -239,10 +239,8 @@ impl<D: I2cDevice> VhostUserI2cBackend<D> {
|
||||
.write_obj::<VirtioI2cInHdr>(in_hdr, desc_in_hdr.addr())
|
||||
.map_err(|_| Error::DescriptorWriteFailed)?;
|
||||
|
||||
if let Some(vring) = vring {
|
||||
if vring.add_used(desc_chain.head_index(), len).is_err() {
|
||||
warn!("Couldn't return used descriptors to the ring");
|
||||
}
|
||||
if vring.add_used(desc_chain.head_index(), len).is_err() {
|
||||
warn!("Couldn't return used descriptors to the ring");
|
||||
}
|
||||
}
|
||||
|
||||
@ -258,7 +256,7 @@ impl<D: I2cDevice> VhostUserI2cBackend<D> {
|
||||
.map_err(|_| Error::DescriptorNotFound)?
|
||||
.collect();
|
||||
|
||||
if self.process_requests(requests, Some(vring))? {
|
||||
if self.process_requests(requests, vring)? {
|
||||
// Send notification once all the requests are processed
|
||||
vring
|
||||
.signal_used_queue()
|
||||
@ -518,10 +516,14 @@ mod tests {
|
||||
let device_config = AdapterConfig::try_from("1:4,2:32:21,5:10:23").unwrap();
|
||||
let i2c_map = I2cMap::<DummyDevice>::new(&device_config).unwrap();
|
||||
let backend = VhostUserI2cBackend::new(Arc::new(i2c_map)).unwrap();
|
||||
let mem = GuestMemoryAtomic::new(
|
||||
GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x1000)]).unwrap(),
|
||||
);
|
||||
let vring = VringRwLock::new(mem, 0x1000);
|
||||
|
||||
// Descriptor chain size zero, shouldn't fail
|
||||
backend
|
||||
.process_requests(Vec::<I2cDescriptorChain>::new(), None)
|
||||
.process_requests(Vec::<I2cDescriptorChain>::new(), &vring)
|
||||
.unwrap();
|
||||
|
||||
// Valid single read descriptor
|
||||
@ -529,7 +531,9 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain(GuestAddress(0), &mut buf, VIRTIO_I2C_FLAGS_M_RD, 4);
|
||||
let desc_chains = vec![desc_chain];
|
||||
|
||||
backend.process_requests(desc_chains.clone(), None).unwrap();
|
||||
backend
|
||||
.process_requests(desc_chains.clone(), &vring)
|
||||
.unwrap();
|
||||
validate_desc_chains(desc_chains, VIRTIO_I2C_MSG_OK);
|
||||
|
||||
// Valid single write descriptor
|
||||
@ -537,7 +541,9 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain(GuestAddress(0), &mut buf, 0, 4);
|
||||
let desc_chains = vec![desc_chain];
|
||||
|
||||
backend.process_requests(desc_chains.clone(), None).unwrap();
|
||||
backend
|
||||
.process_requests(desc_chains.clone(), &vring)
|
||||
.unwrap();
|
||||
validate_desc_chains(desc_chains, VIRTIO_I2C_MSG_OK);
|
||||
|
||||
// Valid mixed read-write descriptors
|
||||
@ -557,7 +563,9 @@ mod tests {
|
||||
prepare_desc_chain(GuestAddress(0), &mut buf[5], VIRTIO_I2C_FLAGS_M_RD, 4),
|
||||
];
|
||||
|
||||
backend.process_requests(desc_chains.clone(), None).unwrap();
|
||||
backend
|
||||
.process_requests(desc_chains.clone(), &vring)
|
||||
.unwrap();
|
||||
validate_desc_chains(desc_chains, VIRTIO_I2C_MSG_OK);
|
||||
}
|
||||
|
||||
@ -566,6 +574,10 @@ mod tests {
|
||||
let device_config = AdapterConfig::try_from("1:4,2:32:21,5:10:23").unwrap();
|
||||
let i2c_map = I2cMap::<DummyDevice>::new(&device_config).unwrap();
|
||||
let backend = VhostUserI2cBackend::new(Arc::new(i2c_map)).unwrap();
|
||||
let mem = GuestMemoryAtomic::new(
|
||||
GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x1000)]).unwrap(),
|
||||
);
|
||||
let vring = VringRwLock::new(mem, 0x1000);
|
||||
|
||||
// One descriptors
|
||||
let flags: Vec<u16> = vec![0];
|
||||
@ -573,7 +585,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedDescriptorCount(1)
|
||||
);
|
||||
@ -584,7 +596,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedDescriptorCount(4)
|
||||
);
|
||||
@ -599,7 +611,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedWriteOnlyDescriptor(0)
|
||||
);
|
||||
@ -610,7 +622,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedDescriptorSize(size_of::<VirtioI2cOutHdr>(), 100)
|
||||
);
|
||||
@ -626,7 +638,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(Some(addr), flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::DescriptorReadFailed
|
||||
);
|
||||
@ -641,7 +653,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedReadableDescriptor(2)
|
||||
);
|
||||
@ -652,7 +664,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedDescriptorSize(size_of::<u8>(), 100)
|
||||
);
|
||||
@ -668,7 +680,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(Some(addr), flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::DescriptorWriteFailed
|
||||
);
|
||||
@ -683,7 +695,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(None, flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::UnexpectedDescriptorSize(1, 0)
|
||||
);
|
||||
@ -699,7 +711,7 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain_dummy(Some(addr), flags, len);
|
||||
assert_eq!(
|
||||
backend
|
||||
.process_requests(vec![desc_chain], None)
|
||||
.process_requests(vec![desc_chain], &vring)
|
||||
.unwrap_err(),
|
||||
Error::DescriptorReadFailed
|
||||
);
|
||||
@ -709,7 +721,9 @@ mod tests {
|
||||
let desc_chain = prepare_desc_chain(GuestAddress(0), &mut buf, VIRTIO_I2C_FLAGS_M_RD, 4);
|
||||
let desc_chains = vec![desc_chain];
|
||||
|
||||
backend.process_requests(desc_chains.clone(), None).unwrap();
|
||||
backend
|
||||
.process_requests(desc_chains.clone(), &vring)
|
||||
.unwrap();
|
||||
validate_desc_chains(desc_chains, VIRTIO_I2C_MSG_ERR);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user