From 0b0510108df2ed7737ed17d74ee9b50ff78c2e0a Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Mon, 23 Mar 2020 16:28:09 +0000 Subject: [PATCH] ch-remote: Add support for hotplugging persistent memory Call the new HTTP API for hotplugging persistent memory using the same syntax as coldplug. Signed-off-by: Rob Bradford --- src/bin/ch-remote.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/bin/ch-remote.rs b/src/bin/ch-remote.rs index 358c651d7..6c55e721a 100644 --- a/src/bin/ch-remote.rs +++ b/src/bin/ch-remote.rs @@ -24,6 +24,7 @@ enum Error { InvalidMemorySize(std::num::ParseIntError), AddDeviceConfig(vmm::config::Error), AddDiskConfig(vmm::config::Error), + AddPmemConfig(vmm::config::Error), } #[derive(Clone, Copy, Debug)] @@ -225,6 +226,17 @@ fn add_disk_api_command(socket: &mut UnixStream, config: &str) -> Result<(), Err ) } +fn add_pmem_api_command(socket: &mut UnixStream, config: &str) -> Result<(), Error> { + let pmem_config = vmm::config::PmemConfig::parse(config).map_err(Error::AddPmemConfig)?; + + simple_api_command( + socket, + "PUT", + "add-pmem", + Some(&serde_json::to_string(&pmem_config).unwrap()), + ) +} + fn do_command(matches: &ArgMatches) -> Result<(), Error> { let mut socket = UnixStream::connect(matches.value_of("api-socket").unwrap()).map_err(Error::Socket)?; @@ -266,6 +278,14 @@ fn do_command(matches: &ArgMatches) -> Result<(), Error> { .value_of("disk_config") .unwrap(), ), + Some("add-pmem") => add_pmem_api_command( + &mut socket, + matches + .subcommand_matches("add-pmem") + .unwrap() + .value_of("pmem_config") + .unwrap(), + ), Some(c) => simple_api_command(&mut socket, "PUT", c, None), None => unreachable!(), } @@ -302,6 +322,15 @@ fn main() { .help(vmm::config::DiskConfig::SYNTAX), ), ) + .subcommand( + SubCommand::with_name("add-pmem") + .about("Add persistent memory device") + .arg( + Arg::with_name("pmem_config") + .index(1) + .help(vmm::config::PmemConfig::SYNTAX), + ), + ) .subcommand( SubCommand::with_name("remove-device") .about("Remove VFIO device")