src/cpu: add a basic RiscV64 cpu driver

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.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
This commit is contained in:
Daniel Henrique Barboza 2023-01-06 13:49:56 -03:00
parent 1e2605c934
commit fd70335876
4 changed files with 87 additions and 0 deletions

View File

@ -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,
};

59
src/cpu/cpu_riscv64.c Normal file
View File

@ -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,
};

25
src/cpu/cpu_riscv64.h Normal file
View File

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

View File

@ -3,6 +3,7 @@ cpu_sources = [
'cpu_arm.c',
'cpu_map.c',
'cpu_ppc64.c',
'cpu_riscv64.c',
'cpu_s390.c',
'cpu_x86.c',
]