From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=60377 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OOF6N-0004n2-KD for qemu-devel@nongnu.org; Mon, 14 Jun 2010 15:13:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OOF6M-0008WI-8J for qemu-devel@nongnu.org; Mon, 14 Jun 2010 15:13:43 -0400 Received: from mail-yx0-f173.google.com ([209.85.213.173]:35400) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OOF6M-0008WC-3S for qemu-devel@nongnu.org; Mon, 14 Jun 2010 15:13:42 -0400 Received: by yxn35 with SMTP id 35so923763yxn.4 for ; Mon, 14 Jun 2010 12:13:41 -0700 (PDT) Message-ID: <4C167F66.7010609@codemonkey.ws> Date: Mon, 14 Jun 2010 14:13:42 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] Add optional dump of default config file paths.. References: <4B672535.5050303@redhat.com> <4B6DBC01.4060307@redhat.com> <4C0F4B66.3010106@redhat.com> <4C166076.5060900@codemonkey.ws> <4C166E0E.3080304@redhat.com> In-Reply-To: <4C166E0E.3080304@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: john cooper Cc: qemu-devel@nongnu.org On 06/14/2010 12:59 PM, john cooper wrote: > Anthony Liguori wrote: > >> On 06/09/2010 03:05 AM, john cooper wrote: >> >>> This patch adds the ability to determine the build-configured >>> runtime "config file" paths from the command line. After >>> support for cpu model definitions were added to the default >>> runtime "target-" config file, testing of this feature has >>> tripped over an unintentionally mis-installed config file >>> enough to indicate some help is needed resolving such issues. >>> >>> As no general "verbose" flag is currently available, specifying >>> "-readconfig ?" on the command line will maintain the default >>> (config file) disposition but additionally emit diagnostic info. >>> This mode is optional, otherwise the existing startup behavior >>> is identical. >>> >>> >> I assume this is something requested by libvirt? >> > Not requested by libvirt but rather intended for the qemu > CLI facing user. The alternatives of trying to puzzle > out built-in config file paths via strace or strings when > config problems surface is rather awkward. This also > seems a general need for test of config file related > functionality. > I wouldn't mind spitting out the ./configure line in qemu -version like gcc does. That has the benefit of being a bit more obviously discoverable. Regards, Anthony Liguori > Thanks, > > -john > > >> I'd prefer we support >> this via Daniel's capabilities patchset instead of adding yet another >> hidden help output and having libvirt parse that output. >> >> Regards, >> >> Anthony Liguori >> >> >>> Signed-off-by: john cooper >>> --- >>> >>> diff --git a/qemu-config.c b/qemu-config.c >>> index 5a4e61b..a490603 100644 >>> --- a/qemu-config.c >>> +++ b/qemu-config.c >>> @@ -518,21 +518,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; >>> >>> if (f == NULL) { >>> - return -errno; >>> + rv = -errno; >>> } >>> - >>> - ret = qemu_config_parse(f, vm_config_groups, filename); >>> - fclose(f); >>> - >>> - if (ret == 0) { >>> - return 0; >>> - } else { >>> - return -EINVAL; >>> + else if (qemu_config_parse(f, vm_config_groups, filename) != 0) { >>> + rv = -EINVAL; >>> + } >>> + else if (vflag) { >>> + fprintf(stderr, "read config file %s\n", filename); >>> } >>> + if (f) { >>> + fclose(f); >>> + } >>> + if (rv&& vflag) { >>> + fprintf(stderr, "can't read config file %s: %s\n", >>> + filename, strerror(-rv)); >>> + } >>> + return rv; >>> } >>> + >>> diff --git a/qemu-config.h b/qemu-config.h >>> index dca69d4..2e15556 100644 >>> --- a/qemu-config.h >>> +++ b/qemu-config.h >>> @@ -23,6 +23,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 7121cd0..23c7276 100644 >>> --- a/vl.c >>> +++ b/vl.c >>> @@ -2582,6 +2582,7 @@ int main(int argc, char **argv, char **envp) >>> #endif >>> int show_vnc_port = 0; >>> int defconfig = 1; >>> + int defconfig_verbose = 0; >>> >>> error_set_progname(argv[0]); >>> >>> @@ -2657,6 +2658,10 @@ int main(int argc, char **argv, char **envp) >>> case QEMU_OPTION_nodefconfig: >>> defconfig=0; >>> break; >>> + case QEMU_OPTION_readconfig: >>> + if (!strcmp(optarg, "?")) >>> + defconfig_verbose = 1; >>> + break; >>> } >>> } >>> } >>> @@ -2664,12 +2669,14 @@ 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); >>> } >>> @@ -3386,15 +3393,9 @@ int main(int argc, char **argv, char **envp) >>> xen_mode = XEN_ATTACH; >>> break; >>> 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); >>> - } >>> - break; >>> - } >>> + if (!defconfig_verbose&& >>> qemu_read_config_file(optarg, 1)< 0) >>> + exit(1); >>> + break; >>> case QEMU_OPTION_writeconfig: >>> { >>> FILE *fp; >>> >>> >>> >> > >