diff --git a/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs b/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs index cc7885c8bb..2413f67c23 100644 --- a/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs +++ b/src/runtime-rs/crates/hypervisor/src/ch/inner_device.rs @@ -317,8 +317,11 @@ impl CloudHypervisorInner { // When using fds to pass the tap device to cloud-hypervisor, tap and id fields should be None clh_net_config.tap = None; clh_net_config.id = None; + // The `config.num_queues` is a queue *pair* count (1 RX + 1 TX per pair). + // Convert pairs into the actual queue count. + clh_net_config.num_queues = netdev.config.queue_num.max(1) * 2; - let files = open_named_tuntap(&netdev.config.host_dev_name, netdev.config.queue_num as u32) + let files = open_named_tuntap(&netdev.config.host_dev_name, netdev.config.queue_num.max(1) as u32) .context("open named tuntap")?; let fds = files.iter().map(|f| f.as_raw_fd()).collect();