mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-03-20 07:58:55 +00:00
virtio-devices: block, block_io_uring: Don't assume max queue count
Don't assume that the number of queues provided match the number of queues offered. The virtio spec allows the driver to program fewer queues. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
c9b68a3be6
commit
c366efc19e
@ -444,8 +444,9 @@ impl<T: 'static + DiskFile + Send> VirtioDevice for Block<T> {
|
||||
self.update_writeback();
|
||||
|
||||
let mut epoll_threads = Vec::new();
|
||||
for i in 0..self.common.queue_sizes.len() {
|
||||
for i in 0..queues.len() {
|
||||
let queue_evt = queue_evts.remove(0);
|
||||
let queue = queues.remove(0);
|
||||
let kill_evt = self
|
||||
.common
|
||||
.kill_evt
|
||||
@ -467,7 +468,7 @@ impl<T: 'static + DiskFile + Send> VirtioDevice for Block<T> {
|
||||
ActivateError::BadActivate
|
||||
})?;
|
||||
let mut handler = BlockEpollHandler {
|
||||
queue: queues.remove(0),
|
||||
queue,
|
||||
mem: mem.clone(),
|
||||
disk_image: self.disk_image.clone(),
|
||||
disk_nsectors: self.disk_nsectors,
|
||||
|
@ -493,9 +493,10 @@ impl VirtioDevice for BlockIoUring {
|
||||
self.update_writeback();
|
||||
|
||||
let mut epoll_threads = Vec::new();
|
||||
for i in 0..self.common.queue_sizes.len() {
|
||||
let queue_size = self.common.queue_sizes[i] as usize;
|
||||
for i in 0..queues.len() {
|
||||
let queue_evt = queue_evts.remove(0);
|
||||
let queue = queues.remove(0);
|
||||
let queue_size = queue.size;
|
||||
let io_uring = IoUring::new(queue_size as u32).map_err(|e| {
|
||||
error!("failed to create io_uring instance: {}", e);
|
||||
ActivateError::BadActivate
|
||||
@ -522,7 +523,7 @@ impl VirtioDevice for BlockIoUring {
|
||||
})?;
|
||||
|
||||
let mut handler = BlockIoUringEpollHandler {
|
||||
queue: queues.remove(0),
|
||||
queue,
|
||||
mem: mem.clone(),
|
||||
disk_image_fd: self.disk_image.as_raw_fd(),
|
||||
disk_nsectors: self.disk_nsectors,
|
||||
@ -538,7 +539,7 @@ impl VirtioDevice for BlockIoUring {
|
||||
error!("failed to create io_uring eventfd: {}", e);
|
||||
ActivateError::BadActivate
|
||||
})?,
|
||||
request_list: HashMap::with_capacity(queue_size),
|
||||
request_list: HashMap::with_capacity(queue_size.into()),
|
||||
};
|
||||
|
||||
let paused = self.common.paused.clone();
|
||||
|
Loading…
x
Reference in New Issue
Block a user