From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58203) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eJjAF-00016q-Ph for qemu-devel@nongnu.org; Tue, 28 Nov 2017 11:55:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eJjAE-0004aT-6Q for qemu-devel@nongnu.org; Tue, 28 Nov 2017 11:55:19 -0500 MIME-Version: 1.0 In-Reply-To: <20171125151610.20547-2-ehabkost@redhat.com> References: <20171125151610.20547-1-ehabkost@redhat.com> <20171125151610.20547-2-ehabkost@redhat.com> From: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= Date: Tue, 28 Nov 2017 17:55:15 +0100 Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 1/6] machine: Replace has_dynamic_sysbus with list of allowed devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost Cc: QEMU , jgross@suse.com, Peter Maydell , Thomas Huth , Stefano Stabellini , "Michael S. Tsirkin" , Alexander Graf , Anthony Perard , "open list:ARM" , "open list:sPAPR pseries" , Marcel Apfelbaum , xen-devel@lists.xenproject.org, Laszlo Ersek , David Gibson Hi On Sat, Nov 25, 2017 at 4:16 PM, Eduardo Habkost wrot= e: > 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 Reviewed-by: Marc-Andr=C3=A9 Lureau > --- > Changes v1 -> v2: > * Replace "dynamic sysbus whitelist" with "allowed sysbus devices" > * Simply add TYPE_SYS_BUS_DEVICE to the list on existing > has_dynamic_sysbus=3Dtrue machines, and make machine-types more > strict in separate patches > --- > 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); > > +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 9e18b410d7..fa6dc15fcd 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= */ cosmetic: why do you not leave a space between * and TODO ? (you did that repeatedly) > + 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 36c2fb069c..ab2ec292f3 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -335,29 +335,44 @@ static bool machine_get_enforce_config_section(Obje= ct *obj, Error **errp) > return ms->enforce_config_section; > } > > -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; > } > > -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; > > - 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); > } > > + 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); > } > > 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; > } > > 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"); > } > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index d682f013d4..82040cc5d1 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -3603,7 +3603,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); > > - 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); > } > > int xen_be_register(const char *type, struct XenDevOps *ops) > -- > 2.13.6 > > --=20 Marc-Andr=C3=A9 Lureau From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= Subject: Re: [Qemu-devel] [PATCH v2 1/6] machine: Replace has_dynamic_sysbus with list of allowed devices Date: Tue, 28 Nov 2017 17:55:15 +0100 Message-ID: References: <20171125151610.20547-1-ehabkost@redhat.com> <20171125151610.20547-2-ehabkost@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eJjAE-0002CK-NB for xen-devel@lists.xenproject.org; Tue, 28 Nov 2017 16:55:18 +0000 Received: by mail-wm0-f68.google.com with SMTP id b76so831199wmg.1 for ; Tue, 28 Nov 2017 08:55:16 -0800 (PST) In-Reply-To: <20171125151610.20547-2-ehabkost@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Eduardo Habkost Cc: jgross@suse.com, Peter Maydell , Thomas Huth , Stefano Stabellini , "Michael S. Tsirkin" , QEMU , Alexander Graf , Marcel Apfelbaum , "open list:ARM" , "open list:sPAPR pseries" , Anthony Perard , xen-devel@lists.xenproject.org, Laszlo Ersek , David Gibson List-Id: xen-devel@lists.xenproject.org SGkKCk9uIFNhdCwgTm92IDI1LCAyMDE3IGF0IDQ6MTYgUE0sIEVkdWFyZG8gSGFia29zdCA8ZWhh Ymtvc3RAcmVkaGF0LmNvbT4gd3JvdGU6Cj4gVGhlIGV4aXN0aW5nIGhhc19keW5hbWljX3N5c2J1 cyBmbGFnIG1ha2VzIHRoZSBtYWNoaW5lIGFjY2VwdAo+IGV2ZXJ5IHVzZXItY3JlYXRhYmxlIHN5 c2J1cyBkZXZpY2UgdHlwZSBvbiB0aGUgY29tbWFuZC1saW5lLgo+IFJlcGxhY2UgaXQgd2l0aCBh IGxpc3Qgb2YgYWxsb3dlZCBkZXZpY2UgdHlwZXMsIHNvIG1hY2hpbmVzIGNhbgo+IGVhc2lseSBh Y2NlcHQgc29tZSBzeXNidXMgZGV2aWNlcyB3aGlsZSByZWplY3Rpbmcgb3RoZXJzLgo+Cj4gVG8g a2VlcCBleGFjdGx5IHRoZSBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZSwgdGhlIGV4aXN0aW5nCj4g aGFzX2R5bmFtaWNfc3lzYnVzPXRydWUgYXNzaWdubWVudHMgYXJlIHJlcGxhY2VkIHdpdGggYQo+ IFRZUEVfU1lTX0JVU19ERVZJQ0UgZW50cnkgb24gdGhlIGFsbG93ZWQgbGlzdC4gIE90aGVyIHBh dGNoZXMKPiB3aWxsIHJlcGxhY2UgdGhlIFRZUEVfU1lTX0JVU19ERVZJQ0UgZW50cmllcyB3aXRo IG1vcmUgc3BlY2lmaWMKPiBsaXN0cyBvZiBkZXZpY2VzLgo+Cj4gQ2M6IFBldGVyIE1heWRlbGwg PHBldGVyLm1heWRlbGxAbGluYXJvLm9yZz4KPiBDYzogTWFyY2VsIEFwZmVsYmF1bSA8bWFyY2Vs QHJlZGhhdC5jb20+Cj4gQ2M6ICJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4K PiBDYzogQWxleGFuZGVyIEdyYWYgPGFncmFmQHN1c2UuZGU+Cj4gQ2M6IERhdmlkIEdpYnNvbiA8 ZGF2aWRAZ2lic29uLmRyb3BiZWFyLmlkLmF1Pgo+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNz dGFiZWxsaW5pQGtlcm5lbC5vcmc+Cj4gQ2M6IEFudGhvbnkgUGVyYXJkIDxhbnRob255LnBlcmFy ZEBjaXRyaXguY29tPgo+IENjOiBxZW11LWFybUBub25nbnUub3JnCj4gQ2M6IHFlbXUtcHBjQG5v bmdudS5vcmcKPiBDYzogeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gU2lnbmVkLW9m Zi1ieTogRWR1YXJkbyBIYWJrb3N0IDxlaGFia29zdEByZWRoYXQuY29tPgoKUmV2aWV3ZWQtYnk6 IE1hcmMtQW5kcsOpIEx1cmVhdSA8bWFyY2FuZHJlLmx1cmVhdUByZWRoYXQuY29tPgoKPiAtLS0K PiBDaGFuZ2VzIHYxIC0+IHYyOgo+ICogUmVwbGFjZSAiZHluYW1pYyBzeXNidXMgd2hpdGVsaXN0 IiB3aXRoICJhbGxvd2VkIHN5c2J1cyBkZXZpY2VzIgo+ICogU2ltcGx5IGFkZCBUWVBFX1NZU19C VVNfREVWSUNFIHRvIHRoZSBsaXN0IG9uIGV4aXN0aW5nCj4gICBoYXNfZHluYW1pY19zeXNidXM9 dHJ1ZSBtYWNoaW5lcywgYW5kIG1ha2UgbWFjaGluZS10eXBlcyBtb3JlCj4gICBzdHJpY3QgaW4g c2VwYXJhdGUgcGF0Y2hlcwo+IC0tLQo+ICBpbmNsdWRlL2h3L2JvYXJkcy5oICB8ICA1ICsrKyst Cj4gIGh3L2FybS92aXJ0LmMgICAgICAgIHwgIDMgKystCj4gIGh3L2NvcmUvbWFjaGluZS5jICAg IHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+ICBody9p Mzg2L3BjX3EzNS5jICAgICB8ICAzICsrLQo+ICBody9wcGMvZTUwMHBsYXQuYyAgICB8ICA0ICsr Ky0KPiAgaHcvcHBjL3NwYXByLmMgICAgICAgfCAgMyArKy0KPiAgaHcveGVuL3hlbl9iYWNrZW5k LmMgfCAgNyArKysrKystCj4gIDcgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgMjAg ZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ody9ib2FyZHMuaCBiL2luY2x1 ZGUvaHcvYm9hcmRzLmgKPiBpbmRleCAxNTZiMTZmN2E2Li4wNDFiYzA4OTcxIDEwMDY0NAo+IC0t LSBhL2luY2x1ZGUvaHcvYm9hcmRzLmgKPiArKysgYi9pbmNsdWRlL2h3L2JvYXJkcy5oCj4gQEAg LTc2LDYgKzc2LDkgQEAgdm9pZCBtYWNoaW5lX3NldF9jcHVfbnVtYV9ub2RlKE1hY2hpbmVTdGF0 ZSAqbWFjaGluZSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENwdUlu c3RhbmNlUHJvcGVydGllcyAqcHJvcHMsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFcnJvciAqKmVycnApOwo+Cj4gK3ZvaWQgbWFjaGluZV9jbGFzc19hbGxvd19keW5hbWljX3N5 c2J1c19kZXYoTWFjaGluZUNsYXNzICptYywgY29uc3QgY2hhciAqdHlwZSk7Cj4gKwo+ICsKPiAg LyoqCj4gICAqIENQVUFyY2hJZDoKPiAgICogQGFyY2hfaWQgLSBhcmNoaXRlY3R1cmUtZGVwZW5k ZW50IENQVSBJRCBvZiBwcmVzZW50IG9yIHBvc3NpYmxlIENQVQo+IEBAIC0xNzksNyArMTgyLDYg QEAgc3RydWN0IE1hY2hpbmVDbGFzcyB7Cj4gICAgICAgICAgbm9fZmxvcHB5OjEsCj4gICAgICAg ICAgbm9fY2Ryb206MSwKPiAgICAgICAgICBub19zZGNhcmQ6MSwKPiAtICAgICAgICBoYXNfZHlu YW1pY19zeXNidXM6MSwKPiAgICAgICAgICBwY2lfYWxsb3dfMF9hZGRyZXNzOjEsCj4gICAgICAg ICAgbGVnYWN5X2Z3X2NmZ19vcmRlcjoxOwo+ICAgICAgaW50IGlzX2RlZmF1bHQ7Cj4gQEAgLTE5 Nyw2ICsxOTksNyBAQCBzdHJ1Y3QgTWFjaGluZUNsYXNzIHsKPiAgICAgIGJvb2wgaWdub3JlX21l bW9yeV90cmFuc2FjdGlvbl9mYWlsdXJlczsKPiAgICAgIGludCBudW1hX21lbV9hbGlnbl9zaGlm dDsKPiAgICAgIGNvbnN0IGNoYXIgKip2YWxpZF9jcHVfdHlwZXM7Cj4gKyAgICBzdHJMaXN0ICph bGxvd2VkX2R5bmFtaWNfc3lzYnVzX2RldmljZXM7Cj4gICAgICBib29sIGF1dG9fZW5hYmxlX251 bWFfd2l0aF9tZW1ocDsKPiAgICAgIHZvaWQgKCpudW1hX2F1dG9fYXNzaWduX3JhbSkoTWFjaGlu ZUNsYXNzICptYywgTm9kZUluZm8gKm5vZGVzLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbmJfbm9kZXMsIHJhbV9hZGRyX3Qgc2l6ZSk7Cj4gZGlmZiAtLWdpdCBhL2h3 L2FybS92aXJ0LmMgYi9ody9hcm0vdmlydC5jCj4gaW5kZXggOWUxOGI0MTBkNy4uZmE2ZGMxNWZj ZCAxMDA2NDQKPiAtLS0gYS9ody9hcm0vdmlydC5jCj4gKysrIGIvaHcvYXJtL3ZpcnQuYwo+IEBA IC0xNTkxLDcgKzE1OTEsOCBAQCBzdGF0aWMgdm9pZCB2aXJ0X21hY2hpbmVfY2xhc3NfaW5pdChP YmplY3RDbGFzcyAqb2MsIHZvaWQgKmRhdGEpCj4gICAgICAgKiBjb25maWd1cmF0aW9uIG9mIHRo ZSBwYXJ0aWN1bGFyIGluc3RhbmNlLgo+ICAgICAgICovCj4gICAgICBtYy0+bWF4X2NwdXMgPSAy NTU7Cj4gLSAgICBtYy0+aGFzX2R5bmFtaWNfc3lzYnVzID0gdHJ1ZTsKPiArICAgIC8qVE9ETzog YWxsb3cgb25seSBzeXNidXMgZGV2aWNlcyB0aGF0IHJlYWxseSB3b3JrIHdpdGggdGhpcyBtYWNo aW5lICovCgpjb3NtZXRpYzogd2h5IGRvIHlvdSBub3QgbGVhdmUgYSBzcGFjZSBiZXR3ZWVuICog YW5kIFRPRE8gPyAoeW91IGRpZAp0aGF0IHJlcGVhdGVkbHkpCgo+ICsgICAgbWFjaGluZV9jbGFz c19hbGxvd19keW5hbWljX3N5c2J1c19kZXYobWMsIFRZUEVfU1lTX0JVU19ERVZJQ0UpOwo+ICAg ICAgbWMtPmJsb2NrX2RlZmF1bHRfdHlwZSA9IElGX1ZJUlRJTzsKPiAgICAgIG1jLT5ub19jZHJv bSA9IDE7Cj4gICAgICBtYy0+cGNpX2FsbG93XzBfYWRkcmVzcyA9IHRydWU7Cj4gZGlmZiAtLWdp dCBhL2h3L2NvcmUvbWFjaGluZS5jIGIvaHcvY29yZS9tYWNoaW5lLmMKPiBpbmRleCAzNmMyZmIw NjljLi5hYjJlYzI5MmYzIDEwMDY0NAo+IC0tLSBhL2h3L2NvcmUvbWFjaGluZS5jCj4gKysrIGIv aHcvY29yZS9tYWNoaW5lLmMKPiBAQCAtMzM1LDI5ICszMzUsNDQgQEAgc3RhdGljIGJvb2wgbWFj aGluZV9nZXRfZW5mb3JjZV9jb25maWdfc2VjdGlvbihPYmplY3QgKm9iaiwgRXJyb3IgKiplcnJw KQo+ICAgICAgcmV0dXJuIG1zLT5lbmZvcmNlX2NvbmZpZ19zZWN0aW9uOwo+ICB9Cj4KPiAtc3Rh dGljIHZvaWQgZXJyb3Jfb25fc3lzYnVzX2RldmljZShTeXNCdXNEZXZpY2UgKnNiZGV2LCB2b2lk ICpvcGFxdWUpCj4gK3ZvaWQgbWFjaGluZV9jbGFzc19hbGxvd19keW5hbWljX3N5c2J1c19kZXYo TWFjaGluZUNsYXNzICptYywgY29uc3QgY2hhciAqdHlwZSkKPiAgewo+IC0gICAgZXJyb3JfcmVw b3J0KCJPcHRpb24gJy1kZXZpY2UgJXMnIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgbWFjaGlu ZSIsCj4gLSAgICAgICAgICAgICAgICAgb2JqZWN0X2NsYXNzX2dldF9uYW1lKG9iamVjdF9nZXRf Y2xhc3MoT0JKRUNUKHNiZGV2KSkpKTsKPiAtICAgIGV4aXQoMSk7Cj4gKyAgICBzdHJMaXN0ICpp dGVtID0gZ19uZXcwKHN0ckxpc3QsIDEpOwo+ICsKPiArICAgIGl0ZW0tPnZhbHVlID0gZ19zdHJk dXAodHlwZSk7Cj4gKyAgICBpdGVtLT5uZXh0ID0gbWMtPmFsbG93ZWRfZHluYW1pY19zeXNidXNf ZGV2aWNlczsKPiArICAgIG1jLT5hbGxvd2VkX2R5bmFtaWNfc3lzYnVzX2RldmljZXMgPSBpdGVt Owo+ICB9Cj4KPiAtc3RhdGljIHZvaWQgbWFjaGluZV9pbml0X25vdGlmeShOb3RpZmllciAqbm90 aWZpZXIsIHZvaWQgKmRhdGEpCj4gK3N0YXRpYyB2b2lkIHZhbGlkYXRlX3N5c2J1c19kZXZpY2Uo U3lzQnVzRGV2aWNlICpzYmRldiwgdm9pZCAqb3BhcXVlKQo+ICB7Cj4gLSAgICBPYmplY3QgKm1h Y2hpbmUgPSBxZGV2X2dldF9tYWNoaW5lKCk7Cj4gLSAgICBPYmplY3RDbGFzcyAqb2MgPSBvYmpl Y3RfZ2V0X2NsYXNzKG1hY2hpbmUpOwo+IC0gICAgTWFjaGluZUNsYXNzICptYyA9IE1BQ0hJTkVf Q0xBU1Mob2MpOwo+ICsgICAgTWFjaGluZVN0YXRlICptYWNoaW5lID0gb3BhcXVlOwo+ICsgICAg TWFjaGluZUNsYXNzICptYyA9IE1BQ0hJTkVfR0VUX0NMQVNTKG1hY2hpbmUpOwo+ICsgICAgYm9v bCBhbGxvd2VkID0gZmFsc2U7Cj4gKyAgICBzdHJMaXN0ICp3bDsKPgo+IC0gICAgaWYgKG1jLT5o YXNfZHluYW1pY19zeXNidXMpIHsKPiAtICAgICAgICAvKiBPdXIgbWFjaGluZSBjYW4gaGFuZGxl IGR5bmFtaWMgc3lzYnVzIGRldmljZXMsIHdlJ3JlIGFsbCBnb29kICovCj4gLSAgICAgICAgcmV0 dXJuOwo+ICsgICAgZm9yICh3bCA9IG1jLT5hbGxvd2VkX2R5bmFtaWNfc3lzYnVzX2RldmljZXM7 Cj4gKyAgICAgICAgICFhbGxvd2VkICYmIHdsOwo+ICsgICAgICAgICB3bCA9IHdsLT5uZXh0KSB7 Cj4gKyAgICAgICAgYWxsb3dlZCB8PSAhIW9iamVjdF9keW5hbWljX2Nhc3QoT0JKRUNUKHNiZGV2 KSwgd2wtPnZhbHVlKTsKPiAgICAgIH0KPgo+ICsgICAgaWYgKCFhbGxvd2VkKSB7Cj4gKyAgICAg ICAgZXJyb3JfcmVwb3J0KCJPcHRpb24gJy1kZXZpY2UgJXMnIGNhbm5vdCBiZSBoYW5kbGVkIGJ5 IHRoaXMgbWFjaGluZSIsCj4gKyAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9jbGFzc19nZXRf bmFtZShvYmplY3RfZ2V0X2NsYXNzKE9CSkVDVChzYmRldikpKSk7Cj4gKyAgICAgICAgZXhpdCgx KTsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFjaGluZV9pbml0X25vdGlmeShO b3RpZmllciAqbm90aWZpZXIsIHZvaWQgKmRhdGEpCj4gK3sKPiArICAgIE1hY2hpbmVTdGF0ZSAq bWFjaGluZSA9IE1BQ0hJTkUocWRldl9nZXRfbWFjaGluZSgpKTsKPiArCj4gICAgICAvKgo+IC0g ICAgICogTG9vcCB0aHJvdWdoIGFsbCBkeW5hbWljYWxseSBjcmVhdGVkIGRldmljZXMgYW5kIGNo ZWNrIHdoZXRoZXIgdGhlcmUKPiAtICAgICAqIGFyZSBzeXNidXMgZGV2aWNlcyBhbW9uZyB0aGVt LiBJZiB0aGVyZSBhcmUsIGVycm9yIG91dC4KPiArICAgICAqIExvb3AgdGhyb3VnaCBhbGwgZHlu YW1pY2FsbHkgY3JlYXRlZCBzeXNidXMgZGV2aWNlcyBhbmQgY2hlY2sgaWYgdGhleSBhcmUKPiAr ICAgICAqIGFsbCBhbGxvd2VkLiAgSWYgYSBkZXZpY2UgaXMgbm90IGFsbG93ZWQsIGVycm9yIG91 dC4KPiAgICAgICAqLwo+IC0gICAgZm9yZWFjaF9keW5hbWljX3N5c2J1c19kZXZpY2UoZXJyb3Jf b25fc3lzYnVzX2RldmljZSwgTlVMTCk7Cj4gKyAgICBmb3JlYWNoX2R5bmFtaWNfc3lzYnVzX2Rl dmljZSh2YWxpZGF0ZV9zeXNidXNfZGV2aWNlLCBtYWNoaW5lKTsKPiAgfQo+Cj4gIEhvdHBsdWdn YWJsZUNQVUxpc3QgKm1hY2hpbmVfcXVlcnlfaG90cGx1Z2dhYmxlX2NwdXMoTWFjaGluZVN0YXRl ICptYWNoaW5lKQo+IGRpZmYgLS1naXQgYS9ody9pMzg2L3BjX3EzNS5jIGIvaHcvaTM4Ni9wY19x MzUuYwo+IGluZGV4IGQ2MDYwMDQzYWMuLmQwYjBlNWI0MjIgMTAwNjQ0Cj4gLS0tIGEvaHcvaTM4 Ni9wY19xMzUuYwo+ICsrKyBiL2h3L2kzODYvcGNfcTM1LmMKPiBAQCAtMjk5LDcgKzI5OSw4IEBA IHN0YXRpYyB2b2lkIHBjX3EzNV9tYWNoaW5lX29wdGlvbnMoTWFjaGluZUNsYXNzICptKQo+ICAg ICAgbS0+ZGVmYXVsdF9tYWNoaW5lX29wdHMgPSAiZmlybXdhcmU9Ymlvcy0yNTZrLmJpbiI7Cj4g ICAgICBtLT5kZWZhdWx0X2Rpc3BsYXkgPSAic3RkIjsKPiAgICAgIG0tPm5vX2Zsb3BweSA9IDE7 Cj4gLSAgICBtLT5oYXNfZHluYW1pY19zeXNidXMgPSB0cnVlOwo+ICsgICAgLypUT0RPOiBhbGxv dyBvbmx5IHN5c2J1cyBkZXZpY2VzIHRoYXQgcmVhbGx5IHdvcmsgd2l0aCB0aGlzIG1hY2hpbmUg Ki8KPiArICAgIG1hY2hpbmVfY2xhc3NfYWxsb3dfZHluYW1pY19zeXNidXNfZGV2KG0sIFRZUEVf U1lTX0JVU19ERVZJQ0UpOwo+ICAgICAgbS0+bWF4X2NwdXMgPSAyODg7Cj4gIH0KPgo+IGRpZmYg LS1naXQgYS9ody9wcGMvZTUwMHBsYXQuYyBiL2h3L3BwYy9lNTAwcGxhdC5jCj4gaW5kZXggZTU5 ZTgwZmI5ZS4uNDM4MTE4YzI5YiAxMDA2NDQKPiAtLS0gYS9ody9wcGMvZTUwMHBsYXQuYwo+ICsr KyBiL2h3L3BwYy9lNTAwcGxhdC5jCj4gQEAgLTE1LDYgKzE1LDcgQEAKPiAgI2luY2x1ZGUgImh3 L2JvYXJkcy5oIgo+ICAjaW5jbHVkZSAic3lzZW11L2RldmljZV90cmVlLmgiCj4gICNpbmNsdWRl ICJzeXNlbXUva3ZtLmgiCj4gKyNpbmNsdWRlICJody9zeXNidXMuaCIKPiAgI2luY2x1ZGUgImh3 L3BjaS9wY2kuaCIKPiAgI2luY2x1ZGUgImh3L3BwYy9vcGVucGljLmgiCj4gICNpbmNsdWRlICJr dm1fcHBjLmgiCj4gQEAgLTYzLDcgKzY0LDggQEAgc3RhdGljIHZvaWQgZTUwMHBsYXRfbWFjaGlu ZV9pbml0KE1hY2hpbmVDbGFzcyAqbWMpCj4gICAgICBtYy0+ZGVzYyA9ICJnZW5lcmljIHBhcmF2 aXJ0IGU1MDAgcGxhdGZvcm0iOwo+ICAgICAgbWMtPmluaXQgPSBlNTAwcGxhdF9pbml0Owo+ICAg ICAgbWMtPm1heF9jcHVzID0gMzI7Cj4gLSAgICBtYy0+aGFzX2R5bmFtaWNfc3lzYnVzID0gdHJ1 ZTsKPiArICAgIC8qVE9ETzogYWxsb3cgb25seSBzeXNidXMgZGV2aWNlcyB0aGF0IHJlYWxseSB3 b3JrIHdpdGggdGhpcyBtYWNoaW5lICovCj4gKyAgICBtYWNoaW5lX2NsYXNzX2FsbG93X2R5bmFt aWNfc3lzYnVzX2RldihtYywgVFlQRV9TWVNfQlVTX0RFVklDRSk7Cj4gICAgICBtYy0+ZGVmYXVs dF9jcHVfdHlwZSA9IFBPV0VSUENfQ1BVX1RZUEVfTkFNRSgiZTUwMHYyX3YzMCIpOwo+ICB9Cj4K PiBkaWZmIC0tZ2l0IGEvaHcvcHBjL3NwYXByLmMgYi9ody9wcGMvc3BhcHIuYwo+IGluZGV4IGQ2 ODJmMDEzZDQuLjgyMDQwY2M1ZDEgMTAwNjQ0Cj4gLS0tIGEvaHcvcHBjL3NwYXByLmMKPiArKysg Yi9ody9wcGMvc3BhcHIuYwo+IEBAIC0zNjAzLDcgKzM2MDMsOCBAQCBzdGF0aWMgdm9pZCBzcGFw cl9tYWNoaW5lX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKm9jLCB2b2lkICpkYXRhKQo+ICAgICAg bWMtPmRlZmF1bHRfYm9vdF9vcmRlciA9ICIiOwo+ICAgICAgbWMtPmRlZmF1bHRfcmFtX3NpemUg PSA1MTIgKiBNX0JZVEU7Cj4gICAgICBtYy0+a3ZtX3R5cGUgPSBzcGFwcl9rdm1fdHlwZTsKPiAt ICAgIG1jLT5oYXNfZHluYW1pY19zeXNidXMgPSB0cnVlOwo+ICsgICAgLypUT0RPOiBhbGxvdyBv bmx5IHN5c2J1cyBkZXZpY2VzIHRoYXQgcmVhbGx5IHdvcmsgd2l0aCB0aGlzIG1hY2hpbmUgKi8K PiArICAgIG1hY2hpbmVfY2xhc3NfYWxsb3dfZHluYW1pY19zeXNidXNfZGV2KG1jLCBUWVBFX1NZ U19CVVNfREVWSUNFKTsKPiAgICAgIG1jLT5wY2lfYWxsb3dfMF9hZGRyZXNzID0gdHJ1ZTsKPiAg ICAgIG1jLT5nZXRfaG90cGx1Z19oYW5kbGVyID0gc3BhcHJfZ2V0X2hvdHBsdWdfaGFuZGxlcjsK PiAgICAgIGhjLT5wcmVfcGx1ZyA9IHNwYXByX21hY2hpbmVfZGV2aWNlX3ByZV9wbHVnOwo+IGRp ZmYgLS1naXQgYS9ody94ZW4veGVuX2JhY2tlbmQuYyBiL2h3L3hlbi94ZW5fYmFja2VuZC5jCj4g aW5kZXggMGY4NDlhMjZkMi4uODIzODBlYTllZSAxMDA2NDQKPiAtLS0gYS9ody94ZW4veGVuX2Jh Y2tlbmQuYwo+ICsrKyBiL2h3L3hlbi94ZW5fYmFja2VuZC5jCj4gQEAgLTU2NCw3ICs1NjQsMTIg QEAgc3RhdGljIHZvaWQgeGVuX3NldF9keW5hbWljX3N5c2J1cyh2b2lkKQo+ICAgICAgT2JqZWN0 Q2xhc3MgKm9jID0gb2JqZWN0X2dldF9jbGFzcyhtYWNoaW5lKTsKPiAgICAgIE1hY2hpbmVDbGFz cyAqbWMgPSBNQUNISU5FX0NMQVNTKG9jKTsKPgo+IC0gICAgbWMtPmhhc19keW5hbWljX3N5c2J1 cyA9IHRydWU7Cj4gKyAgICAvKgo+ICsgICAgICogRW11bGF0ZSBvbGQgbWMtPmhhc19keW5hbWlj X3N5c2J1cz10cnVlIGFzc2lnbm1lbnQKPiArICAgICAqCj4gKyAgICAgKlRPRE86IGFkZCBvbmx5 IFhlbiBkZXZpY2VzIHRvIHRoZSBsaXN0Cj4gKyAgICAgKi8KPiArICAgIG1hY2hpbmVfY2xhc3Nf YWxsb3dfZHluYW1pY19zeXNidXNfZGV2KG1jLCBUWVBFX1NZU19CVVNfREVWSUNFKTsKPiAgfQo+ Cj4gIGludCB4ZW5fYmVfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IFhlbkRldk9w cyAqb3BzKQo+IC0tCj4gMi4xMy42Cj4KPgoKCgotLSAKTWFyYy1BbmRyw6kgTHVyZWF1CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs