From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-1.mimecast.com ([207.211.31.81]:51364 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727008AbfJXUpQ (ORCPT ); Thu, 24 Oct 2019 16:45:16 -0400 Date: Thu, 24 Oct 2019 14:44:49 -0600 From: Alex Williamson Subject: Re: [PATCH V5 4/6] mdev: introduce virtio device and its device ops Message-ID: <20191024144449.626d560b@x1.home> In-Reply-To: <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> References: <20191023130752.18980-1-jasowang@redhat.com> <20191023130752.18980-5-jasowang@redhat.com> <20191023155728.2a55bc71@x1.home> <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Sender: linux-s390-owner@vger.kernel.org List-ID: To: Jason Wang Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, mst@redhat.com, tiwei.bie@intel.com, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com On Thu, 24 Oct 2019 11:51:35 +0800 Jason Wang wrote: > On 2019/10/24 =E4=B8=8A=E5=8D=885:57, Alex Williamson wrote: > > On Wed, 23 Oct 2019 21:07:50 +0800 > > Jason Wang wrote: > > =20 > >> This patch implements basic support for mdev driver that supports > >> virtio transport for kernel virtio driver. > >> > >> Signed-off-by: Jason Wang > >> --- > >> drivers/vfio/mdev/mdev_core.c | 20 ++++ > >> drivers/vfio/mdev/mdev_private.h | 2 + > >> include/linux/mdev.h | 6 ++ > >> include/linux/virtio_mdev_ops.h | 159 +++++++++++++++++++++++++++++= ++ > >> 4 files changed, 187 insertions(+) > >> create mode 100644 include/linux/virtio_mdev_ops.h > >> > >> diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_co= re.c > >> index 555bd61d8c38..9b00c3513120 100644 > >> --- a/drivers/vfio/mdev/mdev_core.c > >> +++ b/drivers/vfio/mdev/mdev_core.c > >> @@ -76,6 +76,26 @@ const struct vfio_mdev_device_ops *mdev_get_vfio_op= s(struct mdev_device *mdev) > >> } > >> EXPORT_SYMBOL(mdev_get_vfio_ops); > >> =20 > >> +/* Specify the virtio device ops for the mdev device, this > >> + * must be called during create() callback for virtio mdev device. > >> + */ > >> +void mdev_set_virtio_ops(struct mdev_device *mdev, > >> +=09=09=09 const struct virtio_mdev_device_ops *virtio_ops) > >> +{ > >> +=09mdev_set_class(mdev, MDEV_CLASS_ID_VIRTIO); > >> +=09mdev->virtio_ops =3D virtio_ops; > >> +} > >> +EXPORT_SYMBOL(mdev_set_virtio_ops); > >> + > >> +/* Get the virtio device ops for the mdev device. */ > >> +const struct virtio_mdev_device_ops * > >> +mdev_get_virtio_ops(struct mdev_device *mdev) > >> +{ > >> +=09WARN_ON(mdev->class_id !=3D MDEV_CLASS_ID_VIRTIO); > >> +=09return mdev->virtio_ops; > >> +} > >> +EXPORT_SYMBOL(mdev_get_virtio_ops); > >> + > >> struct device *mdev_dev(struct mdev_device *mdev) > >> { > >> =09return &mdev->dev; > >> diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev= _private.h > >> index 0770410ded2a..7b47890c34e7 100644 > >> --- a/drivers/vfio/mdev/mdev_private.h > >> +++ b/drivers/vfio/mdev/mdev_private.h > >> @@ -11,6 +11,7 @@ > >> #define MDEV_PRIVATE_H > >> =20 > >> #include > >> +#include > >> =20 > >> int mdev_bus_register(void); > >> void mdev_bus_unregister(void); > >> @@ -38,6 +39,7 @@ struct mdev_device { > >> =09u16 class_id; > >> =09union { > >> =09=09const struct vfio_mdev_device_ops *vfio_ops; > >> +=09=09const struct virtio_mdev_device_ops *virtio_ops; > >> =09}; > >> }; > >> =20 > >> diff --git a/include/linux/mdev.h b/include/linux/mdev.h > >> index 4625f1a11014..9b69b0bbebfd 100644 > >> --- a/include/linux/mdev.h > >> +++ b/include/linux/mdev.h > >> @@ -17,6 +17,7 @@ > >> =20 > >> struct mdev_device; > >> struct vfio_mdev_device_ops; > >> +struct virtio_mdev_device_ops; > >> =20 > >> /* > >> * Called by the parent device driver to set the device which repres= ents > >> @@ -112,6 +113,10 @@ void mdev_set_class(struct mdev_device *mdev, u16= id); > >> void mdev_set_vfio_ops(struct mdev_device *mdev, > >> =09=09 const struct vfio_mdev_device_ops *vfio_ops); > >> const struct vfio_mdev_device_ops *mdev_get_vfio_ops(struct mdev_dev= ice *mdev); > >> +void mdev_set_virtio_ops(struct mdev_device *mdev, > >> +=09=09=09 const struct virtio_mdev_device_ops *virtio_ops); > >> +const struct virtio_mdev_device_ops * > >> +mdev_get_virtio_ops(struct mdev_device *mdev); > >> =20 > >> extern struct bus_type mdev_bus_type; > >> =20 > >> @@ -127,6 +132,7 @@ struct mdev_device *mdev_from_dev(struct device *d= ev); > >> =20 > >> enum { > >> =09MDEV_CLASS_ID_VFIO =3D 1, > >> +=09MDEV_CLASS_ID_VIRTIO =3D 2, > >> =09/* New entries must be added here */ > >> }; > >> =20 > >> diff --git a/include/linux/virtio_mdev_ops.h b/include/linux/virtio_md= ev_ops.h > >> new file mode 100644 > >> index 000000000000..d417b41f2845 > >> --- /dev/null > >> +++ b/include/linux/virtio_mdev_ops.h > >> @@ -0,0 +1,159 @@ > >> +/* SPDX-License-Identifier: GPL-2.0-only */ > >> +/* > >> + * Virtio mediated device driver > >> + * > >> + * Copyright 2019, Red Hat Corp. > >> + * Author: Jason Wang > >> + */ > >> +#ifndef _LINUX_VIRTIO_MDEV_H > >> +#define _LINUX_VIRTIO_MDEV_H > >> + > >> +#include > >> +#include > >> +#include > >> + > >> +#define VIRTIO_MDEV_DEVICE_API_STRING=09=09"virtio-mdev" > >> +#define VIRTIO_MDEV_F_VERSION_1 0x1 > >> + > >> +struct virtio_mdev_callback { > >> +=09irqreturn_t (*callback)(void *data); > >> +=09void *private; > >> +}; > >> + > >> +/** > >> + * struct vfio_mdev_device_ops - Structure to be registered for each > >> + * mdev device to register the device for virtio/vhost drivers. > >> + * > >> + * The device ops that is supported by VIRTIO_MDEV_F_VERSION_1, the > >> + * callbacks are mandatory unless explicity mentioned. =20 > > If the version of the callbacks is returned by a callback within the > > structure defined by the version... isn't that a bit circular? This > > seems redundant to me versus the class id. The fact that the parent > > driver defines the device as MDEV_CLASS_ID_VIRTIO should tell us this > > already. If it was incremented, we'd need an MDEV_CLASS_ID_VIRTIOv2, > > which the virtio-mdev bus driver could add to its id table and handle > > differently. =20 >=20 >=20 > My understanding is versions are only allowed to increase monotonically,= =20 > this seems less flexible than features. E.g we have features A, B, C,=20 > mdev device can choose to support only a subset. E.g when mdev device=20 > can support dirty page logging, it can add a new feature bit for driver= =20 > to know that it support new device ops. MDEV_CLASS_ID_VIRTIOv2 may only= =20 > be useful when we will invent a complete new API. But this interface rather conflates features and versions by returning a version as a feature. If we simply want to say that there are no additional features, then get_mdev_features() should return an empty set. If dirty page logging is a feature, then I'd expect a bit in the get_mdev_features() return value to identify that feature. However, I've been under the impression (perhaps wrongly) that the class-id has a 1:1 correlation to the device-ops exposed to the bus driver, so if dirty page logging requires extra callbacks, that would imply a new device-ops, which requires a new class-id. In that case virtio-mdev would claim both class-ids and would need some way to differentiate them. But I also see that such a solution can become unmanageable as the set of class-ids would need to encompass every combination of features. So I think what's suggested by this is that the initial struct virtio_mdev_device_ops is a base set of callbacks which would be extended via features? But then why does get_generation() not make use of this? And if we can define get_generation() as optional and simply test if it's implemented, then it seems we don't need any feature bits to extend the structure (unless we're looking at binary compatibility). So maybe get_mdev_features() is meant to expose underlying features unrelated to the callbacks? Which is not in line with the description? Hopefully you can see my confusion in what we're trying to do here. Thanks, Alex > >> + * > >> + * @set_vq_address:=09=09Set the address of virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09@desc_area: address of desc area > >> + *=09=09=09=09@driver_area: address of driver area > >> + *=09=09=09=09@device_area: address of device area > >> + *=09=09=09=09Returns integer: success (0) or error (< 0) > >> + * @set_vq_num:=09=09=09Set the size of virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09@num: the size of virtqueue > >> + * @kick_vq:=09=09=09Kick the virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + * @set_vq_cb:=09=09=09Set the interrupt callback function for > >> + *=09=09=09=09a virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09@cb: virtio-mdev interrupt callback structure > >> + * @set_vq_ready:=09=09Set ready status for a virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09@ready: ready (true) not ready(false) > >> + * @get_vq_ready:=09=09Get ready status for a virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09Returns boolean: ready (true) or not (false) > >> + * @set_vq_state:=09=09Set the state for a virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09@state: virtqueue state (last_avail_idx) > >> + *=09=09=09=09Returns integer: success (0) or error (< 0) > >> + * @get_vq_state:=09=09Get the state for a virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@idx: virtqueue index > >> + *=09=09=09=09Returns virtqueue state (last_avail_idx) > >> + * @get_vq_align:=09=09Get the virtqueue align requirement > >> + *=09=09=09=09for the device > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns virtqueue algin requirement > >> + * @get_features:=09=09Get virtio features supported by the device > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns the virtio features support by the > >> + *=09=09=09=09device > >> + * @get_features:=09=09Set virtio features supported by the driver = =20 > > ^ s/g/s/ > > > > Thanks, > > Alex =20 >=20 >=20 > Will fix. >=20 > Thanks >=20 >=20 > > =20 > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@features: feature support by the driver > >> + *=09=09=09=09Returns integer: success (0) or error (< 0) > >> + * @set_config_cb:=09=09Set the config interrupt callback > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@cb: virtio-mdev interrupt callback structure > >> + * @get_vq_num_max:=09=09Get the max size of virtqueue > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns u16: max size of virtqueue > >> + * @get_device_id:=09=09Get virtio device id > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns u32: virtio device id > >> + * @get_vendor_id:=09=09Get id for the vendor that provides this devi= ce > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns u32: virtio vendor id > >> + * @get_status:=09=09=09Get the device status > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns u8: virtio device status > >> + * @set_status:=09=09=09Set the device status > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@status: virtio device status > >> + * @get_config:=09=09=09Read from device specific configuration space > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@offset: offset from the beginning of > >> + *=09=09=09=09configuration space > >> + *=09=09=09=09@buf: buffer used to read to > >> + *=09=09=09=09@len: the length to read from > >> + *=09=09=09=09configration space > >> + * @set_config:=09=09=09Write to device specific configuration space > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09@offset: offset from the beginning of > >> + *=09=09=09=09configuration space > >> + *=09=09=09=09@buf: buffer used to write from > >> + *=09=09=09=09@len: the length to write to > >> + *=09=09=09=09configration space > >> + * @get_mdev_features:=09=09Get a set of bits that demonstrate > >> + *=09=09=09=09thecapability of the mdev device. New > >> + *=09=09=09=09features bits must be added when > >> + *=09=09=09=09introducing new device ops. > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns the mdev features (API) support by > >> + *=09=09=09=09the device. > >> + * @get_generation:=09=09Get device config generaton (optionally) > >> + *=09=09=09=09@mdev: mediated device > >> + *=09=09=09=09Returns u32: device generation > >> + */ > >> +struct virtio_mdev_device_ops { > >> +=09/* Virtqueue ops */ > >> +=09int (*set_vq_address)(struct mdev_device *mdev, > >> +=09=09=09 u16 idx, u64 desc_area, u64 driver_area, > >> +=09=09=09 u64 device_area); > >> +=09void (*set_vq_num)(struct mdev_device *mdev, u16 idx, u32 num); > >> +=09void (*kick_vq)(struct mdev_device *mdev, u16 idx); > >> +=09void (*set_vq_cb)(struct mdev_device *mdev, u16 idx, > >> +=09=09=09 struct virtio_mdev_callback *cb); > >> +=09void (*set_vq_ready)(struct mdev_device *mdev, u16 idx, bool ready= ); > >> +=09bool (*get_vq_ready)(struct mdev_device *mdev, u16 idx); > >> +=09int (*set_vq_state)(struct mdev_device *mdev, u16 idx, u64 state); > >> +=09u64 (*get_vq_state)(struct mdev_device *mdev, u16 idx); > >> + > >> +=09/* Virtio device ops */ > >> +=09u16 (*get_vq_align)(struct mdev_device *mdev); > >> +=09u64 (*get_features)(struct mdev_device *mdev); > >> +=09int (*set_features)(struct mdev_device *mdev, u64 features); > >> +=09void (*set_config_cb)(struct mdev_device *mdev, > >> +=09=09=09 struct virtio_mdev_callback *cb); > >> +=09u16 (*get_vq_num_max)(struct mdev_device *mdev); > >> +=09u32 (*get_device_id)(struct mdev_device *mdev); > >> +=09u32 (*get_vendor_id)(struct mdev_device *mdev); > >> +=09u8 (*get_status)(struct mdev_device *mdev); > >> +=09void (*set_status)(struct mdev_device *mdev, u8 status); > >> +=09void (*get_config)(struct mdev_device *mdev, unsigned int offset, > >> +=09=09=09 void *buf, unsigned int len); > >> +=09void (*set_config)(struct mdev_device *mdev, unsigned int offset, > >> +=09=09=09 const void *buf, unsigned int len); > >> +=09u32 (*get_generation)(struct mdev_device *mdev); > >> + > >> +=09/* Mdev device ops */ > >> +=09u64 (*get_mdev_features)(struct mdev_device *mdev); > >> +}; > >> + > >> +void mdev_set_virtio_ops(struct mdev_device *mdev, > >> +=09=09=09 const struct virtio_mdev_device_ops *virtio_ops); > >> + > >> +#endif =20 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: [PATCH V5 4/6] mdev: introduce virtio device and its device ops Date: Thu, 24 Oct 2019 14:44:49 -0600 Message-ID: <20191024144449.626d560b@x1.home> References: <20191023130752.18980-1-jasowang@redhat.com> <20191023130752.18980-5-jasowang@redhat.com> <20191023155728.2a55bc71@x1.home> <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jason Wang Cc: stefanha@redhat.com, christophe.de.dinechin@gmail.com, kvm@vger.kernel.org, mst@redhat.com, airlied@linux.ie, heiko.carstens@de.ibm.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, kwankhede@nvidia.com, rob.miller@broadcom.com, linux-s390@vger.kernel.org, sebott@linux.ibm.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, cunming.liang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, intel-gfx@lists.freedesktop.org, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, intel-gvt-dev@lists.freedesktop.org, akrowiak@linux.ibm.com, oberpar@linux.ibm.com, tiwei.bie@intel.com, netdev@vger.kernel.org, cohuck@redhat.com, linux-kernel@vger.kernel.org, maxime.coquelin@redhat.com, lingshan.zhu@intel.com List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCAyNCBPY3QgMjAxOSAxMTo1MTozNSArMDgwMApKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKCj4gT24gMjAxOS8xMC8yNCDkuIrljYg1OjU3LCBBbGV4IFdpbGxp YW1zb24gd3JvdGU6Cj4gPiBPbiBXZWQsIDIzIE9jdCAyMDE5IDIxOjA3OjUwICswODAwCj4gPiBK YXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+ICAKPiA+PiBUaGlzIHBh dGNoIGltcGxlbWVudHMgYmFzaWMgc3VwcG9ydCBmb3IgbWRldiBkcml2ZXIgdGhhdCBzdXBwb3J0 cwo+ID4+IHZpcnRpbyB0cmFuc3BvcnQgZm9yIGtlcm5lbCB2aXJ0aW8gZHJpdmVyLgo+ID4+Cj4g Pj4gU2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KPiA+PiAt LS0KPiA+PiAgIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIwICsrKysKPiA+ PiAgIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oIHwgICAyICsKPiA+PiAgIGluY2x1 ZGUvbGludXgvbWRldi5oICAgICAgICAgICAgIHwgICA2ICsrCj4gPj4gICBpbmNsdWRlL2xpbnV4 L3ZpcnRpb19tZGV2X29wcy5oICB8IDE1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPj4gICA0IGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspCj4gPj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC92aXJ0aW9fbWRldl9vcHMuaAo+ID4+Cj4gPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jIGIvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9jb3JlLmMKPiA+PiBpbmRleCA1NTViZDYxZDhjMzguLjliMDBjMzUxMzEyMCAxMDA2 NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwo+ID4+ICsrKyBiL2Ry aXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCj4gPj4gQEAgLTc2LDYgKzc2LDI2IEBAIGNvbnN0 IHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNlX29wcyAqbWRldl9nZXRfdmZpb19vcHMoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2KQo+ID4+ICAgfQo+ID4+ICAgRVhQT1JUX1NZTUJPTChtZGV2X2dldF92 ZmlvX29wcyk7Cj4gPj4gICAKPiA+PiArLyogU3BlY2lmeSB0aGUgdmlydGlvIGRldmljZSBvcHMg Zm9yIHRoZSBtZGV2IGRldmljZSwgdGhpcwo+ID4+ICsgKiBtdXN0IGJlIGNhbGxlZCBkdXJpbmcg Y3JlYXRlKCkgY2FsbGJhY2sgZm9yIHZpcnRpbyBtZGV2IGRldmljZS4KPiA+PiArICovCj4gPj4g K3ZvaWQgbWRldl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4g KwkJCSBjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlvX29wcykKPiA+ PiArewo+ID4+ICsJbWRldl9zZXRfY2xhc3MobWRldiwgTURFVl9DTEFTU19JRF9WSVJUSU8pOwo+ ID4+ICsJbWRldi0+dmlydGlvX29wcyA9IHZpcnRpb19vcHM7Cj4gPj4gK30KPiA+PiArRVhQT1JU X1NZTUJPTChtZGV2X3NldF92aXJ0aW9fb3BzKTsKPiA+PiArCj4gPj4gKy8qIEdldCB0aGUgdmly dGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZS4gKi8KPiA+PiArY29uc3Qgc3RydWN0 IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKgo+ID4+ICttZGV2X2dldF92aXJ0aW9fb3BzKHN0cnVj dCBtZGV2X2RldmljZSAqbWRldikKPiA+PiArewo+ID4+ICsJV0FSTl9PTihtZGV2LT5jbGFzc19p ZCAhPSBNREVWX0NMQVNTX0lEX1ZJUlRJTyk7Cj4gPj4gKwlyZXR1cm4gbWRldi0+dmlydGlvX29w czsKPiA+PiArfQo+ID4+ICtFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZpcnRpb19vcHMpOwo+ID4+ ICsKPiA+PiAgIHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dikKPiA+PiAgIHsKPiA+PiAgIAlyZXR1cm4gJm1kZXYtPmRldjsKPiA+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2 X3ByaXZhdGUuaAo+ID4+IGluZGV4IDA3NzA0MTBkZWQyYS4uN2I0Nzg5MGMzNGU3IDEwMDY0NAo+ ID4+IC0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCj4gPj4gKysrIGIvZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKPiA+PiBAQCAtMTEsNiArMTEsNyBAQAo+ID4+ ICAgI2RlZmluZSBNREVWX1BSSVZBVEVfSAo+ID4+ICAgCj4gPj4gICAjaW5jbHVkZSA8bGludXgv dmZpb19tZGV2X29wcy5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX21kZXZfb3BzLmg+ Cj4gPj4gICAKPiA+PiAgIGludCAgbWRldl9idXNfcmVnaXN0ZXIodm9pZCk7Cj4gPj4gICB2b2lk IG1kZXZfYnVzX3VucmVnaXN0ZXIodm9pZCk7Cj4gPj4gQEAgLTM4LDYgKzM5LDcgQEAgc3RydWN0 IG1kZXZfZGV2aWNlIHsKPiA+PiAgIAl1MTYgY2xhc3NfaWQ7Cj4gPj4gICAJdW5pb24gewo+ID4+ ICAgCQljb25zdCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzOwo+ID4+ICsJ CWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzOwo+ID4+ICAg CX07Cj4gPj4gICB9Owo+ID4+ICAgCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRl di5oIGIvaW5jbHVkZS9saW51eC9tZGV2LmgKPiA+PiBpbmRleCA0NjI1ZjFhMTEwMTQuLjliNjli MGJiZWJmZCAxMDA2NDQKPiA+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAo+ID4+ICsrKyBi L2luY2x1ZGUvbGludXgvbWRldi5oCj4gPj4gQEAgLTE3LDYgKzE3LDcgQEAKPiA+PiAgIAo+ID4+ ICAgc3RydWN0IG1kZXZfZGV2aWNlOwo+ID4+ICAgc3RydWN0IHZmaW9fbWRldl9kZXZpY2Vfb3Bz Owo+ID4+ICtzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wczsKPiA+PiAgIAo+ID4+ICAgLyoK PiA+PiAgICAqIENhbGxlZCBieSB0aGUgcGFyZW50IGRldmljZSBkcml2ZXIgdG8gc2V0IHRoZSBk ZXZpY2Ugd2hpY2ggcmVwcmVzZW50cwo+ID4+IEBAIC0xMTIsNiArMTEzLDEwIEBAIHZvaWQgbWRl dl9zZXRfY2xhc3Moc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWQpOwo+ID4+ICAgdm9p ZCBtZGV2X3NldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4gICAJCSAg ICAgICBjb25zdCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzKTsKPiA+PiAg IGNvbnN0IHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNlX29wcyAqbWRldl9nZXRfdmZpb19vcHMoc3Ry dWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArdm9pZCBtZGV2X3NldF92aXJ0aW9fb3BzKHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiArCQkJIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRl dl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKTsKPiA+PiArY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2 X2RldmljZV9vcHMgKgo+ID4+ICttZGV2X2dldF92aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldik7Cj4gPj4gICAKPiA+PiAgIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNf dHlwZTsKPiA+PiAgIAo+ID4+IEBAIC0xMjcsNiArMTMyLDcgQEAgc3RydWN0IG1kZXZfZGV2aWNl ICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPj4gICAKPiA+PiAgIGVudW0g ewo+ID4+ICAgCU1ERVZfQ0xBU1NfSURfVkZJTyA9IDEsCj4gPj4gKwlNREVWX0NMQVNTX0lEX1ZJ UlRJTyA9IDIsCj4gPj4gICAJLyogTmV3IGVudHJpZXMgbXVzdCBiZSBhZGRlZCBoZXJlICovCj4g Pj4gICB9Owo+ID4+ICAgCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX21k ZXZfb3BzLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19tZGV2X29wcy5oCj4gPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ0MTdiNDFmMjg0NQo+ID4+IC0t LSAvZGV2L251bGwKPiA+PiArKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19tZGV2X29wcy5oCj4g Pj4gQEAgLTAsMCArMSwxNTkgQEAKPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seSAqLwo+ID4+ICsvKgo+ID4+ICsgKiBWaXJ0aW8gbWVkaWF0ZWQgZGV2aWNlIGRy aXZlcgo+ID4+ICsgKgo+ID4+ICsgKiBDb3B5cmlnaHQgMjAxOSwgUmVkIEhhdCBDb3JwLgo+ID4+ ICsgKiAgICAgQXV0aG9yOiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgo+ID4+ICsg Ki8KPiA+PiArI2lmbmRlZiBfTElOVVhfVklSVElPX01ERVZfSAo+ID4+ICsjZGVmaW5lIF9MSU5V WF9WSVJUSU9fTURFVl9ICj4gPj4gKwo+ID4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+Cj4gPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4 L3Zob3N0Lmg+Cj4gPj4gKwo+ID4+ICsjZGVmaW5lIFZJUlRJT19NREVWX0RFVklDRV9BUElfU1RS SU5HCQkidmlydGlvLW1kZXYiCj4gPj4gKyNkZWZpbmUgVklSVElPX01ERVZfRl9WRVJTSU9OXzEg MHgxCj4gPj4gKwo+ID4+ICtzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgewo+ID4+ICsJaXJx cmV0dXJuX3QgKCpjYWxsYmFjaykodm9pZCAqZGF0YSk7Cj4gPj4gKwl2b2lkICpwcml2YXRlOwo+ ID4+ICt9Owo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNl X29wcyAtIFN0cnVjdHVyZSB0byBiZSByZWdpc3RlcmVkIGZvciBlYWNoCj4gPj4gKyAqIG1kZXYg ZGV2aWNlIHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgZm9yIHZpcnRpby92aG9zdCBkcml2ZXJzLgo+ ID4+ICsgKgo+ID4+ICsgKiBUaGUgZGV2aWNlIG9wcyB0aGF0IGlzIHN1cHBvcnRlZCBieSBWSVJU SU9fTURFVl9GX1ZFUlNJT05fMSwgdGhlCj4gPj4gKyAqIGNhbGxiYWNrcyBhcmUgbWFuZGF0b3J5 IHVubGVzcyBleHBsaWNpdHkgbWVudGlvbmVkLiAgCj4gPiBJZiB0aGUgdmVyc2lvbiBvZiB0aGUg Y2FsbGJhY2tzIGlzIHJldHVybmVkIGJ5IGEgY2FsbGJhY2sgd2l0aGluIHRoZQo+ID4gc3RydWN0 dXJlIGRlZmluZWQgYnkgdGhlIHZlcnNpb24uLi4gaXNuJ3QgdGhhdCBhIGJpdCBjaXJjdWxhcj8g IFRoaXMKPiA+IHNlZW1zIHJlZHVuZGFudCB0byBtZSB2ZXJzdXMgdGhlIGNsYXNzIGlkLiAgVGhl IGZhY3QgdGhhdCB0aGUgcGFyZW50Cj4gPiBkcml2ZXIgZGVmaW5lcyB0aGUgZGV2aWNlIGFzIE1E RVZfQ0xBU1NfSURfVklSVElPIHNob3VsZCB0ZWxsIHVzIHRoaXMKPiA+IGFscmVhZHkuICBJZiBp dCB3YXMgaW5jcmVtZW50ZWQsIHdlJ2QgbmVlZCBhbiBNREVWX0NMQVNTX0lEX1ZJUlRJT3YyLAo+ ID4gd2hpY2ggdGhlIHZpcnRpby1tZGV2IGJ1cyBkcml2ZXIgY291bGQgYWRkIHRvIGl0cyBpZCB0 YWJsZSBhbmQgaGFuZGxlCj4gPiBkaWZmZXJlbnRseS4gIAo+IAo+IAo+IE15IHVuZGVyc3RhbmRp bmcgaXMgdmVyc2lvbnMgYXJlIG9ubHkgYWxsb3dlZCB0byBpbmNyZWFzZSBtb25vdG9uaWNhbGx5 LCAKPiB0aGlzIHNlZW1zIGxlc3MgZmxleGlibGUgdGhhbiBmZWF0dXJlcy4gRS5nIHdlIGhhdmUg ZmVhdHVyZXMgQSwgQiwgQywgCj4gbWRldiBkZXZpY2UgY2FuIGNob29zZSB0byBzdXBwb3J0IG9u bHkgYSBzdWJzZXQuIEUuZyB3aGVuIG1kZXYgZGV2aWNlIAo+IGNhbiBzdXBwb3J0IGRpcnR5IHBh Z2UgbG9nZ2luZywgaXQgY2FuIGFkZCBhIG5ldyBmZWF0dXJlIGJpdCBmb3IgZHJpdmVyIAo+IHRv IGtub3cgdGhhdCBpdCBzdXBwb3J0IG5ldyBkZXZpY2Ugb3BzLiBNREVWX0NMQVNTX0lEX1ZJUlRJ T3YyIG1heSBvbmx5IAo+IGJlIHVzZWZ1bCB3aGVuIHdlIHdpbGwgaW52ZW50IGEgY29tcGxldGUg bmV3IEFQSS4KCkJ1dCB0aGlzIGludGVyZmFjZSByYXRoZXIgY29uZmxhdGVzIGZlYXR1cmVzIGFu ZCB2ZXJzaW9ucyBieSByZXR1cm5pbmcKYSB2ZXJzaW9uIGFzIGEgZmVhdHVyZS4gIElmIHdlIHNp bXBseSB3YW50IHRvIHNheSB0aGF0IHRoZXJlIGFyZSBubwphZGRpdGlvbmFsIGZlYXR1cmVzLCB0 aGVuIGdldF9tZGV2X2ZlYXR1cmVzKCkgc2hvdWxkIHJldHVybiBhbiBlbXB0eQpzZXQuICBJZiBk aXJ0eSBwYWdlIGxvZ2dpbmcgaXMgYSBmZWF0dXJlLCB0aGVuIEknZCBleHBlY3QgYSBiaXQgaW4g dGhlCmdldF9tZGV2X2ZlYXR1cmVzKCkgcmV0dXJuIHZhbHVlIHRvIGlkZW50aWZ5IHRoYXQgZmVh dHVyZS4KCkhvd2V2ZXIsIEkndmUgYmVlbiB1bmRlciB0aGUgaW1wcmVzc2lvbiAocGVyaGFwcyB3 cm9uZ2x5KSB0aGF0IHRoZQpjbGFzcy1pZCBoYXMgYSAxOjEgY29ycmVsYXRpb24gdG8gdGhlIGRl dmljZS1vcHMgZXhwb3NlZCB0byB0aGUgYnVzCmRyaXZlciwgc28gaWYgZGlydHkgcGFnZSBsb2dn aW5nIHJlcXVpcmVzIGV4dHJhIGNhbGxiYWNrcywgdGhhdCB3b3VsZAppbXBseSBhIG5ldyBkZXZp Y2Utb3BzLCB3aGljaCByZXF1aXJlcyBhIG5ldyBjbGFzcy1pZC4gIEluIHRoYXQgY2FzZQp2aXJ0 aW8tbWRldiB3b3VsZCBjbGFpbSBib3RoIGNsYXNzLWlkcyBhbmQgd291bGQgbmVlZCBzb21lIHdh eSB0bwpkaWZmZXJlbnRpYXRlIHRoZW0uICBCdXQgSSBhbHNvIHNlZSB0aGF0IHN1Y2ggYSBzb2x1 dGlvbiBjYW4gYmVjb21lCnVubWFuYWdlYWJsZSBhcyB0aGUgc2V0IG9mIGNsYXNzLWlkcyB3b3Vs ZCBuZWVkIHRvIGVuY29tcGFzcyBldmVyeQpjb21iaW5hdGlvbiBvZiBmZWF0dXJlcy4KClNvIEkg dGhpbmsgd2hhdCdzIHN1Z2dlc3RlZCBieSB0aGlzIGlzIHRoYXQgdGhlIGluaXRpYWwgc3RydWN0 CnZpcnRpb19tZGV2X2RldmljZV9vcHMgaXMgYSBiYXNlIHNldCBvZiBjYWxsYmFja3Mgd2hpY2gg d291bGQgYmUKZXh0ZW5kZWQgdmlhIGZlYXR1cmVzPyAgQnV0IHRoZW4gd2h5IGRvZXMgZ2V0X2dl bmVyYXRpb24oKSBub3QgbWFrZSB1c2UKb2YgdGhpcz8gIEFuZCBpZiB3ZSBjYW4gZGVmaW5lIGdl dF9nZW5lcmF0aW9uKCkgYXMgb3B0aW9uYWwgYW5kIHNpbXBseQp0ZXN0IGlmIGl0J3MgaW1wbGVt ZW50ZWQsIHRoZW4gaXQgc2VlbXMgd2UgZG9uJ3QgbmVlZCBhbnkgZmVhdHVyZSBiaXRzCnRvIGV4 dGVuZCB0aGUgc3RydWN0dXJlICh1bmxlc3Mgd2UncmUgbG9va2luZyBhdCBiaW5hcnkgY29tcGF0 aWJpbGl0eSkuClNvIG1heWJlIGdldF9tZGV2X2ZlYXR1cmVzKCkgaXMgbWVhbnQgdG8gZXhwb3Nl IHVuZGVybHlpbmcgZmVhdHVyZXMKdW5yZWxhdGVkIHRvIHRoZSBjYWxsYmFja3M/ICBXaGljaCBp cyBub3QgaW4gbGluZSB3aXRoIHRoZSBkZXNjcmlwdGlvbj8KSG9wZWZ1bGx5IHlvdSBjYW4gc2Vl IG15IGNvbmZ1c2lvbiBpbiB3aGF0IHdlJ3JlIHRyeWluZyB0byBkbyBoZXJlLgpUaGFua3MsCgpB bGV4Cgo+ID4+ICsgKgo+ID4+ICsgKiBAc2V0X3ZxX2FkZHJlc3M6CQlTZXQgdGhlIGFkZHJlc3Mg b2YgdmlydHF1ZXVlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJ CQkJQGlkeDogdmlydHF1ZXVlIGluZGV4Cj4gPj4gKyAqCQkJCUBkZXNjX2FyZWE6IGFkZHJlc3Mg b2YgZGVzYyBhcmVhCj4gPj4gKyAqCQkJCUBkcml2ZXJfYXJlYTogYWRkcmVzcyBvZiBkcml2ZXIg YXJlYQo+ID4+ICsgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mgb2YgZGV2aWNlIGFyZWEKPiA+ PiArICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNjZXNzICgwKSBvciBlcnJvciAoPCAwKQo+ID4+ ICsgKiBAc2V0X3ZxX251bToJCQlTZXQgdGhlIHNpemUgb2YgdmlydHF1ZXVlCj4gPj4gKyAqCQkJ CUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4 Cj4gPj4gKyAqCQkJCUBudW06IHRoZSBzaXplIG9mIHZpcnRxdWV1ZQo+ID4+ICsgKiBAa2lja192 cToJCQlLaWNrIHRoZSB2aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmlj ZQo+ID4+ICsgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiArICogQHNldF92cV9jYjoJ CQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IKPiA+PiArICoJCQkJYSB2 aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlA aWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiArICoJCQkJQGNiOiB2aXJ0aW8tbWRldiBpbnRlcnJ1 cHQgY2FsbGJhY2sgc3RydWN0dXJlCj4gPj4gKyAqIEBzZXRfdnFfcmVhZHk6CQlTZXQgcmVhZHkg c3RhdHVzIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNl Cj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ID4+ICsgKgkJCQlAcmVhZHk6IHJl YWR5ICh0cnVlKSBub3QgcmVhZHkoZmFsc2UpCj4gPj4gKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQg cmVhZHkgc3RhdHVzIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQg ZGV2aWNlCj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ID4+ICsgKgkJCQlSZXR1 cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBub3QgKGZhbHNlKQo+ID4+ICsgKiBAc2V0X3Zx X3N0YXRlOgkJU2V0IHRoZSBzdGF0ZSBmb3IgYSB2aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6 IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiAr ICoJCQkJQHN0YXRlOiB2aXJ0cXVldWUgc3RhdGUgKGxhc3RfYXZhaWxfaWR4KQo+ID4+ICsgKgkJ CQlSZXR1cm5zIGludGVnZXI6IHN1Y2Nlc3MgKDApIG9yIGVycm9yICg8IDApCj4gPj4gKyAqIEBn ZXRfdnFfc3RhdGU6CQlHZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlA bWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ ID4+ICsgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBzdGF0ZSAobGFzdF9hdmFpbF9pZHgpCj4gPj4g KyAqIEBnZXRfdnFfYWxpZ246CQlHZXQgdGhlIHZpcnRxdWV1ZSBhbGlnbiByZXF1aXJlbWVudAo+ ID4+ICsgKgkJCQlmb3IgdGhlIGRldmljZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2 aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdmlydHF1ZXVlIGFsZ2luIHJlcXVpcmVtZW50Cj4gPj4g KyAqIEBnZXRfZmVhdHVyZXM6CQlHZXQgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUg ZGV2aWNlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJUmV0 dXJucyB0aGUgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnQgYnkgdGhlCj4gPj4gKyAqCQkJCWRldmlj ZQo+ID4+ICsgKiBAZ2V0X2ZlYXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQg YnkgdGhlIGRyaXZlciAgCj4gPiAgICAgICAgIF4gcy9nL3MvCj4gPgo+ID4gVGhhbmtzLAo+ID4g QWxleCAgCj4gCj4gCj4gV2lsbCBmaXguCj4gCj4gVGhhbmtzCj4gCj4gCj4gPiAgCj4gPj4gKyAq CQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJQGZlYXR1cmVzOiBmZWF0dXJl IHN1cHBvcnQgYnkgdGhlIGRyaXZlcgo+ID4+ICsgKgkJCQlSZXR1cm5zIGludGVnZXI6IHN1Y2Nl c3MgKDApIG9yIGVycm9yICg8IDApCj4gPj4gKyAqIEBzZXRfY29uZmlnX2NiOgkJU2V0IHRoZSBj b25maWcgaW50ZXJydXB0IGNhbGxiYWNrCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKPiA+PiArICoJCQkJQGNiOiB2aXJ0aW8tbWRldiBpbnRlcnJ1cHQgY2FsbGJhY2sgc3RydWN0 dXJlCj4gPj4gKyAqIEBnZXRfdnFfbnVtX21heDoJCUdldCB0aGUgbWF4IHNpemUgb2YgdmlydHF1 ZXVlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJUmV0dXJu cyB1MTY6IG1heCBzaXplIG9mIHZpcnRxdWV1ZQo+ID4+ICsgKiBAZ2V0X2RldmljZV9pZDoJCUdl dCB2aXJ0aW8gZGV2aWNlIGlkCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+ PiArICoJCQkJUmV0dXJucyB1MzI6IHZpcnRpbyBkZXZpY2UgaWQKPiA+PiArICogQGdldF92ZW5k b3JfaWQ6CQlHZXQgaWQgZm9yIHRoZSB2ZW5kb3IgdGhhdCBwcm92aWRlcyB0aGlzIGRldmljZQo+ ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdTMy OiB2aXJ0aW8gdmVuZG9yIGlkCj4gPj4gKyAqIEBnZXRfc3RhdHVzOgkJCUdldCB0aGUgZGV2aWNl IHN0YXR1cwo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJl dHVybnMgdTg6IHZpcnRpbyBkZXZpY2Ugc3RhdHVzCj4gPj4gKyAqIEBzZXRfc3RhdHVzOgkJCVNl dCB0aGUgZGV2aWNlIHN0YXR1cwo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4g Pj4gKyAqCQkJCUBzdGF0dXM6IHZpcnRpbyBkZXZpY2Ugc3RhdHVzCj4gPj4gKyAqIEBnZXRfY29u ZmlnOgkJCVJlYWQgZnJvbSBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQo+ID4+ ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCUBvZmZzZXQ6IG9mZnNl dCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKPiA+PiArICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQo+ ID4+ICsgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCj4gPj4gKyAqCQkJCUBsZW46 IHRoZSBsZW5ndGggdG8gcmVhZCBmcm9tCj4gPj4gKyAqCQkJCWNvbmZpZ3JhdGlvbiBzcGFjZQo+ ID4+ICsgKiBAc2V0X2NvbmZpZzoJCQlXcml0ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJh dGlvbiBzcGFjZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJ CUBvZmZzZXQ6IG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKPiA+PiArICoJCQkJY29uZmln dXJhdGlvbiBzcGFjZQo+ID4+ICsgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byB3cml0ZSBmcm9t Cj4gPj4gKyAqCQkJCUBsZW46IHRoZSBsZW5ndGggdG8gd3JpdGUgdG8KPiA+PiArICoJCQkJY29u ZmlncmF0aW9uIHNwYWNlCj4gPj4gKyAqIEBnZXRfbWRldl9mZWF0dXJlczoJCUdldCBhIHNldCBv ZiBiaXRzIHRoYXQgZGVtb25zdHJhdGUKPiA+PiArICoJCQkJdGhlY2FwYWJpbGl0eSBvZiB0aGUg bWRldiBkZXZpY2UuIE5ldwo+ID4+ICsgKgkJCQlmZWF0dXJlcyBiaXRzIG11c3QgYmUgYWRkZWQg d2hlbgo+ID4+ICsgKgkJCQlpbnRyb2R1Y2luZyBuZXcgZGV2aWNlIG9wcy4KPiA+PiArICoJCQkJ QG1kZXY6IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlSZXR1cm5zIHRoZSBtZGV2IGZlYXR1 cmVzIChBUEkpIHN1cHBvcnQgYnkKPiA+PiArICoJCQkJdGhlIGRldmljZS4KPiA+PiArICogQGdl dF9nZW5lcmF0aW9uOgkJR2V0IGRldmljZSBjb25maWcgZ2VuZXJhdG9uIChvcHRpb25hbGx5KQo+ ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdTMy OiBkZXZpY2UgZ2VuZXJhdGlvbgo+ID4+ICsgKi8KPiA+PiArc3RydWN0IHZpcnRpb19tZGV2X2Rl dmljZV9vcHMgewo+ID4+ICsJLyogVmlydHF1ZXVlIG9wcyAqLwo+ID4+ICsJaW50ICgqc2V0X3Zx X2FkZHJlc3MpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiArCQkJICAgICAgdTE2IGlk eCwgdTY0IGRlc2NfYXJlYSwgdTY0IGRyaXZlcl9hcmVhLAo+ID4+ICsJCQkgICAgICB1NjQgZGV2 aWNlX2FyZWEpOwo+ID4+ICsJdm9pZCAoKnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAq bWRldiwgdTE2IGlkeCwgdTMyIG51bSk7Cj4gPj4gKwl2b2lkICgqa2lja192cSkoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2LCB1MTYgaWR4KTsKPiA+PiArCXZvaWQgKCpzZXRfdnFfY2IpKHN0cnVj dCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCwKPiA+PiArCQkJICBzdHJ1Y3QgdmlydGlvX21k ZXZfY2FsbGJhY2sgKmNiKTsKPiA+PiArCXZvaWQgKCpzZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiwgdTE2IGlkeCwgYm9vbCByZWFkeSk7Cj4gPj4gKwlib29sICgqZ2V0X3Zx X3JlYWR5KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgpOwo+ID4+ICsJaW50ICgq c2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIHU2NCBzdGF0 ZSk7Cj4gPj4gKwl1NjQgKCpnZXRfdnFfc3RhdGUpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwg dTE2IGlkeCk7Cj4gPj4gKwo+ID4+ICsJLyogVmlydGlvIGRldmljZSBvcHMgKi8KPiA+PiArCXUx NiAoKmdldF92cV9hbGlnbikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCXU2NCAo KmdldF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCWludCAoKnNl dF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOwo+ID4+ ICsJdm9pZCAoKnNldF9jb25maWdfY2IpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiAr CQkJICAgICAgc3RydWN0IHZpcnRpb19tZGV2X2NhbGxiYWNrICpjYik7Cj4gPj4gKwl1MTYgKCpn ZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCXUzMiAoKmdl dF9kZXZpY2VfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cj4gPj4gKwl1MzIgKCpnZXRf dmVuZG9yX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ID4+ICsJdTggKCpnZXRfc3Rh dHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ID4+ICsJdm9pZCAoKnNldF9zdGF0dXMp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTggc3RhdHVzKTsKPiA+PiArCXZvaWQgKCpnZXRf Y29uZmlnKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCj4g Pj4gKwkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Cj4gPj4gKwl2b2lkICgqc2V0 X2NvbmZpZykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ ID4+ICsJCQkgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwo+ID4+ICsJdTMy ICgqZ2V0X2dlbmVyYXRpb24pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cj4gPj4gKwo+ID4+ ICsJLyogTWRldiBkZXZpY2Ugb3BzICovCj4gPj4gKwl1NjQgKCpnZXRfbWRldl9mZWF0dXJlcyko c3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArfTsKPiA+PiArCj4gPj4gK3ZvaWQgbWRl dl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4gKwkJCSBjb25z dCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlvX29wcyk7Cj4gPj4gKwo+ID4+ ICsjZW5kaWYgIAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 73B7DCA9EBB for ; Thu, 24 Oct 2019 20:45:18 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5270F21A4C for ; Thu, 24 Oct 2019 20:45:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5270F21A4C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4AC436E7DD; Thu, 24 Oct 2019 20:45:17 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id D87286E7DD for ; Thu, 24 Oct 2019 20:45:15 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-37-LzpfL4iNOI2yLhwp9gmunA-1; Thu, 24 Oct 2019 16:45:10 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8FDD380183E; Thu, 24 Oct 2019 20:45:03 +0000 (UTC) Received: from x1.home (ovpn-118-102.phx2.redhat.com [10.3.118.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4B772450A; Thu, 24 Oct 2019 20:44:49 +0000 (UTC) Date: Thu, 24 Oct 2019 14:44:49 -0600 From: Alex Williamson To: Jason Wang Subject: Re: [PATCH V5 4/6] mdev: introduce virtio device and its device ops Message-ID: <20191024144449.626d560b@x1.home> In-Reply-To: <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> References: <20191023130752.18980-1-jasowang@redhat.com> <20191023130752.18980-5-jasowang@redhat.com> <20191023155728.2a55bc71@x1.home> <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> Organization: Red Hat MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: LzpfL4iNOI2yLhwp9gmunA-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1571949914; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tlUtBQGPFCbSO3DAgySYHCEeKLN2ykrpQWRzm+59VSE=; b=ShEdiTIPwmzS3jSolunxKgWqViBKvYnAlmIXxBXw82Uo1ybXNGoFg1zpvu0FpPgTpnvBtW ykMb5BDl92c7TOV3+wqOymVSnI9N0ivXrVXklosrlKf8x9miUY0tt8H/n1pysfYkF//56J LJD4AgnDsdqxD0UvQjdC6QF3SIAgGvo= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: stefanha@redhat.com, christophe.de.dinechin@gmail.com, kvm@vger.kernel.org, mst@redhat.com, airlied@linux.ie, heiko.carstens@de.ibm.com, kevin.tian@intel.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, kwankhede@nvidia.com, rob.miller@broadcom.com, linux-s390@vger.kernel.org, sebott@linux.ibm.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, cunming.liang@intel.com, zhi.a.wang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, intel-gfx@lists.freedesktop.org, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, intel-gvt-dev@lists.freedesktop.org, akrowiak@linux.ibm.com, oberpar@linux.ibm.com, tiwei.bie@intel.com, netdev@vger.kernel.org, cohuck@redhat.com, linux-kernel@vger.kernel.org, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191024204449.QVZmFdiBsAt2QOSH1aP1BbDzLEZTk_t50K3pOJG_bF8@z> T24gVGh1LCAyNCBPY3QgMjAxOSAxMTo1MTozNSArMDgwMApKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKCj4gT24gMjAxOS8xMC8yNCDkuIrljYg1OjU3LCBBbGV4IFdpbGxp YW1zb24gd3JvdGU6Cj4gPiBPbiBXZWQsIDIzIE9jdCAyMDE5IDIxOjA3OjUwICswODAwCj4gPiBK YXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+ICAKPiA+PiBUaGlzIHBh dGNoIGltcGxlbWVudHMgYmFzaWMgc3VwcG9ydCBmb3IgbWRldiBkcml2ZXIgdGhhdCBzdXBwb3J0 cwo+ID4+IHZpcnRpbyB0cmFuc3BvcnQgZm9yIGtlcm5lbCB2aXJ0aW8gZHJpdmVyLgo+ID4+Cj4g Pj4gU2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KPiA+PiAt LS0KPiA+PiAgIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIwICsrKysKPiA+ PiAgIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oIHwgICAyICsKPiA+PiAgIGluY2x1 ZGUvbGludXgvbWRldi5oICAgICAgICAgICAgIHwgICA2ICsrCj4gPj4gICBpbmNsdWRlL2xpbnV4 L3ZpcnRpb19tZGV2X29wcy5oICB8IDE1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPj4gICA0IGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspCj4gPj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC92aXJ0aW9fbWRldl9vcHMuaAo+ID4+Cj4gPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jIGIvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9jb3JlLmMKPiA+PiBpbmRleCA1NTViZDYxZDhjMzguLjliMDBjMzUxMzEyMCAxMDA2 NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwo+ID4+ICsrKyBiL2Ry aXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCj4gPj4gQEAgLTc2LDYgKzc2LDI2IEBAIGNvbnN0 IHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNlX29wcyAqbWRldl9nZXRfdmZpb19vcHMoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2KQo+ID4+ICAgfQo+ID4+ICAgRVhQT1JUX1NZTUJPTChtZGV2X2dldF92 ZmlvX29wcyk7Cj4gPj4gICAKPiA+PiArLyogU3BlY2lmeSB0aGUgdmlydGlvIGRldmljZSBvcHMg Zm9yIHRoZSBtZGV2IGRldmljZSwgdGhpcwo+ID4+ICsgKiBtdXN0IGJlIGNhbGxlZCBkdXJpbmcg Y3JlYXRlKCkgY2FsbGJhY2sgZm9yIHZpcnRpbyBtZGV2IGRldmljZS4KPiA+PiArICovCj4gPj4g K3ZvaWQgbWRldl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4g KwkJCSBjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlvX29wcykKPiA+ PiArewo+ID4+ICsJbWRldl9zZXRfY2xhc3MobWRldiwgTURFVl9DTEFTU19JRF9WSVJUSU8pOwo+ ID4+ICsJbWRldi0+dmlydGlvX29wcyA9IHZpcnRpb19vcHM7Cj4gPj4gK30KPiA+PiArRVhQT1JU X1NZTUJPTChtZGV2X3NldF92aXJ0aW9fb3BzKTsKPiA+PiArCj4gPj4gKy8qIEdldCB0aGUgdmly dGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZS4gKi8KPiA+PiArY29uc3Qgc3RydWN0 IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKgo+ID4+ICttZGV2X2dldF92aXJ0aW9fb3BzKHN0cnVj dCBtZGV2X2RldmljZSAqbWRldikKPiA+PiArewo+ID4+ICsJV0FSTl9PTihtZGV2LT5jbGFzc19p ZCAhPSBNREVWX0NMQVNTX0lEX1ZJUlRJTyk7Cj4gPj4gKwlyZXR1cm4gbWRldi0+dmlydGlvX29w czsKPiA+PiArfQo+ID4+ICtFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZpcnRpb19vcHMpOwo+ID4+ ICsKPiA+PiAgIHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dikKPiA+PiAgIHsKPiA+PiAgIAlyZXR1cm4gJm1kZXYtPmRldjsKPiA+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2 X3ByaXZhdGUuaAo+ID4+IGluZGV4IDA3NzA0MTBkZWQyYS4uN2I0Nzg5MGMzNGU3IDEwMDY0NAo+ ID4+IC0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCj4gPj4gKysrIGIvZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKPiA+PiBAQCAtMTEsNiArMTEsNyBAQAo+ID4+ ICAgI2RlZmluZSBNREVWX1BSSVZBVEVfSAo+ID4+ICAgCj4gPj4gICAjaW5jbHVkZSA8bGludXgv dmZpb19tZGV2X29wcy5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX21kZXZfb3BzLmg+ Cj4gPj4gICAKPiA+PiAgIGludCAgbWRldl9idXNfcmVnaXN0ZXIodm9pZCk7Cj4gPj4gICB2b2lk IG1kZXZfYnVzX3VucmVnaXN0ZXIodm9pZCk7Cj4gPj4gQEAgLTM4LDYgKzM5LDcgQEAgc3RydWN0 IG1kZXZfZGV2aWNlIHsKPiA+PiAgIAl1MTYgY2xhc3NfaWQ7Cj4gPj4gICAJdW5pb24gewo+ID4+ ICAgCQljb25zdCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzOwo+ID4+ICsJ CWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzOwo+ID4+ICAg CX07Cj4gPj4gICB9Owo+ID4+ICAgCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRl di5oIGIvaW5jbHVkZS9saW51eC9tZGV2LmgKPiA+PiBpbmRleCA0NjI1ZjFhMTEwMTQuLjliNjli MGJiZWJmZCAxMDA2NDQKPiA+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAo+ID4+ICsrKyBi L2luY2x1ZGUvbGludXgvbWRldi5oCj4gPj4gQEAgLTE3LDYgKzE3LDcgQEAKPiA+PiAgIAo+ID4+ ICAgc3RydWN0IG1kZXZfZGV2aWNlOwo+ID4+ICAgc3RydWN0IHZmaW9fbWRldl9kZXZpY2Vfb3Bz Owo+ID4+ICtzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wczsKPiA+PiAgIAo+ID4+ICAgLyoK PiA+PiAgICAqIENhbGxlZCBieSB0aGUgcGFyZW50IGRldmljZSBkcml2ZXIgdG8gc2V0IHRoZSBk ZXZpY2Ugd2hpY2ggcmVwcmVzZW50cwo+ID4+IEBAIC0xMTIsNiArMTEzLDEwIEBAIHZvaWQgbWRl dl9zZXRfY2xhc3Moc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWQpOwo+ID4+ICAgdm9p ZCBtZGV2X3NldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4gICAJCSAg ICAgICBjb25zdCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzKTsKPiA+PiAg IGNvbnN0IHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNlX29wcyAqbWRldl9nZXRfdmZpb19vcHMoc3Ry dWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArdm9pZCBtZGV2X3NldF92aXJ0aW9fb3BzKHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiArCQkJIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRl dl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKTsKPiA+PiArY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2 X2RldmljZV9vcHMgKgo+ID4+ICttZGV2X2dldF92aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldik7Cj4gPj4gICAKPiA+PiAgIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNf dHlwZTsKPiA+PiAgIAo+ID4+IEBAIC0xMjcsNiArMTMyLDcgQEAgc3RydWN0IG1kZXZfZGV2aWNl ICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPj4gICAKPiA+PiAgIGVudW0g ewo+ID4+ICAgCU1ERVZfQ0xBU1NfSURfVkZJTyA9IDEsCj4gPj4gKwlNREVWX0NMQVNTX0lEX1ZJ UlRJTyA9IDIsCj4gPj4gICAJLyogTmV3IGVudHJpZXMgbXVzdCBiZSBhZGRlZCBoZXJlICovCj4g Pj4gICB9Owo+ID4+ICAgCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX21k ZXZfb3BzLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19tZGV2X29wcy5oCj4gPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ0MTdiNDFmMjg0NQo+ID4+IC0t LSAvZGV2L251bGwKPiA+PiArKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19tZGV2X29wcy5oCj4g Pj4gQEAgLTAsMCArMSwxNTkgQEAKPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seSAqLwo+ID4+ICsvKgo+ID4+ICsgKiBWaXJ0aW8gbWVkaWF0ZWQgZGV2aWNlIGRy aXZlcgo+ID4+ICsgKgo+ID4+ICsgKiBDb3B5cmlnaHQgMjAxOSwgUmVkIEhhdCBDb3JwLgo+ID4+ ICsgKiAgICAgQXV0aG9yOiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgo+ID4+ICsg Ki8KPiA+PiArI2lmbmRlZiBfTElOVVhfVklSVElPX01ERVZfSAo+ID4+ICsjZGVmaW5lIF9MSU5V WF9WSVJUSU9fTURFVl9ICj4gPj4gKwo+ID4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+Cj4gPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4 L3Zob3N0Lmg+Cj4gPj4gKwo+ID4+ICsjZGVmaW5lIFZJUlRJT19NREVWX0RFVklDRV9BUElfU1RS SU5HCQkidmlydGlvLW1kZXYiCj4gPj4gKyNkZWZpbmUgVklSVElPX01ERVZfRl9WRVJTSU9OXzEg MHgxCj4gPj4gKwo+ID4+ICtzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgewo+ID4+ICsJaXJx cmV0dXJuX3QgKCpjYWxsYmFjaykodm9pZCAqZGF0YSk7Cj4gPj4gKwl2b2lkICpwcml2YXRlOwo+ ID4+ICt9Owo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNl X29wcyAtIFN0cnVjdHVyZSB0byBiZSByZWdpc3RlcmVkIGZvciBlYWNoCj4gPj4gKyAqIG1kZXYg ZGV2aWNlIHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgZm9yIHZpcnRpby92aG9zdCBkcml2ZXJzLgo+ ID4+ICsgKgo+ID4+ICsgKiBUaGUgZGV2aWNlIG9wcyB0aGF0IGlzIHN1cHBvcnRlZCBieSBWSVJU SU9fTURFVl9GX1ZFUlNJT05fMSwgdGhlCj4gPj4gKyAqIGNhbGxiYWNrcyBhcmUgbWFuZGF0b3J5 IHVubGVzcyBleHBsaWNpdHkgbWVudGlvbmVkLiAgCj4gPiBJZiB0aGUgdmVyc2lvbiBvZiB0aGUg Y2FsbGJhY2tzIGlzIHJldHVybmVkIGJ5IGEgY2FsbGJhY2sgd2l0aGluIHRoZQo+ID4gc3RydWN0 dXJlIGRlZmluZWQgYnkgdGhlIHZlcnNpb24uLi4gaXNuJ3QgdGhhdCBhIGJpdCBjaXJjdWxhcj8g IFRoaXMKPiA+IHNlZW1zIHJlZHVuZGFudCB0byBtZSB2ZXJzdXMgdGhlIGNsYXNzIGlkLiAgVGhl IGZhY3QgdGhhdCB0aGUgcGFyZW50Cj4gPiBkcml2ZXIgZGVmaW5lcyB0aGUgZGV2aWNlIGFzIE1E RVZfQ0xBU1NfSURfVklSVElPIHNob3VsZCB0ZWxsIHVzIHRoaXMKPiA+IGFscmVhZHkuICBJZiBp dCB3YXMgaW5jcmVtZW50ZWQsIHdlJ2QgbmVlZCBhbiBNREVWX0NMQVNTX0lEX1ZJUlRJT3YyLAo+ ID4gd2hpY2ggdGhlIHZpcnRpby1tZGV2IGJ1cyBkcml2ZXIgY291bGQgYWRkIHRvIGl0cyBpZCB0 YWJsZSBhbmQgaGFuZGxlCj4gPiBkaWZmZXJlbnRseS4gIAo+IAo+IAo+IE15IHVuZGVyc3RhbmRp bmcgaXMgdmVyc2lvbnMgYXJlIG9ubHkgYWxsb3dlZCB0byBpbmNyZWFzZSBtb25vdG9uaWNhbGx5 LCAKPiB0aGlzIHNlZW1zIGxlc3MgZmxleGlibGUgdGhhbiBmZWF0dXJlcy4gRS5nIHdlIGhhdmUg ZmVhdHVyZXMgQSwgQiwgQywgCj4gbWRldiBkZXZpY2UgY2FuIGNob29zZSB0byBzdXBwb3J0IG9u bHkgYSBzdWJzZXQuIEUuZyB3aGVuIG1kZXYgZGV2aWNlIAo+IGNhbiBzdXBwb3J0IGRpcnR5IHBh Z2UgbG9nZ2luZywgaXQgY2FuIGFkZCBhIG5ldyBmZWF0dXJlIGJpdCBmb3IgZHJpdmVyIAo+IHRv IGtub3cgdGhhdCBpdCBzdXBwb3J0IG5ldyBkZXZpY2Ugb3BzLiBNREVWX0NMQVNTX0lEX1ZJUlRJ T3YyIG1heSBvbmx5IAo+IGJlIHVzZWZ1bCB3aGVuIHdlIHdpbGwgaW52ZW50IGEgY29tcGxldGUg bmV3IEFQSS4KCkJ1dCB0aGlzIGludGVyZmFjZSByYXRoZXIgY29uZmxhdGVzIGZlYXR1cmVzIGFu ZCB2ZXJzaW9ucyBieSByZXR1cm5pbmcKYSB2ZXJzaW9uIGFzIGEgZmVhdHVyZS4gIElmIHdlIHNp bXBseSB3YW50IHRvIHNheSB0aGF0IHRoZXJlIGFyZSBubwphZGRpdGlvbmFsIGZlYXR1cmVzLCB0 aGVuIGdldF9tZGV2X2ZlYXR1cmVzKCkgc2hvdWxkIHJldHVybiBhbiBlbXB0eQpzZXQuICBJZiBk aXJ0eSBwYWdlIGxvZ2dpbmcgaXMgYSBmZWF0dXJlLCB0aGVuIEknZCBleHBlY3QgYSBiaXQgaW4g dGhlCmdldF9tZGV2X2ZlYXR1cmVzKCkgcmV0dXJuIHZhbHVlIHRvIGlkZW50aWZ5IHRoYXQgZmVh dHVyZS4KCkhvd2V2ZXIsIEkndmUgYmVlbiB1bmRlciB0aGUgaW1wcmVzc2lvbiAocGVyaGFwcyB3 cm9uZ2x5KSB0aGF0IHRoZQpjbGFzcy1pZCBoYXMgYSAxOjEgY29ycmVsYXRpb24gdG8gdGhlIGRl dmljZS1vcHMgZXhwb3NlZCB0byB0aGUgYnVzCmRyaXZlciwgc28gaWYgZGlydHkgcGFnZSBsb2dn aW5nIHJlcXVpcmVzIGV4dHJhIGNhbGxiYWNrcywgdGhhdCB3b3VsZAppbXBseSBhIG5ldyBkZXZp Y2Utb3BzLCB3aGljaCByZXF1aXJlcyBhIG5ldyBjbGFzcy1pZC4gIEluIHRoYXQgY2FzZQp2aXJ0 aW8tbWRldiB3b3VsZCBjbGFpbSBib3RoIGNsYXNzLWlkcyBhbmQgd291bGQgbmVlZCBzb21lIHdh eSB0bwpkaWZmZXJlbnRpYXRlIHRoZW0uICBCdXQgSSBhbHNvIHNlZSB0aGF0IHN1Y2ggYSBzb2x1 dGlvbiBjYW4gYmVjb21lCnVubWFuYWdlYWJsZSBhcyB0aGUgc2V0IG9mIGNsYXNzLWlkcyB3b3Vs ZCBuZWVkIHRvIGVuY29tcGFzcyBldmVyeQpjb21iaW5hdGlvbiBvZiBmZWF0dXJlcy4KClNvIEkg dGhpbmsgd2hhdCdzIHN1Z2dlc3RlZCBieSB0aGlzIGlzIHRoYXQgdGhlIGluaXRpYWwgc3RydWN0 CnZpcnRpb19tZGV2X2RldmljZV9vcHMgaXMgYSBiYXNlIHNldCBvZiBjYWxsYmFja3Mgd2hpY2gg d291bGQgYmUKZXh0ZW5kZWQgdmlhIGZlYXR1cmVzPyAgQnV0IHRoZW4gd2h5IGRvZXMgZ2V0X2dl bmVyYXRpb24oKSBub3QgbWFrZSB1c2UKb2YgdGhpcz8gIEFuZCBpZiB3ZSBjYW4gZGVmaW5lIGdl dF9nZW5lcmF0aW9uKCkgYXMgb3B0aW9uYWwgYW5kIHNpbXBseQp0ZXN0IGlmIGl0J3MgaW1wbGVt ZW50ZWQsIHRoZW4gaXQgc2VlbXMgd2UgZG9uJ3QgbmVlZCBhbnkgZmVhdHVyZSBiaXRzCnRvIGV4 dGVuZCB0aGUgc3RydWN0dXJlICh1bmxlc3Mgd2UncmUgbG9va2luZyBhdCBiaW5hcnkgY29tcGF0 aWJpbGl0eSkuClNvIG1heWJlIGdldF9tZGV2X2ZlYXR1cmVzKCkgaXMgbWVhbnQgdG8gZXhwb3Nl IHVuZGVybHlpbmcgZmVhdHVyZXMKdW5yZWxhdGVkIHRvIHRoZSBjYWxsYmFja3M/ICBXaGljaCBp cyBub3QgaW4gbGluZSB3aXRoIHRoZSBkZXNjcmlwdGlvbj8KSG9wZWZ1bGx5IHlvdSBjYW4gc2Vl IG15IGNvbmZ1c2lvbiBpbiB3aGF0IHdlJ3JlIHRyeWluZyB0byBkbyBoZXJlLgpUaGFua3MsCgpB bGV4Cgo+ID4+ICsgKgo+ID4+ICsgKiBAc2V0X3ZxX2FkZHJlc3M6CQlTZXQgdGhlIGFkZHJlc3Mg b2YgdmlydHF1ZXVlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJ CQkJQGlkeDogdmlydHF1ZXVlIGluZGV4Cj4gPj4gKyAqCQkJCUBkZXNjX2FyZWE6IGFkZHJlc3Mg b2YgZGVzYyBhcmVhCj4gPj4gKyAqCQkJCUBkcml2ZXJfYXJlYTogYWRkcmVzcyBvZiBkcml2ZXIg YXJlYQo+ID4+ICsgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mgb2YgZGV2aWNlIGFyZWEKPiA+ PiArICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNjZXNzICgwKSBvciBlcnJvciAoPCAwKQo+ID4+ ICsgKiBAc2V0X3ZxX251bToJCQlTZXQgdGhlIHNpemUgb2YgdmlydHF1ZXVlCj4gPj4gKyAqCQkJ CUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4 Cj4gPj4gKyAqCQkJCUBudW06IHRoZSBzaXplIG9mIHZpcnRxdWV1ZQo+ID4+ICsgKiBAa2lja192 cToJCQlLaWNrIHRoZSB2aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmlj ZQo+ID4+ICsgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiArICogQHNldF92cV9jYjoJ CQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IKPiA+PiArICoJCQkJYSB2 aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlA aWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiArICoJCQkJQGNiOiB2aXJ0aW8tbWRldiBpbnRlcnJ1 cHQgY2FsbGJhY2sgc3RydWN0dXJlCj4gPj4gKyAqIEBzZXRfdnFfcmVhZHk6CQlTZXQgcmVhZHkg c3RhdHVzIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNl Cj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ID4+ICsgKgkJCQlAcmVhZHk6IHJl YWR5ICh0cnVlKSBub3QgcmVhZHkoZmFsc2UpCj4gPj4gKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQg cmVhZHkgc3RhdHVzIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQg ZGV2aWNlCj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ID4+ICsgKgkJCQlSZXR1 cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBub3QgKGZhbHNlKQo+ID4+ICsgKiBAc2V0X3Zx X3N0YXRlOgkJU2V0IHRoZSBzdGF0ZSBmb3IgYSB2aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6 IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiAr ICoJCQkJQHN0YXRlOiB2aXJ0cXVldWUgc3RhdGUgKGxhc3RfYXZhaWxfaWR4KQo+ID4+ICsgKgkJ CQlSZXR1cm5zIGludGVnZXI6IHN1Y2Nlc3MgKDApIG9yIGVycm9yICg8IDApCj4gPj4gKyAqIEBn ZXRfdnFfc3RhdGU6CQlHZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlA bWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ ID4+ICsgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBzdGF0ZSAobGFzdF9hdmFpbF9pZHgpCj4gPj4g KyAqIEBnZXRfdnFfYWxpZ246CQlHZXQgdGhlIHZpcnRxdWV1ZSBhbGlnbiByZXF1aXJlbWVudAo+ ID4+ICsgKgkJCQlmb3IgdGhlIGRldmljZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2 aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdmlydHF1ZXVlIGFsZ2luIHJlcXVpcmVtZW50Cj4gPj4g KyAqIEBnZXRfZmVhdHVyZXM6CQlHZXQgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUg ZGV2aWNlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJUmV0 dXJucyB0aGUgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnQgYnkgdGhlCj4gPj4gKyAqCQkJCWRldmlj ZQo+ID4+ICsgKiBAZ2V0X2ZlYXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQg YnkgdGhlIGRyaXZlciAgCj4gPiAgICAgICAgIF4gcy9nL3MvCj4gPgo+ID4gVGhhbmtzLAo+ID4g QWxleCAgCj4gCj4gCj4gV2lsbCBmaXguCj4gCj4gVGhhbmtzCj4gCj4gCj4gPiAgCj4gPj4gKyAq CQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJQGZlYXR1cmVzOiBmZWF0dXJl IHN1cHBvcnQgYnkgdGhlIGRyaXZlcgo+ID4+ICsgKgkJCQlSZXR1cm5zIGludGVnZXI6IHN1Y2Nl c3MgKDApIG9yIGVycm9yICg8IDApCj4gPj4gKyAqIEBzZXRfY29uZmlnX2NiOgkJU2V0IHRoZSBj b25maWcgaW50ZXJydXB0IGNhbGxiYWNrCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKPiA+PiArICoJCQkJQGNiOiB2aXJ0aW8tbWRldiBpbnRlcnJ1cHQgY2FsbGJhY2sgc3RydWN0 dXJlCj4gPj4gKyAqIEBnZXRfdnFfbnVtX21heDoJCUdldCB0aGUgbWF4IHNpemUgb2YgdmlydHF1 ZXVlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJUmV0dXJu cyB1MTY6IG1heCBzaXplIG9mIHZpcnRxdWV1ZQo+ID4+ICsgKiBAZ2V0X2RldmljZV9pZDoJCUdl dCB2aXJ0aW8gZGV2aWNlIGlkCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+ PiArICoJCQkJUmV0dXJucyB1MzI6IHZpcnRpbyBkZXZpY2UgaWQKPiA+PiArICogQGdldF92ZW5k b3JfaWQ6CQlHZXQgaWQgZm9yIHRoZSB2ZW5kb3IgdGhhdCBwcm92aWRlcyB0aGlzIGRldmljZQo+ ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdTMy OiB2aXJ0aW8gdmVuZG9yIGlkCj4gPj4gKyAqIEBnZXRfc3RhdHVzOgkJCUdldCB0aGUgZGV2aWNl IHN0YXR1cwo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJl dHVybnMgdTg6IHZpcnRpbyBkZXZpY2Ugc3RhdHVzCj4gPj4gKyAqIEBzZXRfc3RhdHVzOgkJCVNl dCB0aGUgZGV2aWNlIHN0YXR1cwo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4g Pj4gKyAqCQkJCUBzdGF0dXM6IHZpcnRpbyBkZXZpY2Ugc3RhdHVzCj4gPj4gKyAqIEBnZXRfY29u ZmlnOgkJCVJlYWQgZnJvbSBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQo+ID4+ ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCUBvZmZzZXQ6IG9mZnNl dCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKPiA+PiArICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQo+ ID4+ICsgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCj4gPj4gKyAqCQkJCUBsZW46 IHRoZSBsZW5ndGggdG8gcmVhZCBmcm9tCj4gPj4gKyAqCQkJCWNvbmZpZ3JhdGlvbiBzcGFjZQo+ ID4+ICsgKiBAc2V0X2NvbmZpZzoJCQlXcml0ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJh dGlvbiBzcGFjZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJ CUBvZmZzZXQ6IG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKPiA+PiArICoJCQkJY29uZmln dXJhdGlvbiBzcGFjZQo+ID4+ICsgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byB3cml0ZSBmcm9t Cj4gPj4gKyAqCQkJCUBsZW46IHRoZSBsZW5ndGggdG8gd3JpdGUgdG8KPiA+PiArICoJCQkJY29u ZmlncmF0aW9uIHNwYWNlCj4gPj4gKyAqIEBnZXRfbWRldl9mZWF0dXJlczoJCUdldCBhIHNldCBv ZiBiaXRzIHRoYXQgZGVtb25zdHJhdGUKPiA+PiArICoJCQkJdGhlY2FwYWJpbGl0eSBvZiB0aGUg bWRldiBkZXZpY2UuIE5ldwo+ID4+ICsgKgkJCQlmZWF0dXJlcyBiaXRzIG11c3QgYmUgYWRkZWQg d2hlbgo+ID4+ICsgKgkJCQlpbnRyb2R1Y2luZyBuZXcgZGV2aWNlIG9wcy4KPiA+PiArICoJCQkJ QG1kZXY6IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlSZXR1cm5zIHRoZSBtZGV2IGZlYXR1 cmVzIChBUEkpIHN1cHBvcnQgYnkKPiA+PiArICoJCQkJdGhlIGRldmljZS4KPiA+PiArICogQGdl dF9nZW5lcmF0aW9uOgkJR2V0IGRldmljZSBjb25maWcgZ2VuZXJhdG9uIChvcHRpb25hbGx5KQo+ ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdTMy OiBkZXZpY2UgZ2VuZXJhdGlvbgo+ID4+ICsgKi8KPiA+PiArc3RydWN0IHZpcnRpb19tZGV2X2Rl dmljZV9vcHMgewo+ID4+ICsJLyogVmlydHF1ZXVlIG9wcyAqLwo+ID4+ICsJaW50ICgqc2V0X3Zx X2FkZHJlc3MpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiArCQkJICAgICAgdTE2IGlk eCwgdTY0IGRlc2NfYXJlYSwgdTY0IGRyaXZlcl9hcmVhLAo+ID4+ICsJCQkgICAgICB1NjQgZGV2 aWNlX2FyZWEpOwo+ID4+ICsJdm9pZCAoKnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAq bWRldiwgdTE2IGlkeCwgdTMyIG51bSk7Cj4gPj4gKwl2b2lkICgqa2lja192cSkoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2LCB1MTYgaWR4KTsKPiA+PiArCXZvaWQgKCpzZXRfdnFfY2IpKHN0cnVj dCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCwKPiA+PiArCQkJICBzdHJ1Y3QgdmlydGlvX21k ZXZfY2FsbGJhY2sgKmNiKTsKPiA+PiArCXZvaWQgKCpzZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiwgdTE2IGlkeCwgYm9vbCByZWFkeSk7Cj4gPj4gKwlib29sICgqZ2V0X3Zx X3JlYWR5KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgpOwo+ID4+ICsJaW50ICgq c2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIHU2NCBzdGF0 ZSk7Cj4gPj4gKwl1NjQgKCpnZXRfdnFfc3RhdGUpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwg dTE2IGlkeCk7Cj4gPj4gKwo+ID4+ICsJLyogVmlydGlvIGRldmljZSBvcHMgKi8KPiA+PiArCXUx NiAoKmdldF92cV9hbGlnbikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCXU2NCAo KmdldF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCWludCAoKnNl dF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOwo+ID4+ ICsJdm9pZCAoKnNldF9jb25maWdfY2IpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiAr CQkJICAgICAgc3RydWN0IHZpcnRpb19tZGV2X2NhbGxiYWNrICpjYik7Cj4gPj4gKwl1MTYgKCpn ZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCXUzMiAoKmdl dF9kZXZpY2VfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cj4gPj4gKwl1MzIgKCpnZXRf dmVuZG9yX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ID4+ICsJdTggKCpnZXRfc3Rh dHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ID4+ICsJdm9pZCAoKnNldF9zdGF0dXMp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTggc3RhdHVzKTsKPiA+PiArCXZvaWQgKCpnZXRf Y29uZmlnKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCj4g Pj4gKwkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Cj4gPj4gKwl2b2lkICgqc2V0 X2NvbmZpZykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ ID4+ICsJCQkgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwo+ID4+ICsJdTMy ICgqZ2V0X2dlbmVyYXRpb24pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cj4gPj4gKwo+ID4+ ICsJLyogTWRldiBkZXZpY2Ugb3BzICovCj4gPj4gKwl1NjQgKCpnZXRfbWRldl9mZWF0dXJlcyko c3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArfTsKPiA+PiArCj4gPj4gK3ZvaWQgbWRl dl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4gKwkJCSBjb25z dCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlvX29wcyk7Cj4gPj4gKwo+ID4+ ICsjZW5kaWYgIAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A7E4CA9EAF for ; Thu, 24 Oct 2019 20:45:17 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6428A21BE5 for ; Thu, 24 Oct 2019 20:45:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6428A21BE5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 090656E7BE; Thu, 24 Oct 2019 20:45:17 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC5A86E7BE for ; Thu, 24 Oct 2019 20:45:15 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-37-LzpfL4iNOI2yLhwp9gmunA-1; Thu, 24 Oct 2019 16:45:10 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8FDD380183E; Thu, 24 Oct 2019 20:45:03 +0000 (UTC) Received: from x1.home (ovpn-118-102.phx2.redhat.com [10.3.118.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4B772450A; Thu, 24 Oct 2019 20:44:49 +0000 (UTC) Date: Thu, 24 Oct 2019 14:44:49 -0600 From: Alex Williamson To: Jason Wang Message-ID: <20191024144449.626d560b@x1.home> In-Reply-To: <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> References: <20191023130752.18980-1-jasowang@redhat.com> <20191023130752.18980-5-jasowang@redhat.com> <20191023155728.2a55bc71@x1.home> <1699cc4e-7d52-b2dc-8016-358a36a4f4ea@redhat.com> Organization: Red Hat MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: LzpfL4iNOI2yLhwp9gmunA-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1571949914; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tlUtBQGPFCbSO3DAgySYHCEeKLN2ykrpQWRzm+59VSE=; b=ShEdiTIPwmzS3jSolunxKgWqViBKvYnAlmIXxBXw82Uo1ybXNGoFg1zpvu0FpPgTpnvBtW ykMb5BDl92c7TOV3+wqOymVSnI9N0ivXrVXklosrlKf8x9miUY0tt8H/n1pysfYkF//56J LJD4AgnDsdqxD0UvQjdC6QF3SIAgGvo= Subject: Re: [Intel-gfx] [PATCH V5 4/6] mdev: introduce virtio device and its device ops X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: stefanha@redhat.com, christophe.de.dinechin@gmail.com, kvm@vger.kernel.org, mst@redhat.com, airlied@linux.ie, heiko.carstens@de.ibm.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, kwankhede@nvidia.com, rob.miller@broadcom.com, linux-s390@vger.kernel.org, sebott@linux.ibm.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, cunming.liang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, intel-gfx@lists.freedesktop.org, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, intel-gvt-dev@lists.freedesktop.org, akrowiak@linux.ibm.com, oberpar@linux.ibm.com, tiwei.bie@intel.com, netdev@vger.kernel.org, cohuck@redhat.com, linux-kernel@vger.kernel.org, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191024204449.UH4eFQv0qSAIJLyvGm6sojz1_hx91E8SJuVNga96eTw@z> T24gVGh1LCAyNCBPY3QgMjAxOSAxMTo1MTozNSArMDgwMApKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKCj4gT24gMjAxOS8xMC8yNCDkuIrljYg1OjU3LCBBbGV4IFdpbGxp YW1zb24gd3JvdGU6Cj4gPiBPbiBXZWQsIDIzIE9jdCAyMDE5IDIxOjA3OjUwICswODAwCj4gPiBK YXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+ICAKPiA+PiBUaGlzIHBh dGNoIGltcGxlbWVudHMgYmFzaWMgc3VwcG9ydCBmb3IgbWRldiBkcml2ZXIgdGhhdCBzdXBwb3J0 cwo+ID4+IHZpcnRpbyB0cmFuc3BvcnQgZm9yIGtlcm5lbCB2aXJ0aW8gZHJpdmVyLgo+ID4+Cj4g Pj4gU2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KPiA+PiAt LS0KPiA+PiAgIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jICAgIHwgIDIwICsrKysKPiA+ PiAgIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oIHwgICAyICsKPiA+PiAgIGluY2x1 ZGUvbGludXgvbWRldi5oICAgICAgICAgICAgIHwgICA2ICsrCj4gPj4gICBpbmNsdWRlL2xpbnV4 L3ZpcnRpb19tZGV2X29wcy5oICB8IDE1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPj4gICA0IGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspCj4gPj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC92aXJ0aW9fbWRldl9vcHMuaAo+ID4+Cj4gPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jIGIvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9jb3JlLmMKPiA+PiBpbmRleCA1NTViZDYxZDhjMzguLjliMDBjMzUxMzEyMCAxMDA2 NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwo+ID4+ICsrKyBiL2Ry aXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCj4gPj4gQEAgLTc2LDYgKzc2LDI2IEBAIGNvbnN0 IHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNlX29wcyAqbWRldl9nZXRfdmZpb19vcHMoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2KQo+ID4+ICAgfQo+ID4+ICAgRVhQT1JUX1NZTUJPTChtZGV2X2dldF92 ZmlvX29wcyk7Cj4gPj4gICAKPiA+PiArLyogU3BlY2lmeSB0aGUgdmlydGlvIGRldmljZSBvcHMg Zm9yIHRoZSBtZGV2IGRldmljZSwgdGhpcwo+ID4+ICsgKiBtdXN0IGJlIGNhbGxlZCBkdXJpbmcg Y3JlYXRlKCkgY2FsbGJhY2sgZm9yIHZpcnRpbyBtZGV2IGRldmljZS4KPiA+PiArICovCj4gPj4g K3ZvaWQgbWRldl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4g KwkJCSBjb25zdCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlvX29wcykKPiA+ PiArewo+ID4+ICsJbWRldl9zZXRfY2xhc3MobWRldiwgTURFVl9DTEFTU19JRF9WSVJUSU8pOwo+ ID4+ICsJbWRldi0+dmlydGlvX29wcyA9IHZpcnRpb19vcHM7Cj4gPj4gK30KPiA+PiArRVhQT1JU X1NZTUJPTChtZGV2X3NldF92aXJ0aW9fb3BzKTsKPiA+PiArCj4gPj4gKy8qIEdldCB0aGUgdmly dGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZS4gKi8KPiA+PiArY29uc3Qgc3RydWN0 IHZpcnRpb19tZGV2X2RldmljZV9vcHMgKgo+ID4+ICttZGV2X2dldF92aXJ0aW9fb3BzKHN0cnVj dCBtZGV2X2RldmljZSAqbWRldikKPiA+PiArewo+ID4+ICsJV0FSTl9PTihtZGV2LT5jbGFzc19p ZCAhPSBNREVWX0NMQVNTX0lEX1ZJUlRJTyk7Cj4gPj4gKwlyZXR1cm4gbWRldi0+dmlydGlvX29w czsKPiA+PiArfQo+ID4+ICtFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZpcnRpb19vcHMpOwo+ID4+ ICsKPiA+PiAgIHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dikKPiA+PiAgIHsKPiA+PiAgIAlyZXR1cm4gJm1kZXYtPmRldjsKPiA+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2 X3ByaXZhdGUuaAo+ID4+IGluZGV4IDA3NzA0MTBkZWQyYS4uN2I0Nzg5MGMzNGU3IDEwMDY0NAo+ ID4+IC0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCj4gPj4gKysrIGIvZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKPiA+PiBAQCAtMTEsNiArMTEsNyBAQAo+ID4+ ICAgI2RlZmluZSBNREVWX1BSSVZBVEVfSAo+ID4+ICAgCj4gPj4gICAjaW5jbHVkZSA8bGludXgv dmZpb19tZGV2X29wcy5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX21kZXZfb3BzLmg+ Cj4gPj4gICAKPiA+PiAgIGludCAgbWRldl9idXNfcmVnaXN0ZXIodm9pZCk7Cj4gPj4gICB2b2lk IG1kZXZfYnVzX3VucmVnaXN0ZXIodm9pZCk7Cj4gPj4gQEAgLTM4LDYgKzM5LDcgQEAgc3RydWN0 IG1kZXZfZGV2aWNlIHsKPiA+PiAgIAl1MTYgY2xhc3NfaWQ7Cj4gPj4gICAJdW5pb24gewo+ID4+ ICAgCQljb25zdCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzOwo+ID4+ICsJ CWNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRldl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzOwo+ID4+ICAg CX07Cj4gPj4gICB9Owo+ID4+ICAgCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRl di5oIGIvaW5jbHVkZS9saW51eC9tZGV2LmgKPiA+PiBpbmRleCA0NjI1ZjFhMTEwMTQuLjliNjli MGJiZWJmZCAxMDA2NDQKPiA+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAo+ID4+ICsrKyBi L2luY2x1ZGUvbGludXgvbWRldi5oCj4gPj4gQEAgLTE3LDYgKzE3LDcgQEAKPiA+PiAgIAo+ID4+ ICAgc3RydWN0IG1kZXZfZGV2aWNlOwo+ID4+ICAgc3RydWN0IHZmaW9fbWRldl9kZXZpY2Vfb3Bz Owo+ID4+ICtzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wczsKPiA+PiAgIAo+ID4+ICAgLyoK PiA+PiAgICAqIENhbGxlZCBieSB0aGUgcGFyZW50IGRldmljZSBkcml2ZXIgdG8gc2V0IHRoZSBk ZXZpY2Ugd2hpY2ggcmVwcmVzZW50cwo+ID4+IEBAIC0xMTIsNiArMTEzLDEwIEBAIHZvaWQgbWRl dl9zZXRfY2xhc3Moc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWQpOwo+ID4+ICAgdm9p ZCBtZGV2X3NldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4gICAJCSAg ICAgICBjb25zdCBzdHJ1Y3QgdmZpb19tZGV2X2RldmljZV9vcHMgKnZmaW9fb3BzKTsKPiA+PiAg IGNvbnN0IHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNlX29wcyAqbWRldl9nZXRfdmZpb19vcHMoc3Ry dWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArdm9pZCBtZGV2X3NldF92aXJ0aW9fb3BzKHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiArCQkJIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbWRl dl9kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKTsKPiA+PiArY29uc3Qgc3RydWN0IHZpcnRpb19tZGV2 X2RldmljZV9vcHMgKgo+ID4+ICttZGV2X2dldF92aXJ0aW9fb3BzKHN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldik7Cj4gPj4gICAKPiA+PiAgIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNf dHlwZTsKPiA+PiAgIAo+ID4+IEBAIC0xMjcsNiArMTMyLDcgQEAgc3RydWN0IG1kZXZfZGV2aWNl ICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPj4gICAKPiA+PiAgIGVudW0g ewo+ID4+ICAgCU1ERVZfQ0xBU1NfSURfVkZJTyA9IDEsCj4gPj4gKwlNREVWX0NMQVNTX0lEX1ZJ UlRJTyA9IDIsCj4gPj4gICAJLyogTmV3IGVudHJpZXMgbXVzdCBiZSBhZGRlZCBoZXJlICovCj4g Pj4gICB9Owo+ID4+ICAgCj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX21k ZXZfb3BzLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19tZGV2X29wcy5oCj4gPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ0MTdiNDFmMjg0NQo+ID4+IC0t LSAvZGV2L251bGwKPiA+PiArKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19tZGV2X29wcy5oCj4g Pj4gQEAgLTAsMCArMSwxNTkgQEAKPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seSAqLwo+ID4+ICsvKgo+ID4+ICsgKiBWaXJ0aW8gbWVkaWF0ZWQgZGV2aWNlIGRy aXZlcgo+ID4+ICsgKgo+ID4+ICsgKiBDb3B5cmlnaHQgMjAxOSwgUmVkIEhhdCBDb3JwLgo+ID4+ ICsgKiAgICAgQXV0aG9yOiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgo+ID4+ICsg Ki8KPiA+PiArI2lmbmRlZiBfTElOVVhfVklSVElPX01ERVZfSAo+ID4+ICsjZGVmaW5lIF9MSU5V WF9WSVJUSU9fTURFVl9ICj4gPj4gKwo+ID4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+Cj4gPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4 L3Zob3N0Lmg+Cj4gPj4gKwo+ID4+ICsjZGVmaW5lIFZJUlRJT19NREVWX0RFVklDRV9BUElfU1RS SU5HCQkidmlydGlvLW1kZXYiCj4gPj4gKyNkZWZpbmUgVklSVElPX01ERVZfRl9WRVJTSU9OXzEg MHgxCj4gPj4gKwo+ID4+ICtzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgewo+ID4+ICsJaXJx cmV0dXJuX3QgKCpjYWxsYmFjaykodm9pZCAqZGF0YSk7Cj4gPj4gKwl2b2lkICpwcml2YXRlOwo+ ID4+ICt9Owo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIHN0cnVjdCB2ZmlvX21kZXZfZGV2aWNl X29wcyAtIFN0cnVjdHVyZSB0byBiZSByZWdpc3RlcmVkIGZvciBlYWNoCj4gPj4gKyAqIG1kZXYg ZGV2aWNlIHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgZm9yIHZpcnRpby92aG9zdCBkcml2ZXJzLgo+ ID4+ICsgKgo+ID4+ICsgKiBUaGUgZGV2aWNlIG9wcyB0aGF0IGlzIHN1cHBvcnRlZCBieSBWSVJU SU9fTURFVl9GX1ZFUlNJT05fMSwgdGhlCj4gPj4gKyAqIGNhbGxiYWNrcyBhcmUgbWFuZGF0b3J5 IHVubGVzcyBleHBsaWNpdHkgbWVudGlvbmVkLiAgCj4gPiBJZiB0aGUgdmVyc2lvbiBvZiB0aGUg Y2FsbGJhY2tzIGlzIHJldHVybmVkIGJ5IGEgY2FsbGJhY2sgd2l0aGluIHRoZQo+ID4gc3RydWN0 dXJlIGRlZmluZWQgYnkgdGhlIHZlcnNpb24uLi4gaXNuJ3QgdGhhdCBhIGJpdCBjaXJjdWxhcj8g IFRoaXMKPiA+IHNlZW1zIHJlZHVuZGFudCB0byBtZSB2ZXJzdXMgdGhlIGNsYXNzIGlkLiAgVGhl IGZhY3QgdGhhdCB0aGUgcGFyZW50Cj4gPiBkcml2ZXIgZGVmaW5lcyB0aGUgZGV2aWNlIGFzIE1E RVZfQ0xBU1NfSURfVklSVElPIHNob3VsZCB0ZWxsIHVzIHRoaXMKPiA+IGFscmVhZHkuICBJZiBp dCB3YXMgaW5jcmVtZW50ZWQsIHdlJ2QgbmVlZCBhbiBNREVWX0NMQVNTX0lEX1ZJUlRJT3YyLAo+ ID4gd2hpY2ggdGhlIHZpcnRpby1tZGV2IGJ1cyBkcml2ZXIgY291bGQgYWRkIHRvIGl0cyBpZCB0 YWJsZSBhbmQgaGFuZGxlCj4gPiBkaWZmZXJlbnRseS4gIAo+IAo+IAo+IE15IHVuZGVyc3RhbmRp bmcgaXMgdmVyc2lvbnMgYXJlIG9ubHkgYWxsb3dlZCB0byBpbmNyZWFzZSBtb25vdG9uaWNhbGx5 LCAKPiB0aGlzIHNlZW1zIGxlc3MgZmxleGlibGUgdGhhbiBmZWF0dXJlcy4gRS5nIHdlIGhhdmUg ZmVhdHVyZXMgQSwgQiwgQywgCj4gbWRldiBkZXZpY2UgY2FuIGNob29zZSB0byBzdXBwb3J0IG9u bHkgYSBzdWJzZXQuIEUuZyB3aGVuIG1kZXYgZGV2aWNlIAo+IGNhbiBzdXBwb3J0IGRpcnR5IHBh Z2UgbG9nZ2luZywgaXQgY2FuIGFkZCBhIG5ldyBmZWF0dXJlIGJpdCBmb3IgZHJpdmVyIAo+IHRv IGtub3cgdGhhdCBpdCBzdXBwb3J0IG5ldyBkZXZpY2Ugb3BzLiBNREVWX0NMQVNTX0lEX1ZJUlRJ T3YyIG1heSBvbmx5IAo+IGJlIHVzZWZ1bCB3aGVuIHdlIHdpbGwgaW52ZW50IGEgY29tcGxldGUg bmV3IEFQSS4KCkJ1dCB0aGlzIGludGVyZmFjZSByYXRoZXIgY29uZmxhdGVzIGZlYXR1cmVzIGFu ZCB2ZXJzaW9ucyBieSByZXR1cm5pbmcKYSB2ZXJzaW9uIGFzIGEgZmVhdHVyZS4gIElmIHdlIHNp bXBseSB3YW50IHRvIHNheSB0aGF0IHRoZXJlIGFyZSBubwphZGRpdGlvbmFsIGZlYXR1cmVzLCB0 aGVuIGdldF9tZGV2X2ZlYXR1cmVzKCkgc2hvdWxkIHJldHVybiBhbiBlbXB0eQpzZXQuICBJZiBk aXJ0eSBwYWdlIGxvZ2dpbmcgaXMgYSBmZWF0dXJlLCB0aGVuIEknZCBleHBlY3QgYSBiaXQgaW4g dGhlCmdldF9tZGV2X2ZlYXR1cmVzKCkgcmV0dXJuIHZhbHVlIHRvIGlkZW50aWZ5IHRoYXQgZmVh dHVyZS4KCkhvd2V2ZXIsIEkndmUgYmVlbiB1bmRlciB0aGUgaW1wcmVzc2lvbiAocGVyaGFwcyB3 cm9uZ2x5KSB0aGF0IHRoZQpjbGFzcy1pZCBoYXMgYSAxOjEgY29ycmVsYXRpb24gdG8gdGhlIGRl dmljZS1vcHMgZXhwb3NlZCB0byB0aGUgYnVzCmRyaXZlciwgc28gaWYgZGlydHkgcGFnZSBsb2dn aW5nIHJlcXVpcmVzIGV4dHJhIGNhbGxiYWNrcywgdGhhdCB3b3VsZAppbXBseSBhIG5ldyBkZXZp Y2Utb3BzLCB3aGljaCByZXF1aXJlcyBhIG5ldyBjbGFzcy1pZC4gIEluIHRoYXQgY2FzZQp2aXJ0 aW8tbWRldiB3b3VsZCBjbGFpbSBib3RoIGNsYXNzLWlkcyBhbmQgd291bGQgbmVlZCBzb21lIHdh eSB0bwpkaWZmZXJlbnRpYXRlIHRoZW0uICBCdXQgSSBhbHNvIHNlZSB0aGF0IHN1Y2ggYSBzb2x1 dGlvbiBjYW4gYmVjb21lCnVubWFuYWdlYWJsZSBhcyB0aGUgc2V0IG9mIGNsYXNzLWlkcyB3b3Vs ZCBuZWVkIHRvIGVuY29tcGFzcyBldmVyeQpjb21iaW5hdGlvbiBvZiBmZWF0dXJlcy4KClNvIEkg dGhpbmsgd2hhdCdzIHN1Z2dlc3RlZCBieSB0aGlzIGlzIHRoYXQgdGhlIGluaXRpYWwgc3RydWN0 CnZpcnRpb19tZGV2X2RldmljZV9vcHMgaXMgYSBiYXNlIHNldCBvZiBjYWxsYmFja3Mgd2hpY2gg d291bGQgYmUKZXh0ZW5kZWQgdmlhIGZlYXR1cmVzPyAgQnV0IHRoZW4gd2h5IGRvZXMgZ2V0X2dl bmVyYXRpb24oKSBub3QgbWFrZSB1c2UKb2YgdGhpcz8gIEFuZCBpZiB3ZSBjYW4gZGVmaW5lIGdl dF9nZW5lcmF0aW9uKCkgYXMgb3B0aW9uYWwgYW5kIHNpbXBseQp0ZXN0IGlmIGl0J3MgaW1wbGVt ZW50ZWQsIHRoZW4gaXQgc2VlbXMgd2UgZG9uJ3QgbmVlZCBhbnkgZmVhdHVyZSBiaXRzCnRvIGV4 dGVuZCB0aGUgc3RydWN0dXJlICh1bmxlc3Mgd2UncmUgbG9va2luZyBhdCBiaW5hcnkgY29tcGF0 aWJpbGl0eSkuClNvIG1heWJlIGdldF9tZGV2X2ZlYXR1cmVzKCkgaXMgbWVhbnQgdG8gZXhwb3Nl IHVuZGVybHlpbmcgZmVhdHVyZXMKdW5yZWxhdGVkIHRvIHRoZSBjYWxsYmFja3M/ICBXaGljaCBp cyBub3QgaW4gbGluZSB3aXRoIHRoZSBkZXNjcmlwdGlvbj8KSG9wZWZ1bGx5IHlvdSBjYW4gc2Vl IG15IGNvbmZ1c2lvbiBpbiB3aGF0IHdlJ3JlIHRyeWluZyB0byBkbyBoZXJlLgpUaGFua3MsCgpB bGV4Cgo+ID4+ICsgKgo+ID4+ICsgKiBAc2V0X3ZxX2FkZHJlc3M6CQlTZXQgdGhlIGFkZHJlc3Mg b2YgdmlydHF1ZXVlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJ CQkJQGlkeDogdmlydHF1ZXVlIGluZGV4Cj4gPj4gKyAqCQkJCUBkZXNjX2FyZWE6IGFkZHJlc3Mg b2YgZGVzYyBhcmVhCj4gPj4gKyAqCQkJCUBkcml2ZXJfYXJlYTogYWRkcmVzcyBvZiBkcml2ZXIg YXJlYQo+ID4+ICsgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mgb2YgZGV2aWNlIGFyZWEKPiA+ PiArICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNjZXNzICgwKSBvciBlcnJvciAoPCAwKQo+ID4+ ICsgKiBAc2V0X3ZxX251bToJCQlTZXQgdGhlIHNpemUgb2YgdmlydHF1ZXVlCj4gPj4gKyAqCQkJ CUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4 Cj4gPj4gKyAqCQkJCUBudW06IHRoZSBzaXplIG9mIHZpcnRxdWV1ZQo+ID4+ICsgKiBAa2lja192 cToJCQlLaWNrIHRoZSB2aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmlj ZQo+ID4+ICsgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiArICogQHNldF92cV9jYjoJ CQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IKPiA+PiArICoJCQkJYSB2 aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlA aWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiArICoJCQkJQGNiOiB2aXJ0aW8tbWRldiBpbnRlcnJ1 cHQgY2FsbGJhY2sgc3RydWN0dXJlCj4gPj4gKyAqIEBzZXRfdnFfcmVhZHk6CQlTZXQgcmVhZHkg c3RhdHVzIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNl Cj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ID4+ICsgKgkJCQlAcmVhZHk6IHJl YWR5ICh0cnVlKSBub3QgcmVhZHkoZmFsc2UpCj4gPj4gKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQg cmVhZHkgc3RhdHVzIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQg ZGV2aWNlCj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ID4+ICsgKgkJCQlSZXR1 cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBub3QgKGZhbHNlKQo+ID4+ICsgKiBAc2V0X3Zx X3N0YXRlOgkJU2V0IHRoZSBzdGF0ZSBmb3IgYSB2aXJ0cXVldWUKPiA+PiArICoJCQkJQG1kZXY6 IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKPiA+PiAr ICoJCQkJQHN0YXRlOiB2aXJ0cXVldWUgc3RhdGUgKGxhc3RfYXZhaWxfaWR4KQo+ID4+ICsgKgkJ CQlSZXR1cm5zIGludGVnZXI6IHN1Y2Nlc3MgKDApIG9yIGVycm9yICg8IDApCj4gPj4gKyAqIEBn ZXRfdnFfc3RhdGU6CQlHZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQo+ID4+ICsgKgkJCQlA bWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAo+ ID4+ICsgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBzdGF0ZSAobGFzdF9hdmFpbF9pZHgpCj4gPj4g KyAqIEBnZXRfdnFfYWxpZ246CQlHZXQgdGhlIHZpcnRxdWV1ZSBhbGlnbiByZXF1aXJlbWVudAo+ ID4+ICsgKgkJCQlmb3IgdGhlIGRldmljZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2 aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdmlydHF1ZXVlIGFsZ2luIHJlcXVpcmVtZW50Cj4gPj4g KyAqIEBnZXRfZmVhdHVyZXM6CQlHZXQgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUg ZGV2aWNlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJUmV0 dXJucyB0aGUgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnQgYnkgdGhlCj4gPj4gKyAqCQkJCWRldmlj ZQo+ID4+ICsgKiBAZ2V0X2ZlYXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQg YnkgdGhlIGRyaXZlciAgCj4gPiAgICAgICAgIF4gcy9nL3MvCj4gPgo+ID4gVGhhbmtzLAo+ID4g QWxleCAgCj4gCj4gCj4gV2lsbCBmaXguCj4gCj4gVGhhbmtzCj4gCj4gCj4gPiAgCj4gPj4gKyAq CQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJQGZlYXR1cmVzOiBmZWF0dXJl IHN1cHBvcnQgYnkgdGhlIGRyaXZlcgo+ID4+ICsgKgkJCQlSZXR1cm5zIGludGVnZXI6IHN1Y2Nl c3MgKDApIG9yIGVycm9yICg8IDApCj4gPj4gKyAqIEBzZXRfY29uZmlnX2NiOgkJU2V0IHRoZSBj b25maWcgaW50ZXJydXB0IGNhbGxiYWNrCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZp Y2UKPiA+PiArICoJCQkJQGNiOiB2aXJ0aW8tbWRldiBpbnRlcnJ1cHQgY2FsbGJhY2sgc3RydWN0 dXJlCj4gPj4gKyAqIEBnZXRfdnFfbnVtX21heDoJCUdldCB0aGUgbWF4IHNpemUgb2YgdmlydHF1 ZXVlCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+PiArICoJCQkJUmV0dXJu cyB1MTY6IG1heCBzaXplIG9mIHZpcnRxdWV1ZQo+ID4+ICsgKiBAZ2V0X2RldmljZV9pZDoJCUdl dCB2aXJ0aW8gZGV2aWNlIGlkCj4gPj4gKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKPiA+ PiArICoJCQkJUmV0dXJucyB1MzI6IHZpcnRpbyBkZXZpY2UgaWQKPiA+PiArICogQGdldF92ZW5k b3JfaWQ6CQlHZXQgaWQgZm9yIHRoZSB2ZW5kb3IgdGhhdCBwcm92aWRlcyB0aGlzIGRldmljZQo+ ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdTMy OiB2aXJ0aW8gdmVuZG9yIGlkCj4gPj4gKyAqIEBnZXRfc3RhdHVzOgkJCUdldCB0aGUgZGV2aWNl IHN0YXR1cwo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJl dHVybnMgdTg6IHZpcnRpbyBkZXZpY2Ugc3RhdHVzCj4gPj4gKyAqIEBzZXRfc3RhdHVzOgkJCVNl dCB0aGUgZGV2aWNlIHN0YXR1cwo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4g Pj4gKyAqCQkJCUBzdGF0dXM6IHZpcnRpbyBkZXZpY2Ugc3RhdHVzCj4gPj4gKyAqIEBnZXRfY29u ZmlnOgkJCVJlYWQgZnJvbSBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQo+ID4+ ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCUBvZmZzZXQ6IG9mZnNl dCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKPiA+PiArICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQo+ ID4+ICsgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCj4gPj4gKyAqCQkJCUBsZW46 IHRoZSBsZW5ndGggdG8gcmVhZCBmcm9tCj4gPj4gKyAqCQkJCWNvbmZpZ3JhdGlvbiBzcGFjZQo+ ID4+ICsgKiBAc2V0X2NvbmZpZzoJCQlXcml0ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJh dGlvbiBzcGFjZQo+ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJ CUBvZmZzZXQ6IG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKPiA+PiArICoJCQkJY29uZmln dXJhdGlvbiBzcGFjZQo+ID4+ICsgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byB3cml0ZSBmcm9t Cj4gPj4gKyAqCQkJCUBsZW46IHRoZSBsZW5ndGggdG8gd3JpdGUgdG8KPiA+PiArICoJCQkJY29u ZmlncmF0aW9uIHNwYWNlCj4gPj4gKyAqIEBnZXRfbWRldl9mZWF0dXJlczoJCUdldCBhIHNldCBv ZiBiaXRzIHRoYXQgZGVtb25zdHJhdGUKPiA+PiArICoJCQkJdGhlY2FwYWJpbGl0eSBvZiB0aGUg bWRldiBkZXZpY2UuIE5ldwo+ID4+ICsgKgkJCQlmZWF0dXJlcyBiaXRzIG11c3QgYmUgYWRkZWQg d2hlbgo+ID4+ICsgKgkJCQlpbnRyb2R1Y2luZyBuZXcgZGV2aWNlIG9wcy4KPiA+PiArICoJCQkJ QG1kZXY6IG1lZGlhdGVkIGRldmljZQo+ID4+ICsgKgkJCQlSZXR1cm5zIHRoZSBtZGV2IGZlYXR1 cmVzIChBUEkpIHN1cHBvcnQgYnkKPiA+PiArICoJCQkJdGhlIGRldmljZS4KPiA+PiArICogQGdl dF9nZW5lcmF0aW9uOgkJR2V0IGRldmljZSBjb25maWcgZ2VuZXJhdG9uIChvcHRpb25hbGx5KQo+ ID4+ICsgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCj4gPj4gKyAqCQkJCVJldHVybnMgdTMy OiBkZXZpY2UgZ2VuZXJhdGlvbgo+ID4+ICsgKi8KPiA+PiArc3RydWN0IHZpcnRpb19tZGV2X2Rl dmljZV9vcHMgewo+ID4+ICsJLyogVmlydHF1ZXVlIG9wcyAqLwo+ID4+ICsJaW50ICgqc2V0X3Zx X2FkZHJlc3MpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiArCQkJICAgICAgdTE2IGlk eCwgdTY0IGRlc2NfYXJlYSwgdTY0IGRyaXZlcl9hcmVhLAo+ID4+ICsJCQkgICAgICB1NjQgZGV2 aWNlX2FyZWEpOwo+ID4+ICsJdm9pZCAoKnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAq bWRldiwgdTE2IGlkeCwgdTMyIG51bSk7Cj4gPj4gKwl2b2lkICgqa2lja192cSkoc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2LCB1MTYgaWR4KTsKPiA+PiArCXZvaWQgKCpzZXRfdnFfY2IpKHN0cnVj dCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkeCwKPiA+PiArCQkJICBzdHJ1Y3QgdmlydGlvX21k ZXZfY2FsbGJhY2sgKmNiKTsKPiA+PiArCXZvaWQgKCpzZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiwgdTE2IGlkeCwgYm9vbCByZWFkeSk7Cj4gPj4gKwlib29sICgqZ2V0X3Zx X3JlYWR5KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgpOwo+ID4+ICsJaW50ICgq c2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIHU2NCBzdGF0 ZSk7Cj4gPj4gKwl1NjQgKCpnZXRfdnFfc3RhdGUpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwg dTE2IGlkeCk7Cj4gPj4gKwo+ID4+ICsJLyogVmlydGlvIGRldmljZSBvcHMgKi8KPiA+PiArCXUx NiAoKmdldF92cV9hbGlnbikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCXU2NCAo KmdldF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCWludCAoKnNl dF9mZWF0dXJlcykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOwo+ID4+ ICsJdm9pZCAoKnNldF9jb25maWdfY2IpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKPiA+PiAr CQkJICAgICAgc3RydWN0IHZpcnRpb19tZGV2X2NhbGxiYWNrICpjYik7Cj4gPj4gKwl1MTYgKCpn ZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArCXUzMiAoKmdl dF9kZXZpY2VfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cj4gPj4gKwl1MzIgKCpnZXRf dmVuZG9yX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ID4+ICsJdTggKCpnZXRfc3Rh dHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOwo+ID4+ICsJdm9pZCAoKnNldF9zdGF0dXMp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTggc3RhdHVzKTsKPiA+PiArCXZvaWQgKCpnZXRf Y29uZmlnKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCj4g Pj4gKwkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Cj4gPj4gKwl2b2lkICgqc2V0 X2NvbmZpZykoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ ID4+ICsJCQkgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwo+ID4+ICsJdTMy ICgqZ2V0X2dlbmVyYXRpb24pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cj4gPj4gKwo+ID4+ ICsJLyogTWRldiBkZXZpY2Ugb3BzICovCj4gPj4gKwl1NjQgKCpnZXRfbWRldl9mZWF0dXJlcyko c3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKPiA+PiArfTsKPiA+PiArCj4gPj4gK3ZvaWQgbWRl dl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPj4gKwkJCSBjb25z dCBzdHJ1Y3QgdmlydGlvX21kZXZfZGV2aWNlX29wcyAqdmlydGlvX29wcyk7Cj4gPj4gKwo+ID4+ ICsjZW5kaWYgIAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4