[PATCH 1/3] src/cpu: add a basic RiscV64 cpu driver

Daniel Henrique Barboza dbarboza at ventanamicro.com
Tue Jan 10 11:31:41 UTC 2023


There are tests in qemuxml2argvtest that will fail if we enable risc-v
testing with an error like the following:

"cpuGetSubDriver:64 : this function is not supported by the connection
driver: 'riscv64' architecture is not supp orted by CPU driver"

This happens because we don't have a RISC-V driver yet.

Add a barebone RISC-V driver to allow tests to be executed. The only 2
callbacks implemented here are 'compare' and 'validateFeatures', both
acting as a no-op. More callbacks and features will be added in the
future.

Signed-off-by: Daniel Henrique Barboza <dbarboza at ventanamicro.com>
---
 src/cpu/cpu.c         |  2 ++
 src/cpu/cpu_riscv64.c | 59 +++++++++++++++++++++++++++++++++++++++++++
 src/cpu/cpu_riscv64.h | 25 ++++++++++++++++++
 src/cpu/meson.build   |  1 +
 4 files changed, 87 insertions(+)
 create mode 100644 src/cpu/cpu_riscv64.c
 create mode 100644 src/cpu/cpu_riscv64.h

diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
index c5de9fc95c..26f41272a7 100644
--- a/src/cpu/cpu.c
+++ b/src/cpu/cpu.c
@@ -27,6 +27,7 @@
 #include "cpu_ppc64.h"
 #include "cpu_s390.h"
 #include "cpu_arm.h"
+#include "cpu_riscv64.h"
 #include "capabilities.h"
 
 
@@ -39,6 +40,7 @@ static struct cpuArchDriver *drivers[] = {
     &cpuDriverPPC64,
     &cpuDriverS390,
     &cpuDriverArm,
+    &cpuDriverRiscv64,
 };
 
 
diff --git a/src/cpu/cpu_riscv64.c b/src/cpu/cpu_riscv64.c
new file mode 100644
index 0000000000..c44bdeb291
--- /dev/null
+++ b/src/cpu/cpu_riscv64.c
@@ -0,0 +1,59 @@
+/*
+ * cpu_riscv64.c: CPU driver for riscv64 CPUs
+ *
+ * Copyright (C) 2023, Ventana Micro
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "cpu.h"
+
+
+#define VIR_FROM_THIS VIR_FROM_CPU
+
+static const virArch archs[] = { VIR_ARCH_RISCV64 };
+
+static virCPUCompareResult
+virCPURiscv64Compare(virCPUDef *host G_GNUC_UNUSED,
+                     virCPUDef *cpu G_GNUC_UNUSED,
+                     bool failMessages G_GNUC_UNUSED)
+{
+    /*
+     * For now QEMU will perform all runtime checks.
+     */
+    return VIR_CPU_COMPARE_IDENTICAL;
+}
+
+
+static int
+virCPURiscv64ValidateFeatures(virCPUDef *cpu G_GNUC_UNUSED)
+{
+    return 0;
+}
+
+
+struct cpuArchDriver cpuDriverRiscv64 = {
+    .name = "riscv64",
+    .arch = archs,
+    .narch = G_N_ELEMENTS(archs),
+    .compare    = virCPURiscv64Compare,
+    .decode     = NULL,
+    .encode     = NULL,
+    .baseline   = NULL,
+    .update     = NULL,
+    .validateFeatures = virCPURiscv64ValidateFeatures,
+};
diff --git a/src/cpu/cpu_riscv64.h b/src/cpu/cpu_riscv64.h
new file mode 100644
index 0000000000..ac61477bd3
--- /dev/null
+++ b/src/cpu/cpu_riscv64.h
@@ -0,0 +1,25 @@
+/*
+ * cpu_riscv64.h: CPU driver for riscv64 CPUs
+ *
+ * Copyright (c) 2023, Ventana Micro
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "cpu.h"
+
+extern struct cpuArchDriver cpuDriverRiscv64;
diff --git a/src/cpu/meson.build b/src/cpu/meson.build
index b4ad95e46d..55396903b9 100644
--- a/src/cpu/meson.build
+++ b/src/cpu/meson.build
@@ -3,6 +3,7 @@ cpu_sources = [
   'cpu_arm.c',
   'cpu_map.c',
   'cpu_ppc64.c',
+  'cpu_riscv64.c',
   'cpu_s390.c',
   'cpu_x86.c',
 ]
-- 
2.39.0



More information about the libvir-list mailing list