From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.28.173.206 with SMTP id w197csp5984395wme; Wed, 17 Jan 2018 18:18:47 -0800 (PST) X-Google-Smtp-Source: ACJfBovhwhLSvIZQKANrus8zfwj44iQN0e2umKiqj+1AL8X3U5D5RMKXKpr+r+rV8+ItXAMF4FG+ X-Received: by 10.37.164.73 with SMTP id f67mr20364086ybi.214.1516241927567; Wed, 17 Jan 2018 18:18:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516241927; cv=none; d=google.com; s=arc-20160816; b=Dct1h7m/Jg8qIkZ/0hXa/m/SdwZkp0hm11lEXP3/2KOGZTXJMVSj6ISTF5zEUYkONe Ap4abp2j0y07uwLVxuDw79CJsEzIMsgCT8uSuXgU/agDvmldm6YNoMuoGP7dhJqNZUi8 ngbnNDG5mTHKcoEJcxLVVE0HCQqjiQ/DAqXSyBd3ObxwRzC/VenjITIX8su2M4qK3h0/ 6v2nkrbjUjYgxKn/GTjpdz9yFFusm8NedWmwo3l33l8AsMVvVKbA88nbPiDsOW5th/a4 +wzlPzMWCx7c6V2ZGBGxB+XfG4bWVa1pZ3QTY8WwXkSdQBG6j0E4obSpbHg6OHwMJ6Ve mXVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:arc-authentication-results; bh=6LY6rJTI/bQjbJU2Ns3YnJeX5pUffwzjKWjcqV8gdMw=; b=EyuPQ38uZ1iTTyG/OGVRrNYn1x3yd1SzHCUyHx/mrvnURPw/aN+YDegjllirtVdfOY p219b59ZLU7d0okyyeOFSAfe9rVebJoL/OzeZek7VR7+GiRviNCB7YG6OrdLJ0qbbBtv NWZQsjlvmapHkJFCbXEeEXWucR0sE2TMlk0oLPCt8xQK4a5mWJ/cpkHFMrQw0nWuwnpc gZb1YhmW+nRELKO1ih4tzR+aHidVQ9zDVGAEn0gCIEGhdqpw1WpJItxM0LHj7ukaaAQC gyqErhV6ndPGvF3HLgI5fTCk6Trt7OdwplDeNf9Ds22lDgoJe/fMwwSB27TScS1oMArz isMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-arm-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-arm-bounces+alex.bennee=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id 83si1443537ybp.624.2018.01.17.18.18.47 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 17 Jan 2018 18:18:47 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-arm-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-arm-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-arm-bounces+alex.bennee=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from localhost ([::1]:52183 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ebzmw-0007E8-T3 for alex.bennee@linaro.org; Wed, 17 Jan 2018 21:18:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46062) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ebzfH-0000k4-QJ for qemu-arm@nongnu.org; Wed, 17 Jan 2018 21:10:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ebzfG-0004iS-3D for qemu-arm@nongnu.org; Wed, 17 Jan 2018 21:10:51 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42492) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ebzfF-0004hr-Qc; Wed, 17 Jan 2018 21:10:50 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BCED244826; Thu, 18 Jan 2018 02:10:47 +0000 (UTC) Received: from localhost (ovpn-116-6.gru2.redhat.com [10.97.116.6]) by smtp.corp.redhat.com (Postfix) with ESMTP id 32BF717D8B; Thu, 18 Jan 2018 02:10:40 +0000 (UTC) From: Eduardo Habkost To: Peter Maydell , qemu-devel@nongnu.org Date: Thu, 18 Jan 2018 00:09:47 -0200 Message-Id: <20180118021000.27203-7-ehabkost@redhat.com> In-Reply-To: <20180118021000.27203-1-ehabkost@redhat.com> References: <20180118021000.27203-1-ehabkost@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 18 Jan 2018 02:10:49 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-arm] [PULL 06/19] machine: Replace has_dynamic_sysbus with list of allowed devices X-BeenThere: qemu-arm@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , "Michael S. Tsirkin" , Alexander Graf , Anthony Perard , qemu-arm@nongnu.org, qemu-ppc@nongnu.org, Marcel Apfelbaum , xen-devel@lists.xenproject.org, David Gibson Errors-To: qemu-arm-bounces+alex.bennee=linaro.org@nongnu.org Sender: "Qemu-arm" X-TUID: dBWWDrwEIrgO The existing has_dynamic_sysbus flag makes the machine accept every user-creatable sysbus device type on the command-line. Replace it with a list of allowed device types, so machines can easily accept some sysbus devices while rejecting others. To keep exactly the same behavior as before, the existing has_dynamic_sysbus=3Dtrue assignments are replaced with a TYPE_SYS_BUS_DEVICE entry on the allowed list. Other patches will replace the TYPE_SYS_BUS_DEVICE entries with more specific lists of devices. Cc: Peter Maydell Cc: Marcel Apfelbaum Cc: "Michael S. Tsirkin" Cc: Alexander Graf Cc: David Gibson Cc: Stefano Stabellini Cc: Anthony Perard Cc: qemu-arm@nongnu.org Cc: qemu-ppc@nongnu.org Cc: xen-devel@lists.xenproject.org Signed-off-by: Eduardo Habkost Message-Id: <20171125151610.20547-2-ehabkost@redhat.com> Reviewed-by: Greg Kurz Reviewed-by: David Gibson Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Marcel Apfelbaum Signed-off-by: Eduardo Habkost --- include/hw/boards.h | 5 ++++- hw/arm/virt.c | 3 ++- hw/core/machine.c | 43 +++++++++++++++++++++++++++++-------------- hw/i386/pc_q35.c | 3 ++- hw/ppc/e500plat.c | 4 +++- hw/ppc/spapr.c | 3 ++- hw/xen/xen_backend.c | 7 ++++++- 7 files changed, 48 insertions(+), 20 deletions(-) diff --git a/include/hw/boards.h b/include/hw/boards.h index 156b16f7a6..041bc08971 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -76,6 +76,9 @@ void machine_set_cpu_numa_node(MachineState *machine, const CpuInstanceProperties *props, Error **errp); =20 +void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char= *type); + + /** * CPUArchId: * @arch_id - architecture-dependent CPU ID of present or possible CPU @@ -179,7 +182,6 @@ struct MachineClass { no_floppy:1, no_cdrom:1, no_sdcard:1, - has_dynamic_sysbus:1, pci_allow_0_address:1, legacy_fw_cfg_order:1; int is_default; @@ -197,6 +199,7 @@ struct MachineClass { bool ignore_memory_transaction_failures; int numa_mem_align_shift; const char **valid_cpu_types; + strList *allowed_dynamic_sysbus_devices; bool auto_enable_numa_with_memhp; void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes, int nb_nodes, ram_addr_t size); diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 543f9bd6cc..7549895fd2 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1591,7 +1591,8 @@ static void virt_machine_class_init(ObjectClass *oc= , void *data) * configuration of the particular instance. */ mc->max_cpus =3D 255; - mc->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); mc->block_default_type =3D IF_VIRTIO; mc->no_cdrom =3D 1; mc->pci_allow_0_address =3D true; diff --git a/hw/core/machine.c b/hw/core/machine.c index c857f3f934..0320a8efa1 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -334,29 +334,44 @@ static bool machine_get_enforce_config_section(Obje= ct *obj, Error **errp) return ms->enforce_config_section; } =20 -static void error_on_sysbus_device(SysBusDevice *sbdev, void *opaque) +void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char= *type) { - error_report("Option '-device %s' cannot be handled by this machine"= , - object_class_get_name(object_get_class(OBJECT(sbdev))))= ; - exit(1); + strList *item =3D g_new0(strList, 1); + + item->value =3D g_strdup(type); + item->next =3D mc->allowed_dynamic_sysbus_devices; + mc->allowed_dynamic_sysbus_devices =3D item; } =20 -static void machine_init_notify(Notifier *notifier, void *data) +static void validate_sysbus_device(SysBusDevice *sbdev, void *opaque) { - Object *machine =3D qdev_get_machine(); - ObjectClass *oc =3D object_get_class(machine); - MachineClass *mc =3D MACHINE_CLASS(oc); + MachineState *machine =3D opaque; + MachineClass *mc =3D MACHINE_GET_CLASS(machine); + bool allowed =3D false; + strList *wl; =20 - if (mc->has_dynamic_sysbus) { - /* Our machine can handle dynamic sysbus devices, we're all good= */ - return; + for (wl =3D mc->allowed_dynamic_sysbus_devices; + !allowed && wl; + wl =3D wl->next) { + allowed |=3D !!object_dynamic_cast(OBJECT(sbdev), wl->value); } =20 + if (!allowed) { + error_report("Option '-device %s' cannot be handled by this mach= ine", + object_class_get_name(object_get_class(OBJECT(sbdev= )))); + exit(1); + } +} + +static void machine_init_notify(Notifier *notifier, void *data) +{ + MachineState *machine =3D MACHINE(qdev_get_machine()); + /* - * Loop through all dynamically created devices and check whether th= ere - * are sysbus devices among them. If there are, error out. + * Loop through all dynamically created sysbus devices and check if = they are + * all allowed. If a device is not allowed, error out. */ - foreach_dynamic_sysbus_device(error_on_sysbus_device, NULL); + foreach_dynamic_sysbus_device(validate_sysbus_device, machine); } =20 HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machi= ne) diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index d6060043ac..d0b0e5b422 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -299,7 +299,8 @@ static void pc_q35_machine_options(MachineClass *m) m->default_machine_opts =3D "firmware=3Dbios-256k.bin"; m->default_display =3D "std"; m->no_floppy =3D 1; - m->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(m, TYPE_SYS_BUS_DEVICE); m->max_cpus =3D 288; } =20 diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index e59e80fb9e..438118c29b 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -15,6 +15,7 @@ #include "hw/boards.h" #include "sysemu/device_tree.h" #include "sysemu/kvm.h" +#include "hw/sysbus.h" #include "hw/pci/pci.h" #include "hw/ppc/openpic.h" #include "kvm_ppc.h" @@ -63,7 +64,8 @@ static void e500plat_machine_init(MachineClass *mc) mc->desc =3D "generic paravirt e500 platform"; mc->init =3D e500plat_init; mc->max_cpus =3D 32; - mc->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); mc->default_cpu_type =3D POWERPC_CPU_TYPE_NAME("e500v2_v30"); } =20 diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index dfd352c473..95f7f95dd1 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3786,7 +3786,8 @@ static void spapr_machine_class_init(ObjectClass *o= c, void *data) mc->default_boot_order =3D ""; mc->default_ram_size =3D 512 * M_BYTE; mc->kvm_type =3D spapr_kvm_type; - mc->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); mc->pci_allow_0_address =3D true; mc->get_hotplug_handler =3D spapr_get_hotplug_handler; hc->pre_plug =3D spapr_machine_device_pre_plug; diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c index 0f849a26d2..82380ea9ee 100644 --- a/hw/xen/xen_backend.c +++ b/hw/xen/xen_backend.c @@ -564,7 +564,12 @@ static void xen_set_dynamic_sysbus(void) ObjectClass *oc =3D object_get_class(machine); MachineClass *mc =3D MACHINE_CLASS(oc); =20 - mc->has_dynamic_sysbus =3D true; + /* + * Emulate old mc->has_dynamic_sysbus=3Dtrue assignment + * + *TODO: add only Xen devices to the list + */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); } =20 int xen_be_register(const char *type, struct XenDevOps *ops) --=20 2.14.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eduardo Habkost Subject: [PULL 06/19] machine: Replace has_dynamic_sysbus with list of allowed devices Date: Thu, 18 Jan 2018 00:09:47 -0200 Message-ID: <20180118021000.27203-7-ehabkost@redhat.com> References: <20180118021000.27203-1-ehabkost@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ebzfM-0006PI-TL for xen-devel@lists.xenproject.org; Thu, 18 Jan 2018 02:10:56 +0000 In-Reply-To: <20180118021000.27203-1-ehabkost@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Peter Maydell , qemu-devel@nongnu.org Cc: Stefano Stabellini , "Michael S. Tsirkin" , Alexander Graf , Anthony Perard , qemu-arm@nongnu.org, qemu-ppc@nongnu.org, Marcel Apfelbaum , xen-devel@lists.xenproject.org, David Gibson List-Id: xen-devel@lists.xenproject.org VGhlIGV4aXN0aW5nIGhhc19keW5hbWljX3N5c2J1cyBmbGFnIG1ha2VzIHRoZSBtYWNoaW5lIGFj Y2VwdApldmVyeSB1c2VyLWNyZWF0YWJsZSBzeXNidXMgZGV2aWNlIHR5cGUgb24gdGhlIGNvbW1h bmQtbGluZS4KUmVwbGFjZSBpdCB3aXRoIGEgbGlzdCBvZiBhbGxvd2VkIGRldmljZSB0eXBlcywg c28gbWFjaGluZXMgY2FuCmVhc2lseSBhY2NlcHQgc29tZSBzeXNidXMgZGV2aWNlcyB3aGlsZSBy ZWplY3Rpbmcgb3RoZXJzLgoKVG8ga2VlcCBleGFjdGx5IHRoZSBzYW1lIGJlaGF2aW9yIGFzIGJl Zm9yZSwgdGhlIGV4aXN0aW5nCmhhc19keW5hbWljX3N5c2J1cz10cnVlIGFzc2lnbm1lbnRzIGFy ZSByZXBsYWNlZCB3aXRoIGEKVFlQRV9TWVNfQlVTX0RFVklDRSBlbnRyeSBvbiB0aGUgYWxsb3dl ZCBsaXN0LiAgT3RoZXIgcGF0Y2hlcwp3aWxsIHJlcGxhY2UgdGhlIFRZUEVfU1lTX0JVU19ERVZJ Q0UgZW50cmllcyB3aXRoIG1vcmUgc3BlY2lmaWMKbGlzdHMgb2YgZGV2aWNlcy4KCkNjOiBQZXRl ciBNYXlkZWxsIDxwZXRlci5tYXlkZWxsQGxpbmFyby5vcmc+CkNjOiBNYXJjZWwgQXBmZWxiYXVt IDxtYXJjZWxAcmVkaGF0LmNvbT4KQ2M6ICJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0 LmNvbT4KQ2M6IEFsZXhhbmRlciBHcmFmIDxhZ3JhZkBzdXNlLmRlPgpDYzogRGF2aWQgR2lic29u IDxkYXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNz dGFiZWxsaW5pQGtlcm5lbC5vcmc+CkNjOiBBbnRob255IFBlcmFyZCA8YW50aG9ueS5wZXJhcmRA Y2l0cml4LmNvbT4KQ2M6IHFlbXUtYXJtQG5vbmdudS5vcmcKQ2M6IHFlbXUtcHBjQG5vbmdudS5v cmcKQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpTaWduZWQtb2ZmLWJ5OiBFZHVh cmRvIEhhYmtvc3QgPGVoYWJrb3N0QHJlZGhhdC5jb20+Ck1lc3NhZ2UtSWQ6IDwyMDE3MTEyNTE1 MTYxMC4yMDU0Ny0yLWVoYWJrb3N0QHJlZGhhdC5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEt1cnog PGdyb3VnQGthb2Qub3JnPgpSZXZpZXdlZC1ieTogRGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24u ZHJvcGJlYXIuaWQuYXU+ClJldmlld2VkLWJ5OiBNYXJjLUFuZHLDqSBMdXJlYXUgPG1hcmNhbmRy ZS5sdXJlYXVAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmNlbCBBcGZlbGJhdW0gPG1hcmNl bEByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBFZHVhcmRvIEhhYmtvc3QgPGVoYWJrb3N0QHJl ZGhhdC5jb20+Ci0tLQogaW5jbHVkZS9ody9ib2FyZHMuaCAgfCAgNSArKysrLQogaHcvYXJtL3Zp cnQuYyAgICAgICAgfCAgMyArKy0KIGh3L2NvcmUvbWFjaGluZS5jICAgIHwgNDMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogaHcvaTM4Ni9wY19xMzUuYyAgICAg fCAgMyArKy0KIGh3L3BwYy9lNTAwcGxhdC5jICAgIHwgIDQgKysrLQogaHcvcHBjL3NwYXByLmMg ICAgICAgfCAgMyArKy0KIGh3L3hlbi94ZW5fYmFja2VuZC5jIHwgIDcgKysrKysrLQogNyBmaWxl cyBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9pbmNsdWRlL2h3L2JvYXJkcy5oIGIvaW5jbHVkZS9ody9ib2FyZHMuaAppbmRleCAxNTZiMTZm N2E2Li4wNDFiYzA4OTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2h3L2JvYXJkcy5oCisrKyBiL2lu Y2x1ZGUvaHcvYm9hcmRzLmgKQEAgLTc2LDYgKzc2LDkgQEAgdm9pZCBtYWNoaW5lX3NldF9jcHVf bnVtYV9ub2RlKE1hY2hpbmVTdGF0ZSAqbWFjaGluZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBDcHVJbnN0YW5jZVByb3BlcnRpZXMgKnByb3BzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCk7CiAKK3ZvaWQgbWFjaGluZV9jbGFzc19h bGxvd19keW5hbWljX3N5c2J1c19kZXYoTWFjaGluZUNsYXNzICptYywgY29uc3QgY2hhciAqdHlw ZSk7CisKKwogLyoqCiAgKiBDUFVBcmNoSWQ6CiAgKiBAYXJjaF9pZCAtIGFyY2hpdGVjdHVyZS1k ZXBlbmRlbnQgQ1BVIElEIG9mIHByZXNlbnQgb3IgcG9zc2libGUgQ1BVCkBAIC0xNzksNyArMTgy LDYgQEAgc3RydWN0IE1hY2hpbmVDbGFzcyB7CiAgICAgICAgIG5vX2Zsb3BweToxLAogICAgICAg ICBub19jZHJvbToxLAogICAgICAgICBub19zZGNhcmQ6MSwKLSAgICAgICAgaGFzX2R5bmFtaWNf c3lzYnVzOjEsCiAgICAgICAgIHBjaV9hbGxvd18wX2FkZHJlc3M6MSwKICAgICAgICAgbGVnYWN5 X2Z3X2NmZ19vcmRlcjoxOwogICAgIGludCBpc19kZWZhdWx0OwpAQCAtMTk3LDYgKzE5OSw3IEBA IHN0cnVjdCBNYWNoaW5lQ2xhc3MgewogICAgIGJvb2wgaWdub3JlX21lbW9yeV90cmFuc2FjdGlv bl9mYWlsdXJlczsKICAgICBpbnQgbnVtYV9tZW1fYWxpZ25fc2hpZnQ7CiAgICAgY29uc3QgY2hh ciAqKnZhbGlkX2NwdV90eXBlczsKKyAgICBzdHJMaXN0ICphbGxvd2VkX2R5bmFtaWNfc3lzYnVz X2RldmljZXM7CiAgICAgYm9vbCBhdXRvX2VuYWJsZV9udW1hX3dpdGhfbWVtaHA7CiAgICAgdm9p ZCAoKm51bWFfYXV0b19hc3NpZ25fcmFtKShNYWNoaW5lQ2xhc3MgKm1jLCBOb2RlSW5mbyAqbm9k ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfbm9kZXMsIHJhbV9h ZGRyX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9ody9hcm0vdmlydC5jIGIvaHcvYXJtL3ZpcnQuYwpp bmRleCA1NDNmOWJkNmNjLi43NTQ5ODk1ZmQyIDEwMDY0NAotLS0gYS9ody9hcm0vdmlydC5jCisr KyBiL2h3L2FybS92aXJ0LmMKQEAgLTE1OTEsNyArMTU5MSw4IEBAIHN0YXRpYyB2b2lkIHZpcnRf bWFjaGluZV9jbGFzc19pbml0KE9iamVjdENsYXNzICpvYywgdm9pZCAqZGF0YSkKICAgICAgKiBj b25maWd1cmF0aW9uIG9mIHRoZSBwYXJ0aWN1bGFyIGluc3RhbmNlLgogICAgICAqLwogICAgIG1j LT5tYXhfY3B1cyA9IDI1NTsKLSAgICBtYy0+aGFzX2R5bmFtaWNfc3lzYnVzID0gdHJ1ZTsKKyAg ICAvKlRPRE86IGFsbG93IG9ubHkgc3lzYnVzIGRldmljZXMgdGhhdCByZWFsbHkgd29yayB3aXRo IHRoaXMgbWFjaGluZSAqLworICAgIG1hY2hpbmVfY2xhc3NfYWxsb3dfZHluYW1pY19zeXNidXNf ZGV2KG1jLCBUWVBFX1NZU19CVVNfREVWSUNFKTsKICAgICBtYy0+YmxvY2tfZGVmYXVsdF90eXBl ID0gSUZfVklSVElPOwogICAgIG1jLT5ub19jZHJvbSA9IDE7CiAgICAgbWMtPnBjaV9hbGxvd18w X2FkZHJlc3MgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvaHcvY29yZS9tYWNoaW5lLmMgYi9ody9jb3Jl L21hY2hpbmUuYwppbmRleCBjODU3ZjNmOTM0Li4wMzIwYThlZmExIDEwMDY0NAotLS0gYS9ody9j b3JlL21hY2hpbmUuYworKysgYi9ody9jb3JlL21hY2hpbmUuYwpAQCAtMzM0LDI5ICszMzQsNDQg QEAgc3RhdGljIGJvb2wgbWFjaGluZV9nZXRfZW5mb3JjZV9jb25maWdfc2VjdGlvbihPYmplY3Qg Km9iaiwgRXJyb3IgKiplcnJwKQogICAgIHJldHVybiBtcy0+ZW5mb3JjZV9jb25maWdfc2VjdGlv bjsKIH0KIAotc3RhdGljIHZvaWQgZXJyb3Jfb25fc3lzYnVzX2RldmljZShTeXNCdXNEZXZpY2Ug KnNiZGV2LCB2b2lkICpvcGFxdWUpCit2b2lkIG1hY2hpbmVfY2xhc3NfYWxsb3dfZHluYW1pY19z eXNidXNfZGV2KE1hY2hpbmVDbGFzcyAqbWMsIGNvbnN0IGNoYXIgKnR5cGUpCiB7Ci0gICAgZXJy b3JfcmVwb3J0KCJPcHRpb24gJy1kZXZpY2UgJXMnIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMg bWFjaGluZSIsCi0gICAgICAgICAgICAgICAgIG9iamVjdF9jbGFzc19nZXRfbmFtZShvYmplY3Rf Z2V0X2NsYXNzKE9CSkVDVChzYmRldikpKSk7Ci0gICAgZXhpdCgxKTsKKyAgICBzdHJMaXN0ICpp dGVtID0gZ19uZXcwKHN0ckxpc3QsIDEpOworCisgICAgaXRlbS0+dmFsdWUgPSBnX3N0cmR1cCh0 eXBlKTsKKyAgICBpdGVtLT5uZXh0ID0gbWMtPmFsbG93ZWRfZHluYW1pY19zeXNidXNfZGV2aWNl czsKKyAgICBtYy0+YWxsb3dlZF9keW5hbWljX3N5c2J1c19kZXZpY2VzID0gaXRlbTsKIH0KIAot c3RhdGljIHZvaWQgbWFjaGluZV9pbml0X25vdGlmeShOb3RpZmllciAqbm90aWZpZXIsIHZvaWQg KmRhdGEpCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9zeXNidXNfZGV2aWNlKFN5c0J1c0RldmljZSAq c2JkZXYsIHZvaWQgKm9wYXF1ZSkKIHsKLSAgICBPYmplY3QgKm1hY2hpbmUgPSBxZGV2X2dldF9t YWNoaW5lKCk7Ci0gICAgT2JqZWN0Q2xhc3MgKm9jID0gb2JqZWN0X2dldF9jbGFzcyhtYWNoaW5l KTsKLSAgICBNYWNoaW5lQ2xhc3MgKm1jID0gTUFDSElORV9DTEFTUyhvYyk7CisgICAgTWFjaGlu ZVN0YXRlICptYWNoaW5lID0gb3BhcXVlOworICAgIE1hY2hpbmVDbGFzcyAqbWMgPSBNQUNISU5F X0dFVF9DTEFTUyhtYWNoaW5lKTsKKyAgICBib29sIGFsbG93ZWQgPSBmYWxzZTsKKyAgICBzdHJM aXN0ICp3bDsKIAotICAgIGlmIChtYy0+aGFzX2R5bmFtaWNfc3lzYnVzKSB7Ci0gICAgICAgIC8q IE91ciBtYWNoaW5lIGNhbiBoYW5kbGUgZHluYW1pYyBzeXNidXMgZGV2aWNlcywgd2UncmUgYWxs IGdvb2QgKi8KLSAgICAgICAgcmV0dXJuOworICAgIGZvciAod2wgPSBtYy0+YWxsb3dlZF9keW5h bWljX3N5c2J1c19kZXZpY2VzOworICAgICAgICAgIWFsbG93ZWQgJiYgd2w7CisgICAgICAgICB3 bCA9IHdsLT5uZXh0KSB7CisgICAgICAgIGFsbG93ZWQgfD0gISFvYmplY3RfZHluYW1pY19jYXN0 KE9CSkVDVChzYmRldiksIHdsLT52YWx1ZSk7CiAgICAgfQogCisgICAgaWYgKCFhbGxvd2VkKSB7 CisgICAgICAgIGVycm9yX3JlcG9ydCgiT3B0aW9uICctZGV2aWNlICVzJyBjYW5ub3QgYmUgaGFu ZGxlZCBieSB0aGlzIG1hY2hpbmUiLAorICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2NsYXNz X2dldF9uYW1lKG9iamVjdF9nZXRfY2xhc3MoT0JKRUNUKHNiZGV2KSkpKTsKKyAgICAgICAgZXhp dCgxKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1hY2hpbmVfaW5pdF9ub3RpZnkoTm90aWZp ZXIgKm5vdGlmaWVyLCB2b2lkICpkYXRhKQoreworICAgIE1hY2hpbmVTdGF0ZSAqbWFjaGluZSA9 IE1BQ0hJTkUocWRldl9nZXRfbWFjaGluZSgpKTsKKwogICAgIC8qCi0gICAgICogTG9vcCB0aHJv dWdoIGFsbCBkeW5hbWljYWxseSBjcmVhdGVkIGRldmljZXMgYW5kIGNoZWNrIHdoZXRoZXIgdGhl cmUKLSAgICAgKiBhcmUgc3lzYnVzIGRldmljZXMgYW1vbmcgdGhlbS4gSWYgdGhlcmUgYXJlLCBl cnJvciBvdXQuCisgICAgICogTG9vcCB0aHJvdWdoIGFsbCBkeW5hbWljYWxseSBjcmVhdGVkIHN5 c2J1cyBkZXZpY2VzIGFuZCBjaGVjayBpZiB0aGV5IGFyZQorICAgICAqIGFsbCBhbGxvd2VkLiAg SWYgYSBkZXZpY2UgaXMgbm90IGFsbG93ZWQsIGVycm9yIG91dC4KICAgICAgKi8KLSAgICBmb3Jl YWNoX2R5bmFtaWNfc3lzYnVzX2RldmljZShlcnJvcl9vbl9zeXNidXNfZGV2aWNlLCBOVUxMKTsK KyAgICBmb3JlYWNoX2R5bmFtaWNfc3lzYnVzX2RldmljZSh2YWxpZGF0ZV9zeXNidXNfZGV2aWNl LCBtYWNoaW5lKTsKIH0KIAogSG90cGx1Z2dhYmxlQ1BVTGlzdCAqbWFjaGluZV9xdWVyeV9ob3Rw bHVnZ2FibGVfY3B1cyhNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCmRpZmYgLS1naXQgYS9ody9pMzg2 L3BjX3EzNS5jIGIvaHcvaTM4Ni9wY19xMzUuYwppbmRleCBkNjA2MDA0M2FjLi5kMGIwZTViNDIy IDEwMDY0NAotLS0gYS9ody9pMzg2L3BjX3EzNS5jCisrKyBiL2h3L2kzODYvcGNfcTM1LmMKQEAg LTI5OSw3ICsyOTksOCBAQCBzdGF0aWMgdm9pZCBwY19xMzVfbWFjaGluZV9vcHRpb25zKE1hY2hp bmVDbGFzcyAqbSkKICAgICBtLT5kZWZhdWx0X21hY2hpbmVfb3B0cyA9ICJmaXJtd2FyZT1iaW9z LTI1NmsuYmluIjsKICAgICBtLT5kZWZhdWx0X2Rpc3BsYXkgPSAic3RkIjsKICAgICBtLT5ub19m bG9wcHkgPSAxOwotICAgIG0tPmhhc19keW5hbWljX3N5c2J1cyA9IHRydWU7CisgICAgLypUT0RP OiBhbGxvdyBvbmx5IHN5c2J1cyBkZXZpY2VzIHRoYXQgcmVhbGx5IHdvcmsgd2l0aCB0aGlzIG1h Y2hpbmUgKi8KKyAgICBtYWNoaW5lX2NsYXNzX2FsbG93X2R5bmFtaWNfc3lzYnVzX2RldihtLCBU WVBFX1NZU19CVVNfREVWSUNFKTsKICAgICBtLT5tYXhfY3B1cyA9IDI4ODsKIH0KIApkaWZmIC0t Z2l0IGEvaHcvcHBjL2U1MDBwbGF0LmMgYi9ody9wcGMvZTUwMHBsYXQuYwppbmRleCBlNTllODBm YjllLi40MzgxMThjMjliIDEwMDY0NAotLS0gYS9ody9wcGMvZTUwMHBsYXQuYworKysgYi9ody9w cGMvZTUwMHBsYXQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImh3L2JvYXJkcy5oIgog I2luY2x1ZGUgInN5c2VtdS9kZXZpY2VfdHJlZS5oIgogI2luY2x1ZGUgInN5c2VtdS9rdm0uaCIK KyNpbmNsdWRlICJody9zeXNidXMuaCIKICNpbmNsdWRlICJody9wY2kvcGNpLmgiCiAjaW5jbHVk ZSAiaHcvcHBjL29wZW5waWMuaCIKICNpbmNsdWRlICJrdm1fcHBjLmgiCkBAIC02Myw3ICs2NCw4 IEBAIHN0YXRpYyB2b2lkIGU1MDBwbGF0X21hY2hpbmVfaW5pdChNYWNoaW5lQ2xhc3MgKm1jKQog ICAgIG1jLT5kZXNjID0gImdlbmVyaWMgcGFyYXZpcnQgZTUwMCBwbGF0Zm9ybSI7CiAgICAgbWMt PmluaXQgPSBlNTAwcGxhdF9pbml0OwogICAgIG1jLT5tYXhfY3B1cyA9IDMyOwotICAgIG1jLT5o YXNfZHluYW1pY19zeXNidXMgPSB0cnVlOworICAgIC8qVE9ETzogYWxsb3cgb25seSBzeXNidXMg ZGV2aWNlcyB0aGF0IHJlYWxseSB3b3JrIHdpdGggdGhpcyBtYWNoaW5lICovCisgICAgbWFjaGlu ZV9jbGFzc19hbGxvd19keW5hbWljX3N5c2J1c19kZXYobWMsIFRZUEVfU1lTX0JVU19ERVZJQ0Up OwogICAgIG1jLT5kZWZhdWx0X2NwdV90eXBlID0gUE9XRVJQQ19DUFVfVFlQRV9OQU1FKCJlNTAw djJfdjMwIik7CiB9CiAKZGlmZiAtLWdpdCBhL2h3L3BwYy9zcGFwci5jIGIvaHcvcHBjL3NwYXBy LmMKaW5kZXggZGZkMzUyYzQ3My4uOTVmN2Y5NWRkMSAxMDA2NDQKLS0tIGEvaHcvcHBjL3NwYXBy LmMKKysrIGIvaHcvcHBjL3NwYXByLmMKQEAgLTM3ODYsNyArMzc4Niw4IEBAIHN0YXRpYyB2b2lk IHNwYXByX21hY2hpbmVfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqb2MsIHZvaWQgKmRhdGEpCiAg ICAgbWMtPmRlZmF1bHRfYm9vdF9vcmRlciA9ICIiOwogICAgIG1jLT5kZWZhdWx0X3JhbV9zaXpl ID0gNTEyICogTV9CWVRFOwogICAgIG1jLT5rdm1fdHlwZSA9IHNwYXByX2t2bV90eXBlOwotICAg IG1jLT5oYXNfZHluYW1pY19zeXNidXMgPSB0cnVlOworICAgIC8qVE9ETzogYWxsb3cgb25seSBz eXNidXMgZGV2aWNlcyB0aGF0IHJlYWxseSB3b3JrIHdpdGggdGhpcyBtYWNoaW5lICovCisgICAg bWFjaGluZV9jbGFzc19hbGxvd19keW5hbWljX3N5c2J1c19kZXYobWMsIFRZUEVfU1lTX0JVU19E RVZJQ0UpOwogICAgIG1jLT5wY2lfYWxsb3dfMF9hZGRyZXNzID0gdHJ1ZTsKICAgICBtYy0+Z2V0 X2hvdHBsdWdfaGFuZGxlciA9IHNwYXByX2dldF9ob3RwbHVnX2hhbmRsZXI7CiAgICAgaGMtPnBy ZV9wbHVnID0gc3BhcHJfbWFjaGluZV9kZXZpY2VfcHJlX3BsdWc7CmRpZmYgLS1naXQgYS9ody94 ZW4veGVuX2JhY2tlbmQuYyBiL2h3L3hlbi94ZW5fYmFja2VuZC5jCmluZGV4IDBmODQ5YTI2ZDIu LjgyMzgwZWE5ZWUgMTAwNjQ0Ci0tLSBhL2h3L3hlbi94ZW5fYmFja2VuZC5jCisrKyBiL2h3L3hl bi94ZW5fYmFja2VuZC5jCkBAIC01NjQsNyArNTY0LDEyIEBAIHN0YXRpYyB2b2lkIHhlbl9zZXRf ZHluYW1pY19zeXNidXModm9pZCkKICAgICBPYmplY3RDbGFzcyAqb2MgPSBvYmplY3RfZ2V0X2Ns YXNzKG1hY2hpbmUpOwogICAgIE1hY2hpbmVDbGFzcyAqbWMgPSBNQUNISU5FX0NMQVNTKG9jKTsK IAotICAgIG1jLT5oYXNfZHluYW1pY19zeXNidXMgPSB0cnVlOworICAgIC8qCisgICAgICogRW11 bGF0ZSBvbGQgbWMtPmhhc19keW5hbWljX3N5c2J1cz10cnVlIGFzc2lnbm1lbnQKKyAgICAgKgor ICAgICAqVE9ETzogYWRkIG9ubHkgWGVuIGRldmljZXMgdG8gdGhlIGxpc3QKKyAgICAgKi8KKyAg ICBtYWNoaW5lX2NsYXNzX2FsbG93X2R5bmFtaWNfc3lzYnVzX2RldihtYywgVFlQRV9TWVNfQlVT X0RFVklDRSk7CiB9CiAKIGludCB4ZW5fYmVfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3Ry dWN0IFhlbkRldk9wcyAqb3BzKQotLSAKMi4xNC4zCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL3hlbi1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46098) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ebzfL-0000oJ-5F for qemu-devel@nongnu.org; Wed, 17 Jan 2018 21:11:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ebzfJ-0004mC-HU for qemu-devel@nongnu.org; Wed, 17 Jan 2018 21:10:55 -0500 From: Eduardo Habkost Date: Thu, 18 Jan 2018 00:09:47 -0200 Message-Id: <20180118021000.27203-7-ehabkost@redhat.com> In-Reply-To: <20180118021000.27203-1-ehabkost@redhat.com> References: <20180118021000.27203-1-ehabkost@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 06/19] machine: Replace has_dynamic_sysbus with list of allowed devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , qemu-devel@nongnu.org Cc: Marcel Apfelbaum , "Michael S. Tsirkin" , Alexander Graf , David Gibson , Stefano Stabellini , Anthony Perard , qemu-arm@nongnu.org, qemu-ppc@nongnu.org, xen-devel@lists.xenproject.org The existing has_dynamic_sysbus flag makes the machine accept every user-creatable sysbus device type on the command-line. Replace it with a list of allowed device types, so machines can easily accept some sysbus devices while rejecting others. To keep exactly the same behavior as before, the existing has_dynamic_sysbus=3Dtrue assignments are replaced with a TYPE_SYS_BUS_DEVICE entry on the allowed list. Other patches will replace the TYPE_SYS_BUS_DEVICE entries with more specific lists of devices. Cc: Peter Maydell Cc: Marcel Apfelbaum Cc: "Michael S. Tsirkin" Cc: Alexander Graf Cc: David Gibson Cc: Stefano Stabellini Cc: Anthony Perard Cc: qemu-arm@nongnu.org Cc: qemu-ppc@nongnu.org Cc: xen-devel@lists.xenproject.org Signed-off-by: Eduardo Habkost Message-Id: <20171125151610.20547-2-ehabkost@redhat.com> Reviewed-by: Greg Kurz Reviewed-by: David Gibson Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Marcel Apfelbaum Signed-off-by: Eduardo Habkost --- include/hw/boards.h | 5 ++++- hw/arm/virt.c | 3 ++- hw/core/machine.c | 43 +++++++++++++++++++++++++++++-------------- hw/i386/pc_q35.c | 3 ++- hw/ppc/e500plat.c | 4 +++- hw/ppc/spapr.c | 3 ++- hw/xen/xen_backend.c | 7 ++++++- 7 files changed, 48 insertions(+), 20 deletions(-) diff --git a/include/hw/boards.h b/include/hw/boards.h index 156b16f7a6..041bc08971 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -76,6 +76,9 @@ void machine_set_cpu_numa_node(MachineState *machine, const CpuInstanceProperties *props, Error **errp); =20 +void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char= *type); + + /** * CPUArchId: * @arch_id - architecture-dependent CPU ID of present or possible CPU @@ -179,7 +182,6 @@ struct MachineClass { no_floppy:1, no_cdrom:1, no_sdcard:1, - has_dynamic_sysbus:1, pci_allow_0_address:1, legacy_fw_cfg_order:1; int is_default; @@ -197,6 +199,7 @@ struct MachineClass { bool ignore_memory_transaction_failures; int numa_mem_align_shift; const char **valid_cpu_types; + strList *allowed_dynamic_sysbus_devices; bool auto_enable_numa_with_memhp; void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes, int nb_nodes, ram_addr_t size); diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 543f9bd6cc..7549895fd2 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1591,7 +1591,8 @@ static void virt_machine_class_init(ObjectClass *oc= , void *data) * configuration of the particular instance. */ mc->max_cpus =3D 255; - mc->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); mc->block_default_type =3D IF_VIRTIO; mc->no_cdrom =3D 1; mc->pci_allow_0_address =3D true; diff --git a/hw/core/machine.c b/hw/core/machine.c index c857f3f934..0320a8efa1 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -334,29 +334,44 @@ static bool machine_get_enforce_config_section(Obje= ct *obj, Error **errp) return ms->enforce_config_section; } =20 -static void error_on_sysbus_device(SysBusDevice *sbdev, void *opaque) +void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char= *type) { - error_report("Option '-device %s' cannot be handled by this machine"= , - object_class_get_name(object_get_class(OBJECT(sbdev))))= ; - exit(1); + strList *item =3D g_new0(strList, 1); + + item->value =3D g_strdup(type); + item->next =3D mc->allowed_dynamic_sysbus_devices; + mc->allowed_dynamic_sysbus_devices =3D item; } =20 -static void machine_init_notify(Notifier *notifier, void *data) +static void validate_sysbus_device(SysBusDevice *sbdev, void *opaque) { - Object *machine =3D qdev_get_machine(); - ObjectClass *oc =3D object_get_class(machine); - MachineClass *mc =3D MACHINE_CLASS(oc); + MachineState *machine =3D opaque; + MachineClass *mc =3D MACHINE_GET_CLASS(machine); + bool allowed =3D false; + strList *wl; =20 - if (mc->has_dynamic_sysbus) { - /* Our machine can handle dynamic sysbus devices, we're all good= */ - return; + for (wl =3D mc->allowed_dynamic_sysbus_devices; + !allowed && wl; + wl =3D wl->next) { + allowed |=3D !!object_dynamic_cast(OBJECT(sbdev), wl->value); } =20 + if (!allowed) { + error_report("Option '-device %s' cannot be handled by this mach= ine", + object_class_get_name(object_get_class(OBJECT(sbdev= )))); + exit(1); + } +} + +static void machine_init_notify(Notifier *notifier, void *data) +{ + MachineState *machine =3D MACHINE(qdev_get_machine()); + /* - * Loop through all dynamically created devices and check whether th= ere - * are sysbus devices among them. If there are, error out. + * Loop through all dynamically created sysbus devices and check if = they are + * all allowed. If a device is not allowed, error out. */ - foreach_dynamic_sysbus_device(error_on_sysbus_device, NULL); + foreach_dynamic_sysbus_device(validate_sysbus_device, machine); } =20 HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machi= ne) diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index d6060043ac..d0b0e5b422 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -299,7 +299,8 @@ static void pc_q35_machine_options(MachineClass *m) m->default_machine_opts =3D "firmware=3Dbios-256k.bin"; m->default_display =3D "std"; m->no_floppy =3D 1; - m->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(m, TYPE_SYS_BUS_DEVICE); m->max_cpus =3D 288; } =20 diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index e59e80fb9e..438118c29b 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -15,6 +15,7 @@ #include "hw/boards.h" #include "sysemu/device_tree.h" #include "sysemu/kvm.h" +#include "hw/sysbus.h" #include "hw/pci/pci.h" #include "hw/ppc/openpic.h" #include "kvm_ppc.h" @@ -63,7 +64,8 @@ static void e500plat_machine_init(MachineClass *mc) mc->desc =3D "generic paravirt e500 platform"; mc->init =3D e500plat_init; mc->max_cpus =3D 32; - mc->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); mc->default_cpu_type =3D POWERPC_CPU_TYPE_NAME("e500v2_v30"); } =20 diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index dfd352c473..95f7f95dd1 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3786,7 +3786,8 @@ static void spapr_machine_class_init(ObjectClass *o= c, void *data) mc->default_boot_order =3D ""; mc->default_ram_size =3D 512 * M_BYTE; mc->kvm_type =3D spapr_kvm_type; - mc->has_dynamic_sysbus =3D true; + /*TODO: allow only sysbus devices that really work with this machine= */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); mc->pci_allow_0_address =3D true; mc->get_hotplug_handler =3D spapr_get_hotplug_handler; hc->pre_plug =3D spapr_machine_device_pre_plug; diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c index 0f849a26d2..82380ea9ee 100644 --- a/hw/xen/xen_backend.c +++ b/hw/xen/xen_backend.c @@ -564,7 +564,12 @@ static void xen_set_dynamic_sysbus(void) ObjectClass *oc =3D object_get_class(machine); MachineClass *mc =3D MACHINE_CLASS(oc); =20 - mc->has_dynamic_sysbus =3D true; + /* + * Emulate old mc->has_dynamic_sysbus=3Dtrue assignment + * + *TODO: add only Xen devices to the list + */ + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_SYS_BUS_DEVICE); } =20 int xen_be_register(const char *type, struct XenDevOps *ops) --=20 2.14.3