linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] KVM: selftests: fix ucall on x86
@ 2019-09-25 13:12 Vitaly Kuznetsov
  2019-09-25 13:15 ` Paolo Bonzini
  0 siblings, 1 reply; 2+ messages in thread
From: Vitaly Kuznetsov @ 2019-09-25 13:12 UTC (permalink / raw)
  To: kvm
  Cc: linux-kernel, Paolo Bonzini, Radim Krčmář,
	Sean Christopherson, Jim Mattson, Thomas Huth, Andrew Jones,
	Cornelia Huck

After commit e8bb4755eea2("KVM: selftests: Split ucall.c into architecture
specific files") selftests which use ucall on x86 started segfaulting and
apparently it's gcc to blame: it "optimizes" ucall() function throwing away
va_start/va_end part because it thinks the structure is not being used.
Previously, it couldn't do that because the there was also MMIO version and
the decision which particular implementation to use was done at runtime.

With older gccs it's possible to solve the problem by adding 'volatile'
to 'struct ucall' but at least with gcc-8.3 this trick doesn't work.

'memory' clobber seems to do the job.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
s390 should, in theory, have the same problem. Thomas, Cornelia, could
you please take a look? Thanks!
---
 tools/testing/selftests/kvm/lib/x86_64/ucall.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/kvm/lib/x86_64/ucall.c b/tools/testing/selftests/kvm/lib/x86_64/ucall.c
index 4bfc9a90b1de..da4d89ad5419 100644
--- a/tools/testing/selftests/kvm/lib/x86_64/ucall.c
+++ b/tools/testing/selftests/kvm/lib/x86_64/ucall.c
@@ -32,7 +32,7 @@ void ucall(uint64_t cmd, int nargs, ...)
 	va_end(va);
 
 	asm volatile("in %[port], %%al"
-		: : [port] "d" (UCALL_PIO_PORT), "D" (&uc) : "rax");
+		: : [port] "d" (UCALL_PIO_PORT), "D" (&uc) : "rax", "memory");
 }
 
 uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] KVM: selftests: fix ucall on x86
  2019-09-25 13:12 [PATCH] KVM: selftests: fix ucall on x86 Vitaly Kuznetsov
@ 2019-09-25 13:15 ` Paolo Bonzini
  0 siblings, 0 replies; 2+ messages in thread
From: Paolo Bonzini @ 2019-09-25 13:15 UTC (permalink / raw)
  To: Vitaly Kuznetsov, kvm
  Cc: linux-kernel, Radim Krčmář,
	Sean Christopherson, Jim Mattson, Thomas Huth, Andrew Jones,
	Cornelia Huck

On 25/09/19 15:12, Vitaly Kuznetsov wrote:
> After commit e8bb4755eea2("KVM: selftests: Split ucall.c into architecture
> specific files") selftests which use ucall on x86 started segfaulting and
> apparently it's gcc to blame: it "optimizes" ucall() function throwing away
> va_start/va_end part because it thinks the structure is not being used.
> Previously, it couldn't do that because the there was also MMIO version and
> the decision which particular implementation to use was done at runtime.
> 
> With older gccs it's possible to solve the problem by adding 'volatile'
> to 'struct ucall' but at least with gcc-8.3 this trick doesn't work.
> 
> 'memory' clobber seems to do the job.
> 
> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
> ---
> s390 should, in theory, have the same problem. Thomas, Cornelia, could
> you please take a look? Thanks!
> ---
>  tools/testing/selftests/kvm/lib/x86_64/ucall.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/kvm/lib/x86_64/ucall.c b/tools/testing/selftests/kvm/lib/x86_64/ucall.c
> index 4bfc9a90b1de..da4d89ad5419 100644
> --- a/tools/testing/selftests/kvm/lib/x86_64/ucall.c
> +++ b/tools/testing/selftests/kvm/lib/x86_64/ucall.c
> @@ -32,7 +32,7 @@ void ucall(uint64_t cmd, int nargs, ...)
>  	va_end(va);
>  
>  	asm volatile("in %[port], %%al"
> -		: : [port] "d" (UCALL_PIO_PORT), "D" (&uc) : "rax");
> +		: : [port] "d" (UCALL_PIO_PORT), "D" (&uc) : "rax", "memory");
>  }
>  
>  uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc)
> 

Queued, thanks.  s390 already clobbers memory.

Paolo

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-09-25 13:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-25 13:12 [PATCH] KVM: selftests: fix ucall on x86 Vitaly Kuznetsov
2019-09-25 13:15 ` Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).