From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org, Gleb Natapov <gleb@redhat.com>,
kvm@vger.kernel.org, patches@linaro.org,
Andreas Tobler <andreast@freebsd.org>,
Anthony Liguori <aliguori@amazon.com>
Subject: Re: [PATCH for-1.7] target-i386: Fix build by providing stub kvm_arch_get_supported_cpuid()
Date: Mon, 11 Nov 2013 23:19:57 +0100 [thread overview]
Message-ID: <5281580D.7060305@redhat.com> (raw)
In-Reply-To: <1384204922-8250-1-git-send-email-peter.maydell@linaro.org>
Il 11/11/2013 22:22, Peter Maydell ha scritto:
> Fix build failures with clang when KVM is not enabled by
> providing a stub version of kvm_arch_get_supported_cpuid().
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
No, please don't. We are already relying on dead code elimination for
KVM code (I didn't introduce the idiom), even in very similar code like
this one:
if (kvm_enabled() && cpu->enable_pmu) {
KVMState *s = cs->kvm_state;
*eax = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EAX);
*ebx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EBX);
*ecx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_ECX);
*edx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EDX);
} else {
*eax = 0;
*ebx = 0;
*ecx = 0;
*edx = 0;
}
This is the first time that it breaks, and only on clang. So this
really points at the very least at a compiler quirk (though perhaps not
a bug in the formal sense). The point of kvm-stub.c is not to work
around compiler quirks, it is to avoid peppering the code with
kvm_enabled(). Adding a stub is wrong if the return code makes no sense
(as is the case here).
> I wouldn't be surprised if this also affected debug gcc
> builds with KVM disabled, but I haven't checked.
No, it doesn't affect GCC. See Andreas's bug report. Is it a bug or a
feature? Having some kind of -O0 dead-code elimination is definitely a
feature (http://gcc.gnu.org/ml/gcc-patches/2003-03/msg02443.html). That
first implementation already handled "||" and "&&" just fine, though it
didn't handle "break"/"continue"/"goto" in the clauses of the "if"
statement. I think it would be considered a regression if this ceased
to work, but of course I may be wrong.
I am okay with Andreas's patch of course, but it would also be fine with
me to split the "if" in two, each with its own separate break statement.
Since it only affects debug builds, there is no hurry to fix this in 1.7
if the approach cannot be agreed with.
> Incidentally, since this is an x86 specific function its
> prototype should be moved into target-i386/kvm_i386.h, but
> that's a separate patch.
Yes, this I obviously agree with.
Paolo
> target-i386/kvm-stub.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/target-i386/kvm-stub.c b/target-i386/kvm-stub.c
> index 11429c4..18fe938 100644
> --- a/target-i386/kvm-stub.c
> +++ b/target-i386/kvm-stub.c
> @@ -16,3 +16,9 @@ bool kvm_allows_irq0_override(void)
> {
> return 1;
> }
> +
> +uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
> + uint32_t index, int reg)
> +{
> + return 0;
> +}
>
next prev parent reply other threads:[~2013-11-11 22:20 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-11 21:22 [PATCH for-1.7] target-i386: Fix build by providing stub kvm_arch_get_supported_cpuid() Peter Maydell
2013-11-11 21:28 ` Andreas Tobler
2013-11-11 22:19 ` Paolo Bonzini [this message]
2013-11-11 22:38 ` Peter Maydell
2013-11-11 23:11 ` Paolo Bonzini
2013-11-11 23:21 ` Anthony Liguori
2013-11-12 7:09 ` Paolo Bonzini
2013-11-12 11:07 ` Peter Maydell
2013-11-12 12:09 ` Paolo Bonzini
2013-11-12 12:16 ` Peter Maydell
2013-11-12 13:12 ` Paolo Bonzini
2013-11-12 13:21 ` Peter Maydell
2013-11-12 13:26 ` Gleb Natapov
2013-11-12 13:23 ` Gleb Natapov
2013-11-12 13:57 ` Paolo Bonzini
2013-11-12 14:09 ` Gleb Natapov
2013-11-12 14:14 ` Peter Maydell
2013-11-12 14:57 ` Paolo Bonzini
2013-11-12 15:13 ` Peter Maydell
2013-11-12 15:21 ` Paolo Bonzini
2013-11-12 15:32 ` Peter Maydell
2013-11-12 15:58 ` Paolo Bonzini
2013-11-12 16:08 ` Peter Maydell
2013-11-12 17:04 ` Anthony Liguori
2013-11-12 17:20 ` Peter Maydell
2013-11-12 18:54 ` [Qemu-devel] " Richard Henderson
2013-11-12 18:57 ` Peter Maydell
2013-11-12 19:15 ` Stefan Weil
2013-11-12 22:53 ` [Qemu-devel] " Paolo Bonzini
2013-11-13 2:27 ` Richard Henderson
2013-11-13 7:25 ` Paolo Bonzini
2013-11-13 22:23 ` Peter Maydell
2013-11-13 7:26 ` Gleb Natapov
2013-11-12 14:01 ` Peter Maydell
2013-11-11 23:23 ` Peter Maydell
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=5281580D.7060305@redhat.com \
--to=pbonzini@redhat.com \
--cc=aliguori@amazon.com \
--cc=andreast@freebsd.org \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox