From nobody Sun Apr 19 17:02:20 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC582C43334 for ; Tue, 28 Jun 2022 18:03:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234152AbiF1SDa (ORCPT ); Tue, 28 Jun 2022 14:03:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233949AbiF1SCt (ORCPT ); Tue, 28 Jun 2022 14:02:49 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4932613CCD; Tue, 28 Jun 2022 11:02:49 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id DC42861A7B; Tue, 28 Jun 2022 18:02:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E5ACC3411D; Tue, 28 Jun 2022 18:02:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656439368; bh=wRLfI31WrZ59IkEj+z6Z5ZZev9x2pVNmX2cjKkCxs74=; h=From:To:Cc:Subject:Date:From; b=mUAs0OXyMYCIQY+Msh4eCdQKG4n6S+0XnOPFWmVF8o7i/P3HdnPp3ztOq460HhKbh z+4AU3aTT8sSp/+SugH8e9oKVSUODPhdljVc1jzoKwR84n3zv0SFzUwv3Z40dyWfCQ CQ43H3wyelPh8uy27ir9wYUVZURadbwrtd3MbdLzlUyEkeUfmW1QyjIjAUAcshJEUh ov7upuSRIxL4woC018to8h/6XRZ97YV+FHTv9uGFkbb/c/CyC1mvHxaKErBwrNczxh jjD4Yu5AYnPNc3yUVZWizCQi+aAxNIqcufobbiX0VBO8LFk6WskKnVoPjiOsrqRcQi A5xzoIWS/aMJA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Raghavendra Rao Ananta , Ricardo Koller , Reiji Watanabe , Andrew Jones , Paolo Bonzini , Sasha Levin , maz@kernel.org, shuah@kernel.org, nathan@kernel.org, ndesaulniers@google.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, llvm@lists.linux.dev Subject: [PATCH MANUALSEL 5.4] selftests: KVM: Handle compiler optimizations in ucall Date: Tue, 28 Jun 2022 14:02:44 -0400 Message-Id: <20220628180244.621315-1-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Raghavendra Rao Ananta [ Upstream commit 9e2f6498efbbc880d7caa7935839e682b64fe5a6 ] 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 Suggested-by: Reiji Watanabe Signed-off-by: Raghavendra Rao Ananta Message-Id: <20220615185706.1099208-1-rananta@google.com> Reviewed-by: Andrew Jones Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- tools/testing/selftests/kvm/lib/aarch64/ucall.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/aarch64/ucall.c b/tools/testin= g/selftests/kvm/lib/aarch64/ucall.c index 6cd91970fbad..3b2a426070c4 100644 --- a/tools/testing/selftests/kvm/lib/aarch64/ucall.c +++ b/tools/testing/selftests/kvm/lib/aarch64/ucall.c @@ -73,20 +73,19 @@ void ucall_uninit(struct kvm_vm *vm) =20 void ucall(uint64_t cmd, int nargs, ...) { - struct ucall uc =3D { - .cmd =3D cmd, - }; + struct ucall uc =3D {}; va_list va; int i; =20 + WRITE_ONCE(uc.cmd, cmd); nargs =3D nargs <=3D UCALL_MAX_ARGS ? nargs : UCALL_MAX_ARGS; =20 va_start(va, nargs); for (i =3D 0; i < nargs; ++i) - uc.args[i] =3D va_arg(va, uint64_t); + WRITE_ONCE(uc.args[i], va_arg(va, uint64_t)); va_end(va); =20 - *ucall_exit_mmio_addr =3D (vm_vaddr_t)&uc; + WRITE_ONCE(*ucall_exit_mmio_addr, (vm_vaddr_t)&uc); } =20 uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc) --=20 2.35.1