From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58569) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQC2f-0001UH-U5 for qemu-devel@nongnu.org; Fri, 23 Nov 2018 09:02:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQC2e-0003PJ-8X for qemu-devel@nongnu.org; Fri, 23 Nov 2018 09:02:45 -0500 Date: Fri, 23 Nov 2018 15:02:27 +0100 From: Igor Mammedov Message-ID: <20181123150227.38d17ca0@redhat.com> In-Reply-To: <20181107123652.23417-7-marcandre.lureau@redhat.com> References: <20181107123652.23417-1-marcandre.lureau@redhat.com> <20181107123652.23417-7-marcandre.lureau@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH for-3.2 v3 06/14] qdev: do not mix compat props with global props List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?TWFyYy1BbmRyw6k=?= Lureau Cc: qemu-devel@nongnu.org, Paolo Bonzini , dgilbert@redhat.com, Richard Henderson , Andreas =?UTF-8?B?RsOkcmJlcg==?= , qemu-arm@nongnu.org, xen-devel@lists.xenproject.org, Artyom Tarasenko , Anthony Perard , Mark Cave-Ayland , Eduardo Habkost , Amit Shah , Stefan Berger , Marcel Apfelbaum , Stefano Stabellini , "Michael S. Tsirkin" , qemu-ppc@nongnu.org, Peter Maydell , Corey Minyard , =?UTF-8?B?SGVydsOp?= Poussineau On Wed, 7 Nov 2018 16:36:44 +0400 Marc-Andr=C3=A9 Lureau wrote: > Machine & Accel props are not provided by user. Let's not mix them > with the global properties. >=20 > Call a new helper function object_apply_global_props() during > device_post_init(). >=20 > Add a stub for current_machine, so qemu-user and tests can find a > fallback symbol when linking with QDev. >=20 > The following patches is going to reuse object_apply_global_props() > for qdev globals. There are several things ongoing here, 1. switching from GlobalProperty to GArray for accel maybe generalize and reuse SET_MACHINE_COMPAT() there? SET_MACHINE_COMPAT() -> SET_COMPAT(GArray*, COMPAT) 2. decoupling compat vs globals =20 > Signed-off-by: Marc-Andr=C3=A9 Lureau > --- > include/hw/boards.h | 1 - > include/qom/object.h | 2 ++ > include/sysemu/accel.h | 4 +--- > accel/accel.c | 12 ------------ > hw/core/machine.c | 18 ------------------ > hw/core/qdev.c | 8 ++++++++ > hw/xen/xen-common.c | 9 ++++++++- > qom/object.c | 25 +++++++++++++++++++++++++ > stubs/machine.c | 4 ++++=20 > tests/test-qdev-global-props.c | 1 - > vl.c | 2 -- > stubs/Makefile.objs | 1 + > 12 files changed, 49 insertions(+), 38 deletions(-) > create mode 100644 stubs/machine.c >=20 > diff --git a/include/hw/boards.h b/include/hw/boards.h > index f82f28468b..c02190fc52 100644 > --- a/include/hw/boards.h > +++ b/include/hw/boards.h > @@ -69,7 +69,6 @@ int machine_kvm_shadow_mem(MachineState *machine); > int machine_phandle_start(MachineState *machine); > bool machine_dump_guest_core(MachineState *machine); > bool machine_mem_merge(MachineState *machine); > -void machine_register_compat_props(MachineState *machine); > HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machi= ne); > void machine_set_cpu_numa_node(MachineState *machine, > const CpuInstanceProperties *props, > diff --git a/include/qom/object.h b/include/qom/object.h > index f0b0bf39cc..e58eeb280f 100644 > --- a/include/qom/object.h > +++ b/include/qom/object.h > @@ -679,6 +679,8 @@ Object *object_new_with_propv(const char *typename, > Error **errp, > va_list vargs); > =20 > +void object_apply_global_props(Object *obj, GArray *props, Error **errp); > + > /** > * object_set_props: > * @obj: the object instance to set properties on > diff --git a/include/sysemu/accel.h b/include/sysemu/accel.h > index 637358f430..f4f71134b5 100644 > --- a/include/sysemu/accel.h > +++ b/include/sysemu/accel.h > @@ -49,7 +49,7 @@ typedef struct AccelClass { > * global properties may be overridden by machine-type > * compat_props or user-provided global properties. > */ > - GlobalProperty *global_props; > + GArray *compat_props; > } AccelClass; > =20 > #define TYPE_ACCEL "accel" > @@ -67,8 +67,6 @@ typedef struct AccelClass { > extern unsigned long tcg_tb_size; > =20 > void configure_accelerator(MachineState *ms); > -/* Register accelerator specific global properties */ > -void accel_register_compat_props(AccelState *accel); > /* Called just before os_setup_post (ie just before drop OS privs) */ > void accel_setup_post(MachineState *ms); > =20 > diff --git a/accel/accel.c b/accel/accel.c > index 3da26eb90f..6db5d8f4df 100644 > --- a/accel/accel.c > +++ b/accel/accel.c > @@ -119,18 +119,6 @@ void configure_accelerator(MachineState *ms) > } > } > =20 > -void accel_register_compat_props(AccelState *accel) > -{ > - AccelClass *class =3D ACCEL_GET_CLASS(accel); > - GlobalProperty *prop =3D class->global_props; > - > - for (; prop && prop->driver; prop++) { > - /* Any compat_props must never cause error */ > - prop->errp =3D &error_abort; > - qdev_prop_register_global(prop); > - } > -} > - > void accel_setup_post(MachineState *ms) > { > AccelState *accel =3D ms->accelerator; > diff --git a/hw/core/machine.c b/hw/core/machine.c > index da50ad6de7..4444d45945 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -844,24 +844,6 @@ static void machine_class_finalize(ObjectClass *klas= s, void *data) > g_free(mc->name); > } > =20 > -void machine_register_compat_props(MachineState *machine) > -{ > - MachineClass *mc =3D MACHINE_GET_CLASS(machine); > - int i; > - GlobalProperty *p; > - > - if (!mc->compat_props) { > - return; > - } > - > - for (i =3D 0; i < mc->compat_props->len; i++) { > - p =3D g_array_index(mc->compat_props, GlobalProperty *, i); > - /* Machine compat_props must never cause errors: */ > - p->errp =3D &error_abort; > - qdev_prop_register_global(p); > - } > -} > - > static const TypeInfo machine_info =3D { > .name =3D TYPE_MACHINE, > .parent =3D TYPE_OBJECT, > diff --git a/hw/core/qdev.c b/hw/core/qdev.c > index 6b3cc55b27..30890f2c8d 100644 > --- a/hw/core/qdev.c > +++ b/hw/core/qdev.c > @@ -972,6 +972,14 @@ static void device_initfn(Object *obj) > =20 > static void device_post_init(Object *obj) > { > + if (current_machine) { > + MachineClass *mc =3D MACHINE_GET_CLASS(current_machine); > + AccelClass *ac =3D ACCEL_GET_CLASS(current_machine->accelerator); > + > + object_apply_global_props(obj, mc->compat_props, &error_abort); > + object_apply_global_props(obj, ac->compat_props, &error_abort); 1. this is order inversion as opposed to register_global_properties(), but looking at xen_compat_props[] and existing machine compats it should work fine as they all are using switching off the same propert= ies so there is no conflict if order is changed but it will change semantics= of AccelClass::global_props that's says that machine compats will override = accel ones. 2. I'd prefer following style: if (mc->compat_props) { object_apply_global_props(...); } so I don't have to jump inside of object_apply_global_props() to figure = out that it is not if props are NULL 3. I quite dislike using current_machine here. Not sure what to do though maybe in parallel to global_props create a compat_props registry would b= e better: hw/core/qdev-properties.c: static GList *global_props; + static GList *compat_props; you won't poison device model with access to higher level object and there would be no need for a stub. > + } > + > qdev_prop_set_globals(DEVICE(obj)); > } > =20 > diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c > index 6ec14c73ca..d1ef7a53cc 100644 > --- a/hw/xen/xen-common.c > +++ b/hw/xen/xen-common.c > @@ -181,11 +181,18 @@ static GlobalProperty xen_compat_props[] =3D { > static void xen_accel_class_init(ObjectClass *oc, void *data) > { > AccelClass *ac =3D ACCEL_CLASS(oc); > + int i; > + > ac->name =3D "Xen"; > ac->init_machine =3D xen_init; > ac->setup_post =3D xen_setup_post; > ac->allowed =3D &xen_allowed; > - ac->global_props =3D xen_compat_props; > + > + ac->compat_props =3D g_array_new(false, false, sizeof(void *)); > + for (i =3D 0; xen_compat_props[i].driver !=3D NULL; i++) { > + GlobalProperty *prop =3D &xen_compat_props[i]; > + g_array_append_val(ac->compat_props, prop); > + } > } > =20 > #define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen") > diff --git a/qom/object.c b/qom/object.c > index eb770dbf7f..9acdf9e16d 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -372,6 +372,31 @@ static void object_post_init_with_type(Object *obj, = TypeImpl *ti) > } > } > =20 > +void object_apply_global_props(Object *obj, GArray *props, Error **errp) > +{ > + Error *err =3D NULL; > + int i; > + > + if (!props) { > + return; > + } > + > + for (i =3D 0; i < props->len; i++) { > + GlobalProperty *p =3D g_array_index(props, GlobalProperty *, i); > + > + if (object_dynamic_cast(obj, p->driver) =3D=3D NULL) { > + continue; > + } > + p->used =3D true; > + object_property_parse(obj, p->value, p->property, &err); > + if (err !=3D NULL) { > + error_prepend(&err, "can't apply global %s.%s=3D%s: ", > + p->driver, p->property, p->value); > + error_propagate(errp, err); > + } > + } > +} > + > static void object_initialize_with_type(void *data, size_t size, TypeImp= l *type) > { > Object *obj =3D data; > diff --git a/stubs/machine.c b/stubs/machine.c > new file mode 100644 > index 0000000000..51d40fd677 > --- /dev/null > +++ b/stubs/machine.c > @@ -0,0 +1,4 @@ > +#include "qemu/osdep.h" > +#include "qemu-common.h" > + > +MachineClass *current_machine; > diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-prop= s.c > index b1eb505442..3a8d3170a0 100644 > --- a/tests/test-qdev-global-props.c > +++ b/tests/test-qdev-global-props.c > @@ -28,7 +28,6 @@ > #include "qom/object.h" > #include "qapi/visitor.h" > =20 > - unrelated change > #define TYPE_STATIC_PROPS "static_prop_type" > #define STATIC_TYPE(obj) \ > OBJECT_CHECK(MyType, (obj), TYPE_STATIC_PROPS) > diff --git a/vl.c b/vl.c > index 55bab005b6..2aea884c9d 100644 > --- a/vl.c > +++ b/vl.c > @@ -2963,8 +2963,6 @@ static void user_register_global_props(void) > */ > static void register_global_properties(MachineState *ms) > { > - accel_register_compat_props(ms->accelerator); > - machine_register_compat_props(ms); > user_register_global_props(); > } > =20 > diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs > index 5dd0aeeec6..6ce33ae46f 100644 > --- a/stubs/Makefile.objs > +++ b/stubs/Makefile.objs > @@ -18,6 +18,7 @@ stub-obj-y +=3D iothread-lock.o > stub-obj-y +=3D is-daemonized.o > stub-obj-$(CONFIG_LINUX_AIO) +=3D linux-aio.o > stub-obj-y +=3D machine-init-done.o > +stub-obj-y +=3D machine.o > stub-obj-y +=3D migr-blocker.o > stub-obj-y +=3D change-state-handler.o > stub-obj-y +=3D monitor.o From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igor Mammedov Subject: Re: [PATCH for-3.2 v3 06/14] qdev: do not mix compat props with global props Date: Fri, 23 Nov 2018 15:02:27 +0100 Message-ID: <20181123150227.38d17ca0@redhat.com> References: <20181107123652.23417-1-marcandre.lureau@redhat.com> <20181107123652.23417-7-marcandre.lureau@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gQC2Z-00060x-Iq for xen-devel@lists.xenproject.org; Fri, 23 Nov 2018 14:02:39 +0000 In-Reply-To: <20181107123652.23417-7-marcandre.lureau@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: =?UTF-8?B?TWFyYy1BbmRyw6k=?= Lureau Cc: Peter Maydell , Stefano Stabellini , Eduardo Habkost , Corey Minyard , Amit Shah , =?UTF-8?B?SGVydsOp?= Poussineau , "Michael S. Tsirkin" , Mark Cave-Ayland , qemu-devel@nongnu.org, dgilbert@redhat.com, qemu-arm@nongnu.org, qemu-ppc@nongnu.org, Marcel Apfelbaum , xen-devel@lists.xenproject.org, Anthony Perard , Paolo Bonzini , Stefan Berger , Andreas =?UTF-8?B?RsOkcmJlcg==?= , Artyom Tarasenko , Richard Henderson List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAgNyBOb3YgMjAxOCAxNjozNjo0NCArMDQwMApNYXJjLUFuZHLDqSBMdXJlYXUgPG1h cmNhbmRyZS5sdXJlYXVAcmVkaGF0LmNvbT4gd3JvdGU6Cgo+IE1hY2hpbmUgJiBBY2NlbCBwcm9w cyBhcmUgbm90IHByb3ZpZGVkIGJ5IHVzZXIuIExldCdzIG5vdCBtaXggdGhlbQo+IHdpdGggdGhl IGdsb2JhbCBwcm9wZXJ0aWVzLgo+IAo+IENhbGwgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIG9iamVj dF9hcHBseV9nbG9iYWxfcHJvcHMoKSBkdXJpbmcKPiBkZXZpY2VfcG9zdF9pbml0KCkuCj4gCj4g QWRkIGEgc3R1YiBmb3IgY3VycmVudF9tYWNoaW5lLCBzbyBxZW11LXVzZXIgYW5kIHRlc3RzIGNh biBmaW5kIGEKPiBmYWxsYmFjayBzeW1ib2wgd2hlbiBsaW5raW5nIHdpdGggUURldi4KPiAKPiBU aGUgZm9sbG93aW5nIHBhdGNoZXMgaXMgZ29pbmcgdG8gcmV1c2Ugb2JqZWN0X2FwcGx5X2dsb2Jh bF9wcm9wcygpCj4gZm9yIHFkZXYgZ2xvYmFscy4KVGhlcmUgYXJlIHNldmVyYWwgdGhpbmdzIG9u Z29pbmcgaGVyZSwKIDEuIHN3aXRjaGluZyBmcm9tIEdsb2JhbFByb3BlcnR5IHRvIEdBcnJheSBm b3IgYWNjZWwKICAgICAgIG1heWJlIGdlbmVyYWxpemUgYW5kIHJldXNlIFNFVF9NQUNISU5FX0NP TVBBVCgpIHRoZXJlPwogICAgICAgIFNFVF9NQUNISU5FX0NPTVBBVCgpIC0+IFNFVF9DT01QQVQo R0FycmF5KiwgQ09NUEFUKQoKIDIuIGRlY291cGxpbmcgY29tcGF0IHZzIGdsb2JhbHMKIAo+IFNp Z25lZC1vZmYtYnk6IE1hcmMtQW5kcsOpIEx1cmVhdSA8bWFyY2FuZHJlLmx1cmVhdUByZWRoYXQu Y29tPgo+IC0tLQo+ICBpbmNsdWRlL2h3L2JvYXJkcy5oICAgICAgICAgICAgfCAgMSAtCj4gIGlu Y2x1ZGUvcW9tL29iamVjdC5oICAgICAgICAgICB8ICAyICsrCj4gIGluY2x1ZGUvc3lzZW11L2Fj Y2VsLmggICAgICAgICB8ICA0ICstLS0KPiAgYWNjZWwvYWNjZWwuYyAgICAgICAgICAgICAgICAg IHwgMTIgLS0tLS0tLS0tLS0tCj4gIGh3L2NvcmUvbWFjaGluZS5jICAgICAgICAgICAgICB8IDE4 IC0tLS0tLS0tLS0tLS0tLS0tLQo+ICBody9jb3JlL3FkZXYuYyAgICAgICAgICAgICAgICAgfCAg OCArKysrKysrKwo+ICBody94ZW4veGVuLWNvbW1vbi5jICAgICAgICAgICAgfCAgOSArKysrKysr Ky0KPiAgcW9tL29iamVjdC5jICAgICAgICAgICAgICAgICAgIHwgMjUgKysrKysrKysrKysrKysr KysrKysrKysrKwo+ICBzdHVicy9tYWNoaW5lLmMgICAgICAgICAgICAgICAgfCAgNCArKysrIAo+ ICB0ZXN0cy90ZXN0LXFkZXYtZ2xvYmFsLXByb3BzLmMgfCAgMSAtCj4gIHZsLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAyIC0tCj4gIHN0dWJzL01ha2VmaWxlLm9ianMgICAgICAgICAg ICB8ICAxICsKPiAgMTIgZmlsZXMgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRp b25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdHVicy9tYWNoaW5lLmMKPiAKPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9ody9ib2FyZHMuaCBiL2luY2x1ZGUvaHcvYm9hcmRzLmgKPiBpbmRleCBm ODJmMjg0NjhiLi5jMDIxOTBmYzUyIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvaHcvYm9hcmRzLmgK PiArKysgYi9pbmNsdWRlL2h3L2JvYXJkcy5oCj4gQEAgLTY5LDcgKzY5LDYgQEAgaW50IG1hY2hp bmVfa3ZtX3NoYWRvd19tZW0oTWFjaGluZVN0YXRlICptYWNoaW5lKTsKPiAgaW50IG1hY2hpbmVf cGhhbmRsZV9zdGFydChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpOwo+ICBib29sIG1hY2hpbmVfZHVt cF9ndWVzdF9jb3JlKE1hY2hpbmVTdGF0ZSAqbWFjaGluZSk7Cj4gIGJvb2wgbWFjaGluZV9tZW1f bWVyZ2UoTWFjaGluZVN0YXRlICptYWNoaW5lKTsKPiAtdm9pZCBtYWNoaW5lX3JlZ2lzdGVyX2Nv bXBhdF9wcm9wcyhNYWNoaW5lU3RhdGUgKm1hY2hpbmUpOwo+ICBIb3RwbHVnZ2FibGVDUFVMaXN0 ICptYWNoaW5lX3F1ZXJ5X2hvdHBsdWdnYWJsZV9jcHVzKE1hY2hpbmVTdGF0ZSAqbWFjaGluZSk7 Cj4gIHZvaWQgbWFjaGluZV9zZXRfY3B1X251bWFfbm9kZShNYWNoaW5lU3RhdGUgKm1hY2hpbmUs Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDcHVJbnN0YW5jZVByb3Bl cnRpZXMgKnByb3BzLAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3FvbS9vYmplY3QuaCBiL2luY2x1 ZGUvcW9tL29iamVjdC5oCj4gaW5kZXggZjBiMGJmMzljYy4uZTU4ZWViMjgwZiAxMDA2NDQKPiAt LS0gYS9pbmNsdWRlL3FvbS9vYmplY3QuaAo+ICsrKyBiL2luY2x1ZGUvcW9tL29iamVjdC5oCj4g QEAgLTY3OSw2ICs2NzksOCBAQCBPYmplY3QgKm9iamVjdF9uZXdfd2l0aF9wcm9wdihjb25zdCBj aGFyICp0eXBlbmFtZSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKipl cnJwLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IHZhcmdzKTsKPiAg Cj4gK3ZvaWQgb2JqZWN0X2FwcGx5X2dsb2JhbF9wcm9wcyhPYmplY3QgKm9iaiwgR0FycmF5ICpw cm9wcywgRXJyb3IgKiplcnJwKTsKPiArCj4gIC8qKgo+ICAgKiBvYmplY3Rfc2V0X3Byb3BzOgo+ ICAgKiBAb2JqOiB0aGUgb2JqZWN0IGluc3RhbmNlIHRvIHNldCBwcm9wZXJ0aWVzIG9uCj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvc3lzZW11L2FjY2VsLmggYi9pbmNsdWRlL3N5c2VtdS9hY2NlbC5o Cj4gaW5kZXggNjM3MzU4ZjQzMC4uZjRmNzExMzRiNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3N5 c2VtdS9hY2NlbC5oCj4gKysrIGIvaW5jbHVkZS9zeXNlbXUvYWNjZWwuaAo+IEBAIC00OSw3ICs0 OSw3IEBAIHR5cGVkZWYgc3RydWN0IEFjY2VsQ2xhc3Mgewo+ICAgICAgICogZ2xvYmFsIHByb3Bl cnRpZXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgbWFjaGluZS10eXBlCj4gICAgICAgKiBjb21wYXRf cHJvcHMgb3IgdXNlci1wcm92aWRlZCBnbG9iYWwgcHJvcGVydGllcy4KPiAgICAgICAqLwo+IC0g ICAgR2xvYmFsUHJvcGVydHkgKmdsb2JhbF9wcm9wczsKPiArICAgIEdBcnJheSAqY29tcGF0X3By b3BzOwo+ICB9IEFjY2VsQ2xhc3M7Cj4gIAo+ICAjZGVmaW5lIFRZUEVfQUNDRUwgImFjY2VsIgo+ IEBAIC02Nyw4ICs2Nyw2IEBAIHR5cGVkZWYgc3RydWN0IEFjY2VsQ2xhc3Mgewo+ICBleHRlcm4g dW5zaWduZWQgbG9uZyB0Y2dfdGJfc2l6ZTsKPiAgCj4gIHZvaWQgY29uZmlndXJlX2FjY2VsZXJh dG9yKE1hY2hpbmVTdGF0ZSAqbXMpOwo+IC0vKiBSZWdpc3RlciBhY2NlbGVyYXRvciBzcGVjaWZp YyBnbG9iYWwgcHJvcGVydGllcyAqLwo+IC12b2lkIGFjY2VsX3JlZ2lzdGVyX2NvbXBhdF9wcm9w cyhBY2NlbFN0YXRlICphY2NlbCk7Cj4gIC8qIENhbGxlZCBqdXN0IGJlZm9yZSBvc19zZXR1cF9w b3N0IChpZSBqdXN0IGJlZm9yZSBkcm9wIE9TIHByaXZzKSAqLwo+ICB2b2lkIGFjY2VsX3NldHVw X3Bvc3QoTWFjaGluZVN0YXRlICptcyk7Cj4gIAo+IGRpZmYgLS1naXQgYS9hY2NlbC9hY2NlbC5j IGIvYWNjZWwvYWNjZWwuYwo+IGluZGV4IDNkYTI2ZWI5MGYuLjZkYjVkOGY0ZGYgMTAwNjQ0Cj4g LS0tIGEvYWNjZWwvYWNjZWwuYwo+ICsrKyBiL2FjY2VsL2FjY2VsLmMKPiBAQCAtMTE5LDE4ICsx MTksNiBAQCB2b2lkIGNvbmZpZ3VyZV9hY2NlbGVyYXRvcihNYWNoaW5lU3RhdGUgKm1zKQo+ICAg ICAgfQo+ICB9Cj4gIAo+IC12b2lkIGFjY2VsX3JlZ2lzdGVyX2NvbXBhdF9wcm9wcyhBY2NlbFN0 YXRlICphY2NlbCkKPiAtewo+IC0gICAgQWNjZWxDbGFzcyAqY2xhc3MgPSBBQ0NFTF9HRVRfQ0xB U1MoYWNjZWwpOwo+IC0gICAgR2xvYmFsUHJvcGVydHkgKnByb3AgPSBjbGFzcy0+Z2xvYmFsX3By b3BzOwo+IC0KPiAtICAgIGZvciAoOyBwcm9wICYmIHByb3AtPmRyaXZlcjsgcHJvcCsrKSB7Cj4g LSAgICAgICAgLyogQW55IGNvbXBhdF9wcm9wcyBtdXN0IG5ldmVyIGNhdXNlIGVycm9yICovCj4g LSAgICAgICAgcHJvcC0+ZXJycCA9ICZlcnJvcl9hYm9ydDsKPiAtICAgICAgICBxZGV2X3Byb3Bf cmVnaXN0ZXJfZ2xvYmFsKHByb3ApOwo+IC0gICAgfQo+IC19Cj4gLQo+ICB2b2lkIGFjY2VsX3Nl dHVwX3Bvc3QoTWFjaGluZVN0YXRlICptcykKPiAgewo+ICAgICAgQWNjZWxTdGF0ZSAqYWNjZWwg PSBtcy0+YWNjZWxlcmF0b3I7Cj4gZGlmZiAtLWdpdCBhL2h3L2NvcmUvbWFjaGluZS5jIGIvaHcv Y29yZS9tYWNoaW5lLmMKPiBpbmRleCBkYTUwYWQ2ZGU3Li40NDQ0ZDQ1OTQ1IDEwMDY0NAo+IC0t LSBhL2h3L2NvcmUvbWFjaGluZS5jCj4gKysrIGIvaHcvY29yZS9tYWNoaW5lLmMKPiBAQCAtODQ0 LDI0ICs4NDQsNiBAQCBzdGF0aWMgdm9pZCBtYWNoaW5lX2NsYXNzX2ZpbmFsaXplKE9iamVjdENs YXNzICprbGFzcywgdm9pZCAqZGF0YSkKPiAgICAgIGdfZnJlZShtYy0+bmFtZSk7Cj4gIH0KPiAg Cj4gLXZvaWQgbWFjaGluZV9yZWdpc3Rlcl9jb21wYXRfcHJvcHMoTWFjaGluZVN0YXRlICptYWNo aW5lKQo+IC17Cj4gLSAgICBNYWNoaW5lQ2xhc3MgKm1jID0gTUFDSElORV9HRVRfQ0xBU1MobWFj aGluZSk7Cj4gLSAgICBpbnQgaTsKPiAtICAgIEdsb2JhbFByb3BlcnR5ICpwOwo+IC0KPiAtICAg IGlmICghbWMtPmNvbXBhdF9wcm9wcykgewo+IC0gICAgICAgIHJldHVybjsKPiAtICAgIH0KPiAt Cj4gLSAgICBmb3IgKGkgPSAwOyBpIDwgbWMtPmNvbXBhdF9wcm9wcy0+bGVuOyBpKyspIHsKPiAt ICAgICAgICBwID0gZ19hcnJheV9pbmRleChtYy0+Y29tcGF0X3Byb3BzLCBHbG9iYWxQcm9wZXJ0 eSAqLCBpKTsKPiAtICAgICAgICAvKiBNYWNoaW5lIGNvbXBhdF9wcm9wcyBtdXN0IG5ldmVyIGNh dXNlIGVycm9yczogKi8KPiAtICAgICAgICBwLT5lcnJwID0gJmVycm9yX2Fib3J0Owo+IC0gICAg ICAgIHFkZXZfcHJvcF9yZWdpc3Rlcl9nbG9iYWwocCk7Cj4gLSAgICB9Cj4gLX0KPiAtCj4gIHN0 YXRpYyBjb25zdCBUeXBlSW5mbyBtYWNoaW5lX2luZm8gPSB7Cj4gICAgICAubmFtZSA9IFRZUEVf TUFDSElORSwKPiAgICAgIC5wYXJlbnQgPSBUWVBFX09CSkVDVCwKPiBkaWZmIC0tZ2l0IGEvaHcv Y29yZS9xZGV2LmMgYi9ody9jb3JlL3FkZXYuYwo+IGluZGV4IDZiM2NjNTViMjcuLjMwODkwZjJj OGQgMTAwNjQ0Cj4gLS0tIGEvaHcvY29yZS9xZGV2LmMKPiArKysgYi9ody9jb3JlL3FkZXYuYwo+ IEBAIC05NzIsNiArOTcyLDE0IEBAIHN0YXRpYyB2b2lkIGRldmljZV9pbml0Zm4oT2JqZWN0ICpv YmopCj4gIAo+ICBzdGF0aWMgdm9pZCBkZXZpY2VfcG9zdF9pbml0KE9iamVjdCAqb2JqKQo+ICB7 Cj4gKyAgICBpZiAoY3VycmVudF9tYWNoaW5lKSB7Cj4gKyAgICAgICAgTWFjaGluZUNsYXNzICpt YyA9IE1BQ0hJTkVfR0VUX0NMQVNTKGN1cnJlbnRfbWFjaGluZSk7Cj4gKyAgICAgICAgQWNjZWxD bGFzcyAqYWMgPSBBQ0NFTF9HRVRfQ0xBU1MoY3VycmVudF9tYWNoaW5lLT5hY2NlbGVyYXRvcik7 Cj4gKwoKPiArICAgICAgICBvYmplY3RfYXBwbHlfZ2xvYmFsX3Byb3BzKG9iaiwgbWMtPmNvbXBh dF9wcm9wcywgJmVycm9yX2Fib3J0KTsKPiArICAgICAgICBvYmplY3RfYXBwbHlfZ2xvYmFsX3By b3BzKG9iaiwgYWMtPmNvbXBhdF9wcm9wcywgJmVycm9yX2Fib3J0KTsKMS4gdGhpcyBpcyBvcmRl ciBpbnZlcnNpb24gYXMgb3Bwb3NlZCB0byByZWdpc3Rlcl9nbG9iYWxfcHJvcGVydGllcygpLAog ICBidXQgbG9va2luZyBhdCB4ZW5fY29tcGF0X3Byb3BzW10gYW5kIGV4aXN0aW5nIG1hY2hpbmUg Y29tcGF0cwogICBpdCBzaG91bGQgd29yayBmaW5lIGFzIHRoZXkgYWxsIGFyZSB1c2luZyBzd2l0 Y2hpbmcgb2ZmIHRoZSBzYW1lIHByb3BlcnRpZXMKICAgc28gdGhlcmUgaXMgbm8gY29uZmxpY3Qg aWYgb3JkZXIgaXMgY2hhbmdlZCBidXQgaXQgd2lsbCBjaGFuZ2Ugc2VtYW50aWNzIG9mCiAgIEFj Y2VsQ2xhc3M6Omdsb2JhbF9wcm9wcyB0aGF0J3Mgc2F5cyB0aGF0IG1hY2hpbmUgY29tcGF0cyB3 aWxsIG92ZXJyaWRlIGFjY2VsIG9uZXMuCgoyLiBJJ2QgcHJlZmVyIGZvbGxvd2luZyBzdHlsZToK ICAgICAgIGlmIChtYy0+Y29tcGF0X3Byb3BzKSB7CiAgICAgICAgICAgIG9iamVjdF9hcHBseV9n bG9iYWxfcHJvcHMoLi4uKTsKICAgICAgIH0KICAgc28gSSBkb24ndCBoYXZlIHRvIGp1bXAgaW5z aWRlIG9mIG9iamVjdF9hcHBseV9nbG9iYWxfcHJvcHMoKSB0byBmaWd1cmUgb3V0CiAgIHRoYXQg aXQgaXMgbm90IGlmIHByb3BzIGFyZSBOVUxMCgozLiBJIHF1aXRlIGRpc2xpa2UgdXNpbmcgY3Vy cmVudF9tYWNoaW5lIGhlcmUuIE5vdCBzdXJlIHdoYXQgdG8gZG8gdGhvdWdoCiAgIG1heWJlIGlu IHBhcmFsbGVsIHRvIGdsb2JhbF9wcm9wcyBjcmVhdGUgYSBjb21wYXRfcHJvcHMgcmVnaXN0cnkg d291bGQgYmUgYmV0dGVyOgogICBody9jb3JlL3FkZXYtcHJvcGVydGllcy5jOgogICAgICAgc3Rh dGljIEdMaXN0ICpnbG9iYWxfcHJvcHM7CiAgICAgKyBzdGF0aWMgR0xpc3QgKmNvbXBhdF9wcm9w czsKICAgeW91IHdvbid0IHBvaXNvbiBkZXZpY2UgbW9kZWwgd2l0aCBhY2Nlc3MgdG8gaGlnaGVy IGxldmVsIG9iamVjdCBhbmQKICAgdGhlcmUgd291bGQgYmUgbm8gbmVlZCBmb3IgYSBzdHViLgoK PiArICAgIH0KPiArCj4gICAgICBxZGV2X3Byb3Bfc2V0X2dsb2JhbHMoREVWSUNFKG9iaikpOwo+ ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9ody94ZW4veGVuLWNvbW1vbi5jIGIvaHcveGVuL3hlbi1j b21tb24uYwo+IGluZGV4IDZlYzE0YzczY2EuLmQxZWY3YTUzY2MgMTAwNjQ0Cj4gLS0tIGEvaHcv eGVuL3hlbi1jb21tb24uYwo+ICsrKyBiL2h3L3hlbi94ZW4tY29tbW9uLmMKPiBAQCAtMTgxLDEx ICsxODEsMTggQEAgc3RhdGljIEdsb2JhbFByb3BlcnR5IHhlbl9jb21wYXRfcHJvcHNbXSA9IHsK PiAgc3RhdGljIHZvaWQgeGVuX2FjY2VsX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKm9jLCB2b2lk ICpkYXRhKQo+ICB7Cj4gICAgICBBY2NlbENsYXNzICphYyA9IEFDQ0VMX0NMQVNTKG9jKTsKPiAr ICAgIGludCBpOwo+ICsKPiAgICAgIGFjLT5uYW1lID0gIlhlbiI7Cj4gICAgICBhYy0+aW5pdF9t YWNoaW5lID0geGVuX2luaXQ7Cj4gICAgICBhYy0+c2V0dXBfcG9zdCA9IHhlbl9zZXR1cF9wb3N0 Owo+ICAgICAgYWMtPmFsbG93ZWQgPSAmeGVuX2FsbG93ZWQ7Cj4gLSAgICBhYy0+Z2xvYmFsX3By b3BzID0geGVuX2NvbXBhdF9wcm9wczsKPiArCj4gKyAgICBhYy0+Y29tcGF0X3Byb3BzID0gZ19h cnJheV9uZXcoZmFsc2UsIGZhbHNlLCBzaXplb2Yodm9pZCAqKSk7Cj4gKyAgICBmb3IgKGkgPSAw OyB4ZW5fY29tcGF0X3Byb3BzW2ldLmRyaXZlciAhPSBOVUxMOyBpKyspIHsKPiArICAgICAgICBH bG9iYWxQcm9wZXJ0eSAqcHJvcCA9ICZ4ZW5fY29tcGF0X3Byb3BzW2ldOwo+ICsgICAgICAgIGdf YXJyYXlfYXBwZW5kX3ZhbChhYy0+Y29tcGF0X3Byb3BzLCBwcm9wKTsKPiArICAgIH0KPiAgfQo+ ICAKPiAgI2RlZmluZSBUWVBFX1hFTl9BQ0NFTCBBQ0NFTF9DTEFTU19OQU1FKCJ4ZW4iKQo+IGRp ZmYgLS1naXQgYS9xb20vb2JqZWN0LmMgYi9xb20vb2JqZWN0LmMKPiBpbmRleCBlYjc3MGRiZjdm Li45YWNkZjllMTZkIDEwMDY0NAo+IC0tLSBhL3FvbS9vYmplY3QuYwo+ICsrKyBiL3FvbS9vYmpl Y3QuYwo+IEBAIC0zNzIsNiArMzcyLDMxIEBAIHN0YXRpYyB2b2lkIG9iamVjdF9wb3N0X2luaXRf d2l0aF90eXBlKE9iamVjdCAqb2JqLCBUeXBlSW1wbCAqdGkpCj4gICAgICB9Cj4gIH0KPiAgCj4g K3ZvaWQgb2JqZWN0X2FwcGx5X2dsb2JhbF9wcm9wcyhPYmplY3QgKm9iaiwgR0FycmF5ICpwcm9w cywgRXJyb3IgKiplcnJwKQo+ICt7Cj4gKyAgICBFcnJvciAqZXJyID0gTlVMTDsKPiArICAgIGlu dCBpOwo+ICsKPiArICAgIGlmICghcHJvcHMpIHsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9 Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IHByb3BzLT5sZW47IGkrKykgewo+ICsgICAgICAg IEdsb2JhbFByb3BlcnR5ICpwID0gZ19hcnJheV9pbmRleChwcm9wcywgR2xvYmFsUHJvcGVydHkg KiwgaSk7Cj4gKwo+ICsgICAgICAgIGlmIChvYmplY3RfZHluYW1pY19jYXN0KG9iaiwgcC0+ZHJp dmVyKSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0KPiAr ICAgICAgICBwLT51c2VkID0gdHJ1ZTsKPiArICAgICAgICBvYmplY3RfcHJvcGVydHlfcGFyc2Uo b2JqLCBwLT52YWx1ZSwgcC0+cHJvcGVydHksICZlcnIpOwo+ICsgICAgICAgIGlmIChlcnIgIT0g TlVMTCkgewo+ICsgICAgICAgICAgICBlcnJvcl9wcmVwZW5kKCZlcnIsICJjYW4ndCBhcHBseSBn bG9iYWwgJXMuJXM9JXM6ICIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZHJpdmVy LCBwLT5wcm9wZXJ0eSwgcC0+dmFsdWUpOwo+ICsgICAgICAgICAgICBlcnJvcl9wcm9wYWdhdGUo ZXJycCwgZXJyKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lk IG9iamVjdF9pbml0aWFsaXplX3dpdGhfdHlwZSh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgVHlw ZUltcGwgKnR5cGUpCj4gIHsKPiAgICAgIE9iamVjdCAqb2JqID0gZGF0YTsKPiBkaWZmIC0tZ2l0 IGEvc3R1YnMvbWFjaGluZS5jIGIvc3R1YnMvbWFjaGluZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwLi41MWQ0MGZkNjc3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L3N0dWJzL21hY2hpbmUuYwo+IEBAIC0wLDAgKzEsNCBAQAo+ICsjaW5jbHVkZSAicWVtdS9vc2Rl cC5oIgo+ICsjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKPiArCj4gK01hY2hpbmVDbGFzcyAqY3Vy cmVudF9tYWNoaW5lOwo+IGRpZmYgLS1naXQgYS90ZXN0cy90ZXN0LXFkZXYtZ2xvYmFsLXByb3Bz LmMgYi90ZXN0cy90ZXN0LXFkZXYtZ2xvYmFsLXByb3BzLmMKPiBpbmRleCBiMWViNTA1NDQyLi4z YThkMzE3MGEwIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL3Rlc3QtcWRldi1nbG9iYWwtcHJvcHMuYwo+ ICsrKyBiL3Rlc3RzL3Rlc3QtcWRldi1nbG9iYWwtcHJvcHMuYwo+IEBAIC0yOCw3ICsyOCw2IEBA Cj4gICNpbmNsdWRlICJxb20vb2JqZWN0LmgiCj4gICNpbmNsdWRlICJxYXBpL3Zpc2l0b3IuaCIK PiAgCj4gLQp1bnJlbGF0ZWQgY2hhbmdlCgo+ICAjZGVmaW5lIFRZUEVfU1RBVElDX1BST1BTICJz dGF0aWNfcHJvcF90eXBlIgo+ICAjZGVmaW5lIFNUQVRJQ19UWVBFKG9iaikgXAo+ICAgICAgT0JK RUNUX0NIRUNLKE15VHlwZSwgKG9iaiksIFRZUEVfU1RBVElDX1BST1BTKQo+IGRpZmYgLS1naXQg YS92bC5jIGIvdmwuYwo+IGluZGV4IDU1YmFiMDA1YjYuLjJhZWE4ODRjOWQgMTAwNjQ0Cj4gLS0t IGEvdmwuYwo+ICsrKyBiL3ZsLmMKPiBAQCAtMjk2Myw4ICsyOTYzLDYgQEAgc3RhdGljIHZvaWQg dXNlcl9yZWdpc3Rlcl9nbG9iYWxfcHJvcHModm9pZCkKPiAgICovCj4gIHN0YXRpYyB2b2lkIHJl Z2lzdGVyX2dsb2JhbF9wcm9wZXJ0aWVzKE1hY2hpbmVTdGF0ZSAqbXMpCj4gIHsKPiAtICAgIGFj Y2VsX3JlZ2lzdGVyX2NvbXBhdF9wcm9wcyhtcy0+YWNjZWxlcmF0b3IpOwo+IC0gICAgbWFjaGlu ZV9yZWdpc3Rlcl9jb21wYXRfcHJvcHMobXMpOwo+ICAgICAgdXNlcl9yZWdpc3Rlcl9nbG9iYWxf cHJvcHMoKTsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvc3R1YnMvTWFrZWZpbGUub2JqcyBiL3N0 dWJzL01ha2VmaWxlLm9ianMKPiBpbmRleCA1ZGQwYWVlZWM2Li42Y2UzM2FlNDZmIDEwMDY0NAo+ IC0tLSBhL3N0dWJzL01ha2VmaWxlLm9ianMKPiArKysgYi9zdHVicy9NYWtlZmlsZS5vYmpzCj4g QEAgLTE4LDYgKzE4LDcgQEAgc3R1Yi1vYmoteSArPSBpb3RocmVhZC1sb2NrLm8KPiAgc3R1Yi1v YmoteSArPSBpcy1kYWVtb25pemVkLm8KPiAgc3R1Yi1vYmotJChDT05GSUdfTElOVVhfQUlPKSAr PSBsaW51eC1haW8ubwo+ICBzdHViLW9iai15ICs9IG1hY2hpbmUtaW5pdC1kb25lLm8KPiArc3R1 Yi1vYmoteSArPSBtYWNoaW5lLm8KPiAgc3R1Yi1vYmoteSArPSBtaWdyLWJsb2NrZXIubwo+ICBz dHViLW9iai15ICs9IGNoYW5nZS1zdGF0ZS1oYW5kbGVyLm8KPiAgc3R1Yi1vYmoteSArPSBtb25p dG9yLm8KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs