()
| 2685 | #[cfg(not(feature = "mshv"))] // See issue #7435 |
| 2686 | #[cfg(target_arch = "x86_64")] |
| 2687 | fn test_cpu_hotplug() { |
| 2688 | let disk_config = UbuntuDiskConfig::new(JAMMY_IMAGE_NAME.to_string()); |
| 2689 | let guest = Guest::new(Box::new(disk_config)); |
| 2690 | let api_socket = temp_api_path(&guest.tmp_dir); |
| 2691 | let console_str = "console=ttyS0"; |
| 2692 | |
| 2693 | let kernel_path = direct_kernel_boot_path(); |
| 2694 | |
| 2695 | let mut child = GuestCommand::new(&guest) |
| 2696 | .args(["--cpus", "boot=2,max=4"]) |
| 2697 | .default_memory() |
| 2698 | .args(["--kernel", kernel_path.to_str().unwrap()]) |
| 2699 | .args([ |
| 2700 | "--cmdline", |
| 2701 | DIRECT_KERNEL_BOOT_CMDLINE |
| 2702 | .replace("console=hvc0", console_str) |
| 2703 | .as_str(), |
| 2704 | ]) |
| 2705 | .args(["--serial", "tty"]) |
| 2706 | .args(["--console", "off"]) |
| 2707 | .default_disks() |
| 2708 | .default_net() |
| 2709 | .args(["--api-socket", &api_socket]) |
| 2710 | .capture_output() |
| 2711 | .spawn() |
| 2712 | .unwrap(); |
| 2713 | |
| 2714 | let r = std::panic::catch_unwind(|| { |
| 2715 | guest.wait_vm_boot().unwrap(); |
| 2716 | |
| 2717 | assert_eq!(guest.get_cpu_count().unwrap_or_default(), 2); |
| 2718 | |
| 2719 | // Resize the VM |
| 2720 | let desired_vcpus = 4; |
| 2721 | resize_command(&api_socket, Some(desired_vcpus), None, None, None); |
| 2722 | |
| 2723 | guest |
| 2724 | .ssh_command("echo 1 | sudo tee /sys/bus/cpu/devices/cpu2/online") |
| 2725 | .unwrap(); |
| 2726 | guest |
| 2727 | .ssh_command("echo 1 | sudo tee /sys/bus/cpu/devices/cpu3/online") |
| 2728 | .unwrap(); |
| 2729 | assert!(wait_until(Duration::from_secs(10), || { |
| 2730 | guest.get_cpu_count().unwrap_or_default() == u32::from(desired_vcpus) |
| 2731 | })); |
| 2732 | |
| 2733 | guest.reboot_linux(0); |
| 2734 | |
| 2735 | assert_eq!( |
| 2736 | guest.get_cpu_count().unwrap_or_default(), |
| 2737 | u32::from(desired_vcpus) |
| 2738 | ); |
| 2739 | |
| 2740 | // Resize the VM |
| 2741 | let desired_vcpus = 2; |
| 2742 | resize_command(&api_socket, Some(desired_vcpus), None, None, None); |
| 2743 | |
| 2744 | assert!(wait_until(Duration::from_secs(10), || { |
nothing calls this directly
no test coverage detected