From patchwork Wed Sep 11 20:41:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 1984186 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=G/xzPxA8; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20230601 header.b=dpJJEboN; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4X3svT52h5z1y1y for ; Thu, 12 Sep 2024 06:42:27 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID :Mime-Version:Date:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=7beB1c95rH2dS20KuXXqzbMTGO7ueoX9h0dozPO8Fmc=; b=G/xzPxA8lnP+5H gdjLVR7kbu4F1bkdCGsC3GkL6HGp+Kh02xdMeg5JY98GJ18/BjVkMjB8BHWvTIe8Od1pFtXFbsgfM Zpkq41bcgrseaQyok/qYtoI93nfGDkAD+eIvbUlhwc4NdPgKquPg7JfOyiYDlySFCJAiGA3PDejOr tFTt2YXP7OIVrZSHQDhFJJD6RiJUXrxuVNAsRfpWp7L7C59QnrVUC4n9KVNbGthDofQRo2QgSPyPp NaBgtbHgNwMJoutUmYXLz4pQk+DLJXhGQ9l7PWvbPw45/dtwZE7Q0rTvuGLPD+/L6yq6Nvn6efLWd jf4EkSPEJidUgNjf+yoQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1soUAT-0000000AwvI-00Fl; Wed, 11 Sep 2024 20:42:25 +0000 Received: from mail-pl1-x649.google.com ([2607:f8b0:4864:20::649]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1soUAQ-0000000AwtS-1DBk for kvm-riscv@lists.infradead.org; Wed, 11 Sep 2024 20:42:23 +0000 Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-2056364914eso4741415ad.3 for ; Wed, 11 Sep 2024 13:42:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1726087340; x=1726692140; darn=lists.infradead.org; h=cc:to:from:subject:message-id:mime-version:date:reply-to:from:to:cc :subject:date:message-id:reply-to; bh=orNyJOAcZD+rHQnmy1du5vjxEg5EiEek+mzQd7BXIvg=; b=dpJJEboN+BQSoUC1nPGytBpeJWuOqGLe+8OmftYexMeWWD+lTXLFlhRC2GwJWB85Vc NED4lBwmFSuepPADmsffDi1gmCRZ0KBUeL0KGVWq+EbrXQ84zXCAh9s89GM/uXmsswNu 9xsdoZoXERItQV7YDkPbPzI824mvdmpt8WpMsXC3FZBLziE9na+pzc1vFF+KmJKOLsFW BsLTcH28q0ULXe85Ut8TvV1gsMij4ZCpslrQqeeclAAzTTRnHrUmEgFCJWBiBytrwuMf y/Z22C0Euf0j0yk1dfBd0YIDwWkEE89RUMiWlZko3awhUgq+Y5ASwumM7eDObuBw76Tk 823A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726087340; x=1726692140; h=cc:to:from:subject:message-id:mime-version:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=orNyJOAcZD+rHQnmy1du5vjxEg5EiEek+mzQd7BXIvg=; b=lX3qalLNUntOCeRTltnlBRIkoqXObgct+KGiqhmpCFRx3OblZEWKhRghmMVN5w2mFr 32jUnYM7ddwLzzxNrgstAynFOiWdIPisrRTsSZDDLhzkFQnWkLo/ZRa5JJIq6AW2tVP0 43AlczO5H40VSfaGj2WSXLzgalISiuDxlGj7eFMY3Pj05MYXjzK8ee7MxFo/21/nxFAW TcFlYDW3tgTdWf82oJlm6LINJ1oIedcychZEAkltE1MQ2xkmALkp0w0FcrWdR/zxGLPq 8f4ZxZh0zHec4eBZrJv749E3I2QSjVxnTmI72lMwp7cZ+YFuFOzZmf7zLT7X1AKcegk2 lKWw== X-Forwarded-Encrypted: i=1; AJvYcCUNvODhqeaVvFbfsd4ABdPBQIwmBmIy3HktI1hUdI4zZIeM1Ie2Prd0VEEmjc/YXrYCIewWioXwYfQ=@lists.infradead.org X-Gm-Message-State: AOJu0Yw+RFZQRPs6HrCQLVRYcg2mRW9nnCNSeRecHlsh/WcmzKOzZC+F WHAzK2WMOED+8vEWfbLJ2C3xqsMg8blC8qy7/O5r24L0eLKFNwzZYSbQSZlFaUx/B/LnNATpk+k RgQ== X-Google-Smtp-Source: AGHT+IFaujE7hEx/7weEqZv4CBEUENGoY66e8hJCtiz3GOrHctREiAah0BDLkxA9YXouCGo9V+1XVtyv7hY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:dac9:b0:1fd:60c4:6930 with SMTP id d9443c01a7336-2076e44762amr350555ad.10.1726087340433; Wed, 11 Sep 2024 13:42:20 -0700 (PDT) Date: Wed, 11 Sep 2024 13:41:45 -0700 Mime-Version: 1.0 X-Mailer: git-send-email 2.46.0.598.g6f2099f65c-goog Message-ID: <20240911204158.2034295-1-seanjc@google.com> Subject: [PATCH v2 00/13] KVM: selftests: Morph max_guest_mem to mmu_stress From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Anup Patel , Paolo Bonzini , Christian Borntraeger , Janosch Frank , Claudio Imbrenda Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Sean Christopherson , James Houghton X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240911_134222_354253_75843569 X-CRM114-Status: GOOD ( 20.75 ) X-Spam-Score: -9.5 (---------) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Marc/Oliver, I would love a sanity check on patches 2 and 3 before I file a bug against gcc. The code is pretty darn simple, so I don't think I've misdiagnosed the problem, but I've also been second guessing mysel [...] Content analysis details: (-9.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM welcome-list 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:649 listed in] [list.dnswl.org] -0.0 DKIMWL_WL_MED DKIMwl.org - Medium trust sender X-BeenThere: kvm-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Sean Christopherson Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Marc/Oliver, I would love a sanity check on patches 2 and 3 before I file a bug against gcc. The code is pretty darn simple, so I don't think I've misdiagnosed the problem, but I've also been second guessing myself _because_ it's so simple; it seems super unlikely that no one else would have run into this before. On to the patches... The main purpose of this series is to convert the max_guest_memory_test into a more generic mmu_stress_test. The patches were originally posted as part a KVM x86/mmu series to test the x86/mmu changes, hence the v2. The basic gist of the "conversion" is to have the test do mprotect() on guest memory while vCPUs are accessing said memory, e.g. to verify KVM and mmu_notifiers are working as intended. Patches 1-4 are a somewhat unexpected side quest that I can (arguably should) post separately if that would make things easier. The original plan was that patch 2 would be a single patch, but things snowballed. Patch 2 reworks vcpu_get_reg() to return a value instead of using an out-param. This is the entire motivation for including these patches; having to define a variable just to bump the program counter on arm64 annoyed me. Patch 4 adds hardening to vcpu_{g,s}et_reg() to detect potential truncation, as KVM's uAPI allows for registers greater than the 64 bits the are supported in the "outer" selftests APIs ((vcpu_set_reg() takes a u64, vcpu_get_reg() now returns a u64). Patch 1 is a change to KVM's uAPI headers to move the KVM_REG_SIZE definition to common code so that the selftests side of things doesn't need #ifdefs to implement the hardening in patch 4. Patch 3 is the truly unexpected part. With the vcpu_get_reg() rework, arm64's vpmu_counter_test fails when compiled with gcc-13, and on gcc-11 with an added "noinline". AFAICT, the failure doesn't actually have anything to with vcpu_get_reg(); I suspect the largely unrelated change just happened to run afoul of a latent gcc bug. Pending a sanity check, I will file a gcc bug. In the meantime, I am hoping to fudge around the issue in KVM selftests so that the vcpu_get_reg() cleanup isn't blocked, and because the hack-a-fix is arguably a cleanup on its own. v2: - Rebase onto kvm/next. - Add the aforementioned vcpu_get_reg() changes/disaster. - Actually add arm64 support for the fancy mprotect() testcase (I did this before v1, but managed to forget to include the changes when posting). - Emit "mov %rax, (%rax)" on x86. [James] - Add a comment to explain the fancy mprotect() vs. vCPUs logic. - Drop the KVM x86 patches (applied and/or will be handled separately). v1: https://lore.kernel.org/all/20240809194335.1726916-1-seanjc@google.com Sean Christopherson (13): KVM: Move KVM_REG_SIZE() definition to common uAPI header KVM: selftests: Return a value from vcpu_get_reg() instead of using an out-param KVM: selftests: Fudge around an apparent gcc bug in arm64's PMU test KVM: selftests: Assert that vcpu_{g,s}et_reg() won't truncate KVM: selftests: Check for a potential unhandled exception iff KVM_RUN succeeded KVM: selftests: Rename max_guest_memory_test to mmu_stress_test KVM: selftests: Only muck with SREGS on x86 in mmu_stress_test KVM: selftests: Compute number of extra pages needed in mmu_stress_test KVM: selftests: Enable mmu_stress_test on arm64 KVM: selftests: Use vcpu_arch_put_guest() in mmu_stress_test KVM: selftests: Precisely limit the number of guest loops in mmu_stress_test KVM: selftests: Add a read-only mprotect() phase to mmu_stress_test KVM: selftests: Verify KVM correctly handles mprotect(PROT_READ) arch/arm64/include/uapi/asm/kvm.h | 3 - arch/riscv/include/uapi/asm/kvm.h | 3 - include/uapi/linux/kvm.h | 4 + tools/testing/selftests/kvm/Makefile | 3 +- .../selftests/kvm/aarch64/aarch32_id_regs.c | 10 +- .../selftests/kvm/aarch64/debug-exceptions.c | 4 +- .../selftests/kvm/aarch64/hypercalls.c | 6 +- .../testing/selftests/kvm/aarch64/psci_test.c | 6 +- .../selftests/kvm/aarch64/set_id_regs.c | 18 +- .../kvm/aarch64/vpmu_counter_access.c | 27 ++- .../testing/selftests/kvm/include/kvm_util.h | 10 +- .../selftests/kvm/lib/aarch64/processor.c | 8 +- tools/testing/selftests/kvm/lib/kvm_util.c | 3 +- .../selftests/kvm/lib/riscv/processor.c | 66 +++---- ..._guest_memory_test.c => mmu_stress_test.c} | 161 ++++++++++++++++-- .../testing/selftests/kvm/riscv/arch_timer.c | 2 +- .../testing/selftests/kvm/riscv/ebreak_test.c | 2 +- .../selftests/kvm/riscv/sbi_pmu_test.c | 2 +- tools/testing/selftests/kvm/s390x/resets.c | 2 +- tools/testing/selftests/kvm/steal_time.c | 3 +- 20 files changed, 236 insertions(+), 107 deletions(-) rename tools/testing/selftests/kvm/{max_guest_memory_test.c => mmu_stress_test.c} (60%) base-commit: 15e1c3d65975524c5c792fcd59f7d89f00402261