summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2024-02-19 01:12:17 +0100
committerAlyssa Ross <hi@alyssa.is>2024-02-19 01:12:17 +0100
commit5c954e2407c7c8de6bf8246200c0248014bdfca8 (patch)
tree01663104e4d47f58fab60723648bc11fda45cc25
parentf1094c8bfdf320753d7d6f32a62cde3dd55e3747 (diff)
downloadspectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.tar
spectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.tar.gz
spectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.tar.bz2
spectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.tar.lz
spectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.tar.xz
spectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.tar.zst
spectrum-5c954e2407c7c8de6bf8246200c0248014bdfca8.zip
lib/nixpkgs.default.nix: update to staging-next
Going straight to staging-next lets us drop the patched Meson.

Signed-off-by: Alyssa Ross <hi@alyssa.is>
-rw-r--r--lib/nixpkgs.default.nix4
-rw-r--r--pkgs/cloud-hypervisor/0001-build-use-local-vhost.patch32
-rw-r--r--pkgs/cloud-hypervisor/0002-virtio-devices-add-a-GPU-device.patch266
-rw-r--r--pkgs/cloud-hypervisor/Cargo.lock430
-rw-r--r--pkgs/cloud-hypervisor/default.nix19
-rw-r--r--pkgs/cloud-hypervisor/vhost/0001-vhost-fix-receiving-reply-payloads.patch26
-rw-r--r--pkgs/cloud-hypervisor/vhost/0002-vhost_user-add-shared-memory-region-support.patch140
-rw-r--r--pkgs/cloud-hypervisor/vhost/0003-vhost_user-add-protocol-flag-for-shmem.patch16
-rw-r--r--pkgs/cloud-hypervisor/vhost/0004-vhost_user-renumber-SHARED_MEMORY_REGIONS.patch16
-rw-r--r--pkgs/default.nix2
-rw-r--r--pkgs/meson/default.nix13
-rw-r--r--pkgs/overlay.nix2
12 files changed, 555 insertions, 411 deletions
diff --git a/lib/nixpkgs.default.nix b/lib/nixpkgs.default.nix
index df34b52..eb65e39 100644
--- a/lib/nixpkgs.default.nix
+++ b/lib/nixpkgs.default.nix
@@ -4,6 +4,6 @@
 # Generated by scripts/update-nixpkgs.sh.
 
 import (builtins.fetchTarball {
-  url = "https://github.com/NixOS/nixpkgs/archive/97b17f32362e475016f942bbdfda4a4a72a8a652.tar.gz";
-  sha256 = "05zsb3yyfa3jf1bs79hdp1crgh6pw20lg117vyvfzixhdq42gjsi";
+  url = "https://github.com/NixOS/nixpkgs/archive/de0bf263cce70074a298ee4672ca3a503d66e39c.tar.gz";
+  sha256 = "1wh05qqihvmjnykxv8sncxcbim29d6wdx356w1zcwpmhm28rrrrj";
 })
diff --git a/pkgs/cloud-hypervisor/0001-build-use-local-vhost.patch b/pkgs/cloud-hypervisor/0001-build-use-local-vhost.patch
index e6d81e9..c83552c 100644
--- a/pkgs/cloud-hypervisor/0001-build-use-local-vhost.patch
+++ b/pkgs/cloud-hypervisor/0001-build-use-local-vhost.patch
@@ -1,4 +1,4 @@
-From cb9d39048282bc28d0a5be01be268dd74fbd3408 Mon Sep 17 00:00:00 2001
+From 407b410f3f802d4d5f37a5525fa29c8deaf8998e Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <alyssa.ross@unikie.com>
 Date: Wed, 28 Sep 2022 12:18:19 +0000
 Subject: [PATCH 1/2] build: use local vhost
@@ -14,40 +14,40 @@ Signed-off-by: Alyssa Ross <hi@alyssa.is>
  2 files changed, 2 insertions(+), 4 deletions(-)
 
 diff --git a/Cargo.lock b/Cargo.lock
-index 52afc0d1..bef28e85 100644
+index 533a473d..51b33209 100644
 --- a/Cargo.lock
 +++ b/Cargo.lock
