mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-28 14:00:44 +00:00
vl.c: allocate TYPE_MACHINE list once during bootup
Now all the functions used to select machine is local and the call flow looks like below: select_machine() find_default_machine() machine_parse() find_machine() All these related function will need a GSList for TYPE_MACHINE. Currently we allocate this list each time we use it, while this is not necessary to do so because we don't need to modify this. This patch make the TYPE_MACHINE list allocation in select_machine and pass this to its child for use. Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20190405064121.23662-3-richardw.yang@linux.intel.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
06433c27c1
commit
c516cd1b34
24
vl.c
24
vl.c
@ -1465,9 +1465,9 @@ static int usb_parse(const char *cmdline)
|
||||
|
||||
MachineState *current_machine;
|
||||
|
||||
static MachineClass *find_machine(const char *name)
|
||||
static MachineClass *find_machine(const char *name, GSList *machines)
|
||||
{
|
||||
GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
|
||||
GSList *el;
|
||||
MachineClass *mc = NULL;
|
||||
|
||||
for (el = machines; el; el = el->next) {
|
||||
@ -1484,13 +1484,12 @@ static MachineClass *find_machine(const char *name)
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free(machines);
|
||||
return mc;
|
||||
}
|
||||
|
||||
static MachineClass *find_default_machine(void)
|
||||
static MachineClass *find_default_machine(GSList *machines)
|
||||
{
|
||||
GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
|
||||
GSList *el;
|
||||
MachineClass *mc = NULL;
|
||||
|
||||
for (el = machines; el; el = el->next) {
|
||||
@ -1502,7 +1501,6 @@ static MachineClass *find_default_machine(void)
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free(machines);
|
||||
return mc;
|
||||
}
|
||||
|
||||
@ -2585,16 +2583,15 @@ static gint machine_class_cmp(gconstpointer a, gconstpointer b)
|
||||
object_class_get_name(OBJECT_CLASS(mc1)));
|
||||
}
|
||||
|
||||
static MachineClass *machine_parse(const char *name)
|
||||
static MachineClass *machine_parse(const char *name, GSList *machines)
|
||||
{
|
||||
MachineClass *mc = NULL;
|
||||
GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
|
||||
GSList *el;
|
||||
|
||||
if (name) {
|
||||
mc = find_machine(name);
|
||||
mc = find_machine(name, machines);
|
||||
}
|
||||
if (mc) {
|
||||
g_slist_free(machines);
|
||||
return mc;
|
||||
}
|
||||
if (name && !is_help_option(name)) {
|
||||
@ -2614,7 +2611,6 @@ static gint machine_class_cmp(gconstpointer a, gconstpointer b)
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free(machines);
|
||||
exit(!name || !is_help_option(name));
|
||||
}
|
||||
|
||||
@ -2706,7 +2702,8 @@ static const QEMUOption *lookup_opt(int argc, char **argv,
|
||||
|
||||
static MachineClass *select_machine(void)
|
||||
{
|
||||
MachineClass *machine_class = find_default_machine();
|
||||
GSList *machines = object_class_get_list(TYPE_MACHINE, false);
|
||||
MachineClass *machine_class = find_default_machine(machines);
|
||||
const char *optarg;
|
||||
QemuOpts *opts;
|
||||
Location loc;
|
||||
@ -2718,7 +2715,7 @@ static MachineClass *select_machine(void)
|
||||
|
||||
optarg = qemu_opt_get(opts, "type");
|
||||
if (optarg) {
|
||||
machine_class = machine_parse(optarg);
|
||||
machine_class = machine_parse(optarg, machines);
|
||||
}
|
||||
|
||||
if (!machine_class) {
|
||||
@ -2728,6 +2725,7 @@ static MachineClass *select_machine(void)
|
||||
}
|
||||
|
||||
loc_pop(&loc);
|
||||
g_slist_free(machines);
|
||||
return machine_class;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user