mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-02-22 19:32:20 +00:00
virtio-devices: vhost_user: net: Enable inflight I/O tracking
Signed-off-by: Jiachen Zhang <zhangjiachen.jaycee@bytedance.com>
This commit is contained in:
parent
36d336841c
commit
2e3e64a4cf
@ -6,7 +6,7 @@ use crate::vhost_user::vu_common_ctrl::{
|
|||||||
add_memory_region, connect_vhost_user, negotiate_features_vhost_user, reset_vhost_user,
|
add_memory_region, connect_vhost_user, negotiate_features_vhost_user, reset_vhost_user,
|
||||||
setup_vhost_user, update_mem_table, VhostUserConfig,
|
setup_vhost_user, update_mem_table, VhostUserConfig,
|
||||||
};
|
};
|
||||||
use crate::vhost_user::{Error, Result, VhostUserEpollHandler};
|
use crate::vhost_user::{Error, Inflight, Result, VhostUserEpollHandler};
|
||||||
use crate::{
|
use crate::{
|
||||||
ActivateError, ActivateResult, EpollHelper, EpollHelperError, EpollHelperHandler, Queue,
|
ActivateError, ActivateResult, EpollHelper, EpollHelperError, EpollHelperHandler, Queue,
|
||||||
VirtioCommon, VirtioDevice, VirtioDeviceType, VirtioInterrupt, EPOLL_HELPER_EVENT_LAST,
|
VirtioCommon, VirtioDevice, VirtioDeviceType, VirtioInterrupt, EPOLL_HELPER_EVENT_LAST,
|
||||||
@ -141,7 +141,8 @@ impl Net {
|
|||||||
|
|
||||||
let avail_protocol_features = VhostUserProtocolFeatures::MQ
|
let avail_protocol_features = VhostUserProtocolFeatures::MQ
|
||||||
| VhostUserProtocolFeatures::CONFIGURE_MEM_SLOTS
|
| VhostUserProtocolFeatures::CONFIGURE_MEM_SLOTS
|
||||||
| VhostUserProtocolFeatures::REPLY_ACK;
|
| VhostUserProtocolFeatures::REPLY_ACK
|
||||||
|
| VhostUserProtocolFeatures::INFLIGHT_SHMFD;
|
||||||
|
|
||||||
let (mut acked_features, acked_protocol_features) = negotiate_features_vhost_user(
|
let (mut acked_features, acked_protocol_features) = negotiate_features_vhost_user(
|
||||||
&mut vhost_user_net,
|
&mut vhost_user_net,
|
||||||
@ -292,6 +293,14 @@ impl VirtioDevice for Net {
|
|||||||
let backend_acked_features = self.common.acked_features & !(1 << VIRTIO_NET_F_MAC)
|
let backend_acked_features = self.common.acked_features & !(1 << VIRTIO_NET_F_MAC)
|
||||||
| (self.common.avail_features & VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits());
|
| (self.common.avail_features & VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits());
|
||||||
|
|
||||||
|
let mut inflight: Option<Inflight> =
|
||||||
|
if self.acked_protocol_features & VhostUserProtocolFeatures::INFLIGHT_SHMFD.bits() != 0
|
||||||
|
{
|
||||||
|
Some(Inflight::default())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
setup_vhost_user(
|
setup_vhost_user(
|
||||||
&mut self.vhost_user_net.lock().unwrap(),
|
&mut self.vhost_user_net.lock().unwrap(),
|
||||||
&mem.memory(),
|
&mem.memory(),
|
||||||
@ -300,7 +309,7 @@ impl VirtioDevice for Net {
|
|||||||
&interrupt_cb,
|
&interrupt_cb,
|
||||||
backend_acked_features,
|
backend_acked_features,
|
||||||
&slave_req_handler,
|
&slave_req_handler,
|
||||||
None,
|
inflight.as_mut(),
|
||||||
)
|
)
|
||||||
.map_err(ActivateError::VhostUserNetSetup)?;
|
.map_err(ActivateError::VhostUserNetSetup)?;
|
||||||
|
|
||||||
@ -321,7 +330,7 @@ impl VirtioDevice for Net {
|
|||||||
socket_path: self.socket_path.clone(),
|
socket_path: self.socket_path.clone(),
|
||||||
server: self.server,
|
server: self.server,
|
||||||
slave_req_handler: None,
|
slave_req_handler: None,
|
||||||
inflight: None,
|
inflight,
|
||||||
};
|
};
|
||||||
|
|
||||||
let paused = self.common.paused.clone();
|
let paused = self.common.paused.clone();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user