]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
RISC-V: KVM: Add SBI STA extension skeleton
authorAndrew Jones <ajones@ventanamicro.com>
Wed, 20 Dec 2023 16:00:17 +0000 (17:00 +0100)
committerAnup Patel <anup@brainfault.org>
Sat, 30 Dec 2023 05:56:20 +0000 (11:26 +0530)
Add the files and functions needed to support the SBI STA
(steal-time accounting) extension. In the next patches we'll
complete the functions to fully enable SBI STA support.

Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
Signed-off-by: Anup Patel <anup@brainfault.org>
arch/riscv/include/asm/kvm_vcpu_sbi.h
arch/riscv/include/uapi/asm/kvm.h
arch/riscv/kvm/Makefile
arch/riscv/kvm/vcpu_sbi.c
arch/riscv/kvm/vcpu_sbi_sta.c [new file with mode: 0644]

index bffda0ac59b61d13737dccc3c1647b25c299d97f..99c23bb37a3748731237f8f70c99be5bfbce5055 100644 (file)
@@ -76,6 +76,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_rfence;
 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst;
 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm;
 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn;
+extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta;
 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental;
 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor;
 
index 60d3b21dead7d8846050d20a96ef1a0b3ad1ba20..e961d79622fbd33a0615b2d25c5a34a2efd93f76 100644 (file)
@@ -157,6 +157,7 @@ enum KVM_RISCV_SBI_EXT_ID {
        KVM_RISCV_SBI_EXT_EXPERIMENTAL,
        KVM_RISCV_SBI_EXT_VENDOR,
        KVM_RISCV_SBI_EXT_DBCN,
+       KVM_RISCV_SBI_EXT_STA,
        KVM_RISCV_SBI_EXT_MAX,
 };
 
index 4c2067fc59fcbf004e0c7df753a6c31ad70ee8e0..c9646521f1132e5a9ea8b1e1c327823224927bbc 100644 (file)
@@ -26,6 +26,7 @@ kvm-$(CONFIG_RISCV_SBI_V01) += vcpu_sbi_v01.o
 kvm-y += vcpu_sbi_base.o
 kvm-y += vcpu_sbi_replace.o
 kvm-y += vcpu_sbi_hsm.o
+kvm-y += vcpu_sbi_sta.o
 kvm-y += vcpu_timer.o
 kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_pmu.o vcpu_sbi_pmu.o
 kvm-y += aia.o
index dcdff44581906ab94a84b166bcd5eab9cc86a6d0..088daaa23dd8aed3a7bf486077214e30f1d9ae46 100644 (file)
@@ -70,6 +70,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ext[] = {
                .ext_idx = KVM_RISCV_SBI_EXT_DBCN,
                .ext_ptr = &vcpu_sbi_ext_dbcn,
        },
+       {
+               .ext_idx = KVM_RISCV_SBI_EXT_STA,
+               .ext_ptr = &vcpu_sbi_ext_sta,
+       },
        {
                .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL,
                .ext_ptr = &vcpu_sbi_ext_experimental,
diff --git a/arch/riscv/kvm/vcpu_sbi_sta.c b/arch/riscv/kvm/vcpu_sbi_sta.c
new file mode 100644 (file)
index 0000000..839911d
--- /dev/null
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2023 Ventana Micro Systems Inc.
+ */
+
+#include <linux/kvm_host.h>
+
+#include <asm/kvm_vcpu_sbi.h>
+#include <asm/sbi.h>
+
+static int kvm_sbi_sta_steal_time_set_shmem(struct kvm_vcpu *vcpu)
+{
+       return SBI_ERR_FAILURE;
+}
+
+static int kvm_sbi_ext_sta_handler(struct kvm_vcpu *vcpu, struct kvm_run *run,
+                                  struct kvm_vcpu_sbi_return *retdata)
+{
+       struct kvm_cpu_context *cp = &vcpu->arch.guest_context;
+       unsigned long funcid = cp->a6;
+       int ret;
+
+       switch (funcid) {
+       case SBI_EXT_STA_STEAL_TIME_SET_SHMEM:
+               ret = kvm_sbi_sta_steal_time_set_shmem(vcpu);
+               break;
+       default:
+               ret = SBI_ERR_NOT_SUPPORTED;
+               break;
+       }
+
+       retdata->err_val = ret;
+
+       return 0;
+}
+
+static unsigned long kvm_sbi_ext_sta_probe(struct kvm_vcpu *vcpu)
+{
+       return 0;
+}
+
+const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta = {
+       .extid_start = SBI_EXT_STA,
+       .extid_end = SBI_EXT_STA,
+       .handler = kvm_sbi_ext_sta_handler,
+       .probe = kvm_sbi_ext_sta_probe,
+};