diff options
-rw-r--r-- | hw/pc.c | 5 | ||||
-rw-r--r-- | qemu-options.hx | 13 | ||||
-rw-r--r-- | sysemu.h | 3 | ||||
-rw-r--r-- | vl.c | 33 |
4 files changed, 44 insertions, 10 deletions
@@ -1408,8 +1408,9 @@ static void pc_init1(ram_addr_t ram_size, } /* Add virtio balloon device */ - if (pci_enabled && !no_virtio_balloon) { - pci_create_simple(pci_bus, -1, "virtio-balloon-pci"); + if (pci_enabled && virtio_balloon) { + pci_dev = pci_create("virtio-balloon-pci", virtio_balloon_devaddr); + qdev_init(&pci_dev->qdev); } /* Add virtio console devices */ diff --git a/qemu-options.hx b/qemu-options.hx index dc54115e52..a94f9d38aa 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -684,12 +684,17 @@ Disable HPET support. ETEXI #ifdef TARGET_I386 -DEF("no-virtio-balloon", 0, QEMU_OPTION_no_virtio_balloon, - "-no-virtio-balloon disable virtio balloon device\n") +DEF("balloon", HAS_ARG, QEMU_OPTION_balloon, + "-balloon none disable balloon device\n" + "-balloon virtio[,addr=str]\n" + " enable virtio balloon device (default)\n") #endif STEXI -@item -no-virtio-balloon -Disable virtio-balloon device. +@item -balloon none +Disable balloon device. +@item -balloon virtio[,addr=@var{addr}] +Enable virtio balloon device (default), optionally with PCI address +@var{addr}. ETEXI #ifdef TARGET_I386 @@ -116,7 +116,8 @@ extern int win2k_install_hack; extern int rtc_td_hack; extern int alt_grab; extern int usb_enabled; -extern int no_virtio_balloon; +extern int virtio_balloon; +extern const char *virtio_balloon_devaddr; extern int smp_cpus; extern int cursor_hide; extern int graphic_rotate; @@ -242,7 +242,8 @@ int smp_cpus = 1; const char *vnc_display; int acpi_enabled = 1; int no_hpet = 0; -int no_virtio_balloon = 0; +int virtio_balloon = 1; +const char *virtio_balloon_devaddr; int fd_bootchk = 1; int no_reboot = 0; int no_shutdown = 0; @@ -4762,6 +4763,29 @@ static void select_vgahw (const char *p) } } +#ifdef TARGET_I386 +static int balloon_parse(const char *arg) +{ + char buf[128]; + const char *p; + + if (!strcmp(arg, "none")) { + virtio_balloon = 0; + } else if (!strncmp(arg, "virtio", 6)) { + virtio_balloon = 1; + if (arg[6] == ',') { + p = arg + 7; + if (get_param_value(buf, sizeof(buf), "addr", p)) { + virtio_balloon_devaddr = strdup(buf); + } + } + } else { + return -1; + } + return 0; +} +#endif + #ifdef _WIN32 static BOOL WINAPI qemu_ctrl_handler(DWORD type) { @@ -5578,8 +5602,11 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_no_hpet: no_hpet = 1; break; - case QEMU_OPTION_no_virtio_balloon: - no_virtio_balloon = 1; + case QEMU_OPTION_balloon: + if (balloon_parse(optarg) < 0) { + fprintf(stderr, "Unknown -balloon argument %s\n", optarg); + exit(1); + } break; #endif case QEMU_OPTION_no_reboot: |