* [Qemu-devel] [PATCH V2 0/2] Introduce "machine" QemuOpts @ 2010-11-23 13:46 anthony.perard 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 1/2] Introduce -machine command option anthony.perard 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 2/2] machine, Add default_machine_opts to QEMUMachine anthony.perard 0 siblings, 2 replies; 8+ messages in thread From: anthony.perard @ 2010-11-23 13:46 UTC (permalink / raw) To: QEMU-devel; +Cc: anthony.perard From: Anthony PERARD <anthony.perard@citrix.com> The first patch adds "-machine accel=accels" to Qemu options. And the second one adds a new field in QEMUMachine to be able to specify a set of machine options. The difference with the V1: - use of QemuOpts. - replace -accel command line options by -machine. - now, when specifying -enable-kvm or -machine, all other -machine options are override. - the new patch that adds default_machine_opts to QEMUMachine. With the new patch, we will be able to run a Xen specific machine without saying to use Xen as an "accelerator". Anthony PERARD (2): Introduce -machine command option. machine, Add default_machine_opts to QEMUMachine. arch_init.c | 5 ++ arch_init.h | 1 + hw/boards.h | 1 + qemu-config.c | 14 ++++++ qemu-options.hx | 10 ++++ vl.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++----- 6 files changed, 143 insertions(+), 12 deletions(-) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH V2 1/2] Introduce -machine command option. 2010-11-23 13:46 [Qemu-devel] [PATCH V2 0/2] Introduce "machine" QemuOpts anthony.perard @ 2010-11-23 13:47 ` anthony.perard 2010-12-02 14:18 ` [Qemu-devel] " anthony.perard 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 2/2] machine, Add default_machine_opts to QEMUMachine anthony.perard 1 sibling, 1 reply; 8+ messages in thread From: anthony.perard @ 2010-11-23 13:47 UTC (permalink / raw) To: QEMU-devel; +Cc: anthony.perard From: Anthony PERARD <anthony.perard@citrix.com> This option gives the ability to switch one "accelerator" like kvm, xen or the default one tcg. We can specify more than one accelerator by separate them by a colon. QEMU will try each one and use the first whose works. So, ./qemu -machine accel=xen:kvm:tcg which would try Xen support first, then KVM and finally TCG if none of the other works. By default, QEMU will use TCG. But we can specify another default in the global configuration file. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- arch_init.c | 5 +++ arch_init.h | 1 + qemu-config.c | 14 +++++++ qemu-options.hx | 10 +++++ vl.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++------ 5 files changed, 120 insertions(+), 12 deletions(-) diff --git a/arch_init.c b/arch_init.c index 4486925..e0d7a4c 100644 --- a/arch_init.c +++ b/arch_init.c @@ -639,6 +639,11 @@ int audio_available(void) #endif } +int tcg_available(void) +{ + return 1; +} + int kvm_available(void) { #ifdef CONFIG_KVM diff --git a/arch_init.h b/arch_init.h index 682890c..f0fb6a0 100644 --- a/arch_init.h +++ b/arch_init.h @@ -27,6 +27,7 @@ void do_acpitable_option(const char *optarg); void do_smbios_option(const char *optarg); void cpudef_init(void); int audio_available(void); +int tcg_available(void); int kvm_available(void); int xen_available(void); diff --git a/qemu-config.c b/qemu-config.c index 52f18be..a4ae7b5 100644 --- a/qemu-config.c +++ b/qemu-config.c @@ -429,6 +429,19 @@ QemuOptsList qemu_spice_opts = { }, }; +static QemuOptsList qemu_machine_opts = { + .name = "machine", + .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head), + .desc = { + { + .name = "accel", + .type = QEMU_OPT_STRING, + .help = "accelerator list", + }, + { /* End of list */ } + }, +}; + static QemuOptsList *vm_config_groups[32] = { &qemu_drive_opts, &qemu_chardev_opts, @@ -442,6 +455,7 @@ static QemuOptsList *vm_config_groups[32] = { #ifdef CONFIG_SIMPLE_TRACE &qemu_trace_opts, #endif + &qemu_machine_opts, NULL, }; diff --git a/qemu-options.hx b/qemu-options.hx index 4d99a58..624f1a7 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1975,6 +1975,16 @@ Enable KVM full virtualization support. This option is only available if KVM support is enabled when compiling. ETEXI +DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ + "-machine accel=accel1[:accel2] use an accelerator (kvm,xen,tcg), default is tcg\n", QEMU_ARCH_ALL) +STEXI +@item -machine accel=@var{accels} +@findex -machine +This is use to enable an accelerator, in kvm,xen,tcg. +By default, it use only tcg. If there a more than one accelerator +specified, the next one is used if the first don't work. +ETEXI + DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid, "-xen-domid id specify xen guest domain id\n", QEMU_ARCH_ALL) DEF("xen-create", 0, QEMU_OPTION_xen_create, diff --git a/vl.c b/vl.c index 805e11f..d14e52a 100644 --- a/vl.c +++ b/vl.c @@ -243,6 +243,7 @@ static void *boot_set_opaque; static NotifierList exit_notifiers = NOTIFIER_LIST_INITIALIZER(exit_notifiers); +static int tcg_allowed = 1; int kvm_allowed = 0; uint32_t xen_domid; enum xen_mode xen_mode = XEN_EMULATE; @@ -1727,6 +1728,82 @@ static int debugcon_parse(const char *devname) return 0; } +static int tcg_init(int smp_cpus) +{ + return 0; +} + +static struct { + const char *opt_name; + const char *name; + int (*available)(void); + int (*init)(int smp_cpus); + int *allowed; +} accel_list[] = { + { "tcg", "tcg", tcg_available, tcg_init, &tcg_allowed }, + { "kvm", "KVM", kvm_available, kvm_init, &kvm_allowed }, +}; + +static int configure_accelerator(void) +{ + const char *p; + char buf[10]; + int i, ret; + bool accel_initalised = 0; + bool init_failed = 0; + + QemuOptsList *list = qemu_find_opts("machine"); + if (!QTAILQ_EMPTY(&list->head)) { + p = qemu_opt_get(QTAILQ_FIRST(&list->head), "accel"); + } + + if (p == NULL) { + /* Use the default "accelerator", tcg */ + p = "tcg"; + } + + while (!accel_initalised && *p != '\0') { + if (*p == ':') { + p++; + } + p = get_opt_name(buf, sizeof (buf), p, ':'); + for (i = 0; i < ARRAY_SIZE(accel_list); i++) { + if (strcmp(accel_list[i].opt_name, buf) == 0) { + ret = accel_list[i].init(smp_cpus); + if (ret < 0) { + init_failed = 1; + if (!accel_list[i].available()) { + printf("%s not supported for this target\n", + accel_list[i].name); + } else { + fprintf(stderr, "failed to initialize %s: %s\n", + accel_list[i].name, + strerror(-ret)); + } + } else { + accel_initalised = 1; + *(accel_list[i].allowed) = 1; + } + break; + } + } + if (i == ARRAY_SIZE(accel_list)) { + fprintf(stderr, "\"%s\" accelerator does not exist.\n", buf); + } + } + + if (!accel_initalised) { + fprintf(stderr, "No accelerator found!\n"); + exit(1); + } + + if (init_failed) { + fprintf(stderr, "Back to %s accelerator.\n", accel_list[i].name); + } + + return !accel_initalised; +} + void qemu_add_exit_notifier(Notifier *notify) { notifier_list_add(&exit_notifiers, notify); @@ -2413,7 +2490,18 @@ int main(int argc, char **argv, char **envp) do_smbios_option(optarg); break; case QEMU_OPTION_enable_kvm: - kvm_allowed = 1; + olist = qemu_find_opts("machine"); + qemu_opts_reset(olist); + qemu_opts_parse(olist, "accel=kvm", 0); + break; + case QEMU_OPTION_machine: + olist = qemu_find_opts("machine"); + qemu_opts_reset(olist); + opts = qemu_opts_parse(olist, optarg, 0); + if (!opts) { + fprintf(stderr, "parse error: %s\n", optarg); + exit(1); + } break; case QEMU_OPTION_usb: usb_enabled = 1; @@ -2723,17 +2811,7 @@ int main(int argc, char **argv, char **envp) exit(1); } - if (kvm_allowed) { - int ret = kvm_init(smp_cpus); - if (ret < 0) { - if (!kvm_available()) { - printf("KVM not supported for this target\n"); - } else { - fprintf(stderr, "failed to initialize KVM: %s\n", strerror(-ret)); - } - exit(1); - } - } + configure_accelerator(); if (qemu_init_main_loop()) { fprintf(stderr, "qemu_init_main_loop failed\n"); -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] Re: [PATCH V2 1/2] Introduce -machine command option. 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 1/2] Introduce -machine command option anthony.perard @ 2010-12-02 14:18 ` anthony.perard 2010-12-21 17:33 ` Alexander Graf 0 siblings, 1 reply; 8+ messages in thread From: anthony.perard @ 2010-12-02 14:18 UTC (permalink / raw) To: QEMU-devel; +Cc: anthony.perard From: Anthony PERARD <anthony.perard@citrix.com> This option gives the ability to switch one "accelerator" like kvm, xen or the default one tcg. We can specify more than one accelerator by separate them by a colon. QEMU will try each one and use the first whose works. So, ./qemu -machine accel=xen:kvm:tcg which would try Xen support first, then KVM and finally TCG if none of the other works. By default, QEMU will use TCG. But we can specify another default in the global configuration file. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- I forgot to initialise p in the function configure_accelerator. This new patch fix this. arch_init.c | 5 +++ arch_init.h | 1 + qemu-config.c | 14 +++++++ qemu-options.hx | 10 +++++ vl.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++------ 5 files changed, 120 insertions(+), 12 deletions(-) diff --git a/arch_init.c b/arch_init.c index 4486925..e0d7a4c 100644 --- a/arch_init.c +++ b/arch_init.c @@ -639,6 +639,11 @@ int audio_available(void) #endif } +int tcg_available(void) +{ + return 1; +} + int kvm_available(void) { #ifdef CONFIG_KVM diff --git a/arch_init.h b/arch_init.h index 682890c..f0fb6a0 100644 --- a/arch_init.h +++ b/arch_init.h @@ -27,6 +27,7 @@ void do_acpitable_option(const char *optarg); void do_smbios_option(const char *optarg); void cpudef_init(void); int audio_available(void); +int tcg_available(void); int kvm_available(void); int xen_available(void); diff --git a/qemu-config.c b/qemu-config.c index 52f18be..a4ae7b5 100644 --- a/qemu-config.c +++ b/qemu-config.c @@ -429,6 +429,19 @@ QemuOptsList qemu_spice_opts = { }, }; +static QemuOptsList qemu_machine_opts = { + .name = "machine", + .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head), + .desc = { + { + .name = "accel", + .type = QEMU_OPT_STRING, + .help = "accelerator list", + }, + { /* End of list */ } + }, +}; + static QemuOptsList *vm_config_groups[32] = { &qemu_drive_opts, &qemu_chardev_opts, @@ -442,6 +455,7 @@ static QemuOptsList *vm_config_groups[32] = { #ifdef CONFIG_SIMPLE_TRACE &qemu_trace_opts, #endif + &qemu_machine_opts, NULL, }; diff --git a/qemu-options.hx b/qemu-options.hx index 4d99a58..624f1a7 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1975,6 +1975,16 @@ Enable KVM full virtualization support. This option is only available if KVM support is enabled when compiling. ETEXI +DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ + "-machine accel=accel1[:accel2] use an accelerator (kvm,xen,tcg), default is tcg\n", QEMU_ARCH_ALL) +STEXI +@item -machine accel=@var{accels} +@findex -machine +This is use to enable an accelerator, in kvm,xen,tcg. +By default, it use only tcg. If there a more than one accelerator +specified, the next one is used if the first don't work. +ETEXI + DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid, "-xen-domid id specify xen guest domain id\n", QEMU_ARCH_ALL) DEF("xen-create", 0, QEMU_OPTION_xen_create, diff --git a/vl.c b/vl.c index 805e11f..fa19b90 100644 --- a/vl.c +++ b/vl.c @@ -243,6 +243,7 @@ static void *boot_set_opaque; static NotifierList exit_notifiers = NOTIFIER_LIST_INITIALIZER(exit_notifiers); +static int tcg_allowed = 1; int kvm_allowed = 0; uint32_t xen_domid; enum xen_mode xen_mode = XEN_EMULATE; @@ -1727,6 +1728,82 @@ static int debugcon_parse(const char *devname) return 0; } +static int tcg_init(int smp_cpus) +{ + return 0; +} + +static struct { + const char *opt_name; + const char *name; + int (*available)(void); + int (*init)(int smp_cpus); + int *allowed; +} accel_list[] = { + { "tcg", "tcg", tcg_available, tcg_init, &tcg_allowed }, + { "kvm", "KVM", kvm_available, kvm_init, &kvm_allowed }, +}; + +static int configure_accelerator(void) +{ + const char *p = NULL; + char buf[10]; + int i, ret; + bool accel_initalised = 0; + bool init_failed = 0; + + QemuOptsList *list = qemu_find_opts("machine"); + if (!QTAILQ_EMPTY(&list->head)) { + p = qemu_opt_get(QTAILQ_FIRST(&list->head), "accel"); + } + + if (p == NULL) { + /* Use the default "accelerator", tcg */ + p = "tcg"; + } + + while (!accel_initalised && *p != '\0') { + if (*p == ':') { + p++; + } + p = get_opt_name(buf, sizeof (buf), p, ':'); + for (i = 0; i < ARRAY_SIZE(accel_list); i++) { + if (strcmp(accel_list[i].opt_name, buf) == 0) { + ret = accel_list[i].init(smp_cpus); + if (ret < 0) { + init_failed = 1; + if (!accel_list[i].available()) { + printf("%s not supported for this target\n", + accel_list[i].name); + } else { + fprintf(stderr, "failed to initialize %s: %s\n", + accel_list[i].name, + strerror(-ret)); + } + } else { + accel_initalised = 1; + *(accel_list[i].allowed) = 1; + } + break; + } + } + if (i == ARRAY_SIZE(accel_list)) { + fprintf(stderr, "\"%s\" accelerator does not exist.\n", buf); + } + } + + if (!accel_initalised) { + fprintf(stderr, "No accelerator found!\n"); + exit(1); + } + + if (init_failed) { + fprintf(stderr, "Back to %s accelerator.\n", accel_list[i].name); + } + + return !accel_initalised; +} + void qemu_add_exit_notifier(Notifier *notify) { notifier_list_add(&exit_notifiers, notify); @@ -2413,7 +2490,18 @@ int main(int argc, char **argv, char **envp) do_smbios_option(optarg); break; case QEMU_OPTION_enable_kvm: - kvm_allowed = 1; + olist = qemu_find_opts("machine"); + qemu_opts_reset(olist); + qemu_opts_parse(olist, "accel=kvm", 0); + break; + case QEMU_OPTION_machine: + olist = qemu_find_opts("machine"); + qemu_opts_reset(olist); + opts = qemu_opts_parse(olist, optarg, 0); + if (!opts) { + fprintf(stderr, "parse error: %s\n", optarg); + exit(1); + } break; case QEMU_OPTION_usb: usb_enabled = 1; @@ -2723,17 +2811,7 @@ int main(int argc, char **argv, char **envp) exit(1); } - if (kvm_allowed) { - int ret = kvm_init(smp_cpus); - if (ret < 0) { - if (!kvm_available()) { - printf("KVM not supported for this target\n"); - } else { - fprintf(stderr, "failed to initialize KVM: %s\n", strerror(-ret)); - } - exit(1); - } - } + configure_accelerator(); if (qemu_init_main_loop()) { fprintf(stderr, "qemu_init_main_loop failed\n"); -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] Re: [PATCH V2 1/2] Introduce -machine command option. 2010-12-02 14:18 ` [Qemu-devel] " anthony.perard @ 2010-12-21 17:33 ` Alexander Graf 2010-12-21 18:57 ` Andreas Färber 0 siblings, 1 reply; 8+ messages in thread From: Alexander Graf @ 2010-12-21 17:33 UTC (permalink / raw) To: Anthony.Perard; +Cc: Anthony Liguori, qemu-devel Developers On 02.12.2010, at 15:18, Anthony.Perard@citrix.com wrote: > From: Anthony PERARD <anthony.perard@citrix.com> > > This option gives the ability to switch one "accelerator" like kvm, xen > or the default one tcg. We can specify more than one accelerator by > separate them by a colon. QEMU will try each one and use the first whose > works. > > So, > ./qemu -machine accel=xen:kvm:tcg > > which would try Xen support first, then KVM and finally TCG if none of > the other works. > > By default, QEMU will use TCG. But we can specify another default in the > global configuration file. > > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Something went wrong with this patch set. I only have mail 1/2. 2/2 is missing. Mind to resend? :) Alex ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] Re: [PATCH V2 1/2] Introduce -machine command option. 2010-12-21 17:33 ` Alexander Graf @ 2010-12-21 18:57 ` Andreas Färber 2010-12-21 19:03 ` Alexander Graf 0 siblings, 1 reply; 8+ messages in thread From: Andreas Färber @ 2010-12-21 18:57 UTC (permalink / raw) To: Alexander Graf; +Cc: Anthony.Perard, Anthony Liguori, qemu-devel Developers Am 21.12.2010 um 18:33 schrieb Alexander Graf: > On 02.12.2010, at 15:18, Anthony.Perard@citrix.com wrote: > >> From: Anthony PERARD <anthony.perard@citrix.com> >> >> This option gives the ability to switch one "accelerator" like kvm, >> xen >> or the default one tcg. We can specify more than one accelerator by >> separate them by a colon. QEMU will try each one and use the first >> whose >> works. >> >> So, >> ./qemu -machine accel=xen:kvm:tcg >> >> which would try Xen support first, then KVM and finally TCG if none >> of >> the other works. >> >> By default, QEMU will use TCG. But we can specify another default >> in the >> global configuration file. >> >> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > > Something went wrong with this patch set. I only have mail 1/2. 2/2 > is missing. Mind to resend? :) It seems to me this is v3 already - v2 2/2 was sent on Nov 23rd. Andreas ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] Re: [PATCH V2 1/2] Introduce -machine command option. 2010-12-21 18:57 ` Andreas Färber @ 2010-12-21 19:03 ` Alexander Graf 2010-12-21 21:18 ` Anthony PERARD 0 siblings, 1 reply; 8+ messages in thread From: Alexander Graf @ 2010-12-21 19:03 UTC (permalink / raw) To: Andreas Färber Cc: Anthony.Perard, Anthony Liguori, qemu-devel Developers On 21.12.2010, at 19:57, Andreas Färber wrote: > Am 21.12.2010 um 18:33 schrieb Alexander Graf: > >> On 02.12.2010, at 15:18, Anthony.Perard@citrix.com wrote: >> >>> From: Anthony PERARD <anthony.perard@citrix.com> >>> >>> This option gives the ability to switch one "accelerator" like kvm, xen >>> or the default one tcg. We can specify more than one accelerator by >>> separate them by a colon. QEMU will try each one and use the first whose >>> works. >>> >>> So, >>> ./qemu -machine accel=xen:kvm:tcg >>> >>> which would try Xen support first, then KVM and finally TCG if none of >>> the other works. >>> >>> By default, QEMU will use TCG. But we can specify another default in the >>> global configuration file. >>> >>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> >> >> Something went wrong with this patch set. I only have mail 1/2. 2/2 is missing. Mind to resend? :) > > It seems to me this is v3 already - v2 2/2 was sent on Nov 23rd. Ah - Alex screwup again :). Either way, any progress on -accel? :) Alex ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] Re: [PATCH V2 1/2] Introduce -machine command option. 2010-12-21 19:03 ` Alexander Graf @ 2010-12-21 21:18 ` Anthony PERARD 0 siblings, 0 replies; 8+ messages in thread From: Anthony PERARD @ 2010-12-21 21:18 UTC (permalink / raw) To: Alexander Graf; +Cc: Andreas Färber, qemu-devel Developers [-- Attachment #1: Type: TEXT/PLAIN, Size: 1583 bytes --] On Tue, 21 Dec 2010, Alexander Graf wrote: > > On 21.12.2010, at 19:57, Andreas Färber wrote: > > > Am 21.12.2010 um 18:33 schrieb Alexander Graf: > > > >> On 02.12.2010, at 15:18, Anthony.Perard@citrix.com wrote: > >> > >>> From: Anthony PERARD <anthony.perard@citrix.com> > >>> > >>> This option gives the ability to switch one "accelerator" like kvm, xen > >>> or the default one tcg. We can specify more than one accelerator by > >>> separate them by a colon. QEMU will try each one and use the first whose > >>> works. > >>> > >>> So, > >>> ./qemu -machine accel=xen:kvm:tcg > >>> > >>> which would try Xen support first, then KVM and finally TCG if none of > >>> the other works. > >>> > >>> By default, QEMU will use TCG. But we can specify another default in the > >>> global configuration file. > >>> > >>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > >> > >> Something went wrong with this patch set. I only have mail 1/2. 2/2 is missing. Mind to resend? :) > > > > It seems to me this is v3 already - v2 2/2 was sent on Nov 23rd. > > Ah - Alex screwup again :). > > Either way, any progress on -accel? :) Actually, I sent the v2 1/2 a second time (by reply to the first patch sent) with a little fix (I forgot to initialise p in the function configure_accelerator). After this, I don't do anything more. So it's my final version. Also, the only use of the default_machine_opts (patch 2/2) is in the xen device modele support patch set, because xenpv don't rely on this. And now, it is not anymore -accel, just -machine accel=$accel. -- Anthony PERARD ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH V2 2/2] machine, Add default_machine_opts to QEMUMachine. 2010-11-23 13:46 [Qemu-devel] [PATCH V2 0/2] Introduce "machine" QemuOpts anthony.perard 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 1/2] Introduce -machine command option anthony.perard @ 2010-11-23 13:47 ` anthony.perard 1 sibling, 0 replies; 8+ messages in thread From: anthony.perard @ 2010-11-23 13:47 UTC (permalink / raw) To: QEMU-devel; +Cc: anthony.perard From: Anthony PERARD <anthony.perard@citrix.com> With this new field, we can specified which accelerator use to run the machine, if the accelerator is not already specified by either a configuration file or the command line options. Currently, the only use will be made in the xenfv machine. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- hw/boards.h | 1 + vl.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/hw/boards.h b/hw/boards.h index 6f0f0d7..716fd7b 100644 --- a/hw/boards.h +++ b/hw/boards.h @@ -27,6 +27,7 @@ typedef struct QEMUMachine { no_cdrom:1, no_sdcard:1; int is_default; + const char *default_machine_opts; GlobalProperty *compat_props; struct QEMUMachine *next; } QEMUMachine; diff --git a/vl.c b/vl.c index d14e52a..04e480c 100644 --- a/vl.c +++ b/vl.c @@ -2741,6 +2741,28 @@ int main(int argc, char **argv, char **envp) exit(1); } + /* + * Get the default machine options from the machine if it is not already + * specified either by the configuration file or by the command line. + */ + if (machine->default_machine_opts) { + QemuOptsList *list = qemu_find_opts("machine"); + const char *p = NULL; + + if (!QTAILQ_EMPTY(&list->head)) { + p = qemu_opt_get(QTAILQ_FIRST(&list->head), "accel"); + } + if (p == NULL) { + opts = qemu_opts_parse(qemu_find_opts("machine"), + machine->default_machine_opts, 0); + if (!opts) { + fprintf(stderr, "parse error for machine %s: %s\n", + machine->name, machine->default_machine_opts); + exit(1); + } + } + } + qemu_opts_foreach(qemu_find_opts("device"), default_driver_check, NULL, 0); qemu_opts_foreach(qemu_find_opts("global"), default_driver_check, NULL, 0); -- 1.7.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-12-21 21:18 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-11-23 13:46 [Qemu-devel] [PATCH V2 0/2] Introduce "machine" QemuOpts anthony.perard 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 1/2] Introduce -machine command option anthony.perard 2010-12-02 14:18 ` [Qemu-devel] " anthony.perard 2010-12-21 17:33 ` Alexander Graf 2010-12-21 18:57 ` Andreas Färber 2010-12-21 19:03 ` Alexander Graf 2010-12-21 21:18 ` Anthony PERARD 2010-11-23 13:47 ` [Qemu-devel] [PATCH V2 2/2] machine, Add default_machine_opts to QEMUMachine anthony.perard
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).