From nobody Thu Apr 2 01:51:06 2026 Received: from cstnet.cn (smtp81.cstnet.cn [159.226.251.81]) (using TLSv1.2 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 469C92222C5; Tue, 3 Mar 2026 01:09:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.226.251.81 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772500165; cv=none; b=qI9iwFZXfkAQ4kseFf9a/xBkZO1pzwh5UKb/wD3gZkDtJLr+gtgHHCzQnlZlaHVH5Ti2CiZ4i9OU+WitEA7X2Cy3s7sM6mIWyC/MvdOxk75IvwFmj+Lge+mrDG/zZgHhPQ6pxkwodXxiU46OXGJ/sa7BlEVPT24l126a5VMeZ+I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772500165; c=relaxed/simple; bh=Pbf4n9RZ8mDHNaFL/xu6QGfVb+RkkB4dGKrldlcKl1U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ja3yCG/S5j8APJAL/F560klloLuqQ/NbBYo8Mhsyf0hN/gSuVdM1SU0qyWZdSWeR1hXlHLdqDiyNkBJ0bOgUjAlRuzVeNkkzpKeO2WzXD2kuwgTUgQXJQWM2K490KxmHDgOnYEH09lYV8pPOD3/meV8S7F+ZJ3m9YEsZTv96Eso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn; spf=pass smtp.mailfrom=iscas.ac.cn; arc=none smtp.client-ip=159.226.251.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iscas.ac.cn Received: from fric.. (unknown [210.73.43.101]) by APP-03 (Coremail) with SMTP id rQCowABXZ86tNKZp7tu6CQ--.27620S5; Tue, 03 Mar 2026 09:09:04 +0800 (CST) From: Jiakai Xu To: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org, kvm@vger.kernel.org Cc: Alexandre Ghiti , Paolo Bonzini , Shuah Khan , Paul Walmsley , Palmer Dabbelt , Andrew Jones , Anup Patel , Atish Patra , Albert Ou , Jiakai Xu , Jiakai Xu , Andrew Jones Subject: [PATCH v10 3/3] RISC-V: KVM: selftests: Add RISC-V SBI STA shmem alignment tests Date: Tue, 3 Mar 2026 01:08:59 +0000 Message-Id: <20260303010859.1763177-4-xujiakai2025@iscas.ac.cn> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260303010859.1763177-1-xujiakai2025@iscas.ac.cn> References: <20260303010859.1763177-1-xujiakai2025@iscas.ac.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: rQCowABXZ86tNKZp7tu6CQ--.27620S5 X-Coremail-Antispam: 1UD129KBjvJXoWxCr1fKw17CryftrW8KrW3Jrb_yoW5uw4fpF WkCrn0gF18Kws3ArWxKF4kXFWrWw4vkr4vvry3Zw40yF4xJrs7AryxKF4DZ3s8ursYqF1a vFySqF1UuF4UAaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUH014x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JrWl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Xr0_Ar1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UM2 8EF7xvwVC2z280aVAFwI0_Cr1j6rxdM28EF7xvwVC2z280aVCY1x0267AKxVWxJr0_GcWl nxkEFVAIw20F6cxK64vIFxWle2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4 CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvj eVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I 1lFIxGxcIEc7CjxVA2Y2ka0xkIwI1lc7CjxVAaw2AFwI0_GFv_Wrylc2xSY4AK67AK6w4l 42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJV WUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r4a6rW5MIIYrxkI7VAK I48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26F4j6r 4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAI cVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7sRiqXHPUUUUU== X-CM-SenderInfo: 50xmxthndljiysv6x2xfdvhtffof0/1tbiBg0PCWmmMaoLmQAAsL Content-Type: text/plain; charset="utf-8" Add RISC-V KVM selftests to verify the SBI Steal-Time Accounting (STA) shared memory alignment requirements. The SBI specification requires the STA shared memory GPA to be 64-byte aligned, or set to all-ones to explicitly disable steal-time accounting. This test verifies that KVM enforces the expected behavior when configuring the SBI STA shared memory via KVM_SET_ONE_REG. Specifically, the test checks that: - misaligned GPAs are rejected with -EINVAL - 64-byte aligned GPAs are accepted - all-ones GPA is accepted Signed-off-by: Jiakai Xu Signed-off-by: Jiakai Xu Reviewed-by: Andrew Jones --- V8 -> V9: Dropped __riscv guard around INVALID_GPA, which is common to all architectures. V7 -> V8: Moved INVALID_GPA definition to kvm_util_types.h. Removed comments in RISC-V check_steal_time_uapi(). Corrected reg.id assignment for SBI STA. V6 -> V7: Removed RISCV_SBI_STA_REG() macro addition and used existing KVM_REG_RISCV_SBI_STA_REG(shmem_lo) instead. Refined assertion messages per review feedback. Split into two patches per Andrew Jones' suggestion: Refactored UAPI tests from steal_time_init() into dedicated check_steal_time_uapi() function and added empty stub for RISC-V. Filled in RISC-V stub with STA alignment tests. (this patch) --- .../selftests/kvm/include/kvm_util_types.h | 2 ++ tools/testing/selftests/kvm/steal_time.c | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/tools/testing/selftests/kvm/include/kvm_util_types.h b/tools/t= esting/selftests/kvm/include/kvm_util_types.h index ec787b97cf184..0366e9bce7f93 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_types.h +++ b/tools/testing/selftests/kvm/include/kvm_util_types.h @@ -17,4 +17,6 @@ typedef uint64_t vm_paddr_t; /* Virtual Machine (Guest) physical address */ typedef uint64_t vm_vaddr_t; /* Virtual Machine (Guest) virtual address */ =20 +#define INVALID_GPA (~(uint64_t)0) + #endif /* SELFTEST_KVM_UTIL_TYPES_H */ diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selft= ests/kvm/steal_time.c index 35bace3480f3f..bf27c109cc638 100644 --- a/tools/testing/selftests/kvm/steal_time.c +++ b/tools/testing/selftests/kvm/steal_time.c @@ -332,6 +332,37 @@ static void steal_time_dump(struct kvm_vm *vm, uint32_= t vcpu_idx) =20 static void check_steal_time_uapi(void) { + struct kvm_vm *vm; + struct kvm_vcpu *vcpu; + struct kvm_one_reg reg; + uint64_t shmem; + int ret; + + vm =3D vm_create_with_one_vcpu(&vcpu, NULL); + + reg.id =3D KVM_REG_RISCV | + KVM_REG_SIZE_ULONG | + KVM_REG_RISCV_SBI_STATE | + KVM_REG_RISCV_SBI_STA | + KVM_REG_RISCV_SBI_STA_REG(shmem_lo); + reg.addr =3D (uint64_t)&shmem; + + shmem =3D ST_GPA_BASE + 1; + ret =3D __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); + TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, + "misaligned STA shmem returns -EINVAL"); + + shmem =3D ST_GPA_BASE; + ret =3D __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); + TEST_ASSERT(ret =3D=3D 0, + "aligned STA shmem succeeds"); + + shmem =3D INVALID_GPA; + ret =3D __vcpu_ioctl(vcpu, KVM_SET_ONE_REG, ®); + TEST_ASSERT(ret =3D=3D 0, + "all-ones for STA shmem succeeds"); + + kvm_vm_free(vm); } =20 #endif --=20 2.34.1