mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
selftests: KVM: Handle compiler optimizations in ucall
[ Upstream commit 9e2f6498ef
]
The selftests, when built with newer versions of clang, is found
to have over optimized guests' ucall() function, and eliminating
the stores for uc.cmd (perhaps due to no immediate readers). This
resulted in the userspace side always reading a value of '0', and
causing multiple test failures.
As a result, prevent the compiler from optimizing the stores in
ucall() with WRITE_ONCE().
Suggested-by: Ricardo Koller <ricarkol@google.com>
Suggested-by: Reiji Watanabe <reijiw@google.com>
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
Message-Id: <20220615185706.1099208-1-rananta@google.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
bc2cee443c
commit
e423893fe3
@ -73,20 +73,19 @@ void ucall_uninit(struct kvm_vm *vm)
|
|||||||
|
|
||||||
void ucall(uint64_t cmd, int nargs, ...)
|
void ucall(uint64_t cmd, int nargs, ...)
|
||||||
{
|
{
|
||||||
struct ucall uc = {
|
struct ucall uc = {};
|
||||||
.cmd = cmd,
|
|
||||||
};
|
|
||||||
va_list va;
|
va_list va;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
WRITE_ONCE(uc.cmd, cmd);
|
||||||
nargs = nargs <= UCALL_MAX_ARGS ? nargs : UCALL_MAX_ARGS;
|
nargs = nargs <= UCALL_MAX_ARGS ? nargs : UCALL_MAX_ARGS;
|
||||||
|
|
||||||
va_start(va, nargs);
|
va_start(va, nargs);
|
||||||
for (i = 0; i < nargs; ++i)
|
for (i = 0; i < nargs; ++i)
|
||||||
uc.args[i] = va_arg(va, uint64_t);
|
WRITE_ONCE(uc.args[i], va_arg(va, uint64_t));
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
*ucall_exit_mmio_addr = (vm_vaddr_t)&uc;
|
WRITE_ONCE(*ucall_exit_mmio_addr, (vm_vaddr_t)&uc);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc)
|
uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc)
|
||||||
|
Loading…
Reference in New Issue
Block a user