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(a)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