-@@ -2371,8 +2371,6 @@ dependencies = [
+@@ -2376,8 +2376,6 @@ dependencies = [
  [[package]]
  name = "vhost"
- version = "0.9.0"
+ version = "0.10.0"
 -source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "289adfce099c71f8310f895932ccd978f352ca494ea47496dbe20d4241888b82"
+-checksum = "2b64e816d0d49769fbfaa1494eb77cc2a3ddc526ead05c7f922cb7d64106286f"
  dependencies = [
   "bitflags 2.4.1",
   "libc",
-@@ -2383,8 +2381,6 @@ dependencies = [
+@@ -2388,8 +2386,6 @@ dependencies = [
  [[package]]
  name = "vhost-user-backend"
- version = "0.11.0"
+ version = "0.13.1"
 -source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "61255322e3ebe93fb77d9f6d99577eca7089bbea4174076c5353a8024a463061"
+-checksum = "72c8c447d076ac508d78cb45664d203df7989e891656dce260a7e93d72352c9a"
  dependencies = [
   "libc",
   "log",
 diff --git a/Cargo.toml b/Cargo.toml
-index ceb1fc67..5d750eba 100644
+index 4ef23821..c0455bed 100644
 --- a/Cargo.toml
 +++ b/Cargo.toml
-@@ -55,6 +55,8 @@ zbus = { version = "3.11.1", optional = true }
- kvm-bindings = { git = "https://github.com/cloud-hypervisor/kvm-bindings", branch = "ch-v0.6.0-tdx" }
- kvm-ioctls = { git = "https://github.com/rust-vmm/kvm-ioctls", branch = "main" }
- versionize_derive = { git = "https://github.com/cloud-hypervisor/versionize_derive", branch = "ch" }
-+vhost = { path = "../vhost/crates/vhost" }
-+vhost-user-backend = { path = "../vhost/crates/vhost-user-backend" }
+@@ -54,6 +54,8 @@ zbus = { version = "3.11.1", optional = true }
+ [patch.crates-io]
+ kvm-bindings = { git = "https://github.com/cloud-hypervisor/kvm-bindings", branch = "ch-v0.7.0" }
+ versionize_derive = { git = "https://github.com/cloud-hypervisor/versionize_derive", branch = "ch-0.1.6" }
++vhost = { path = "../vhost/vhost" }
++vhost-user-backend = { path = "../vhost/vhost-user-backend" }
  
  [dev-dependencies]
  dirs = "5.0.0"
 -- 
-2.42.0
+2.43.0
 
diff --git a/pkgs/cloud-hypervisor/0002-virtio-devices-add-a-GPU-device.patch b/pkgs/cloud-hypervisor/0002-virtio-devices-add-a-GPU-device.patch
index 9840627..e6243c4 100644
--- a/pkgs/cloud-hypervisor/0002-virtio-devices-add-a-GPU-device.patch
+++ b/pkgs/cloud-hypervisor/0002-virtio-devices-add-a-GPU-device.patch
@@ -1,4 +1,4 @@
-From 24ef519720ced73b7fe75bc0d0c5171f67e3edb7 Mon Sep 17 00:00:00 2001
+From 3bf98eb53f3f9637e4d2ba3d07e62f1ece891788 Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <alyssa.ross@unikie.com>
 Date: Wed, 7 Sep 2022 14:16:29 +0000
 Subject: [PATCH 2/2] virtio-devices: add a GPU device
@@ -34,20 +34,22 @@ Signed-off-by: Alyssa Ross <hi@alyssa.is>
  virtio-devices/src/vhost_user/gpu.rs          | 415 ++++++++++++++++++
  virtio-devices/src/vhost_user/mod.rs          |   6 +
  .../src/vhost_user/vu_common_ctrl.rs          |   9 +-
- vmm/src/api/mod.rs                            |  10 +-
+ vmm/src/api/http/http_endpoint.rs             |   9 +-
+ vmm/src/api/http/mod.rs                       |  10 +-
+ vmm/src/api/mod.rs                            |  47 +-
  vmm/src/config.rs                             | 108 +++++
  vmm/src/device_manager.rs                     | 135 +++++-
- vmm/src/lib.rs                                |  86 +++-
+ vmm/src/lib.rs                                |  79 +++-
  vmm/src/vm.rs                                 |  28 +-
  vmm/src/vm_config.rs                          |  10 +
- 14 files changed, 829 insertions(+), 14 deletions(-)
+ 16 files changed, 871 insertions(+), 21 deletions(-)
  create mode 100644 virtio-devices/src/vhost_user/gpu.rs
 
 diff --git a/src/main.rs b/src/main.rs
-index 2edd116a..3970de2c 100644
+index 86d80562..149b4c74 100644
 --- a/src/main.rs
 +++ b/src/main.rs
-@@ -277,6 +277,13 @@ fn create_app(default_vcpus: String, default_memory: String, default_rng: String
+@@ -285,6 +285,13 @@ fn create_app(default_vcpus: String, default_memory: String, default_rng: String
                  .num_args(1..)
                  .group("vm-config"),
          )
@@ -61,7 +63,7 @@ index 2edd116a..3970de2c 100644
          .arg(
              Arg::new("pmem")
                  .long("pmem")
-@@ -850,6 +857,7 @@ mod unit_tests {
+@@ -885,6 +892,7 @@ mod unit_tests {
              },
              balloon: None,
              fs: None,
@@ -114,7 +116,7 @@ index 680cbe29..55428cd8 100644
      CreateSeccompFilter(seccompiler::Error),
      #[error("Failed to create rate limiter: {0}")]
 diff --git a/virtio-devices/src/seccomp_filters.rs b/virtio-devices/src/seccomp_filters.rs
-index 41585e77..1c7fc1bc 100644
+index b9e7e5f1..5d35ae5b 100644
 --- a/virtio-devices/src/seccomp_filters.rs
 +++ b/virtio-devices/src/seccomp_filters.rs
 @@ -22,6 +22,7 @@ pub enum Thread {
@@ -125,7 +127,7 @@ index 41585e77..1c7fc1bc 100644
      VirtioVhostNet,
      VirtioVhostNetCtl,
      VirtioVsock,
-@@ -163,6 +164,20 @@ fn virtio_vhost_fs_thread_rules() -> Vec<(i64, Vec<SeccompRule>)> {
+@@ -164,6 +165,20 @@ fn virtio_vhost_fs_thread_rules() -> Vec<(i64, Vec<SeccompRule>)> {
      ]
  }
  
@@ -146,7 +148,7 @@ index 41585e77..1c7fc1bc 100644
  fn virtio_vhost_net_ctl_thread_rules() -> Vec<(i64, Vec<SeccompRule>)> {
      vec![]
  }
-@@ -233,6 +248,7 @@ fn get_seccomp_rules(thread_type: Thread) -> Vec<(i64, Vec<SeccompRule>)> {
+@@ -234,6 +249,7 @@ fn get_seccomp_rules(thread_type: Thread) -> Vec<(i64, Vec<SeccompRule>)> {
          Thread::VirtioRng => virtio_rng_thread_rules(),
          Thread::VirtioVhostBlock => virtio_vhost_block_thread_rules(),
          Thread::VirtioVhostFs => virtio_vhost_fs_thread_rules(),
@@ -656,11 +658,66 @@ index 6f980f23..54511c52 100644
      pub fn negotiate_features_vhost_user(
          &mut self,
          avail_features: u64,
+diff --git a/vmm/src/api/http/http_endpoint.rs b/vmm/src/api/http/http_endpoint.rs
+index 141cc1d0..1cc8786b 100644
+--- a/vmm/src/api/http/http_endpoint.rs
++++ b/vmm/src/api/http/http_endpoint.rs
+@@ -8,10 +8,10 @@ use crate::api::http::{error_response, EndpointHandler, HttpError};
+ #[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
+ use crate::api::VmCoredump;
+ use crate::api::{
+-    AddDisk, ApiAction, ApiRequest, VmAddDevice, VmAddFs, VmAddNet, VmAddPmem, VmAddUserDevice,
+-    VmAddVdpa, VmAddVsock, VmBoot, VmConfig, VmCounters, VmDelete, VmPause, VmPowerButton,
+-    VmReboot, VmReceiveMigration, VmRemoveDevice, VmResize, VmResizeZone, VmRestore, VmResume,
+-    VmSendMigration, VmShutdown, VmSnapshot,
++    AddDisk, ApiAction, ApiRequest, VmAddDevice, VmAddFs, VmAddGpu, VmAddNet, VmAddPmem,
++    VmAddUserDevice, VmAddVdpa, VmAddVsock, VmBoot, VmConfig, VmCounters, VmDelete, VmPause,
++    VmPowerButton, VmReboot, VmReceiveMigration, VmRemoveDevice, VmResize, VmResizeZone, VmRestore,
++    VmResume, VmSendMigration, VmShutdown, VmSnapshot,
+ };
+ use crate::config::NetConfig;
+ use micro_http::{Body, Method, Request, Response, StatusCode, Version};
+@@ -176,6 +176,7 @@ vm_action_put_handler!(VmPowerButton);
+ vm_action_put_handler_body!(VmAddDevice);
+ vm_action_put_handler_body!(AddDisk);
+ vm_action_put_handler_body!(VmAddFs);
++vm_action_put_handler_body!(VmAddGpu);
+ vm_action_put_handler_body!(VmAddPmem);
+ vm_action_put_handler_body!(VmAddVdpa);
+ vm_action_put_handler_body!(VmAddVsock);
+diff --git a/vmm/src/api/http/mod.rs b/vmm/src/api/http/mod.rs
+index 2eac530f..8a15906f 100644
+--- a/vmm/src/api/http/mod.rs
++++ b/vmm/src/api/http/mod.rs
+@@ -7,9 +7,9 @@ use self::http_endpoint::{VmActionHandler, VmCreate, VmInfo, VmmPing, VmmShutdow
+ #[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
+ use crate::api::VmCoredump;
+ use crate::api::{
+-    AddDisk, ApiError, ApiRequest, VmAddDevice, VmAddFs, VmAddNet, VmAddPmem, VmAddUserDevice,
+-    VmAddVdpa, VmAddVsock, VmBoot, VmCounters, VmDelete, VmPause, VmPowerButton, VmReboot,
+-    VmReceiveMigration, VmRemoveDevice, VmResize, VmResizeZone, VmRestore, VmResume,
++    AddDisk, ApiError, ApiRequest, VmAddDevice, VmAddFs, VmAddGpu, VmAddNet, VmAddPmem,
++    VmAddUserDevice, VmAddVdpa, VmAddVsock, VmBoot, VmCounters, VmDelete, VmPause, VmPowerButton,
++    VmReboot, VmReceiveMigration, VmRemoveDevice, VmResize, VmResizeZone, VmRestore, VmResume,
+     VmSendMigration, VmShutdown, VmSnapshot,
+ };
+ use crate::seccomp_filters::{get_seccomp_filter, Thread};
+@@ -176,6 +176,10 @@ pub static HTTP_ROUTES: Lazy<HttpRoutes> = Lazy::new(|| {
+         endpoint!("/vm.add-fs"),
+         Box::new(VmActionHandler::new(&VmAddFs)),
+     );
++    r.routes.insert(
++        endpoint!("/vm.add-gpu"),
++        Box::new(VmActionHandler::new(&VmAddGpu)),
++    );
+     r.routes.insert(
+         endpoint!("/vm.add-net"),
+         Box::new(VmActionHandler::new(&VmAddNet)),
 diff --git a/vmm/src/api/mod.rs b/vmm/src/api/mod.rs
-index aaae8ee3..9433ee07 100644
+index ad74aa9e..142bc870 100644
 --- a/vmm/src/api/mod.rs
 +++ b/vmm/src/api/mod.rs
-@@ -38,8 +38,8 @@ pub use self::http::start_http_fd_thread;
+@@ -39,8 +39,8 @@ pub use self::http::start_http_fd_thread;
  pub use self::http::start_http_path_thread;
  
  use crate::config::{
@@ -671,7 +728,7 @@ index aaae8ee3..9433ee07 100644
  };
  use crate::device_tree::DeviceTree;
  use crate::vm::{Error as VmError, VmState};
-@@ -135,6 +135,9 @@ pub enum ApiError {
+@@ -139,6 +139,9 @@ pub enum ApiError {
      /// The fs could not be added to the VM.
      VmAddFs(VmError),
  
@@ -681,18 +738,69 @@ index aaae8ee3..9433ee07 100644
      /// The pmem device could not be added to the VM.
      VmAddPmem(VmError),
  
-@@ -306,6 +309,9 @@ pub enum ApiRequest {
-     /// Add a fs to the VM.
-     VmAddFs(Arc<FsConfig>, Sender<ApiResponse>),
+@@ -193,6 +196,7 @@ impl Display for ApiError {
+             ApplySeccompFilter(seccomp_error) => write!(f, "{}", seccomp_error),
+             VmAddDisk(vm_error) => write!(f, "{}", vm_error),
+             VmAddFs(vm_error) => write!(f, "{}", vm_error),
++            VmAddGpu(vm_error) => write!(f, "{}", vm_error),
+             VmAddPmem(vm_error) => write!(f, "{}", vm_error),
+             VmAddNet(vm_error) => write!(f, "{}", vm_error),
+             VmAddVdpa(vm_error) => write!(f, "{}", vm_error),
+@@ -332,6 +336,8 @@ pub trait RequestHandler {
+ 
+     fn vm_add_fs(&mut self, fs_cfg: FsConfig) -> Result<Option<Vec<u8>>, VmError>;
  
-+    /// Add a gpu to the VM.
-+    VmAddGpu(Arc<GpuConfig>, Sender<ApiResponse>),
++    fn vm_add_gpu(&mut self, gpu_cfg: GpuConfig) -> Result<Option<Vec<u8>>, VmError>;
 +
-     /// Add a pmem device to the VM.
-     VmAddPmem(Arc<PmemConfig>, Sender<ApiResponse>),
+     fn vm_add_pmem(&mut self, pmem_cfg: PmemConfig) -> Result<Option<Vec<u8>>, VmError>;
+ 
+     fn vm_add_net(&mut self, net_cfg: NetConfig) -> Result<Option<Vec<u8>>, VmError>;
+@@ -527,6 +533,43 @@ impl ApiAction for VmAddFs {
+     }
+ }
  
++pub struct VmAddGpu;
++
++impl ApiAction for VmAddGpu {
++    type RequestBody = GpuConfig;
++    type ResponseBody = Option<Body>;
++
++    fn request(
++        &self,
++        config: Self::RequestBody,
++        response_sender: Sender<ApiResponse>,
++    ) -> ApiRequest {
++        Box::new(move |vmm| {
++            info!("API request event: VmAddGpu {:?}", config);
++
++            let response = vmm
++                .vm_add_gpu(config)
++                .map_err(ApiError::VmAddGpu)
++                .map(ApiResponsePayload::VmAction);
++
++            response_sender
++                .send(response)
++                .map_err(VmmError::ApiResponseSend)?;
++
++            Ok(false)
++        })
++    }
++
++    fn send(
++        &self,
++        api_evt: EventFd,
++        api_sender: Sender<ApiRequest>,
++        data: Self::RequestBody,
++    ) -> ApiResult<Self::ResponseBody> {
++        get_response_body(self, api_evt, api_sender, data)
++    }
++}
++
+ pub struct VmAddPmem;
+ 
+ impl ApiAction for VmAddPmem {
 diff --git a/vmm/src/config.rs b/vmm/src/config.rs
-index 7ed48e0d..97086516 100644
+index 4b4e618a..d21c9655 100644
 --- a/vmm/src/config.rs
 +++ b/vmm/src/config.rs
 @@ -27,6 +27,8 @@ pub enum Error {
@@ -704,7 +812,7 @@ index 7ed48e0d..97086516 100644
      /// Missing persistent memory file parameter.
      ParsePmemFileMissing,
      /// Missing vsock socket path parameter.
-@@ -55,6 +57,8 @@ pub enum Error {
+@@ -57,6 +59,8 @@ pub enum Error {
      ParseBalloon(OptionParserError),
      /// Error parsing filesystem parameters
      ParseFileSystem(OptionParserError),
@@ -713,7 +821,7 @@ index 7ed48e0d..97086516 100644
      /// Error parsing persistent memory parameters
      ParsePersistentMemory(OptionParserError),
      /// Failed parsing console
-@@ -318,6 +322,8 @@ impl fmt::Display for Error {
+@@ -350,6 +354,8 @@ impl fmt::Display for Error {
              ParseFileSystem(o) => write!(f, "Error parsing --fs: {o}"),
              ParseFsSockMissing => write!(f, "Error parsing --fs: socket missing"),
              ParseFsTagMissing => write!(f, "Error parsing --fs: tag missing"),
@@ -722,7 +830,7 @@ index 7ed48e0d..97086516 100644
              ParsePersistentMemory(o) => write!(f, "Error parsing --pmem: {o}"),
              ParsePmemFileMissing => write!(f, "Error parsing --pmem: file missing"),
              ParseVsock(o) => write!(f, "Error parsing --vsock: {o}"),
-@@ -382,6 +388,7 @@ pub struct VmParams<'a> {
+@@ -416,6 +422,7 @@ pub struct VmParams<'a> {
      pub rng: &'a str,
      pub balloon: Option<&'a str>,
      pub fs: Option<Vec<&'a str>>,
@@ -730,7 +838,7 @@ index 7ed48e0d..97086516 100644
      pub pmem: Option<Vec<&'a str>>,
      pub serial: &'a str,
      pub console: &'a str,
-@@ -427,6 +434,9 @@ impl<'a> VmParams<'a> {
+@@ -468,6 +475,9 @@ impl<'a> VmParams<'a> {
          let fs: Option<Vec<&str>> = args
              .get_many::<String>("fs")
              .map(|x| x.map(|y| y as &str).collect());
@@ -740,7 +848,7 @@ index 7ed48e0d..97086516 100644
          let pmem: Option<Vec<&str>> = args
              .get_many::<String>("pmem")
              .map(|x| x.map(|y| y as &str).collect());
-@@ -468,6 +478,7 @@ impl<'a> VmParams<'a> {
+@@ -510,6 +520,7 @@ impl<'a> VmParams<'a> {
              rng,
              balloon,
              fs,
@@ -748,7 +856,7 @@ index 7ed48e0d..97086516 100644
              pmem,
              serial,
              console,
-@@ -1407,6 +1418,49 @@ impl FsConfig {
+@@ -1559,6 +1570,49 @@ impl FsConfig {
      }
  }
  
@@ -798,7 +906,7 @@ index 7ed48e0d..97086516 100644
  impl PmemConfig {
      pub const SYNTAX: &'static str = "Persistent memory parameters \
      \"file=<backing_file_path>,size=<persistent_memory_size>,iommu=on|off,\
-@@ -2000,6 +2054,17 @@ impl VmConfig {
+@@ -2237,6 +2291,17 @@ impl VmConfig {
              }
          }
  
@@ -816,7 +924,7 @@ index 7ed48e0d..97086516 100644
          if let Some(pmems) = &self.pmem {
              for pmem in pmems {
                  pmem.validate(self)?;
-@@ -2214,6 +2279,15 @@ impl VmConfig {
+@@ -2467,6 +2532,15 @@ impl VmConfig {
              fs = Some(fs_config_list);
          }
  
@@ -832,7 +940,7 @@ index 7ed48e0d..97086516 100644
          let mut pmem: Option<Vec<PmemConfig>> = None;
          if let Some(pmem_list) = &vm_params.pmem {
              let mut pmem_config_list = Vec::new();
-@@ -2329,6 +2403,7 @@ impl VmConfig {
+@@ -2585,6 +2659,7 @@ impl VmConfig {
              rng,
              balloon,
              fs,
@@ -840,7 +948,7 @@ index 7ed48e0d..97086516 100644
              pmem,
              serial,
              console,
-@@ -2383,6 +2458,13 @@ impl VmConfig {
+@@ -2641,6 +2716,13 @@ impl VmConfig {
              removed |= fs.len() != len;
          }
  
@@ -854,7 +962,7 @@ index 7ed48e0d..97086516 100644
          // Remove if net device
          if let Some(net) = self.net.as_mut() {
              let len = net.len();
-@@ -2452,6 +2534,7 @@ impl Clone for VmConfig {
+@@ -2711,6 +2793,7 @@ impl Clone for VmConfig {
              rng: self.rng.clone(),
              balloon: self.balloon.clone(),
              fs: self.fs.clone(),
@@ -862,29 +970,31 @@ index 7ed48e0d..97086516 100644
              pmem: self.pmem.clone(),
              serial: self.serial.clone(),
              console: self.console.clone(),
-@@ -2846,6 +2929,21 @@ mod tests {
+@@ -3177,6 +3260,23 @@ mod tests {
          Ok(())
      }
  
++    fn gpu_fixture() -> GpuConfig {
++        GpuConfig {
++            socket: PathBuf::from("/tmp/sock"),
++            id: None,
++            pci_segment: 0,
++        }
++    }
++
 +    #[test]
 +    fn test_parse_gpu() -> Result<()> {
 +        // "socket" must be supplied
 +        assert!(GpuConfig::parse("").is_err());
-+        assert_eq!(
-+            GpuConfig::parse("socket=/tmp/sock")?,
-+            GpuConfig {
-+                socket: PathBuf::from("/tmp/sock"),
-+                ..Default::default()
-+            }
-+        );
++        assert_eq!(GpuConfig::parse("socket=/tmp/sock")?, gpu_fixture());
 +
 +        Ok(())
 +    }
 +
-     #[test]
-     fn test_pmem_parsing() -> Result<()> {
-         // Must always give a file and size
-@@ -3096,6 +3194,7 @@ mod tests {
+     fn pmem_fixture() -> PmemConfig {
+         PmemConfig {
+             file: PathBuf::from("/tmp/pmem"),
+@@ -3463,6 +3563,7 @@ mod tests {
              },
              balloon: None,
              fs: None,
@@ -892,14 +1002,12 @@ index 7ed48e0d..97086516 100644
              pmem: None,
              serial: ConsoleConfig {
                  file: None,
-@@ -3260,6 +3359,15 @@ mod tests {
+@@ -3630,6 +3731,13 @@ mod tests {
              Err(ValidationError::VhostUserRequiresSharedMemory)
          );
  
 +        let mut invalid_config = valid_config.clone();
-+        invalid_config.gpu = Some(vec![GpuConfig {
-+            ..Default::default()
-+        }]);
++        invalid_config.gpu = Some(vec![gpu_fixture()]);
 +        assert_eq!(
 +            invalid_config.validate(),
 +            Err(ValidationError::VhostUserRequiresSharedMemory)
@@ -909,7 +1017,7 @@ index 7ed48e0d..97086516 100644
          still_valid_config.memory.shared = true;
          assert!(still_valid_config.validate().is_ok());
 diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs
-index 883f0c04..847aea72 100644
+index 6c8e5bc9..460ee543 100644
 --- a/vmm/src/device_manager.rs
 +++ b/vmm/src/device_manager.rs
 @@ -10,8 +10,8 @@
@@ -923,15 +1031,15 @@ index 883f0c04..847aea72 100644
  };
  use crate::cpu::{CpuManager, CPU_MANAGER_ACPI_SIZE};
  use crate::device_tree::{DeviceNode, DeviceTree};
-@@ -66,6 +66,7 @@ use serde::{Deserialize, Serialize};
- use std::collections::{BTreeSet, HashMap};
+@@ -67,6 +67,7 @@ use serde::{Deserialize, Serialize};
+ use std::collections::{BTreeMap, BTreeSet, HashMap};
  use std::fs::{read_link, File, OpenOptions};
  use std::io::{self, stdout, Seek, SeekFrom};
 +use std::iter::once;
  use std::mem::zeroed;
  use std::num::Wrapping;
  use std::os::unix::fs::OpenOptionsExt;
-@@ -81,6 +82,7 @@ use virtio_devices::transport::{VirtioPciDevice, VirtioPciDeviceActivator};
+@@ -82,6 +83,7 @@ use virtio_devices::transport::{VirtioPciDevice, VirtioPciDeviceActivator};
  use virtio_devices::vhost_user::VhostUserConfig;
  use virtio_devices::{
      AccessPlatformMapping, ActivateError, VdpaDmaMapping, VirtioMemMappingSource,
@@ -939,7 +1047,7 @@ index 883f0c04..847aea72 100644
  };
  use virtio_devices::{Endpoint, IommuMapping};
  use vm_allocator::{AddressAllocator, SystemAllocator};
-@@ -122,6 +124,7 @@ const PVPANIC_DEVICE_NAME: &str = "__pvpanic";
+@@ -127,6 +129,7 @@ const PVPANIC_DEVICE_NAME: &str = "__pvpanic";
  // identifiers if the user doesn't give one
  const DISK_DEVICE_NAME_PREFIX: &str = "_disk";
  const FS_DEVICE_NAME_PREFIX: &str = "_fs";
@@ -947,7 +1055,7 @@ index 883f0c04..847aea72 100644
  const NET_DEVICE_NAME_PREFIX: &str = "_net";
  const PMEM_DEVICE_NAME_PREFIX: &str = "_pmem";
  const VDPA_DEVICE_NAME_PREFIX: &str = "_vdpa";
-@@ -158,9 +161,15 @@ pub enum DeviceManagerError {
+@@ -163,9 +166,15 @@ pub enum DeviceManagerError {
      /// Cannot create virtio-fs device
      CreateVirtioFs(virtio_devices::vhost_user::Error),
  
@@ -963,7 +1071,7 @@ index 883f0c04..847aea72 100644
      /// Cannot create vhost-user-blk device
      CreateVhostUserBlk(virtio_devices::vhost_user::Error),
  
-@@ -245,6 +254,9 @@ pub enum DeviceManagerError {
+@@ -250,6 +259,9 @@ pub enum DeviceManagerError {
      /// Cannot find a memory range for virtio-fs
      FsRangeAllocation,
  
@@ -973,7 +1081,7 @@ index 883f0c04..847aea72 100644
      /// Error creating serial output file
      SerialOutputFileOpen(io::Error),
  
-@@ -2156,6 +2168,9 @@ impl DeviceManager {
+@@ -2304,6 +2316,9 @@ impl DeviceManager {
          // Add virtio-fs if required
          devices.append(&mut self.make_virtio_fs_devices()?);
  
@@ -983,7 +1091,7 @@ index 883f0c04..847aea72 100644
          // Add virtio-pmem if required
          devices.append(&mut self.make_virtio_pmem_devices()?);
  
-@@ -2685,6 +2700,114 @@ impl DeviceManager {
+@@ -2875,6 +2890,114 @@ impl DeviceManager {
          Ok(devices)
      }
  
@@ -1098,7 +1206,7 @@ index 883f0c04..847aea72 100644
      fn make_virtio_pmem_device(
          &mut self,
          pmem_cfg: &mut PmemConfig,
-@@ -3948,6 +4071,7 @@ impl DeviceManager {
+@@ -4138,6 +4261,7 @@ impl DeviceManager {
                  | VirtioDeviceType::Block
                  | VirtioDeviceType::Pmem
                  | VirtioDeviceType::Fs
@@ -1106,7 +1214,7 @@ index 883f0c04..847aea72 100644
                  | VirtioDeviceType::Vsock => {}
                  _ => return Err(DeviceManagerError::RemovalNotAllowed(device_type)),
              }
-@@ -4220,6 +4344,13 @@ impl DeviceManager {
+@@ -4410,6 +4534,13 @@ impl DeviceManager {
          self.hotplug_virtio_pci_device(device)
      }
  
@@ -1121,7 +1229,7 @@ index 883f0c04..847aea72 100644
          self.validate_identifier(&pmem_cfg.id)?;
  
 diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs
-index 23cd36d0..38ae9a2b 100644
+index 121f14a5..951bc93b 100644
 --- a/vmm/src/lib.rs
 +++ b/vmm/src/lib.rs
 @@ -13,8 +13,8 @@ use crate::api::{
@@ -1135,7 +1243,7 @@ index 23cd36d0..38ae9a2b 100644
  };
  #[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
  use crate::coredump::GuestDebuggable;
-@@ -1176,6 +1176,32 @@ impl Vmm {
+@@ -1704,6 +1704,32 @@ impl RequestHandler for Vmm {
          }
      }
  
@@ -1168,21 +1276,7 @@ index 23cd36d0..38ae9a2b 100644
      fn vm_add_pmem(&mut self, pmem_cfg: PmemConfig) -> result::Result<Option<Vec<u8>>, VmError> {
          self.vm_config.as_ref().ok_or(VmError::VmNotCreated)?;
  
-@@ -2128,6 +2154,13 @@ impl Vmm {
-                                         .map(ApiResponsePayload::VmAction);
-                                     sender.send(response).map_err(Error::ApiResponseSend)?;
-                                 }
-+                                ApiRequest::VmAddGpu(add_gpu_data, sender) => {
-+                                    let response = self
-+                                        .vm_add_gpu(add_gpu_data.as_ref().clone())
-+                                        .map_err(ApiError::VmAddGpu)
-+                                        .map(ApiResponsePayload::VmAction);
-+                                    sender.send(response).map_err(Error::ApiResponseSend)?;
-+                                }
-                                 ApiRequest::VmAddPmem(add_pmem_data, sender) => {
-                                     let response = self
-                                         .vm_add_pmem(add_pmem_data.as_ref().clone())
-@@ -2293,6 +2326,7 @@ mod unit_tests {
+@@ -2094,6 +2120,7 @@ mod unit_tests {
              },
              balloon: None,
              fs: None,
@@ -1190,7 +1284,7 @@ index 23cd36d0..38ae9a2b 100644
              pmem: None,
              serial: ConsoleConfig {
                  file: None,
-@@ -2522,6 +2556,54 @@ mod unit_tests {
+@@ -2325,6 +2352,54 @@ mod unit_tests {
          );
      }
  
@@ -1246,7 +1340,7 @@ index 23cd36d0..38ae9a2b 100644
      fn test_vmm_vm_cold_add_pmem() {
          let mut vmm = create_dummy_vmm();
 diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs
-index fc42202e..d70318d3 100644
+index 43a04bfe..5cdd8fcf 100644
 --- a/vmm/src/vm.rs
 +++ b/vmm/src/vm.rs
 @@ -12,8 +12,8 @@
@@ -1260,7 +1354,7 @@ index fc42202e..d70318d3 100644
  };
  use crate::config::{NumaConfig, PayloadConfig};
  #[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
-@@ -1560,6 +1560,30 @@ impl Vm {
+@@ -1582,6 +1582,30 @@ impl Vm {
          Ok(pci_device_info)
      }
  
@@ -1292,14 +1386,14 @@ index fc42202e..d70318d3 100644
          let pci_device_info = self
              .device_manager
 diff --git a/vmm/src/vm_config.rs b/vmm/src/vm_config.rs
-index 100a4898..c4af5851 100644
+index 51e7847e..afc5c72b 100644
 --- a/vmm/src/vm_config.rs
 +++ b/vmm/src/vm_config.rs
-@@ -423,6 +423,15 @@ impl Default for FsConfig {
-     }
+@@ -365,6 +365,15 @@ pub fn default_fsconfig_queue_size() -> u16 {
+     1024
  }
  
-+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
++#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
 +pub struct GpuConfig {
 +    pub socket: PathBuf,
 +    #[serde(default)]
@@ -1308,10 +1402,10 @@ index 100a4898..c4af5851 100644
 +    pub pci_segment: u16,
 +}
 +
- #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
+ #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
  pub struct PmemConfig {
      pub file: PathBuf,
-@@ -597,6 +606,7 @@ pub struct VmConfig {
+@@ -561,6 +570,7 @@ pub struct VmConfig {
      pub rng: RngConfig,
      pub balloon: Option<BalloonConfig>,
      pub fs: Option<Vec<FsConfig>>,
@@ -1320,5 +1414,5 @@ index 100a4898..c4af5851 100644
      #[serde(default = "default_serial")]
      pub serial: ConsoleConfig,
 -- 
-2.42.0
+2.43.0
 
diff --git a/pkgs/cloud-hypervisor/Cargo.lock b/pkgs/cloud-hypervisor/Cargo.lock
index bef28e8..51b3320 100644
--- a/pkgs/cloud-hypervisor/Cargo.lock
+++ b/pkgs/cloud-hypervisor/Cargo.lock
@@ -5,7 +5,7 @@ version = 3
 [[package]]
 name = "acpi_tables"
 version = "0.1.0"
-source = "git+https://github.com/rust-vmm/acpi_tables?branch=main#1a733bf690ccc10bdfeacad33e3c9f6cce0008fd"
+source = "git+https://github.com/rust-vmm/acpi_tables?branch=main#76e8552f57f76ca918e19c0a7b7480d2fa2c7241"
 dependencies = [
  "zerocopy",
 ]
@@ -50,9 +50,9 @@ dependencies = [
 
 [[package]]
 name = "anstyle"
-version = "1.0.1"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
 
 [[package]]
 name = "anstyle-parse"
@@ -65,28 +65,28 @@ dependencies = [
 
 [[package]]
 name = "anstyle-query"
-version = "1.0.0"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
 dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anstyle-wincon"
-version = "3.0.1"
+version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
 dependencies = [
  "anstyle",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.75"
+version = "1.0.79"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
 
 [[package]]
 name = "api_client"
@@ -135,13 +135,15 @@ dependencies = [
 
 [[package]]
 name = "async-channel"
-version = "1.9.0"
+version = "2.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c"
 dependencies = [
  "concurrent-queue",
- "event-listener 2.5.3",
+ "event-listener 4.0.0",
+ "event-listener-strategy",
  "futures-core",
+ "pin-project-lite",
 ]
 
 [[package]]
@@ -223,7 +225,7 @@ dependencies = [
  "cfg-if",
  "event-listener 3.0.0",
  "futures-lite 1.13.0",
- "rustix 0.38.8",
+ "rustix 0.38.25",
  "windows-sys 0.48.0",
 ]
 
@@ -235,7 +237,7 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -265,13 +267,13 @@ checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
 
 [[package]]
 name = "async-trait"
-version = "0.1.74"
+version = "0.1.76"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+checksum = "531b97fb4cd3dfdce92c35dedbfdc1f0b9d8091c8ca943d6dae340ef5012d514"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -312,13 +314,13 @@ dependencies = [
 
 [[package]]
 name = "bitfield-struct"
-version = "0.5.4"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eac32db62a43cf33353ce30b4a208b08193ea2086a1c6c004acb0073c706a29d"
+checksum = "a26b8cea8bb6a81b75a84603b9e096f05fa86db057904ef29be1deee900532bd"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -338,7 +340,7 @@ name = "block"
 version = "0.1.0"
 dependencies = [
  "byteorder",
- "crc32c",
+ "crc-any",
  "io-uring",
  "libc",
  "log",
@@ -366,17 +368,18 @@ dependencies = [
 
 [[package]]
 name = "blocking"
-version = "1.3.1"
+version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
 dependencies = [
  "async-channel",
- "async-lock 2.7.0",
+ "async-lock 3.2.0",
  "async-task",
- "atomic-waker",
- "fastrand 1.9.0",
- "futures-lite 1.13.0",
- "log",
+ "fastrand 2.0.0",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "piper",
+ "tracing",
 ]
 
 [[package]]
@@ -436,7 +439,7 @@ checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
 
 [[package]]
 name = "cloud-hypervisor"
-version = "37.0.0"
+version = "38.0.0"
 dependencies = [
  "anyhow",
  "api_client",
@@ -473,9 +476,9 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
 
 [[package]]
 name = "concurrent-queue"
-version = "2.3.0"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
 dependencies = [
  "crossbeam-utils",
 ]
@@ -490,12 +493,12 @@ dependencies = [
 ]
 
 [[package]]
-name = "crc32c"
-version = "0.6.4"
+name = "crc-any"
+version = "2.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74"
+checksum = "c01a5e1f881f6fb6099a7bdf949e946719fd4f1fefa56264890574febf0eb6d0"
 dependencies = [
- "rustc_version",
+ "debug-helper",
 ]
 
 [[package]]
@@ -509,18 +512,15 @@ dependencies = [
 
 [[package]]
 name = "crc64"
-version = "1.0.0"
+version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55626594feae15d266d52440b26ff77de0e22230cf0c113abe619084c1ddc910"
+checksum = "2707e3afba5e19b75d582d88bc79237418f2a2a2d673d01cf9b03633b46e98f3"
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
-dependencies = [
- "cfg-if",
-]
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
 
 [[package]]
 name = "crypto-common"
@@ -534,9 +534,9 @@ dependencies = [
 
 [[package]]
 name = "darling"
-version = "0.20.3"
+version = "0.20.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
+checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955"
 dependencies = [
  "darling_core",
  "darling_macro",
@@ -544,30 +544,36 @@ dependencies = [
 
 [[package]]
 name = "darling_core"
-version = "0.20.3"
+version = "0.20.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
+checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855"
 dependencies = [
  "fnv",
  "ident_case",
  "proc-macro2",
  "quote",
  "strsim",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "darling_macro"
-version = "0.20.3"
+version = "0.20.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
+checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be"
 dependencies = [
  "darling_core",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
 name = "derivative"
 version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -605,9 +611,9 @@ dependencies = [
 
 [[package]]
 name = "dhat"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f2aaf837aaf456f6706cb46386ba8dffd4013a757e36f4ea05c20dd46b209a3"
+checksum = "98cd11d84628e233de0ce467de10b8633f4ddaecafadefc86e13b84b8739b827"
 dependencies = [
  "backtrace",
  "lazy_static",
@@ -668,14 +674,14 @@ checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "env_logger"
-version = "0.10.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
 dependencies = [
  "humantime",
  "is-terminal",
@@ -801,9 +807,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
 [[package]]
 name = "futures"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -816,9 +822,9 @@ dependencies = [
 
 [[package]]
 name = "futures-channel"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -826,15 +832,15 @@ dependencies = [
 
 [[package]]
 name = "futures-core"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -843,9 +849,9 @@ dependencies = [
 
 [[package]]
 name = "futures-io"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
 
 [[package]]
 name = "futures-lite"
@@ -877,32 +883,32 @@ dependencies = [
 
 [[package]]
 name = "futures-macro"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "futures-sink"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
 
 [[package]]
 name = "futures-task"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
 
 [[package]]
 name = "futures-util"
-version = "0.3.28"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -918,9 +924,9 @@ dependencies = [
 
 [[package]]
 name = "gdbstub"
-version = "0.7.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09a8b954f9d02b74fe8e89a1c77bd9a6b8206713ebf1b272bfad9573b4a86f88"
+checksum = "6341b3480afbb34eaefc7f92713bc92f2d83e338aaa1c44192f9c2956f4a4903"
 dependencies = [
  "bitflags 2.4.1",
  "cfg-if",
@@ -952,9 +958,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.10"
+version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
 dependencies = [
  "cfg-if",
  "js-sys",
@@ -1121,7 +1127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
 dependencies = [
  "hermit-abi",
- "rustix 0.38.8",
+ "rustix 0.38.25",
  "windows-sys 0.48.0",
 ]
 
@@ -1142,8 +1148,8 @@ dependencies = [
 
 [[package]]
 name = "kvm-bindings"
-version = "0.6.0"
-source = "git+https://github.com/cloud-hypervisor/kvm-bindings?branch=ch-v0.6.0-tdx#7d9ffb47e5b9b1989577258800a0f57c93f1445f"
+version = "0.7.0"
+source = "git+https://github.com/cloud-hypervisor/kvm-bindings?branch=ch-v0.7.0#2dcf85d4f8aa55befcaa996b699ddb18ec9ed059"
 dependencies = [
  "serde",
  "serde_derive",
@@ -1152,9 +1158,11 @@ dependencies = [
 
 [[package]]
 name = "kvm-ioctls"
-version = "0.13.0"
-source = "git+https://github.com/rust-vmm/kvm-ioctls?branch=main#23a3bb045a467e60bb00328a0b13cea13b5815d0"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9002dff009755414f22b962ec6ae6980b07d6d8b06e5297b1062019d72bd6a8c"
 dependencies = [
+ "bitflags 2.4.1",
  "kvm-bindings",
  "libc",
  "vmm-sys-util",
@@ -1168,9 +1176,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.147"
+version = "0.2.153"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
 
 [[package]]
 name = "libssh2-sys"
@@ -1200,9 +1208,9 @@ dependencies = [
 
 [[package]]
 name = "linux-loader"
-version = "0.10.0"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "132a531b85b3a164012ab682c72f8f2cce7757f187be5f60782fd2b4cda9cb34"
+checksum = "eb68dd3452f25a8defaf0ae593509cff0c777683e4d8924f59ac7c5f89267a83"
 dependencies = [
  "vm-memory",
 ]
@@ -1215,9 +1223,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.4.5"
+version = "0.4.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
 
 [[package]]
 name = "lock_api"
@@ -1259,7 +1267,7 @@ dependencies = [
 [[package]]
 name = "micro_http"
 version = "0.1.0"
-source = "git+https://github.com/firecracker-microvm/micro-http?branch=main#a4d632f2c5ea45712c0d2002dc909a63879e85c3"
+source = "git+https://github.com/firecracker-microvm/micro-http?branch=main#e75dfa1eeea23b69caa7407bc2c3a76d7b7262fb"
 dependencies = [
  "libc",
  "vmm-sys-util",
@@ -1287,7 +1295,7 @@ dependencies = [
 [[package]]
 name = "mshv-bindings"
 version = "0.1.1"
-source = "git+https://github.com/rust-vmm/mshv?branch=main#0dd4d3452a7f2e95199f4b58380acc41458474de"
+source = "git+https://github.com/rust-vmm/mshv?branch=main#9d0c11fe9fedfbcf56a5d62fbf4bad80cdf91340"
 dependencies = [
  "libc",
  "serde",
@@ -1299,7 +1307,7 @@ dependencies = [
 [[package]]
 name = "mshv-ioctls"
 version = "0.1.1"
-source = "git+https://github.com/rust-vmm/mshv?branch=main#0dd4d3452a7f2e95199f4b58380acc41458474de"
+source = "git+https://github.com/rust-vmm/mshv?branch=main#9d0c11fe9fedfbcf56a5d62fbf4bad80cdf91340"
 dependencies = [
  "libc",
  "mshv-bindings",
@@ -1385,9 +1393,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.18.0"
+version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 
 [[package]]
 name = "open-enum"
@@ -1420,9 +1428,9 @@ dependencies = [
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.93"
+version = "0.9.99"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
+checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
 dependencies = [
  "cc",
  "libc",
@@ -1549,22 +1557,22 @@ dependencies = [
 
 [[package]]
 name = "pin-project"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1580,6 +1588,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.0",
+ "futures-io",
+]
+
+[[package]]
 name = "pkg-config"
 version = "0.3.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1630,7 +1649,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "regex",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1710,18 +1729,18 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.70"
+version = "1.0.78"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
 dependencies = [
  "proc-macro2",
 ]
@@ -1766,8 +1785,10 @@ checksum = "8edc89eaa583cf6bc4c6ef16a219f0a60d342ca3bf0eae793560038ac8af1795"
 name = "rate_limiter"
 version = "0.1.0"
 dependencies = [
+ "epoll",
  "libc",
  "log",
+ "thiserror",
  "vmm-sys-util",
 ]
 
@@ -1837,7 +1858,7 @@ checksum = "bce3a7139d2ee67d07538ee5dba997364fbc243e7e7143e96eb830c74bfaa082"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1853,15 +1874,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 
 [[package]]
-name = "rustc_version"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
-dependencies = [
- "semver",
-]
-
-[[package]]
 name = "rustix"
 version = "0.37.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1877,14 +1889,14 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.38.8"
+version = "0.38.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
 dependencies = [
  "bitflags 2.4.1",
  "errno",
  "libc",
- "linux-raw-sys 0.4.5",
+ "linux-raw-sys 0.4.13",
  "windows-sys 0.48.0",
 ]
 
@@ -1910,36 +1922,30 @@ dependencies = [
 ]
 
 [[package]]
-name = "semver"
-version = "1.0.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
-
-[[package]]
 name = "serde"
-version = "1.0.168"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d614f89548720367ded108b3c843be93f3a341e22d5674ca0dd5cd57f34926af"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.168"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4fe589678c688e44177da4f27152ee2d190757271dc7f1d5b6b9f68d869d641"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.107"
+version = "1.0.109"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+checksum = "cb0652c533506ad7a2e353cce269330d6afd8bdfb6d75e0ace5b35aacbd7b9e9"
 dependencies = [
  "itoa",
  "ryu",
@@ -1954,7 +1960,7 @@ checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1976,7 +1982,7 @@ dependencies = [
  "darling",
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -2024,9 +2030,9 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.11.0"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
 
 [[package]]
 name = "socket2"
@@ -2084,9 +2090,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.31"
+version = "2.0.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2112,7 +2118,7 @@ dependencies = [
  "cfg-if",
  "fastrand 2.0.0",
  "redox_syscall 0.3.5",
- "rustix 0.38.8",
+ "rustix 0.38.25",
  "windows-sys 0.48.0",
 ]
 
@@ -2131,7 +2137,7 @@ version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
 dependencies = [
- "rustix 0.38.8",
+ "rustix 0.38.25",
  "windows-sys 0.48.0",
 ]
 
@@ -2152,22 +2158,22 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.40"
+version = "1.0.52"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.40"
+version = "1.0.52"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -2219,11 +2225,10 @@ dependencies = [
 
 [[package]]
 name = "tracing"
-version = "0.1.37"
+version = "0.1.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
 dependencies = [
- "cfg-if",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -2231,20 +2236,20 @@ dependencies = [
 
 [[package]]
 name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
 dependencies = [
  "once_cell",
 ]
@@ -2300,9 +2305,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 
 [[package]]
 name = "versionize"
-version = "0.1.10"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dca4b7062e7e6d685901e815c35f9671e059de97c1c0905eeff8592f3fff442f"
+checksum = "62929d59c7f6730b7298fcb363760550f4db6e353fbac4076d447d0e82799d6d"
 dependencies = [
  "bincode",
  "crc64",
@@ -2317,8 +2322,8 @@ dependencies = [
 
 [[package]]
 name = "versionize_derive"
-version = "0.1.4"
-source = "git+https://github.com/cloud-hypervisor/versionize_derive?branch=ch#e502b1d4aabab342386f0c53780d49f21a6a1df6"
+version = "0.1.6"
+source = "git+https://github.com/cloud-hypervisor/versionize_derive?branch=ch-0.1.6#7906da996152e2d0ab08f5526440683bf3ca7834"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2328,7 +2333,7 @@ dependencies = [
 [[package]]
 name = "vfio-bindings"
 version = "0.4.0"
-source = "git+https://github.com/rust-vmm/vfio?branch=main#59c604fa6e42080f0a47c124ba29454fe4cb7475"
+source = "git+https://github.com/rust-vmm/vfio?branch=main#0daff4d4c159e842cf18b8b90457a45032b2df5a"
 dependencies = [
  "vmm-sys-util",
 ]
@@ -2336,7 +2341,7 @@ dependencies = [
 [[package]]
 name = "vfio-ioctls"
 version = "0.2.0"
-source = "git+https://github.com/rust-vmm/vfio?branch=main#59c604fa6e42080f0a47c124ba29454fe4cb7475"
+source = "git+https://github.com/rust-vmm/vfio?branch=main#0daff4d4c159e842cf18b8b90457a45032b2df5a"
 dependencies = [
  "byteorder",
  "kvm-bindings",
@@ -2354,7 +2359,7 @@ dependencies = [
 [[package]]
 name = "vfio_user"
 version = "0.1.0"
-source = "git+https://github.com/rust-vmm/vfio-user?branch=main#6c72e997e61d9e84b8ee691ad63ece6c717cf5aa"
+source = "git+https://github.com/rust-vmm/vfio-user?branch=main#a1f6e52829e069b6d698b2cfeecac742e4653186"
 dependencies = [
  "bitflags 1.3.2",
  "libc",
@@ -2370,7 +2375,7 @@ dependencies = [
 
 [[package]]
 name = "vhost"
-version = "0.9.0"
+version = "0.10.0"
 dependencies = [
  "bitflags 2.4.1",
  "libc",
@@ -2380,7 +2385,7 @@ dependencies = [
 
 [[package]]
 name = "vhost-user-backend"
-version = "0.11.0"
+version = "0.13.1"
 dependencies = [
  "libc",
  "log",
@@ -2470,9 +2475,9 @@ dependencies = [
 
 [[package]]
 name = "virtio-queue"
-version = "0.10.0"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73a01db2cfb6c4b9bc20608b1336263d16714ea8db05de9fec2a254e076f9385"
+checksum = "e3f69a13d6610db9312acbb438b0390362af905d37634a2106be70c0f734986d"
 dependencies = [
  "log",
  "virtio-bindings",
@@ -2509,9 +2514,9 @@ source = "git+https://github.com/rust-vmm/vm-fdt?branch=main#77212bd0d62913e445c
 
 [[package]]
 name = "vm-memory"
-version = "0.13.1"
+version = "0.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5376c9ee5ebe2103a310d8241936cfb93c946734b0479a4fa5bdf7a64abbacd8"
+checksum = "74ffc42216c32c35f858fa4bfdcd9b61017dfd691e0240268fdc85dbf59e5459"
 dependencies = [
  "arc-swap",
  "libc",
@@ -2575,6 +2580,7 @@ dependencies = [
  "option_parser",
  "pci",
  "range_map_vec",
+ "rate_limiter",
  "seccompiler",
  "serde",
  "serde_json",
@@ -2601,9 +2607,9 @@ dependencies = [
 
 [[package]]
 name = "vmm-sys-util"
-version = "0.11.1"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd64fe09d8e880e600c324e7d664760a17f56e9672b7495a86381b49e4f72f46"
+checksum = "1d1435039746e20da4f8d507a72ee1b916f7b4b05af7a91c093d2c6561934ede"
 dependencies = [
  "bitflags 1.3.2",
  "libc",
@@ -2653,7 +2659,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
  "wasm-bindgen-shared",
 ]
 
@@ -2675,7 +2681,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -2736,6 +2742,15 @@ dependencies = [
 ]
 
 [[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
 name = "windows-targets"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2766,6 +2781,21 @@ dependencies = [
 ]
 
 [[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
 name = "windows_aarch64_gnullvm"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2778,6 +2808,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
 
 [[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
 name = "windows_aarch64_msvc"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2790,6 +2826,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
 
 [[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
 name = "windows_i686_gnu"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2802,6 +2844,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
 
 [[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
 name = "windows_i686_msvc"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2814,6 +2862,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
 
 [[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
 name = "windows_x86_64_gnu"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2826,6 +2880,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
 
 [[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
 name = "windows_x86_64_gnullvm"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2838,6 +2898,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
 
 [[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
 name = "windows_x86_64_msvc"
 version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2850,10 +2916,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
 
 [[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
 name = "winnow"
-version = "0.5.18"
+version = "0.5.39"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32"
+checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29"
 dependencies = [
  "memchr",
 ]
@@ -2936,9 +3008,9 @@ dependencies = [
 
 [[package]]
 name = "zerocopy"
-version = "0.7.21"
+version = "0.7.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "686b7e407015242119c33dab17b8f61ba6843534de936d94368856528eae4dcc"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
 dependencies = [
  "byteorder",
  "zerocopy-derive",
@@ -2946,13 +3018,13 @@ dependencies = [
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.7.21"
+version = "0.7.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "020f3dfe25dfc38dfea49ce62d5d45ecdd7f0d8a724fa63eb36b6eba4ec76806"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.31",
+ "syn 2.0.48",
 ]
 
 [[package]]
diff --git a/pkgs/cloud-hypervisor/default.nix b/pkgs/cloud-hypervisor/default.nix
index 9364e3c..4a1d555 100644
--- a/pkgs/cloud-hypervisor/default.nix
+++ b/pkgs/cloud-hypervisor/default.nix
@@ -12,15 +12,14 @@ final.rustPlatform.buildRustPackage {
   cargoLock = {
     lockFile = ./Cargo.lock;
     outputHashes = {
-      "acpi_tables-0.1.0" = "sha256-FYjzwCSjuTUDCCQPC2ccDpwRRaG1eT5XgV/b8uSu8uc=";
+      "acpi_tables-0.1.0" = "sha256-syDq+db1hTne6QoP0vMGUv4tB0J9arQG2Ea2hHW1k3M=";
       "igvm-0.1.0" = "sha256-l+Qyhdy3b8h8hPLHg5M0os8aSkjM55hAP5nqi0AGmjo=";
-      "kvm-bindings-0.6.0" = "sha256-wGdAuPwsgRIqx9dh0m+hC9A/Akz9qg9BM+p06Fi5ACM=";
-      "kvm-ioctls-0.13.0" = "sha256-jHnFGwBWnAa2lRu4a5eRNy1Y26NX5MV8alJ86VR++QE=";
-      "micro_http-0.1.0" = "sha256-Ov75Gs+wSmsxOHJu024nWtOJp0cKpS8bkxJJGW6jiKw=";
-      "mshv-bindings-0.1.1" = "sha256-4ADpLvi9hmHsMyGtqDQ2Msa3aMZmJsi4BPW7B5ZfAMw=";
-      "versionize_derive-0.1.4" = "sha256-oGuREJ5+FDs8ihmv99WmjIPpL2oPdOr4REk6+7cV/7o=";
-      "vfio-bindings-0.4.0" = "sha256-grOV+7W1tB4YDRAFbDNQp5nQ1WaivH+N+qHTIj4WA+E=";
-      "vfio_user-0.1.0" = "sha256-Vi6dBu1mUwyWh7ryKDOBS6GeUD2sqqIrt/bth/LDW6s=";
+      "kvm-bindings-0.7.0" = "sha256-hXv5N3TTwGQaVxdQ/DTzLt+uwLxFnstJwNhxRD2K8TM=";
+      "micro_http-0.1.0" = "sha256-gyeOop6AMXEIbLXhJMN/oYGGU8Un8Y0nFZc9ucCa0y4=";
+      "mshv-bindings-0.1.1" = "sha256-yWvkpOcW3lV47s+rWnN4Bki8tt8CkiPVZ0I36nrWMi4=";
+      "versionize_derive-0.1.6" = "sha256-eI9fM8WnEBZvskPhU67IWeN6QAPg2u5EBT+AOxfb/fY=";
+      "vfio-bindings-0.4.0" = "sha256-Dk4T2dMzPZ+Aoq1YSXX2z1Nky8zvyDl7b+A8NH57Hkc=";
+      "vfio_user-0.1.0" = "sha256-LJ84k9pMkSAaWkuaUd+2LnPXnNgrP5LdbPOc1Yjz5xA=";
       "vm-fdt-0.2.0" = "sha256-lKW4ZUraHomSDyxgNlD5qTaBTZqM0Fwhhh/08yhrjyE=";
     };
   };
@@ -29,8 +28,8 @@ final.rustPlatform.buildRustPackage {
     name = "vhost";
     owner = "rust-vmm";
     repo = "vhost";
-    rev = "vhost-user-backend-v0.11.0";
-    hash = "sha256-VLKlvyHUrMrwJALUP7OeVeHIogu8rfoP4sgyUMCIBzU=";
+    rev = "vhost-user-backend-v0.13.1";
+    hash = "sha256-iF0VPrTEq9blT6hY0QyLcq64+ZNsiEv1EA3c7NoQLRE=";
   };
 
   cargoPatches = super.cloud-hypervisor.cargoPatches or [] ++ [
diff --git a/pkgs/cloud-hypervisor/vhost/0001-vhost-fix-receiving-reply-payloads.patch b/pkgs/cloud-hypervisor/vhost/0001-vhost-fix-receiving-reply-payloads.patch
index e7a4aa8..1c8c5e2 100644
--- a/pkgs/cloud-hypervisor/vhost/0001-vhost-fix-receiving-reply-payloads.patch
+++ b/pkgs/cloud-hypervisor/vhost/0001-vhost-fix-receiving-reply-payloads.patch
@@ -1,4 +1,4 @@
-From 9bf26d1815042e652c77249da973b7e8277010b5 Mon Sep 17 00:00:00 2001
+From fbab45b8442607aec1cec0041eef323b42b4fce2 Mon Sep 17 00:00:00 2001
 From: David Stevens <stevensd@chromium.org>
 Date: Wed, 15 Jun 2022 15:56:18 +0900
 Subject: [PATCH 1/4] vhost: fix receiving reply payloads
@@ -17,14 +17,14 @@ determining payload size after reading the reply header.
 Co-authored-by: Alyssa Ross <hi@alyssa.is>
 Signed-off-by: Alyssa Ross <hi@alyssa.is>
 ---
- crates/vhost/src/vhost_user/connection.rs | 29 ++++++++++-------------
- crates/vhost/src/vhost_user/frontend.rs   | 16 +++----------
+ vhost/src/vhost_user/connection.rs | 29 ++++++++++++-----------------
+ vhost/src/vhost_user/frontend.rs   | 16 +++-------------
  2 files changed, 15 insertions(+), 30 deletions(-)
 
-diff --git a/crates/vhost/src/vhost_user/connection.rs b/crates/vhost/src/vhost_user/connection.rs
-index 3733584..5eca461 100644
---- a/crates/vhost/src/vhost_user/connection.rs
-+++ b/crates/vhost/src/vhost_user/connection.rs
+diff --git a/vhost/src/vhost_user/connection.rs b/vhost/src/vhost_user/connection.rs
+index 9f61427..8469ba6 100644
+--- a/vhost/src/vhost_user/connection.rs
++++ b/vhost/src/vhost_user/connection.rs
 @@ -551,7 +551,7 @@ impl<R: Req> Endpoint<R> {
      /// accepted and all other file descriptor will be discard silently.
      ///
@@ -36,7 +36,7 @@ index 3733584..5eca461 100644
      /// * - SocketError: other socket related errors.
 @@ -560,15 +560,13 @@ impl<R: Req> Endpoint<R> {
      #[cfg_attr(feature = "cargo-clippy", allow(clippy::type_complexity))]
-     pub fn recv_payload_into_buf<T: ByteValued + Sized + VhostUserMsgValidator>(
+     pub fn recv_payload_into_buf<T: ByteValued + Sized + VhostUserMsgValidator + Default>(
          &mut self,
 -        buf: &mut [u8],
 -    ) -> Result<(VhostUserMsgHeader<R>, T, usize, Option<Vec<File>>)> {
@@ -81,10 +81,10 @@ index 3733584..5eca461 100644
      }
  }
  
-diff --git a/crates/vhost/src/vhost_user/frontend.rs b/crates/vhost/src/vhost_user/frontend.rs
-index db6d37e..4068dd6 100644
---- a/crates/vhost/src/vhost_user/frontend.rs
-+++ b/crates/vhost/src/vhost_user/frontend.rs
+diff --git a/vhost/src/vhost_user/frontend.rs b/vhost/src/vhost_user/frontend.rs
+index 940b090..8674be7 100644
+--- a/vhost/src/vhost_user/frontend.rs
++++ b/vhost/src/vhost_user/frontend.rs
 @@ -677,23 +677,13 @@ impl FrontendInternal {
          &mut self,
          hdr: &VhostUserMsgHeader<FrontendReq>,
@@ -113,5 +113,5 @@ index db6d37e..4068dd6 100644
          }
  
 -- 
-2.42.0
+2.43.0
 
diff --git a/pkgs/cloud-hypervisor/vhost/0002-vhost_user-add-shared-memory-region-support.patch b/pkgs/cloud-hypervisor/vhost/0002-vhost_user-add-shared-memory-region-support.patch
index b4b118a..2e5192f 100644
--- a/pkgs/cloud-hypervisor/vhost/0002-vhost_user-add-shared-memory-region-support.patch
+++ b/pkgs/cloud-hypervisor/vhost/0002-vhost_user-add-shared-memory-region-support.patch
@@ -1,4 +1,4 @@
-From f6295a94fbecabf29ffae4f7189dfa57bdf79447 Mon Sep 17 00:00:00 2001
+From d164b4634073b2efc63a3a9f78aafd5eb40243f5 Mon Sep 17 00:00:00 2001
 From: David Stevens <stevensd@chromium.org>
 Date: Wed, 15 Jun 2022 16:45:12 +0900
 Subject: [PATCH 2/4] vhost_user: add shared memory region support
@@ -28,19 +28,19 @@ Tested-by: kokoro <noreply+kokoro@google.com>
 (cherry-picked from commit f436e2706011fa5f34dc415972434aa3299ebc43)
 Signed-off-by: Alyssa Ross <alyssa.ross@unikie.com>
 ---
- crates/vhost-user-backend/src/handler.rs      |  10 +-
- crates/vhost/src/vhost_user/backend_req.rs    |  20 ++-
- .../src/vhost_user/backend_req_handler.rs     |  15 ++
- crates/vhost/src/vhost_user/dummy_backend.rs  |   4 +
- crates/vhost/src/vhost_user/frontend.rs       |  24 ++++
- .../src/vhost_user/frontend_req_handler.rs    |  53 ++++++-
- crates/vhost/src/vhost_user/message.rs        | 136 +++++++++++++++++-
- 7 files changed, 246 insertions(+), 16 deletions(-)
+ vhost-user-backend/src/handler.rs            |  10 +-
+ vhost/src/vhost_user/backend_req.rs          |  20 ++-
+ vhost/src/vhost_user/backend_req_handler.rs  |  15 +++
+ vhost/src/vhost_user/dummy_backend.rs        |   4 +
+ vhost/src/vhost_user/frontend.rs             |  24 ++++
+ vhost/src/vhost_user/frontend_req_handler.rs |  53 +++++++-
+ vhost/src/vhost_user/message.rs              | 132 ++++++++++++++++++-
+ 7 files changed, 244 insertions(+), 14 deletions(-)
 
-diff --git a/crates/vhost-user-backend/src/handler.rs b/crates/vhost-user-backend/src/handler.rs
-index 8be4768..e141e07 100644
---- a/crates/vhost-user-backend/src/handler.rs
-+++ b/crates/vhost-user-backend/src/handler.rs
+diff --git a/vhost-user-backend/src/handler.rs b/vhost-user-backend/src/handler.rs
+index 83f5293..f5a8f0f 100644
+--- a/vhost-user-backend/src/handler.rs
++++ b/vhost-user-backend/src/handler.rs
 @@ -11,9 +11,9 @@ use std::sync::Arc;
  use std::thread;
  
@@ -54,7 +54,7 @@ index 8be4768..e141e07 100644
  };
  use vhost::vhost_user::{
      Backend, Error as VhostUserError, Result as VhostUserResult, VhostUserBackendReqHandlerMut,
-@@ -597,6 +597,10 @@ where
+@@ -617,6 +617,10 @@ where
  
          Ok(())
      }
@@ -65,10 +65,10 @@ index 8be4768..e141e07 100644
  }
  
  impl<T: VhostUserBackend> Drop for VhostUserHandler<T> {
-diff --git a/crates/vhost/src/vhost_user/backend_req.rs b/crates/vhost/src/vhost_user/backend_req.rs
+diff --git a/vhost/src/vhost_user/backend_req.rs b/vhost/src/vhost_user/backend_req.rs
 index b43982f..948e1b2 100644
---- a/crates/vhost/src/vhost_user/backend_req.rs
-+++ b/crates/vhost/src/vhost_user/backend_req.rs
+--- a/vhost/src/vhost_user/backend_req.rs
++++ b/vhost/src/vhost_user/backend_req.rs
 @@ -46,12 +46,16 @@ impl BackendInternal {
          }
          self.sock.send_message(&hdr, body, fds)?;
@@ -106,10 +106,10 @@ index b43982f..948e1b2 100644
      /// Forward vhost-user-fs map file requests to the backend.
      fn fs_backend_map(&self, fs: &VhostUserFSBackendMsg, fd: &dyn AsRawFd) -> HandlerResult<u64> {
          self.send_message(BackendReq::FS_MAP, fs, Some(&[fd.as_raw_fd()]))
-diff --git a/crates/vhost/src/vhost_user/backend_req_handler.rs b/crates/vhost/src/vhost_user/backend_req_handler.rs
+diff --git a/vhost/src/vhost_user/backend_req_handler.rs b/vhost/src/vhost_user/backend_req_handler.rs
 index 7b4cbe9..84486aa 100644
---- a/crates/vhost/src/vhost_user/backend_req_handler.rs
-+++ b/crates/vhost/src/vhost_user/backend_req_handler.rs
+--- a/vhost/src/vhost_user/backend_req_handler.rs
++++ b/vhost/src/vhost_user/backend_req_handler.rs
 @@ -70,6 +70,7 @@ pub trait VhostUserBackendReqHandler {
      fn get_max_mem_slots(&self) -> Result<u64>;
      fn add_mem_region(&self, region: &VhostUserSingleMemoryRegion, fd: File) -> Result<()>;
@@ -153,10 +153,10 @@ index 7b4cbe9..84486aa 100644
              _ => {
                  return Err(Error::InvalidMessage);
              }
-diff --git a/crates/vhost/src/vhost_user/dummy_backend.rs b/crates/vhost/src/vhost_user/dummy_backend.rs
-index 060a344..aab5ee1 100644
---- a/crates/vhost/src/vhost_user/dummy_backend.rs
-+++ b/crates/vhost/src/vhost_user/dummy_backend.rs
+diff --git a/vhost/src/vhost_user/dummy_backend.rs b/vhost/src/vhost_user/dummy_backend.rs
+index 9d9f977..4d9aef1 100644
+--- a/vhost/src/vhost_user/dummy_backend.rs
++++ b/vhost/src/vhost_user/dummy_backend.rs
 @@ -291,4 +291,8 @@ impl VhostUserBackendReqHandlerMut for DummyBackendReqHandler {
      fn remove_mem_region(&mut self, _region: &VhostUserSingleMemoryRegion) -> Result<()> {
          Ok(())
@@ -166,10 +166,10 @@ index 060a344..aab5ee1 100644
 +        Ok(Vec::new())
 +    }
  }
-diff --git a/crates/vhost/src/vhost_user/frontend.rs b/crates/vhost/src/vhost_user/frontend.rs
-index 4068dd6..47ace8f 100644
---- a/crates/vhost/src/vhost_user/frontend.rs
-+++ b/crates/vhost/src/vhost_user/frontend.rs
+diff --git a/vhost/src/vhost_user/frontend.rs b/vhost/src/vhost_user/frontend.rs
+index 8674be7..4a745a8 100644
+--- a/vhost/src/vhost_user/frontend.rs
++++ b/vhost/src/vhost_user/frontend.rs
 @@ -72,6 +72,9 @@ pub trait VhostUserFrontend: VhostBackend {
  
      /// Remove a guest memory mapping from vhost.
@@ -208,10 +208,10 @@ index 4068dd6..47ace8f 100644
  }
  
  impl AsRawFd for Frontend {
-diff --git a/crates/vhost/src/vhost_user/frontend_req_handler.rs b/crates/vhost/src/vhost_user/frontend_req_handler.rs
+diff --git a/vhost/src/vhost_user/frontend_req_handler.rs b/vhost/src/vhost_user/frontend_req_handler.rs
 index fb2dc16..cd4f604 100644
---- a/crates/vhost/src/vhost_user/frontend_req_handler.rs
-+++ b/crates/vhost/src/vhost_user/frontend_req_handler.rs
+--- a/vhost/src/vhost_user/frontend_req_handler.rs
++++ b/vhost/src/vhost_user/frontend_req_handler.rs
 @@ -33,6 +33,16 @@ pub trait VhostUserFrontendReqHandler {
          Err(std::io::Error::from_raw_os_error(libc::ENOSYS))
      }
@@ -318,49 +318,43 @@ index fb2dc16..cd4f604 100644
              let hdr = self.new_reply_header::<VhostUserU64>(req)?;
              let def_err = libc::EINVAL;
              let val = match res {
-diff --git a/crates/vhost/src/vhost_user/message.rs b/crates/vhost/src/vhost_user/message.rs
-index df7edcd..21b0943 100644
---- a/crates/vhost/src/vhost_user/message.rs
-+++ b/crates/vhost/src/vhost_user/message.rs
-@@ -146,8 +146,10 @@ pub enum FrontendReq {
-     /// Query the backend for its device status as defined in the VIRTIO
-     /// specification.
-     GET_STATUS = 40,
-+    /// Get a list of the device's shared memory regions.
-+    GET_SHARED_MEMORY_REGIONS = 41,
-     /// Upper bound of valid commands.
--    MAX_CMD = 41,
-+    MAX_CMD = 42,
+diff --git a/vhost/src/vhost_user/message.rs b/vhost/src/vhost_user/message.rs
+index 43e7314..67fc19a 100644
+--- a/vhost/src/vhost_user/message.rs
++++ b/vhost/src/vhost_user/message.rs
+@@ -178,6 +178,8 @@ enum_value! {
+         /// Query the backend for its device status as defined in the VIRTIO
+         /// specification.
+         GET_STATUS = 40,
++        /// Get a list of the device's shared memory regions.
++        GET_SHARED_MEMORY_REGIONS = 41,
+     }
  }
  
- impl From<FrontendReq> for u32 {
-@@ -178,16 +180,20 @@ pub enum BackendReq {
-     VRING_CALL = 4,
-     /// Indicate that an error occurred on the specific vring.
-     VRING_ERR = 5,
-+    /// Indicates a request to map a fd into a shared memory region.
-+    SHMEM_MAP = 6,
-+    /// Indicates a request to unmap part of a shared memory region.
-+    SHMEM_UNMAP = 7,
-     /// Virtio-fs draft: map file content into the window.
--    FS_MAP = 6,
-+    FS_MAP = 8,
-     /// Virtio-fs draft: unmap file content from the window.
--    FS_UNMAP = 7,
-+    FS_UNMAP = 9,
-     /// Virtio-fs draft: sync file content.
--    FS_SYNC = 8,
-+    FS_SYNC = 10,
-     /// Virtio-fs draft: perform a read/write from an fd directly to GPA.
--    FS_IO = 9,
-+    FS_IO = 11,
-     /// Upper bound of valid commands.
--    MAX_CMD = 10,
-+    MAX_CMD = 12,
+@@ -197,14 +199,18 @@ enum_value! {
+         VRING_CALL = 4,
+         /// Indicate that an error occurred on the specific vring.
+         VRING_ERR = 5,
++        /// Indicates a request to map a fd into a shared memory region.
++        SHMEM_MAP = 6,
++        /// Indicates a request to unmap part of a shared memory region.
++        SHMEM_UNMAP = 7,
+         /// Virtio-fs draft: map file content into the window.
+-        FS_MAP = 6,
++        FS_MAP = 8,
+         /// Virtio-fs draft: unmap file content from the window.
+-        FS_UNMAP = 7,
++        FS_UNMAP = 9,
+         /// Virtio-fs draft: sync file content.
+-        FS_SYNC = 8,
++        FS_SYNC = 10,
+         /// Virtio-fs draft: perform a read/write from an fd directly to GPA.
+-        FS_IO = 9,
++        FS_IO = 11,
+     }
  }
  
- impl From<BackendReq> for u32 {
-@@ -978,6 +984,99 @@ impl VhostUserMsgValidator for VhostUserFSBackendMsg {
+@@ -955,6 +961,99 @@ impl VhostUserMsgValidator for VhostUserFSBackendMsg {
      }
  }
  
@@ -458,9 +452,9 @@ index df7edcd..21b0943 100644
 +}
 +
  /// Inflight I/O descriptor state for split virtqueues
- #[repr(packed)]
+ #[repr(C, packed)]
  #[derive(Clone, Copy, Default)]
-@@ -1109,6 +1208,31 @@ impl QueueRegionPacked {
+@@ -1086,6 +1185,31 @@ impl QueueRegionPacked {
      }
  }
  
@@ -493,5 +487,5 @@ index df7edcd..21b0943 100644
  mod tests {
      use super::*;
 -- 
-2.42.0
+2.43.0
 
diff --git a/pkgs/cloud-hypervisor/vhost/0003-vhost_user-add-protocol-flag-for-shmem.patch b/pkgs/cloud-hypervisor/vhost/0003-vhost_user-add-protocol-flag-for-shmem.patch
index 565765b..0ab20dd 100644
--- a/pkgs/cloud-hypervisor/vhost/0003-vhost_user-add-protocol-flag-for-shmem.patch
+++ b/pkgs/cloud-hypervisor/vhost/0003-vhost_user-add-protocol-flag-for-shmem.patch
@@ -1,4 +1,4 @@
-From 6ff8acf9d8bc27a49954c43cf93f36ae18d2f9cb Mon Sep 17 00:00:00 2001
+From d0dfc05aa3789cbc2a1a2057ae4f5aae0913ae3d Mon Sep 17 00:00:00 2001
 From: David Stevens <stevensd@chromium.org>
 Date: Thu, 13 Oct 2022 10:37:47 +0900
 Subject: [PATCH 3/4] vhost_user: add protocol flag for shmem
@@ -21,14 +21,14 @@ Commit-Queue: David Stevens <stevensd@chromium.org>
 (cherry-picked from commit 60aa43629ae9be2cc3df37c648ab7e0e5ff2172c)
 Signed-off-by: Alyssa Ross <hi@alyssa.is>
 ---
- crates/vhost/src/vhost_user/message.rs | 2 ++
+ vhost/src/vhost_user/message.rs | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/crates/vhost/src/vhost_user/message.rs b/crates/vhost/src/vhost_user/message.rs
-index 21b0943..6764d6d 100644
---- a/crates/vhost/src/vhost_user/message.rs
-+++ b/crates/vhost/src/vhost_user/message.rs
-@@ -437,6 +437,8 @@ bitflags! {
+diff --git a/vhost/src/vhost_user/message.rs b/vhost/src/vhost_user/message.rs
+index 67fc19a..7815d3e 100644
+--- a/vhost/src/vhost_user/message.rs
++++ b/vhost/src/vhost_user/message.rs
+@@ -440,6 +440,8 @@ bitflags! {
          const STATUS = 0x0001_0000;
          /// Support Xen mmap.
          const XEN_MMAP = 0x0002_0000;
@@ -38,5 +38,5 @@ index 21b0943..6764d6d 100644
  }
  
 -- 
-2.42.0
+2.43.0
 
diff --git a/pkgs/cloud-hypervisor/vhost/0004-vhost_user-renumber-SHARED_MEMORY_REGIONS.patch b/pkgs/cloud-hypervisor/vhost/0004-vhost_user-renumber-SHARED_MEMORY_REGIONS.patch
index 293cd27..c7c644d 100644
--- a/pkgs/cloud-hypervisor/vhost/0004-vhost_user-renumber-SHARED_MEMORY_REGIONS.patch
+++ b/pkgs/cloud-hypervisor/vhost/0004-vhost_user-renumber-SHARED_MEMORY_REGIONS.patch
@@ -1,4 +1,4 @@
-From 465b7c191a4149f4536384e24dc127eaae70a803 Mon Sep 17 00:00:00 2001
+From 97de38adff41894ac5b8ed5820a67c8309afda9e Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sat, 29 Jul 2023 12:03:18 +0000
 Subject: [PATCH 4/4] vhost_user: renumber SHARED_MEMORY_REGIONS
@@ -25,14 +25,14 @@ Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
 (cherry-picked from commit 6795b3edf3ddc0b3a2e2b928033f21dabcf8be78)
 Signed-off-by: Alyssa Ross <hi@alyssa.is>
 ---
- crates/vhost/src/vhost_user/message.rs | 4 ++--
+ vhost/src/vhost_user/message.rs | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/crates/vhost/src/vhost_user/message.rs b/crates/vhost/src/vhost_user/message.rs
-index 6764d6d..0be6b1a 100644
---- a/crates/vhost/src/vhost_user/message.rs
-+++ b/crates/vhost/src/vhost_user/message.rs
-@@ -437,8 +437,8 @@ bitflags! {
+diff --git a/vhost/src/vhost_user/message.rs b/vhost/src/vhost_user/message.rs
+index 7815d3e..c0d8dcc 100644
+--- a/vhost/src/vhost_user/message.rs
++++ b/vhost/src/vhost_user/message.rs
+@@ -440,8 +440,8 @@ bitflags! {
          const STATUS = 0x0001_0000;
          /// Support Xen mmap.
          const XEN_MMAP = 0x0002_0000;
@@ -44,5 +44,5 @@ index 6764d6d..0be6b1a 100644
  }
  
 -- 
-2.42.0
+2.43.0
 
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 172bf46..0d4091f 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -33,7 +33,7 @@ let
 
     # Packages from the overlay, so it's possible to build them from
     # the CLI easily.
-    inherit (pkgs) cloud-hypervisor foot meson;
+    inherit (pkgs) cloud-hypervisor foot;
 
     pkgsStatic = makeScopeWithSplicing pkgs.pkgsStatic;
 
diff --git a/pkgs/meson/default.nix b/pkgs/meson/default.nix
deleted file mode 100644
index ccb24e9..0000000
--- a/pkgs/meson/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
-# SPDX-License-Identifier: MIT
-
-import ../../lib/overlay-package.nix "meson" ({ final, super }:
-
-super.meson.overrideAttrs ({ patches ? [], ... }: {
-  patches = patches ++ [
-    (final.fetchpatch {
-      url = "https://github.com/mesonbuild/meson/commit/1ca2c74d16c3f5987f686e358b58ce5d2253ce9b.patch";
-      hash = "sha256-ZnYF9IDrroa4r4YNZxDnGe+KRnaYmBQOe2PvcZb2A4Y=";
-    })
-  ];
-}))
diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix
index 6806f2f..2266744 100644
--- a/pkgs/overlay.nix
+++ b/pkgs/overlay.nix
@@ -5,6 +5,4 @@
   cloud-hypervisor = import ./cloud-hypervisor { inherit final super; };
 
   foot = import ./foot { inherit final super; };
-
-  meson = import ./meson { inherit final super; };
 })