From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-2.mimecast.com ([205.139.110.61]:27930 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726596AbfKRGSs (ORCPT ); Mon, 18 Nov 2019 01:18:48 -0500 From: Jason Wang Subject: [PATCH V12 1/6] mdev: make mdev bus agnostic Date: Mon, 18 Nov 2019 14:16:58 +0800 Message-Id: <20191118061703.8669-2-jasowang@redhat.com> In-Reply-To: <20191118061703.8669-1-jasowang@redhat.com> References: <20191118061703.8669-1-jasowang@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Sender: linux-s390-owner@vger.kernel.org List-ID: To: 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, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: 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, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com, rdunlap@infradead.org, hch@infradead.org, gregkh@linuxfoundation.org, jgg@mellanox.com, Jason Wang Current mdev is tied to a VFIO specific "mdev" bus. This prevent mdev from being used by other types of API/buses. So this patch tries to make mdev bus agnostic through making a mdev core a thin module: - decouple VFIO bus specific bits from mdev_core.c to mdev_vfio.c and introduce mdev_vfio module - require to specify the type of bus when registering mdev device and mdev driver With those modifications mdev become a generic module that could be used by multiple types of virtual buses and devices. Signed-off-by: Jason Wang --- .../driver-api/vfio-mediated-device.rst | 68 ++++++------ MAINTAINERS | 1 + drivers/gpu/drm/i915/gvt/kvmgt.c | 10 +- drivers/s390/cio/vfio_ccw_ops.c | 6 +- drivers/s390/crypto/vfio_ap_ops.c | 21 ++-- drivers/s390/crypto/vfio_ap_private.h | 2 +- drivers/vfio/mdev/Kconfig | 17 ++- drivers/vfio/mdev/Makefile | 4 +- drivers/vfio/mdev/mdev_core.c | 104 +++++++++++++----- drivers/vfio/mdev/mdev_driver.c | 29 ++--- drivers/vfio/mdev/mdev_private.h | 13 ++- drivers/vfio/mdev/mdev_vfio.c | 48 ++++++++ drivers/vfio/mdev/vfio_mdev.c | 5 +- drivers/vfio/vfio_iommu_type1.c | 6 +- include/linux/mdev.h | 16 ++- include/linux/mdev_vfio.h | 25 +++++ samples/vfio-mdev/mbochs.c | 8 +- samples/vfio-mdev/mdpy.c | 8 +- samples/vfio-mdev/mtty.c | 8 +- 19 files changed, 270 insertions(+), 129 deletions(-) create mode 100644 drivers/vfio/mdev/mdev_vfio.c create mode 100644 include/linux/mdev_vfio.h diff --git a/Documentation/driver-api/vfio-mediated-device.rst b/Documentat= ion/driver-api/vfio-mediated-device.rst index 25eb7d5b834b..1887d27a565e 100644 --- a/Documentation/driver-api/vfio-mediated-device.rst +++ b/Documentation/driver-api/vfio-mediated-device.rst @@ -49,35 +49,37 @@ devices as examples, as these devices are the first dev= ices to use this module:: =20 +---------------+ | | - | +-----------+ | mdev_register_driver() +--------------+ - | | | +<------------------------+ | - | | mdev | | | | - | | bus | +------------------------>+ vfio_mdev.ko |<-> VFIO us= er - | | driver | | probe()/remove() | | APIs - | | | | +--------------+ - | +-----------+ | + | MDEV CORE | mdev_register_driver() +--------------+ + | MODULE +<------------------------+ | + | mdev.ko | | | + | +------------------------>+ vfio_mdev.ko |<-> VFIO us= er + | | probe()/remove() | | APIs + | | +--------------+ + +---+-------+---+ + | /|\ + | | +callbacks| | mdev_register_device() + | | mdev_register_bus() + \|/ | + +---+-------+---+ + | | mdev_vfio_register_device() +--------------+ + | +<-----------------------------+ | + | | | nvidia.ko |<-> ph= ysical + | +----------------------------->+ | de= vice + | MDEV VFIO | callbacks +--------------+ + | Physical | + | device | mdev_vfio_register_device() +--------------+ + | interface |<-----------------------------+ | + | | | i915.ko |<-> ph= ysical + | mdev_vfio.ko +----------------------------->+ | de= vice + | | callbacks +--------------+ + | | + | | mdev_vfio_register_device() +--------------+ + | +<-----------------------------+ | + | | | ccw_device.ko|<-> ph= ysical + | +----------------------------->+ | de= vice + | | callbacks +--------------+ | | - | MDEV CORE | - | MODULE | - | mdev.ko | - | +-----------+ | mdev_register_device() +--------------+ - | | | +<------------------------+ | - | | | | | nvidia.ko |<-> physica= l - | | | +------------------------>+ | device - | | | | callbacks +--------------+ - | | Physical | | - | | device | | mdev_register_device() +--------------+ - | | interface | |<------------------------+ | - | | | | | i915.ko |<-> physica= l - | | | +------------------------>+ | device - | | | | callbacks +--------------+ - | | | | - | | | | mdev_register_device() +--------------+ - | | | +<------------------------+ | - | | | | | ccw_device.ko|<-> physica= l - | | | +------------------------>+ | device - | | | | callbacks +--------------+ - | +-----------+ | +---------------+ =20 =20 @@ -116,7 +118,8 @@ to register and unregister itself with the core driver: * Register:: =20 extern int mdev_register_driver(struct mdev_driver *drv, -=09=09=09=09 struct module *owner); + struct module *owner, + struct bus_type *bus); =20 * Unregister:: =20 @@ -159,11 +162,12 @@ The callbacks in the mdev_parent_ops structure are as= follows: * write: write emulation callback * mmap: mmap emulation callback =20 -A driver should use the mdev_parent_ops structure in the function call to -register itself with the mdev core driver:: +A driver should use the mdev_parent_ops structure and bus type in the +function call to register itself with the mdev core driver:: =20 =09extern int mdev_register_device(struct device *dev, -=09 const struct mdev_parent_ops *ops); +=09 const struct mdev_parent_ops *ops, + struct bus_type *bus); =20 However, the mdev_parent_ops structure is not required in the function cal= l that a driver should use to unregister itself with the mdev core driver:: diff --git a/MAINTAINERS b/MAINTAINERS index cba1095547fd..d335949240dc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -17121,6 +17121,7 @@ S:=09Maintained F:=09Documentation/driver-api/vfio-mediated-device.rst F:=09drivers/vfio/mdev/ F:=09include/linux/mdev.h +F:=09include/linux/mdev_vfio.h F:=09samples/vfio-mdev/ =20 VFIO PLATFORM DRIVER diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kv= mgt.c index 343d79c1cb7e..8c02572c9b42 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include =20 #include @@ -1554,7 +1554,7 @@ static ssize_t vgpu_id_show(struct device *dev, struct device_attribute *attr, =09 char *buf) { -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =20 =09if (mdev) { =09=09struct intel_vgpu *vgpu =3D (struct intel_vgpu *) @@ -1568,7 +1568,7 @@ static ssize_t hw_id_show(struct device *dev, struct device_attribute *attr, =09 char *buf) { -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =20 =09if (mdev) { =09=09struct intel_vgpu *vgpu =3D (struct intel_vgpu *) @@ -1623,12 +1623,12 @@ static int kvmgt_host_init(struct device *dev, void= *gvt, const void *ops) =09=09return -EFAULT; =09intel_vgpu_ops.supported_type_groups =3D kvm_vgpu_type_groups; =20 -=09return mdev_register_device(dev, &intel_vgpu_ops); +=09return mdev_vfio_register_device(dev, &intel_vgpu_ops); } =20 static void kvmgt_host_exit(struct device *dev) { -=09mdev_unregister_device(dev); +=09mdev_vfio_unregister_device(dev); } =20 static int kvmgt_page_track_add(unsigned long handle, u64 gfn) diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_op= s.c index f0d71ab77c50..791b8b0eb027 100644 --- a/drivers/s390/cio/vfio_ccw_ops.c +++ b/drivers/s390/cio/vfio_ccw_ops.c @@ -11,7 +11,7 @@ */ =20 #include -#include +#include #include #include =20 @@ -588,10 +588,10 @@ static const struct mdev_parent_ops vfio_ccw_mdev_ops= =3D { =20 int vfio_ccw_mdev_reg(struct subchannel *sch) { -=09return mdev_register_device(&sch->dev, &vfio_ccw_mdev_ops); +=09return mdev_vfio_register_device(&sch->dev, &vfio_ccw_mdev_ops); } =20 void vfio_ccw_mdev_unreg(struct subchannel *sch) { -=09mdev_unregister_device(&sch->dev); +=09mdev_vfio_unregister_device(&sch->dev); } diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_a= p_ops.c index 5c0f53c6dde7..78048e670374 100644 --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -602,7 +602,7 @@ static ssize_t assign_adapter_store(struct device *dev, { =09int ret; =09unsigned long apid; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =20 =09/* If the guest is running, disallow assignment of adapter */ @@ -668,7 +668,7 @@ static ssize_t unassign_adapter_store(struct device *de= v, { =09int ret; =09unsigned long apid; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =20 =09/* If the guest is running, disallow un-assignment of adapter */ @@ -748,7 +748,7 @@ static ssize_t assign_domain_store(struct device *dev, { =09int ret; =09unsigned long apqi; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =09unsigned long max_apqi =3D matrix_mdev->matrix.aqm_max; =20 @@ -810,7 +810,7 @@ static ssize_t unassign_domain_store(struct device *dev= , { =09int ret; =09unsigned long apqi; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =20 =09/* If the guest is running, disallow un-assignment of domain */ @@ -854,7 +854,7 @@ static ssize_t assign_control_domain_store(struct devic= e *dev, { =09int ret; =09unsigned long id; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =20 =09/* If the guest is running, disallow assignment of control domain */ @@ -903,7 +903,7 @@ static ssize_t unassign_control_domain_store(struct dev= ice *dev, { =09int ret; =09unsigned long domid; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =09unsigned long max_domid =3D matrix_mdev->matrix.adm_max; =20 @@ -933,7 +933,7 @@ static ssize_t control_domains_show(struct device *dev, =09int nchars =3D 0; =09int n; =09char *bufpos =3D buf; -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =09unsigned long max_domid =3D matrix_mdev->matrix.adm_max; =20 @@ -952,7 +952,7 @@ static DEVICE_ATTR_RO(control_domains); static ssize_t matrix_show(struct device *dev, struct device_attribute *at= tr, =09=09=09 char *buf) { -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct ap_matrix_mdev *matrix_mdev =3D mdev_get_drvdata(mdev); =09char *bufpos =3D buf; =09unsigned long apid; @@ -1295,10 +1295,11 @@ int vfio_ap_mdev_register(void) { =09atomic_set(&matrix_dev->available_instances, MAX_ZDEV_ENTRIES_EXT); =20 -=09return mdev_register_device(&matrix_dev->device, &vfio_ap_matrix_ops); +=09return mdev_vfio_register_device(&matrix_dev->device, +=09=09=09=09=09 &vfio_ap_matrix_ops); } =20 void vfio_ap_mdev_unregister(void) { -=09mdev_unregister_device(&matrix_dev->device); +=09mdev_vfio_unregister_device(&matrix_dev->device); } diff --git a/drivers/s390/crypto/vfio_ap_private.h b/drivers/s390/crypto/vf= io_ap_private.h index f46dde56b464..4e37e0e3433a 100644 --- a/drivers/s390/crypto/vfio_ap_private.h +++ b/drivers/s390/crypto/vfio_ap_private.h @@ -14,7 +14,7 @@ =20 #include #include -#include +#include #include #include #include diff --git a/drivers/vfio/mdev/Kconfig b/drivers/vfio/mdev/Kconfig index 5da27f2100f9..2e07ca915a96 100644 --- a/drivers/vfio/mdev/Kconfig +++ b/drivers/vfio/mdev/Kconfig @@ -1,15 +1,24 @@ -# SPDX-License-Identifier: GPL-2.0-only =20 -config VFIO_MDEV +config MDEV =09tristate "Mediated device driver framework" -=09depends on VFIO =09default n =09help =09 Provides a framework to virtualize devices. -=09 See Documentation/driver-api/vfio-mediated-device.rst for more detail= s. =20 =09 If you don't know what do here, say N. =20 +config VFIO_MDEV +=09tristate "VFIO Mediated device driver" + depends on VFIO && MDEV + default n +=09help +=09 Proivdes a mediated BUS for userspace driver through VFIO +=09 framework. See Documentation/vfio-mediated-device.txt for +=09 more details. + +=09 If you don't know what do here, say N. + + config VFIO_MDEV_DEVICE =09tristate "VFIO driver for Mediated devices" =09depends on VFIO && VFIO_MDEV diff --git a/drivers/vfio/mdev/Makefile b/drivers/vfio/mdev/Makefile index 101516fdf375..e9675501271a 100644 --- a/drivers/vfio/mdev/Makefile +++ b/drivers/vfio/mdev/Makefile @@ -1,6 +1,6 @@ -# SPDX-License-Identifier: GPL-2.0-only =20 mdev-y :=3D mdev_core.o mdev_sysfs.o mdev_driver.o =20 -obj-$(CONFIG_VFIO_MDEV) +=3D mdev.o +obj-$(CONFIG_MDEV) +=3D mdev.o +obj-$(CONFIG_VFIO_MDEV) +=3D mdev_vfio.o obj-$(CONFIG_VFIO_MDEV_DEVICE) +=3D vfio_mdev.o diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index b558d4cfd082..e1272a40c521 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -22,11 +22,13 @@ =20 static LIST_HEAD(parent_list); static DEFINE_MUTEX(parent_list_lock); -static struct class_compat *mdev_bus_compat_class; =20 static LIST_HEAD(mdev_list); static DEFINE_MUTEX(mdev_list_lock); =20 +static LIST_HEAD(class_compat_list); +static DEFINE_MUTEX(compat_list_lock); + struct device *mdev_parent_dev(struct mdev_device *mdev) { =09return mdev->parent->dev; @@ -51,9 +53,9 @@ struct device *mdev_dev(struct mdev_device *mdev) } EXPORT_SYMBOL(mdev_dev); =20 -struct mdev_device *mdev_from_dev(struct device *dev) +struct mdev_device *mdev_from_dev(struct device *dev, struct bus_type *bus= ) { -=09return dev_is_mdev(dev) ? to_mdev_device(dev) : NULL; +=09return dev_is_mdev(dev, bus) ? to_mdev_device(dev) : NULL; } EXPORT_SYMBOL(mdev_from_dev); =20 @@ -122,7 +124,9 @@ static void mdev_device_remove_common(struct mdev_devic= e *mdev) =20 static int mdev_device_remove_cb(struct device *dev, void *data) { -=09if (dev_is_mdev(dev)) { +=09struct bus_type *bus =3D data; + +=09if (dev_is_mdev(dev, bus)) { =09=09struct mdev_device *mdev; =20 =09=09mdev =3D to_mdev_device(dev); @@ -131,6 +135,41 @@ static int mdev_device_remove_cb(struct device *dev, v= oid *data) =09return 0; } =20 +static struct mdev_class_compat *get_class_compat(struct bus_type *bus) +{ +=09struct mdev_class_compat *mdev_class_compat; + +=09list_for_each_entry(mdev_class_compat, &class_compat_list, next) { +=09=09if (mdev_class_compat->bus =3D=3D bus) +=09=09=09return mdev_class_compat; +=09} + +=09return NULL; +} + +static struct class_compat *mdev_alloc_class_compat(struct bus_type *bus) +{ +=09struct mdev_class_compat *mdev_class_compat =3D get_class_compat(bus); +=09char class_name[64]; + +=09if (mdev_class_compat) +=09=09return mdev_class_compat->class_compat; + +=09mdev_class_compat =3D kmalloc(sizeof(*mdev_class_compat), GFP_KERNEL); +=09if (!mdev_class_compat) +=09=09return NULL; +=09snprintf(class_name, 64, "%s_bus", bus->name); +=09mdev_class_compat->class_compat =3D class_compat_register(class_name); +=09if (!mdev_class_compat->class_compat) { +=09=09kfree(mdev_class_compat); +=09=09return NULL; +=09} +=09mdev_class_compat->bus =3D bus; +=09list_add(&mdev_class_compat->next, &class_compat_list); + +=09return mdev_class_compat->class_compat; +} + /* * mdev_register_device : Register a device * @dev: device structure representing parent device. @@ -139,12 +178,14 @@ static int mdev_device_remove_cb(struct device *dev, = void *data) * Add device to list of registered parent devices. * Returns a negative value on error, otherwise 0. */ -int mdev_register_device(struct device *dev, const struct mdev_parent_ops = *ops) +int mdev_register_device(struct device *dev, const struct mdev_parent_ops = *ops, +=09=09=09 struct bus_type *bus) { =09int ret; =09struct mdev_parent *parent; =09char *env_string =3D "MDEV_STATE=3Dregistered"; =09char *envp[] =3D { env_string, NULL }; +=09struct class_compat *class_compat; =20 =09/* check for mandatory ops */ =09if (!ops || !ops->create || !ops->remove || !ops->supported_type_groups= ) @@ -175,20 +216,21 @@ int mdev_register_device(struct device *dev, const st= ruct mdev_parent_ops *ops) =20 =09parent->dev =3D dev; =09parent->ops =3D ops; +=09parent->bus =3D bus; =20 -=09if (!mdev_bus_compat_class) { -=09=09mdev_bus_compat_class =3D class_compat_register("mdev_bus"); -=09=09if (!mdev_bus_compat_class) { -=09=09=09ret =3D -ENOMEM; -=09=09=09goto add_dev_err; -=09=09} +=09mutex_lock(&compat_list_lock); +=09class_compat =3D mdev_alloc_class_compat(bus); +=09mutex_unlock(&compat_list_lock); +=09if (!class_compat) { +=09=09ret =3D -ENOMEM; +=09=09goto add_dev_err; =09} =20 =09ret =3D parent_create_sysfs_files(parent); =09if (ret) =09=09goto add_dev_err; =20 -=09ret =3D class_compat_create_link(mdev_bus_compat_class, dev, NULL); +=09ret =3D class_compat_create_link(class_compat, dev, NULL); =09if (ret) =09=09dev_warn(dev, "Failed to create compatibility class link\n"); =20 @@ -223,6 +265,7 @@ void mdev_unregister_device(struct device *dev) =09struct mdev_parent *parent; =09char *env_string =3D "MDEV_STATE=3Dunregistered"; =09char *envp[] =3D { env_string, NULL }; +=09struct mdev_class_compat *mdev_class_compat; =20 =09mutex_lock(&parent_list_lock); =09parent =3D __find_parent_device(dev); @@ -238,9 +281,13 @@ void mdev_unregister_device(struct device *dev) =20 =09down_write(&parent->unreg_sem); =20 -=09class_compat_remove_link(mdev_bus_compat_class, dev, NULL); +=09mutex_lock(&compat_list_lock); +=09mdev_class_compat =3D get_class_compat(parent->bus); +=09WARN_ON(!mdev_class_compat); +=09class_compat_remove_link(mdev_class_compat->class_compat, dev, NULL); +=09mutex_unlock(&compat_list_lock); =20 -=09device_for_each_child(dev, NULL, mdev_device_remove_cb); +=09device_for_each_child(dev, parent->bus, mdev_device_remove_cb); =20 =09parent_remove_sysfs_files(parent); =09up_write(&parent->unreg_sem); @@ -314,7 +361,7 @@ int mdev_device_create(struct kobject *kobj, =20 =09device_initialize(&mdev->dev); =09mdev->dev.parent =3D dev; -=09mdev->dev.bus =3D &mdev_bus_type; +=09mdev->dev.bus =3D parent->bus; =09mdev->dev.release =3D mdev_device_release; =09dev_set_name(&mdev->dev, "%pUl", uuid); =09mdev->dev.groups =3D parent->ops->mdev_attr_groups; @@ -404,24 +451,29 @@ struct device *mdev_get_iommu_device(struct device *d= ev) } EXPORT_SYMBOL(mdev_get_iommu_device); =20 -static int __init mdev_init(void) +int mdev_register_bus(struct bus_type *bus) { -=09return mdev_bus_register(); +=09return bus_register(bus); } +EXPORT_SYMBOL(mdev_register_bus); =20 -static void __exit mdev_exit(void) +void mdev_unregister_bus(struct bus_type *bus) { -=09if (mdev_bus_compat_class) -=09=09class_compat_unregister(mdev_bus_compat_class); - -=09mdev_bus_unregister(); +=09struct mdev_class_compat *mdev_class_compat; + +=09mutex_lock(&compat_list_lock); +=09mdev_class_compat =3D get_class_compat(bus); +=09if (mdev_class_compat) { +=09=09list_del(&mdev_class_compat->next); +=09=09class_compat_unregister(mdev_class_compat->class_compat); +=09=09kfree(mdev_class_compat); +=09} +=09bus_unregister(bus); +=09mutex_unlock(&compat_list_lock); } - -module_init(mdev_init) -module_exit(mdev_exit) +EXPORT_SYMBOL(mdev_unregister_bus); =20 MODULE_VERSION(DRIVER_VERSION); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_SOFTDEP("post: vfio_mdev"); diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_drive= r.c index 0d3223aee20b..c3a2ac023712 100644 --- a/drivers/vfio/mdev/mdev_driver.c +++ b/drivers/vfio/mdev/mdev_driver.c @@ -10,6 +10,7 @@ #include #include #include +#include =20 #include "mdev_private.h" =20 @@ -37,7 +38,7 @@ static void mdev_detach_iommu(struct mdev_device *mdev) =09dev_info(&mdev->dev, "MDEV: detaching iommu\n"); } =20 -static int mdev_probe(struct device *dev) +int mdev_probe(struct device *dev) { =09struct mdev_driver *drv =3D to_mdev_driver(dev->driver); =09struct mdev_device *mdev =3D to_mdev_device(dev); @@ -55,8 +56,9 @@ static int mdev_probe(struct device *dev) =20 =09return ret; } +EXPORT_SYMBOL(mdev_probe); =20 -static int mdev_remove(struct device *dev) +int mdev_remove(struct device *dev) { =09struct mdev_driver *drv =3D to_mdev_driver(dev->driver); =09struct mdev_device *mdev =3D to_mdev_device(dev); @@ -68,26 +70,22 @@ static int mdev_remove(struct device *dev) =20 =09return 0; } - -struct bus_type mdev_bus_type =3D { -=09.name=09=09=3D "mdev", -=09.probe=09=09=3D mdev_probe, -=09.remove=09=09=3D mdev_remove, -}; -EXPORT_SYMBOL_GPL(mdev_bus_type); +EXPORT_SYMBOL(mdev_remove); =20 /** * mdev_register_driver - register a new MDEV driver * @drv: the driver to register * @owner: module owner of driver to be registered + * @bus: but that the driver wants to attach * * Returns a negative value on error, otherwise 0. **/ -int mdev_register_driver(struct mdev_driver *drv, struct module *owner) +int mdev_register_driver(struct mdev_driver *drv, struct module *owner, +=09=09=09 struct bus_type *bus) { =09/* initialize common driver fields */ =09drv->driver.name =3D drv->name; -=09drv->driver.bus =3D &mdev_bus_type; +=09drv->driver.bus =3D bus; =09drv->driver.owner =3D owner; =20 =09/* register with core */ @@ -105,12 +103,3 @@ void mdev_unregister_driver(struct mdev_driver *drv) } EXPORT_SYMBOL(mdev_unregister_driver); =20 -int mdev_bus_register(void) -{ -=09return bus_register(&mdev_bus_type); -} - -void mdev_bus_unregister(void) -{ -=09bus_unregister(&mdev_bus_type); -} diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_priv= ate.h index 7d922950caaf..298d7a0f493a 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -10,12 +10,10 @@ #ifndef MDEV_PRIVATE_H #define MDEV_PRIVATE_H =20 -int mdev_bus_register(void); -void mdev_bus_unregister(void); - struct mdev_parent { =09struct device *dev; =09const struct mdev_parent_ops *ops; +=09struct bus_type *bus; =09struct kref ref; =09struct list_head next; =09struct kset *mdev_types_kset; @@ -35,8 +33,15 @@ struct mdev_device { =09bool active; }; =20 +struct mdev_class_compat { +=09struct class_compat *class_compat; +=09struct bus_type *bus; +=09struct list_head next; +}; + + #define to_mdev_device(dev)=09container_of(dev, struct mdev_device, dev) -#define dev_is_mdev(d)=09=09((d)->bus =3D=3D &mdev_bus_type) +#define dev_is_mdev(d, bus)=09((d)->bus =3D=3D bus) =20 struct mdev_type { =09struct kobject kobj; diff --git a/drivers/vfio/mdev/mdev_vfio.c b/drivers/vfio/mdev/mdev_vfio.c new file mode 100644 index 000000000000..f9d1191b9982 --- /dev/null +++ b/drivers/vfio/mdev/mdev_vfio.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include +#include +#include + +#define DRIVER_VERSION=09=09"0.1" +#define DRIVER_AUTHOR=09=09"Jason Wang" +#define DRIVER_DESC=09=09"Mediated VFIO bus" + +struct bus_type mdev_vfio_bus_type =3D { +=09.name=09=09=3D "mdev", +=09.probe=09=09=3D mdev_probe, +=09.remove=09=09=3D mdev_remove, +}; +EXPORT_SYMBOL(mdev_vfio_bus_type); + +static int __init mdev_init(void) +{ +=09return mdev_register_bus(&mdev_vfio_bus_type); +} + +static void __exit mdev_exit(void) +{ +=09mdev_unregister_bus(&mdev_vfio_bus_type); +} + +int mdev_vfio_register_device(struct device *dev, +=09=09=09 const struct mdev_parent_ops *ops) +{ +=09return mdev_register_device(dev, ops, &mdev_vfio_bus_type); +} +EXPORT_SYMBOL(mdev_vfio_register_device); + +void mdev_vfio_unregister_device(struct device *dev) +{ +=09return mdev_unregister_device(dev); +} +EXPORT_SYMBOL(mdev_vfio_unregister_device); + +module_init(mdev_init) +module_exit(mdev_exit) + +MODULE_VERSION(DRIVER_VERSION); +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_SOFTDEP("post: vfio_mdev"); diff --git a/drivers/vfio/mdev/vfio_mdev.c b/drivers/vfio/mdev/vfio_mdev.c index 30964a4e0a28..16e9ebe30d4a 100644 --- a/drivers/vfio/mdev/vfio_mdev.c +++ b/drivers/vfio/mdev/vfio_mdev.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include =20 #include "mdev_private.h" =20 @@ -128,7 +128,8 @@ static struct mdev_driver vfio_mdev_driver =3D { =20 static int __init vfio_mdev_init(void) { -=09return mdev_register_driver(&vfio_mdev_driver, THIS_MODULE); +=09return mdev_register_driver(&vfio_mdev_driver, THIS_MODULE, +=09=09=09=09 &mdev_vfio_bus_type); } =20 static void __exit vfio_mdev_exit(void) diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type= 1.c index d864277ea16f..f35523f822eb 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #include #include @@ -1405,10 +1405,10 @@ static bool vfio_bus_is_mdev(struct bus_type *bus) =09struct bus_type *mdev_bus; =09bool ret =3D false; =20 -=09mdev_bus =3D symbol_get(mdev_bus_type); +=09mdev_bus =3D symbol_get(mdev_vfio_bus_type); =09if (mdev_bus) { =09=09ret =3D (bus =3D=3D mdev_bus); -=09=09symbol_put(mdev_bus_type); +=09=09symbol_put(mdev_vfio_bus_type); =09} =20 =09return ret; diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 0ce30ca78db0..ee2410246b3c 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -133,16 +133,22 @@ void *mdev_get_drvdata(struct mdev_device *mdev); void mdev_set_drvdata(struct mdev_device *mdev, void *data); const guid_t *mdev_uuid(struct mdev_device *mdev); =20 -extern struct bus_type mdev_bus_type; - -int mdev_register_device(struct device *dev, const struct mdev_parent_ops = *ops); +int mdev_register_device(struct device *dev, const struct mdev_parent_ops = *ops, +=09=09=09 struct bus_type *bus); void mdev_unregister_device(struct device *dev); =20 -int mdev_register_driver(struct mdev_driver *drv, struct module *owner); +int mdev_register_driver(struct mdev_driver *drv, struct module *owner, +=09=09=09 struct bus_type *bus); void mdev_unregister_driver(struct mdev_driver *drv); =20 struct device *mdev_parent_dev(struct mdev_device *mdev); struct device *mdev_dev(struct mdev_device *mdev); -struct mdev_device *mdev_from_dev(struct device *dev); +struct mdev_device *mdev_from_dev(struct device *dev, struct bus_type *bus= ); + +int mdev_probe(struct device *dev); +int mdev_remove(struct device *dev); + +int mdev_register_bus(struct bus_type *bus); +void mdev_unregister_bus(struct bus_type *bus); =20 #endif /* MDEV_H */ diff --git a/include/linux/mdev_vfio.h b/include/linux/mdev_vfio.h new file mode 100644 index 000000000000..446a7537e3fb --- /dev/null +++ b/include/linux/mdev_vfio.h @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * VFIO Mediated device definition + * + * Copyright (c) 2019, Red Hat. All rights reserved. + * Author: Jason Wang + */ + +#ifndef MDEV_VFIO_H +#define MDEV_VFIO_H + +#include + +extern struct bus_type mdev_vfio_bus_type; + +int mdev_vfio_register_device(struct device *dev, +=09=09=09 const struct mdev_parent_ops *ops); +void mdev_vfio_unregister_device(struct device *dev); + +static inline struct mdev_device *vfio_mdev_from_dev(struct device *dev) +{ +=09return mdev_from_dev(dev, &mdev_vfio_bus_type); +} + +#endif diff --git a/samples/vfio-mdev/mbochs.c b/samples/vfio-mdev/mbochs.c index ac5c8c17b1ff..f041d58324b1 100644 --- a/samples/vfio-mdev/mbochs.c +++ b/samples/vfio-mdev/mbochs.c @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -1332,7 +1332,7 @@ static ssize_t memory_show(struct device *dev, struct device_attribute *attr, =09 char *buf) { -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct mdev_state *mdev_state =3D mdev_get_drvdata(mdev); =20 =09return sprintf(buf, "%d MB\n", mdev_state->type->mbytes); @@ -1468,7 +1468,7 @@ static int __init mbochs_dev_init(void) =09if (ret) =09=09goto failed2; =20 -=09ret =3D mdev_register_device(&mbochs_dev, &mdev_fops); +=09ret =3D mdev_vfio_register_device(&mbochs_dev, &mdev_fops); =09if (ret) =09=09goto failed3; =20 @@ -1487,7 +1487,7 @@ static int __init mbochs_dev_init(void) static void __exit mbochs_dev_exit(void) { =09mbochs_dev.bus =3D NULL; -=09mdev_unregister_device(&mbochs_dev); +=09mdev_vfio_unregister_device(&mbochs_dev); =20 =09device_unregister(&mbochs_dev); =09cdev_del(&mbochs_cdev); diff --git a/samples/vfio-mdev/mdpy.c b/samples/vfio-mdev/mdpy.c index cc86bf6566e4..9c32fe3795ad 100644 --- a/samples/vfio-mdev/mdpy.c +++ b/samples/vfio-mdev/mdpy.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include "mdpy-defs.h" @@ -639,7 +639,7 @@ static ssize_t resolution_show(struct device *dev, struct device_attribute *attr, =09=09char *buf) { -=09struct mdev_device *mdev =3D mdev_from_dev(dev); +=09struct mdev_device *mdev =3D vfio_mdev_from_dev(dev); =09struct mdev_state *mdev_state =3D mdev_get_drvdata(mdev); =20 =09return sprintf(buf, "%dx%d\n", @@ -775,7 +775,7 @@ static int __init mdpy_dev_init(void) =09if (ret) =09=09goto failed2; =20 -=09ret =3D mdev_register_device(&mdpy_dev, &mdev_fops); +=09ret =3D mdev_vfio_register_device(&mdpy_dev, &mdev_fops); =09if (ret) =09=09goto failed3; =20 @@ -794,7 +794,7 @@ static int __init mdpy_dev_init(void) static void __exit mdpy_dev_exit(void) { =09mdpy_dev.bus =3D NULL; -=09mdev_unregister_device(&mdpy_dev); +=09mdev_vfio_unregister_device(&mdpy_dev); =20 =09device_unregister(&mdpy_dev); =09cdev_del(&mdpy_cdev); diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c index ce84a300a4da..6e4e6339e0f1 100644 --- a/samples/vfio-mdev/mtty.c +++ b/samples/vfio-mdev/mtty.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include @@ -1285,7 +1285,7 @@ static ssize_t sample_mdev_dev_show(struct device *dev, struct device_attribute *attr, =09=09 char *buf) { -=09if (mdev_from_dev(dev)) +=09if (vfio_mdev_from_dev(dev)) =09=09return sprintf(buf, "This is MDEV %s\n", dev_name(dev)); =20 =09return sprintf(buf, "\n"); @@ -1445,7 +1445,7 @@ static int __init mtty_dev_init(void) =09if (ret) =09=09goto failed2; =20 -=09ret =3D mdev_register_device(&mtty_dev.dev, &mdev_fops); +=09ret =3D mdev_vfio_register_device(&mtty_dev.dev, &mdev_fops); =09if (ret) =09=09goto failed3; =20 @@ -1471,7 +1471,7 @@ static int __init mtty_dev_init(void) static void __exit mtty_dev_exit(void) { =09mtty_dev.dev.bus =3D NULL; -=09mdev_unregister_device(&mtty_dev.dev); +=09mdev_vfio_unregister_device(&mtty_dev.dev); =20 =09device_unregister(&mtty_dev.dev); =09idr_destroy(&mtty_dev.vd_idr); --=20 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V12 1/6] mdev: make mdev bus agnostic Date: Mon, 18 Nov 2019 14:16:58 +0800 Message-ID: <20191118061703.8669-2-jasowang@redhat.com> References: <20191118061703.8669-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191118061703.8669-1-jasowang@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: 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, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: rdunlap@infradead.org, christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, jgg@mellanox.com, rob.miller@broadcom.com, hch@infradead.org, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, parav@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, stefanha@redhat.com, zhihong.wang@intel.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, gregkh@linuxfoundation.org, lingshan.zhu@intel.com List-Id: dri-devel@lists.freedesktop.org Q3VycmVudCBtZGV2IGlzIHRpZWQgdG8gYSBWRklPIHNwZWNpZmljICJtZGV2IiBidXMuIFRoaXMg cHJldmVudCBtZGV2CmZyb20gYmVpbmcgdXNlZCBieSBvdGhlciB0eXBlcyBvZiBBUEkvYnVzZXMu IFNvIHRoaXMgcGF0Y2ggdHJpZXMgdG8gbWFrZQptZGV2IGJ1cyBhZ25vc3RpYyB0aHJvdWdoIG1h a2luZyBhIG1kZXYgY29yZSBhIHRoaW4gbW9kdWxlOgoKLSBkZWNvdXBsZSBWRklPIGJ1cyBzcGVj aWZpYyBiaXRzIGZyb20gbWRldl9jb3JlLmMgdG8gbWRldl92ZmlvLmMgYW5kCiAgaW50cm9kdWNl IG1kZXZfdmZpbyBtb2R1bGUKLSByZXF1aXJlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgYnVzIHdo ZW4gcmVnaXN0ZXJpbmcgbWRldiBkZXZpY2UgYW5kCiAgbWRldiBkcml2ZXIKCldpdGggdGhvc2Ug bW9kaWZpY2F0aW9ucyBtZGV2IGJlY29tZSBhIGdlbmVyaWMgbW9kdWxlIHRoYXQgY291bGQgYmUK dXNlZCBieSBtdWx0aXBsZSB0eXBlcyBvZiB2aXJ0dWFsIGJ1c2VzIGFuZCBkZXZpY2VzLgoKU2ln bmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiAuLi4vZHJp dmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgICAgICAgfCAgNjggKysrKysrLS0tLS0t CiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMgICAgICAgICAgICAgIHwgIDEwICstCiBk cml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRy aXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyAgICAgICAgICAgICB8ICAyMSArKy0tCiBk cml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oICAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvdmZpby9tZGV2L0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAxNyArKy0KIGRy aXZlcnMvdmZpby9tZGV2L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogZHJp dmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMgICAgICAgICAgICAgICAgIHwgMTA0ICsrKysrKysr KysrKystLS0tLQogZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyAgICAgICAgICAgICAg IHwgIDI5ICsrLS0tCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCAgICAgICAgICAg ICAgfCAgMTMgKystCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ZmaW8uYyAgICAgICAgICAgICAg ICAgfCAgNDggKysrKysrKysKIGRyaXZlcnMvdmZpby9tZGV2L3ZmaW9fbWRldi5jICAgICAgICAg ICAgICAgICB8ICAgNSArLQogZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyAgICAgICAg ICAgICAgIHwgICA2ICstCiBpbmNsdWRlL2xpbnV4L21kZXYuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTYgKystCiBpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oICAgICAgICAgICAgICAg ICAgICAgfCAgMjUgKysrKysKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAg ICAgICAgICB8ICAgOCArLQogc2FtcGxlcy92ZmlvLW1kZXYvbWRweS5jICAgICAgICAgICAgICAg ICAgICAgIHwgICA4ICstCiBzYW1wbGVzL3ZmaW8tbWRldi9tdHR5LmMgICAgICAgICAgICAgICAg ICAgICAgfCAgIDggKy0KIDE5IGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRpb25zKCspLCAxMjkg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92ZmlvL21kZXYvbWRldl92 ZmlvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oCgpkaWZm IC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJz dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QKaW5k ZXggMjVlYjdkNWI4MzRiLi4xODg3ZDI3YTU2NWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24v ZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9k cml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdApAQCAtNDksMzUgKzQ5LDM3IEBAIGRl dmljZXMgYXMgZXhhbXBsZXMsIGFzIHRoZXNlIGRldmljZXMgYXJlIHRoZSBmaXJzdCBkZXZpY2Vz IHRvIHVzZSB0aGlzIG1vZHVsZTo6CiAKICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKICAgICAgfCAg ICAgICAgICAgICAgIHwKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwgIG1kZXZfcmVnaXN0ZXJfZHJp dmVyKCkgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgICAgICAgICAgIHwgKzwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8Ci0gICAgIHwgfCAgbWRldiAgICAgfCB8ICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKLSAgICAgfCB8ICBidXMgICAg ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+KyB2ZmlvX21kZXYua28gfDwtPiBWRklPIHVz ZXIKLSAgICAgfCB8ICBkcml2ZXIgICB8IHwgICAgIHByb2JlKCkvcmVtb3ZlKCkgICAgfCAgICAg ICAgICAgICAgfCAgICBBUElzCi0gICAgIHwgfCAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg ICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwKKyAgICAg fCAgIE1ERVYgQ09SRSAgIHwgIG1kZXZfcmVnaXN0ZXJfZHJpdmVyKCkgKy0tLS0tLS0tLS0tLS0t KworICAgICB8ICAgIE1PRFVMRSAgICAgKzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAg ICAgICAgICB8CisgICAgIHwgICAgbWRldi5rbyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0+KyB2ZmlvX21kZXYua28gfDwtPiBWRklPIHVzZXIKKyAgICAgfCAgICAgICAgICAg ICAgIHwgICAgIHByb2JlKCkvcmVtb3ZlKCkgICAgfCAgICAgICAgICAgICAgfCAgICBBUElzCisg ICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsKKyAgICAgKy0tLSstLS0tLS0tKy0tLSsKKyAgICAgICAgIHwgICAgICAvfFwKKyAgICAg ICAgIHwgICAgICAgfAorY2FsbGJhY2tzfCAgICAgICB8IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCkK KyAgICAgICAgIHwgICAgICAgfCBtZGV2X3JlZ2lzdGVyX2J1cygpCisgICAgICAgIFx8LyAgICAg IHwKKyAgICAgKy0tLSstLS0tLS0tKy0tLSsKKyAgICAgfCAgICAgICAgICAgICAgIHwgIG1kZXZf dmZpb19yZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAg ICAgICArPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAg ICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG52aWRp YS5rbyAgIHw8LT4gcGh5c2ljYWwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgTURF ViBWRklPICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsK KyAgICAgfCAgIFBoeXNpY2FsICAgIHwKKyAgICAgfCAgICBkZXZpY2UgICAgIHwgIG1kZXZfdmZp b19yZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICBpbnRlcmZhY2Ug ICB8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgICB8 ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGk5MTUua28g ICAgIHw8LT4gcGh5c2ljYWwKKyAgICAgfCBtZGV2X3ZmaW8ua28gICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgICAgICAg ICAgICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAg ICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgIHwgIG1kZXZfdmZpb19y ZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAgICAgICAr PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgICB8ICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2N3X2RldmljZS5r b3w8LT4gcGh5c2ljYWwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgICAgICAgICAg ICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKICAgICAg fCAgICAgICAgICAgICAgIHwKLSAgICAgfCAgTURFViBDT1JFICAgIHwKLSAgICAgfCAgIE1PRFVM RSAgICAgIHwKLSAgICAgfCAgIG1kZXYua28gICAgIHwKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwg IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCkgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgICAgICAg ICAgIHwgKzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8Ci0gICAgIHwg fCAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG52aWRpYS5rbyAgIHw8 LT4gcGh5c2ljYWwKLSAgICAgfCB8ICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0+KyAgICAgICAgICAgICAgfCAgICBkZXZpY2UKLSAgICAgfCB8ICAgICAgICAgICB8IHwgICAg ICAgIGNhbGxiYWNrcyAgICAgICAgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgUGh5c2ljYWwg IHwgfAotICAgICB8IHwgIGRldmljZSAgIHwgfCAgbWRldl9yZWdpc3Rlcl9kZXZpY2UoKSArLS0t LS0tLS0tLS0tLS0rCi0gICAgIHwgfCBpbnRlcmZhY2UgfCB8PC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsgICAgICAgICAgICAgIHwKLSAgICAgfCB8ICAgICAgICAgICB8IHwgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgaTkxNS5rbyAgICAgfDwtPiBwaHlzaWNhbAotICAgICB8IHwgICAgICAg ICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmlj ZQotICAgICB8IHwgICAgICAgICAgIHwgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICArLS0tLS0t LS0tLS0tLS0rCi0gICAgIHwgfCAgICAgICAgICAgfCB8Ci0gICAgIHwgfCAgICAgICAgICAgfCB8 ICBtZGV2X3JlZ2lzdGVyX2RldmljZSgpICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCB8ICAgICAg ICAgICB8ICs8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAotICAgICB8 IHwgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjd19kZXZpY2Uua298 PC0+IHBoeXNpY2FsCi0gICAgIHwgfCAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPisgICAgICAgICAgICAgIHwgICAgZGV2aWNlCi0gICAgIHwgfCAgICAgICAgICAgfCB8ICAg ICAgICBjYWxsYmFja3MgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCArLS0tLS0tLS0t LS0rIHwKICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKIAogCkBAIC0xMTYsNyArMTE4LDggQEAgdG8g cmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGNvcmUgZHJpdmVyOgogKiBS ZWdpc3Rlcjo6CiAKICAgICBleHRlcm4gaW50ICBtZGV2X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qg bWRldl9kcml2ZXIgKmRydiwKLQkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1c190eXBlICpidXMpOwog CiAqIFVucmVnaXN0ZXI6OgogCkBAIC0xNTksMTEgKzE2MiwxMiBAQCBUaGUgY2FsbGJhY2tzIGlu IHRoZSBtZGV2X3BhcmVudF9vcHMgc3RydWN0dXJlIGFyZSBhcyBmb2xsb3dzOgogKiB3cml0ZTog d3JpdGUgZW11bGF0aW9uIGNhbGxiYWNrCiAqIG1tYXA6IG1tYXAgZW11bGF0aW9uIGNhbGxiYWNr CiAKLUEgZHJpdmVyIHNob3VsZCB1c2UgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1cmUgaW4g dGhlIGZ1bmN0aW9uIGNhbGwgdG8KLXJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBtZGV2IGNvcmUg ZHJpdmVyOjoKK0EgZHJpdmVyIHNob3VsZCB1c2UgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1 cmUgYW5kIGJ1cyB0eXBlIGluIHRoZQorZnVuY3Rpb24gY2FsbCB0byByZWdpc3RlciBpdHNlbGYg d2l0aCB0aGUgbWRldiBjb3JlIGRyaXZlcjo6CiAKIAlleHRlcm4gaW50ICBtZGV2X3JlZ2lzdGVy X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzKTsKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWRldl9wYXJlbnRfb3BzICpvcHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidXNfdHlwZSAq YnVzKTsKIAogSG93ZXZlciwgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1cmUgaXMgbm90IHJl cXVpcmVkIGluIHRoZSBmdW5jdGlvbiBjYWxsCiB0aGF0IGEgZHJpdmVyIHNob3VsZCB1c2UgdG8g dW5yZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgbWRldiBjb3JlIGRyaXZlcjo6CmRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGNiYTEwOTU1NDdmZC4uZDMzNTk0OTI0 MGRjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTcxMjEs NiArMTcxMjEsNyBAQCBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkv dmZpby1tZWRpYXRlZC1kZXZpY2UucnN0CiBGOglkcml2ZXJzL3ZmaW8vbWRldi8KIEY6CWluY2x1 ZGUvbGludXgvbWRldi5oCitGOglpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oCiBGOglzYW1wbGVz L3ZmaW8tbWRldi8KIAogVkZJTyBQTEFURk9STSBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0 LmMKaW5kZXggMzQzZDc5YzFjYjdlLi44YzAyNTcyYzliNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9r dm1ndC5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXVpZC5oPgogI2luY2x1 ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmZpby5oPgotI2luY2x1ZGUg PGxpbnV4L21kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGV2X3ZmaW8uaD4KICNpbmNsdWRlIDxs aW51eC9kZWJ1Z2ZzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9ub3NwZWMuaD4KQEAgLTE1NTQsNyAr MTU1NCw3IEBAIHN0YXRpYyBzc2l6ZV90CiB2Z3B1X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICAgIGNoYXIgKmJ1ZikKIHsKLQlz dHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21fZGV2KGRldik7CisJc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21fZGV2KGRldik7CiAKIAlpZiAobWRldikg ewogCQlzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSA9IChzdHJ1Y3QgaW50ZWxfdmdwdSAqKQpAQCAt MTU2OCw3ICsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QKIGh3X2lkX3Nob3coc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICBjaGFyICpidWYpCiB7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCiAJaWYgKG1k ZXYpIHsKIAkJc3RydWN0IGludGVsX3ZncHUgKnZncHUgPSAoc3RydWN0IGludGVsX3ZncHUgKikK QEAgLTE2MjMsMTIgKzE2MjMsMTIgQEAgc3RhdGljIGludCBrdm1ndF9ob3N0X2luaXQoc3RydWN0 IGRldmljZSAqZGV2LCB2b2lkICpndnQsIGNvbnN0IHZvaWQgKm9wcykKIAkJcmV0dXJuIC1FRkFV TFQ7CiAJaW50ZWxfdmdwdV9vcHMuc3VwcG9ydGVkX3R5cGVfZ3JvdXBzID0ga3ZtX3ZncHVfdHlw ZV9ncm91cHM7CiAKLQlyZXR1cm4gbWRldl9yZWdpc3Rlcl9kZXZpY2UoZGV2LCAmaW50ZWxfdmdw dV9vcHMpOworCXJldHVybiBtZGV2X3ZmaW9fcmVnaXN0ZXJfZGV2aWNlKGRldiwgJmludGVsX3Zn cHVfb3BzKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtZ3RfaG9zdF9leGl0KHN0cnVjdCBkZXZpY2Ug KmRldikKIHsKLQltZGV2X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJbWRldl92ZmlvX3VucmVn aXN0ZXJfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQga3ZtZ3RfcGFnZV90cmFja19hZGQo dW5zaWduZWQgbG9uZyBoYW5kbGUsIHU2NCBnZm4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAv Y2lvL3ZmaW9fY2N3X29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYwppbmRl eCBmMGQ3MWFiNzdjNTAuLjc5MWI4YjBlYjAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Np by92ZmlvX2Njd19vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jCkBA IC0xMSw3ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KLSNpbmNsdWRl IDxsaW51eC9tZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8 bGludXgvbm9zcGVjLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCkBAIC01ODgsMTAgKzU4 OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyB2ZmlvX2Njd19tZGV2 X29wcyA9IHsKIAogaW50IHZmaW9fY2N3X21kZXZfcmVnKHN0cnVjdCBzdWJjaGFubmVsICpzY2gp CiB7Ci0JcmV0dXJuIG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCZzY2gtPmRldiwgJnZmaW9fY2N3X21k ZXZfb3BzKTsKKwlyZXR1cm4gbWRldl92ZmlvX3JlZ2lzdGVyX2RldmljZSgmc2NoLT5kZXYsICZ2 ZmlvX2Njd19tZGV2X29wcyk7CiB9CiAKIHZvaWQgdmZpb19jY3dfbWRldl91bnJlZyhzdHJ1Y3Qg c3ViY2hhbm5lbCAqc2NoKQogewotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJnNjaC0+ZGV2KTsK KwltZGV2X3ZmaW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnNjaC0+ZGV2KTsKIH0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8v dmZpb19hcF9vcHMuYwppbmRleCA1YzBmNTNjNmRkZTcuLjc4MDQ4ZTY3MDM3NCAxMDA2NDQKLS0t IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9j cnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtNjAyLDcgKzYwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGFz c2lnbl9hZGFwdGVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0OwogCXVu c2lnbmVkIGxvbmcgYXBpZDsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21f ZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21fZGV2 KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IG1kZXZfZ2V0X2Ry dmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywgZGlzYWxsb3cgYXNz aWdubWVudCBvZiBhZGFwdGVyICovCkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIHNzaXplX3Qg dW5hc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiB7CiAJaW50IHJldDsK IAl1bnNpZ25lZCBsb25nIGFwaWQ7Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9m cm9tX2RldihkZXYpOworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9t X2RldihkZXYpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dl dF9kcnZkYXRhKG1kZXYpOwogCiAJLyogSWYgdGhlIGd1ZXN0IGlzIHJ1bm5pbmcsIGRpc2FsbG93 IHVuLWFzc2lnbm1lbnQgb2YgYWRhcHRlciAqLwpAQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyBz c2l6ZV90IGFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogewogCWludCBy ZXQ7CiAJdW5zaWduZWQgbG9uZyBhcHFpOwotCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG1k ZXZfZnJvbV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB2ZmlvX21kZXZf ZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gbWRl dl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAl1bnNpZ25lZCBsb25nIG1heF9hcHFpID0gbWF0cml4X21k ZXYtPm1hdHJpeC5hcW1fbWF4OwogCkBAIC04MTAsNyArODEwLDcgQEAgc3RhdGljIHNzaXplX3Qg dW5hc3NpZ25fZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0Owog CXVuc2lnbmVkIGxvbmcgYXBxaTsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zy b21fZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21f ZGV2KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IG1kZXZfZ2V0 X2RydmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywgZGlzYWxsb3cg dW4tYXNzaWdubWVudCBvZiBkb21haW4gKi8KQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgc3Np emVfdCBhc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogewog CWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBpZDsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYg PSBtZGV2X2Zyb21fZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19t ZGV2X2Zyb21fZGV2KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9 IG1kZXZfZ2V0X2RydmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywg ZGlzYWxsb3cgYXNzaWdubWVudCBvZiBjb250cm9sIGRvbWFpbiAqLwpAQCAtOTAzLDcgKzkwMyw3 IEBAIHN0YXRpYyBzc2l6ZV90IHVuYXNzaWduX2NvbnRyb2xfZG9tYWluX3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZG9taWQ7Ci0Jc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBhcF9tYXRyaXhf bWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dldF9kcnZkYXRhKG1kZXYpOwogCXVuc2lnbmVkIGxv bmcgbWF4X2RvbWlkID0gIG1hdHJpeF9tZGV2LT5tYXRyaXguYWRtX21heDsKIApAQCAtOTMzLDcg KzkzMyw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbnRyb2xfZG9tYWluc19zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKIAlpbnQgbmNoYXJzID0gMDsKIAlpbnQgbjsKIAljaGFyICpidWZwb3MgPSBidWY7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBh cF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dldF9kcnZkYXRhKG1kZXYpOwogCXVu c2lnbmVkIGxvbmcgbWF4X2RvbWlkID0gbWF0cml4X21kZXYtPm1hdHJpeC5hZG1fbWF4OwogCkBA IC05NTIsNyArOTUyLDcgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKGNvbnRyb2xfZG9tYWlucyk7 CiBzdGF0aWMgc3NpemVfdCBtYXRyaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiA9IG1kZXZfZnJvbV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWRldl9kZXZpY2Ug Km1kZXYgPSB2ZmlvX21kZXZfZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYg Km1hdHJpeF9tZGV2ID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAljaGFyICpidWZwb3MgPSBi dWY7CiAJdW5zaWduZWQgbG9uZyBhcGlkOwpAQCAtMTI5NSwxMCArMTI5NSwxMSBAQCBpbnQgdmZp b19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpCiB7CiAJYXRvbWljX3NldCgmbWF0cml4X2Rldi0+YXZh aWxhYmxlX2luc3RhbmNlcywgTUFYX1pERVZfRU5UUklFU19FWFQpOwogCi0JcmV0dXJuIG1kZXZf cmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2UsICZ2ZmlvX2FwX21hdHJpeF9vcHMp OworCXJldHVybiBtZGV2X3ZmaW9fcmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2Us CisJCQkJCSAmdmZpb19hcF9tYXRyaXhfb3BzKTsKIH0KIAogdm9pZCB2ZmlvX2FwX21kZXZfdW5y ZWdpc3Rlcih2b2lkKQogewotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJm1hdHJpeF9kZXYtPmRl dmljZSk7CisJbWRldl92ZmlvX3VucmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2Up OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaCBi L2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgKaW5kZXggZjQ2ZGRlNTZiNDY0 Li40ZTM3ZTBlMzQzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9w cml2YXRlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaApAQCAt MTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWRl dl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zm aW8vbWRldi9LY29uZmlnIGIvZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZwppbmRleCA1ZGEyN2Yy MTAwZjkuLjJlMDdjYTkxNWE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvS2NvbmZp ZworKysgYi9kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnCkBAIC0xLDE1ICsxLDI0IEBACi0jIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAotY29uZmlnIFZGSU9fTURFVgor Y29uZmlnIE1ERVYKIAl0cmlzdGF0ZSAiTWVkaWF0ZWQgZGV2aWNlIGRyaXZlciBmcmFtZXdvcmsi Ci0JZGVwZW5kcyBvbiBWRklPCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgUHJvdmlkZXMgYSBmcmFt ZXdvcmsgdG8gdmlydHVhbGl6ZSBkZXZpY2VzLgotCSAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVy LWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgZm9yIG1vcmUgZGV0YWlscy4KIAogCSAgSWYg eW91IGRvbid0IGtub3cgd2hhdCBkbyBoZXJlLCBzYXkgTi4KIAorY29uZmlnIFZGSU9fTURFVgor CXRyaXN0YXRlICJWRklPIE1lZGlhdGVkIGRldmljZSBkcml2ZXIiCisgICAgICAgIGRlcGVuZHMg b24gVkZJTyAmJiBNREVWCisgICAgICAgIGRlZmF1bHQgbgorCWhlbHAKKwkgIFByb2l2ZGVzIGEg bWVkaWF0ZWQgQlVTIGZvciB1c2Vyc3BhY2UgZHJpdmVyIHRocm91Z2ggVkZJTworCSAgZnJhbWV3 b3JrLiBTZWUgRG9jdW1lbnRhdGlvbi92ZmlvLW1lZGlhdGVkLWRldmljZS50eHQgZm9yCisJICBt b3JlIGRldGFpbHMuCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgZG8gaGVyZSwgc2F5IE4u CisKKwogY29uZmlnIFZGSU9fTURFVl9ERVZJQ0UKIAl0cmlzdGF0ZSAiVkZJTyBkcml2ZXIgZm9y IE1lZGlhdGVkIGRldmljZXMiCiAJZGVwZW5kcyBvbiBWRklPICYmIFZGSU9fTURFVgpkaWZmIC0t Z2l0IGEvZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vbWRldi9NYWtl ZmlsZQppbmRleCAxMDE1MTZmZGYzNzUuLmU5Njc1NTAxMjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVy cy92ZmlvL21kZXYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUKQEAg LTEsNiArMSw2IEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAog bWRldi15IDo9IG1kZXZfY29yZS5vIG1kZXZfc3lzZnMubyBtZGV2X2RyaXZlci5vCiAKLW9iai0k KENPTkZJR19WRklPX01ERVYpICs9IG1kZXYubworb2JqLSQoQ09ORklHX01ERVYpICs9IG1kZXYu bworb2JqLSQoQ09ORklHX1ZGSU9fTURFVikgKz0gbWRldl92ZmlvLm8KIG9iai0kKENPTkZJR19W RklPX01ERVZfREVWSUNFKSArPSB2ZmlvX21kZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92Zmlv L21kZXYvbWRldl9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwppbmRleCBi NTU4ZDRjZmQwODIuLmUxMjcyYTQwYzUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYv bWRldl9jb3JlLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKQEAgLTIyLDEx ICsyMiwxMyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBhcmVudF9saXN0KTsKIHN0YXRpYyBERUZJ TkVfTVVURVgocGFyZW50X2xpc3RfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2NvbXBhdCAq bWRldl9idXNfY29tcGF0X2NsYXNzOwogCiBzdGF0aWMgTElTVF9IRUFEKG1kZXZfbGlzdCk7CiBz dGF0aWMgREVGSU5FX01VVEVYKG1kZXZfbGlzdF9sb2NrKTsKIAorc3RhdGljIExJU1RfSEVBRChj bGFzc19jb21wYXRfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXBhdF9saXN0X2xvY2sp OworCiBzdHJ1Y3QgZGV2aWNlICptZGV2X3BhcmVudF9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2KQogewogCXJldHVybiBtZGV2LT5wYXJlbnQtPmRldjsKQEAgLTUxLDkgKzUzLDkgQEAgc3Ry dWN0IGRldmljZSAqbWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogfQogRVhQT1JU X1NZTUJPTChtZGV2X2Rldik7CiAKLXN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9mcm9tX2Rldihz dHJ1Y3QgZGV2aWNlICpkZXYpCitzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXZfZnJvbV9kZXYoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIHsKLQlyZXR1cm4gZGV2X2lz X21kZXYoZGV2KSA/IHRvX21kZXZfZGV2aWNlKGRldikgOiBOVUxMOworCXJldHVybiBkZXZfaXNf bWRldihkZXYsIGJ1cykgPyB0b19tZGV2X2RldmljZShkZXYpIDogTlVMTDsKIH0KIEVYUE9SVF9T WU1CT0wobWRldl9mcm9tX2Rldik7CiAKQEAgLTEyMiw3ICsxMjQsOSBAQCBzdGF0aWMgdm9pZCBt ZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAogc3Rh dGljIGludCBtZGV2X2RldmljZV9yZW1vdmVfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpk YXRhKQogewotCWlmIChkZXZfaXNfbWRldihkZXYpKSB7CisJc3RydWN0IGJ1c190eXBlICpidXMg PSBkYXRhOworCisJaWYgKGRldl9pc19tZGV2KGRldiwgYnVzKSkgewogCQlzdHJ1Y3QgbWRldl9k ZXZpY2UgKm1kZXY7CiAKIAkJbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7CkBAIC0xMzEsNiAr MTM1LDQxIEBAIHN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBtZGV2X2Ns YXNzX2NvbXBhdCAqZ2V0X2NsYXNzX2NvbXBhdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKKwlz dHJ1Y3QgbWRldl9jbGFzc19jb21wYXQgKm1kZXZfY2xhc3NfY29tcGF0OworCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShtZGV2X2NsYXNzX2NvbXBhdCwgJmNsYXNzX2NvbXBhdF9saXN0LCBuZXh0KSB7 CisJCWlmIChtZGV2X2NsYXNzX2NvbXBhdC0+YnVzID09IGJ1cykKKwkJCXJldHVybiBtZGV2X2Ns YXNzX2NvbXBhdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFz c19jb21wYXQgKm1kZXZfYWxsb2NfY2xhc3NfY29tcGF0KHN0cnVjdCBidXNfdHlwZSAqYnVzKQor eworCXN0cnVjdCBtZGV2X2NsYXNzX2NvbXBhdCAqbWRldl9jbGFzc19jb21wYXQgPSBnZXRfY2xh c3NfY29tcGF0KGJ1cyk7CisJY2hhciBjbGFzc19uYW1lWzY0XTsKKworCWlmIChtZGV2X2NsYXNz X2NvbXBhdCkKKwkJcmV0dXJuIG1kZXZfY2xhc3NfY29tcGF0LT5jbGFzc19jb21wYXQ7CisKKwlt ZGV2X2NsYXNzX2NvbXBhdCA9IGttYWxsb2Moc2l6ZW9mKCptZGV2X2NsYXNzX2NvbXBhdCksIEdG UF9LRVJORUwpOworCWlmICghbWRldl9jbGFzc19jb21wYXQpCisJCXJldHVybiBOVUxMOworCXNu cHJpbnRmKGNsYXNzX25hbWUsIDY0LCAiJXNfYnVzIiwgYnVzLT5uYW1lKTsKKwltZGV2X2NsYXNz X2NvbXBhdC0+Y2xhc3NfY29tcGF0ID0gY2xhc3NfY29tcGF0X3JlZ2lzdGVyKGNsYXNzX25hbWUp OworCWlmICghbWRldl9jbGFzc19jb21wYXQtPmNsYXNzX2NvbXBhdCkgeworCQlrZnJlZShtZGV2 X2NsYXNzX2NvbXBhdCk7CisJCXJldHVybiBOVUxMOworCX0KKwltZGV2X2NsYXNzX2NvbXBhdC0+ YnVzID0gYnVzOworCWxpc3RfYWRkKCZtZGV2X2NsYXNzX2NvbXBhdC0+bmV4dCwgJmNsYXNzX2Nv bXBhdF9saXN0KTsKKworCXJldHVybiBtZGV2X2NsYXNzX2NvbXBhdC0+Y2xhc3NfY29tcGF0Owor fQorCiAvKgogICogbWRldl9yZWdpc3Rlcl9kZXZpY2UgOiBSZWdpc3RlciBhIGRldmljZQogICog QGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS4KQEAgLTEz OSwxMiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBk ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKICAqIEFkZCBkZXZpY2UgdG8gbGlzdCBvZiByZWdpc3Rl cmVkIHBhcmVudCBkZXZpY2VzLgogICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9y LCBvdGhlcndpc2UgMC4KICAqLwotaW50IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZp Y2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzKQoraW50IG1kZXZfcmVn aXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50 X29wcyAqb3BzLAorCQkJIHN0cnVjdCBidXNfdHlwZSAqYnVzKQogewogCWludCByZXQ7CiAJc3Ry dWN0IG1kZXZfcGFyZW50ICpwYXJlbnQ7CiAJY2hhciAqZW52X3N0cmluZyA9ICJNREVWX1NUQVRF PXJlZ2lzdGVyZWQiOwogCWNoYXIgKmVudnBbXSA9IHsgZW52X3N0cmluZywgTlVMTCB9OworCXN0 cnVjdCBjbGFzc19jb21wYXQgKmNsYXNzX2NvbXBhdDsKIAogCS8qIGNoZWNrIGZvciBtYW5kYXRv cnkgb3BzICovCiAJaWYgKCFvcHMgfHwgIW9wcy0+Y3JlYXRlIHx8ICFvcHMtPnJlbW92ZSB8fCAh b3BzLT5zdXBwb3J0ZWRfdHlwZV9ncm91cHMpCkBAIC0xNzUsMjAgKzIxNiwyMSBAQCBpbnQgbWRl dl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgbWRldl9w YXJlbnRfb3BzICpvcHMpCiAKIAlwYXJlbnQtPmRldiA9IGRldjsKIAlwYXJlbnQtPm9wcyA9IG9w czsKKwlwYXJlbnQtPmJ1cyA9IGJ1czsKIAotCWlmICghbWRldl9idXNfY29tcGF0X2NsYXNzKSB7 Ci0JCW1kZXZfYnVzX2NvbXBhdF9jbGFzcyA9IGNsYXNzX2NvbXBhdF9yZWdpc3RlcigibWRldl9i dXMiKTsKLQkJaWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHsKLQkJCXJldCA9IC1FTk9NRU07 Ci0JCQlnb3RvIGFkZF9kZXZfZXJyOwotCQl9CisJbXV0ZXhfbG9jaygmY29tcGF0X2xpc3RfbG9j ayk7CisJY2xhc3NfY29tcGF0ID0gbWRldl9hbGxvY19jbGFzc19jb21wYXQoYnVzKTsKKwltdXRl eF91bmxvY2soJmNvbXBhdF9saXN0X2xvY2spOworCWlmICghY2xhc3NfY29tcGF0KSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gYWRkX2Rldl9lcnI7CiAJfQogCiAJcmV0ID0gcGFyZW50X2Ny ZWF0ZV9zeXNmc19maWxlcyhwYXJlbnQpOwogCWlmIChyZXQpCiAJCWdvdG8gYWRkX2Rldl9lcnI7 CiAKLQlyZXQgPSBjbGFzc19jb21wYXRfY3JlYXRlX2xpbmsobWRldl9idXNfY29tcGF0X2NsYXNz LCBkZXYsIE5VTEwpOworCXJldCA9IGNsYXNzX2NvbXBhdF9jcmVhdGVfbGluayhjbGFzc19jb21w YXQsIGRldiwgTlVMTCk7CiAJaWYgKHJldCkKIAkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIGNy ZWF0ZSBjb21wYXRpYmlsaXR5IGNsYXNzIGxpbmtcbiIpOwogCkBAIC0yMjMsNiArMjY1LDcgQEAg dm9pZCBtZGV2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3Qg bWRldl9wYXJlbnQgKnBhcmVudDsKIAljaGFyICplbnZfc3RyaW5nID0gIk1ERVZfU1RBVEU9dW5y ZWdpc3RlcmVkIjsKIAljaGFyICplbnZwW10gPSB7IGVudl9zdHJpbmcsIE5VTEwgfTsKKwlzdHJ1 Y3QgbWRldl9jbGFzc19jb21wYXQgKm1kZXZfY2xhc3NfY29tcGF0OwogCiAJbXV0ZXhfbG9jaygm cGFyZW50X2xpc3RfbG9jayk7CiAJcGFyZW50ID0gX19maW5kX3BhcmVudF9kZXZpY2UoZGV2KTsK QEAgLTIzOCw5ICsyODEsMTMgQEAgdm9pZCBtZGV2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKIAogCWRvd25fd3JpdGUoJnBhcmVudC0+dW5yZWdfc2VtKTsKIAotCWNsYXNz X2NvbXBhdF9yZW1vdmVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIGRldiwgTlVMTCk7CisJ bXV0ZXhfbG9jaygmY29tcGF0X2xpc3RfbG9jayk7CisJbWRldl9jbGFzc19jb21wYXQgPSBnZXRf Y2xhc3NfY29tcGF0KHBhcmVudC0+YnVzKTsKKwlXQVJOX09OKCFtZGV2X2NsYXNzX2NvbXBhdCk7 CisJY2xhc3NfY29tcGF0X3JlbW92ZV9saW5rKG1kZXZfY2xhc3NfY29tcGF0LT5jbGFzc19jb21w YXQsIGRldiwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZjb21wYXRfbGlzdF9sb2NrKTsKIAotCWRl dmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7CisJ ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgcGFyZW50LT5idXMsIG1kZXZfZGV2aWNlX3JlbW92 ZV9jYik7CiAKIAlwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBhcmVudCk7CiAJdXBfd3JpdGUo JnBhcmVudC0+dW5yZWdfc2VtKTsKQEAgLTMxNCw3ICszNjEsNyBAQCBpbnQgbWRldl9kZXZpY2Vf Y3JlYXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCiAJZGV2aWNlX2luaXRpYWxpemUoJm1kZXYt PmRldik7CiAJbWRldi0+ZGV2LnBhcmVudCAgPSBkZXY7Ci0JbWRldi0+ZGV2LmJ1cyAgICAgPSAm bWRldl9idXNfdHlwZTsKKwltZGV2LT5kZXYuYnVzICAgICA9IHBhcmVudC0+YnVzOwogCW1kZXYt PmRldi5yZWxlYXNlID0gbWRldl9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJm1kZXYt PmRldiwgIiVwVWwiLCB1dWlkKTsKIAltZGV2LT5kZXYuZ3JvdXBzID0gcGFyZW50LT5vcHMtPm1k ZXZfYXR0cl9ncm91cHM7CkBAIC00MDQsMjQgKzQ1MSwyOSBAQCBzdHJ1Y3QgZGV2aWNlICptZGV2 X2dldF9pb21tdV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTCht ZGV2X2dldF9pb21tdV9kZXZpY2UpOwogCi1zdGF0aWMgaW50IF9faW5pdCBtZGV2X2luaXQodm9p ZCkKK2ludCBtZGV2X3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIHsKLQlyZXR1 cm4gbWRldl9idXNfcmVnaXN0ZXIoKTsKKwlyZXR1cm4gYnVzX3JlZ2lzdGVyKGJ1cyk7CiB9CitF WFBPUlRfU1lNQk9MKG1kZXZfcmVnaXN0ZXJfYnVzKTsKIAotc3RhdGljIHZvaWQgX19leGl0IG1k ZXZfZXhpdCh2b2lkKQordm9pZCBtZGV2X3VucmVnaXN0ZXJfYnVzKHN0cnVjdCBidXNfdHlwZSAq YnVzKQogewotCWlmIChtZGV2X2J1c19jb21wYXRfY2xhc3MpCi0JCWNsYXNzX2NvbXBhdF91bnJl Z2lzdGVyKG1kZXZfYnVzX2NvbXBhdF9jbGFzcyk7Ci0KLQltZGV2X2J1c191bnJlZ2lzdGVyKCk7 CisJc3RydWN0IG1kZXZfY2xhc3NfY29tcGF0ICptZGV2X2NsYXNzX2NvbXBhdDsKKworCW11dGV4 X2xvY2soJmNvbXBhdF9saXN0X2xvY2spOworCW1kZXZfY2xhc3NfY29tcGF0ID0gZ2V0X2NsYXNz X2NvbXBhdChidXMpOworCWlmIChtZGV2X2NsYXNzX2NvbXBhdCkgeworCQlsaXN0X2RlbCgmbWRl dl9jbGFzc19jb21wYXQtPm5leHQpOworCQljbGFzc19jb21wYXRfdW5yZWdpc3RlcihtZGV2X2Ns YXNzX2NvbXBhdC0+Y2xhc3NfY29tcGF0KTsKKwkJa2ZyZWUobWRldl9jbGFzc19jb21wYXQpOwor CX0KKwlidXNfdW5yZWdpc3RlcihidXMpOworCW11dGV4X3VubG9jaygmY29tcGF0X2xpc3RfbG9j ayk7CiB9Ci0KLW1vZHVsZV9pbml0KG1kZXZfaW5pdCkKLW1vZHVsZV9leGl0KG1kZXZfZXhpdCkK K0VYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX2J1cyk7CiAKIE1PRFVMRV9WRVJTSU9OKERS SVZFUl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1Io RFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxF X1NPRlRERVAoInBvc3Q6IHZmaW9fbWRldiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9kcml2ZXIuYyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMKaW5kZXgg MGQzMjIzYWVlMjBiLi5jM2EyYWMwMjM3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2 L21kZXZfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYwpAQCAt MTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4 L2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvbWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L21kZXZf dmZpby5oPgogCiAjaW5jbHVkZSAibWRldl9wcml2YXRlLmgiCiAKQEAgLTM3LDcgKzM4LDcgQEAg c3RhdGljIHZvaWQgbWRldl9kZXRhY2hfaW9tbXUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQog CWRldl9pbmZvKCZtZGV2LT5kZXYsICJNREVWOiBkZXRhY2hpbmcgaW9tbXVcbiIpOwogfQogCi1z dGF0aWMgaW50IG1kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IG1kZXZfcHJvYmUo c3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID0gdG9fbWRl dl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21k ZXZfZGV2aWNlKGRldik7CkBAIC01NSw4ICs1Niw5IEBAIHN0YXRpYyBpbnQgbWRldl9wcm9iZShz dHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChtZGV2 X3Byb2JlKTsKIAotc3RhdGljIGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitp bnQgbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZGV2X2RyaXZl ciAqZHJ2ID0gdG9fbWRldl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7CkBAIC02OCwyNiArNzAsMjIgQEAgc3RhdGlj IGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlyZXR1cm4gMDsKIH0KLQot c3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGUgPSB7Ci0JLm5hbWUJCT0gIm1kZXYiLAotCS5w cm9iZQkJPSBtZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gbWRldl9yZW1vdmUsCi19OwotRVhQT1JU X1NZTUJPTF9HUEwobWRldl9idXNfdHlwZSk7CitFWFBPUlRfU1lNQk9MKG1kZXZfcmVtb3ZlKTsK IAogLyoqCiAgKiBtZGV2X3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IE1ERVYgZHJp dmVyCiAgKiBAZHJ2OiB0aGUgZHJpdmVyIHRvIHJlZ2lzdGVyCiAgKiBAb3duZXI6IG1vZHVsZSBv d25lciBvZiBkcml2ZXIgdG8gYmUgcmVnaXN0ZXJlZAorICogQGJ1czogYnV0IHRoYXQgdGhlIGRy aXZlciB3YW50cyB0byBhdHRhY2gKICAqCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24g ZXJyb3IsIG90aGVyd2lzZSAwLgogICoqLwotaW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVj dCBtZGV2X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKK2ludCBtZGV2X3JlZ2lz dGVyX2RyaXZlcihzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIs CisJCQkgc3RydWN0IGJ1c190eXBlICpidXMpCiB7CiAJLyogaW5pdGlhbGl6ZSBjb21tb24gZHJp dmVyIGZpZWxkcyAqLwogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7Ci0JZHJ2LT5kcml2 ZXIuYnVzID0gJm1kZXZfYnVzX3R5cGU7CisJZHJ2LT5kcml2ZXIuYnVzID0gYnVzOwogCWRydi0+ ZHJpdmVyLm93bmVyID0gb3duZXI7CiAKIAkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KQEAgLTEw NSwxMiArMTAzLDMgQEAgdm9pZCBtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2Ry aXZlciAqZHJ2KQogfQogRVhQT1JUX1NZTUJPTChtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAot aW50IG1kZXZfYnVzX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIGJ1c19yZWdpc3RlcigmbWRl dl9idXNfdHlwZSk7Ci19Ci0KLXZvaWQgbWRldl9idXNfdW5yZWdpc3Rlcih2b2lkKQotewotCWJ1 c191bnJlZ2lzdGVyKCZtZGV2X2J1c190eXBlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfcHJpdmF0ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgK aW5kZXggN2Q5MjI5NTBjYWFmLi4yOThkN2EwZjQ5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oCkBAIC0xMCwxMiArMTAsMTAgQEAKICNpZm5kZWYgTURFVl9QUklWQVRFX0gKICNkZWZpbmUg TURFVl9QUklWQVRFX0gKIAotaW50ICBtZGV2X2J1c19yZWdpc3Rlcih2b2lkKTsKLXZvaWQgbWRl dl9idXNfdW5yZWdpc3Rlcih2b2lkKTsKLQogc3RydWN0IG1kZXZfcGFyZW50IHsKIAlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CiAJY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzOworCXN0cnVj dCBidXNfdHlwZSAqYnVzOwogCXN0cnVjdCBrcmVmIHJlZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5l eHQ7CiAJc3RydWN0IGtzZXQgKm1kZXZfdHlwZXNfa3NldDsKQEAgLTM1LDggKzMzLDE1IEBAIHN0 cnVjdCBtZGV2X2RldmljZSB7CiAJYm9vbCBhY3RpdmU7CiB9OwogCitzdHJ1Y3QgbWRldl9jbGFz c19jb21wYXQgeworCXN0cnVjdCBjbGFzc19jb21wYXQgKmNsYXNzX2NvbXBhdDsKKwlzdHJ1Y3Qg YnVzX3R5cGUgKmJ1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cit9OworCisKICNkZWZpbmUg dG9fbWRldl9kZXZpY2UoZGV2KQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWRldl9kZXZpY2Us IGRldikKLSNkZWZpbmUgZGV2X2lzX21kZXYoZCkJCSgoZCktPmJ1cyA9PSAmbWRldl9idXNfdHlw ZSkKKyNkZWZpbmUgZGV2X2lzX21kZXYoZCwgYnVzKQkoKGQpLT5idXMgPT0gYnVzKQogCiBzdHJ1 Y3QgbWRldl90eXBlIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92ZmlvL21kZXYvbWRldl92ZmlvLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ZmaW8uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY5ZDExOTFiOTk4MgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfdmZpby5jCkBAIC0wLDAgKzEs NDggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CisjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CisKKyNkZWZpbmUgRFJJ VkVSX1ZFUlNJT04JCSIwLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJKYXNvbiBXYW5nIgor I2RlZmluZSBEUklWRVJfREVTQwkJIk1lZGlhdGVkIFZGSU8gYnVzIgorCitzdHJ1Y3QgYnVzX3R5 cGUgbWRldl92ZmlvX2J1c190eXBlID0geworCS5uYW1lCQk9ICJtZGV2IiwKKwkucHJvYmUJCT0g bWRldl9wcm9iZSwKKwkucmVtb3ZlCQk9IG1kZXZfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0wo bWRldl92ZmlvX2J1c190eXBlKTsKKworc3RhdGljIGludCBfX2luaXQgbWRldl9pbml0KHZvaWQp Cit7CisJcmV0dXJuIG1kZXZfcmVnaXN0ZXJfYnVzKCZtZGV2X3ZmaW9fYnVzX3R5cGUpOworfQor CitzdGF0aWMgdm9pZCBfX2V4aXQgbWRldl9leGl0KHZvaWQpCit7CisJbWRldl91bnJlZ2lzdGVy X2J1cygmbWRldl92ZmlvX2J1c190eXBlKTsKK30KKworaW50IG1kZXZfdmZpb19yZWdpc3Rlcl9k ZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG1kZXZfcGFy ZW50X29wcyAqb3BzKQoreworCXJldHVybiBtZGV2X3JlZ2lzdGVyX2RldmljZShkZXYsIG9wcywg Jm1kZXZfdmZpb19idXNfdHlwZSk7Cit9CitFWFBPUlRfU1lNQk9MKG1kZXZfdmZpb19yZWdpc3Rl cl9kZXZpY2UpOworCit2b2lkIG1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJcmV0dXJuIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKK30KK0VY UE9SVF9TWU1CT0wobWRldl92ZmlvX3VucmVnaXN0ZXJfZGV2aWNlKTsKKworbW9kdWxlX2luaXQo bWRldl9pbml0KQorbW9kdWxlX2V4aXQobWRldl9leGl0KQorCitNT0RVTEVfVkVSU0lPTihEUklW RVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKERS SVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9T T0ZUREVQKCJwb3N0OiB2ZmlvX21kZXYiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2 L3ZmaW9fbWRldi5jIGIvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2LmMKaW5kZXggMzA5NjRh NGUwYTI4Li4xNmU5ZWJlMzBkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L3ZmaW9f bWRldi5jCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L3ZmaW9fbWRldi5jCkBAIC0xMyw3ICsxMyw3 IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgog I2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+CisjaW5jbHVk ZSA8bGludXgvbWRldl92ZmlvLmg+CiAKICNpbmNsdWRlICJtZGV2X3ByaXZhdGUuaCIKIApAQCAt MTI4LDcgKzEyOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19tZGV2X2RyaXZl ciA9IHsKIAogc3RhdGljIGludCBfX2luaXQgdmZpb19tZGV2X2luaXQodm9pZCkKIHsKLQlyZXR1 cm4gbWRldl9yZWdpc3Rlcl9kcml2ZXIoJnZmaW9fbWRldl9kcml2ZXIsIFRISVNfTU9EVUxFKTsK KwlyZXR1cm4gbWRldl9yZWdpc3Rlcl9kcml2ZXIoJnZmaW9fbWRldl9kcml2ZXIsIFRISVNfTU9E VUxFLAorCQkJCSAgICAmbWRldl92ZmlvX2J1c190eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgX19l eGl0IHZmaW9fbWRldl9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19p b21tdV90eXBlMS5jIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYwppbmRleCBkODY0 Mjc3ZWExNmYuLmYzNTUyM2Y4MjJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9t bXVfdHlwZTEuYworKysgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jCkBAIC0zNCw3 ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Zm aW8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2 Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFk b21haW4uaD4KQEAgLTE0MDUsMTAgKzE0MDUsMTAgQEAgc3RhdGljIGJvb2wgdmZpb19idXNfaXNf bWRldihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIAlzdHJ1Y3QgYnVzX3R5cGUgKm1kZXZfYnVzOwog CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQltZGV2X2J1cyA9IHN5bWJvbF9nZXQobWRldl9idXNfdHlw ZSk7CisJbWRldl9idXMgPSBzeW1ib2xfZ2V0KG1kZXZfdmZpb19idXNfdHlwZSk7CiAJaWYgKG1k ZXZfYnVzKSB7CiAJCXJldCA9IChidXMgPT0gbWRldl9idXMpOwotCQlzeW1ib2xfcHV0KG1kZXZf YnVzX3R5cGUpOworCQlzeW1ib2xfcHV0KG1kZXZfdmZpb19idXNfdHlwZSk7CiAJfQogCiAJcmV0 dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRldi5oIGIvaW5jbHVkZS9saW51 eC9tZGV2LmgKaW5kZXggMGNlMzBjYTc4ZGIwLi5lZTI0MTAyNDZiM2MgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvbGludXgvbWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWRldi5oCkBAIC0xMzMsMTYg KzEzMywyMiBAQCB2b2lkICptZGV2X2dldF9kcnZkYXRhKHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dik7CiB2b2lkIG1kZXZfc2V0X2RydmRhdGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB2b2lk ICpkYXRhKTsKIGNvbnN0IGd1aWRfdCAqbWRldl91dWlkKHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dik7CiAKLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlwZTsKLQotaW50IG1kZXZf cmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFy ZW50X29wcyAqb3BzKTsKK2ludCBtZGV2X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IHN0cnVjdCBtZGV2X3BhcmVudF9vcHMgKm9wcywKKwkJCSBzdHJ1Y3QgYnVzX3R5 cGUgKmJ1cyk7CiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2 KTsKIAotaW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2LCBz dHJ1Y3QgbW9kdWxlICpvd25lcik7CitpbnQgbWRldl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1k ZXZfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJIHN0cnVjdCBidXNfdHlw ZSAqYnVzKTsKIHZvaWQgbWRldl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbWRldl9kcml2ZXIg KmRydik7CiAKIHN0cnVjdCBkZXZpY2UgKm1kZXZfcGFyZW50X2RldihzdHJ1Y3QgbWRldl9kZXZp Y2UgKm1kZXYpOwogc3RydWN0IGRldmljZSAqbWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2KTsKLXN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpk ZXYpOworc3RydWN0IG1kZXZfZGV2aWNlICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGJ1c190eXBlICpidXMpOworCitpbnQgbWRldl9wcm9iZShzdHJ1Y3QgZGV2aWNl ICpkZXYpOworaW50IG1kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK2ludCBtZGV2 X3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7Cit2b2lkIG1kZXZfdW5yZWdpc3Rl cl9idXMoc3RydWN0IGJ1c190eXBlICpidXMpOwogCiAjZW5kaWYgLyogTURFVl9IICovCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oIGIvaW5jbHVkZS9saW51eC9tZGV2X3Zm aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ0NmE3NTM3ZTNm YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWRldl92ZmlvLmgKQEAgLTAsMCAr MSwyNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoK KyAqIFZGSU8gTWVkaWF0ZWQgZGV2aWNlIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTksIFJlZCBIYXQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgQXV0aG9yOiBKYXNv biBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgorICovCisKKyNpZm5kZWYgTURFVl9WRklPX0gK KyNkZWZpbmUgTURFVl9WRklPX0gKKworI2luY2x1ZGUgPGxpbnV4L21kZXYuaD4KKworZXh0ZXJu IHN0cnVjdCBidXNfdHlwZSBtZGV2X3ZmaW9fYnVzX3R5cGU7CisKK2ludCBtZGV2X3ZmaW9fcmVn aXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBt ZGV2X3BhcmVudF9vcHMgKm9wcyk7Cit2b2lkIG1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZShz dHJ1Y3QgZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZGV2X2RldmljZSAq dmZpb19tZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbWRldl9m cm9tX2RldihkZXYsICZtZGV2X3ZmaW9fYnVzX3R5cGUpOworfQorCisjZW5kaWYKZGlmZiAtLWdp dCBhL3NhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jIGIvc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hz LmMKaW5kZXggYWM1YzhjMTdiMWZmLi5mMDQxZDU4MzI0YjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMv dmZpby1tZGV2L21ib2Nocy5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jCkBAIC0y OSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lv bW11Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+ CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAg LTEzMzIsNyArMTMzMiw3IEBAIHN0YXRpYyBzc2l6ZV90CiBtZW1vcnlfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCSAgICBjaGFyICpidWYp CiB7Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVj dCBtZGV2X3N0YXRlICptZGV2X3N0YXRlID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAogCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIiVkIE1CXG4iLCBtZGV2X3N0YXRlLT50eXBlLT5tYnl0ZXMpOwpA QCAtMTQ2OCw3ICsxNDY4LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWJvY2hzX2Rldl9pbml0KHZv aWQpCiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQyOwogCi0JcmV0ID0gbWRldl9yZWdpc3Rlcl9k ZXZpY2UoJm1ib2Noc19kZXYsICZtZGV2X2ZvcHMpOworCXJldCA9IG1kZXZfdmZpb19yZWdpc3Rl cl9kZXZpY2UoJm1ib2Noc19kZXYsICZtZGV2X2ZvcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFp bGVkMzsKIApAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWJvY2hzX2Rl dl9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWJvY2hzX2Rldl9leGl0KHZvaWQpCiB7 CiAJbWJvY2hzX2Rldi5idXMgPSBOVUxMOwotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJm1ib2No c19kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbWJvY2hzX2Rldik7CiAKIAlk ZXZpY2VfdW5yZWdpc3RlcigmbWJvY2hzX2Rldik7CiAJY2Rldl9kZWwoJm1ib2Noc19jZGV2KTsK ZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYyBiL3NhbXBsZXMvdmZpby1tZGV2 L21kcHkuYwppbmRleCBjYzg2YmY2NTY2ZTQuLjljMzJmZTM3OTVhZCAxMDA2NDQKLS0tIGEvc2Ft cGxlcy92ZmlvLW1kZXYvbWRweS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYwpAQCAt MjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KICNpbmNsdWRlIDxsaW51eC9p b21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWRldi5o PgorI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgog I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CiAjaW5jbHVkZSAibWRweS1kZWZzLmgiCkBAIC02 MzksNyArNjM5LDcgQEAgc3RhdGljIHNzaXplX3QKIHJlc29sdXRpb25fc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCiB7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBt ZGV2X3N0YXRlICptZGV2X3N0YXRlID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAogCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVkeCVkXG4iLApAQCAtNzc1LDcgKzc3NSw3IEBAIHN0YXRpYyBpbnQg X19pbml0IG1kcHlfZGV2X2luaXQodm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDI7CiAK LQlyZXQgPSBtZGV2X3JlZ2lzdGVyX2RldmljZSgmbWRweV9kZXYsICZtZGV2X2ZvcHMpOworCXJl dCA9IG1kZXZfdmZpb19yZWdpc3Rlcl9kZXZpY2UoJm1kcHlfZGV2LCAmbWRldl9mb3BzKTsKIAlp ZiAocmV0KQogCQlnb3RvIGZhaWxlZDM7CiAKQEAgLTc5NCw3ICs3OTQsNyBAQCBzdGF0aWMgaW50 IF9faW5pdCBtZHB5X2Rldl9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWRweV9kZXZf ZXhpdCh2b2lkKQogewogCW1kcHlfZGV2LmJ1cyA9IE5VTEw7Ci0JbWRldl91bnJlZ2lzdGVyX2Rl dmljZSgmbWRweV9kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbWRweV9kZXYp OwogCiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1kcHlfZGV2KTsKIAljZGV2X2RlbCgmbWRweV9jZGV2 KTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYyBiL3NhbXBsZXMvdmZpby1t ZGV2L210dHkuYwppbmRleCBjZTg0YTMwMGE0ZGEuLjZlNGU2MzM5ZTBmMSAxMDA2NDQKLS0tIGEv c2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYwpA QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGlu dXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWRl di5oPgorI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5o PgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPHVhcGkvbGludXgvc2VyaWFs X3JlZy5oPgpAQCAtMTI4NSw3ICsxMjg1LDcgQEAgc3RhdGljIHNzaXplX3QKIHNhbXBsZV9tZGV2 X2Rldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsCiAJCSAgICAgY2hhciAqYnVmKQogewotCWlmIChtZGV2X2Zyb21fZGV2KGRldikpCisJaWYg KHZmaW9fbWRldl9mcm9tX2RldihkZXYpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJUaGlzIGlz IE1ERVYgJXNcbiIsIGRldl9uYW1lKGRldikpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiXG4i KTsKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG10dHlfZGV2X2luaXQo dm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDI7CiAKLQlyZXQgPSBtZGV2X3JlZ2lzdGVy X2RldmljZSgmbXR0eV9kZXYuZGV2LCAmbWRldl9mb3BzKTsKKwlyZXQgPSBtZGV2X3ZmaW9fcmVn aXN0ZXJfZGV2aWNlKCZtdHR5X2Rldi5kZXYsICZtZGV2X2ZvcHMpOwogCWlmIChyZXQpCiAJCWdv dG8gZmFpbGVkMzsKIApAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBfX2luaXQgbXR0 eV9kZXZfaW5pdCh2b2lkKQogc3RhdGljIHZvaWQgX19leGl0IG10dHlfZGV2X2V4aXQodm9pZCkK IHsKIAltdHR5X2Rldi5kZXYuYnVzID0gTlVMTDsKLQltZGV2X3VucmVnaXN0ZXJfZGV2aWNlKCZt dHR5X2Rldi5kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbXR0eV9kZXYuZGV2 KTsKIAogCWRldmljZV91bnJlZ2lzdGVyKCZtdHR5X2Rldi5kZXYpOwogCWlkcl9kZXN0cm95KCZt dHR5X2Rldi52ZF9pZHIpOwotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZng= 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 C586CC432C3 for ; Mon, 18 Nov 2019 06:18:49 +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 A5E37206D4 for ; Mon, 18 Nov 2019 06:18:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A5E37206D4 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 E32CA89F43; Mon, 18 Nov 2019 06:18:48 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0DFC689F33 for ; Mon, 18 Nov 2019 06:18:46 +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-152-tD3vmjQuNrO9sCAztXnV0A-1; Mon, 18 Nov 2019 01:18:42 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0A81D9125A; Mon, 18 Nov 2019 06:18:38 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-215.pek2.redhat.com [10.72.12.215]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3C0A961070; Mon, 18 Nov 2019 06:17:40 +0000 (UTC) From: Jason Wang To: 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, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Subject: [PATCH V12 1/6] mdev: make mdev bus agnostic Date: Mon, 18 Nov 2019 14:16:58 +0800 Message-Id: <20191118061703.8669-2-jasowang@redhat.com> In-Reply-To: <20191118061703.8669-1-jasowang@redhat.com> References: <20191118061703.8669-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-MC-Unique: tD3vmjQuNrO9sCAztXnV0A-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=1574057926; 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=/XNAWBJl9HYd58zJCbVCxLRJrBu8qH2nBLBROQScSb0=; b=OWa+B+tc8ft3wuxO/3yVmcCBcuW/pBF1zzxrQUEI+bFLW+eFaay5iT3DHYuwZ4sDUJEUb4 ww5g8xXG+dcTrIp2akElctgoCHL70kLn0K4LM7rQvBkKTWoa3ldX36pF4sSISAdbPRJFgT rbJdW2DZkm/PNn33VZsv6uZtol1t69w= 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: rdunlap@infradead.org, christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, kevin.tian@intel.com, virtualization@lists.linux-foundation.org, jgg@mellanox.com, rob.miller@broadcom.com, hch@infradead.org, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, zhi.a.wang@intel.com, farman@linux.ibm.com, parav@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, stefanha@redhat.com, zhihong.wang@intel.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, gregkh@linuxfoundation.org, 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: <20191118061658.xvyY1-Nz10iB69gHiqUQuXC7EfIBhfZw4J2AakU1dGw@z> Q3VycmVudCBtZGV2IGlzIHRpZWQgdG8gYSBWRklPIHNwZWNpZmljICJtZGV2IiBidXMuIFRoaXMg cHJldmVudCBtZGV2CmZyb20gYmVpbmcgdXNlZCBieSBvdGhlciB0eXBlcyBvZiBBUEkvYnVzZXMu IFNvIHRoaXMgcGF0Y2ggdHJpZXMgdG8gbWFrZQptZGV2IGJ1cyBhZ25vc3RpYyB0aHJvdWdoIG1h a2luZyBhIG1kZXYgY29yZSBhIHRoaW4gbW9kdWxlOgoKLSBkZWNvdXBsZSBWRklPIGJ1cyBzcGVj aWZpYyBiaXRzIGZyb20gbWRldl9jb3JlLmMgdG8gbWRldl92ZmlvLmMgYW5kCiAgaW50cm9kdWNl IG1kZXZfdmZpbyBtb2R1bGUKLSByZXF1aXJlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgYnVzIHdo ZW4gcmVnaXN0ZXJpbmcgbWRldiBkZXZpY2UgYW5kCiAgbWRldiBkcml2ZXIKCldpdGggdGhvc2Ug bW9kaWZpY2F0aW9ucyBtZGV2IGJlY29tZSBhIGdlbmVyaWMgbW9kdWxlIHRoYXQgY291bGQgYmUK dXNlZCBieSBtdWx0aXBsZSB0eXBlcyBvZiB2aXJ0dWFsIGJ1c2VzIGFuZCBkZXZpY2VzLgoKU2ln bmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiAuLi4vZHJp dmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgICAgICAgfCAgNjggKysrKysrLS0tLS0t CiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMgICAgICAgICAgICAgIHwgIDEwICstCiBk cml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRy aXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyAgICAgICAgICAgICB8ICAyMSArKy0tCiBk cml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oICAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvdmZpby9tZGV2L0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAxNyArKy0KIGRy aXZlcnMvdmZpby9tZGV2L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogZHJp dmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMgICAgICAgICAgICAgICAgIHwgMTA0ICsrKysrKysr KysrKystLS0tLQogZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyAgICAgICAgICAgICAg IHwgIDI5ICsrLS0tCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCAgICAgICAgICAg ICAgfCAgMTMgKystCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ZmaW8uYyAgICAgICAgICAgICAg ICAgfCAgNDggKysrKysrKysKIGRyaXZlcnMvdmZpby9tZGV2L3ZmaW9fbWRldi5jICAgICAgICAg ICAgICAgICB8ICAgNSArLQogZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyAgICAgICAg ICAgICAgIHwgICA2ICstCiBpbmNsdWRlL2xpbnV4L21kZXYuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTYgKystCiBpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oICAgICAgICAgICAgICAg ICAgICAgfCAgMjUgKysrKysKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAg ICAgICAgICB8ICAgOCArLQogc2FtcGxlcy92ZmlvLW1kZXYvbWRweS5jICAgICAgICAgICAgICAg ICAgICAgIHwgICA4ICstCiBzYW1wbGVzL3ZmaW8tbWRldi9tdHR5LmMgICAgICAgICAgICAgICAg ICAgICAgfCAgIDggKy0KIDE5IGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRpb25zKCspLCAxMjkg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92ZmlvL21kZXYvbWRldl92 ZmlvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oCgpkaWZm IC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJz dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QKaW5k ZXggMjVlYjdkNWI4MzRiLi4xODg3ZDI3YTU2NWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24v ZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9k cml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdApAQCAtNDksMzUgKzQ5LDM3IEBAIGRl dmljZXMgYXMgZXhhbXBsZXMsIGFzIHRoZXNlIGRldmljZXMgYXJlIHRoZSBmaXJzdCBkZXZpY2Vz IHRvIHVzZSB0aGlzIG1vZHVsZTo6CiAKICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKICAgICAgfCAg ICAgICAgICAgICAgIHwKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwgIG1kZXZfcmVnaXN0ZXJfZHJp dmVyKCkgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgICAgICAgICAgIHwgKzwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8Ci0gICAgIHwgfCAgbWRldiAgICAgfCB8ICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKLSAgICAgfCB8ICBidXMgICAg ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+KyB2ZmlvX21kZXYua28gfDwtPiBWRklPIHVz ZXIKLSAgICAgfCB8ICBkcml2ZXIgICB8IHwgICAgIHByb2JlKCkvcmVtb3ZlKCkgICAgfCAgICAg ICAgICAgICAgfCAgICBBUElzCi0gICAgIHwgfCAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg ICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwKKyAgICAg fCAgIE1ERVYgQ09SRSAgIHwgIG1kZXZfcmVnaXN0ZXJfZHJpdmVyKCkgKy0tLS0tLS0tLS0tLS0t KworICAgICB8ICAgIE1PRFVMRSAgICAgKzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAg ICAgICAgICB8CisgICAgIHwgICAgbWRldi5rbyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0+KyB2ZmlvX21kZXYua28gfDwtPiBWRklPIHVzZXIKKyAgICAgfCAgICAgICAgICAg ICAgIHwgICAgIHByb2JlKCkvcmVtb3ZlKCkgICAgfCAgICAgICAgICAgICAgfCAgICBBUElzCisg ICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsKKyAgICAgKy0tLSstLS0tLS0tKy0tLSsKKyAgICAgICAgIHwgICAgICAvfFwKKyAgICAg ICAgIHwgICAgICAgfAorY2FsbGJhY2tzfCAgICAgICB8IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCkK KyAgICAgICAgIHwgICAgICAgfCBtZGV2X3JlZ2lzdGVyX2J1cygpCisgICAgICAgIFx8LyAgICAg IHwKKyAgICAgKy0tLSstLS0tLS0tKy0tLSsKKyAgICAgfCAgICAgICAgICAgICAgIHwgIG1kZXZf dmZpb19yZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAg ICAgICArPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAg ICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG52aWRp YS5rbyAgIHw8LT4gcGh5c2ljYWwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgTURF ViBWRklPICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsK KyAgICAgfCAgIFBoeXNpY2FsICAgIHwKKyAgICAgfCAgICBkZXZpY2UgICAgIHwgIG1kZXZfdmZp b19yZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICBpbnRlcmZhY2Ug ICB8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgICB8 ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGk5MTUua28g ICAgIHw8LT4gcGh5c2ljYWwKKyAgICAgfCBtZGV2X3ZmaW8ua28gICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgICAgICAg ICAgICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAg ICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgIHwgIG1kZXZfdmZpb19y ZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAgICAgICAr PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgICB8ICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2N3X2RldmljZS5r b3w8LT4gcGh5c2ljYWwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgICAgICAgICAg ICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKICAgICAg fCAgICAgICAgICAgICAgIHwKLSAgICAgfCAgTURFViBDT1JFICAgIHwKLSAgICAgfCAgIE1PRFVM RSAgICAgIHwKLSAgICAgfCAgIG1kZXYua28gICAgIHwKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwg IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCkgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgICAgICAg ICAgIHwgKzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8Ci0gICAgIHwg fCAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG52aWRpYS5rbyAgIHw8 LT4gcGh5c2ljYWwKLSAgICAgfCB8ICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0+KyAgICAgICAgICAgICAgfCAgICBkZXZpY2UKLSAgICAgfCB8ICAgICAgICAgICB8IHwgICAg ICAgIGNhbGxiYWNrcyAgICAgICAgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgUGh5c2ljYWwg IHwgfAotICAgICB8IHwgIGRldmljZSAgIHwgfCAgbWRldl9yZWdpc3Rlcl9kZXZpY2UoKSArLS0t LS0tLS0tLS0tLS0rCi0gICAgIHwgfCBpbnRlcmZhY2UgfCB8PC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsgICAgICAgICAgICAgIHwKLSAgICAgfCB8ICAgICAgICAgICB8IHwgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgaTkxNS5rbyAgICAgfDwtPiBwaHlzaWNhbAotICAgICB8IHwgICAgICAg ICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmlj ZQotICAgICB8IHwgICAgICAgICAgIHwgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICArLS0tLS0t LS0tLS0tLS0rCi0gICAgIHwgfCAgICAgICAgICAgfCB8Ci0gICAgIHwgfCAgICAgICAgICAgfCB8 ICBtZGV2X3JlZ2lzdGVyX2RldmljZSgpICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCB8ICAgICAg ICAgICB8ICs8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAotICAgICB8 IHwgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjd19kZXZpY2Uua298 PC0+IHBoeXNpY2FsCi0gICAgIHwgfCAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPisgICAgICAgICAgICAgIHwgICAgZGV2aWNlCi0gICAgIHwgfCAgICAgICAgICAgfCB8ICAg ICAgICBjYWxsYmFja3MgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCArLS0tLS0tLS0t LS0rIHwKICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKIAogCkBAIC0xMTYsNyArMTE4LDggQEAgdG8g cmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGNvcmUgZHJpdmVyOgogKiBS ZWdpc3Rlcjo6CiAKICAgICBleHRlcm4gaW50ICBtZGV2X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qg bWRldl9kcml2ZXIgKmRydiwKLQkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1c190eXBlICpidXMpOwog CiAqIFVucmVnaXN0ZXI6OgogCkBAIC0xNTksMTEgKzE2MiwxMiBAQCBUaGUgY2FsbGJhY2tzIGlu IHRoZSBtZGV2X3BhcmVudF9vcHMgc3RydWN0dXJlIGFyZSBhcyBmb2xsb3dzOgogKiB3cml0ZTog d3JpdGUgZW11bGF0aW9uIGNhbGxiYWNrCiAqIG1tYXA6IG1tYXAgZW11bGF0aW9uIGNhbGxiYWNr CiAKLUEgZHJpdmVyIHNob3VsZCB1c2UgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1cmUgaW4g dGhlIGZ1bmN0aW9uIGNhbGwgdG8KLXJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBtZGV2IGNvcmUg ZHJpdmVyOjoKK0EgZHJpdmVyIHNob3VsZCB1c2UgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1 cmUgYW5kIGJ1cyB0eXBlIGluIHRoZQorZnVuY3Rpb24gY2FsbCB0byByZWdpc3RlciBpdHNlbGYg d2l0aCB0aGUgbWRldiBjb3JlIGRyaXZlcjo6CiAKIAlleHRlcm4gaW50ICBtZGV2X3JlZ2lzdGVy X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzKTsKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWRldl9wYXJlbnRfb3BzICpvcHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidXNfdHlwZSAq YnVzKTsKIAogSG93ZXZlciwgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1cmUgaXMgbm90IHJl cXVpcmVkIGluIHRoZSBmdW5jdGlvbiBjYWxsCiB0aGF0IGEgZHJpdmVyIHNob3VsZCB1c2UgdG8g dW5yZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgbWRldiBjb3JlIGRyaXZlcjo6CmRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGNiYTEwOTU1NDdmZC4uZDMzNTk0OTI0 MGRjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTcxMjEs NiArMTcxMjEsNyBAQCBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkv dmZpby1tZWRpYXRlZC1kZXZpY2UucnN0CiBGOglkcml2ZXJzL3ZmaW8vbWRldi8KIEY6CWluY2x1 ZGUvbGludXgvbWRldi5oCitGOglpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oCiBGOglzYW1wbGVz L3ZmaW8tbWRldi8KIAogVkZJTyBQTEFURk9STSBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0 LmMKaW5kZXggMzQzZDc5YzFjYjdlLi44YzAyNTcyYzliNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9r dm1ndC5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXVpZC5oPgogI2luY2x1 ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmZpby5oPgotI2luY2x1ZGUg PGxpbnV4L21kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGV2X3ZmaW8uaD4KICNpbmNsdWRlIDxs aW51eC9kZWJ1Z2ZzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9ub3NwZWMuaD4KQEAgLTE1NTQsNyAr MTU1NCw3IEBAIHN0YXRpYyBzc2l6ZV90CiB2Z3B1X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICAgIGNoYXIgKmJ1ZikKIHsKLQlz dHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21fZGV2KGRldik7CisJc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21fZGV2KGRldik7CiAKIAlpZiAobWRldikg ewogCQlzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSA9IChzdHJ1Y3QgaW50ZWxfdmdwdSAqKQpAQCAt MTU2OCw3ICsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QKIGh3X2lkX3Nob3coc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICBjaGFyICpidWYpCiB7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCiAJaWYgKG1k ZXYpIHsKIAkJc3RydWN0IGludGVsX3ZncHUgKnZncHUgPSAoc3RydWN0IGludGVsX3ZncHUgKikK QEAgLTE2MjMsMTIgKzE2MjMsMTIgQEAgc3RhdGljIGludCBrdm1ndF9ob3N0X2luaXQoc3RydWN0 IGRldmljZSAqZGV2LCB2b2lkICpndnQsIGNvbnN0IHZvaWQgKm9wcykKIAkJcmV0dXJuIC1FRkFV TFQ7CiAJaW50ZWxfdmdwdV9vcHMuc3VwcG9ydGVkX3R5cGVfZ3JvdXBzID0ga3ZtX3ZncHVfdHlw ZV9ncm91cHM7CiAKLQlyZXR1cm4gbWRldl9yZWdpc3Rlcl9kZXZpY2UoZGV2LCAmaW50ZWxfdmdw dV9vcHMpOworCXJldHVybiBtZGV2X3ZmaW9fcmVnaXN0ZXJfZGV2aWNlKGRldiwgJmludGVsX3Zn cHVfb3BzKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtZ3RfaG9zdF9leGl0KHN0cnVjdCBkZXZpY2Ug KmRldikKIHsKLQltZGV2X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJbWRldl92ZmlvX3VucmVn aXN0ZXJfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQga3ZtZ3RfcGFnZV90cmFja19hZGQo dW5zaWduZWQgbG9uZyBoYW5kbGUsIHU2NCBnZm4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAv Y2lvL3ZmaW9fY2N3X29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYwppbmRl eCBmMGQ3MWFiNzdjNTAuLjc5MWI4YjBlYjAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Np by92ZmlvX2Njd19vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jCkBA IC0xMSw3ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KLSNpbmNsdWRl IDxsaW51eC9tZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8 bGludXgvbm9zcGVjLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCkBAIC01ODgsMTAgKzU4 OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyB2ZmlvX2Njd19tZGV2 X29wcyA9IHsKIAogaW50IHZmaW9fY2N3X21kZXZfcmVnKHN0cnVjdCBzdWJjaGFubmVsICpzY2gp CiB7Ci0JcmV0dXJuIG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCZzY2gtPmRldiwgJnZmaW9fY2N3X21k ZXZfb3BzKTsKKwlyZXR1cm4gbWRldl92ZmlvX3JlZ2lzdGVyX2RldmljZSgmc2NoLT5kZXYsICZ2 ZmlvX2Njd19tZGV2X29wcyk7CiB9CiAKIHZvaWQgdmZpb19jY3dfbWRldl91bnJlZyhzdHJ1Y3Qg c3ViY2hhbm5lbCAqc2NoKQogewotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJnNjaC0+ZGV2KTsK KwltZGV2X3ZmaW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnNjaC0+ZGV2KTsKIH0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8v dmZpb19hcF9vcHMuYwppbmRleCA1YzBmNTNjNmRkZTcuLjc4MDQ4ZTY3MDM3NCAxMDA2NDQKLS0t IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9j cnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtNjAyLDcgKzYwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGFz c2lnbl9hZGFwdGVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0OwogCXVu c2lnbmVkIGxvbmcgYXBpZDsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21f ZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21fZGV2 KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IG1kZXZfZ2V0X2Ry dmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywgZGlzYWxsb3cgYXNz aWdubWVudCBvZiBhZGFwdGVyICovCkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIHNzaXplX3Qg dW5hc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiB7CiAJaW50IHJldDsK IAl1bnNpZ25lZCBsb25nIGFwaWQ7Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9m cm9tX2RldihkZXYpOworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9t X2RldihkZXYpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dl dF9kcnZkYXRhKG1kZXYpOwogCiAJLyogSWYgdGhlIGd1ZXN0IGlzIHJ1bm5pbmcsIGRpc2FsbG93 IHVuLWFzc2lnbm1lbnQgb2YgYWRhcHRlciAqLwpAQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyBz c2l6ZV90IGFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogewogCWludCBy ZXQ7CiAJdW5zaWduZWQgbG9uZyBhcHFpOwotCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG1k ZXZfZnJvbV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB2ZmlvX21kZXZf ZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gbWRl dl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAl1bnNpZ25lZCBsb25nIG1heF9hcHFpID0gbWF0cml4X21k ZXYtPm1hdHJpeC5hcW1fbWF4OwogCkBAIC04MTAsNyArODEwLDcgQEAgc3RhdGljIHNzaXplX3Qg dW5hc3NpZ25fZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0Owog CXVuc2lnbmVkIGxvbmcgYXBxaTsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zy b21fZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21f ZGV2KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IG1kZXZfZ2V0 X2RydmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywgZGlzYWxsb3cg dW4tYXNzaWdubWVudCBvZiBkb21haW4gKi8KQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgc3Np emVfdCBhc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogewog CWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBpZDsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYg PSBtZGV2X2Zyb21fZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19t ZGV2X2Zyb21fZGV2KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9 IG1kZXZfZ2V0X2RydmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywg ZGlzYWxsb3cgYXNzaWdubWVudCBvZiBjb250cm9sIGRvbWFpbiAqLwpAQCAtOTAzLDcgKzkwMyw3 IEBAIHN0YXRpYyBzc2l6ZV90IHVuYXNzaWduX2NvbnRyb2xfZG9tYWluX3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZG9taWQ7Ci0Jc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBhcF9tYXRyaXhf bWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dldF9kcnZkYXRhKG1kZXYpOwogCXVuc2lnbmVkIGxv bmcgbWF4X2RvbWlkID0gIG1hdHJpeF9tZGV2LT5tYXRyaXguYWRtX21heDsKIApAQCAtOTMzLDcg KzkzMyw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbnRyb2xfZG9tYWluc19zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKIAlpbnQgbmNoYXJzID0gMDsKIAlpbnQgbjsKIAljaGFyICpidWZwb3MgPSBidWY7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBh cF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dldF9kcnZkYXRhKG1kZXYpOwogCXVu c2lnbmVkIGxvbmcgbWF4X2RvbWlkID0gbWF0cml4X21kZXYtPm1hdHJpeC5hZG1fbWF4OwogCkBA IC05NTIsNyArOTUyLDcgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKGNvbnRyb2xfZG9tYWlucyk7 CiBzdGF0aWMgc3NpemVfdCBtYXRyaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiA9IG1kZXZfZnJvbV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWRldl9kZXZpY2Ug Km1kZXYgPSB2ZmlvX21kZXZfZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYg Km1hdHJpeF9tZGV2ID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAljaGFyICpidWZwb3MgPSBi dWY7CiAJdW5zaWduZWQgbG9uZyBhcGlkOwpAQCAtMTI5NSwxMCArMTI5NSwxMSBAQCBpbnQgdmZp b19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpCiB7CiAJYXRvbWljX3NldCgmbWF0cml4X2Rldi0+YXZh aWxhYmxlX2luc3RhbmNlcywgTUFYX1pERVZfRU5UUklFU19FWFQpOwogCi0JcmV0dXJuIG1kZXZf cmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2UsICZ2ZmlvX2FwX21hdHJpeF9vcHMp OworCXJldHVybiBtZGV2X3ZmaW9fcmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2Us CisJCQkJCSAmdmZpb19hcF9tYXRyaXhfb3BzKTsKIH0KIAogdm9pZCB2ZmlvX2FwX21kZXZfdW5y ZWdpc3Rlcih2b2lkKQogewotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJm1hdHJpeF9kZXYtPmRl dmljZSk7CisJbWRldl92ZmlvX3VucmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2Up OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaCBi L2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgKaW5kZXggZjQ2ZGRlNTZiNDY0 Li40ZTM3ZTBlMzQzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9w cml2YXRlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaApAQCAt MTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWRl dl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zm aW8vbWRldi9LY29uZmlnIGIvZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZwppbmRleCA1ZGEyN2Yy MTAwZjkuLjJlMDdjYTkxNWE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvS2NvbmZp ZworKysgYi9kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnCkBAIC0xLDE1ICsxLDI0IEBACi0jIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAotY29uZmlnIFZGSU9fTURFVgor Y29uZmlnIE1ERVYKIAl0cmlzdGF0ZSAiTWVkaWF0ZWQgZGV2aWNlIGRyaXZlciBmcmFtZXdvcmsi Ci0JZGVwZW5kcyBvbiBWRklPCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgUHJvdmlkZXMgYSBmcmFt ZXdvcmsgdG8gdmlydHVhbGl6ZSBkZXZpY2VzLgotCSAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVy LWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgZm9yIG1vcmUgZGV0YWlscy4KIAogCSAgSWYg eW91IGRvbid0IGtub3cgd2hhdCBkbyBoZXJlLCBzYXkgTi4KIAorY29uZmlnIFZGSU9fTURFVgor CXRyaXN0YXRlICJWRklPIE1lZGlhdGVkIGRldmljZSBkcml2ZXIiCisgICAgICAgIGRlcGVuZHMg b24gVkZJTyAmJiBNREVWCisgICAgICAgIGRlZmF1bHQgbgorCWhlbHAKKwkgIFByb2l2ZGVzIGEg bWVkaWF0ZWQgQlVTIGZvciB1c2Vyc3BhY2UgZHJpdmVyIHRocm91Z2ggVkZJTworCSAgZnJhbWV3 b3JrLiBTZWUgRG9jdW1lbnRhdGlvbi92ZmlvLW1lZGlhdGVkLWRldmljZS50eHQgZm9yCisJICBt b3JlIGRldGFpbHMuCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgZG8gaGVyZSwgc2F5IE4u CisKKwogY29uZmlnIFZGSU9fTURFVl9ERVZJQ0UKIAl0cmlzdGF0ZSAiVkZJTyBkcml2ZXIgZm9y IE1lZGlhdGVkIGRldmljZXMiCiAJZGVwZW5kcyBvbiBWRklPICYmIFZGSU9fTURFVgpkaWZmIC0t Z2l0IGEvZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vbWRldi9NYWtl ZmlsZQppbmRleCAxMDE1MTZmZGYzNzUuLmU5Njc1NTAxMjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVy cy92ZmlvL21kZXYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUKQEAg LTEsNiArMSw2IEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAog bWRldi15IDo9IG1kZXZfY29yZS5vIG1kZXZfc3lzZnMubyBtZGV2X2RyaXZlci5vCiAKLW9iai0k KENPTkZJR19WRklPX01ERVYpICs9IG1kZXYubworb2JqLSQoQ09ORklHX01ERVYpICs9IG1kZXYu bworb2JqLSQoQ09ORklHX1ZGSU9fTURFVikgKz0gbWRldl92ZmlvLm8KIG9iai0kKENPTkZJR19W RklPX01ERVZfREVWSUNFKSArPSB2ZmlvX21kZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92Zmlv L21kZXYvbWRldl9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwppbmRleCBi NTU4ZDRjZmQwODIuLmUxMjcyYTQwYzUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYv bWRldl9jb3JlLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKQEAgLTIyLDEx ICsyMiwxMyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBhcmVudF9saXN0KTsKIHN0YXRpYyBERUZJ TkVfTVVURVgocGFyZW50X2xpc3RfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2NvbXBhdCAq bWRldl9idXNfY29tcGF0X2NsYXNzOwogCiBzdGF0aWMgTElTVF9IRUFEKG1kZXZfbGlzdCk7CiBz dGF0aWMgREVGSU5FX01VVEVYKG1kZXZfbGlzdF9sb2NrKTsKIAorc3RhdGljIExJU1RfSEVBRChj bGFzc19jb21wYXRfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXBhdF9saXN0X2xvY2sp OworCiBzdHJ1Y3QgZGV2aWNlICptZGV2X3BhcmVudF9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2KQogewogCXJldHVybiBtZGV2LT5wYXJlbnQtPmRldjsKQEAgLTUxLDkgKzUzLDkgQEAgc3Ry dWN0IGRldmljZSAqbWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogfQogRVhQT1JU X1NZTUJPTChtZGV2X2Rldik7CiAKLXN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9mcm9tX2Rldihz dHJ1Y3QgZGV2aWNlICpkZXYpCitzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXZfZnJvbV9kZXYoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIHsKLQlyZXR1cm4gZGV2X2lz X21kZXYoZGV2KSA/IHRvX21kZXZfZGV2aWNlKGRldikgOiBOVUxMOworCXJldHVybiBkZXZfaXNf bWRldihkZXYsIGJ1cykgPyB0b19tZGV2X2RldmljZShkZXYpIDogTlVMTDsKIH0KIEVYUE9SVF9T WU1CT0wobWRldl9mcm9tX2Rldik7CiAKQEAgLTEyMiw3ICsxMjQsOSBAQCBzdGF0aWMgdm9pZCBt ZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAogc3Rh dGljIGludCBtZGV2X2RldmljZV9yZW1vdmVfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpk YXRhKQogewotCWlmIChkZXZfaXNfbWRldihkZXYpKSB7CisJc3RydWN0IGJ1c190eXBlICpidXMg PSBkYXRhOworCisJaWYgKGRldl9pc19tZGV2KGRldiwgYnVzKSkgewogCQlzdHJ1Y3QgbWRldl9k ZXZpY2UgKm1kZXY7CiAKIAkJbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7CkBAIC0xMzEsNiAr MTM1LDQxIEBAIHN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBtZGV2X2Ns YXNzX2NvbXBhdCAqZ2V0X2NsYXNzX2NvbXBhdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKKwlz dHJ1Y3QgbWRldl9jbGFzc19jb21wYXQgKm1kZXZfY2xhc3NfY29tcGF0OworCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShtZGV2X2NsYXNzX2NvbXBhdCwgJmNsYXNzX2NvbXBhdF9saXN0LCBuZXh0KSB7 CisJCWlmIChtZGV2X2NsYXNzX2NvbXBhdC0+YnVzID09IGJ1cykKKwkJCXJldHVybiBtZGV2X2Ns YXNzX2NvbXBhdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFz c19jb21wYXQgKm1kZXZfYWxsb2NfY2xhc3NfY29tcGF0KHN0cnVjdCBidXNfdHlwZSAqYnVzKQor eworCXN0cnVjdCBtZGV2X2NsYXNzX2NvbXBhdCAqbWRldl9jbGFzc19jb21wYXQgPSBnZXRfY2xh c3NfY29tcGF0KGJ1cyk7CisJY2hhciBjbGFzc19uYW1lWzY0XTsKKworCWlmIChtZGV2X2NsYXNz X2NvbXBhdCkKKwkJcmV0dXJuIG1kZXZfY2xhc3NfY29tcGF0LT5jbGFzc19jb21wYXQ7CisKKwlt ZGV2X2NsYXNzX2NvbXBhdCA9IGttYWxsb2Moc2l6ZW9mKCptZGV2X2NsYXNzX2NvbXBhdCksIEdG UF9LRVJORUwpOworCWlmICghbWRldl9jbGFzc19jb21wYXQpCisJCXJldHVybiBOVUxMOworCXNu cHJpbnRmKGNsYXNzX25hbWUsIDY0LCAiJXNfYnVzIiwgYnVzLT5uYW1lKTsKKwltZGV2X2NsYXNz X2NvbXBhdC0+Y2xhc3NfY29tcGF0ID0gY2xhc3NfY29tcGF0X3JlZ2lzdGVyKGNsYXNzX25hbWUp OworCWlmICghbWRldl9jbGFzc19jb21wYXQtPmNsYXNzX2NvbXBhdCkgeworCQlrZnJlZShtZGV2 X2NsYXNzX2NvbXBhdCk7CisJCXJldHVybiBOVUxMOworCX0KKwltZGV2X2NsYXNzX2NvbXBhdC0+ YnVzID0gYnVzOworCWxpc3RfYWRkKCZtZGV2X2NsYXNzX2NvbXBhdC0+bmV4dCwgJmNsYXNzX2Nv bXBhdF9saXN0KTsKKworCXJldHVybiBtZGV2X2NsYXNzX2NvbXBhdC0+Y2xhc3NfY29tcGF0Owor fQorCiAvKgogICogbWRldl9yZWdpc3Rlcl9kZXZpY2UgOiBSZWdpc3RlciBhIGRldmljZQogICog QGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS4KQEAgLTEz OSwxMiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBk ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKICAqIEFkZCBkZXZpY2UgdG8gbGlzdCBvZiByZWdpc3Rl cmVkIHBhcmVudCBkZXZpY2VzLgogICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9y LCBvdGhlcndpc2UgMC4KICAqLwotaW50IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZp Y2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzKQoraW50IG1kZXZfcmVn aXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50 X29wcyAqb3BzLAorCQkJIHN0cnVjdCBidXNfdHlwZSAqYnVzKQogewogCWludCByZXQ7CiAJc3Ry dWN0IG1kZXZfcGFyZW50ICpwYXJlbnQ7CiAJY2hhciAqZW52X3N0cmluZyA9ICJNREVWX1NUQVRF PXJlZ2lzdGVyZWQiOwogCWNoYXIgKmVudnBbXSA9IHsgZW52X3N0cmluZywgTlVMTCB9OworCXN0 cnVjdCBjbGFzc19jb21wYXQgKmNsYXNzX2NvbXBhdDsKIAogCS8qIGNoZWNrIGZvciBtYW5kYXRv cnkgb3BzICovCiAJaWYgKCFvcHMgfHwgIW9wcy0+Y3JlYXRlIHx8ICFvcHMtPnJlbW92ZSB8fCAh b3BzLT5zdXBwb3J0ZWRfdHlwZV9ncm91cHMpCkBAIC0xNzUsMjAgKzIxNiwyMSBAQCBpbnQgbWRl dl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgbWRldl9w YXJlbnRfb3BzICpvcHMpCiAKIAlwYXJlbnQtPmRldiA9IGRldjsKIAlwYXJlbnQtPm9wcyA9IG9w czsKKwlwYXJlbnQtPmJ1cyA9IGJ1czsKIAotCWlmICghbWRldl9idXNfY29tcGF0X2NsYXNzKSB7 Ci0JCW1kZXZfYnVzX2NvbXBhdF9jbGFzcyA9IGNsYXNzX2NvbXBhdF9yZWdpc3RlcigibWRldl9i dXMiKTsKLQkJaWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHsKLQkJCXJldCA9IC1FTk9NRU07 Ci0JCQlnb3RvIGFkZF9kZXZfZXJyOwotCQl9CisJbXV0ZXhfbG9jaygmY29tcGF0X2xpc3RfbG9j ayk7CisJY2xhc3NfY29tcGF0ID0gbWRldl9hbGxvY19jbGFzc19jb21wYXQoYnVzKTsKKwltdXRl eF91bmxvY2soJmNvbXBhdF9saXN0X2xvY2spOworCWlmICghY2xhc3NfY29tcGF0KSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gYWRkX2Rldl9lcnI7CiAJfQogCiAJcmV0ID0gcGFyZW50X2Ny ZWF0ZV9zeXNmc19maWxlcyhwYXJlbnQpOwogCWlmIChyZXQpCiAJCWdvdG8gYWRkX2Rldl9lcnI7 CiAKLQlyZXQgPSBjbGFzc19jb21wYXRfY3JlYXRlX2xpbmsobWRldl9idXNfY29tcGF0X2NsYXNz LCBkZXYsIE5VTEwpOworCXJldCA9IGNsYXNzX2NvbXBhdF9jcmVhdGVfbGluayhjbGFzc19jb21w YXQsIGRldiwgTlVMTCk7CiAJaWYgKHJldCkKIAkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIGNy ZWF0ZSBjb21wYXRpYmlsaXR5IGNsYXNzIGxpbmtcbiIpOwogCkBAIC0yMjMsNiArMjY1LDcgQEAg dm9pZCBtZGV2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3Qg bWRldl9wYXJlbnQgKnBhcmVudDsKIAljaGFyICplbnZfc3RyaW5nID0gIk1ERVZfU1RBVEU9dW5y ZWdpc3RlcmVkIjsKIAljaGFyICplbnZwW10gPSB7IGVudl9zdHJpbmcsIE5VTEwgfTsKKwlzdHJ1 Y3QgbWRldl9jbGFzc19jb21wYXQgKm1kZXZfY2xhc3NfY29tcGF0OwogCiAJbXV0ZXhfbG9jaygm cGFyZW50X2xpc3RfbG9jayk7CiAJcGFyZW50ID0gX19maW5kX3BhcmVudF9kZXZpY2UoZGV2KTsK QEAgLTIzOCw5ICsyODEsMTMgQEAgdm9pZCBtZGV2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKIAogCWRvd25fd3JpdGUoJnBhcmVudC0+dW5yZWdfc2VtKTsKIAotCWNsYXNz X2NvbXBhdF9yZW1vdmVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIGRldiwgTlVMTCk7CisJ bXV0ZXhfbG9jaygmY29tcGF0X2xpc3RfbG9jayk7CisJbWRldl9jbGFzc19jb21wYXQgPSBnZXRf Y2xhc3NfY29tcGF0KHBhcmVudC0+YnVzKTsKKwlXQVJOX09OKCFtZGV2X2NsYXNzX2NvbXBhdCk7 CisJY2xhc3NfY29tcGF0X3JlbW92ZV9saW5rKG1kZXZfY2xhc3NfY29tcGF0LT5jbGFzc19jb21w YXQsIGRldiwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZjb21wYXRfbGlzdF9sb2NrKTsKIAotCWRl dmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7CisJ ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgcGFyZW50LT5idXMsIG1kZXZfZGV2aWNlX3JlbW92 ZV9jYik7CiAKIAlwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBhcmVudCk7CiAJdXBfd3JpdGUo JnBhcmVudC0+dW5yZWdfc2VtKTsKQEAgLTMxNCw3ICszNjEsNyBAQCBpbnQgbWRldl9kZXZpY2Vf Y3JlYXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCiAJZGV2aWNlX2luaXRpYWxpemUoJm1kZXYt PmRldik7CiAJbWRldi0+ZGV2LnBhcmVudCAgPSBkZXY7Ci0JbWRldi0+ZGV2LmJ1cyAgICAgPSAm bWRldl9idXNfdHlwZTsKKwltZGV2LT5kZXYuYnVzICAgICA9IHBhcmVudC0+YnVzOwogCW1kZXYt PmRldi5yZWxlYXNlID0gbWRldl9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJm1kZXYt PmRldiwgIiVwVWwiLCB1dWlkKTsKIAltZGV2LT5kZXYuZ3JvdXBzID0gcGFyZW50LT5vcHMtPm1k ZXZfYXR0cl9ncm91cHM7CkBAIC00MDQsMjQgKzQ1MSwyOSBAQCBzdHJ1Y3QgZGV2aWNlICptZGV2 X2dldF9pb21tdV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTCht ZGV2X2dldF9pb21tdV9kZXZpY2UpOwogCi1zdGF0aWMgaW50IF9faW5pdCBtZGV2X2luaXQodm9p ZCkKK2ludCBtZGV2X3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIHsKLQlyZXR1 cm4gbWRldl9idXNfcmVnaXN0ZXIoKTsKKwlyZXR1cm4gYnVzX3JlZ2lzdGVyKGJ1cyk7CiB9CitF WFBPUlRfU1lNQk9MKG1kZXZfcmVnaXN0ZXJfYnVzKTsKIAotc3RhdGljIHZvaWQgX19leGl0IG1k ZXZfZXhpdCh2b2lkKQordm9pZCBtZGV2X3VucmVnaXN0ZXJfYnVzKHN0cnVjdCBidXNfdHlwZSAq YnVzKQogewotCWlmIChtZGV2X2J1c19jb21wYXRfY2xhc3MpCi0JCWNsYXNzX2NvbXBhdF91bnJl Z2lzdGVyKG1kZXZfYnVzX2NvbXBhdF9jbGFzcyk7Ci0KLQltZGV2X2J1c191bnJlZ2lzdGVyKCk7 CisJc3RydWN0IG1kZXZfY2xhc3NfY29tcGF0ICptZGV2X2NsYXNzX2NvbXBhdDsKKworCW11dGV4 X2xvY2soJmNvbXBhdF9saXN0X2xvY2spOworCW1kZXZfY2xhc3NfY29tcGF0ID0gZ2V0X2NsYXNz X2NvbXBhdChidXMpOworCWlmIChtZGV2X2NsYXNzX2NvbXBhdCkgeworCQlsaXN0X2RlbCgmbWRl dl9jbGFzc19jb21wYXQtPm5leHQpOworCQljbGFzc19jb21wYXRfdW5yZWdpc3RlcihtZGV2X2Ns YXNzX2NvbXBhdC0+Y2xhc3NfY29tcGF0KTsKKwkJa2ZyZWUobWRldl9jbGFzc19jb21wYXQpOwor CX0KKwlidXNfdW5yZWdpc3RlcihidXMpOworCW11dGV4X3VubG9jaygmY29tcGF0X2xpc3RfbG9j ayk7CiB9Ci0KLW1vZHVsZV9pbml0KG1kZXZfaW5pdCkKLW1vZHVsZV9leGl0KG1kZXZfZXhpdCkK K0VYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX2J1cyk7CiAKIE1PRFVMRV9WRVJTSU9OKERS SVZFUl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1Io RFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxF X1NPRlRERVAoInBvc3Q6IHZmaW9fbWRldiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9kcml2ZXIuYyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMKaW5kZXgg MGQzMjIzYWVlMjBiLi5jM2EyYWMwMjM3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2 L21kZXZfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYwpAQCAt MTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4 L2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvbWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L21kZXZf dmZpby5oPgogCiAjaW5jbHVkZSAibWRldl9wcml2YXRlLmgiCiAKQEAgLTM3LDcgKzM4LDcgQEAg c3RhdGljIHZvaWQgbWRldl9kZXRhY2hfaW9tbXUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQog CWRldl9pbmZvKCZtZGV2LT5kZXYsICJNREVWOiBkZXRhY2hpbmcgaW9tbXVcbiIpOwogfQogCi1z dGF0aWMgaW50IG1kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IG1kZXZfcHJvYmUo c3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID0gdG9fbWRl dl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21k ZXZfZGV2aWNlKGRldik7CkBAIC01NSw4ICs1Niw5IEBAIHN0YXRpYyBpbnQgbWRldl9wcm9iZShz dHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChtZGV2 X3Byb2JlKTsKIAotc3RhdGljIGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitp bnQgbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZGV2X2RyaXZl ciAqZHJ2ID0gdG9fbWRldl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7CkBAIC02OCwyNiArNzAsMjIgQEAgc3RhdGlj IGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlyZXR1cm4gMDsKIH0KLQot c3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGUgPSB7Ci0JLm5hbWUJCT0gIm1kZXYiLAotCS5w cm9iZQkJPSBtZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gbWRldl9yZW1vdmUsCi19OwotRVhQT1JU X1NZTUJPTF9HUEwobWRldl9idXNfdHlwZSk7CitFWFBPUlRfU1lNQk9MKG1kZXZfcmVtb3ZlKTsK IAogLyoqCiAgKiBtZGV2X3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IE1ERVYgZHJp dmVyCiAgKiBAZHJ2OiB0aGUgZHJpdmVyIHRvIHJlZ2lzdGVyCiAgKiBAb3duZXI6IG1vZHVsZSBv d25lciBvZiBkcml2ZXIgdG8gYmUgcmVnaXN0ZXJlZAorICogQGJ1czogYnV0IHRoYXQgdGhlIGRy aXZlciB3YW50cyB0byBhdHRhY2gKICAqCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24g ZXJyb3IsIG90aGVyd2lzZSAwLgogICoqLwotaW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVj dCBtZGV2X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKK2ludCBtZGV2X3JlZ2lz dGVyX2RyaXZlcihzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIs CisJCQkgc3RydWN0IGJ1c190eXBlICpidXMpCiB7CiAJLyogaW5pdGlhbGl6ZSBjb21tb24gZHJp dmVyIGZpZWxkcyAqLwogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7Ci0JZHJ2LT5kcml2 ZXIuYnVzID0gJm1kZXZfYnVzX3R5cGU7CisJZHJ2LT5kcml2ZXIuYnVzID0gYnVzOwogCWRydi0+ ZHJpdmVyLm93bmVyID0gb3duZXI7CiAKIAkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KQEAgLTEw NSwxMiArMTAzLDMgQEAgdm9pZCBtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2Ry aXZlciAqZHJ2KQogfQogRVhQT1JUX1NZTUJPTChtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAot aW50IG1kZXZfYnVzX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIGJ1c19yZWdpc3RlcigmbWRl dl9idXNfdHlwZSk7Ci19Ci0KLXZvaWQgbWRldl9idXNfdW5yZWdpc3Rlcih2b2lkKQotewotCWJ1 c191bnJlZ2lzdGVyKCZtZGV2X2J1c190eXBlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfcHJpdmF0ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgK aW5kZXggN2Q5MjI5NTBjYWFmLi4yOThkN2EwZjQ5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oCkBAIC0xMCwxMiArMTAsMTAgQEAKICNpZm5kZWYgTURFVl9QUklWQVRFX0gKICNkZWZpbmUg TURFVl9QUklWQVRFX0gKIAotaW50ICBtZGV2X2J1c19yZWdpc3Rlcih2b2lkKTsKLXZvaWQgbWRl dl9idXNfdW5yZWdpc3Rlcih2b2lkKTsKLQogc3RydWN0IG1kZXZfcGFyZW50IHsKIAlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CiAJY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzOworCXN0cnVj dCBidXNfdHlwZSAqYnVzOwogCXN0cnVjdCBrcmVmIHJlZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5l eHQ7CiAJc3RydWN0IGtzZXQgKm1kZXZfdHlwZXNfa3NldDsKQEAgLTM1LDggKzMzLDE1IEBAIHN0 cnVjdCBtZGV2X2RldmljZSB7CiAJYm9vbCBhY3RpdmU7CiB9OwogCitzdHJ1Y3QgbWRldl9jbGFz c19jb21wYXQgeworCXN0cnVjdCBjbGFzc19jb21wYXQgKmNsYXNzX2NvbXBhdDsKKwlzdHJ1Y3Qg YnVzX3R5cGUgKmJ1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cit9OworCisKICNkZWZpbmUg dG9fbWRldl9kZXZpY2UoZGV2KQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWRldl9kZXZpY2Us IGRldikKLSNkZWZpbmUgZGV2X2lzX21kZXYoZCkJCSgoZCktPmJ1cyA9PSAmbWRldl9idXNfdHlw ZSkKKyNkZWZpbmUgZGV2X2lzX21kZXYoZCwgYnVzKQkoKGQpLT5idXMgPT0gYnVzKQogCiBzdHJ1 Y3QgbWRldl90eXBlIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92ZmlvL21kZXYvbWRldl92ZmlvLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ZmaW8uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY5ZDExOTFiOTk4MgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfdmZpby5jCkBAIC0wLDAgKzEs NDggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CisjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CisKKyNkZWZpbmUgRFJJ VkVSX1ZFUlNJT04JCSIwLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJKYXNvbiBXYW5nIgor I2RlZmluZSBEUklWRVJfREVTQwkJIk1lZGlhdGVkIFZGSU8gYnVzIgorCitzdHJ1Y3QgYnVzX3R5 cGUgbWRldl92ZmlvX2J1c190eXBlID0geworCS5uYW1lCQk9ICJtZGV2IiwKKwkucHJvYmUJCT0g bWRldl9wcm9iZSwKKwkucmVtb3ZlCQk9IG1kZXZfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0wo bWRldl92ZmlvX2J1c190eXBlKTsKKworc3RhdGljIGludCBfX2luaXQgbWRldl9pbml0KHZvaWQp Cit7CisJcmV0dXJuIG1kZXZfcmVnaXN0ZXJfYnVzKCZtZGV2X3ZmaW9fYnVzX3R5cGUpOworfQor CitzdGF0aWMgdm9pZCBfX2V4aXQgbWRldl9leGl0KHZvaWQpCit7CisJbWRldl91bnJlZ2lzdGVy X2J1cygmbWRldl92ZmlvX2J1c190eXBlKTsKK30KKworaW50IG1kZXZfdmZpb19yZWdpc3Rlcl9k ZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG1kZXZfcGFy ZW50X29wcyAqb3BzKQoreworCXJldHVybiBtZGV2X3JlZ2lzdGVyX2RldmljZShkZXYsIG9wcywg Jm1kZXZfdmZpb19idXNfdHlwZSk7Cit9CitFWFBPUlRfU1lNQk9MKG1kZXZfdmZpb19yZWdpc3Rl cl9kZXZpY2UpOworCit2b2lkIG1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJcmV0dXJuIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKK30KK0VY UE9SVF9TWU1CT0wobWRldl92ZmlvX3VucmVnaXN0ZXJfZGV2aWNlKTsKKworbW9kdWxlX2luaXQo bWRldl9pbml0KQorbW9kdWxlX2V4aXQobWRldl9leGl0KQorCitNT0RVTEVfVkVSU0lPTihEUklW RVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKERS SVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9T T0ZUREVQKCJwb3N0OiB2ZmlvX21kZXYiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2 L3ZmaW9fbWRldi5jIGIvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2LmMKaW5kZXggMzA5NjRh NGUwYTI4Li4xNmU5ZWJlMzBkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L3ZmaW9f bWRldi5jCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L3ZmaW9fbWRldi5jCkBAIC0xMyw3ICsxMyw3 IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgog I2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+CisjaW5jbHVk ZSA8bGludXgvbWRldl92ZmlvLmg+CiAKICNpbmNsdWRlICJtZGV2X3ByaXZhdGUuaCIKIApAQCAt MTI4LDcgKzEyOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19tZGV2X2RyaXZl ciA9IHsKIAogc3RhdGljIGludCBfX2luaXQgdmZpb19tZGV2X2luaXQodm9pZCkKIHsKLQlyZXR1 cm4gbWRldl9yZWdpc3Rlcl9kcml2ZXIoJnZmaW9fbWRldl9kcml2ZXIsIFRISVNfTU9EVUxFKTsK KwlyZXR1cm4gbWRldl9yZWdpc3Rlcl9kcml2ZXIoJnZmaW9fbWRldl9kcml2ZXIsIFRISVNfTU9E VUxFLAorCQkJCSAgICAmbWRldl92ZmlvX2J1c190eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgX19l eGl0IHZmaW9fbWRldl9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19p b21tdV90eXBlMS5jIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYwppbmRleCBkODY0 Mjc3ZWExNmYuLmYzNTUyM2Y4MjJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9t bXVfdHlwZTEuYworKysgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jCkBAIC0zNCw3 ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Zm aW8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2 Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFk b21haW4uaD4KQEAgLTE0MDUsMTAgKzE0MDUsMTAgQEAgc3RhdGljIGJvb2wgdmZpb19idXNfaXNf bWRldihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIAlzdHJ1Y3QgYnVzX3R5cGUgKm1kZXZfYnVzOwog CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQltZGV2X2J1cyA9IHN5bWJvbF9nZXQobWRldl9idXNfdHlw ZSk7CisJbWRldl9idXMgPSBzeW1ib2xfZ2V0KG1kZXZfdmZpb19idXNfdHlwZSk7CiAJaWYgKG1k ZXZfYnVzKSB7CiAJCXJldCA9IChidXMgPT0gbWRldl9idXMpOwotCQlzeW1ib2xfcHV0KG1kZXZf YnVzX3R5cGUpOworCQlzeW1ib2xfcHV0KG1kZXZfdmZpb19idXNfdHlwZSk7CiAJfQogCiAJcmV0 dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRldi5oIGIvaW5jbHVkZS9saW51 eC9tZGV2LmgKaW5kZXggMGNlMzBjYTc4ZGIwLi5lZTI0MTAyNDZiM2MgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvbGludXgvbWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWRldi5oCkBAIC0xMzMsMTYg KzEzMywyMiBAQCB2b2lkICptZGV2X2dldF9kcnZkYXRhKHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dik7CiB2b2lkIG1kZXZfc2V0X2RydmRhdGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB2b2lk ICpkYXRhKTsKIGNvbnN0IGd1aWRfdCAqbWRldl91dWlkKHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dik7CiAKLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlwZTsKLQotaW50IG1kZXZf cmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFy ZW50X29wcyAqb3BzKTsKK2ludCBtZGV2X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IHN0cnVjdCBtZGV2X3BhcmVudF9vcHMgKm9wcywKKwkJCSBzdHJ1Y3QgYnVzX3R5 cGUgKmJ1cyk7CiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2 KTsKIAotaW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2LCBz dHJ1Y3QgbW9kdWxlICpvd25lcik7CitpbnQgbWRldl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1k ZXZfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJIHN0cnVjdCBidXNfdHlw ZSAqYnVzKTsKIHZvaWQgbWRldl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbWRldl9kcml2ZXIg KmRydik7CiAKIHN0cnVjdCBkZXZpY2UgKm1kZXZfcGFyZW50X2RldihzdHJ1Y3QgbWRldl9kZXZp Y2UgKm1kZXYpOwogc3RydWN0IGRldmljZSAqbWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2KTsKLXN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpk ZXYpOworc3RydWN0IG1kZXZfZGV2aWNlICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGJ1c190eXBlICpidXMpOworCitpbnQgbWRldl9wcm9iZShzdHJ1Y3QgZGV2aWNl ICpkZXYpOworaW50IG1kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK2ludCBtZGV2 X3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7Cit2b2lkIG1kZXZfdW5yZWdpc3Rl cl9idXMoc3RydWN0IGJ1c190eXBlICpidXMpOwogCiAjZW5kaWYgLyogTURFVl9IICovCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oIGIvaW5jbHVkZS9saW51eC9tZGV2X3Zm aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ0NmE3NTM3ZTNm YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWRldl92ZmlvLmgKQEAgLTAsMCAr MSwyNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoK KyAqIFZGSU8gTWVkaWF0ZWQgZGV2aWNlIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTksIFJlZCBIYXQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgQXV0aG9yOiBKYXNv biBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgorICovCisKKyNpZm5kZWYgTURFVl9WRklPX0gK KyNkZWZpbmUgTURFVl9WRklPX0gKKworI2luY2x1ZGUgPGxpbnV4L21kZXYuaD4KKworZXh0ZXJu IHN0cnVjdCBidXNfdHlwZSBtZGV2X3ZmaW9fYnVzX3R5cGU7CisKK2ludCBtZGV2X3ZmaW9fcmVn aXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBt ZGV2X3BhcmVudF9vcHMgKm9wcyk7Cit2b2lkIG1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZShz dHJ1Y3QgZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZGV2X2RldmljZSAq dmZpb19tZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbWRldl9m cm9tX2RldihkZXYsICZtZGV2X3ZmaW9fYnVzX3R5cGUpOworfQorCisjZW5kaWYKZGlmZiAtLWdp dCBhL3NhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jIGIvc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hz LmMKaW5kZXggYWM1YzhjMTdiMWZmLi5mMDQxZDU4MzI0YjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMv dmZpby1tZGV2L21ib2Nocy5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jCkBAIC0y OSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lv bW11Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+ CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAg LTEzMzIsNyArMTMzMiw3IEBAIHN0YXRpYyBzc2l6ZV90CiBtZW1vcnlfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCSAgICBjaGFyICpidWYp CiB7Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVj dCBtZGV2X3N0YXRlICptZGV2X3N0YXRlID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAogCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIiVkIE1CXG4iLCBtZGV2X3N0YXRlLT50eXBlLT5tYnl0ZXMpOwpA QCAtMTQ2OCw3ICsxNDY4LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWJvY2hzX2Rldl9pbml0KHZv aWQpCiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQyOwogCi0JcmV0ID0gbWRldl9yZWdpc3Rlcl9k ZXZpY2UoJm1ib2Noc19kZXYsICZtZGV2X2ZvcHMpOworCXJldCA9IG1kZXZfdmZpb19yZWdpc3Rl cl9kZXZpY2UoJm1ib2Noc19kZXYsICZtZGV2X2ZvcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFp bGVkMzsKIApAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWJvY2hzX2Rl dl9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWJvY2hzX2Rldl9leGl0KHZvaWQpCiB7 CiAJbWJvY2hzX2Rldi5idXMgPSBOVUxMOwotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJm1ib2No c19kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbWJvY2hzX2Rldik7CiAKIAlk ZXZpY2VfdW5yZWdpc3RlcigmbWJvY2hzX2Rldik7CiAJY2Rldl9kZWwoJm1ib2Noc19jZGV2KTsK ZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYyBiL3NhbXBsZXMvdmZpby1tZGV2 L21kcHkuYwppbmRleCBjYzg2YmY2NTY2ZTQuLjljMzJmZTM3OTVhZCAxMDA2NDQKLS0tIGEvc2Ft cGxlcy92ZmlvLW1kZXYvbWRweS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYwpAQCAt MjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KICNpbmNsdWRlIDxsaW51eC9p b21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWRldi5o PgorI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgog I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CiAjaW5jbHVkZSAibWRweS1kZWZzLmgiCkBAIC02 MzksNyArNjM5LDcgQEAgc3RhdGljIHNzaXplX3QKIHJlc29sdXRpb25fc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCiB7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBt ZGV2X3N0YXRlICptZGV2X3N0YXRlID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAogCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVkeCVkXG4iLApAQCAtNzc1LDcgKzc3NSw3IEBAIHN0YXRpYyBpbnQg X19pbml0IG1kcHlfZGV2X2luaXQodm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDI7CiAK LQlyZXQgPSBtZGV2X3JlZ2lzdGVyX2RldmljZSgmbWRweV9kZXYsICZtZGV2X2ZvcHMpOworCXJl dCA9IG1kZXZfdmZpb19yZWdpc3Rlcl9kZXZpY2UoJm1kcHlfZGV2LCAmbWRldl9mb3BzKTsKIAlp ZiAocmV0KQogCQlnb3RvIGZhaWxlZDM7CiAKQEAgLTc5NCw3ICs3OTQsNyBAQCBzdGF0aWMgaW50 IF9faW5pdCBtZHB5X2Rldl9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWRweV9kZXZf ZXhpdCh2b2lkKQogewogCW1kcHlfZGV2LmJ1cyA9IE5VTEw7Ci0JbWRldl91bnJlZ2lzdGVyX2Rl dmljZSgmbWRweV9kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbWRweV9kZXYp OwogCiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1kcHlfZGV2KTsKIAljZGV2X2RlbCgmbWRweV9jZGV2 KTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYyBiL3NhbXBsZXMvdmZpby1t ZGV2L210dHkuYwppbmRleCBjZTg0YTMwMGE0ZGEuLjZlNGU2MzM5ZTBmMSAxMDA2NDQKLS0tIGEv c2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYwpA QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGlu dXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWRl di5oPgorI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5o PgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPHVhcGkvbGludXgvc2VyaWFs X3JlZy5oPgpAQCAtMTI4NSw3ICsxMjg1LDcgQEAgc3RhdGljIHNzaXplX3QKIHNhbXBsZV9tZGV2 X2Rldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsCiAJCSAgICAgY2hhciAqYnVmKQogewotCWlmIChtZGV2X2Zyb21fZGV2KGRldikpCisJaWYg KHZmaW9fbWRldl9mcm9tX2RldihkZXYpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJUaGlzIGlz IE1ERVYgJXNcbiIsIGRldl9uYW1lKGRldikpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiXG4i KTsKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG10dHlfZGV2X2luaXQo dm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDI7CiAKLQlyZXQgPSBtZGV2X3JlZ2lzdGVy X2RldmljZSgmbXR0eV9kZXYuZGV2LCAmbWRldl9mb3BzKTsKKwlyZXQgPSBtZGV2X3ZmaW9fcmVn aXN0ZXJfZGV2aWNlKCZtdHR5X2Rldi5kZXYsICZtZGV2X2ZvcHMpOwogCWlmIChyZXQpCiAJCWdv dG8gZmFpbGVkMzsKIApAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBfX2luaXQgbXR0 eV9kZXZfaW5pdCh2b2lkKQogc3RhdGljIHZvaWQgX19leGl0IG10dHlfZGV2X2V4aXQodm9pZCkK IHsKIAltdHR5X2Rldi5kZXYuYnVzID0gTlVMTDsKLQltZGV2X3VucmVnaXN0ZXJfZGV2aWNlKCZt dHR5X2Rldi5kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbXR0eV9kZXYuZGV2 KTsKIAogCWRldmljZV91bnJlZ2lzdGVyKCZtdHR5X2Rldi5kZXYpOwogCWlkcl9kZXN0cm95KCZt dHR5X2Rldi52ZF9pZHIpOwotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWw= 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 74015C432C0 for ; Mon, 18 Nov 2019 06:18:48 +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 548BE206D4 for ; Mon, 18 Nov 2019 06:18:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 548BE206D4 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 DA6CA89F33; Mon, 18 Nov 2019 06:18:47 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1FB5E89F45 for ; Mon, 18 Nov 2019 06:18:47 +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-152-tD3vmjQuNrO9sCAztXnV0A-1; Mon, 18 Nov 2019 01:18:42 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0A81D9125A; Mon, 18 Nov 2019 06:18:38 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-215.pek2.redhat.com [10.72.12.215]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3C0A961070; Mon, 18 Nov 2019 06:17:40 +0000 (UTC) From: Jason Wang To: 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, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Date: Mon, 18 Nov 2019 14:16:58 +0800 Message-Id: <20191118061703.8669-2-jasowang@redhat.com> In-Reply-To: <20191118061703.8669-1-jasowang@redhat.com> References: <20191118061703.8669-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-MC-Unique: tD3vmjQuNrO9sCAztXnV0A-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=1574057926; 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=/XNAWBJl9HYd58zJCbVCxLRJrBu8qH2nBLBROQScSb0=; b=OWa+B+tc8ft3wuxO/3yVmcCBcuW/pBF1zzxrQUEI+bFLW+eFaay5iT3DHYuwZ4sDUJEUb4 ww5g8xXG+dcTrIp2akElctgoCHL70kLn0K4LM7rQvBkKTWoa3ldX36pF4sSISAdbPRJFgT rbJdW2DZkm/PNn33VZsv6uZtol1t69w= Subject: [Intel-gfx] [PATCH V12 1/6] mdev: make mdev bus agnostic 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: rdunlap@infradead.org, christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, jgg@mellanox.com, rob.miller@broadcom.com, hch@infradead.org, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, parav@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, stefanha@redhat.com, zhihong.wang@intel.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, gregkh@linuxfoundation.org, 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: <20191118061658.SZEFZKTJSFI8698j7VB_FHxcb_4ylsvMxAnwoOnPoKw@z> Q3VycmVudCBtZGV2IGlzIHRpZWQgdG8gYSBWRklPIHNwZWNpZmljICJtZGV2IiBidXMuIFRoaXMg cHJldmVudCBtZGV2CmZyb20gYmVpbmcgdXNlZCBieSBvdGhlciB0eXBlcyBvZiBBUEkvYnVzZXMu IFNvIHRoaXMgcGF0Y2ggdHJpZXMgdG8gbWFrZQptZGV2IGJ1cyBhZ25vc3RpYyB0aHJvdWdoIG1h a2luZyBhIG1kZXYgY29yZSBhIHRoaW4gbW9kdWxlOgoKLSBkZWNvdXBsZSBWRklPIGJ1cyBzcGVj aWZpYyBiaXRzIGZyb20gbWRldl9jb3JlLmMgdG8gbWRldl92ZmlvLmMgYW5kCiAgaW50cm9kdWNl IG1kZXZfdmZpbyBtb2R1bGUKLSByZXF1aXJlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgYnVzIHdo ZW4gcmVnaXN0ZXJpbmcgbWRldiBkZXZpY2UgYW5kCiAgbWRldiBkcml2ZXIKCldpdGggdGhvc2Ug bW9kaWZpY2F0aW9ucyBtZGV2IGJlY29tZSBhIGdlbmVyaWMgbW9kdWxlIHRoYXQgY291bGQgYmUK dXNlZCBieSBtdWx0aXBsZSB0eXBlcyBvZiB2aXJ0dWFsIGJ1c2VzIGFuZCBkZXZpY2VzLgoKU2ln bmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiAuLi4vZHJp dmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgICAgICAgfCAgNjggKysrKysrLS0tLS0t CiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMgICAgICAgICAgICAgIHwgIDEwICstCiBk cml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRy aXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyAgICAgICAgICAgICB8ICAyMSArKy0tCiBk cml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oICAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvdmZpby9tZGV2L0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAxNyArKy0KIGRy aXZlcnMvdmZpby9tZGV2L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogZHJp dmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMgICAgICAgICAgICAgICAgIHwgMTA0ICsrKysrKysr KysrKystLS0tLQogZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyAgICAgICAgICAgICAg IHwgIDI5ICsrLS0tCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCAgICAgICAgICAg ICAgfCAgMTMgKystCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ZmaW8uYyAgICAgICAgICAgICAg ICAgfCAgNDggKysrKysrKysKIGRyaXZlcnMvdmZpby9tZGV2L3ZmaW9fbWRldi5jICAgICAgICAg ICAgICAgICB8ICAgNSArLQogZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYyAgICAgICAg ICAgICAgIHwgICA2ICstCiBpbmNsdWRlL2xpbnV4L21kZXYuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTYgKystCiBpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oICAgICAgICAgICAgICAg ICAgICAgfCAgMjUgKysrKysKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAg ICAgICAgICB8ICAgOCArLQogc2FtcGxlcy92ZmlvLW1kZXYvbWRweS5jICAgICAgICAgICAgICAg ICAgICAgIHwgICA4ICstCiBzYW1wbGVzL3ZmaW8tbWRldi9tdHR5LmMgICAgICAgICAgICAgICAg ICAgICAgfCAgIDggKy0KIDE5IGZpbGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRpb25zKCspLCAxMjkg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92ZmlvL21kZXYvbWRldl92 ZmlvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oCgpkaWZm IC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJz dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QKaW5k ZXggMjVlYjdkNWI4MzRiLi4xODg3ZDI3YTU2NWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24v ZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9k cml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdApAQCAtNDksMzUgKzQ5LDM3IEBAIGRl dmljZXMgYXMgZXhhbXBsZXMsIGFzIHRoZXNlIGRldmljZXMgYXJlIHRoZSBmaXJzdCBkZXZpY2Vz IHRvIHVzZSB0aGlzIG1vZHVsZTo6CiAKICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKICAgICAgfCAg ICAgICAgICAgICAgIHwKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwgIG1kZXZfcmVnaXN0ZXJfZHJp dmVyKCkgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgICAgICAgICAgIHwgKzwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8Ci0gICAgIHwgfCAgbWRldiAgICAgfCB8ICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKLSAgICAgfCB8ICBidXMgICAg ICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+KyB2ZmlvX21kZXYua28gfDwtPiBWRklPIHVz ZXIKLSAgICAgfCB8ICBkcml2ZXIgICB8IHwgICAgIHByb2JlKCkvcmVtb3ZlKCkgICAgfCAgICAg ICAgICAgICAgfCAgICBBUElzCi0gICAgIHwgfCAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAg ICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwKKyAgICAg fCAgIE1ERVYgQ09SRSAgIHwgIG1kZXZfcmVnaXN0ZXJfZHJpdmVyKCkgKy0tLS0tLS0tLS0tLS0t KworICAgICB8ICAgIE1PRFVMRSAgICAgKzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAg ICAgICAgICB8CisgICAgIHwgICAgbWRldi5rbyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0+KyB2ZmlvX21kZXYua28gfDwtPiBWRklPIHVzZXIKKyAgICAgfCAgICAgICAgICAg ICAgIHwgICAgIHByb2JlKCkvcmVtb3ZlKCkgICAgfCAgICAgICAgICAgICAgfCAgICBBUElzCisg ICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsKKyAgICAgKy0tLSstLS0tLS0tKy0tLSsKKyAgICAgICAgIHwgICAgICAvfFwKKyAgICAg ICAgIHwgICAgICAgfAorY2FsbGJhY2tzfCAgICAgICB8IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCkK KyAgICAgICAgIHwgICAgICAgfCBtZGV2X3JlZ2lzdGVyX2J1cygpCisgICAgICAgIFx8LyAgICAg IHwKKyAgICAgKy0tLSstLS0tLS0tKy0tLSsKKyAgICAgfCAgICAgICAgICAgICAgIHwgIG1kZXZf dmZpb19yZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAg ICAgICArPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAg ICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG52aWRp YS5rbyAgIHw8LT4gcGh5c2ljYWwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgTURF ViBWRklPICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsK KyAgICAgfCAgIFBoeXNpY2FsICAgIHwKKyAgICAgfCAgICBkZXZpY2UgICAgIHwgIG1kZXZfdmZp b19yZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICBpbnRlcmZhY2Ug ICB8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgICB8 ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGk5MTUua28g ICAgIHw8LT4gcGh5c2ljYWwKKyAgICAgfCBtZGV2X3ZmaW8ua28gICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgICAgICAg ICAgICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAg ICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgfCAgICAgICAgICAgICAgIHwgIG1kZXZfdmZpb19y ZWdpc3Rlcl9kZXZpY2UoKSArLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAgICAgICAr PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgICB8ICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2N3X2RldmljZS5r b3w8LT4gcGh5c2ljYWwKKyAgICAgfCAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmljZQorICAgICB8ICAgICAgICAgICAg ICAgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKICAgICAg fCAgICAgICAgICAgICAgIHwKLSAgICAgfCAgTURFViBDT1JFICAgIHwKLSAgICAgfCAgIE1PRFVM RSAgICAgIHwKLSAgICAgfCAgIG1kZXYua28gICAgIHwKLSAgICAgfCArLS0tLS0tLS0tLS0rIHwg IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCkgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgICAgICAg ICAgIHwgKzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8Ci0gICAgIHwg fCAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG52aWRpYS5rbyAgIHw8 LT4gcGh5c2ljYWwKLSAgICAgfCB8ICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0+KyAgICAgICAgICAgICAgfCAgICBkZXZpY2UKLSAgICAgfCB8ICAgICAgICAgICB8IHwgICAg ICAgIGNhbGxiYWNrcyAgICAgICAgKy0tLS0tLS0tLS0tLS0tKwotICAgICB8IHwgUGh5c2ljYWwg IHwgfAotICAgICB8IHwgIGRldmljZSAgIHwgfCAgbWRldl9yZWdpc3Rlcl9kZXZpY2UoKSArLS0t LS0tLS0tLS0tLS0rCi0gICAgIHwgfCBpbnRlcmZhY2UgfCB8PC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsgICAgICAgICAgICAgIHwKLSAgICAgfCB8ICAgICAgICAgICB8IHwgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgaTkxNS5rbyAgICAgfDwtPiBwaHlzaWNhbAotICAgICB8IHwgICAgICAg ICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4rICAgICAgICAgICAgICB8ICAgIGRldmlj ZQotICAgICB8IHwgICAgICAgICAgIHwgfCAgICAgICAgY2FsbGJhY2tzICAgICAgICArLS0tLS0t LS0tLS0tLS0rCi0gICAgIHwgfCAgICAgICAgICAgfCB8Ci0gICAgIHwgfCAgICAgICAgICAgfCB8 ICBtZGV2X3JlZ2lzdGVyX2RldmljZSgpICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCB8ICAgICAg ICAgICB8ICs8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAotICAgICB8 IHwgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjd19kZXZpY2Uua298 PC0+IHBoeXNpY2FsCi0gICAgIHwgfCAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPisgICAgICAgICAgICAgIHwgICAgZGV2aWNlCi0gICAgIHwgfCAgICAgICAgICAgfCB8ICAg ICAgICBjYWxsYmFja3MgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAgICAgfCArLS0tLS0tLS0t LS0rIHwKICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKIAogCkBAIC0xMTYsNyArMTE4LDggQEAgdG8g cmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGNvcmUgZHJpdmVyOgogKiBS ZWdpc3Rlcjo6CiAKICAgICBleHRlcm4gaW50ICBtZGV2X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qg bWRldl9kcml2ZXIgKmRydiwKLQkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1c190eXBlICpidXMpOwog CiAqIFVucmVnaXN0ZXI6OgogCkBAIC0xNTksMTEgKzE2MiwxMiBAQCBUaGUgY2FsbGJhY2tzIGlu IHRoZSBtZGV2X3BhcmVudF9vcHMgc3RydWN0dXJlIGFyZSBhcyBmb2xsb3dzOgogKiB3cml0ZTog d3JpdGUgZW11bGF0aW9uIGNhbGxiYWNrCiAqIG1tYXA6IG1tYXAgZW11bGF0aW9uIGNhbGxiYWNr CiAKLUEgZHJpdmVyIHNob3VsZCB1c2UgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1cmUgaW4g dGhlIGZ1bmN0aW9uIGNhbGwgdG8KLXJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBtZGV2IGNvcmUg ZHJpdmVyOjoKK0EgZHJpdmVyIHNob3VsZCB1c2UgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1 cmUgYW5kIGJ1cyB0eXBlIGluIHRoZQorZnVuY3Rpb24gY2FsbCB0byByZWdpc3RlciBpdHNlbGYg d2l0aCB0aGUgbWRldiBjb3JlIGRyaXZlcjo6CiAKIAlleHRlcm4gaW50ICBtZGV2X3JlZ2lzdGVy X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzKTsKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWRldl9wYXJlbnRfb3BzICpvcHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidXNfdHlwZSAq YnVzKTsKIAogSG93ZXZlciwgdGhlIG1kZXZfcGFyZW50X29wcyBzdHJ1Y3R1cmUgaXMgbm90IHJl cXVpcmVkIGluIHRoZSBmdW5jdGlvbiBjYWxsCiB0aGF0IGEgZHJpdmVyIHNob3VsZCB1c2UgdG8g dW5yZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgbWRldiBjb3JlIGRyaXZlcjo6CmRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGNiYTEwOTU1NDdmZC4uZDMzNTk0OTI0 MGRjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTcxMjEs NiArMTcxMjEsNyBAQCBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkv dmZpby1tZWRpYXRlZC1kZXZpY2UucnN0CiBGOglkcml2ZXJzL3ZmaW8vbWRldi8KIEY6CWluY2x1 ZGUvbGludXgvbWRldi5oCitGOglpbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oCiBGOglzYW1wbGVz L3ZmaW8tbWRldi8KIAogVkZJTyBQTEFURk9STSBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0 LmMKaW5kZXggMzQzZDc5YzFjYjdlLi44YzAyNTcyYzliNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9r dm1ndC5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXVpZC5oPgogI2luY2x1 ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmZpby5oPgotI2luY2x1ZGUg PGxpbnV4L21kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGV2X3ZmaW8uaD4KICNpbmNsdWRlIDxs aW51eC9kZWJ1Z2ZzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9ub3NwZWMuaD4KQEAgLTE1NTQsNyAr MTU1NCw3IEBAIHN0YXRpYyBzc2l6ZV90CiB2Z3B1X2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICAgIGNoYXIgKmJ1ZikKIHsKLQlz dHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21fZGV2KGRldik7CisJc3RydWN0IG1k ZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21fZGV2KGRldik7CiAKIAlpZiAobWRldikg ewogCQlzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSA9IChzdHJ1Y3QgaW50ZWxfdmdwdSAqKQpAQCAt MTU2OCw3ICsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QKIGh3X2lkX3Nob3coc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICBjaGFyICpidWYpCiB7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCiAJaWYgKG1k ZXYpIHsKIAkJc3RydWN0IGludGVsX3ZncHUgKnZncHUgPSAoc3RydWN0IGludGVsX3ZncHUgKikK QEAgLTE2MjMsMTIgKzE2MjMsMTIgQEAgc3RhdGljIGludCBrdm1ndF9ob3N0X2luaXQoc3RydWN0 IGRldmljZSAqZGV2LCB2b2lkICpndnQsIGNvbnN0IHZvaWQgKm9wcykKIAkJcmV0dXJuIC1FRkFV TFQ7CiAJaW50ZWxfdmdwdV9vcHMuc3VwcG9ydGVkX3R5cGVfZ3JvdXBzID0ga3ZtX3ZncHVfdHlw ZV9ncm91cHM7CiAKLQlyZXR1cm4gbWRldl9yZWdpc3Rlcl9kZXZpY2UoZGV2LCAmaW50ZWxfdmdw dV9vcHMpOworCXJldHVybiBtZGV2X3ZmaW9fcmVnaXN0ZXJfZGV2aWNlKGRldiwgJmludGVsX3Zn cHVfb3BzKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtZ3RfaG9zdF9leGl0KHN0cnVjdCBkZXZpY2Ug KmRldikKIHsKLQltZGV2X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJbWRldl92ZmlvX3VucmVn aXN0ZXJfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQga3ZtZ3RfcGFnZV90cmFja19hZGQo dW5zaWduZWQgbG9uZyBoYW5kbGUsIHU2NCBnZm4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAv Y2lvL3ZmaW9fY2N3X29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYwppbmRl eCBmMGQ3MWFiNzdjNTAuLjc5MWI4YjBlYjAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Np by92ZmlvX2Njd19vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jCkBA IC0xMSw3ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KLSNpbmNsdWRl IDxsaW51eC9tZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8 bGludXgvbm9zcGVjLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCkBAIC01ODgsMTAgKzU4 OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyB2ZmlvX2Njd19tZGV2 X29wcyA9IHsKIAogaW50IHZmaW9fY2N3X21kZXZfcmVnKHN0cnVjdCBzdWJjaGFubmVsICpzY2gp CiB7Ci0JcmV0dXJuIG1kZXZfcmVnaXN0ZXJfZGV2aWNlKCZzY2gtPmRldiwgJnZmaW9fY2N3X21k ZXZfb3BzKTsKKwlyZXR1cm4gbWRldl92ZmlvX3JlZ2lzdGVyX2RldmljZSgmc2NoLT5kZXYsICZ2 ZmlvX2Njd19tZGV2X29wcyk7CiB9CiAKIHZvaWQgdmZpb19jY3dfbWRldl91bnJlZyhzdHJ1Y3Qg c3ViY2hhbm5lbCAqc2NoKQogewotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJnNjaC0+ZGV2KTsK KwltZGV2X3ZmaW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnNjaC0+ZGV2KTsKIH0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8v dmZpb19hcF9vcHMuYwppbmRleCA1YzBmNTNjNmRkZTcuLjc4MDQ4ZTY3MDM3NCAxMDA2NDQKLS0t IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9j cnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtNjAyLDcgKzYwMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGFz c2lnbl9hZGFwdGVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0OwogCXVu c2lnbmVkIGxvbmcgYXBpZDsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zyb21f ZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21fZGV2 KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IG1kZXZfZ2V0X2Ry dmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywgZGlzYWxsb3cgYXNz aWdubWVudCBvZiBhZGFwdGVyICovCkBAIC02NjgsNyArNjY4LDcgQEAgc3RhdGljIHNzaXplX3Qg dW5hc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiB7CiAJaW50IHJldDsK IAl1bnNpZ25lZCBsb25nIGFwaWQ7Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9m cm9tX2RldihkZXYpOworCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9t X2RldihkZXYpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dl dF9kcnZkYXRhKG1kZXYpOwogCiAJLyogSWYgdGhlIGd1ZXN0IGlzIHJ1bm5pbmcsIGRpc2FsbG93 IHVuLWFzc2lnbm1lbnQgb2YgYWRhcHRlciAqLwpAQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyBz c2l6ZV90IGFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogewogCWludCBy ZXQ7CiAJdW5zaWduZWQgbG9uZyBhcHFpOwotCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG1k ZXZfZnJvbV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSB2ZmlvX21kZXZf ZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gbWRl dl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAl1bnNpZ25lZCBsb25nIG1heF9hcHFpID0gbWF0cml4X21k ZXYtPm1hdHJpeC5hcW1fbWF4OwogCkBAIC04MTAsNyArODEwLDcgQEAgc3RhdGljIHNzaXplX3Qg dW5hc3NpZ25fZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0Owog CXVuc2lnbmVkIGxvbmcgYXBxaTsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYgPSBtZGV2X2Zy b21fZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19tZGV2X2Zyb21f ZGV2KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IG1kZXZfZ2V0 X2RydmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywgZGlzYWxsb3cg dW4tYXNzaWdubWVudCBvZiBkb21haW4gKi8KQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgc3Np emVfdCBhc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogewog CWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBpZDsKLQlzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYg PSBtZGV2X2Zyb21fZGV2KGRldik7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdmZpb19t ZGV2X2Zyb21fZGV2KGRldik7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9 IG1kZXZfZ2V0X2RydmRhdGEobWRldik7CiAKIAkvKiBJZiB0aGUgZ3Vlc3QgaXMgcnVubmluZywg ZGlzYWxsb3cgYXNzaWdubWVudCBvZiBjb250cm9sIGRvbWFpbiAqLwpAQCAtOTAzLDcgKzkwMyw3 IEBAIHN0YXRpYyBzc2l6ZV90IHVuYXNzaWduX2NvbnRyb2xfZG9tYWluX3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmRldiwKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZG9taWQ7Ci0Jc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBhcF9tYXRyaXhf bWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dldF9kcnZkYXRhKG1kZXYpOwogCXVuc2lnbmVkIGxv bmcgbWF4X2RvbWlkID0gIG1hdHJpeF9tZGV2LT5tYXRyaXguYWRtX21heDsKIApAQCAtOTMzLDcg KzkzMyw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbnRyb2xfZG9tYWluc19zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKIAlpbnQgbmNoYXJzID0gMDsKIAlpbnQgbjsKIAljaGFyICpidWZwb3MgPSBidWY7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBh cF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBtZGV2X2dldF9kcnZkYXRhKG1kZXYpOwogCXVu c2lnbmVkIGxvbmcgbWF4X2RvbWlkID0gbWF0cml4X21kZXYtPm1hdHJpeC5hZG1fbWF4OwogCkBA IC05NTIsNyArOTUyLDcgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKGNvbnRyb2xfZG9tYWlucyk7 CiBzdGF0aWMgc3NpemVfdCBtYXRyaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBtZGV2 X2RldmljZSAqbWRldiA9IG1kZXZfZnJvbV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWRldl9kZXZpY2Ug Km1kZXYgPSB2ZmlvX21kZXZfZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYg Km1hdHJpeF9tZGV2ID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAljaGFyICpidWZwb3MgPSBi dWY7CiAJdW5zaWduZWQgbG9uZyBhcGlkOwpAQCAtMTI5NSwxMCArMTI5NSwxMSBAQCBpbnQgdmZp b19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpCiB7CiAJYXRvbWljX3NldCgmbWF0cml4X2Rldi0+YXZh aWxhYmxlX2luc3RhbmNlcywgTUFYX1pERVZfRU5UUklFU19FWFQpOwogCi0JcmV0dXJuIG1kZXZf cmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2UsICZ2ZmlvX2FwX21hdHJpeF9vcHMp OworCXJldHVybiBtZGV2X3ZmaW9fcmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2Us CisJCQkJCSAmdmZpb19hcF9tYXRyaXhfb3BzKTsKIH0KIAogdm9pZCB2ZmlvX2FwX21kZXZfdW5y ZWdpc3Rlcih2b2lkKQogewotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJm1hdHJpeF9kZXYtPmRl dmljZSk7CisJbWRldl92ZmlvX3VucmVnaXN0ZXJfZGV2aWNlKCZtYXRyaXhfZGV2LT5kZXZpY2Up OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaCBi L2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgKaW5kZXggZjQ2ZGRlNTZiNDY0 Li40ZTM3ZTBlMzQzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9w cml2YXRlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaApAQCAt MTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWRl dl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zm aW8vbWRldi9LY29uZmlnIGIvZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZwppbmRleCA1ZGEyN2Yy MTAwZjkuLjJlMDdjYTkxNWE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvS2NvbmZp ZworKysgYi9kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnCkBAIC0xLDE1ICsxLDI0IEBACi0jIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAotY29uZmlnIFZGSU9fTURFVgor Y29uZmlnIE1ERVYKIAl0cmlzdGF0ZSAiTWVkaWF0ZWQgZGV2aWNlIGRyaXZlciBmcmFtZXdvcmsi Ci0JZGVwZW5kcyBvbiBWRklPCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgUHJvdmlkZXMgYSBmcmFt ZXdvcmsgdG8gdmlydHVhbGl6ZSBkZXZpY2VzLgotCSAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVy LWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgZm9yIG1vcmUgZGV0YWlscy4KIAogCSAgSWYg eW91IGRvbid0IGtub3cgd2hhdCBkbyBoZXJlLCBzYXkgTi4KIAorY29uZmlnIFZGSU9fTURFVgor CXRyaXN0YXRlICJWRklPIE1lZGlhdGVkIGRldmljZSBkcml2ZXIiCisgICAgICAgIGRlcGVuZHMg b24gVkZJTyAmJiBNREVWCisgICAgICAgIGRlZmF1bHQgbgorCWhlbHAKKwkgIFByb2l2ZGVzIGEg bWVkaWF0ZWQgQlVTIGZvciB1c2Vyc3BhY2UgZHJpdmVyIHRocm91Z2ggVkZJTworCSAgZnJhbWV3 b3JrLiBTZWUgRG9jdW1lbnRhdGlvbi92ZmlvLW1lZGlhdGVkLWRldmljZS50eHQgZm9yCisJICBt b3JlIGRldGFpbHMuCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgZG8gaGVyZSwgc2F5IE4u CisKKwogY29uZmlnIFZGSU9fTURFVl9ERVZJQ0UKIAl0cmlzdGF0ZSAiVkZJTyBkcml2ZXIgZm9y IE1lZGlhdGVkIGRldmljZXMiCiAJZGVwZW5kcyBvbiBWRklPICYmIFZGSU9fTURFVgpkaWZmIC0t Z2l0IGEvZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vbWRldi9NYWtl ZmlsZQppbmRleCAxMDE1MTZmZGYzNzUuLmU5Njc1NTAxMjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVy cy92ZmlvL21kZXYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvTWFrZWZpbGUKQEAg LTEsNiArMSw2IEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAog bWRldi15IDo9IG1kZXZfY29yZS5vIG1kZXZfc3lzZnMubyBtZGV2X2RyaXZlci5vCiAKLW9iai0k KENPTkZJR19WRklPX01ERVYpICs9IG1kZXYubworb2JqLSQoQ09ORklHX01ERVYpICs9IG1kZXYu bworb2JqLSQoQ09ORklHX1ZGSU9fTURFVikgKz0gbWRldl92ZmlvLm8KIG9iai0kKENPTkZJR19W RklPX01ERVZfREVWSUNFKSArPSB2ZmlvX21kZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92Zmlv L21kZXYvbWRldl9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X2NvcmUuYwppbmRleCBi NTU4ZDRjZmQwODIuLmUxMjcyYTQwYzUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYv bWRldl9jb3JlLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKQEAgLTIyLDEx ICsyMiwxMyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBhcmVudF9saXN0KTsKIHN0YXRpYyBERUZJ TkVfTVVURVgocGFyZW50X2xpc3RfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2NvbXBhdCAq bWRldl9idXNfY29tcGF0X2NsYXNzOwogCiBzdGF0aWMgTElTVF9IRUFEKG1kZXZfbGlzdCk7CiBz dGF0aWMgREVGSU5FX01VVEVYKG1kZXZfbGlzdF9sb2NrKTsKIAorc3RhdGljIExJU1RfSEVBRChj bGFzc19jb21wYXRfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXBhdF9saXN0X2xvY2sp OworCiBzdHJ1Y3QgZGV2aWNlICptZGV2X3BhcmVudF9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2KQogewogCXJldHVybiBtZGV2LT5wYXJlbnQtPmRldjsKQEAgLTUxLDkgKzUzLDkgQEAgc3Ry dWN0IGRldmljZSAqbWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogfQogRVhQT1JU X1NZTUJPTChtZGV2X2Rldik7CiAKLXN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9mcm9tX2Rldihz dHJ1Y3QgZGV2aWNlICpkZXYpCitzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXZfZnJvbV9kZXYoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIHsKLQlyZXR1cm4gZGV2X2lz X21kZXYoZGV2KSA/IHRvX21kZXZfZGV2aWNlKGRldikgOiBOVUxMOworCXJldHVybiBkZXZfaXNf bWRldihkZXYsIGJ1cykgPyB0b19tZGV2X2RldmljZShkZXYpIDogTlVMTDsKIH0KIEVYUE9SVF9T WU1CT0wobWRldl9mcm9tX2Rldik7CiAKQEAgLTEyMiw3ICsxMjQsOSBAQCBzdGF0aWMgdm9pZCBt ZGV2X2RldmljZV9yZW1vdmVfY29tbW9uKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAogc3Rh dGljIGludCBtZGV2X2RldmljZV9yZW1vdmVfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpk YXRhKQogewotCWlmIChkZXZfaXNfbWRldihkZXYpKSB7CisJc3RydWN0IGJ1c190eXBlICpidXMg PSBkYXRhOworCisJaWYgKGRldl9pc19tZGV2KGRldiwgYnVzKSkgewogCQlzdHJ1Y3QgbWRldl9k ZXZpY2UgKm1kZXY7CiAKIAkJbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7CkBAIC0xMzEsNiAr MTM1LDQxIEBAIHN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBkZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBtZGV2X2Ns YXNzX2NvbXBhdCAqZ2V0X2NsYXNzX2NvbXBhdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKKwlz dHJ1Y3QgbWRldl9jbGFzc19jb21wYXQgKm1kZXZfY2xhc3NfY29tcGF0OworCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShtZGV2X2NsYXNzX2NvbXBhdCwgJmNsYXNzX2NvbXBhdF9saXN0LCBuZXh0KSB7 CisJCWlmIChtZGV2X2NsYXNzX2NvbXBhdC0+YnVzID09IGJ1cykKKwkJCXJldHVybiBtZGV2X2Ns YXNzX2NvbXBhdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFz c19jb21wYXQgKm1kZXZfYWxsb2NfY2xhc3NfY29tcGF0KHN0cnVjdCBidXNfdHlwZSAqYnVzKQor eworCXN0cnVjdCBtZGV2X2NsYXNzX2NvbXBhdCAqbWRldl9jbGFzc19jb21wYXQgPSBnZXRfY2xh c3NfY29tcGF0KGJ1cyk7CisJY2hhciBjbGFzc19uYW1lWzY0XTsKKworCWlmIChtZGV2X2NsYXNz X2NvbXBhdCkKKwkJcmV0dXJuIG1kZXZfY2xhc3NfY29tcGF0LT5jbGFzc19jb21wYXQ7CisKKwlt ZGV2X2NsYXNzX2NvbXBhdCA9IGttYWxsb2Moc2l6ZW9mKCptZGV2X2NsYXNzX2NvbXBhdCksIEdG UF9LRVJORUwpOworCWlmICghbWRldl9jbGFzc19jb21wYXQpCisJCXJldHVybiBOVUxMOworCXNu cHJpbnRmKGNsYXNzX25hbWUsIDY0LCAiJXNfYnVzIiwgYnVzLT5uYW1lKTsKKwltZGV2X2NsYXNz X2NvbXBhdC0+Y2xhc3NfY29tcGF0ID0gY2xhc3NfY29tcGF0X3JlZ2lzdGVyKGNsYXNzX25hbWUp OworCWlmICghbWRldl9jbGFzc19jb21wYXQtPmNsYXNzX2NvbXBhdCkgeworCQlrZnJlZShtZGV2 X2NsYXNzX2NvbXBhdCk7CisJCXJldHVybiBOVUxMOworCX0KKwltZGV2X2NsYXNzX2NvbXBhdC0+ YnVzID0gYnVzOworCWxpc3RfYWRkKCZtZGV2X2NsYXNzX2NvbXBhdC0+bmV4dCwgJmNsYXNzX2Nv bXBhdF9saXN0KTsKKworCXJldHVybiBtZGV2X2NsYXNzX2NvbXBhdC0+Y2xhc3NfY29tcGF0Owor fQorCiAvKgogICogbWRldl9yZWdpc3Rlcl9kZXZpY2UgOiBSZWdpc3RlciBhIGRldmljZQogICog QGRldjogZGV2aWNlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgcGFyZW50IGRldmljZS4KQEAgLTEz OSwxMiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWRldl9kZXZpY2VfcmVtb3ZlX2NiKHN0cnVjdCBk ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKICAqIEFkZCBkZXZpY2UgdG8gbGlzdCBvZiByZWdpc3Rl cmVkIHBhcmVudCBkZXZpY2VzLgogICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9y LCBvdGhlcndpc2UgMC4KICAqLwotaW50IG1kZXZfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZp Y2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzKQoraW50IG1kZXZfcmVn aXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50 X29wcyAqb3BzLAorCQkJIHN0cnVjdCBidXNfdHlwZSAqYnVzKQogewogCWludCByZXQ7CiAJc3Ry dWN0IG1kZXZfcGFyZW50ICpwYXJlbnQ7CiAJY2hhciAqZW52X3N0cmluZyA9ICJNREVWX1NUQVRF PXJlZ2lzdGVyZWQiOwogCWNoYXIgKmVudnBbXSA9IHsgZW52X3N0cmluZywgTlVMTCB9OworCXN0 cnVjdCBjbGFzc19jb21wYXQgKmNsYXNzX2NvbXBhdDsKIAogCS8qIGNoZWNrIGZvciBtYW5kYXRv cnkgb3BzICovCiAJaWYgKCFvcHMgfHwgIW9wcy0+Y3JlYXRlIHx8ICFvcHMtPnJlbW92ZSB8fCAh b3BzLT5zdXBwb3J0ZWRfdHlwZV9ncm91cHMpCkBAIC0xNzUsMjAgKzIxNiwyMSBAQCBpbnQgbWRl dl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgbWRldl9w YXJlbnRfb3BzICpvcHMpCiAKIAlwYXJlbnQtPmRldiA9IGRldjsKIAlwYXJlbnQtPm9wcyA9IG9w czsKKwlwYXJlbnQtPmJ1cyA9IGJ1czsKIAotCWlmICghbWRldl9idXNfY29tcGF0X2NsYXNzKSB7 Ci0JCW1kZXZfYnVzX2NvbXBhdF9jbGFzcyA9IGNsYXNzX2NvbXBhdF9yZWdpc3RlcigibWRldl9i dXMiKTsKLQkJaWYgKCFtZGV2X2J1c19jb21wYXRfY2xhc3MpIHsKLQkJCXJldCA9IC1FTk9NRU07 Ci0JCQlnb3RvIGFkZF9kZXZfZXJyOwotCQl9CisJbXV0ZXhfbG9jaygmY29tcGF0X2xpc3RfbG9j ayk7CisJY2xhc3NfY29tcGF0ID0gbWRldl9hbGxvY19jbGFzc19jb21wYXQoYnVzKTsKKwltdXRl eF91bmxvY2soJmNvbXBhdF9saXN0X2xvY2spOworCWlmICghY2xhc3NfY29tcGF0KSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gYWRkX2Rldl9lcnI7CiAJfQogCiAJcmV0ID0gcGFyZW50X2Ny ZWF0ZV9zeXNmc19maWxlcyhwYXJlbnQpOwogCWlmIChyZXQpCiAJCWdvdG8gYWRkX2Rldl9lcnI7 CiAKLQlyZXQgPSBjbGFzc19jb21wYXRfY3JlYXRlX2xpbmsobWRldl9idXNfY29tcGF0X2NsYXNz LCBkZXYsIE5VTEwpOworCXJldCA9IGNsYXNzX2NvbXBhdF9jcmVhdGVfbGluayhjbGFzc19jb21w YXQsIGRldiwgTlVMTCk7CiAJaWYgKHJldCkKIAkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIGNy ZWF0ZSBjb21wYXRpYmlsaXR5IGNsYXNzIGxpbmtcbiIpOwogCkBAIC0yMjMsNiArMjY1LDcgQEAg dm9pZCBtZGV2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3Qg bWRldl9wYXJlbnQgKnBhcmVudDsKIAljaGFyICplbnZfc3RyaW5nID0gIk1ERVZfU1RBVEU9dW5y ZWdpc3RlcmVkIjsKIAljaGFyICplbnZwW10gPSB7IGVudl9zdHJpbmcsIE5VTEwgfTsKKwlzdHJ1 Y3QgbWRldl9jbGFzc19jb21wYXQgKm1kZXZfY2xhc3NfY29tcGF0OwogCiAJbXV0ZXhfbG9jaygm cGFyZW50X2xpc3RfbG9jayk7CiAJcGFyZW50ID0gX19maW5kX3BhcmVudF9kZXZpY2UoZGV2KTsK QEAgLTIzOCw5ICsyODEsMTMgQEAgdm9pZCBtZGV2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKIAogCWRvd25fd3JpdGUoJnBhcmVudC0+dW5yZWdfc2VtKTsKIAotCWNsYXNz X2NvbXBhdF9yZW1vdmVfbGluayhtZGV2X2J1c19jb21wYXRfY2xhc3MsIGRldiwgTlVMTCk7CisJ bXV0ZXhfbG9jaygmY29tcGF0X2xpc3RfbG9jayk7CisJbWRldl9jbGFzc19jb21wYXQgPSBnZXRf Y2xhc3NfY29tcGF0KHBhcmVudC0+YnVzKTsKKwlXQVJOX09OKCFtZGV2X2NsYXNzX2NvbXBhdCk7 CisJY2xhc3NfY29tcGF0X3JlbW92ZV9saW5rKG1kZXZfY2xhc3NfY29tcGF0LT5jbGFzc19jb21w YXQsIGRldiwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZjb21wYXRfbGlzdF9sb2NrKTsKIAotCWRl dmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIG1kZXZfZGV2aWNlX3JlbW92ZV9jYik7CisJ ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgcGFyZW50LT5idXMsIG1kZXZfZGV2aWNlX3JlbW92 ZV9jYik7CiAKIAlwYXJlbnRfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBhcmVudCk7CiAJdXBfd3JpdGUo JnBhcmVudC0+dW5yZWdfc2VtKTsKQEAgLTMxNCw3ICszNjEsNyBAQCBpbnQgbWRldl9kZXZpY2Vf Y3JlYXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCiAJZGV2aWNlX2luaXRpYWxpemUoJm1kZXYt PmRldik7CiAJbWRldi0+ZGV2LnBhcmVudCAgPSBkZXY7Ci0JbWRldi0+ZGV2LmJ1cyAgICAgPSAm bWRldl9idXNfdHlwZTsKKwltZGV2LT5kZXYuYnVzICAgICA9IHBhcmVudC0+YnVzOwogCW1kZXYt PmRldi5yZWxlYXNlID0gbWRldl9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJm1kZXYt PmRldiwgIiVwVWwiLCB1dWlkKTsKIAltZGV2LT5kZXYuZ3JvdXBzID0gcGFyZW50LT5vcHMtPm1k ZXZfYXR0cl9ncm91cHM7CkBAIC00MDQsMjQgKzQ1MSwyOSBAQCBzdHJ1Y3QgZGV2aWNlICptZGV2 X2dldF9pb21tdV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTCht ZGV2X2dldF9pb21tdV9kZXZpY2UpOwogCi1zdGF0aWMgaW50IF9faW5pdCBtZGV2X2luaXQodm9p ZCkKK2ludCBtZGV2X3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIHsKLQlyZXR1 cm4gbWRldl9idXNfcmVnaXN0ZXIoKTsKKwlyZXR1cm4gYnVzX3JlZ2lzdGVyKGJ1cyk7CiB9CitF WFBPUlRfU1lNQk9MKG1kZXZfcmVnaXN0ZXJfYnVzKTsKIAotc3RhdGljIHZvaWQgX19leGl0IG1k ZXZfZXhpdCh2b2lkKQordm9pZCBtZGV2X3VucmVnaXN0ZXJfYnVzKHN0cnVjdCBidXNfdHlwZSAq YnVzKQogewotCWlmIChtZGV2X2J1c19jb21wYXRfY2xhc3MpCi0JCWNsYXNzX2NvbXBhdF91bnJl Z2lzdGVyKG1kZXZfYnVzX2NvbXBhdF9jbGFzcyk7Ci0KLQltZGV2X2J1c191bnJlZ2lzdGVyKCk7 CisJc3RydWN0IG1kZXZfY2xhc3NfY29tcGF0ICptZGV2X2NsYXNzX2NvbXBhdDsKKworCW11dGV4 X2xvY2soJmNvbXBhdF9saXN0X2xvY2spOworCW1kZXZfY2xhc3NfY29tcGF0ID0gZ2V0X2NsYXNz X2NvbXBhdChidXMpOworCWlmIChtZGV2X2NsYXNzX2NvbXBhdCkgeworCQlsaXN0X2RlbCgmbWRl dl9jbGFzc19jb21wYXQtPm5leHQpOworCQljbGFzc19jb21wYXRfdW5yZWdpc3RlcihtZGV2X2Ns YXNzX2NvbXBhdC0+Y2xhc3NfY29tcGF0KTsKKwkJa2ZyZWUobWRldl9jbGFzc19jb21wYXQpOwor CX0KKwlidXNfdW5yZWdpc3RlcihidXMpOworCW11dGV4X3VubG9jaygmY29tcGF0X2xpc3RfbG9j ayk7CiB9Ci0KLW1vZHVsZV9pbml0KG1kZXZfaW5pdCkKLW1vZHVsZV9leGl0KG1kZXZfZXhpdCkK K0VYUE9SVF9TWU1CT0wobWRldl91bnJlZ2lzdGVyX2J1cyk7CiAKIE1PRFVMRV9WRVJTSU9OKERS SVZFUl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1Io RFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxF X1NPRlRERVAoInBvc3Q6IHZmaW9fbWRldiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9kcml2ZXIuYyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVyLmMKaW5kZXgg MGQzMjIzYWVlMjBiLi5jM2EyYWMwMjM3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2 L21kZXZfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYwpAQCAt MTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4 L2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvbWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L21kZXZf dmZpby5oPgogCiAjaW5jbHVkZSAibWRldl9wcml2YXRlLmgiCiAKQEAgLTM3LDcgKzM4LDcgQEAg c3RhdGljIHZvaWQgbWRldl9kZXRhY2hfaW9tbXUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQog CWRldl9pbmZvKCZtZGV2LT5kZXYsICJNREVWOiBkZXRhY2hpbmcgaW9tbXVcbiIpOwogfQogCi1z dGF0aWMgaW50IG1kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IG1kZXZfcHJvYmUo c3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2ID0gdG9fbWRl dl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHRvX21k ZXZfZGV2aWNlKGRldik7CkBAIC01NSw4ICs1Niw5IEBAIHN0YXRpYyBpbnQgbWRldl9wcm9iZShz dHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChtZGV2 X3Byb2JlKTsKIAotc3RhdGljIGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitp bnQgbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZGV2X2RyaXZl ciAqZHJ2ID0gdG9fbWRldl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtZGV2X2Rldmlj ZSAqbWRldiA9IHRvX21kZXZfZGV2aWNlKGRldik7CkBAIC02OCwyNiArNzAsMjIgQEAgc3RhdGlj IGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlyZXR1cm4gMDsKIH0KLQot c3RydWN0IGJ1c190eXBlIG1kZXZfYnVzX3R5cGUgPSB7Ci0JLm5hbWUJCT0gIm1kZXYiLAotCS5w cm9iZQkJPSBtZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gbWRldl9yZW1vdmUsCi19OwotRVhQT1JU X1NZTUJPTF9HUEwobWRldl9idXNfdHlwZSk7CitFWFBPUlRfU1lNQk9MKG1kZXZfcmVtb3ZlKTsK IAogLyoqCiAgKiBtZGV2X3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IE1ERVYgZHJp dmVyCiAgKiBAZHJ2OiB0aGUgZHJpdmVyIHRvIHJlZ2lzdGVyCiAgKiBAb3duZXI6IG1vZHVsZSBv d25lciBvZiBkcml2ZXIgdG8gYmUgcmVnaXN0ZXJlZAorICogQGJ1czogYnV0IHRoYXQgdGhlIGRy aXZlciB3YW50cyB0byBhdHRhY2gKICAqCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24g ZXJyb3IsIG90aGVyd2lzZSAwLgogICoqLwotaW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVj dCBtZGV2X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKK2ludCBtZGV2X3JlZ2lz dGVyX2RyaXZlcihzdHJ1Y3QgbWRldl9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIs CisJCQkgc3RydWN0IGJ1c190eXBlICpidXMpCiB7CiAJLyogaW5pdGlhbGl6ZSBjb21tb24gZHJp dmVyIGZpZWxkcyAqLwogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7Ci0JZHJ2LT5kcml2 ZXIuYnVzID0gJm1kZXZfYnVzX3R5cGU7CisJZHJ2LT5kcml2ZXIuYnVzID0gYnVzOwogCWRydi0+ ZHJpdmVyLm93bmVyID0gb3duZXI7CiAKIAkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KQEAgLTEw NSwxMiArMTAzLDMgQEAgdm9pZCBtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2Ry aXZlciAqZHJ2KQogfQogRVhQT1JUX1NZTUJPTChtZGV2X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAot aW50IG1kZXZfYnVzX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIGJ1c19yZWdpc3RlcigmbWRl dl9idXNfdHlwZSk7Ci19Ci0KLXZvaWQgbWRldl9idXNfdW5yZWdpc3Rlcih2b2lkKQotewotCWJ1 c191bnJlZ2lzdGVyKCZtZGV2X2J1c190eXBlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfcHJpdmF0ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgK aW5kZXggN2Q5MjI5NTBjYWFmLi4yOThkN2EwZjQ5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZp by9tZGV2L21kZXZfcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oCkBAIC0xMCwxMiArMTAsMTAgQEAKICNpZm5kZWYgTURFVl9QUklWQVRFX0gKICNkZWZpbmUg TURFVl9QUklWQVRFX0gKIAotaW50ICBtZGV2X2J1c19yZWdpc3Rlcih2b2lkKTsKLXZvaWQgbWRl dl9idXNfdW5yZWdpc3Rlcih2b2lkKTsKLQogc3RydWN0IG1kZXZfcGFyZW50IHsKIAlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CiAJY29uc3Qgc3RydWN0IG1kZXZfcGFyZW50X29wcyAqb3BzOworCXN0cnVj dCBidXNfdHlwZSAqYnVzOwogCXN0cnVjdCBrcmVmIHJlZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5l eHQ7CiAJc3RydWN0IGtzZXQgKm1kZXZfdHlwZXNfa3NldDsKQEAgLTM1LDggKzMzLDE1IEBAIHN0 cnVjdCBtZGV2X2RldmljZSB7CiAJYm9vbCBhY3RpdmU7CiB9OwogCitzdHJ1Y3QgbWRldl9jbGFz c19jb21wYXQgeworCXN0cnVjdCBjbGFzc19jb21wYXQgKmNsYXNzX2NvbXBhdDsKKwlzdHJ1Y3Qg YnVzX3R5cGUgKmJ1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cit9OworCisKICNkZWZpbmUg dG9fbWRldl9kZXZpY2UoZGV2KQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWRldl9kZXZpY2Us IGRldikKLSNkZWZpbmUgZGV2X2lzX21kZXYoZCkJCSgoZCktPmJ1cyA9PSAmbWRldl9idXNfdHlw ZSkKKyNkZWZpbmUgZGV2X2lzX21kZXYoZCwgYnVzKQkoKGQpLT5idXMgPT0gYnVzKQogCiBzdHJ1 Y3QgbWRldl90eXBlIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92ZmlvL21kZXYvbWRldl92ZmlvLmMgYi9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ZmaW8uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY5ZDExOTFiOTk4MgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfdmZpby5jCkBAIC0wLDAgKzEs NDggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CisjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CisKKyNkZWZpbmUgRFJJ VkVSX1ZFUlNJT04JCSIwLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJKYXNvbiBXYW5nIgor I2RlZmluZSBEUklWRVJfREVTQwkJIk1lZGlhdGVkIFZGSU8gYnVzIgorCitzdHJ1Y3QgYnVzX3R5 cGUgbWRldl92ZmlvX2J1c190eXBlID0geworCS5uYW1lCQk9ICJtZGV2IiwKKwkucHJvYmUJCT0g bWRldl9wcm9iZSwKKwkucmVtb3ZlCQk9IG1kZXZfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0wo bWRldl92ZmlvX2J1c190eXBlKTsKKworc3RhdGljIGludCBfX2luaXQgbWRldl9pbml0KHZvaWQp Cit7CisJcmV0dXJuIG1kZXZfcmVnaXN0ZXJfYnVzKCZtZGV2X3ZmaW9fYnVzX3R5cGUpOworfQor CitzdGF0aWMgdm9pZCBfX2V4aXQgbWRldl9leGl0KHZvaWQpCit7CisJbWRldl91bnJlZ2lzdGVy X2J1cygmbWRldl92ZmlvX2J1c190eXBlKTsKK30KKworaW50IG1kZXZfdmZpb19yZWdpc3Rlcl9k ZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG1kZXZfcGFy ZW50X29wcyAqb3BzKQoreworCXJldHVybiBtZGV2X3JlZ2lzdGVyX2RldmljZShkZXYsIG9wcywg Jm1kZXZfdmZpb19idXNfdHlwZSk7Cit9CitFWFBPUlRfU1lNQk9MKG1kZXZfdmZpb19yZWdpc3Rl cl9kZXZpY2UpOworCit2b2lkIG1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJcmV0dXJuIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKK30KK0VY UE9SVF9TWU1CT0wobWRldl92ZmlvX3VucmVnaXN0ZXJfZGV2aWNlKTsKKworbW9kdWxlX2luaXQo bWRldl9pbml0KQorbW9kdWxlX2V4aXQobWRldl9leGl0KQorCitNT0RVTEVfVkVSU0lPTihEUklW RVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKERS SVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9T T0ZUREVQKCJwb3N0OiB2ZmlvX21kZXYiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2 L3ZmaW9fbWRldi5jIGIvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2LmMKaW5kZXggMzA5NjRh NGUwYTI4Li4xNmU5ZWJlMzBkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L3ZmaW9f bWRldi5jCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L3ZmaW9fbWRldi5jCkBAIC0xMyw3ICsxMyw3 IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgog I2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+CisjaW5jbHVk ZSA8bGludXgvbWRldl92ZmlvLmg+CiAKICNpbmNsdWRlICJtZGV2X3ByaXZhdGUuaCIKIApAQCAt MTI4LDcgKzEyOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19tZGV2X2RyaXZl ciA9IHsKIAogc3RhdGljIGludCBfX2luaXQgdmZpb19tZGV2X2luaXQodm9pZCkKIHsKLQlyZXR1 cm4gbWRldl9yZWdpc3Rlcl9kcml2ZXIoJnZmaW9fbWRldl9kcml2ZXIsIFRISVNfTU9EVUxFKTsK KwlyZXR1cm4gbWRldl9yZWdpc3Rlcl9kcml2ZXIoJnZmaW9fbWRldl9kcml2ZXIsIFRISVNfTU9E VUxFLAorCQkJCSAgICAmbWRldl92ZmlvX2J1c190eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgX19l eGl0IHZmaW9fbWRldl9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19p b21tdV90eXBlMS5jIGIvZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYwppbmRleCBkODY0 Mjc3ZWExNmYuLmYzNTUyM2Y4MjJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9faW9t bXVfdHlwZTEuYworKysgYi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jCkBAIC0zNCw3 ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Zm aW8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2 Lmg+CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFk b21haW4uaD4KQEAgLTE0MDUsMTAgKzE0MDUsMTAgQEAgc3RhdGljIGJvb2wgdmZpb19idXNfaXNf bWRldihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKIAlzdHJ1Y3QgYnVzX3R5cGUgKm1kZXZfYnVzOwog CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQltZGV2X2J1cyA9IHN5bWJvbF9nZXQobWRldl9idXNfdHlw ZSk7CisJbWRldl9idXMgPSBzeW1ib2xfZ2V0KG1kZXZfdmZpb19idXNfdHlwZSk7CiAJaWYgKG1k ZXZfYnVzKSB7CiAJCXJldCA9IChidXMgPT0gbWRldl9idXMpOwotCQlzeW1ib2xfcHV0KG1kZXZf YnVzX3R5cGUpOworCQlzeW1ib2xfcHV0KG1kZXZfdmZpb19idXNfdHlwZSk7CiAJfQogCiAJcmV0 dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRldi5oIGIvaW5jbHVkZS9saW51 eC9tZGV2LmgKaW5kZXggMGNlMzBjYTc4ZGIwLi5lZTI0MTAyNDZiM2MgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvbGludXgvbWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWRldi5oCkBAIC0xMzMsMTYg KzEzMywyMiBAQCB2b2lkICptZGV2X2dldF9kcnZkYXRhKHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dik7CiB2b2lkIG1kZXZfc2V0X2RydmRhdGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB2b2lk ICpkYXRhKTsKIGNvbnN0IGd1aWRfdCAqbWRldl91dWlkKHN0cnVjdCBtZGV2X2RldmljZSAqbWRl dik7CiAKLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlwZTsKLQotaW50IG1kZXZf cmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG1kZXZfcGFy ZW50X29wcyAqb3BzKTsKK2ludCBtZGV2X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IHN0cnVjdCBtZGV2X3BhcmVudF9vcHMgKm9wcywKKwkJCSBzdHJ1Y3QgYnVzX3R5 cGUgKmJ1cyk7CiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2 KTsKIAotaW50IG1kZXZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZGV2X2RyaXZlciAqZHJ2LCBz dHJ1Y3QgbW9kdWxlICpvd25lcik7CitpbnQgbWRldl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1k ZXZfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJIHN0cnVjdCBidXNfdHlw ZSAqYnVzKTsKIHZvaWQgbWRldl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbWRldl9kcml2ZXIg KmRydik7CiAKIHN0cnVjdCBkZXZpY2UgKm1kZXZfcGFyZW50X2RldihzdHJ1Y3QgbWRldl9kZXZp Y2UgKm1kZXYpOwogc3RydWN0IGRldmljZSAqbWRldl9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICpt ZGV2KTsKLXN0cnVjdCBtZGV2X2RldmljZSAqbWRldl9mcm9tX2RldihzdHJ1Y3QgZGV2aWNlICpk ZXYpOworc3RydWN0IG1kZXZfZGV2aWNlICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGJ1c190eXBlICpidXMpOworCitpbnQgbWRldl9wcm9iZShzdHJ1Y3QgZGV2aWNl ICpkZXYpOworaW50IG1kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK2ludCBtZGV2 X3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7Cit2b2lkIG1kZXZfdW5yZWdpc3Rl cl9idXMoc3RydWN0IGJ1c190eXBlICpidXMpOwogCiAjZW5kaWYgLyogTURFVl9IICovCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L21kZXZfdmZpby5oIGIvaW5jbHVkZS9saW51eC9tZGV2X3Zm aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ0NmE3NTM3ZTNm YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWRldl92ZmlvLmgKQEAgLTAsMCAr MSwyNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoK KyAqIFZGSU8gTWVkaWF0ZWQgZGV2aWNlIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTksIFJlZCBIYXQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgQXV0aG9yOiBKYXNv biBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgorICovCisKKyNpZm5kZWYgTURFVl9WRklPX0gK KyNkZWZpbmUgTURFVl9WRklPX0gKKworI2luY2x1ZGUgPGxpbnV4L21kZXYuaD4KKworZXh0ZXJu IHN0cnVjdCBidXNfdHlwZSBtZGV2X3ZmaW9fYnVzX3R5cGU7CisKK2ludCBtZGV2X3ZmaW9fcmVn aXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBt ZGV2X3BhcmVudF9vcHMgKm9wcyk7Cit2b2lkIG1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZShz dHJ1Y3QgZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZGV2X2RldmljZSAq dmZpb19tZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbWRldl9m cm9tX2RldihkZXYsICZtZGV2X3ZmaW9fYnVzX3R5cGUpOworfQorCisjZW5kaWYKZGlmZiAtLWdp dCBhL3NhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jIGIvc2FtcGxlcy92ZmlvLW1kZXYvbWJvY2hz LmMKaW5kZXggYWM1YzhjMTdiMWZmLi5mMDQxZDU4MzI0YjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMv dmZpby1tZGV2L21ib2Nocy5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jCkBAIC0y OSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lv bW11Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tZGV2Lmg+ CisjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAj aW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAg LTEzMzIsNyArMTMzMiw3IEBAIHN0YXRpYyBzc2l6ZV90CiBtZW1vcnlfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCSAgICBjaGFyICpidWYp CiB7Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0 cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVj dCBtZGV2X3N0YXRlICptZGV2X3N0YXRlID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAogCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIiVkIE1CXG4iLCBtZGV2X3N0YXRlLT50eXBlLT5tYnl0ZXMpOwpA QCAtMTQ2OCw3ICsxNDY4LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWJvY2hzX2Rldl9pbml0KHZv aWQpCiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQyOwogCi0JcmV0ID0gbWRldl9yZWdpc3Rlcl9k ZXZpY2UoJm1ib2Noc19kZXYsICZtZGV2X2ZvcHMpOworCXJldCA9IG1kZXZfdmZpb19yZWdpc3Rl cl9kZXZpY2UoJm1ib2Noc19kZXYsICZtZGV2X2ZvcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFp bGVkMzsKIApAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAgc3RhdGljIGludCBfX2luaXQgbWJvY2hzX2Rl dl9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWJvY2hzX2Rldl9leGl0KHZvaWQpCiB7 CiAJbWJvY2hzX2Rldi5idXMgPSBOVUxMOwotCW1kZXZfdW5yZWdpc3Rlcl9kZXZpY2UoJm1ib2No c19kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbWJvY2hzX2Rldik7CiAKIAlk ZXZpY2VfdW5yZWdpc3RlcigmbWJvY2hzX2Rldik7CiAJY2Rldl9kZWwoJm1ib2Noc19jZGV2KTsK ZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYyBiL3NhbXBsZXMvdmZpby1tZGV2 L21kcHkuYwppbmRleCBjYzg2YmY2NTY2ZTQuLjljMzJmZTM3OTVhZCAxMDA2NDQKLS0tIGEvc2Ft cGxlcy92ZmlvLW1kZXYvbWRweS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYwpAQCAt MjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZmaW8uaD4KICNpbmNsdWRlIDxsaW51eC9p b21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWRldi5o PgorI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgog I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CiAjaW5jbHVkZSAibWRweS1kZWZzLmgiCkBAIC02 MzksNyArNjM5LDcgQEAgc3RhdGljIHNzaXplX3QKIHJlc29sdXRpb25fc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCiB7 Ci0Jc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gbWRldl9mcm9tX2RldihkZXYpOworCXN0cnVj dCBtZGV2X2RldmljZSAqbWRldiA9IHZmaW9fbWRldl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCBt ZGV2X3N0YXRlICptZGV2X3N0YXRlID0gbWRldl9nZXRfZHJ2ZGF0YShtZGV2KTsKIAogCXJldHVy biBzcHJpbnRmKGJ1ZiwgIiVkeCVkXG4iLApAQCAtNzc1LDcgKzc3NSw3IEBAIHN0YXRpYyBpbnQg X19pbml0IG1kcHlfZGV2X2luaXQodm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDI7CiAK LQlyZXQgPSBtZGV2X3JlZ2lzdGVyX2RldmljZSgmbWRweV9kZXYsICZtZGV2X2ZvcHMpOworCXJl dCA9IG1kZXZfdmZpb19yZWdpc3Rlcl9kZXZpY2UoJm1kcHlfZGV2LCAmbWRldl9mb3BzKTsKIAlp ZiAocmV0KQogCQlnb3RvIGZhaWxlZDM7CiAKQEAgLTc5NCw3ICs3OTQsNyBAQCBzdGF0aWMgaW50 IF9faW5pdCBtZHB5X2Rldl9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWRweV9kZXZf ZXhpdCh2b2lkKQogewogCW1kcHlfZGV2LmJ1cyA9IE5VTEw7Ci0JbWRldl91bnJlZ2lzdGVyX2Rl dmljZSgmbWRweV9kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbWRweV9kZXYp OwogCiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1kcHlfZGV2KTsKIAljZGV2X2RlbCgmbWRweV9jZGV2 KTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYyBiL3NhbXBsZXMvdmZpby1t ZGV2L210dHkuYwppbmRleCBjZTg0YTMwMGE0ZGEuLjZlNGU2MzM5ZTBmMSAxMDA2NDQKLS0tIGEv c2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYwpA QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGlu dXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWRl di5oPgorI2luY2x1ZGUgPGxpbnV4L21kZXZfdmZpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5o PgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPHVhcGkvbGludXgvc2VyaWFs X3JlZy5oPgpAQCAtMTI4NSw3ICsxMjg1LDcgQEAgc3RhdGljIHNzaXplX3QKIHNhbXBsZV9tZGV2 X2Rldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsCiAJCSAgICAgY2hhciAqYnVmKQogewotCWlmIChtZGV2X2Zyb21fZGV2KGRldikpCisJaWYg KHZmaW9fbWRldl9mcm9tX2RldihkZXYpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJUaGlzIGlz IE1ERVYgJXNcbiIsIGRldl9uYW1lKGRldikpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiXG4i KTsKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG10dHlfZGV2X2luaXQo dm9pZCkKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDI7CiAKLQlyZXQgPSBtZGV2X3JlZ2lzdGVy X2RldmljZSgmbXR0eV9kZXYuZGV2LCAmbWRldl9mb3BzKTsKKwlyZXQgPSBtZGV2X3ZmaW9fcmVn aXN0ZXJfZGV2aWNlKCZtdHR5X2Rldi5kZXYsICZtZGV2X2ZvcHMpOwogCWlmIChyZXQpCiAJCWdv dG8gZmFpbGVkMzsKIApAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBfX2luaXQgbXR0 eV9kZXZfaW5pdCh2b2lkKQogc3RhdGljIHZvaWQgX19leGl0IG10dHlfZGV2X2V4aXQodm9pZCkK IHsKIAltdHR5X2Rldi5kZXYuYnVzID0gTlVMTDsKLQltZGV2X3VucmVnaXN0ZXJfZGV2aWNlKCZt dHR5X2Rldi5kZXYpOworCW1kZXZfdmZpb191bnJlZ2lzdGVyX2RldmljZSgmbXR0eV9kZXYuZGV2 KTsKIAogCWRldmljZV91bnJlZ2lzdGVyKCZtdHR5X2Rldi5kZXYpOwogCWlkcl9kZXN0cm95KCZt dHR5X2Rldi52ZF9pZHIpOwotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZng=