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@xxxxxxxxxxxxxxxx> --- 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