mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging
machine + QOM queue, 2020-09-22 QOM cleanups: * Convert instance properties to class properties (Eduardo Habkost) * simplify object_find_property / object_class_find_property (Daniel P. Berrangé) Deprecated feature removal: * Drop support for invalid topologies (Igor Mammedov) # gpg: Signature made Tue 22 Sep 2020 23:25:01 BST # gpg: using RSA key 5A322FD5ABC4D3DBACCFD1AA2807936F984DC5A6 # gpg: issuer "ehabkost@redhat.com" # gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>" [full] # Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF D1AA 2807 936F 984D C5A6 * remotes/ehabkost/tags/machine-next-pull-request: sifive_u: Register "start-in-flash" as class property sifive_e: Register "revb" as class property i440fx: Register i440FX-pcihost properties as class properties machine: Register "memory-backend" as class property xlnx-zcu102: Register properties as class properties cpu/core: Register core-id and nr-threads as class properties s390x: Register all CPU properties as class properties cryptodev-backend: Register "chardev" as class property cryptodev-vhost-user: Register "chardev" as class property smp: drop support for deprecated (invalid topologies) qom: simplify object_find_property / object_class_find_property Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -334,13 +334,6 @@ cryptodev_vhost_user_get_chardev(Object *obj, Error **errp)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void cryptodev_vhost_user_instance_int(Object *obj)
|
||||
{
|
||||
object_property_add_str(obj, "chardev",
|
||||
cryptodev_vhost_user_get_chardev,
|
||||
cryptodev_vhost_user_set_chardev);
|
||||
}
|
||||
|
||||
static void cryptodev_vhost_user_finalize(Object *obj)
|
||||
{
|
||||
CryptoDevBackendVhostUser *s =
|
||||
@@ -361,13 +354,17 @@ cryptodev_vhost_user_class_init(ObjectClass *oc, void *data)
|
||||
bc->create_session = cryptodev_vhost_user_sym_create_session;
|
||||
bc->close_session = cryptodev_vhost_user_sym_close_session;
|
||||
bc->do_sym_op = NULL;
|
||||
|
||||
object_class_property_add_str(oc, "chardev",
|
||||
cryptodev_vhost_user_get_chardev,
|
||||
cryptodev_vhost_user_set_chardev);
|
||||
|
||||
}
|
||||
|
||||
static const TypeInfo cryptodev_vhost_user_info = {
|
||||
.name = TYPE_CRYPTODEV_BACKEND_VHOST_USER,
|
||||
.parent = TYPE_CRYPTODEV_BACKEND,
|
||||
.class_init = cryptodev_vhost_user_class_init,
|
||||
.instance_init = cryptodev_vhost_user_instance_int,
|
||||
.instance_finalize = cryptodev_vhost_user_finalize,
|
||||
.instance_size = sizeof(CryptoDevBackendVhostUser),
|
||||
};
|
||||
|
||||
@@ -206,10 +206,6 @@ cryptodev_backend_can_be_deleted(UserCreatable *uc)
|
||||
|
||||
static void cryptodev_backend_instance_init(Object *obj)
|
||||
{
|
||||
object_property_add(obj, "queues", "uint32",
|
||||
cryptodev_backend_get_queues,
|
||||
cryptodev_backend_set_queues,
|
||||
NULL, NULL);
|
||||
/* Initialize devices' queues property to 1 */
|
||||
object_property_set_int(obj, "queues", 1, NULL);
|
||||
}
|
||||
@@ -230,6 +226,10 @@ cryptodev_backend_class_init(ObjectClass *oc, void *data)
|
||||
ucc->can_be_deleted = cryptodev_backend_can_be_deleted;
|
||||
|
||||
QTAILQ_INIT(&crypto_clients);
|
||||
object_class_property_add(oc, "queues", "uint32",
|
||||
cryptodev_backend_get_queues,
|
||||
cryptodev_backend_set_queues,
|
||||
NULL, NULL);
|
||||
}
|
||||
|
||||
static const TypeInfo cryptodev_backend_info = {
|
||||
|
||||
+13
-13
@@ -47,19 +47,6 @@ The 'file' driver for drives is no longer appropriate for character or host
|
||||
devices and will only accept regular files (S_IFREG). The correct driver
|
||||
for these file types is 'host_cdrom' or 'host_device' as appropriate.
|
||||
|
||||
``-smp`` (invalid topologies) (since 3.1)
|
||||
'''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
CPU topology properties should describe whole machine topology including
|
||||
possible CPUs.
|
||||
|
||||
However, historically it was possible to start QEMU with an incorrect topology
|
||||
where *n* <= *sockets* * *cores* * *threads* < *maxcpus*,
|
||||
which could lead to an incorrect topology enumeration by the guest.
|
||||
Support for invalid topologies will be removed, the user must ensure
|
||||
topologies described with -smp include all possible cpus, i.e.
|
||||
*sockets* * *cores* * *threads* = *maxcpus*.
|
||||
|
||||
``-vnc acl`` (since 4.0.0)
|
||||
''''''''''''''''''''''''''
|
||||
|
||||
@@ -642,6 +629,19 @@ New machine versions (since 5.1) will not accept the option but it will still
|
||||
work with old machine types. User can check the QAPI schema to see if the legacy
|
||||
option is supported by looking at MachineInfo::numa-mem-supported property.
|
||||
|
||||
``-smp`` (invalid topologies) (removed 5.2)
|
||||
'''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
CPU topology properties should describe whole machine topology including
|
||||
possible CPUs.
|
||||
|
||||
However, historically it was possible to start QEMU with an incorrect topology
|
||||
where *n* <= *sockets* * *cores* * *threads* < *maxcpus*,
|
||||
which could lead to an incorrect topology enumeration by the guest.
|
||||
Support for invalid topologies is removed, the user must ensure
|
||||
topologies described with -smp include all possible cpus, i.e.
|
||||
*sockets* * *cores* * *threads* = *maxcpus*.
|
||||
|
||||
Block devices
|
||||
-------------
|
||||
|
||||
|
||||
+5
-5
@@ -169,28 +169,28 @@ static void armv7m_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
object_property_set_link(OBJECT(s->cpu), "memory", OBJECT(&s->container),
|
||||
&error_abort);
|
||||
if (object_property_find(OBJECT(s->cpu), "idau", NULL)) {
|
||||
if (object_property_find(OBJECT(s->cpu), "idau")) {
|
||||
object_property_set_link(OBJECT(s->cpu), "idau", s->idau,
|
||||
&error_abort);
|
||||
}
|
||||
if (object_property_find(OBJECT(s->cpu), "init-svtor", NULL)) {
|
||||
if (object_property_find(OBJECT(s->cpu), "init-svtor")) {
|
||||
if (!object_property_set_uint(OBJECT(s->cpu), "init-svtor",
|
||||
s->init_svtor, errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (object_property_find(OBJECT(s->cpu), "start-powered-off", NULL)) {
|
||||
if (object_property_find(OBJECT(s->cpu), "start-powered-off")) {
|
||||
if (!object_property_set_bool(OBJECT(s->cpu), "start-powered-off",
|
||||
s->start_powered_off, errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (object_property_find(OBJECT(s->cpu), "vfp", NULL)) {
|
||||
if (object_property_find(OBJECT(s->cpu), "vfp")) {
|
||||
if (!object_property_set_bool(OBJECT(s->cpu), "vfp", s->vfp, errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (object_property_find(OBJECT(s->cpu), "dsp", NULL)) {
|
||||
if (object_property_find(OBJECT(s->cpu), "dsp")) {
|
||||
if (!object_property_set_bool(OBJECT(s->cpu), "dsp", s->dsp, errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
+1
-1
@@ -214,7 +214,7 @@ static void exynos4210_realize(DeviceState *socdev, Error **errp)
|
||||
/* By default A9 CPUs have EL3 enabled. This board does not currently
|
||||
* support EL3 so the CPU EL3 property is disabled before realization.
|
||||
*/
|
||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||
if (object_property_find(cpuobj, "has_el3")) {
|
||||
object_property_set_bool(cpuobj, "has_el3", false, &error_fatal);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -276,7 +276,7 @@ static void calxeda_init(MachineState *machine, enum cxmachines machine_id)
|
||||
&error_abort);
|
||||
}
|
||||
|
||||
if (object_property_find(cpuobj, "reset-cbar", NULL)) {
|
||||
if (object_property_find(cpuobj, "reset-cbar")) {
|
||||
object_property_set_int(cpuobj, "reset-cbar", MPCORE_PERIPHBASE,
|
||||
&error_abort);
|
||||
}
|
||||
|
||||
@@ -603,7 +603,7 @@ static void integratorcp_init(MachineState *machine)
|
||||
* currently support EL3 so the CPU EL3 property is disabled before
|
||||
* realization.
|
||||
*/
|
||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||
if (object_property_find(cpuobj, "has_el3")) {
|
||||
object_property_set_bool(cpuobj, "has_el3", false, &error_fatal);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -108,7 +108,7 @@ static void realview_init(MachineState *machine,
|
||||
* does not currently support EL3 so the CPU EL3 property is disabled
|
||||
* before realization.
|
||||
*/
|
||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||
if (object_property_find(cpuobj, "has_el3")) {
|
||||
object_property_set_bool(cpuobj, "has_el3", false, &error_fatal);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -703,7 +703,7 @@ static void sbsa_ref_init(MachineState *machine)
|
||||
numa_cpu_pre_plug(&possible_cpus->cpus[cs->cpu_index], DEVICE(cpuobj),
|
||||
&error_fatal);
|
||||
|
||||
if (object_property_find(cpuobj, "reset-cbar", NULL)) {
|
||||
if (object_property_find(cpuobj, "reset-cbar")) {
|
||||
object_property_set_int(cpuobj, "reset-cbar",
|
||||
sbsa_ref_memmap[SBSA_CPUPERIPHS].base,
|
||||
&error_abort);
|
||||
|
||||
@@ -213,7 +213,7 @@ static void versatile_init(MachineState *machine, int board_id)
|
||||
* currently support EL3 so the CPU EL3 property is disabled before
|
||||
* realization.
|
||||
*/
|
||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||
if (object_property_find(cpuobj, "has_el3")) {
|
||||
object_property_set_bool(cpuobj, "has_el3", false, &error_fatal);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -218,12 +218,12 @@ static void init_cpus(MachineState *ms, const char *cpu_type,
|
||||
object_property_set_bool(cpuobj, "has_el3", false, NULL);
|
||||
}
|
||||
if (!virt) {
|
||||
if (object_property_find(cpuobj, "has_el2", NULL)) {
|
||||
if (object_property_find(cpuobj, "has_el2")) {
|
||||
object_property_set_bool(cpuobj, "has_el2", false, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (object_property_find(cpuobj, "reset-cbar", NULL)) {
|
||||
if (object_property_find(cpuobj, "reset-cbar")) {
|
||||
object_property_set_int(cpuobj, "reset-cbar", periphbase,
|
||||
&error_abort);
|
||||
}
|
||||
|
||||
+5
-5
@@ -1806,7 +1806,7 @@ static void machvirt_init(MachineState *machine)
|
||||
object_property_set_bool(cpuobj, "has_el3", false, NULL);
|
||||
}
|
||||
|
||||
if (!vms->virt && object_property_find(cpuobj, "has_el2", NULL)) {
|
||||
if (!vms->virt && object_property_find(cpuobj, "has_el2")) {
|
||||
object_property_set_bool(cpuobj, "has_el2", false, NULL);
|
||||
}
|
||||
|
||||
@@ -1822,15 +1822,15 @@ static void machvirt_init(MachineState *machine)
|
||||
}
|
||||
|
||||
if (vmc->kvm_no_adjvtime &&
|
||||
object_property_find(cpuobj, "kvm-no-adjvtime", NULL)) {
|
||||
object_property_find(cpuobj, "kvm-no-adjvtime")) {
|
||||
object_property_set_bool(cpuobj, "kvm-no-adjvtime", true, NULL);
|
||||
}
|
||||
|
||||
if (vmc->no_pmu && object_property_find(cpuobj, "pmu", NULL)) {
|
||||
if (vmc->no_pmu && object_property_find(cpuobj, "pmu")) {
|
||||
object_property_set_bool(cpuobj, "pmu", false, NULL);
|
||||
}
|
||||
|
||||
if (object_property_find(cpuobj, "reset-cbar", NULL)) {
|
||||
if (object_property_find(cpuobj, "reset-cbar")) {
|
||||
object_property_set_int(cpuobj, "reset-cbar",
|
||||
vms->memmap[VIRT_CPUPERIPHS].base,
|
||||
&error_abort);
|
||||
@@ -1850,7 +1850,7 @@ static void machvirt_init(MachineState *machine)
|
||||
* The property exists only if MemTag is supported.
|
||||
* If it is, we must allocate the ram to back that up.
|
||||
*/
|
||||
if (!object_property_find(cpuobj, "tag-memory", NULL)) {
|
||||
if (!object_property_find(cpuobj, "tag-memory")) {
|
||||
error_report("MTE requested, but not supported "
|
||||
"by the guest CPU");
|
||||
exit(1);
|
||||
|
||||
@@ -196,7 +196,7 @@ static void zynq_init(MachineState *machine)
|
||||
* currently support EL3 so the CPU EL3 property is disabled before
|
||||
* realization.
|
||||
*/
|
||||
if (object_property_find(OBJECT(cpu), "has_el3", NULL)) {
|
||||
if (object_property_find(OBJECT(cpu), "has_el3")) {
|
||||
object_property_set_bool(OBJECT(cpu), "has_el3", false, &error_fatal);
|
||||
}
|
||||
|
||||
|
||||
+13
-12
@@ -206,20 +206,8 @@ static void xlnx_zcu102_machine_instance_init(Object *obj)
|
||||
|
||||
/* Default to secure mode being disabled */
|
||||
s->secure = false;
|
||||
object_property_add_bool(obj, "secure", zcu102_get_secure,
|
||||
zcu102_set_secure);
|
||||
object_property_set_description(obj, "secure",
|
||||
"Set on/off to enable/disable the ARM "
|
||||
"Security Extensions (TrustZone)");
|
||||
|
||||
/* Default to virt (EL2) being disabled */
|
||||
s->virt = false;
|
||||
object_property_add_bool(obj, "virtualization", zcu102_get_virt,
|
||||
zcu102_set_virt);
|
||||
object_property_set_description(obj, "virtualization",
|
||||
"Set on/off to enable/disable emulating a "
|
||||
"guest CPU which implements the ARM "
|
||||
"Virtualization Extensions");
|
||||
}
|
||||
|
||||
static void xlnx_zcu102_machine_class_init(ObjectClass *oc, void *data)
|
||||
@@ -235,6 +223,19 @@ static void xlnx_zcu102_machine_class_init(ObjectClass *oc, void *data)
|
||||
mc->max_cpus = XLNX_ZYNQMP_NUM_APU_CPUS + XLNX_ZYNQMP_NUM_RPU_CPUS;
|
||||
mc->default_cpus = XLNX_ZYNQMP_NUM_APU_CPUS;
|
||||
mc->default_ram_id = "ddr-ram";
|
||||
|
||||
object_class_property_add_bool(oc, "secure", zcu102_get_secure,
|
||||
zcu102_set_secure);
|
||||
object_class_property_set_description(oc, "secure",
|
||||
"Set on/off to enable/disable the ARM "
|
||||
"Security Extensions (TrustZone)");
|
||||
|
||||
object_class_property_add_bool(oc, "virtualization", zcu102_get_virt,
|
||||
zcu102_set_virt);
|
||||
object_class_property_set_description(oc, "virtualization",
|
||||
"Set on/off to enable/disable emulating a "
|
||||
"guest CPU which implements the ARM "
|
||||
"Virtualization Extensions");
|
||||
}
|
||||
|
||||
static const TypeInfo xlnx_zcu102_machine_init_typeinfo = {
|
||||
|
||||
+10
-18
@@ -754,23 +754,15 @@ static void smp_parse(MachineState *ms, QemuOpts *opts)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sockets * cores * threads > ms->smp.max_cpus) {
|
||||
error_report("cpu topology: "
|
||||
"sockets (%u) * cores (%u) * threads (%u) > "
|
||||
"maxcpus (%u)",
|
||||
if (sockets * cores * threads != ms->smp.max_cpus) {
|
||||
error_report("Invalid CPU topology: "
|
||||
"sockets (%u) * cores (%u) * threads (%u) "
|
||||
"!= maxcpus (%u)",
|
||||
sockets, cores, threads,
|
||||
ms->smp.max_cpus);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sockets * cores * threads != ms->smp.max_cpus) {
|
||||
warn_report("Invalid CPU topology deprecated: "
|
||||
"sockets (%u) * cores (%u) * threads (%u) "
|
||||
"!= maxcpus (%u)",
|
||||
sockets, cores, threads,
|
||||
ms->smp.max_cpus);
|
||||
}
|
||||
|
||||
ms->smp.cpus = cpus;
|
||||
ms->smp.cores = cores;
|
||||
ms->smp.threads = threads;
|
||||
@@ -874,6 +866,12 @@ static void machine_class_init(ObjectClass *oc, void *data)
|
||||
machine_get_memory_encryption, machine_set_memory_encryption);
|
||||
object_class_property_set_description(oc, "memory-encryption",
|
||||
"Set memory encryption object to use");
|
||||
|
||||
object_class_property_add_str(oc, "memory-backend",
|
||||
machine_get_memdev, machine_set_memdev);
|
||||
object_class_property_set_description(oc, "memory-backend",
|
||||
"Set RAM backend"
|
||||
"Valid value is ID of hostmem based backend");
|
||||
}
|
||||
|
||||
static void machine_class_base_init(ObjectClass *oc, void *data)
|
||||
@@ -925,12 +923,6 @@ static void machine_initfn(Object *obj)
|
||||
"Table (HMAT)");
|
||||
}
|
||||
|
||||
object_property_add_str(obj, "memory-backend",
|
||||
machine_get_memdev, machine_set_memdev);
|
||||
object_property_set_description(obj, "memory-backend",
|
||||
"Set RAM backend"
|
||||
"Valid value is ID of hostmem based backend");
|
||||
|
||||
/* Register notifier when init is done for sysbus sanity checks */
|
||||
ms->sysbus_notifier.notify = machine_init_notify;
|
||||
qemu_add_machine_init_done_notifier(&ms->sysbus_notifier);
|
||||
|
||||
@@ -460,7 +460,7 @@ void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
|
||||
qdev_prop_set_netdev(dev, "netdev", nd->netdev);
|
||||
}
|
||||
if (nd->nvectors != DEV_NVECTORS_UNSPECIFIED &&
|
||||
object_property_find(OBJECT(dev), "vectors", NULL)) {
|
||||
object_property_find(OBJECT(dev), "vectors")) {
|
||||
qdev_prop_set_uint32(dev, "vectors", nd->nvectors);
|
||||
}
|
||||
nd->instantiated = 1;
|
||||
|
||||
+1
-1
@@ -93,7 +93,7 @@ bool sysbus_has_irq(SysBusDevice *dev, int n)
|
||||
char *prop = g_strdup_printf("%s[%d]", SYSBUS_DEVICE_GPIO_IRQ, n);
|
||||
ObjectProperty *r;
|
||||
|
||||
r = object_property_find(OBJECT(dev), prop, NULL);
|
||||
r = object_property_find(OBJECT(dev), prop);
|
||||
g_free(prop);
|
||||
|
||||
return (r != NULL);
|
||||
|
||||
+2
-2
@@ -66,11 +66,11 @@ static void a15mp_priv_realize(DeviceState *dev, Error **errp)
|
||||
* either all the CPUs have TZ, or none do.
|
||||
*/
|
||||
cpuobj = OBJECT(qemu_get_cpu(0));
|
||||
has_el3 = object_property_find(cpuobj, "has_el3", NULL) &&
|
||||
has_el3 = object_property_find(cpuobj, "has_el3") &&
|
||||
object_property_get_bool(cpuobj, "has_el3", &error_abort);
|
||||
qdev_prop_set_bit(gicdev, "has-security-extensions", has_el3);
|
||||
/* Similarly for virtualization support */
|
||||
has_el2 = object_property_find(cpuobj, "has_el2", NULL) &&
|
||||
has_el2 = object_property_find(cpuobj, "has_el2") &&
|
||||
object_property_get_bool(cpuobj, "has_el2", &error_abort);
|
||||
qdev_prop_set_bit(gicdev, "has-virtualization-extensions", has_el2);
|
||||
}
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ static void a9mp_priv_realize(DeviceState *dev, Error **errp)
|
||||
/* Make the GIC's TZ support match the CPUs. We assume that
|
||||
* either all the CPUs have TZ, or none do.
|
||||
*/
|
||||
has_el3 = object_property_find(cpuobj, "has_el3", NULL) &&
|
||||
has_el3 = object_property_find(cpuobj, "has_el3") &&
|
||||
object_property_get_bool(cpuobj, "has_el3", &error_abort);
|
||||
qdev_prop_set_bit(gicdev, "has-security-extensions", has_el3);
|
||||
|
||||
|
||||
+4
-4
@@ -69,10 +69,6 @@ static void cpu_core_instance_init(Object *obj)
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
CPUCore *core = CPU_CORE(obj);
|
||||
|
||||
object_property_add(obj, "core-id", "int", core_prop_get_core_id,
|
||||
core_prop_set_core_id, NULL, NULL);
|
||||
object_property_add(obj, "nr-threads", "int", core_prop_get_nr_threads,
|
||||
core_prop_set_nr_threads, NULL, NULL);
|
||||
core->nr_threads = ms->smp.threads;
|
||||
}
|
||||
|
||||
@@ -81,6 +77,10 @@ static void cpu_core_class_init(ObjectClass *oc, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
set_bit(DEVICE_CATEGORY_CPU, dc->categories);
|
||||
object_class_property_add(oc, "core-id", "int", core_prop_get_core_id,
|
||||
core_prop_set_core_id, NULL, NULL);
|
||||
object_class_property_add(oc, "nr-threads", "int", core_prop_get_nr_threads,
|
||||
core_prop_set_nr_threads, NULL, NULL);
|
||||
}
|
||||
|
||||
static const TypeInfo cpu_core_type_info = {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user