[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RHEL6 qemu-kvm PATCH 04/11] Support -readconfig "?" to deb
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [RHEL6 qemu-kvm PATCH 04/11] Support -readconfig "?" to debug config file loading |
Date: |
Thu, 2 Jun 2011 16:13:03 -0300 |
From: john cooper <address@hidden>
Failure by qemu to open a default config file isn't cause to
error exit -- it just quietly continues on. After puzzling
issues with otherwise opaque config file locations and
startup handling numerous times, some help from qemu seemed
justified.
In the case of a "?" pseudo filename arg to -readconfig,
verbose open of all config files will be enabled. Normal
handling of config files is otherwise unaffected by this
option.
Note: other CLI flag schemes have been discussed at length
to accommodate this option. However given the constraints
of the existing user interface, a solution which minimally
impacts the user is ultimately required.
[ehabkost: edited commit message to have better Subject line]
Signed-off-by: john cooper <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
qemu-config.c | 30 +++++++++++++++++++-----------
qemu-config.h | 2 +-
vl.c | 20 +++++++++++++-------
3 files changed, 33 insertions(+), 19 deletions(-)
diff --git a/qemu-config.c b/qemu-config.c
index 5d7ffa2..b39b8fe 100644
--- a/qemu-config.c
+++ b/qemu-config.c
@@ -666,21 +666,29 @@ out:
return res;
}
-int qemu_read_config_file(const char *filename)
+/* attempt to open and parse config file, report problems if vflag
+ */
+int qemu_read_config_file(const char *filename, int vflag)
{
FILE *f = fopen(filename, "r");
- int ret;
+ int rv = 0;
+ const char *err;
if (f == NULL) {
- return -errno;
+ rv = -errno;
+ err = "open";
+ } else if (qemu_config_parse(f, vm_config_groups, filename) != 0) {
+ rv = -EINVAL;
+ err = "parse";
+ } else if (vflag) {
+ fprintf(stderr, "parsed config file %s\n", filename);
}
-
- ret = qemu_config_parse(f, vm_config_groups, filename);
- fclose(f);
-
- if (ret == 0) {
- return 0;
- } else {
- return -EINVAL;
+ if (f) {
+ fclose(f);
+ }
+ if (rv && vflag) {
+ fprintf(stderr, "can't %s config file %s: %s\n",
+ err, filename, strerror(-rv));
}
+ return rv;
}
diff --git a/qemu-config.h b/qemu-config.h
index 20d707f..b90a7cc 100644
--- a/qemu-config.h
+++ b/qemu-config.h
@@ -14,6 +14,6 @@ void qemu_add_globals(void);
void qemu_config_write(FILE *fp);
int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname);
-int qemu_read_config_file(const char *filename);
+int qemu_read_config_file(const char *filename, int vflag);
#endif /* QEMU_CONFIG_H */
diff --git a/vl.c b/vl.c
index b362871..65b0791 100644
--- a/vl.c
+++ b/vl.c
@@ -2059,6 +2059,7 @@ int main(int argc, char **argv, char **envp)
int show_vnc_port = 0;
#endif
int defconfig = 1;
+ int defconfig_verbose = 0;
const char *trace_file = NULL;
atexit(qemu_run_exit_notifiers);
@@ -2108,6 +2109,12 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_nodefconfig:
defconfig=0;
break;
+ case QEMU_OPTION_readconfig:
+ /* pseudo filename "?" enables verbose config file handling */
+ if (!strcmp(optarg, "?")) {
+ defconfig_verbose = 1;
+ }
+ break;
}
}
}
@@ -2115,12 +2122,13 @@ int main(int argc, char **argv, char **envp)
if (defconfig) {
int ret;
- ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
+ ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf",
+ defconfig_verbose);
if (ret < 0 && ret != -ENOENT) {
exit(1);
}
- ret = qemu_read_config_file(arch_config_name);
+ ret = qemu_read_config_file(arch_config_name, defconfig_verbose);
if (ret < 0 && ret != -ENOENT) {
exit(1);
}
@@ -2857,11 +2865,9 @@ int main(int argc, char **argv, char **envp)
#endif
case QEMU_OPTION_readconfig:
{
- int ret = qemu_read_config_file(optarg);
- if (ret < 0) {
- fprintf(stderr, "read config %s: %s\n", optarg,
- strerror(-ret));
- exit(1);
+ if (strcmp(optarg, "?") &&
+ qemu_read_config_file(optarg, defconfig_verbose) < 0) {
+ exit(1);
}
break;
}
--
1.7.3.2
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 00/11] cpu model bug fixes and definition corrections (v2), Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 02/11] Allow an optional qemu_early_init_vcpu(), Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 05/11] cpu defs: use Intel flag names for Intel models, Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 08/11] reorder cpuid feature bits on target-x86_64.conf, Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 04/11] Support -readconfig "?" to debug config file loading,
Eduardo Habkost <=
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 03/11] Add kvm emulated x2apic flag to config defined cpu models (v2), Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 01/11] correct archaic CPU model "model" field for Intel CPUs., Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 09/11] cpu defs: add pse36, mca, mtrr to AMD CPU definitions, Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 10/11] add Westmere as a qemu cpu model, Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 07/11] cpu defs: uncomment empty extfeatures_ecx definition for Opteron_G1, Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 11/11] add "default" pseudo CPU model name, Eduardo Habkost, 2011/06/02
- [Qemu-devel] [RHEL6 qemu-kvm PATCH 06/11] cpu defs: remove replicated flags from Intel, Eduardo Habkost, 2011/06/02
- Re: [Qemu-devel] [PATCH 00/11] cpu model bug fixes and definition corrections (v2), Eduardo Habkost, 2011/06/02