mirror of
https://gitlab.com/qemu-project/qemu
synced 2025-04-29 09:22:36 +08:00
Various patches loosely related to single binary work:
- Replace cpu_list() definition by CPUClass::list_cpus() callback - Remove few MO_TE definitions on Hexagon / X86 targets - Remove target_ulong uses in ARMMMUFaultInfo and ARM CPUWatchpoint - Remove DEVICE_HOST_ENDIAN definition - Evaluate TARGET_BIG_ENDIAN at compile time and use target_needs_bswap() more - Rename target_words_bigendian() as target_big_endian() - Convert target_name() and target_cpu_type() to TargetInfo API - Constify QOM TypeInfo class_data/interfaces fields - Get default_cpu_type calling machine_class_default_cpu_type() - Correct various uses of GLibCompareDataFunc prototype - Simplify ARM/Aarch64 gdb_get_core_xml_file() handling a bit - Move device tree files in their own pc-bios/dtb/ subdir - Correctly check strchrnul() symbol availability on macOS SDK - Move target-agnostic methods out of cpu-target.c and accel-target.c - Unmap canceled USB XHCI packet - Use deposit/extract API in designware model - Fix MIPS16e translation - Few missing header fixes -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmgLqb8ACgkQ4+MsLN6t wN6nCQ//cmv1M+NsndhO5TAK8T1eUSXKlTZh932uro6ZgxKwN4p+j1Qo7bq3O9gu qUMHNbcfQl8sHSytiXBoxCjLMCXC3u38iyz75WGXuPay06rs4wqmahqxL4tyno3l 1RviFts9xlLn+tJqqrAR6+pRdALld0TY+yXUjXgr4aK5pIRpLz9U/sIEoh7qbA5U x0MTaceDG3A91OYo0TgrNbcMe1b9GqQZ+a4tbaP+oE37wbiKdyQ68LjrEbV08Y1O qrFF4oxquV31QJcUiuII1W7hC6psGrMsUA1f1qDu7QvmybAZWNZNsR9T66X9jH5J wXMShJmmXwxugohmuPPFnDshzJy90aFL6Jy2shrfqcG2v0W66ARY1ZnbJLCcfczt 073bnE2dnOVhd/ny37RrIJNJLLmYM0yFDeKuYtNNAzpK9fpA7Q2PI8QiqNacQ3Pa TdEYrGlMk7OeNck8xJmJMY5rATthi1D4dIBv3rjQbUolQvPJe2Y9or0R2WL1jK5v hhr6DY01iSPES3CravmUs/aB1HRMPi/nX45OmFR6frAB7xqWMreh81heBVuoTTK8 PuXtRQgRMRKwDeTxlc6p+zba4mIEYG8rqJtPFRgViNCJ1KsgSIowup3BNU05YuFn NoPoRayMDVMgejVgJin3Mg2DCYvt/+MBmO4IoggWlFsXj59uUgA= =DXnZ -----END PGP SIGNATURE----- Merge tag 'single-binary-20250425' of https://github.com/philmd/qemu into staging Various patches loosely related to single binary work: - Replace cpu_list() definition by CPUClass::list_cpus() callback - Remove few MO_TE definitions on Hexagon / X86 targets - Remove target_ulong uses in ARMMMUFaultInfo and ARM CPUWatchpoint - Remove DEVICE_HOST_ENDIAN definition - Evaluate TARGET_BIG_ENDIAN at compile time and use target_needs_bswap() more - Rename target_words_bigendian() as target_big_endian() - Convert target_name() and target_cpu_type() to TargetInfo API - Constify QOM TypeInfo class_data/interfaces fields - Get default_cpu_type calling machine_class_default_cpu_type() - Correct various uses of GLibCompareDataFunc prototype - Simplify ARM/Aarch64 gdb_get_core_xml_file() handling a bit - Move device tree files in their own pc-bios/dtb/ subdir - Correctly check strchrnul() symbol availability on macOS SDK - Move target-agnostic methods out of cpu-target.c and accel-target.c - Unmap canceled USB XHCI packet - Use deposit/extract API in designware model - Fix MIPS16e translation - Few missing header fixes # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmgLqb8ACgkQ4+MsLN6t # wN6nCQ//cmv1M+NsndhO5TAK8T1eUSXKlTZh932uro6ZgxKwN4p+j1Qo7bq3O9gu # qUMHNbcfQl8sHSytiXBoxCjLMCXC3u38iyz75WGXuPay06rs4wqmahqxL4tyno3l # 1RviFts9xlLn+tJqqrAR6+pRdALld0TY+yXUjXgr4aK5pIRpLz9U/sIEoh7qbA5U # x0MTaceDG3A91OYo0TgrNbcMe1b9GqQZ+a4tbaP+oE37wbiKdyQ68LjrEbV08Y1O # qrFF4oxquV31QJcUiuII1W7hC6psGrMsUA1f1qDu7QvmybAZWNZNsR9T66X9jH5J # wXMShJmmXwxugohmuPPFnDshzJy90aFL6Jy2shrfqcG2v0W66ARY1ZnbJLCcfczt # 073bnE2dnOVhd/ny37RrIJNJLLmYM0yFDeKuYtNNAzpK9fpA7Q2PI8QiqNacQ3Pa # TdEYrGlMk7OeNck8xJmJMY5rATthi1D4dIBv3rjQbUolQvPJe2Y9or0R2WL1jK5v # hhr6DY01iSPES3CravmUs/aB1HRMPi/nX45OmFR6frAB7xqWMreh81heBVuoTTK8 # PuXtRQgRMRKwDeTxlc6p+zba4mIEYG8rqJtPFRgViNCJ1KsgSIowup3BNU05YuFn # NoPoRayMDVMgejVgJin3Mg2DCYvt/+MBmO4IoggWlFsXj59uUgA= # =DXnZ # -----END PGP SIGNATURE----- # gpg: Signature made Fri 25 Apr 2025 11:26:55 EDT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * tag 'single-binary-20250425' of https://github.com/philmd/qemu: (58 commits) qemu: Convert target_name() to TargetInfo API accel: Move target-agnostic code from accel-target.c -> accel-common.c accel: Make AccelCPUClass structure target-agnostic accel: Include missing 'qemu/accel.h' header in accel-internal.h accel: Implement accel_init_ops_interfaces() for both system/user mode cpus: Move target-agnostic methods out of cpu-target.c cpus: Replace CPU_RESOLVING_TYPE -> target_cpu_type() qemu: Introduce target_cpu_type() qapi: Rename TargetInfo structure as QemuTargetInfo hw/microblaze: Evaluate TARGET_BIG_ENDIAN at compile time hw/mips: Evaluate TARGET_BIG_ENDIAN at compile time target/xtensa: Evaluate TARGET_BIG_ENDIAN at compile time target/mips: Check CPU endianness at runtime using env_is_bigendian() accel/kvm: Use target_needs_bswap() linux-user/elfload: Use target_needs_bswap() target/hexagon: Include missing 'accel/tcg/getpc.h' accel/tcg: Correct list of included headers in tcg-stub.c system/kvm: make functions accessible from common code meson: Use osdep_prefix for strchrnul() meson: Share common C source prefixes ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
06b40d250e
13
MAINTAINERS
13
MAINTAINERS
@ -498,8 +498,8 @@ F: include/exec/target_long.h
|
||||
F: include/qemu/accel.h
|
||||
F: include/system/accel-*.h
|
||||
F: include/system/cpus.h
|
||||
F: include/accel/accel-cpu-target.h
|
||||
F: accel/accel-*.c
|
||||
F: include/accel/accel-cpu*.h
|
||||
F: accel/accel-*.?
|
||||
F: accel/Makefile.objs
|
||||
F: accel/stubs/Makefile.objs
|
||||
F: cpu-common.c
|
||||
@ -1581,7 +1581,7 @@ F: hw/pci-host/ppc440_pcix.c
|
||||
F: hw/display/sm501*
|
||||
F: hw/ide/sii3112.c
|
||||
F: hw/rtc/m41t80.c
|
||||
F: pc-bios/canyonlands.dt[sb]
|
||||
F: pc-bios/dtb/canyonlands.dt[sb]
|
||||
F: pc-bios/u-boot-sam460ex-20100605.bin
|
||||
F: roms/u-boot-sam460ex
|
||||
F: docs/system/ppc/amigang.rst
|
||||
@ -1926,6 +1926,13 @@ F: tests/functional/test_empty_cpu_model.py
|
||||
F: tests/unit/test-smp-parse.c
|
||||
T: git https://gitlab.com/ehabkost/qemu.git machine-next
|
||||
|
||||
TargetInfo API
|
||||
M: Pierrick Bouvier <pierrick.bouvier@linaro.org>
|
||||
M: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
S: Supported
|
||||
F: include/qemu/target-info*.h
|
||||
F: target-info*.c
|
||||
|
||||
Xtensa Machines
|
||||
---------------
|
||||
sim
|
||||
|
142
accel/accel-common.c
Normal file
142
accel/accel-common.c
Normal file
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* QEMU accel class, components common to system emulation and user mode
|
||||
*
|
||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||
* Copyright (c) 2014 Red Hat Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/accel.h"
|
||||
#include "qemu/target-info.h"
|
||||
#include "accel/accel-cpu.h"
|
||||
#include "accel-internal.h"
|
||||
|
||||
/* Lookup AccelClass from opt_name. Returns NULL if not found */
|
||||
AccelClass *accel_find(const char *opt_name)
|
||||
{
|
||||
char *class_name = g_strdup_printf(ACCEL_CLASS_NAME("%s"), opt_name);
|
||||
AccelClass *ac = ACCEL_CLASS(module_object_class_by_name(class_name));
|
||||
g_free(class_name);
|
||||
return ac;
|
||||
}
|
||||
|
||||
/* Return the name of the current accelerator */
|
||||
const char *current_accel_name(void)
|
||||
{
|
||||
AccelClass *ac = ACCEL_GET_CLASS(current_accel());
|
||||
|
||||
return ac->name;
|
||||
}
|
||||
|
||||
static void accel_init_cpu_int_aux(ObjectClass *klass, void *opaque)
|
||||
{
|
||||
CPUClass *cc = CPU_CLASS(klass);
|
||||
AccelCPUClass *accel_cpu = opaque;
|
||||
|
||||
/*
|
||||
* The first callback allows accel-cpu to run initializations
|
||||
* for the CPU, customizing CPU behavior according to the accelerator.
|
||||
*
|
||||
* The second one allows the CPU to customize the accel-cpu
|
||||
* behavior according to the CPU.
|
||||
*
|
||||
* The second is currently only used by TCG, to specialize the
|
||||
* TCGCPUOps depending on the CPU type.
|
||||
*/
|
||||
cc->accel_cpu = accel_cpu;
|
||||
if (accel_cpu->cpu_class_init) {
|
||||
accel_cpu->cpu_class_init(cc);
|
||||
}
|
||||
if (cc->init_accel_cpu) {
|
||||
cc->init_accel_cpu(accel_cpu, cc);
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize the arch-specific accel CpuClass interfaces */
|
||||
static void accel_init_cpu_interfaces(AccelClass *ac)
|
||||
{
|
||||
const char *ac_name; /* AccelClass name */
|
||||
char *acc_name; /* AccelCPUClass name */
|
||||
ObjectClass *acc; /* AccelCPUClass */
|
||||
const char *cpu_resolving_type = target_cpu_type();
|
||||
|
||||
ac_name = object_class_get_name(OBJECT_CLASS(ac));
|
||||
g_assert(ac_name != NULL);
|
||||
|
||||
acc_name = g_strdup_printf("%s-%s", ac_name, cpu_resolving_type);
|
||||
acc = object_class_by_name(acc_name);
|
||||
g_free(acc_name);
|
||||
|
||||
if (acc) {
|
||||
object_class_foreach(accel_init_cpu_int_aux,
|
||||
cpu_resolving_type, false, acc);
|
||||
}
|
||||
}
|
||||
|
||||
void accel_init_interfaces(AccelClass *ac)
|
||||
{
|
||||
accel_init_ops_interfaces(ac);
|
||||
accel_init_cpu_interfaces(ac);
|
||||
}
|
||||
|
||||
void accel_cpu_instance_init(CPUState *cpu)
|
||||
{
|
||||
if (cpu->cc->accel_cpu && cpu->cc->accel_cpu->cpu_instance_init) {
|
||||
cpu->cc->accel_cpu->cpu_instance_init(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
bool accel_cpu_common_realize(CPUState *cpu, Error **errp)
|
||||
{
|
||||
AccelState *accel = current_accel();
|
||||
AccelClass *acc = ACCEL_GET_CLASS(accel);
|
||||
|
||||
/* target specific realization */
|
||||
if (cpu->cc->accel_cpu
|
||||
&& cpu->cc->accel_cpu->cpu_target_realize
|
||||
&& !cpu->cc->accel_cpu->cpu_target_realize(cpu, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* generic realization */
|
||||
if (acc->cpu_common_realize && !acc->cpu_common_realize(cpu, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void accel_cpu_common_unrealize(CPUState *cpu)
|
||||
{
|
||||
AccelState *accel = current_accel();
|
||||
AccelClass *acc = ACCEL_GET_CLASS(accel);
|
||||
|
||||
/* generic unrealization */
|
||||
if (acc->cpu_common_unrealize) {
|
||||
acc->cpu_common_unrealize(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
int accel_supported_gdbstub_sstep_flags(void)
|
||||
{
|
||||
AccelState *accel = current_accel();
|
||||
AccelClass *acc = ACCEL_GET_CLASS(accel);
|
||||
if (acc->gdbstub_supported_sstep_flags) {
|
||||
return acc->gdbstub_supported_sstep_flags();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const TypeInfo accel_types[] = {
|
||||
{
|
||||
.name = TYPE_ACCEL,
|
||||
.parent = TYPE_OBJECT,
|
||||
.class_size = sizeof(AccelClass),
|
||||
.instance_size = sizeof(AccelState),
|
||||
.abstract = true,
|
||||
},
|
||||
};
|
||||
|
||||
DEFINE_TYPES(accel_types)
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* QEMU System Emulation accel internal functions
|
||||
* QEMU accel internal functions
|
||||
*
|
||||
* Copyright 2021 SUSE LLC
|
||||
*
|
||||
@ -7,9 +7,11 @@
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef ACCEL_SYSTEM_H
|
||||
#define ACCEL_SYSTEM_H
|
||||
#ifndef ACCEL_INTERNAL_H
|
||||
#define ACCEL_INTERNAL_H
|
||||
|
||||
void accel_system_init_ops_interfaces(AccelClass *ac);
|
||||
#include "qemu/accel.h"
|
||||
|
||||
void accel_init_ops_interfaces(AccelClass *ac);
|
||||
|
||||
#endif /* ACCEL_SYSTEM_H */
|
@ -29,7 +29,7 @@
|
||||
#include "system/accel-ops.h"
|
||||
#include "system/cpus.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "accel-system.h"
|
||||
#include "accel-internal.h"
|
||||
|
||||
int accel_init_machine(AccelState *accel, MachineState *ms)
|
||||
{
|
||||
@ -63,7 +63,7 @@ void accel_setup_post(MachineState *ms)
|
||||
}
|
||||
|
||||
/* initialize the arch-independent accel operation interfaces */
|
||||
void accel_system_init_ops_interfaces(AccelClass *ac)
|
||||
void accel_init_ops_interfaces(AccelClass *ac)
|
||||
{
|
||||
const char *ac_name;
|
||||
char *ops_name;
|
||||
|
@ -24,141 +24,8 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/accel.h"
|
||||
|
||||
#include "cpu.h"
|
||||
#include "accel/accel-cpu-target.h"
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
#include "accel-system.h"
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
static const TypeInfo accel_type = {
|
||||
.name = TYPE_ACCEL,
|
||||
.parent = TYPE_OBJECT,
|
||||
.class_size = sizeof(AccelClass),
|
||||
.instance_size = sizeof(AccelState),
|
||||
.abstract = true,
|
||||
};
|
||||
|
||||
/* Lookup AccelClass from opt_name. Returns NULL if not found */
|
||||
AccelClass *accel_find(const char *opt_name)
|
||||
{
|
||||
char *class_name = g_strdup_printf(ACCEL_CLASS_NAME("%s"), opt_name);
|
||||
AccelClass *ac = ACCEL_CLASS(module_object_class_by_name(class_name));
|
||||
g_free(class_name);
|
||||
return ac;
|
||||
}
|
||||
|
||||
/* Return the name of the current accelerator */
|
||||
const char *current_accel_name(void)
|
||||
{
|
||||
AccelClass *ac = ACCEL_GET_CLASS(current_accel());
|
||||
|
||||
return ac->name;
|
||||
}
|
||||
|
||||
static void accel_init_cpu_int_aux(ObjectClass *klass, void *opaque)
|
||||
{
|
||||
CPUClass *cc = CPU_CLASS(klass);
|
||||
AccelCPUClass *accel_cpu = opaque;
|
||||
|
||||
/*
|
||||
* The first callback allows accel-cpu to run initializations
|
||||
* for the CPU, customizing CPU behavior according to the accelerator.
|
||||
*
|
||||
* The second one allows the CPU to customize the accel-cpu
|
||||
* behavior according to the CPU.
|
||||
*
|
||||
* The second is currently only used by TCG, to specialize the
|
||||
* TCGCPUOps depending on the CPU type.
|
||||
*/
|
||||
cc->accel_cpu = accel_cpu;
|
||||
if (accel_cpu->cpu_class_init) {
|
||||
accel_cpu->cpu_class_init(cc);
|
||||
}
|
||||
if (cc->init_accel_cpu) {
|
||||
cc->init_accel_cpu(accel_cpu, cc);
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize the arch-specific accel CpuClass interfaces */
|
||||
static void accel_init_cpu_interfaces(AccelClass *ac)
|
||||
{
|
||||
const char *ac_name; /* AccelClass name */
|
||||
char *acc_name; /* AccelCPUClass name */
|
||||
ObjectClass *acc; /* AccelCPUClass */
|
||||
|
||||
ac_name = object_class_get_name(OBJECT_CLASS(ac));
|
||||
g_assert(ac_name != NULL);
|
||||
|
||||
acc_name = g_strdup_printf("%s-%s", ac_name, CPU_RESOLVING_TYPE);
|
||||
acc = object_class_by_name(acc_name);
|
||||
g_free(acc_name);
|
||||
|
||||
if (acc) {
|
||||
object_class_foreach(accel_init_cpu_int_aux,
|
||||
CPU_RESOLVING_TYPE, false, acc);
|
||||
}
|
||||
}
|
||||
|
||||
void accel_init_interfaces(AccelClass *ac)
|
||||
{
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
accel_system_init_ops_interfaces(ac);
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
accel_init_cpu_interfaces(ac);
|
||||
}
|
||||
|
||||
void accel_cpu_instance_init(CPUState *cpu)
|
||||
{
|
||||
if (cpu->cc->accel_cpu && cpu->cc->accel_cpu->cpu_instance_init) {
|
||||
cpu->cc->accel_cpu->cpu_instance_init(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
bool accel_cpu_common_realize(CPUState *cpu, Error **errp)
|
||||
{
|
||||
AccelState *accel = current_accel();
|
||||
AccelClass *acc = ACCEL_GET_CLASS(accel);
|
||||
|
||||
/* target specific realization */
|
||||
if (cpu->cc->accel_cpu
|
||||
&& cpu->cc->accel_cpu->cpu_target_realize
|
||||
&& !cpu->cc->accel_cpu->cpu_target_realize(cpu, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* generic realization */
|
||||
if (acc->cpu_common_realize && !acc->cpu_common_realize(cpu, errp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void accel_cpu_common_unrealize(CPUState *cpu)
|
||||
{
|
||||
AccelState *accel = current_accel();
|
||||
AccelClass *acc = ACCEL_GET_CLASS(accel);
|
||||
|
||||
/* generic unrealization */
|
||||
if (acc->cpu_common_unrealize) {
|
||||
acc->cpu_common_unrealize(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
int accel_supported_gdbstub_sstep_flags(void)
|
||||
{
|
||||
AccelState *accel = current_accel();
|
||||
AccelClass *acc = ACCEL_GET_CLASS(accel);
|
||||
if (acc->gdbstub_supported_sstep_flags) {
|
||||
return acc->gdbstub_supported_sstep_flags();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const TypeInfo accel_cpu_type = {
|
||||
.name = TYPE_ACCEL_CPU,
|
||||
.parent = TYPE_OBJECT,
|
||||
@ -168,7 +35,6 @@ static const TypeInfo accel_cpu_type = {
|
||||
|
||||
static void register_accel_types(void)
|
||||
{
|
||||
type_register_static(&accel_type);
|
||||
type_register_static(&accel_cpu_type);
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,12 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/accel.h"
|
||||
#include "accel-internal.h"
|
||||
|
||||
void accel_init_ops_interfaces(AccelClass *ac)
|
||||
{
|
||||
/* nothing */
|
||||
}
|
||||
|
||||
AccelState *current_accel(void)
|
||||
{
|
||||
|
@ -355,7 +355,7 @@ static inline int hvf_gdbstub_sstep_flags(void)
|
||||
return SSTEP_ENABLE | SSTEP_NOIRQ;
|
||||
}
|
||||
|
||||
static void hvf_accel_class_init(ObjectClass *oc, void *data)
|
||||
static void hvf_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelClass *ac = ACCEL_CLASS(oc);
|
||||
ac->name = "HVF";
|
||||
@ -578,7 +578,7 @@ static void hvf_remove_all_breakpoints(CPUState *cpu)
|
||||
}
|
||||
}
|
||||
|
||||
static void hvf_accel_ops_class_init(ObjectClass *oc, void *data)
|
||||
static void hvf_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
|
||||
|
||||
|
@ -90,7 +90,7 @@ static int kvm_update_guest_debug_ops(CPUState *cpu)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void kvm_accel_ops_class_init(ObjectClass *oc, void *data)
|
||||
static void kvm_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "system/cpus.h"
|
||||
#include "system/accel-blocker.h"
|
||||
#include "qemu/bswap.h"
|
||||
#include "exec/tswap.h"
|
||||
#include "system/memory.h"
|
||||
#include "system/ram_addr.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
@ -1318,21 +1319,22 @@ bool kvm_hwpoisoned_mem(void)
|
||||
|
||||
static uint32_t adjust_ioeventfd_endianness(uint32_t val, uint32_t size)
|
||||
{
|
||||
#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN
|
||||
/* The kernel expects ioeventfd values in HOST_BIG_ENDIAN
|
||||
* endianness, but the memory core hands them in target endianness.
|
||||
* For example, PPC is always treated as big-endian even if running
|
||||
* on KVM and on PPC64LE. Correct here.
|
||||
*/
|
||||
switch (size) {
|
||||
case 2:
|
||||
val = bswap16(val);
|
||||
break;
|
||||
case 4:
|
||||
val = bswap32(val);
|
||||
break;
|
||||
if (target_needs_bswap()) {
|
||||
/*
|
||||
* The kernel expects ioeventfd values in HOST_BIG_ENDIAN
|
||||
* endianness, but the memory core hands them in target endianness.
|
||||
* For example, PPC is always treated as big-endian even if running
|
||||
* on KVM and on PPC64LE. Correct here, swapping back.
|
||||
*/
|
||||
switch (size) {
|
||||
case 2:
|
||||
val = bswap16(val);
|
||||
break;
|
||||
case 4:
|
||||
val = bswap32(val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return val;
|
||||
}
|
||||
|
||||
@ -3964,7 +3966,7 @@ static int kvm_gdbstub_sstep_flags(void)
|
||||
return kvm_sstep_flags;
|
||||
}
|
||||
|
||||
static void kvm_accel_class_init(ObjectClass *oc, void *data)
|
||||
static void kvm_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelClass *ac = ACCEL_CLASS(oc);
|
||||
ac->name = "KVM";
|
||||
|
@ -1,3 +1,4 @@
|
||||
common_ss.add(files('accel-common.c'))
|
||||
specific_ss.add(files('accel-target.c'))
|
||||
system_ss.add(files('accel-system.c', 'accel-blocker.c'))
|
||||
user_ss.add(files('accel-user.c'))
|
||||
|
@ -42,7 +42,7 @@ static int qtest_init_accel(MachineState *ms)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qtest_accel_class_init(ObjectClass *oc, void *data)
|
||||
static void qtest_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelClass *ac = ACCEL_CLASS(oc);
|
||||
ac->name = "QTest";
|
||||
@ -59,7 +59,7 @@ static const TypeInfo qtest_accel_type = {
|
||||
};
|
||||
module_obj(TYPE_QTEST_ACCEL);
|
||||
|
||||
static void qtest_accel_ops_class_init(ObjectClass *oc, void *data)
|
||||
static void qtest_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
|
||||
|
||||
|
@ -11,8 +11,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "exec/tb-flush.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "exec/cpu-common.h"
|
||||
|
||||
G_NORETURN void cpu_loop_exit(CPUState *cpu)
|
||||
{
|
||||
|
@ -224,7 +224,7 @@ static void tcg_accel_ops_init(AccelOpsClass *ops)
|
||||
ops->remove_all_breakpoints = tcg_remove_all_breakpoints;
|
||||
}
|
||||
|
||||
static void tcg_accel_ops_class_init(ObjectClass *oc, void *data)
|
||||
static void tcg_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "qapi/qapi-types-common.h"
|
||||
#include "qapi/qapi-builtin-visit.h"
|
||||
#include "qemu/units.h"
|
||||
#include "qemu/target-info.h"
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
#include "hw/qdev-core.h"
|
||||
#else
|
||||
@ -43,7 +44,7 @@
|
||||
#endif
|
||||
#include "accel/tcg/cpu-ops.h"
|
||||
#include "internal-common.h"
|
||||
#include "cpu.h"
|
||||
#include "cpu-param.h"
|
||||
|
||||
|
||||
struct TCGState {
|
||||
@ -89,7 +90,7 @@ static int tcg_init_machine(MachineState *ms)
|
||||
unsigned max_threads = 1;
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
CPUClass *cc = CPU_CLASS(object_class_by_name(CPU_RESOLVING_TYPE));
|
||||
CPUClass *cc = CPU_CLASS(object_class_by_name(target_cpu_type()));
|
||||
bool mttcg_supported = cc->tcg_ops->mttcg_supported;
|
||||
|
||||
switch (s->mttcg_enabled) {
|
||||
@ -237,7 +238,7 @@ static int tcg_gdbstub_supported_sstep_flags(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void tcg_accel_class_init(ObjectClass *oc, void *data)
|
||||
static void tcg_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelClass *ac = ACCEL_CLASS(oc);
|
||||
ac->name = "tcg";
|
||||
|
@ -116,7 +116,7 @@ static int xen_init(MachineState *ms)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void xen_accel_class_init(ObjectClass *oc, void *data)
|
||||
static void xen_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelClass *ac = ACCEL_CLASS(oc);
|
||||
static GlobalProperty compat[] = {
|
||||
@ -147,7 +147,7 @@ static const TypeInfo xen_accel_type = {
|
||||
.class_init = xen_accel_class_init,
|
||||
};
|
||||
|
||||
static void xen_accel_ops_class_init(ObjectClass *oc, void *data)
|
||||
static void xen_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
|
||||
|
||||
|
@ -116,7 +116,7 @@ qauthz_list_finalize(Object *obj)
|
||||
|
||||
|
||||
static void
|
||||
qauthz_list_class_init(ObjectClass *oc, void *data)
|
||||
qauthz_list_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
QAuthZClass *authz = QAUTHZ_CLASS(oc);
|
||||
|
||||
@ -253,7 +253,7 @@ static const TypeInfo qauthz_list_info = {
|
||||
.instance_size = sizeof(QAuthZList),
|
||||
.instance_finalize = qauthz_list_finalize,
|
||||
.class_init = qauthz_list_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ qauthz_list_file_finalize(Object *obj)
|
||||
|
||||
|
||||
static void
|
||||
qauthz_list_file_class_init(ObjectClass *oc, void *data)
|
||||
qauthz_list_file_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
QAuthZClass *authz = QAUTHZ_CLASS(oc);
|
||||
@ -272,7 +272,7 @@ static const TypeInfo qauthz_list_file_info = {
|
||||
.instance_size = sizeof(QAuthZListFile),
|
||||
.instance_finalize = qauthz_list_file_finalize,
|
||||
.class_init = qauthz_list_file_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ qauthz_pam_finalize(Object *obj)
|
||||
|
||||
|
||||
static void
|
||||
qauthz_pam_class_init(ObjectClass *oc, void *data)
|
||||
qauthz_pam_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
QAuthZClass *authz = QAUTHZ_CLASS(oc);
|
||||
@ -136,7 +136,7 @@ static const TypeInfo qauthz_pam_info = {
|
||||
.instance_size = sizeof(QAuthZPAM),
|
||||
.instance_finalize = qauthz_pam_finalize,
|
||||
.class_init = qauthz_pam_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ qauthz_simple_complete(UserCreatable *uc, Error **errp)
|
||||
|
||||
|
||||
static void
|
||||
qauthz_simple_class_init(ObjectClass *oc, void *data)
|
||||
qauthz_simple_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
QAuthZClass *authz = QAUTHZ_CLASS(oc);
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
@ -111,7 +111,7 @@ static const TypeInfo qauthz_simple_info = {
|
||||
.instance_size = sizeof(QAuthZSimple),
|
||||
.instance_finalize = qauthz_simple_finalize,
|
||||
.class_init = qauthz_simple_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -20,7 +20,8 @@ OBJECT_DEFINE_ABSTRACT_TYPE(ConfidentialGuestSupport,
|
||||
CONFIDENTIAL_GUEST_SUPPORT,
|
||||
OBJECT)
|
||||
|
||||
static void confidential_guest_support_class_init(ObjectClass *oc, void *data)
|
||||
static void confidential_guest_support_class_init(ObjectClass *oc,
|
||||
const void *data)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -608,7 +608,7 @@ static void cryptodev_builtin_cleanup(
|
||||
}
|
||||
|
||||
static void
|
||||
cryptodev_builtin_class_init(ObjectClass *oc, void *data)
|
||||
cryptodev_builtin_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
CryptoDevBackendClass *bc = CRYPTODEV_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -619,7 +619,7 @@ static int cryptodev_lkcf_close_session(CryptoDevBackend *backend,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cryptodev_lkcf_class_init(ObjectClass *oc, void *data)
|
||||
static void cryptodev_lkcf_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
CryptoDevBackendClass *bc = CRYPTODEV_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -393,7 +393,7 @@ static void cryptodev_vhost_user_finalize(Object *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
cryptodev_vhost_user_class_init(ObjectClass *oc, void *data)
|
||||
cryptodev_vhost_user_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
CryptoDevBackendClass *bc = CRYPTODEV_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -608,7 +608,7 @@ static void cryptodev_backend_schemas_cb(StatsSchemaList **result,
|
||||
}
|
||||
|
||||
static void
|
||||
cryptodev_backend_class_init(ObjectClass *oc, void *data)
|
||||
cryptodev_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -641,7 +641,7 @@ static const TypeInfo cryptodev_backend_info = {
|
||||
.instance_finalize = cryptodev_backend_finalize,
|
||||
.class_size = sizeof(CryptoDevBackendClass),
|
||||
.class_init = cryptodev_backend_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -485,7 +485,7 @@ dbus_vmstate_get_id(VMStateIf *vmif)
|
||||
}
|
||||
|
||||
static void
|
||||
dbus_vmstate_class_init(ObjectClass *oc, void *data)
|
||||
dbus_vmstate_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
VMStateIfClass *vc = VMSTATE_IF_CLASS(oc);
|
||||
@ -505,7 +505,7 @@ static const TypeInfo dbus_vmstate_info = {
|
||||
.instance_size = sizeof(DBusVMState),
|
||||
.instance_finalize = dbus_vmstate_finalize,
|
||||
.class_init = dbus_vmstate_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ TYPE_VMSTATE_IF },
|
||||
{ }
|
||||
|
@ -17,7 +17,7 @@ OBJECT_DEFINE_ABSTRACT_TYPE(HostIOMMUDevice,
|
||||
HOST_IOMMU_DEVICE,
|
||||
OBJECT)
|
||||
|
||||
static void host_iommu_device_class_init(ObjectClass *oc, void *data)
|
||||
static void host_iommu_device_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,7 @@ static void sgx_epc_backend_instance_init(Object *obj)
|
||||
m->dump = false;
|
||||
}
|
||||
|
||||
static void sgx_epc_backend_class_init(ObjectClass *oc, void *data)
|
||||
static void sgx_epc_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -270,7 +270,7 @@ static void file_backend_unparent(Object *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
file_backend_class_init(ObjectClass *oc, void *data)
|
||||
file_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -133,7 +133,7 @@ memfd_backend_instance_init(Object *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
memfd_backend_class_init(ObjectClass *oc, void *data)
|
||||
memfd_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -37,7 +37,7 @@ ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
||||
}
|
||||
|
||||
static void
|
||||
ram_backend_class_init(ObjectClass *oc, void *data)
|
||||
ram_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -69,7 +69,7 @@ shm_backend_instance_init(Object *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
shm_backend_class_init(ObjectClass *oc, void *data)
|
||||
shm_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
|
||||
|
||||
|
@ -501,7 +501,7 @@ host_memory_backend_set_use_canonical_path(Object *obj, bool value,
|
||||
}
|
||||
|
||||
static void
|
||||
host_memory_backend_class_init(ObjectClass *oc, void *data)
|
||||
host_memory_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -586,7 +586,7 @@ static const TypeInfo host_memory_backend_info = {
|
||||
.instance_size = sizeof(HostMemoryBackend),
|
||||
.instance_init = host_memory_backend_init,
|
||||
.instance_post_init = host_memory_backend_post_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ static bool iommufd_backend_can_be_deleted(UserCreatable *uc)
|
||||
return !be->users;
|
||||
}
|
||||
|
||||
static void iommufd_backend_class_init(ObjectClass *oc, void *data)
|
||||
static void iommufd_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -326,7 +326,7 @@ static int hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
static void hiod_iommufd_class_init(ObjectClass *oc, void *data)
|
||||
static void hiod_iommufd_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
HostIOMMUDeviceClass *hioc = HOST_IOMMU_DEVICE_CLASS(oc);
|
||||
|
||||
@ -342,7 +342,7 @@ static const TypeInfo types[] = {
|
||||
.instance_finalize = iommufd_backend_finalize,
|
||||
.class_size = sizeof(IOMMUFDBackendClass),
|
||||
.class_init = iommufd_backend_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ static void rng_builtin_finalize(Object *obj)
|
||||
qemu_bh_delete(s->bh);
|
||||
}
|
||||
|
||||
static void rng_builtin_class_init(ObjectClass *klass, void *data)
|
||||
static void rng_builtin_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
RngBackendClass *rbc = RNG_BACKEND_CLASS(klass);
|
||||
|
||||
|
@ -143,7 +143,7 @@ static void rng_egd_finalize(Object *obj)
|
||||
g_free(s->chr_name);
|
||||
}
|
||||
|
||||
static void rng_egd_class_init(ObjectClass *klass, void *data)
|
||||
static void rng_egd_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
RngBackendClass *rbc = RNG_BACKEND_CLASS(klass);
|
||||
|
||||
|
@ -121,7 +121,7 @@ static void rng_random_finalize(Object *obj)
|
||||
g_free(s->filename);
|
||||
}
|
||||
|
||||
static void rng_random_class_init(ObjectClass *klass, void *data)
|
||||
static void rng_random_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
RngBackendClass *rbc = RNG_BACKEND_CLASS(klass);
|
||||
|
||||
|
@ -99,7 +99,7 @@ static void rng_backend_finalize(Object *obj)
|
||||
rng_backend_free_requests(s);
|
||||
}
|
||||
|
||||
static void rng_backend_class_init(ObjectClass *oc, void *data)
|
||||
static void rng_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -119,7 +119,7 @@ static const TypeInfo rng_backend_info = {
|
||||
.class_size = sizeof(RngBackendClass),
|
||||
.class_init = rng_backend_class_init,
|
||||
.abstract = true,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -1056,7 +1056,7 @@ static void tpm_emulator_inst_finalize(Object *obj)
|
||||
vmstate_unregister(NULL, &vmstate_tpm_emulator, obj);
|
||||
}
|
||||
|
||||
static void tpm_emulator_class_init(ObjectClass *klass, void *data)
|
||||
static void tpm_emulator_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
TPMBackendClass *tbc = TPM_BACKEND_CLASS(klass);
|
||||
|
||||
|
@ -364,7 +364,7 @@ static void tpm_passthrough_inst_finalize(Object *obj)
|
||||
qapi_free_TPMPassthroughOptions(tpm_pt->options);
|
||||
}
|
||||
|
||||
static void tpm_passthrough_class_init(ObjectClass *klass, void *data)
|
||||
static void tpm_passthrough_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
TPMBackendClass *tbc = TPM_BACKEND_CLASS(klass);
|
||||
|
||||
|
@ -163,7 +163,7 @@ static char *get_chardev(Object *obj, Error **errp)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void vhost_user_backend_class_init(ObjectClass *oc, void *data)
|
||||
static void vhost_user_backend_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
object_class_property_add_str(oc, "chardev", get_chardev, set_chardev);
|
||||
}
|
||||
|
@ -933,7 +933,8 @@ static bool throttle_group_can_be_deleted(UserCreatable *uc)
|
||||
return OBJECT(uc)->ref == 1;
|
||||
}
|
||||
|
||||
static void throttle_group_obj_class_init(ObjectClass *klass, void *class_data)
|
||||
static void throttle_group_obj_class_init(ObjectClass *klass,
|
||||
const void *class_data)
|
||||
{
|
||||
size_t i = 0;
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(klass);
|
||||
@ -966,7 +967,7 @@ static const TypeInfo throttle_group_info = {
|
||||
.instance_size = sizeof(ThrottleGroup),
|
||||
.instance_init = throttle_group_obj_init,
|
||||
.instance_finalize = throttle_group_obj_finalize,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
},
|
||||
|
@ -668,7 +668,7 @@ static void baum_chr_open(Chardev *chr,
|
||||
qemu_set_fd_handler(baum->brlapi_fd, baum_chr_read, NULL, baum);
|
||||
}
|
||||
|
||||
static void char_braille_class_init(ObjectClass *oc, void *data)
|
||||
static void char_braille_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -34,7 +34,7 @@ static void qemu_chr_open_win_con(Chardev *chr,
|
||||
win_chr_set_file(chr, GetStdHandle(STD_OUTPUT_HANDLE), true);
|
||||
}
|
||||
|
||||
static void char_console_class_init(ObjectClass *oc, void *data)
|
||||
static void char_console_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -238,7 +238,7 @@ void qemu_chr_open_fd(Chardev *chr,
|
||||
}
|
||||
}
|
||||
|
||||
static void char_fd_class_init(ObjectClass *oc, void *data)
|
||||
static void char_fd_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -123,7 +123,7 @@ static void qemu_chr_parse_file_out(QemuOpts *opts, ChardevBackend *backend,
|
||||
file->append = qemu_opt_get_bool(opts, "append", false);
|
||||
}
|
||||
|
||||
static void char_file_class_init(ObjectClass *oc, void *data)
|
||||
static void char_file_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -272,7 +272,7 @@ static void qemu_chr_parse_hub(QemuOpts *opts, ChardevBackend *backend,
|
||||
}
|
||||
}
|
||||
|
||||
static void char_hub_class_init(ObjectClass *oc, void *data)
|
||||
static void char_hub_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -447,7 +447,7 @@ void resume_mux_open(void)
|
||||
chardev_options_parsed_cb, NULL);
|
||||
}
|
||||
|
||||
static void char_mux_class_init(ObjectClass *oc, void *data)
|
||||
static void char_mux_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -34,7 +34,7 @@ static void null_chr_open(Chardev *chr,
|
||||
*be_opened = false;
|
||||
}
|
||||
|
||||
static void char_null_class_init(ObjectClass *oc, void *data)
|
||||
static void char_null_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -270,7 +270,7 @@ static void qemu_chr_parse_parallel(QemuOpts *opts, ChardevBackend *backend,
|
||||
parallel->device = g_strdup(device);
|
||||
}
|
||||
|
||||
static void char_parallel_class_init(ObjectClass *oc, void *data)
|
||||
static void char_parallel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -171,7 +171,7 @@ static void qemu_chr_parse_pipe(QemuOpts *opts, ChardevBackend *backend,
|
||||
dev->device = g_strdup(device);
|
||||
}
|
||||
|
||||
static void char_pipe_class_init(ObjectClass *oc, void *data)
|
||||
static void char_pipe_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -390,7 +390,7 @@ static void char_pty_parse(QemuOpts *opts, ChardevBackend *backend,
|
||||
pty->path = g_strdup(path);
|
||||
}
|
||||
|
||||
static void char_pty_class_init(ObjectClass *oc, void *data)
|
||||
static void char_pty_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -223,7 +223,7 @@ static void qemu_chr_parse_ringbuf(QemuOpts *opts, ChardevBackend *backend,
|
||||
}
|
||||
}
|
||||
|
||||
static void char_ringbuf_class_init(ObjectClass *oc, void *data)
|
||||
static void char_ringbuf_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -298,7 +298,7 @@ static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
|
||||
serial->device = g_strdup(device);
|
||||
}
|
||||
|
||||
static void char_serial_class_init(ObjectClass *oc, void *data)
|
||||
static void char_serial_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -1581,7 +1581,7 @@ char_socket_get_connected(Object *obj, Error **errp)
|
||||
return s->state == TCP_CHARDEV_STATE_CONNECTED;
|
||||
}
|
||||
|
||||
static void char_socket_class_init(ObjectClass *oc, void *data)
|
||||
static void char_socket_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -136,7 +136,7 @@ static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend,
|
||||
stdio->signal = qemu_opt_get_bool(opts, "signal", true);
|
||||
}
|
||||
|
||||
static void char_stdio_class_init(ObjectClass *oc, void *data)
|
||||
static void char_stdio_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -219,7 +219,7 @@ static void qmp_chardev_open_udp(Chardev *chr,
|
||||
*be_opened = false;
|
||||
}
|
||||
|
||||
static void char_udp_class_init(ObjectClass *oc, void *data)
|
||||
static void char_udp_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -256,7 +256,7 @@ static int win_stdio_write(Chardev *chr, const uint8_t *buf, int len)
|
||||
return len - len1;
|
||||
}
|
||||
|
||||
static void char_win_stdio_class_init(ObjectClass *oc, void *data)
|
||||
static void char_win_stdio_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -220,7 +220,7 @@ void win_chr_set_file(Chardev *chr, HANDLE file, bool keep_open)
|
||||
s->file = file;
|
||||
}
|
||||
|
||||
static void char_win_class_init(ObjectClass *oc, void *data)
|
||||
static void char_win_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -295,7 +295,7 @@ static int null_chr_write(Chardev *chr, const uint8_t *buf, int len)
|
||||
return len;
|
||||
}
|
||||
|
||||
static void char_class_init(ObjectClass *oc, void *data)
|
||||
static void char_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -267,7 +267,7 @@ static void msmouse_chr_open(Chardev *chr,
|
||||
fifo8_create(&mouse->outbuf, MSMOUSE_BUF_SZ);
|
||||
}
|
||||
|
||||
static void char_msmouse_class_init(ObjectClass *oc, void *data)
|
||||
static void char_msmouse_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -347,7 +347,7 @@ static void qemu_chr_parse_spice_port(QemuOpts *opts, ChardevBackend *backend,
|
||||
spiceport->fqdn = g_strdup(name);
|
||||
}
|
||||
|
||||
static void char_spice_class_init(ObjectClass *oc, void *data)
|
||||
static void char_spice_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
@ -366,7 +366,7 @@ static const TypeInfo char_spice_type_info = {
|
||||
};
|
||||
module_obj(TYPE_CHARDEV_SPICE);
|
||||
|
||||
static void char_spicevmc_class_init(ObjectClass *oc, void *data)
|
||||
static void char_spicevmc_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
@ -382,7 +382,7 @@ static const TypeInfo char_spicevmc_type_info = {
|
||||
};
|
||||
module_obj(TYPE_CHARDEV_SPICEVMC);
|
||||
|
||||
static void char_spiceport_class_init(ObjectClass *oc, void *data)
|
||||
static void char_spiceport_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -110,7 +110,7 @@ static int testdev_chr_write(Chardev *chr, const uint8_t *buf, int len)
|
||||
return orig_len;
|
||||
}
|
||||
|
||||
static void char_testdev_class_init(ObjectClass *oc, void *data)
|
||||
static void char_testdev_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -342,7 +342,7 @@ static void wctablet_chr_open(Chardev *chr,
|
||||
&wctablet_handler);
|
||||
}
|
||||
|
||||
static void wctablet_chr_class_init(ObjectClass *oc, void *data)
|
||||
static void wctablet_chr_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -576,7 +576,7 @@ static void sum_stats(void)
|
||||
}
|
||||
}
|
||||
|
||||
static int dcmp(gconstpointer a, gconstpointer b)
|
||||
static int dcmp(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
InsnData *insn_a = (InsnData *) a;
|
||||
InsnData *insn_b = (InsnData *) b;
|
||||
@ -584,7 +584,7 @@ static int dcmp(gconstpointer a, gconstpointer b)
|
||||
return insn_a->l1_dmisses < insn_b->l1_dmisses ? 1 : -1;
|
||||
}
|
||||
|
||||
static int icmp(gconstpointer a, gconstpointer b)
|
||||
static int icmp(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
InsnData *insn_a = (InsnData *) a;
|
||||
InsnData *insn_b = (InsnData *) b;
|
||||
@ -592,7 +592,7 @@ static int icmp(gconstpointer a, gconstpointer b)
|
||||
return insn_a->l1_imisses < insn_b->l1_imisses ? 1 : -1;
|
||||
}
|
||||
|
||||
static int l2_cmp(gconstpointer a, gconstpointer b)
|
||||
static int l2_cmp(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
InsnData *insn_a = (InsnData *) a;
|
||||
InsnData *insn_b = (InsnData *) b;
|
||||
@ -645,7 +645,7 @@ static void log_top_insns(void)
|
||||
InsnData *insn;
|
||||
|
||||
miss_insns = g_hash_table_get_values(miss_ht);
|
||||
miss_insns = g_list_sort(miss_insns, dcmp);
|
||||
miss_insns = g_list_sort_with_data(miss_insns, dcmp, NULL);
|
||||
g_autoptr(GString) rep = g_string_new("");
|
||||
g_string_append_printf(rep, "%s", "address, data misses, instruction\n");
|
||||
|
||||
@ -659,7 +659,7 @@ static void log_top_insns(void)
|
||||
insn->l1_dmisses, insn->disas_str);
|
||||
}
|
||||
|
||||
miss_insns = g_list_sort(miss_insns, icmp);
|
||||
miss_insns = g_list_sort_with_data(miss_insns, icmp, NULL);
|
||||
g_string_append_printf(rep, "%s", "\naddress, fetch misses, instruction\n");
|
||||
|
||||
for (curr = miss_insns, i = 0; curr && i < limit; i++, curr = curr->next) {
|
||||
@ -676,7 +676,7 @@ static void log_top_insns(void)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
miss_insns = g_list_sort(miss_insns, l2_cmp);
|
||||
miss_insns = g_list_sort_with_data(miss_insns, l2_cmp, NULL);
|
||||
g_string_append_printf(rep, "%s", "\naddress, L2 misses, instruction\n");
|
||||
|
||||
for (curr = miss_insns, i = 0; curr && i < limit; i++, curr = curr->next) {
|
||||
|
@ -98,7 +98,7 @@ static GHashTable *nodes;
|
||||
struct qemu_plugin_scoreboard *state;
|
||||
|
||||
/* SORT_HOTTEST */
|
||||
static gint hottest(gconstpointer a, gconstpointer b)
|
||||
static gint hottest(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
NodeData *na = (NodeData *) a;
|
||||
NodeData *nb = (NodeData *) b;
|
||||
@ -107,7 +107,7 @@ static gint hottest(gconstpointer a, gconstpointer b)
|
||||
na->dest_count == nb->dest_count ? 0 : 1;
|
||||
}
|
||||
|
||||
static gint exception(gconstpointer a, gconstpointer b)
|
||||
static gint exception(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
NodeData *na = (NodeData *) a;
|
||||
NodeData *nb = (NodeData *) b;
|
||||
@ -116,7 +116,7 @@ static gint exception(gconstpointer a, gconstpointer b)
|
||||
na->early_exit == nb->early_exit ? 0 : 1;
|
||||
}
|
||||
|
||||
static gint popular(gconstpointer a, gconstpointer b)
|
||||
static gint popular(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
NodeData *na = (NodeData *) a;
|
||||
NodeData *nb = (NodeData *) b;
|
||||
@ -138,7 +138,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
{
|
||||
g_autoptr(GString) result = g_string_new("collected ");
|
||||
GList *data;
|
||||
GCompareFunc sort = &hottest;
|
||||
GCompareDataFunc sort = &hottest;
|
||||
int i = 0;
|
||||
|
||||
g_mutex_lock(&node_lock);
|
||||
@ -162,7 +162,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
break;
|
||||
}
|
||||
|
||||
data = g_list_sort(data, sort);
|
||||
data = g_list_sort_with_data(data, sort, NULL);
|
||||
|
||||
for (GList *l = data;
|
||||
l != NULL && i < topn;
|
||||
|
@ -39,7 +39,7 @@ typedef struct {
|
||||
unsigned long insns;
|
||||
} ExecCount;
|
||||
|
||||
static gint cmp_exec_count(gconstpointer a, gconstpointer b)
|
||||
static gint cmp_exec_count(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
ExecCount *ea = (ExecCount *) a;
|
||||
ExecCount *eb = (ExecCount *) b;
|
||||
@ -79,7 +79,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
g_string_append_printf(report, "%d entries in the hash table\n",
|
||||
g_hash_table_size(hotblocks));
|
||||
counts = g_hash_table_get_values(hotblocks);
|
||||
it = g_list_sort(counts, cmp_exec_count);
|
||||
it = g_list_sort_with_data(counts, cmp_exec_count, NULL);
|
||||
|
||||
if (it) {
|
||||
g_string_append_printf(report, "pc, tcount, icount, ecount\n");
|
||||
|
@ -48,7 +48,7 @@ typedef struct {
|
||||
static GMutex lock;
|
||||
static GHashTable *pages;
|
||||
|
||||
static gint cmp_access_count(gconstpointer a, gconstpointer b)
|
||||
static gint cmp_access_count(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
PageCounters *ea = (PageCounters *) a;
|
||||
PageCounters *eb = (PageCounters *) b;
|
||||
@ -83,7 +83,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
if (counts && g_list_next(counts)) {
|
||||
GList *it;
|
||||
|
||||
it = g_list_sort(counts, cmp_access_count);
|
||||
it = g_list_sort_with_data(counts, cmp_access_count, NULL);
|
||||
|
||||
for (i = 0; i < limit && it->next; i++, it = it->next) {
|
||||
PageCounters *rec = (PageCounters *) it->data;
|
||||
|
@ -155,7 +155,7 @@ static ClassSelector class_tables[] = {
|
||||
static InsnClassExecCount *class_table;
|
||||
static int class_table_sz;
|
||||
|
||||
static gint cmp_exec_count(gconstpointer a, gconstpointer b)
|
||||
static gint cmp_exec_count(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
InsnExecCount *ea = (InsnExecCount *) a;
|
||||
InsnExecCount *eb = (InsnExecCount *) b;
|
||||
@ -208,7 +208,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
counts = g_hash_table_get_values(insns);
|
||||
if (counts && g_list_next(counts)) {
|
||||
g_string_append_printf(report, "Individual Instructions:\n");
|
||||
counts = g_list_sort(counts, cmp_exec_count);
|
||||
counts = g_list_sort_with_data(counts, cmp_exec_count, NULL);
|
||||
|
||||
for (i = 0; i < limit && g_list_next(counts);
|
||||
i++, counts = g_list_next(counts)) {
|
||||
|
@ -71,7 +71,7 @@ static void plugin_init(void)
|
||||
devices = g_hash_table_new(NULL, NULL);
|
||||
}
|
||||
|
||||
static gint sort_cmp(gconstpointer a, gconstpointer b)
|
||||
static gint sort_cmp(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
DeviceCounts *ea = (DeviceCounts *) a;
|
||||
DeviceCounts *eb = (DeviceCounts *) b;
|
||||
@ -79,7 +79,7 @@ static gint sort_cmp(gconstpointer a, gconstpointer b)
|
||||
eb->totals.reads + eb->totals.writes ? -1 : 1;
|
||||
}
|
||||
|
||||
static gint sort_loc(gconstpointer a, gconstpointer b)
|
||||
static gint sort_loc(gconstpointer a, gconstpointer b, gpointer d)
|
||||
{
|
||||
IOLocationCounts *ea = (IOLocationCounts *) a;
|
||||
IOLocationCounts *eb = (IOLocationCounts *) b;
|
||||
@ -126,13 +126,13 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
if (counts && g_list_next(counts)) {
|
||||
GList *it;
|
||||
|
||||
it = g_list_sort(counts, sort_cmp);
|
||||
it = g_list_sort_with_data(counts, sort_cmp, NULL);
|
||||
|
||||
while (it) {
|
||||
DeviceCounts *rec = (DeviceCounts *) it->data;
|
||||
if (rec->detail) {
|
||||
GList *accesses = g_hash_table_get_values(rec->detail);
|
||||
GList *io_it = g_list_sort(accesses, sort_loc);
|
||||
GList *io_it = g_list_sort_with_data(accesses, sort_loc, NULL);
|
||||
const char *prefix = pattern ? "off" : "pc";
|
||||
g_string_append_printf(report, "%s @ 0x%"PRIx64"\n",
|
||||
rec->name, rec->base);
|
||||
|
86
cpu-target.c
86
cpu-target.c
@ -19,94 +19,19 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "cpu.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/qemu-print.h"
|
||||
#include "system/accel-ops.h"
|
||||
#include "system/cpus.h"
|
||||
#include "exec/cpu-common.h"
|
||||
#include "exec/tswap.h"
|
||||
#include "exec/replay-core.h"
|
||||
#include "exec/log.h"
|
||||
#include "accel/accel-cpu-target.h"
|
||||
#include "hw/core/cpu.h"
|
||||
#include "trace/trace-root.h"
|
||||
|
||||
/* Validate correct placement of CPUArchState. */
|
||||
QEMU_BUILD_BUG_ON(offsetof(ArchCPU, parent_obj) != 0);
|
||||
QEMU_BUILD_BUG_ON(offsetof(ArchCPU, env) != sizeof(CPUState));
|
||||
|
||||
char *cpu_model_from_type(const char *typename)
|
||||
{
|
||||
const char *suffix = "-" CPU_RESOLVING_TYPE;
|
||||
|
||||
if (!object_class_by_name(typename)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (g_str_has_suffix(typename, suffix)) {
|
||||
return g_strndup(typename, strlen(typename) - strlen(suffix));
|
||||
}
|
||||
|
||||
return g_strdup(typename);
|
||||
}
|
||||
|
||||
const char *parse_cpu_option(const char *cpu_option)
|
||||
{
|
||||
ObjectClass *oc;
|
||||
CPUClass *cc;
|
||||
gchar **model_pieces;
|
||||
const char *cpu_type;
|
||||
|
||||
model_pieces = g_strsplit(cpu_option, ",", 2);
|
||||
if (!model_pieces[0]) {
|
||||
error_report("-cpu option cannot be empty");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
oc = cpu_class_by_name(CPU_RESOLVING_TYPE, model_pieces[0]);
|
||||
if (oc == NULL) {
|
||||
error_report("unable to find CPU model '%s'", model_pieces[0]);
|
||||
g_strfreev(model_pieces);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
cpu_type = object_class_get_name(oc);
|
||||
cc = CPU_CLASS(oc);
|
||||
cc->parse_features(cpu_type, model_pieces[1], &error_fatal);
|
||||
g_strfreev(model_pieces);
|
||||
return cpu_type;
|
||||
}
|
||||
|
||||
#ifndef cpu_list
|
||||
static void cpu_list_entry(gpointer data, gpointer user_data)
|
||||
{
|
||||
CPUClass *cc = CPU_CLASS(OBJECT_CLASS(data));
|
||||
const char *typename = object_class_get_name(OBJECT_CLASS(data));
|
||||
g_autofree char *model = cpu_model_from_type(typename);
|
||||
|
||||
if (cc->deprecation_note) {
|
||||
qemu_printf(" %s (deprecated)\n", model);
|
||||
} else {
|
||||
qemu_printf(" %s\n", model);
|
||||
}
|
||||
}
|
||||
|
||||
static void cpu_list(void)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
list = object_class_get_list_sorted(TYPE_CPU, false);
|
||||
qemu_printf("Available CPUs:\n");
|
||||
g_slist_foreach(list, cpu_list_entry, NULL);
|
||||
g_slist_free(list);
|
||||
}
|
||||
#endif
|
||||
|
||||
void list_cpus(void)
|
||||
{
|
||||
cpu_list();
|
||||
}
|
||||
|
||||
/* enable or disable single step mode. EXCP_DEBUG is returned by the
|
||||
CPU loop after each instruction */
|
||||
void cpu_single_step(CPUState *cpu, int enabled)
|
||||
@ -161,13 +86,8 @@ void cpu_abort(CPUState *cpu, const char *fmt, ...)
|
||||
abort();
|
||||
}
|
||||
|
||||
#undef target_words_bigendian
|
||||
bool target_words_bigendian(void)
|
||||
#undef target_big_endian
|
||||
bool target_big_endian(void)
|
||||
{
|
||||
return TARGET_BIG_ENDIAN;
|
||||
}
|
||||
|
||||
const char *target_name(void)
|
||||
{
|
||||
return TARGET_NAME;
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ qcrypto_secret_finalize(Object *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
qcrypto_secret_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_secret_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
QCryptoSecretCommonClass *sic = QCRYPTO_SECRET_COMMON_CLASS(oc);
|
||||
sic->load_data = qcrypto_secret_load_data;
|
||||
|
@ -263,7 +263,7 @@ qcrypto_secret_finalize(Object *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
qcrypto_secret_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_secret_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -375,7 +375,7 @@ static const TypeInfo qcrypto_secret_info = {
|
||||
.class_size = sizeof(QCryptoSecretCommonClass),
|
||||
.class_init = qcrypto_secret_class_init,
|
||||
.abstract = true,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ qcrypto_secret_prop_get_key(Object *obj, Visitor *v,
|
||||
|
||||
|
||||
static void
|
||||
qcrypto_secret_keyring_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_secret_keyring_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
QCryptoSecretCommonClass *sic = QCRYPTO_SECRET_COMMON_CLASS(oc);
|
||||
sic->load_data = qcrypto_secret_keyring_load_data;
|
||||
|
@ -102,7 +102,8 @@ static GByteArray *qcrypto_tls_cipher_suites_fw_cfg_gen_data(Object *obj,
|
||||
errp);
|
||||
}
|
||||
|
||||
static void qcrypto_tls_cipher_suites_class_init(ObjectClass *oc, void *data)
|
||||
static void qcrypto_tls_cipher_suites_class_init(ObjectClass *oc,
|
||||
const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
FWCfgDataGeneratorClass *fwgc = FW_CFG_DATA_GENERATOR_CLASS(oc);
|
||||
@ -117,7 +118,7 @@ static const TypeInfo qcrypto_tls_cipher_suites_info = {
|
||||
.instance_size = sizeof(QCryptoTLSCipherSuites),
|
||||
.class_size = sizeof(QCryptoTLSCredsClass),
|
||||
.class_init = qcrypto_tls_cipher_suites_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ TYPE_FW_CFG_DATA_GENERATOR_INTERFACE },
|
||||
{ }
|
||||
|
@ -223,7 +223,7 @@ qcrypto_tls_creds_prop_get_endpoint(Object *obj,
|
||||
|
||||
|
||||
static void
|
||||
qcrypto_tls_creds_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_tls_creds_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
object_class_property_add_bool(oc, "verify-peer",
|
||||
qcrypto_tls_creds_prop_get_verify,
|
||||
|
@ -137,7 +137,7 @@ qcrypto_tls_creds_anon_finalize(Object *obj)
|
||||
|
||||
|
||||
static void
|
||||
qcrypto_tls_creds_anon_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_tls_creds_anon_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -152,7 +152,7 @@ static const TypeInfo qcrypto_tls_creds_anon_info = {
|
||||
.instance_finalize = qcrypto_tls_creds_anon_finalize,
|
||||
.class_size = sizeof(QCryptoTLSCredsAnonClass),
|
||||
.class_init = qcrypto_tls_creds_anon_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -236,7 +236,7 @@ qcrypto_tls_creds_psk_prop_get_username(Object *obj,
|
||||
}
|
||||
|
||||
static void
|
||||
qcrypto_tls_creds_psk_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_tls_creds_psk_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
|
||||
@ -255,7 +255,7 @@ static const TypeInfo qcrypto_tls_creds_psk_info = {
|
||||
.instance_finalize = qcrypto_tls_creds_psk_finalize,
|
||||
.class_size = sizeof(QCryptoTLSCredsPSKClass),
|
||||
.class_init = qcrypto_tls_creds_psk_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -802,7 +802,7 @@ qcrypto_tls_creds_x509_finalize(Object *obj)
|
||||
|
||||
|
||||
static void
|
||||
qcrypto_tls_creds_x509_class_init(ObjectClass *oc, void *data)
|
||||
qcrypto_tls_creds_x509_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
QCryptoTLSCredsClass *ctcc = QCRYPTO_TLS_CREDS_CLASS(oc);
|
||||
@ -828,7 +828,7 @@ static const TypeInfo qcrypto_tls_creds_x509_info = {
|
||||
.instance_finalize = qcrypto_tls_creds_x509_finalize,
|
||||
.class_size = sizeof(QCryptoTLSCredsX509Class),
|
||||
.class_init = qcrypto_tls_creds_x509_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ to introduce an overridden virtual function:
|
||||
|
||||
#include "qdev.h"
|
||||
|
||||
void my_device_class_init(ObjectClass *klass, void *class_data)
|
||||
void my_device_class_init(ObjectClass *klass, const void *class_data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
dc->reset = my_device_reset;
|
||||
@ -249,7 +249,7 @@ class, which someone might choose to change at some point.
|
||||
// do something
|
||||
}
|
||||
|
||||
static void my_class_init(ObjectClass *oc, void *data)
|
||||
static void my_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
MyClass *mc = MY_CLASS(oc);
|
||||
|
||||
@ -279,7 +279,7 @@ class, which someone might choose to change at some point.
|
||||
// do something else here
|
||||
}
|
||||
|
||||
static void derived_class_init(ObjectClass *oc, void *data)
|
||||
static void derived_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
MyClass *mc = MY_CLASS(oc);
|
||||
DerivedClass *dc = DERIVED_CLASS(oc);
|
||||
@ -363,7 +363,7 @@ This is equivalent to the following:
|
||||
:caption: Expansion from defining a simple type
|
||||
|
||||
static void my_device_finalize(Object *obj);
|
||||
static void my_device_class_init(ObjectClass *oc, void *data);
|
||||
static void my_device_class_init(ObjectClass *oc, const void *data);
|
||||
static void my_device_init(Object *obj);
|
||||
|
||||
static const TypeInfo my_device_info = {
|
||||
|
@ -216,7 +216,7 @@ in reset.
|
||||
ResettablePhases parent_phases;
|
||||
} MyDevClass;
|
||||
|
||||
static void mydev_class_init(ObjectClass *class, void *data)
|
||||
static void mydev_class_init(ObjectClass *class, const void *data)
|
||||
{
|
||||
MyDevClass *myclass = MYDEV_CLASS(class);
|
||||
ResettableClass *rc = RESETTABLE_CLASS(class);
|
||||
|
@ -119,7 +119,7 @@ manually instantiated:
|
||||
qdev_realize(vdev, BUS(&vpci_dev->bus), errp);
|
||||
}
|
||||
|
||||
static void virtio_blk_pci_class_init(ObjectClass *klass, void *data)
|
||||
static void virtio_blk_pci_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
|
||||
|
@ -97,7 +97,8 @@ static bool event_loop_base_can_be_deleted(UserCreatable *uc)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void event_loop_base_class_init(ObjectClass *klass, void *class_data)
|
||||
static void event_loop_base_class_init(ObjectClass *klass,
|
||||
const void *class_data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(klass);
|
||||
ucc->complete = event_loop_base_complete;
|
||||
@ -125,7 +126,7 @@ static const TypeInfo event_loop_base_info = {
|
||||
.class_size = sizeof(EventLoopBaseClass),
|
||||
.class_init = event_loop_base_class_init,
|
||||
.abstract = true,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ }
|
||||
}
|
||||
|
@ -565,15 +565,30 @@ static void gdb_register_feature(CPUState *cpu, int base_reg,
|
||||
g_array_append_val(cpu->gdb_regs, s);
|
||||
}
|
||||
|
||||
static const char *gdb_get_core_xml_file(CPUState *cpu)
|
||||
{
|
||||
CPUClass *cc = cpu->cc;
|
||||
|
||||
/*
|
||||
* The CPU class can provide the XML filename via a method,
|
||||
* or as a simple fixed string field.
|
||||
*/
|
||||
if (cc->gdb_get_core_xml_file) {
|
||||
return cc->gdb_get_core_xml_file(cpu);
|
||||
}
|
||||
return cc->gdb_core_xml_file;
|
||||
}
|
||||
|
||||
void gdb_init_cpu(CPUState *cpu)
|
||||
{
|
||||
CPUClass *cc = cpu->cc;
|
||||
const GDBFeature *feature;
|
||||
const char *xmlfile = gdb_get_core_xml_file(cpu);
|
||||
|
||||
cpu->gdb_regs = g_array_new(false, false, sizeof(GDBRegisterState));
|
||||
|
||||
if (cc->gdb_core_xml_file) {
|
||||
feature = gdb_find_static_feature(cc->gdb_core_xml_file);
|
||||
if (xmlfile) {
|
||||
feature = gdb_find_static_feature(xmlfile);
|
||||
gdb_register_feature(cpu, 0,
|
||||
cc->gdb_read_register, cc->gdb_write_register,
|
||||
feature);
|
||||
@ -1644,7 +1659,7 @@ void gdb_extend_qsupported_features(char *qflags)
|
||||
static void handle_query_supported(GArray *params, void *user_ctx)
|
||||
{
|
||||
g_string_printf(gdbserver_state.str_buf, "PacketSize=%x", MAX_PACKET_LENGTH);
|
||||
if (first_cpu->cc->gdb_core_xml_file) {
|
||||
if (gdb_get_core_xml_file(first_cpu)) {
|
||||
g_string_append(gdbserver_state.str_buf, ";qXfer:features:read+");
|
||||
}
|
||||
|
||||
@ -1701,7 +1716,7 @@ static void handle_query_xfer_features(GArray *params, void *user_ctx)
|
||||
}
|
||||
|
||||
process = gdb_get_cpu_process(gdbserver_state.g_cpu);
|
||||
if (!gdbserver_state.g_cpu->cc->gdb_core_xml_file) {
|
||||
if (!gdb_get_core_xml_file(gdbserver_state.g_cpu)) {
|
||||
gdb_put_packet("");
|
||||
return;
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ static void gdb_monitor_open(Chardev *chr, ChardevBackend *backend,
|
||||
*be_opened = false;
|
||||
}
|
||||
|
||||
static void char_gdb_class_init(ObjectClass *oc, void *data)
|
||||
static void char_gdb_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
||||
|
@ -248,7 +248,7 @@ static const Property virtio_9p_properties[] = {
|
||||
DEFINE_PROP_STRING("fsdev", V9fsVirtioState, state.fsconf.fsdev_id),
|
||||
};
|
||||
|
||||
static void virtio_9p_class_init(ObjectClass *klass, void *data)
|
||||
static void virtio_9p_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
|
||||
|
@ -1018,7 +1018,7 @@ static const Property erst_properties[] = {
|
||||
default_record_size, ERST_RECORD_SIZE),
|
||||
};
|
||||
|
||||
static void erst_class_init(ObjectClass *klass, void *data)
|
||||
static void erst_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
@ -1044,7 +1044,7 @@ static const TypeInfo erst_type_info = {
|
||||
.parent = TYPE_PCI_DEVICE,
|
||||
.class_init = erst_class_init,
|
||||
.instance_size = sizeof(ERSTDeviceState),
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ INTERFACE_CONVENTIONAL_PCI_DEVICE },
|
||||
{ }
|
||||
}
|
||||
|
@ -469,7 +469,7 @@ static void acpi_ged_initfn(Object *obj)
|
||||
sysbus_init_mmio(sbd, &ged_st->regs);
|
||||
}
|
||||
|
||||
static void acpi_ged_class_init(ObjectClass *class, void *data)
|
||||
static void acpi_ged_class_init(ObjectClass *class, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(class);
|
||||
HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(class);
|
||||
@ -494,7 +494,7 @@ static const TypeInfo acpi_ged_info = {
|
||||
.instance_size = sizeof(AcpiGedState),
|
||||
.instance_init = acpi_ged_initfn,
|
||||
.class_init = acpi_ged_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_HOTPLUG_HANDLER },
|
||||
{ TYPE_ACPI_DEVICE_IF },
|
||||
{ }
|
||||
|
@ -133,7 +133,7 @@ static void acpi_generic_initiator_set_node(Object *obj, Visitor *v,
|
||||
ms->numa_state->nodes[gi->node].has_gi = true;
|
||||
}
|
||||
|
||||
static void acpi_generic_initiator_class_init(ObjectClass *oc, void *data)
|
||||
static void acpi_generic_initiator_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
object_class_property_add_str(oc, "pci-dev", NULL,
|
||||
acpi_generic_initiator_set_pci_device);
|
||||
@ -247,7 +247,7 @@ static void acpi_generic_port_set_node(Object *obj, Visitor *v,
|
||||
gp->node = value;
|
||||
}
|
||||
|
||||
static void acpi_generic_port_class_init(ObjectClass *oc, void *data)
|
||||
static void acpi_generic_port_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
object_class_property_add_str(oc, "pci-bus", NULL,
|
||||
acpi_generic_port_set_pci_bus);
|
||||
|
@ -619,7 +619,7 @@ static const Property piix4_pm_properties[] = {
|
||||
not_migrate_acpi_index, false),
|
||||
};
|
||||
|
||||
static void piix4_pm_class_init(ObjectClass *klass, void *data)
|
||||
static void piix4_pm_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
@ -657,7 +657,7 @@ static const TypeInfo piix4_pm_info = {
|
||||
.instance_init = piix4_pm_init,
|
||||
.instance_size = sizeof(PIIX4PMState),
|
||||
.class_init = piix4_pm_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_HOTPLUG_HANDLER },
|
||||
{ TYPE_ACPI_DEVICE_IF },
|
||||
{ INTERFACE_CONVENTIONAL_PCI_DEVICE },
|
||||
|
@ -154,7 +154,7 @@ static void vmclock_realize(DeviceState *dev, Error **errp)
|
||||
vmclock_update_guest(vms);
|
||||
}
|
||||
|
||||
static void vmclock_device_class_init(ObjectClass *klass, void *data)
|
||||
static void vmclock_device_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
|
@ -218,7 +218,7 @@ static const Property vmgenid_device_properties[] = {
|
||||
DEFINE_PROP_UUID(VMGENID_GUID, VmGenIdState, guid),
|
||||
};
|
||||
|
||||
static void vmgenid_device_class_init(ObjectClass *klass, void *data)
|
||||
static void vmgenid_device_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
|
@ -291,7 +291,7 @@ static const Property aspeed_adc_engine_properties[] = {
|
||||
DEFINE_PROP_UINT32("nr-channels", AspeedADCEngineState, nr_channels, 0),
|
||||
};
|
||||
|
||||
static void aspeed_adc_engine_class_init(ObjectClass *klass, void *data)
|
||||
static void aspeed_adc_engine_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
@ -369,7 +369,7 @@ static void aspeed_adc_realize(DeviceState *dev, Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
static void aspeed_adc_class_init(ObjectClass *klass, void *data)
|
||||
static void aspeed_adc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedADCClass *aac = ASPEED_ADC_CLASS(klass);
|
||||
@ -379,7 +379,7 @@ static void aspeed_adc_class_init(ObjectClass *klass, void *data)
|
||||
aac->nr_engines = 1;
|
||||
}
|
||||
|
||||
static void aspeed_2600_adc_class_init(ObjectClass *klass, void *data)
|
||||
static void aspeed_2600_adc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedADCClass *aac = ASPEED_ADC_CLASS(klass);
|
||||
@ -388,7 +388,7 @@ static void aspeed_2600_adc_class_init(ObjectClass *klass, void *data)
|
||||
aac->nr_engines = 2;
|
||||
}
|
||||
|
||||
static void aspeed_1030_adc_class_init(ObjectClass *klass, void *data)
|
||||
static void aspeed_1030_adc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedADCClass *aac = ASPEED_ADC_CLASS(klass);
|
||||
@ -397,7 +397,7 @@ static void aspeed_1030_adc_class_init(ObjectClass *klass, void *data)
|
||||
aac->nr_engines = 2;
|
||||
}
|
||||
|
||||
static void aspeed_2700_adc_class_init(ObjectClass *klass, void *data)
|
||||
static void aspeed_2700_adc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
AspeedADCClass *aac = ASPEED_ADC_CLASS(klass);
|
||||
|
@ -271,7 +271,7 @@ static const Property npcm7xx_timer_properties[] = {
|
||||
DEFINE_PROP_UINT32("iref", NPCM7xxADCState, iref, NPCM7XX_ADC_DEFAULT_IREF),
|
||||
};
|
||||
|
||||
static void npcm7xx_adc_class_init(ObjectClass *klass, void *data)
|
||||
static void npcm7xx_adc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
ResettableClass *rc = RESETTABLE_CLASS(klass);
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
@ -284,7 +284,7 @@ static void stm32f2xx_adc_init(Object *obj)
|
||||
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio);
|
||||
}
|
||||
|
||||
static void stm32f2xx_adc_class_init(ObjectClass *klass, void *data)
|
||||
static void stm32f2xx_adc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
|
@ -281,7 +281,7 @@ static const VMStateDescription vmstate_zynq_xadc = {
|
||||
}
|
||||
};
|
||||
|
||||
static void zynq_xadc_class_init(ObjectClass *klass, void *data)
|
||||
static void zynq_xadc_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
|
@ -935,7 +935,7 @@ static const TypeInfo typhoon_pcihost_info = {
|
||||
};
|
||||
|
||||
static void typhoon_iommu_memory_region_class_init(ObjectClass *klass,
|
||||
void *data)
|
||||
const void *data)
|
||||
{
|
||||
IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_CLASS(klass);
|
||||
|
||||
|
@ -208,7 +208,7 @@ static void aw_a10_realize(DeviceState *dev, Error **errp)
|
||||
sysbus_mmio_map_overlap(SYS_BUS_DEVICE(&s->wdt), 0, AW_A10_WDT_BASE, 1);
|
||||
}
|
||||
|
||||
static void aw_a10_class_init(ObjectClass *oc, void *data)
|
||||
static void aw_a10_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
|
@ -466,7 +466,7 @@ static void allwinner_h3_realize(DeviceState *dev, Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
static void allwinner_h3_class_init(ObjectClass *oc, void *data)
|
||||
static void allwinner_h3_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
|
@ -539,7 +539,7 @@ static void allwinner_r40_realize(DeviceState *dev, Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
static void allwinner_r40_class_init(ObjectClass *oc, void *data)
|
||||
static void allwinner_r40_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
|
@ -1691,7 +1691,7 @@ static void armsse_reset(DeviceState *dev)
|
||||
s->nsccfg = 0;
|
||||
}
|
||||
|
||||
static void armsse_class_init(ObjectClass *klass, void *data)
|
||||
static void armsse_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
IDAUInterfaceClass *iic = IDAU_INTERFACE_CLASS(klass);
|
||||
@ -1713,7 +1713,7 @@ static const TypeInfo armsse_info = {
|
||||
.class_size = sizeof(ARMSSEClass),
|
||||
.instance_init = armsse_init,
|
||||
.abstract = true,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
.interfaces = (const InterfaceInfo[]) {
|
||||
{ TYPE_IDAU_INTERFACE },
|
||||
{ }
|
||||
}
|
||||
@ -1730,7 +1730,7 @@ static void armsse_register_types(void)
|
||||
.name = armsse_variants[i].name,
|
||||
.parent = TYPE_ARM_SSE,
|
||||
.class_init = armsse_class_init,
|
||||
.class_data = (void *)&armsse_variants[i],
|
||||
.class_data = &armsse_variants[i],
|
||||
};
|
||||
type_register_static(&ti);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user