From: "Michael S. Tsirkin" <mst@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>
Subject: Re: [Qemu-devel] [PATCH 1/2] qtest: don't configure icount if qtest not allowed
Date: Fri, 18 Oct 2013 15:13:01 +0300 [thread overview]
Message-ID: <20131018121301.GA24037@redhat.com> (raw)
In-Reply-To: <526120AF.6070806@redhat.com>
On Fri, Oct 18, 2013 at 01:51:11PM +0200, Paolo Bonzini wrote:
> Il 17/10/2013 23:52, Michael S. Tsirkin ha scritto:
> > This makes it possible to run bios under qtest
>
> Alternatively, let's split qtest_init into a part for "-machine
> accel=qtest" and one for -qtest.
>
> Also has the advantage of fixing an assertion with "qemu-system-x86_64
> -machine accel=qtest".
>
> Paolo
>
> -------------- 8< --------------------
> From: Paolo Bonzini <pbonzini@redhat.com>
> Subject: [PATCH] qtest: split configuration of qtest accelerator and chardev
>
> qtest uses the icount infrastructure to implement a test-driven vm_clock. This
> however is not necessary when using -qtest as a "probe" together with a normal
> TCG-, KVM- or Xen-based virtual machine. Hence, split out the call to
> configure_icount into a new function that is called only for "-machine
> accel=qtest"; and disable those commands when running with an accelerator
> other than qtest.
>
> This also fixes an assertion failure with "qemu-system-x86_64 -machine
> accel=qtest" but no -qtest option. This is a valid case, albeit somewhat
> weird; nothing will happen in the VM but you'll still be able to
> interact with the monitor or the GUI.
>
> Now that qtest_init is not limited to an int(void) function, change
> global variables that are not used outside qtest_init to arguments.
>
> And finally, cleanup useless parts of include/sysemu/qtest.h. The file
> is not used at all for user-only emulation, and qtest is not available
> on Win32 due to its usage of sigwait.
>
> Reported-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h
> index 3927ebb..9b138e9 100644
> --- a/include/sysemu/qtest.h
> +++ b/include/sysemu/qtest.h
> @@ -16,33 +16,23 @@
>
> #include "qemu-common.h"
>
> -#if !defined(CONFIG_USER_ONLY)
> extern bool qtest_allowed;
> -extern const char *qtest_chrdev;
> -extern const char *qtest_log;
>
> static inline bool qtest_enabled(void)
> {
> return qtest_allowed;
> }
>
> -static inline int qtest_available(void)
> -{
> - return 1;
> -}
> -
> int qtest_init_accel(void);
> void qtest_init(const char *qtest_chrdev, const char *qtest_log);
> -#else
> -static inline bool qtest_enabled(void)
> -{
> - return false;
> -}
>
> static inline int qtest_available(void)
> {
> +#ifdef CONFIG_POSIX
> + return 1;
> +#else
> return 0;
> -}
> #endif
> +}
>
> #endif
> diff --git a/qtest.c b/qtest.c
> index 584c707..dcf1301 100644
> --- a/qtest.c
> +++ b/qtest.c
> @@ -22,8 +22,6 @@
>
> #define MAX_IRQ 256
>
> -const char *qtest_chrdev;
> -const char *qtest_log;
> bool qtest_allowed;
>
> static DeviceState *irq_intercept_dev;
> @@ -406,7 +404,7 @@ static void qtest_process_command(CharDriverState *chr, gchar **words)
>
> qtest_send_prefix(chr);
> qtest_send(chr, "OK\n");
> - } else if (strcmp(words[0], "clock_step") == 0) {
> + } else if (qtest_enabled() && strcmp(words[0], "clock_step") == 0) {
> int64_t ns;
>
> if (words[1]) {
> @@ -417,7 +415,7 @@ static void qtest_process_command(CharDriverState *chr, gchar **words)
> qtest_clock_warp(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ns);
> qtest_send_prefix(chr);
> qtest_send(chr, "OK %"PRIi64"\n", (int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));
> - } else if (strcmp(words[0], "clock_set") == 0) {
> + } else if (qtest_enabled() && strcmp(words[0], "clock_set") == 0) {
> int64_t ns;
>
> g_assert(words[1]);
> @@ -502,13 +500,17 @@ static void qtest_event(void *opaque, int event)
> }
> }
>
> -int qtest_init(void)
> +int qtest_init_accel(void)
> {
> - CharDriverState *chr;
> + configure_icount("0");
>
> - g_assert(qtest_chrdev != NULL);
> + return 0;
> +}
> +
> +void qtest_init(const char *qtest_chrdev, const char *qtest_log)
> +{
> + CharDriverState *chr;
>
> - configure_icount("0");
> chr = qemu_chr_new("qtest", qtest_chrdev, NULL);
>
> qemu_chr_add_handlers(chr, qtest_can_read, qtest_read, qtest_event, chr);
> @@ -525,6 +527,4 @@ int qtest_init(void)
> }
>
> qtest_chr = chr;
> -
> - return 0;
> }
> diff --git a/vl.c b/vl.c
> index 983cdc6..568a6f5 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2624,7 +2624,7 @@ static struct {
> { "tcg", "tcg", tcg_available, tcg_init, &tcg_allowed },
> { "xen", "Xen", xen_available, xen_init, &xen_allowed },
> { "kvm", "KVM", kvm_available, kvm_init, &kvm_allowed },
> - { "qtest", "QTest", qtest_available, qtest_init, &qtest_allowed },
> + { "qtest", "QTest", qtest_available, qtest_init_accel, &qtest_allowed },
> };
>
> static int configure_accelerator(void)
> @@ -2836,6 +2836,8 @@ int main(int argc, char **argv, char **envp)
> QEMUMachine *machine;
> const char *cpu_model;
> const char *vga_model = "none";
> + const char *qtest_chrdev = NULL;
> + const char *qtest_log = NULL;
> const char *pid_file = NULL;
> const char *incoming = NULL;
> #ifdef CONFIG_VNC
> @@ -4041,8 +4043,8 @@ int main(int argc, char **argv, char **envp)
>
> configure_accelerator();
>
> - if (!qtest_enabled() && qtest_chrdev) {
> - qtest_init();
> + if (qtest_chrdev) {
> + qtest_init(qtest_chrdev, qtest_log);
> }
>
> machine_opts = qemu_get_machine_opts();
>
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> > qtest.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/qtest.c b/qtest.c
> > index 584c707..48e3288 100644
> > --- a/qtest.c
> > +++ b/qtest.c
> > @@ -508,7 +508,9 @@ int qtest_init(void)
> >
> > g_assert(qtest_chrdev != NULL);
> >
> > - configure_icount("0");
> > + if (qtest_enabled()) {
> > + configure_icount("0");
> > + }
> > chr = qemu_chr_new("qtest", qtest_chrdev, NULL);
> >
> > qemu_chr_add_handlers(chr, qtest_can_read, qtest_read, qtest_event, chr);
> >
prev parent reply other threads:[~2013-10-18 12:10 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-17 21:52 [Qemu-devel] [PATCH 1/2] qtest: don't configure icount if qtest not allowed Michael S. Tsirkin
2013-10-17 21:52 ` [Qemu-devel] [PATCH 2/2] acpi-test: basic acpi unit-test Michael S. Tsirkin
2013-10-18 5:30 ` Markus Armbruster
2013-10-18 6:36 ` Paolo Bonzini
2013-10-18 11:43 ` Markus Armbruster
2013-10-18 11:20 ` Michael S. Tsirkin
2013-10-19 0:13 ` Andreas Färber
2013-10-19 1:25 ` Anthony Liguori
2013-10-19 17:27 ` Michael S. Tsirkin
2013-10-18 11:51 ` [Qemu-devel] [PATCH 1/2] qtest: don't configure icount if qtest not allowed Paolo Bonzini
2013-10-18 12:13 ` Michael S. Tsirkin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131018121301.GA24037@redhat.com \
--to=mst@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.