mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 01:45:17 +00:00
cpu: Consolidate ARM drivers
Both ARM and AArch64 drivers are exactly the same (modulo function names). Let's use just one driver for all ARM architectures. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
b5447e78b2
commit
e2ddc811ab
@ -1080,7 +1080,6 @@ CPU_SOURCES = \
|
|||||||
cpu/cpu_x86.h cpu/cpu_x86.c cpu/cpu_x86_data.h \
|
cpu/cpu_x86.h cpu/cpu_x86.c cpu/cpu_x86_data.h \
|
||||||
cpu/cpu_s390.h cpu/cpu_s390.c \
|
cpu/cpu_s390.h cpu/cpu_s390.c \
|
||||||
cpu/cpu_arm.h cpu/cpu_arm.c \
|
cpu/cpu_arm.h cpu/cpu_arm.c \
|
||||||
cpu/cpu_aarch64.h cpu/cpu_aarch64.c \
|
|
||||||
cpu/cpu_ppc64.h cpu/cpu_ppc64.c \
|
cpu/cpu_ppc64.h cpu/cpu_ppc64.c \
|
||||||
cpu/cpu_ppc64_data.h \
|
cpu/cpu_ppc64_data.h \
|
||||||
cpu/cpu_map.h cpu/cpu_map.c
|
cpu/cpu_map.h cpu/cpu_map.c
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
#include "cpu_ppc64.h"
|
#include "cpu_ppc64.h"
|
||||||
#include "cpu_s390.h"
|
#include "cpu_s390.h"
|
||||||
#include "cpu_arm.h"
|
#include "cpu_arm.h"
|
||||||
#include "cpu_aarch64.h"
|
|
||||||
#include "cpu_generic.h"
|
#include "cpu_generic.h"
|
||||||
#include "util/virstring.h"
|
#include "util/virstring.h"
|
||||||
|
|
||||||
@ -47,7 +46,6 @@ static struct cpuArchDriver *drivers[] = {
|
|||||||
&cpuDriverPPC64,
|
&cpuDriverPPC64,
|
||||||
&cpuDriverS390,
|
&cpuDriverS390,
|
||||||
&cpuDriverArm,
|
&cpuDriverArm,
|
||||||
&cpuDriverAARCH64,
|
|
||||||
/* generic driver must always be the last one */
|
/* generic driver must always be the last one */
|
||||||
&cpuDriverGeneric
|
&cpuDriverGeneric
|
||||||
};
|
};
|
||||||
|
@ -1,133 +0,0 @@
|
|||||||
/*
|
|
||||||
* cpu_aarch64.c: CPU driver for AArch64 CPUs
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Anup Patel <anup.patel@linaro.org>
|
|
||||||
* Pranavkumar Sawargaonkar <pranavkumar@linaro.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#include "viralloc.h"
|
|
||||||
#include "cpu.h"
|
|
||||||
#include "virstring.h"
|
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_CPU
|
|
||||||
|
|
||||||
static const virArch archs[] = { VIR_ARCH_AARCH64 };
|
|
||||||
|
|
||||||
static virCPUDataPtr
|
|
||||||
AArch64NodeData(virArch arch)
|
|
||||||
{
|
|
||||||
virCPUDataPtr data;
|
|
||||||
|
|
||||||
if (VIR_ALLOC(data) < 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
data->arch = arch;
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
AArch64Decode(virCPUDefPtr cpu,
|
|
||||||
const virCPUData *data ATTRIBUTE_UNUSED,
|
|
||||||
const char **models ATTRIBUTE_UNUSED,
|
|
||||||
unsigned int nmodels ATTRIBUTE_UNUSED,
|
|
||||||
const char *preferred ATTRIBUTE_UNUSED,
|
|
||||||
unsigned int flags)
|
|
||||||
{
|
|
||||||
virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, -1);
|
|
||||||
|
|
||||||
if (cpu->model == NULL &&
|
|
||||||
VIR_STRDUP(cpu->model, "host") < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
AArch64DataFree(virCPUDataPtr data)
|
|
||||||
{
|
|
||||||
VIR_FREE(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
AArch64Update(virCPUDefPtr guest,
|
|
||||||
const virCPUDef *host)
|
|
||||||
{
|
|
||||||
guest->match = VIR_CPU_MATCH_EXACT;
|
|
||||||
virCPUDefFreeModel(guest);
|
|
||||||
return virCPUDefCopyModel(guest, host, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static virCPUCompareResult
|
|
||||||
AArch64GuestData(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
|
||||||
virCPUDefPtr guest ATTRIBUTE_UNUSED,
|
|
||||||
virCPUDataPtr *data ATTRIBUTE_UNUSED,
|
|
||||||
char **message ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
return VIR_CPU_COMPARE_IDENTICAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static virCPUDefPtr
|
|
||||||
AArch64Baseline(virCPUDefPtr *cpus,
|
|
||||||
unsigned int ncpus ATTRIBUTE_UNUSED,
|
|
||||||
const char **models ATTRIBUTE_UNUSED,
|
|
||||||
unsigned int nmodels ATTRIBUTE_UNUSED,
|
|
||||||
unsigned int flags)
|
|
||||||
{
|
|
||||||
virCPUDefPtr cpu = NULL;
|
|
||||||
|
|
||||||
virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES |
|
|
||||||
VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL);
|
|
||||||
|
|
||||||
if (VIR_ALLOC(cpu) < 0 ||
|
|
||||||
VIR_STRDUP(cpu->model, cpus[0]->model) < 0) {
|
|
||||||
virCPUDefFree(cpu);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu->type = VIR_CPU_TYPE_GUEST;
|
|
||||||
cpu->match = VIR_CPU_MATCH_EXACT;
|
|
||||||
|
|
||||||
return cpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
static virCPUCompareResult
|
|
||||||
AArch64Compare(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
|
||||||
virCPUDefPtr cpu ATTRIBUTE_UNUSED,
|
|
||||||
bool failIncompatible ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
return VIR_CPU_COMPARE_IDENTICAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct cpuArchDriver cpuDriverAARCH64 = {
|
|
||||||
.name = "aarch64",
|
|
||||||
.arch = archs,
|
|
||||||
.narch = ARRAY_CARDINALITY(archs),
|
|
||||||
.compare = AArch64Compare,
|
|
||||||
.decode = AArch64Decode,
|
|
||||||
.encode = NULL,
|
|
||||||
.free = AArch64DataFree,
|
|
||||||
.nodeData = AArch64NodeData,
|
|
||||||
.guestData = AArch64GuestData,
|
|
||||||
.baseline = AArch64Baseline,
|
|
||||||
.update = AArch64Update,
|
|
||||||
.hasFeature = NULL,
|
|
||||||
};
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* cpu_aarch64.h: CPU driver for AArch64 CPUs
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Anup Patel <anup.patel@linaro.org>
|
|
||||||
* Pravakumar Sawargaonkar <pranavkumar@linaro.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __VIR_CPU_AARCH64_H__
|
|
||||||
# define __VIR_CPU_AARCH64_H__
|
|
||||||
|
|
||||||
# include "cpu.h"
|
|
||||||
|
|
||||||
extern struct cpuArchDriver cpuDriverAARCH64;
|
|
||||||
|
|
||||||
#endif /* __VIR_CPU_AARCH64_H__ */
|
|
@ -30,12 +30,15 @@
|
|||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_CPU
|
#define VIR_FROM_THIS VIR_FROM_CPU
|
||||||
|
|
||||||
static const virArch archs[] = {VIR_ARCH_ARMV6L,
|
static const virArch archs[] = {
|
||||||
VIR_ARCH_ARMV7B,
|
VIR_ARCH_ARMV6L,
|
||||||
VIR_ARCH_ARMV7L};
|
VIR_ARCH_ARMV7B,
|
||||||
|
VIR_ARCH_ARMV7L,
|
||||||
|
VIR_ARCH_AARCH64,
|
||||||
|
};
|
||||||
|
|
||||||
static virCPUDataPtr
|
static virCPUDataPtr
|
||||||
ArmNodeData(virArch arch)
|
armNodeData(virArch arch)
|
||||||
{
|
{
|
||||||
virCPUDataPtr data;
|
virCPUDataPtr data;
|
||||||
|
|
||||||
@ -48,7 +51,7 @@ ArmNodeData(virArch arch)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ArmDecode(virCPUDefPtr cpu,
|
armDecode(virCPUDefPtr cpu,
|
||||||
const virCPUData *data ATTRIBUTE_UNUSED,
|
const virCPUData *data ATTRIBUTE_UNUSED,
|
||||||
const char **models ATTRIBUTE_UNUSED,
|
const char **models ATTRIBUTE_UNUSED,
|
||||||
unsigned int nmodels ATTRIBUTE_UNUSED,
|
unsigned int nmodels ATTRIBUTE_UNUSED,
|
||||||
@ -65,13 +68,13 @@ ArmDecode(virCPUDefPtr cpu,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ArmDataFree(virCPUDataPtr data)
|
armDataFree(virCPUDataPtr data)
|
||||||
{
|
{
|
||||||
VIR_FREE(data);
|
VIR_FREE(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ArmUpdate(virCPUDefPtr guest,
|
armUpdate(virCPUDefPtr guest,
|
||||||
const virCPUDef *host)
|
const virCPUDef *host)
|
||||||
{
|
{
|
||||||
guest->match = VIR_CPU_MATCH_EXACT;
|
guest->match = VIR_CPU_MATCH_EXACT;
|
||||||
@ -80,7 +83,7 @@ ArmUpdate(virCPUDefPtr guest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static virCPUCompareResult
|
static virCPUCompareResult
|
||||||
ArmGuestData(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
armGuestData(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
||||||
virCPUDefPtr guest ATTRIBUTE_UNUSED,
|
virCPUDefPtr guest ATTRIBUTE_UNUSED,
|
||||||
virCPUDataPtr *data ATTRIBUTE_UNUSED,
|
virCPUDataPtr *data ATTRIBUTE_UNUSED,
|
||||||
char **message ATTRIBUTE_UNUSED)
|
char **message ATTRIBUTE_UNUSED)
|
||||||
@ -89,7 +92,7 @@ ArmGuestData(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static virCPUDefPtr
|
static virCPUDefPtr
|
||||||
ArmBaseline(virCPUDefPtr *cpus,
|
armBaseline(virCPUDefPtr *cpus,
|
||||||
unsigned int ncpus ATTRIBUTE_UNUSED,
|
unsigned int ncpus ATTRIBUTE_UNUSED,
|
||||||
const char **models ATTRIBUTE_UNUSED,
|
const char **models ATTRIBUTE_UNUSED,
|
||||||
unsigned int nmodels ATTRIBUTE_UNUSED,
|
unsigned int nmodels ATTRIBUTE_UNUSED,
|
||||||
@ -113,7 +116,7 @@ ArmBaseline(virCPUDefPtr *cpus,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static virCPUCompareResult
|
static virCPUCompareResult
|
||||||
ArmCompare(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
armCompare(virCPUDefPtr host ATTRIBUTE_UNUSED,
|
||||||
virCPUDefPtr cpu ATTRIBUTE_UNUSED,
|
virCPUDefPtr cpu ATTRIBUTE_UNUSED,
|
||||||
bool failMessages ATTRIBUTE_UNUSED)
|
bool failMessages ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
@ -124,13 +127,13 @@ struct cpuArchDriver cpuDriverArm = {
|
|||||||
.name = "arm",
|
.name = "arm",
|
||||||
.arch = archs,
|
.arch = archs,
|
||||||
.narch = ARRAY_CARDINALITY(archs),
|
.narch = ARRAY_CARDINALITY(archs),
|
||||||
.compare = ArmCompare,
|
.compare = armCompare,
|
||||||
.decode = ArmDecode,
|
.decode = armDecode,
|
||||||
.encode = NULL,
|
.encode = NULL,
|
||||||
.free = ArmDataFree,
|
.free = armDataFree,
|
||||||
.nodeData = ArmNodeData,
|
.nodeData = armNodeData,
|
||||||
.guestData = ArmGuestData,
|
.guestData = armGuestData,
|
||||||
.baseline = ArmBaseline,
|
.baseline = armBaseline,
|
||||||
.update = ArmUpdate,
|
.update = armUpdate,
|
||||||
.hasFeature = NULL,
|
.hasFeature = NULL,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user