mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
cpu_riscv64.c: add update() implementation
At this moment it is not possible to launch a 'riscv64' domain if a CPU definition is presented in the domain. For example, adding this CPU definition: <cpu mode='custom' match='exact' check='none'> <model fallback='forbid'>rv64</model> </cpu> Will trigger the following error: $ sudo ./run tools/virsh start riscv-virt1 error: Failed to start domain 'riscv-virt1' error: this function is not supported by the connection driver: cannot update guest CPU for riscv64 architecture The error comes from virCPUUpdate(), via qemuProcessUpdateGuestCPU(), and it's caused by the absence of the 'update' API in the existing RISC-V driver. Add an 'update' API impl to the RISC-V driver to allow for CPU definitions to be declared in RISC-V domains. This API was copied from the ARM driver (virCPUarmUpdate()) since it's a good enough implementation to get us going. Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
parent
2f197ab695
commit
d4c39bad85
@ -70,6 +70,7 @@ src/cpu/cpu.c
|
|||||||
src/cpu/cpu_arm.c
|
src/cpu/cpu_arm.c
|
||||||
src/cpu/cpu_map.c
|
src/cpu/cpu_map.c
|
||||||
src/cpu/cpu_ppc64.c
|
src/cpu/cpu_ppc64.c
|
||||||
|
src/cpu/cpu_riscv64.c
|
||||||
src/cpu/cpu_s390.c
|
src/cpu/cpu_s390.c
|
||||||
src/cpu/cpu_x86.c
|
src/cpu/cpu_x86.c
|
||||||
src/datatypes.c
|
src/datatypes.c
|
||||||
|
@ -46,6 +46,32 @@ virCPURiscv64ValidateFeatures(virCPUDef *cpu G_GNUC_UNUSED)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
virCPURiscv64Update(virCPUDef *guest,
|
||||||
|
const virCPUDef *host,
|
||||||
|
bool relative)
|
||||||
|
{
|
||||||
|
g_autoptr(virCPUDef) updated = virCPUDefCopyWithoutModel(guest);
|
||||||
|
|
||||||
|
if (!relative || guest->mode != VIR_CPU_MODE_HOST_MODEL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!host) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("unknown host CPU model"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
updated->mode = VIR_CPU_MODE_CUSTOM;
|
||||||
|
virCPUDefCopyModel(updated, host, true);
|
||||||
|
|
||||||
|
virCPUDefStealModel(guest, updated, false);
|
||||||
|
guest->mode = VIR_CPU_MODE_CUSTOM;
|
||||||
|
guest->match = VIR_CPU_MATCH_EXACT;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct cpuArchDriver cpuDriverRiscv64 = {
|
struct cpuArchDriver cpuDriverRiscv64 = {
|
||||||
.name = "riscv64",
|
.name = "riscv64",
|
||||||
.arch = archs,
|
.arch = archs,
|
||||||
@ -54,6 +80,6 @@ struct cpuArchDriver cpuDriverRiscv64 = {
|
|||||||
.decode = NULL,
|
.decode = NULL,
|
||||||
.encode = NULL,
|
.encode = NULL,
|
||||||
.baseline = NULL,
|
.baseline = NULL,
|
||||||
.update = NULL,
|
.update = virCPURiscv64Update,
|
||||||
.validateFeatures = virCPURiscv64ValidateFeatures,
|
.validateFeatures = virCPURiscv64ValidateFeatures,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user