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=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,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 888C1C49EAB for ; Tue, 5 Nov 2019 09:34:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 55217214D8 for ; Tue, 5 Nov 2019 09:34:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Z7LJr10L" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388181AbfKEJef (ORCPT ); Tue, 5 Nov 2019 04:34:35 -0500 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:58608 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387862AbfKEJee (ORCPT ); Tue, 5 Nov 2019 04:34:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572946472; 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=GL0EV7S/CVbjypEmKRQzwBPJlNCKfeApryMypohNTFY=; b=Z7LJr10LI2LY1i9OhgQI3zhxx3FlneYIgthMljE9pOWWmzWiLCa2+2g773Ji4+Z4Tc+5G7 Rr5Gih1NyURBy7REfJt4UniU4cumry3tYT7sCc5CWyibglbEIIE24S+9G/scNFAhJZS/xY 4uM/E56WAPVCfcSVfDedN32cl023OA4= 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-426-1iW_xGK-NTulqHvSRxjzDg-1; Tue, 05 Nov 2019 04:34:29 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 503561800D4A; Tue, 5 Nov 2019 09:34:25 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id A2ED65C1D8; Tue, 5 Nov 2019 09:33:42 +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 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, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com, Jason Wang Subject: [PATCH V8 1/6] mdev: class id support Date: Tue, 5 Nov 2019 17:32:35 +0800 Message-Id: <20191105093240.5135-2-jasowang@redhat.com> In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: 1iW_xGK-NTulqHvSRxjzDg-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Mdev bus only supports vfio driver right now, so it doesn't implement match method. But in the future, we may add drivers other than vfio, the first driver could be virtio-mdev. This means we need to add device class id support in bus match method to pair the mdev device and mdev driver correctly. So this patch adds id_table to mdev_driver and class_id for mdev device with the match method for mdev bus. Reviewed-by: Parav Pandit Signed-off-by: Jason Wang --- .../driver-api/vfio-mediated-device.rst | 5 ++++ drivers/gpu/drm/i915/gvt/kvmgt.c | 1 + drivers/s390/cio/vfio_ccw_ops.c | 1 + drivers/s390/crypto/vfio_ap_ops.c | 1 + drivers/vfio/mdev/mdev_core.c | 17 +++++++++++++ drivers/vfio/mdev/mdev_driver.c | 25 +++++++++++++++++++ drivers/vfio/mdev/mdev_private.h | 1 + drivers/vfio/mdev/vfio_mdev.c | 6 +++++ include/linux/mdev.h | 8 ++++++ include/linux/mod_devicetable.h | 8 ++++++ samples/vfio-mdev/mbochs.c | 1 + samples/vfio-mdev/mdpy.c | 1 + samples/vfio-mdev/mtty.c | 1 + 13 files changed, 76 insertions(+) diff --git a/Documentation/driver-api/vfio-mediated-device.rst b/Documentat= ion/driver-api/vfio-mediated-device.rst index 25eb7d5b834b..6709413bee29 100644 --- a/Documentation/driver-api/vfio-mediated-device.rst +++ b/Documentation/driver-api/vfio-mediated-device.rst @@ -102,12 +102,14 @@ structure to represent a mediated device's driver:: * @probe: called when new device created * @remove: called when device removed * @driver: device driver structure + * @id_table: the ids serviced by this driver */ struct mdev_driver { =09 const char *name; =09 int (*probe) (struct device *dev); =09 void (*remove) (struct device *dev); =09 struct device_driver driver; +=09 const struct mdev_class_id *id_table; }; =20 A mediated bus driver for mdev should use this structure in the function c= alls @@ -170,6 +172,9 @@ that a driver should use to unregister itself with the = mdev core driver:: =20 =09extern void mdev_unregister_device(struct device *dev); =20 +It is also required to specify the class_id in create() callback through:: + +=09int mdev_set_class(struct mdev_device *mdev, u16 id); =20 Mediated Device Management Interface Through sysfs =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kv= mgt.c index 343d79c1cb7e..6420f0dbd31b 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -678,6 +678,7 @@ static int intel_vgpu_create(struct kobject *kobj, stru= ct mdev_device *mdev) =09=09 dev_name(mdev_dev(mdev))); =09ret =3D 0; =20 +=09mdev_set_class(mdev, MDEV_CLASS_ID_VFIO); out: =09return ret; } diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_op= s.c index f0d71ab77c50..cf2c013ae32f 100644 --- a/drivers/s390/cio/vfio_ccw_ops.c +++ b/drivers/s390/cio/vfio_ccw_ops.c @@ -129,6 +129,7 @@ static int vfio_ccw_mdev_create(struct kobject *kobj, s= truct mdev_device *mdev) =09=09=09 private->sch->schid.ssid, =09=09=09 private->sch->schid.sch_no); =20 +=09mdev_set_class(mdev, MDEV_CLASS_ID_VFIO); =09return 0; } =20 diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_a= p_ops.c index 5c0f53c6dde7..07c31070afeb 100644 --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -343,6 +343,7 @@ static int vfio_ap_mdev_create(struct kobject *kobj, st= ruct mdev_device *mdev) =09list_add(&matrix_mdev->node, &matrix_dev->mdev_list); =09mutex_unlock(&matrix_dev->lock); =20 +=09mdev_set_class(mdev, MDEV_CLASS_ID_VFIO); =09return 0; } =20 diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index b558d4cfd082..7bfa2e46e829 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -45,6 +45,17 @@ void mdev_set_drvdata(struct mdev_device *mdev, void *da= ta) } EXPORT_SYMBOL(mdev_set_drvdata); =20 +/* + * Specify the class for the mdev device, this must be called during + * create() callback. + */ +void mdev_set_class(struct mdev_device *mdev, u16 id) +{ +=09WARN_ON(mdev->class_id); +=09mdev->class_id =3D id; +} +EXPORT_SYMBOL(mdev_set_class); + struct device *mdev_dev(struct mdev_device *mdev) { =09return &mdev->dev; @@ -324,6 +335,12 @@ int mdev_device_create(struct kobject *kobj, =09if (ret) =09=09goto ops_create_fail; =20 +=09if (!mdev->class_id) { +=09=09ret =3D -EINVAL; +=09=09dev_warn(dev, "mdev vendor driver failed to specify device class\n")= ; +=09=09goto add_fail; +=09} + =09ret =3D device_add(&mdev->dev); =09if (ret) =09=09goto add_fail; diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_drive= r.c index 0d3223aee20b..ed06433693e8 100644 --- a/drivers/vfio/mdev/mdev_driver.c +++ b/drivers/vfio/mdev/mdev_driver.c @@ -69,8 +69,33 @@ static int mdev_remove(struct device *dev) =09return 0; } =20 +static int mdev_match(struct device *dev, struct device_driver *drv) +{ +=09unsigned int i; +=09struct mdev_device *mdev =3D to_mdev_device(dev); +=09struct mdev_driver *mdrv =3D to_mdev_driver(drv); +=09const struct mdev_class_id *ids =3D mdrv->id_table; + +=09if (!ids) +=09=09return 0; + +=09for (i =3D 0; ids[i].id; i++) +=09=09if (ids[i].id =3D=3D mdev->class_id) +=09=09=09return 1; +=09return 0; +} + +static int mdev_uevent(struct device *dev, struct kobj_uevent_env *env) +{ +=09struct mdev_device *mdev =3D to_mdev_device(dev); + +=09return add_uevent_var(env, "MODALIAS=3Dmdev:c%02X", mdev->class_id); +} + struct bus_type mdev_bus_type =3D { =09.name=09=09=3D "mdev", +=09.match=09=09=3D mdev_match, +=09.uevent=09=09=3D mdev_uevent, =09.probe=09=09=3D mdev_probe, =09.remove=09=09=3D mdev_remove, }; diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_priv= ate.h index 7d922950caaf..c65f436c1869 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -33,6 +33,7 @@ struct mdev_device { =09struct kobject *type_kobj; =09struct device *iommu_device; =09bool active; +=09u16 class_id; }; =20 #define to_mdev_device(dev)=09container_of(dev, struct mdev_device, dev) diff --git a/drivers/vfio/mdev/vfio_mdev.c b/drivers/vfio/mdev/vfio_mdev.c index 30964a4e0a28..38431e9ef7f5 100644 --- a/drivers/vfio/mdev/vfio_mdev.c +++ b/drivers/vfio/mdev/vfio_mdev.c @@ -120,10 +120,16 @@ static void vfio_mdev_remove(struct device *dev) =09vfio_del_group_dev(dev); } =20 +static const struct mdev_class_id vfio_id_table[] =3D { +=09{ MDEV_CLASS_ID_VFIO }, +=09{ 0 }, +}; + static struct mdev_driver vfio_mdev_driver =3D { =09.name=09=3D "vfio_mdev", =09.probe=09=3D vfio_mdev_probe, =09.remove=09=3D vfio_mdev_remove, +=09.id_table =3D vfio_id_table, }; =20 static int __init vfio_mdev_init(void) diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 0ce30ca78db0..78b69d09eb54 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -118,6 +118,7 @@ struct mdev_type_attribute mdev_type_attr_##_name =3D= =09=09\ * @probe: called when new device created * @remove: called when device removed * @driver: device driver structure + * @id_table: the ids serviced by this driver * **/ struct mdev_driver { @@ -125,6 +126,7 @@ struct mdev_driver { =09int (*probe)(struct device *dev); =09void (*remove)(struct device *dev); =09struct device_driver driver; +=09const struct mdev_class_id *id_table; }; =20 #define to_mdev_driver(drv)=09container_of(drv, struct mdev_driver, driver= ) @@ -132,6 +134,7 @@ struct mdev_driver { 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); +void mdev_set_class(struct mdev_device *mdev, u16 id); =20 extern struct bus_type mdev_bus_type; =20 @@ -145,4 +148,9 @@ 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); =20 +enum { +=09MDEV_CLASS_ID_VFIO =3D 1, +=09/* New entries must be added here */ +}; + #endif /* MDEV_H */ diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetabl= e.h index 5714fd35a83c..f32c6e44fb1a 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -821,4 +821,12 @@ struct wmi_device_id { =09const void *context; }; =20 +/** + * struct mdev_class_id - MDEV device class identifier + * @id: Used to identify a specific class of device, e.g vfio-mdev device. + */ +struct mdev_class_id { +=09__u16 id; +}; + #endif /* LINUX_MOD_DEVICETABLE_H */ diff --git a/samples/vfio-mdev/mbochs.c b/samples/vfio-mdev/mbochs.c index ac5c8c17b1ff..115bc5074656 100644 --- a/samples/vfio-mdev/mbochs.c +++ b/samples/vfio-mdev/mbochs.c @@ -561,6 +561,7 @@ static int mbochs_create(struct kobject *kobj, struct m= dev_device *mdev) =09mbochs_reset(mdev); =20 =09mbochs_used_mbytes +=3D type->mbytes; +=09mdev_set_class(mdev, MDEV_CLASS_ID_VFIO); =09return 0; =20 err_mem: diff --git a/samples/vfio-mdev/mdpy.c b/samples/vfio-mdev/mdpy.c index cc86bf6566e4..665614574d50 100644 --- a/samples/vfio-mdev/mdpy.c +++ b/samples/vfio-mdev/mdpy.c @@ -269,6 +269,7 @@ static int mdpy_create(struct kobject *kobj, struct mde= v_device *mdev) =09mdpy_reset(mdev); =20 =09mdpy_count++; +=09mdev_set_class(mdev, MDEV_CLASS_ID_VFIO); =09return 0; } =20 diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c index ce84a300a4da..90da12ff7fd9 100644 --- a/samples/vfio-mdev/mtty.c +++ b/samples/vfio-mdev/mtty.c @@ -755,6 +755,7 @@ static int mtty_create(struct kobject *kobj, struct mde= v_device *mdev) =09list_add(&mdev_state->next, &mdev_devices_list); =09mutex_unlock(&mdev_list_lock); =20 +=09mdev_set_class(mdev, MDEV_CLASS_ID_VFIO); =09return 0; } =20 --=20 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V8 1/6] mdev: class id support Date: Tue, 5 Nov 2019 17:32:35 +0800 Message-ID: <20191105093240.5135-2-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191105093240.5135-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: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com List-Id: dri-devel@lists.freedesktop.org TWRldiBidXMgb25seSBzdXBwb3J0cyB2ZmlvIGRyaXZlciByaWdodCBub3csIHNvIGl0IGRvZXNu J3QgaW1wbGVtZW50Cm1hdGNoIG1ldGhvZC4gQnV0IGluIHRoZSBmdXR1cmUsIHdlIG1heSBhZGQg ZHJpdmVycyBvdGhlciB0aGFuIHZmaW8sCnRoZSBmaXJzdCBkcml2ZXIgY291bGQgYmUgdmlydGlv LW1kZXYuIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBhZGQKZGV2aWNlIGNsYXNzIGlkIHN1cHBvcnQg aW4gYnVzIG1hdGNoIG1ldGhvZCB0byBwYWlyIHRoZSBtZGV2IGRldmljZQphbmQgbWRldiBkcml2 ZXIgY29ycmVjdGx5LgoKU28gdGhpcyBwYXRjaCBhZGRzIGlkX3RhYmxlIHRvIG1kZXZfZHJpdmVy IGFuZCBjbGFzc19pZCBmb3IgbWRldgpkZXZpY2Ugd2l0aCB0aGUgbWF0Y2ggbWV0aG9kIGZvciBt ZGV2IGJ1cy4KClJldmlld2VkLWJ5OiBQYXJhdiBQYW5kaXQgPHBhcmF2QG1lbGxhbm94LmNvbT4K U2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiAuLi4v ZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgICAgICAgfCAgNSArKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYyAgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJz L3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jICAgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL3Mz OTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL3ZmaW8v bWRldi9tZGV2X2NvcmUuYyAgICAgICAgICAgICAgICAgfCAxNyArKysrKysrKysrKysrCiBkcml2 ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCAgICAgICAgICAgICAg fCAgMSArCiBkcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYyAgICAgICAgICAgICAgICAgfCAg NiArKysrKwogaW5jbHVkZS9saW51eC9tZGV2LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDggKysrKysrCiBpbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oICAgICAgICAgICAgICAg fCAgOCArKysrKysKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAgICAgICAg ICB8ICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L21kcHkuYyAgICAgICAgICAgICAgICAgICAgICB8 ICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L210dHkuYyAgICAgICAgICAgICAgICAgICAgICB8ICAx ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0IGIvRG9jdW1lbnRh dGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdAppbmRleCAyNWViN2Q1Yjgz NGIuLjY3MDk0MTNiZWUyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3Zm aW8tbWVkaWF0ZWQtZGV2aWNlLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZp by1tZWRpYXRlZC1kZXZpY2UucnN0CkBAIC0xMDIsMTIgKzEwMiwxNCBAQCBzdHJ1Y3R1cmUgdG8g cmVwcmVzZW50IGEgbWVkaWF0ZWQgZGV2aWNlJ3MgZHJpdmVyOjoKICAgICAgICogQHByb2JlOiBj YWxsZWQgd2hlbiBuZXcgZGV2aWNlIGNyZWF0ZWQKICAgICAgICogQHJlbW92ZTogY2FsbGVkIHdo ZW4gZGV2aWNlIHJlbW92ZWQKICAgICAgICogQGRyaXZlcjogZGV2aWNlIGRyaXZlciBzdHJ1Y3R1 cmUKKyAgICAgICogQGlkX3RhYmxlOiB0aGUgaWRzIHNlcnZpY2VkIGJ5IHRoaXMgZHJpdmVyCiAg ICAgICAqLwogICAgICBzdHJ1Y3QgbWRldl9kcml2ZXIgewogCSAgICAgY29uc3QgY2hhciAqbmFt ZTsKIAkgICAgIGludCAgKCpwcm9iZSkgIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCSAgICAgdm9p ZCAoKnJlbW92ZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJICAgICBzdHJ1Y3QgZGV2aWNlX2Ry aXZlciAgICBkcml2ZXI7CisJICAgICBjb25zdCBzdHJ1Y3QgbWRldl9jbGFzc19pZCAqaWRfdGFi bGU7CiAgICAgIH07CiAKIEEgbWVkaWF0ZWQgYnVzIGRyaXZlciBmb3IgbWRldiBzaG91bGQgdXNl IHRoaXMgc3RydWN0dXJlIGluIHRoZSBmdW5jdGlvbiBjYWxscwpAQCAtMTcwLDYgKzE3Miw5IEBA IHRoYXQgYSBkcml2ZXIgc2hvdWxkIHVzZSB0byB1bnJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBt ZGV2IGNvcmUgZHJpdmVyOjoKIAogCWV4dGVybiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KTsKIAorSXQgaXMgYWxzbyByZXF1aXJlZCB0byBzcGVjaWZ5IHRo ZSBjbGFzc19pZCBpbiBjcmVhdGUoKSBjYWxsYmFjayB0aHJvdWdoOjoKKworCWludCBtZGV2X3Nl dF9jbGFzcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZCk7CiAKIE1lZGlhdGVkIERl dmljZSBNYW5hZ2VtZW50IEludGVyZmFjZSBUaHJvdWdoIHN5c2ZzCiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3Qu YwppbmRleCAzNDNkNzljMWNiN2UuLjY0MjBmMGRiZDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2 bWd0LmMKQEAgLTY3OCw2ICs2NzgsNyBAQCBzdGF0aWMgaW50IGludGVsX3ZncHVfY3JlYXRlKHN0 cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiAJCSAgICAgZGV2 X25hbWUobWRldl9kZXYobWRldikpKTsKIAlyZXQgPSAwOwogCisJbWRldl9zZXRfY2xhc3MobWRl diwgTURFVl9DTEFTU19JRF9WRklPKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vdmZp b19jY3dfb3BzLmMKaW5kZXggZjBkNzFhYjc3YzUwLi5jZjJjMDEzYWUzMmYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby92 ZmlvX2Njd19vcHMuYwpAQCAtMTI5LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19jY3dfbWRl dl9jcmVhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikK IAkJCSAgIHByaXZhdGUtPnNjaC0+c2NoaWQuc3NpZCwKIAkJCSAgIHByaXZhdGUtPnNjaC0+c2No aWQuc2NoX25vKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7 CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19h cF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA1YzBmNTNj NmRkZTcuLjA3YzMxMDcwYWZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92Zmlv X2FwX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzQz LDYgKzM0Myw3IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2NyZWF0ZShzdHJ1Y3Qga29iamVj dCAqa29iaiwgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCWxpc3RfYWRkKCZtYXRyaXhfbWRl di0+bm9kZSwgJm1hdHJpeF9kZXYtPm1kZXZfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZtYXRyaXhf ZGV2LT5sb2NrKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7 CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29y ZS5jIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKaW5kZXggYjU1OGQ0Y2ZkMDgyLi43 YmZhMmU0NmU4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCisr KyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCkBAIC00NSw2ICs0NSwxNyBAQCB2b2lk IG1kZXZfc2V0X2RydmRhdGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB2b2lkICpkYXRhKQog fQogRVhQT1JUX1NZTUJPTChtZGV2X3NldF9kcnZkYXRhKTsKIAorLyoKKyAqIFNwZWNpZnkgdGhl IGNsYXNzIGZvciB0aGUgbWRldiBkZXZpY2UsIHRoaXMgbXVzdCBiZSBjYWxsZWQgZHVyaW5nCisg KiBjcmVhdGUoKSBjYWxsYmFjay4KKyAqLwordm9pZCBtZGV2X3NldF9jbGFzcyhzdHJ1Y3QgbWRl dl9kZXZpY2UgKm1kZXYsIHUxNiBpZCkKK3sKKwlXQVJOX09OKG1kZXYtPmNsYXNzX2lkKTsKKwlt ZGV2LT5jbGFzc19pZCA9IGlkOworfQorRVhQT1JUX1NZTUJPTChtZGV2X3NldF9jbGFzcyk7CisK IHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIHsKIAly ZXR1cm4gJm1kZXYtPmRldjsKQEAgLTMyNCw2ICszMzUsMTIgQEAgaW50IG1kZXZfZGV2aWNlX2Ny ZWF0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlpZiAocmV0KQogCQlnb3RvIG9wc19jcmVhdGVf ZmFpbDsKIAorCWlmICghbWRldi0+Y2xhc3NfaWQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZGV2 X3dhcm4oZGV2LCAibWRldiB2ZW5kb3IgZHJpdmVyIGZhaWxlZCB0byBzcGVjaWZ5IGRldmljZSBj bGFzc1xuIik7CisJCWdvdG8gYWRkX2ZhaWw7CisJfQorCiAJcmV0ID0gZGV2aWNlX2FkZCgmbWRl di0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGFkZF9mYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVy LmMKaW5kZXggMGQzMjIzYWVlMjBiLi5lZDA2NDMzNjkzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dmZpby9tZGV2L21kZXZfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2 ZXIuYwpAQCAtNjksOCArNjksMzMgQEAgc3RhdGljIGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWRldl9tYXRjaChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJdW5zaWduZWQgaW50 IGk7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdG9fbWRldl9kZXZpY2UoZGV2KTsKKwlz dHJ1Y3QgbWRldl9kcml2ZXIgKm1kcnYgPSB0b19tZGV2X2RyaXZlcihkcnYpOworCWNvbnN0IHN0 cnVjdCBtZGV2X2NsYXNzX2lkICppZHMgPSBtZHJ2LT5pZF90YWJsZTsKKworCWlmICghaWRzKQor CQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGlkc1tpXS5pZDsgaSsrKQorCQlpZiAoaWRzW2ld LmlkID09IG1kZXYtPmNsYXNzX2lkKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbWRldl91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZl bnRfZW52ICplbnYpCit7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdG9fbWRldl9kZXZp Y2UoZGV2KTsKKworCXJldHVybiBhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1tZGV2OmMl MDJYIiwgbWRldi0+Y2xhc3NfaWQpOworfQorCiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlw ZSA9IHsKIAkubmFtZQkJPSAibWRldiIsCisJLm1hdGNoCQk9IG1kZXZfbWF0Y2gsCisJLnVldmVu dAkJPSBtZGV2X3VldmVudCwKIAkucHJvYmUJCT0gbWRldl9wcm9iZSwKIAkucmVtb3ZlCQk9IG1k ZXZfcmVtb3ZlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKaW5kZXggN2Q5MjI5NTBjYWFm Li5jNjVmNDM2YzE4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3 IEBAIHN0cnVjdCBtZGV2X2RldmljZSB7CiAJc3RydWN0IGtvYmplY3QgKnR5cGVfa29iajsKIAlz dHJ1Y3QgZGV2aWNlICppb21tdV9kZXZpY2U7CiAJYm9vbCBhY3RpdmU7CisJdTE2IGNsYXNzX2lk OwogfTsKIAogI2RlZmluZSB0b19tZGV2X2RldmljZShkZXYpCWNvbnRhaW5lcl9vZihkZXYsIHN0 cnVjdCBtZGV2X2RldmljZSwgZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21kZXYvdmZp b19tZGV2LmMgYi9kcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYwppbmRleCAzMDk2NGE0ZTBh MjguLjM4NDMxZTllZjdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2 LmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2LmMKQEAgLTEyMCwxMCArMTIwLDE2 IEBAIHN0YXRpYyB2b2lkIHZmaW9fbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogCXZm aW9fZGVsX2dyb3VwX2RldihkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfY2xh c3NfaWQgdmZpb19pZF90YWJsZVtdID0geworCXsgTURFVl9DTEFTU19JRF9WRklPIH0sCisJeyAw IH0sCit9OworCiBzdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fbWRldl9kcml2ZXIgPSB7 CiAJLm5hbWUJPSAidmZpb19tZGV2IiwKIAkucHJvYmUJPSB2ZmlvX21kZXZfcHJvYmUsCiAJLnJl bW92ZQk9IHZmaW9fbWRldl9yZW1vdmUsCisJLmlkX3RhYmxlID0gdmZpb19pZF90YWJsZSwKIH07 CiAKIHN0YXRpYyBpbnQgX19pbml0IHZmaW9fbWRldl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L21kZXYuaCBiL2luY2x1ZGUvbGludXgvbWRldi5oCmluZGV4IDBjZTMwY2E3 OGRiMC4uNzhiNjlkMDllYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAorKysg Yi9pbmNsdWRlL2xpbnV4L21kZXYuaApAQCAtMTE4LDYgKzExOCw3IEBAIHN0cnVjdCBtZGV2X3R5 cGVfYXR0cmlidXRlIG1kZXZfdHlwZV9hdHRyXyMjX25hbWUgPQkJXAogICogQHByb2JlOiBjYWxs ZWQgd2hlbiBuZXcgZGV2aWNlIGNyZWF0ZWQKICAqIEByZW1vdmU6IGNhbGxlZCB3aGVuIGRldmlj ZSByZW1vdmVkCiAgKiBAZHJpdmVyOiBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZQorICogQGlkX3Rh YmxlOiB0aGUgaWRzIHNlcnZpY2VkIGJ5IHRoaXMgZHJpdmVyCiAgKgogICoqLwogc3RydWN0IG1k ZXZfZHJpdmVyIHsKQEAgLTEyNSw2ICsxMjYsNyBAQCBzdHJ1Y3QgbWRldl9kcml2ZXIgewogCWlu dCAgKCpwcm9iZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qg ZGV2aWNlICpkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwljb25zdCBzdHJ1 Y3QgbWRldl9jbGFzc19pZCAqaWRfdGFibGU7CiB9OwogCiAjZGVmaW5lIHRvX21kZXZfZHJpdmVy KGRydikJY29udGFpbmVyX29mKGRydiwgc3RydWN0IG1kZXZfZHJpdmVyLCBkcml2ZXIpCkBAIC0x MzIsNiArMTM0LDcgQEAgc3RydWN0IG1kZXZfZHJpdmVyIHsKIHZvaWQgKm1kZXZfZ2V0X2RydmRh dGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIHZvaWQgbWRldl9zZXRfZHJ2ZGF0YShzdHJ1 Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHZvaWQgKmRhdGEpOwogY29uc3QgZ3VpZF90ICptZGV2X3V1 aWQoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKK3ZvaWQgbWRldl9zZXRfY2xhc3Moc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWQpOwogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1k ZXZfYnVzX3R5cGU7CiAKQEAgLTE0NSw0ICsxNDgsOSBAQCBzdHJ1Y3QgZGV2aWNlICptZGV2X3Bh cmVudF9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIHN0cnVjdCBkZXZpY2UgKm1kZXZf ZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CiBzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXZf ZnJvbV9kZXYoc3RydWN0IGRldmljZSAqZGV2KTsKIAorZW51bSB7CisJTURFVl9DTEFTU19JRF9W RklPID0gMSwKKwkvKiBOZXcgZW50cmllcyBtdXN0IGJlIGFkZGVkIGhlcmUgKi8KK307CisKICNl bmRpZiAvKiBNREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRh YmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IDU3MTRmZDM1YTgz Yy4uZjMyYzZlNDRmYjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJs ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTgyMSw0ICs4MjEs MTIgQEAgc3RydWN0IHdtaV9kZXZpY2VfaWQgewogCWNvbnN0IHZvaWQgKmNvbnRleHQ7CiB9Owog CisvKioKKyAqIHN0cnVjdCBtZGV2X2NsYXNzX2lkIC0gTURFViBkZXZpY2UgY2xhc3MgaWRlbnRp ZmllcgorICogQGlkOiBVc2VkIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgY2xhc3Mgb2YgZGV2aWNl LCBlLmcgdmZpby1tZGV2IGRldmljZS4KKyAqLworc3RydWN0IG1kZXZfY2xhc3NfaWQgeworCV9f dTE2IGlkOworfTsKKwogI2VuZGlmIC8qIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9IICovCmRpZmYg LS1naXQgYS9zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYyBiL3NhbXBsZXMvdmZpby1tZGV2L21i b2Nocy5jCmluZGV4IGFjNWM4YzE3YjFmZi4uMTE1YmM1MDc0NjU2IDEwMDY0NAotLS0gYS9zYW1w bGVzL3ZmaW8tbWRldi9tYm9jaHMuYworKysgYi9zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYwpA QCAtNTYxLDYgKzU2MSw3IEBAIHN0YXRpYyBpbnQgbWJvY2hzX2NyZWF0ZShzdHJ1Y3Qga29iamVj dCAqa29iaiwgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1ib2Noc19yZXNldChtZGV2KTsK IAogCW1ib2Noc191c2VkX21ieXRlcyArPSB0eXBlLT5tYnl0ZXM7CisJbWRldl9zZXRfY2xhc3Mo bWRldiwgTURFVl9DTEFTU19JRF9WRklPKTsKIAlyZXR1cm4gMDsKIAogZXJyX21lbToKZGlmZiAt LWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHku YwppbmRleCBjYzg2YmY2NTY2ZTQuLjY2NTYxNDU3NGQ1MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy92 ZmlvLW1kZXYvbWRweS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYwpAQCAtMjY5LDYg KzI2OSw3IEBAIHN0YXRpYyBpbnQgbWRweV9jcmVhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAltZHB5X3Jlc2V0KG1kZXYpOwogCiAJbWRweV9jb3Vu dCsrOworCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7CiAJcmV0dXJu IDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYyBiL3NhbXBsZXMv dmZpby1tZGV2L210dHkuYwppbmRleCBjZTg0YTMwMGE0ZGEuLjkwZGExMmZmN2ZkOSAxMDA2NDQK LS0tIGEvc2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L210 dHkuYwpAQCAtNzU1LDYgKzc1NSw3IEBAIHN0YXRpYyBpbnQgbXR0eV9jcmVhdGUoc3RydWN0IGtv YmplY3QgKmtvYmosIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAlsaXN0X2FkZCgmbWRldl9z dGF0ZS0+bmV4dCwgJm1kZXZfZGV2aWNlc19saXN0KTsKIAltdXRleF91bmxvY2soJm1kZXZfbGlz dF9sb2NrKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7CiAJ cmV0dXJuIDA7CiB9CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4 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 D6481FA3748 for ; Tue, 5 Nov 2019 09:34:36 +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 B5E74214D8 for ; Tue, 5 Nov 2019 09:34:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B5E74214D8 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 AEC286E965; Tue, 5 Nov 2019 09:34:35 +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 AF2266E964 for ; Tue, 5 Nov 2019 09:34:33 +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-426-1iW_xGK-NTulqHvSRxjzDg-1; Tue, 05 Nov 2019 04:34:29 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 503561800D4A; Tue, 5 Nov 2019 09:34:25 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id A2ED65C1D8; Tue, 5 Nov 2019 09:33:42 +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 V8 1/6] mdev: class id support Date: Tue, 5 Nov 2019 17:32:35 +0800 Message-Id: <20191105093240.5135-2-jasowang@redhat.com> In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: 1iW_xGK-NTulqHvSRxjzDg-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=1572946472; 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=GL0EV7S/CVbjypEmKRQzwBPJlNCKfeApryMypohNTFY=; b=Z7LJr10LI2LY1i9OhgQI3zhxx3FlneYIgthMljE9pOWWmzWiLCa2+2g773Ji4+Z4Tc+5G7 Rr5Gih1NyURBy7REfJt4UniU4cumry3tYT7sCc5CWyibglbEIIE24S+9G/scNFAhJZS/xY 4uM/E56WAPVCfcSVfDedN32cl023OA4= 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: 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, rob.miller@broadcom.com, 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, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191105093235.RGS9M5MCPsjuYLQVSDCC4lansLIN5hZvHPOeOtHvZ8s@z> TWRldiBidXMgb25seSBzdXBwb3J0cyB2ZmlvIGRyaXZlciByaWdodCBub3csIHNvIGl0IGRvZXNu J3QgaW1wbGVtZW50Cm1hdGNoIG1ldGhvZC4gQnV0IGluIHRoZSBmdXR1cmUsIHdlIG1heSBhZGQg ZHJpdmVycyBvdGhlciB0aGFuIHZmaW8sCnRoZSBmaXJzdCBkcml2ZXIgY291bGQgYmUgdmlydGlv LW1kZXYuIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBhZGQKZGV2aWNlIGNsYXNzIGlkIHN1cHBvcnQg aW4gYnVzIG1hdGNoIG1ldGhvZCB0byBwYWlyIHRoZSBtZGV2IGRldmljZQphbmQgbWRldiBkcml2 ZXIgY29ycmVjdGx5LgoKU28gdGhpcyBwYXRjaCBhZGRzIGlkX3RhYmxlIHRvIG1kZXZfZHJpdmVy IGFuZCBjbGFzc19pZCBmb3IgbWRldgpkZXZpY2Ugd2l0aCB0aGUgbWF0Y2ggbWV0aG9kIGZvciBt ZGV2IGJ1cy4KClJldmlld2VkLWJ5OiBQYXJhdiBQYW5kaXQgPHBhcmF2QG1lbGxhbm94LmNvbT4K U2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiAuLi4v ZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgICAgICAgfCAgNSArKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYyAgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJz L3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jICAgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL3Mz OTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL3ZmaW8v bWRldi9tZGV2X2NvcmUuYyAgICAgICAgICAgICAgICAgfCAxNyArKysrKysrKysrKysrCiBkcml2 ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCAgICAgICAgICAgICAg fCAgMSArCiBkcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYyAgICAgICAgICAgICAgICAgfCAg NiArKysrKwogaW5jbHVkZS9saW51eC9tZGV2LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDggKysrKysrCiBpbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oICAgICAgICAgICAgICAg fCAgOCArKysrKysKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAgICAgICAg ICB8ICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L21kcHkuYyAgICAgICAgICAgICAgICAgICAgICB8 ICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L210dHkuYyAgICAgICAgICAgICAgICAgICAgICB8ICAx ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0IGIvRG9jdW1lbnRh dGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdAppbmRleCAyNWViN2Q1Yjgz NGIuLjY3MDk0MTNiZWUyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3Zm aW8tbWVkaWF0ZWQtZGV2aWNlLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZp by1tZWRpYXRlZC1kZXZpY2UucnN0CkBAIC0xMDIsMTIgKzEwMiwxNCBAQCBzdHJ1Y3R1cmUgdG8g cmVwcmVzZW50IGEgbWVkaWF0ZWQgZGV2aWNlJ3MgZHJpdmVyOjoKICAgICAgICogQHByb2JlOiBj YWxsZWQgd2hlbiBuZXcgZGV2aWNlIGNyZWF0ZWQKICAgICAgICogQHJlbW92ZTogY2FsbGVkIHdo ZW4gZGV2aWNlIHJlbW92ZWQKICAgICAgICogQGRyaXZlcjogZGV2aWNlIGRyaXZlciBzdHJ1Y3R1 cmUKKyAgICAgICogQGlkX3RhYmxlOiB0aGUgaWRzIHNlcnZpY2VkIGJ5IHRoaXMgZHJpdmVyCiAg ICAgICAqLwogICAgICBzdHJ1Y3QgbWRldl9kcml2ZXIgewogCSAgICAgY29uc3QgY2hhciAqbmFt ZTsKIAkgICAgIGludCAgKCpwcm9iZSkgIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCSAgICAgdm9p ZCAoKnJlbW92ZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJICAgICBzdHJ1Y3QgZGV2aWNlX2Ry aXZlciAgICBkcml2ZXI7CisJICAgICBjb25zdCBzdHJ1Y3QgbWRldl9jbGFzc19pZCAqaWRfdGFi bGU7CiAgICAgIH07CiAKIEEgbWVkaWF0ZWQgYnVzIGRyaXZlciBmb3IgbWRldiBzaG91bGQgdXNl IHRoaXMgc3RydWN0dXJlIGluIHRoZSBmdW5jdGlvbiBjYWxscwpAQCAtMTcwLDYgKzE3Miw5IEBA IHRoYXQgYSBkcml2ZXIgc2hvdWxkIHVzZSB0byB1bnJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBt ZGV2IGNvcmUgZHJpdmVyOjoKIAogCWV4dGVybiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KTsKIAorSXQgaXMgYWxzbyByZXF1aXJlZCB0byBzcGVjaWZ5IHRo ZSBjbGFzc19pZCBpbiBjcmVhdGUoKSBjYWxsYmFjayB0aHJvdWdoOjoKKworCWludCBtZGV2X3Nl dF9jbGFzcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZCk7CiAKIE1lZGlhdGVkIERl dmljZSBNYW5hZ2VtZW50IEludGVyZmFjZSBUaHJvdWdoIHN5c2ZzCiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3Qu YwppbmRleCAzNDNkNzljMWNiN2UuLjY0MjBmMGRiZDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2 bWd0LmMKQEAgLTY3OCw2ICs2NzgsNyBAQCBzdGF0aWMgaW50IGludGVsX3ZncHVfY3JlYXRlKHN0 cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiAJCSAgICAgZGV2 X25hbWUobWRldl9kZXYobWRldikpKTsKIAlyZXQgPSAwOwogCisJbWRldl9zZXRfY2xhc3MobWRl diwgTURFVl9DTEFTU19JRF9WRklPKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vdmZp b19jY3dfb3BzLmMKaW5kZXggZjBkNzFhYjc3YzUwLi5jZjJjMDEzYWUzMmYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby92 ZmlvX2Njd19vcHMuYwpAQCAtMTI5LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19jY3dfbWRl dl9jcmVhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikK IAkJCSAgIHByaXZhdGUtPnNjaC0+c2NoaWQuc3NpZCwKIAkJCSAgIHByaXZhdGUtPnNjaC0+c2No aWQuc2NoX25vKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7 CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19h cF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA1YzBmNTNj NmRkZTcuLjA3YzMxMDcwYWZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92Zmlv X2FwX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzQz LDYgKzM0Myw3IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2NyZWF0ZShzdHJ1Y3Qga29iamVj dCAqa29iaiwgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCWxpc3RfYWRkKCZtYXRyaXhfbWRl di0+bm9kZSwgJm1hdHJpeF9kZXYtPm1kZXZfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZtYXRyaXhf ZGV2LT5sb2NrKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7 CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29y ZS5jIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKaW5kZXggYjU1OGQ0Y2ZkMDgyLi43 YmZhMmU0NmU4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCisr KyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCkBAIC00NSw2ICs0NSwxNyBAQCB2b2lk IG1kZXZfc2V0X2RydmRhdGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB2b2lkICpkYXRhKQog fQogRVhQT1JUX1NZTUJPTChtZGV2X3NldF9kcnZkYXRhKTsKIAorLyoKKyAqIFNwZWNpZnkgdGhl IGNsYXNzIGZvciB0aGUgbWRldiBkZXZpY2UsIHRoaXMgbXVzdCBiZSBjYWxsZWQgZHVyaW5nCisg KiBjcmVhdGUoKSBjYWxsYmFjay4KKyAqLwordm9pZCBtZGV2X3NldF9jbGFzcyhzdHJ1Y3QgbWRl dl9kZXZpY2UgKm1kZXYsIHUxNiBpZCkKK3sKKwlXQVJOX09OKG1kZXYtPmNsYXNzX2lkKTsKKwlt ZGV2LT5jbGFzc19pZCA9IGlkOworfQorRVhQT1JUX1NZTUJPTChtZGV2X3NldF9jbGFzcyk7CisK IHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIHsKIAly ZXR1cm4gJm1kZXYtPmRldjsKQEAgLTMyNCw2ICszMzUsMTIgQEAgaW50IG1kZXZfZGV2aWNlX2Ny ZWF0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlpZiAocmV0KQogCQlnb3RvIG9wc19jcmVhdGVf ZmFpbDsKIAorCWlmICghbWRldi0+Y2xhc3NfaWQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZGV2 X3dhcm4oZGV2LCAibWRldiB2ZW5kb3IgZHJpdmVyIGZhaWxlZCB0byBzcGVjaWZ5IGRldmljZSBj bGFzc1xuIik7CisJCWdvdG8gYWRkX2ZhaWw7CisJfQorCiAJcmV0ID0gZGV2aWNlX2FkZCgmbWRl di0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGFkZF9mYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVy LmMKaW5kZXggMGQzMjIzYWVlMjBiLi5lZDA2NDMzNjkzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dmZpby9tZGV2L21kZXZfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2 ZXIuYwpAQCAtNjksOCArNjksMzMgQEAgc3RhdGljIGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWRldl9tYXRjaChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJdW5zaWduZWQgaW50 IGk7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdG9fbWRldl9kZXZpY2UoZGV2KTsKKwlz dHJ1Y3QgbWRldl9kcml2ZXIgKm1kcnYgPSB0b19tZGV2X2RyaXZlcihkcnYpOworCWNvbnN0IHN0 cnVjdCBtZGV2X2NsYXNzX2lkICppZHMgPSBtZHJ2LT5pZF90YWJsZTsKKworCWlmICghaWRzKQor CQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGlkc1tpXS5pZDsgaSsrKQorCQlpZiAoaWRzW2ld LmlkID09IG1kZXYtPmNsYXNzX2lkKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbWRldl91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZl bnRfZW52ICplbnYpCit7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdG9fbWRldl9kZXZp Y2UoZGV2KTsKKworCXJldHVybiBhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1tZGV2OmMl MDJYIiwgbWRldi0+Y2xhc3NfaWQpOworfQorCiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlw ZSA9IHsKIAkubmFtZQkJPSAibWRldiIsCisJLm1hdGNoCQk9IG1kZXZfbWF0Y2gsCisJLnVldmVu dAkJPSBtZGV2X3VldmVudCwKIAkucHJvYmUJCT0gbWRldl9wcm9iZSwKIAkucmVtb3ZlCQk9IG1k ZXZfcmVtb3ZlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKaW5kZXggN2Q5MjI5NTBjYWFm Li5jNjVmNDM2YzE4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3 IEBAIHN0cnVjdCBtZGV2X2RldmljZSB7CiAJc3RydWN0IGtvYmplY3QgKnR5cGVfa29iajsKIAlz dHJ1Y3QgZGV2aWNlICppb21tdV9kZXZpY2U7CiAJYm9vbCBhY3RpdmU7CisJdTE2IGNsYXNzX2lk OwogfTsKIAogI2RlZmluZSB0b19tZGV2X2RldmljZShkZXYpCWNvbnRhaW5lcl9vZihkZXYsIHN0 cnVjdCBtZGV2X2RldmljZSwgZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21kZXYvdmZp b19tZGV2LmMgYi9kcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYwppbmRleCAzMDk2NGE0ZTBh MjguLjM4NDMxZTllZjdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2 LmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2LmMKQEAgLTEyMCwxMCArMTIwLDE2 IEBAIHN0YXRpYyB2b2lkIHZmaW9fbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogCXZm aW9fZGVsX2dyb3VwX2RldihkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfY2xh c3NfaWQgdmZpb19pZF90YWJsZVtdID0geworCXsgTURFVl9DTEFTU19JRF9WRklPIH0sCisJeyAw IH0sCit9OworCiBzdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fbWRldl9kcml2ZXIgPSB7 CiAJLm5hbWUJPSAidmZpb19tZGV2IiwKIAkucHJvYmUJPSB2ZmlvX21kZXZfcHJvYmUsCiAJLnJl bW92ZQk9IHZmaW9fbWRldl9yZW1vdmUsCisJLmlkX3RhYmxlID0gdmZpb19pZF90YWJsZSwKIH07 CiAKIHN0YXRpYyBpbnQgX19pbml0IHZmaW9fbWRldl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L21kZXYuaCBiL2luY2x1ZGUvbGludXgvbWRldi5oCmluZGV4IDBjZTMwY2E3 OGRiMC4uNzhiNjlkMDllYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAorKysg Yi9pbmNsdWRlL2xpbnV4L21kZXYuaApAQCAtMTE4LDYgKzExOCw3IEBAIHN0cnVjdCBtZGV2X3R5 cGVfYXR0cmlidXRlIG1kZXZfdHlwZV9hdHRyXyMjX25hbWUgPQkJXAogICogQHByb2JlOiBjYWxs ZWQgd2hlbiBuZXcgZGV2aWNlIGNyZWF0ZWQKICAqIEByZW1vdmU6IGNhbGxlZCB3aGVuIGRldmlj ZSByZW1vdmVkCiAgKiBAZHJpdmVyOiBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZQorICogQGlkX3Rh YmxlOiB0aGUgaWRzIHNlcnZpY2VkIGJ5IHRoaXMgZHJpdmVyCiAgKgogICoqLwogc3RydWN0IG1k ZXZfZHJpdmVyIHsKQEAgLTEyNSw2ICsxMjYsNyBAQCBzdHJ1Y3QgbWRldl9kcml2ZXIgewogCWlu dCAgKCpwcm9iZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qg ZGV2aWNlICpkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwljb25zdCBzdHJ1 Y3QgbWRldl9jbGFzc19pZCAqaWRfdGFibGU7CiB9OwogCiAjZGVmaW5lIHRvX21kZXZfZHJpdmVy KGRydikJY29udGFpbmVyX29mKGRydiwgc3RydWN0IG1kZXZfZHJpdmVyLCBkcml2ZXIpCkBAIC0x MzIsNiArMTM0LDcgQEAgc3RydWN0IG1kZXZfZHJpdmVyIHsKIHZvaWQgKm1kZXZfZ2V0X2RydmRh dGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIHZvaWQgbWRldl9zZXRfZHJ2ZGF0YShzdHJ1 Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHZvaWQgKmRhdGEpOwogY29uc3QgZ3VpZF90ICptZGV2X3V1 aWQoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKK3ZvaWQgbWRldl9zZXRfY2xhc3Moc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWQpOwogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1k ZXZfYnVzX3R5cGU7CiAKQEAgLTE0NSw0ICsxNDgsOSBAQCBzdHJ1Y3QgZGV2aWNlICptZGV2X3Bh cmVudF9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIHN0cnVjdCBkZXZpY2UgKm1kZXZf ZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CiBzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXZf ZnJvbV9kZXYoc3RydWN0IGRldmljZSAqZGV2KTsKIAorZW51bSB7CisJTURFVl9DTEFTU19JRF9W RklPID0gMSwKKwkvKiBOZXcgZW50cmllcyBtdXN0IGJlIGFkZGVkIGhlcmUgKi8KK307CisKICNl bmRpZiAvKiBNREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRh YmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IDU3MTRmZDM1YTgz Yy4uZjMyYzZlNDRmYjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJs ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTgyMSw0ICs4MjEs MTIgQEAgc3RydWN0IHdtaV9kZXZpY2VfaWQgewogCWNvbnN0IHZvaWQgKmNvbnRleHQ7CiB9Owog CisvKioKKyAqIHN0cnVjdCBtZGV2X2NsYXNzX2lkIC0gTURFViBkZXZpY2UgY2xhc3MgaWRlbnRp ZmllcgorICogQGlkOiBVc2VkIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgY2xhc3Mgb2YgZGV2aWNl LCBlLmcgdmZpby1tZGV2IGRldmljZS4KKyAqLworc3RydWN0IG1kZXZfY2xhc3NfaWQgeworCV9f dTE2IGlkOworfTsKKwogI2VuZGlmIC8qIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9IICovCmRpZmYg LS1naXQgYS9zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYyBiL3NhbXBsZXMvdmZpby1tZGV2L21i b2Nocy5jCmluZGV4IGFjNWM4YzE3YjFmZi4uMTE1YmM1MDc0NjU2IDEwMDY0NAotLS0gYS9zYW1w bGVzL3ZmaW8tbWRldi9tYm9jaHMuYworKysgYi9zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYwpA QCAtNTYxLDYgKzU2MSw3IEBAIHN0YXRpYyBpbnQgbWJvY2hzX2NyZWF0ZShzdHJ1Y3Qga29iamVj dCAqa29iaiwgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1ib2Noc19yZXNldChtZGV2KTsK IAogCW1ib2Noc191c2VkX21ieXRlcyArPSB0eXBlLT5tYnl0ZXM7CisJbWRldl9zZXRfY2xhc3Mo bWRldiwgTURFVl9DTEFTU19JRF9WRklPKTsKIAlyZXR1cm4gMDsKIAogZXJyX21lbToKZGlmZiAt LWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHku YwppbmRleCBjYzg2YmY2NTY2ZTQuLjY2NTYxNDU3NGQ1MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy92 ZmlvLW1kZXYvbWRweS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYwpAQCAtMjY5LDYg KzI2OSw3IEBAIHN0YXRpYyBpbnQgbWRweV9jcmVhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAltZHB5X3Jlc2V0KG1kZXYpOwogCiAJbWRweV9jb3Vu dCsrOworCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7CiAJcmV0dXJu IDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYyBiL3NhbXBsZXMv dmZpby1tZGV2L210dHkuYwppbmRleCBjZTg0YTMwMGE0ZGEuLjkwZGExMmZmN2ZkOSAxMDA2NDQK LS0tIGEvc2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L210 dHkuYwpAQCAtNzU1LDYgKzc1NSw3IEBAIHN0YXRpYyBpbnQgbXR0eV9jcmVhdGUoc3RydWN0IGtv YmplY3QgKmtvYmosIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAlsaXN0X2FkZCgmbWRldl9z dGF0ZS0+bmV4dCwgJm1kZXZfZGV2aWNlc19saXN0KTsKIAltdXRleF91bmxvY2soJm1kZXZfbGlz dF9sb2NrKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7CiAJ cmV0dXJuIDA7CiB9CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVs 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 340F5FA3747 for ; Tue, 5 Nov 2019 09:34:36 +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 14223214D8 for ; Tue, 5 Nov 2019 09:34:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 14223214D8 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 8FBB46E964; Tue, 5 Nov 2019 09:34:35 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by gabe.freedesktop.org (Postfix) with ESMTPS id AF0E56E962 for ; Tue, 5 Nov 2019 09:34:33 +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-426-1iW_xGK-NTulqHvSRxjzDg-1; Tue, 05 Nov 2019 04:34:29 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 503561800D4A; Tue, 5 Nov 2019 09:34:25 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id A2ED65C1D8; Tue, 5 Nov 2019 09:33:42 +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: Tue, 5 Nov 2019 17:32:35 +0800 Message-Id: <20191105093240.5135-2-jasowang@redhat.com> In-Reply-To: <20191105093240.5135-1-jasowang@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: 1iW_xGK-NTulqHvSRxjzDg-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=1572946472; 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=GL0EV7S/CVbjypEmKRQzwBPJlNCKfeApryMypohNTFY=; b=Z7LJr10LI2LY1i9OhgQI3zhxx3FlneYIgthMljE9pOWWmzWiLCa2+2g773Ji4+Z4Tc+5G7 Rr5Gih1NyURBy7REfJt4UniU4cumry3tYT7sCc5CWyibglbEIIE24S+9G/scNFAhJZS/xY 4uM/E56WAPVCfcSVfDedN32cl023OA4= Subject: [Intel-gfx] [PATCH V8 1/6] mdev: class id support 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: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191105093235.6b4ANuDcK9AnMSEPCnXwFbwwzvhrirkpa8hSZsVY1AE@z> TWRldiBidXMgb25seSBzdXBwb3J0cyB2ZmlvIGRyaXZlciByaWdodCBub3csIHNvIGl0IGRvZXNu J3QgaW1wbGVtZW50Cm1hdGNoIG1ldGhvZC4gQnV0IGluIHRoZSBmdXR1cmUsIHdlIG1heSBhZGQg ZHJpdmVycyBvdGhlciB0aGFuIHZmaW8sCnRoZSBmaXJzdCBkcml2ZXIgY291bGQgYmUgdmlydGlv LW1kZXYuIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBhZGQKZGV2aWNlIGNsYXNzIGlkIHN1cHBvcnQg aW4gYnVzIG1hdGNoIG1ldGhvZCB0byBwYWlyIHRoZSBtZGV2IGRldmljZQphbmQgbWRldiBkcml2 ZXIgY29ycmVjdGx5LgoKU28gdGhpcyBwYXRjaCBhZGRzIGlkX3RhYmxlIHRvIG1kZXZfZHJpdmVy IGFuZCBjbGFzc19pZCBmb3IgbWRldgpkZXZpY2Ugd2l0aCB0aGUgbWF0Y2ggbWV0aG9kIGZvciBt ZGV2IGJ1cy4KClJldmlld2VkLWJ5OiBQYXJhdiBQYW5kaXQgPHBhcmF2QG1lbGxhbm94LmNvbT4K U2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiAuLi4v ZHJpdmVyLWFwaS92ZmlvLW1lZGlhdGVkLWRldmljZS5yc3QgICAgICAgfCAgNSArKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYyAgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJz L3MzOTAvY2lvL3ZmaW9fY2N3X29wcy5jICAgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL3Mz OTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL3ZmaW8v bWRldi9tZGV2X2NvcmUuYyAgICAgICAgICAgICAgICAgfCAxNyArKysrKysrKysrKysrCiBkcml2 ZXJzL3ZmaW8vbWRldi9tZGV2X2RyaXZlci5jICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCAgICAgICAgICAgICAg fCAgMSArCiBkcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYyAgICAgICAgICAgICAgICAgfCAg NiArKysrKwogaW5jbHVkZS9saW51eC9tZGV2LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDggKysrKysrCiBpbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oICAgICAgICAgICAgICAg fCAgOCArKysrKysKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAgICAgICAg ICB8ICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L21kcHkuYyAgICAgICAgICAgICAgICAgICAgICB8 ICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L210dHkuYyAgICAgICAgICAgICAgICAgICAgICB8ICAx ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0IGIvRG9jdW1lbnRh dGlvbi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdAppbmRleCAyNWViN2Q1Yjgz NGIuLjY3MDk0MTNiZWUyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3Zm aW8tbWVkaWF0ZWQtZGV2aWNlLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmZp by1tZWRpYXRlZC1kZXZpY2UucnN0CkBAIC0xMDIsMTIgKzEwMiwxNCBAQCBzdHJ1Y3R1cmUgdG8g cmVwcmVzZW50IGEgbWVkaWF0ZWQgZGV2aWNlJ3MgZHJpdmVyOjoKICAgICAgICogQHByb2JlOiBj YWxsZWQgd2hlbiBuZXcgZGV2aWNlIGNyZWF0ZWQKICAgICAgICogQHJlbW92ZTogY2FsbGVkIHdo ZW4gZGV2aWNlIHJlbW92ZWQKICAgICAgICogQGRyaXZlcjogZGV2aWNlIGRyaXZlciBzdHJ1Y3R1 cmUKKyAgICAgICogQGlkX3RhYmxlOiB0aGUgaWRzIHNlcnZpY2VkIGJ5IHRoaXMgZHJpdmVyCiAg ICAgICAqLwogICAgICBzdHJ1Y3QgbWRldl9kcml2ZXIgewogCSAgICAgY29uc3QgY2hhciAqbmFt ZTsKIAkgICAgIGludCAgKCpwcm9iZSkgIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCSAgICAgdm9p ZCAoKnJlbW92ZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJICAgICBzdHJ1Y3QgZGV2aWNlX2Ry aXZlciAgICBkcml2ZXI7CisJICAgICBjb25zdCBzdHJ1Y3QgbWRldl9jbGFzc19pZCAqaWRfdGFi bGU7CiAgICAgIH07CiAKIEEgbWVkaWF0ZWQgYnVzIGRyaXZlciBmb3IgbWRldiBzaG91bGQgdXNl IHRoaXMgc3RydWN0dXJlIGluIHRoZSBmdW5jdGlvbiBjYWxscwpAQCAtMTcwLDYgKzE3Miw5IEBA IHRoYXQgYSBkcml2ZXIgc2hvdWxkIHVzZSB0byB1bnJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBt ZGV2IGNvcmUgZHJpdmVyOjoKIAogCWV4dGVybiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KTsKIAorSXQgaXMgYWxzbyByZXF1aXJlZCB0byBzcGVjaWZ5IHRo ZSBjbGFzc19pZCBpbiBjcmVhdGUoKSBjYWxsYmFjayB0aHJvdWdoOjoKKworCWludCBtZGV2X3Nl dF9jbGFzcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZCk7CiAKIE1lZGlhdGVkIERl dmljZSBNYW5hZ2VtZW50IEludGVyZmFjZSBUaHJvdWdoIHN5c2ZzCiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3Qu YwppbmRleCAzNDNkNzljMWNiN2UuLjY0MjBmMGRiZDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2t2bWd0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2 bWd0LmMKQEAgLTY3OCw2ICs2NzgsNyBAQCBzdGF0aWMgaW50IGludGVsX3ZncHVfY3JlYXRlKHN0 cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiAJCSAgICAgZGV2 X25hbWUobWRldl9kZXYobWRldikpKTsKIAlyZXQgPSAwOwogCisJbWRldl9zZXRfY2xhc3MobWRl diwgTURFVl9DTEFTU19JRF9WRklPKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vdmZp b19jY3dfb3BzLmMKaW5kZXggZjBkNzFhYjc3YzUwLi5jZjJjMDEzYWUzMmYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvczM5MC9jaW8vdmZpb19jY3dfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby92 ZmlvX2Njd19vcHMuYwpAQCAtMTI5LDYgKzEyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19jY3dfbWRl dl9jcmVhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikK IAkJCSAgIHByaXZhdGUtPnNjaC0+c2NoaWQuc3NpZCwKIAkJCSAgIHByaXZhdGUtPnNjaC0+c2No aWQuc2NoX25vKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7 CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19h cF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA1YzBmNTNj NmRkZTcuLjA3YzMxMDcwYWZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92Zmlv X2FwX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzQz LDYgKzM0Myw3IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2NyZWF0ZShzdHJ1Y3Qga29iamVj dCAqa29iaiwgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCWxpc3RfYWRkKCZtYXRyaXhfbWRl di0+bm9kZSwgJm1hdHJpeF9kZXYtPm1kZXZfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZtYXRyaXhf ZGV2LT5sb2NrKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7 CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29y ZS5jIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMKaW5kZXggYjU1OGQ0Y2ZkMDgyLi43 YmZhMmU0NmU4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCisr KyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCkBAIC00NSw2ICs0NSwxNyBAQCB2b2lk IG1kZXZfc2V0X2RydmRhdGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB2b2lkICpkYXRhKQog fQogRVhQT1JUX1NZTUJPTChtZGV2X3NldF9kcnZkYXRhKTsKIAorLyoKKyAqIFNwZWNpZnkgdGhl IGNsYXNzIGZvciB0aGUgbWRldiBkZXZpY2UsIHRoaXMgbXVzdCBiZSBjYWxsZWQgZHVyaW5nCisg KiBjcmVhdGUoKSBjYWxsYmFjay4KKyAqLwordm9pZCBtZGV2X3NldF9jbGFzcyhzdHJ1Y3QgbWRl dl9kZXZpY2UgKm1kZXYsIHUxNiBpZCkKK3sKKwlXQVJOX09OKG1kZXYtPmNsYXNzX2lkKTsKKwlt ZGV2LT5jbGFzc19pZCA9IGlkOworfQorRVhQT1JUX1NZTUJPTChtZGV2X3NldF9jbGFzcyk7CisK IHN0cnVjdCBkZXZpY2UgKm1kZXZfZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIHsKIAly ZXR1cm4gJm1kZXYtPmRldjsKQEAgLTMyNCw2ICszMzUsMTIgQEAgaW50IG1kZXZfZGV2aWNlX2Ny ZWF0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlpZiAocmV0KQogCQlnb3RvIG9wc19jcmVhdGVf ZmFpbDsKIAorCWlmICghbWRldi0+Y2xhc3NfaWQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZGV2 X3dhcm4oZGV2LCAibWRldiB2ZW5kb3IgZHJpdmVyIGZhaWxlZCB0byBzcGVjaWZ5IGRldmljZSBj bGFzc1xuIik7CisJCWdvdG8gYWRkX2ZhaWw7CisJfQorCiAJcmV0ID0gZGV2aWNlX2FkZCgmbWRl di0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGFkZF9mYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfZHJpdmVy LmMKaW5kZXggMGQzMjIzYWVlMjBiLi5lZDA2NDMzNjkzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dmZpby9tZGV2L21kZXZfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2 ZXIuYwpAQCAtNjksOCArNjksMzMgQEAgc3RhdGljIGludCBtZGV2X3JlbW92ZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWRldl9tYXRjaChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJdW5zaWduZWQgaW50 IGk7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdG9fbWRldl9kZXZpY2UoZGV2KTsKKwlz dHJ1Y3QgbWRldl9kcml2ZXIgKm1kcnYgPSB0b19tZGV2X2RyaXZlcihkcnYpOworCWNvbnN0IHN0 cnVjdCBtZGV2X2NsYXNzX2lkICppZHMgPSBtZHJ2LT5pZF90YWJsZTsKKworCWlmICghaWRzKQor CQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGlkc1tpXS5pZDsgaSsrKQorCQlpZiAoaWRzW2ld LmlkID09IG1kZXYtPmNsYXNzX2lkKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbWRldl91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZl bnRfZW52ICplbnYpCit7CisJc3RydWN0IG1kZXZfZGV2aWNlICptZGV2ID0gdG9fbWRldl9kZXZp Y2UoZGV2KTsKKworCXJldHVybiBhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1tZGV2OmMl MDJYIiwgbWRldi0+Y2xhc3NfaWQpOworfQorCiBzdHJ1Y3QgYnVzX3R5cGUgbWRldl9idXNfdHlw ZSA9IHsKIAkubmFtZQkJPSAibWRldiIsCisJLm1hdGNoCQk9IG1kZXZfbWF0Y2gsCisJLnVldmVu dAkJPSBtZGV2X3VldmVudCwKIAkucHJvYmUJCT0gbWRldl9wcm9iZSwKIAkucmVtb3ZlCQk9IG1k ZXZfcmVtb3ZlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oIGIvZHJpdmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmgKaW5kZXggN2Q5MjI5NTBjYWFm Li5jNjVmNDM2YzE4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0 ZS5oCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3 IEBAIHN0cnVjdCBtZGV2X2RldmljZSB7CiAJc3RydWN0IGtvYmplY3QgKnR5cGVfa29iajsKIAlz dHJ1Y3QgZGV2aWNlICppb21tdV9kZXZpY2U7CiAJYm9vbCBhY3RpdmU7CisJdTE2IGNsYXNzX2lk OwogfTsKIAogI2RlZmluZSB0b19tZGV2X2RldmljZShkZXYpCWNvbnRhaW5lcl9vZihkZXYsIHN0 cnVjdCBtZGV2X2RldmljZSwgZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL21kZXYvdmZp b19tZGV2LmMgYi9kcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYwppbmRleCAzMDk2NGE0ZTBh MjguLjM4NDMxZTllZjdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2 LmMKKysrIGIvZHJpdmVycy92ZmlvL21kZXYvdmZpb19tZGV2LmMKQEAgLTEyMCwxMCArMTIwLDE2 IEBAIHN0YXRpYyB2b2lkIHZmaW9fbWRldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogCXZm aW9fZGVsX2dyb3VwX2RldihkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1kZXZfY2xh c3NfaWQgdmZpb19pZF90YWJsZVtdID0geworCXsgTURFVl9DTEFTU19JRF9WRklPIH0sCisJeyAw IH0sCit9OworCiBzdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fbWRldl9kcml2ZXIgPSB7 CiAJLm5hbWUJPSAidmZpb19tZGV2IiwKIAkucHJvYmUJPSB2ZmlvX21kZXZfcHJvYmUsCiAJLnJl bW92ZQk9IHZmaW9fbWRldl9yZW1vdmUsCisJLmlkX3RhYmxlID0gdmZpb19pZF90YWJsZSwKIH07 CiAKIHN0YXRpYyBpbnQgX19pbml0IHZmaW9fbWRldl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L21kZXYuaCBiL2luY2x1ZGUvbGludXgvbWRldi5oCmluZGV4IDBjZTMwY2E3 OGRiMC4uNzhiNjlkMDllYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAorKysg Yi9pbmNsdWRlL2xpbnV4L21kZXYuaApAQCAtMTE4LDYgKzExOCw3IEBAIHN0cnVjdCBtZGV2X3R5 cGVfYXR0cmlidXRlIG1kZXZfdHlwZV9hdHRyXyMjX25hbWUgPQkJXAogICogQHByb2JlOiBjYWxs ZWQgd2hlbiBuZXcgZGV2aWNlIGNyZWF0ZWQKICAqIEByZW1vdmU6IGNhbGxlZCB3aGVuIGRldmlj ZSByZW1vdmVkCiAgKiBAZHJpdmVyOiBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZQorICogQGlkX3Rh YmxlOiB0aGUgaWRzIHNlcnZpY2VkIGJ5IHRoaXMgZHJpdmVyCiAgKgogICoqLwogc3RydWN0IG1k ZXZfZHJpdmVyIHsKQEAgLTEyNSw2ICsxMjYsNyBAQCBzdHJ1Y3QgbWRldl9kcml2ZXIgewogCWlu dCAgKCpwcm9iZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qg ZGV2aWNlICpkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwljb25zdCBzdHJ1 Y3QgbWRldl9jbGFzc19pZCAqaWRfdGFibGU7CiB9OwogCiAjZGVmaW5lIHRvX21kZXZfZHJpdmVy KGRydikJY29udGFpbmVyX29mKGRydiwgc3RydWN0IG1kZXZfZHJpdmVyLCBkcml2ZXIpCkBAIC0x MzIsNiArMTM0LDcgQEAgc3RydWN0IG1kZXZfZHJpdmVyIHsKIHZvaWQgKm1kZXZfZ2V0X2RydmRh dGEoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIHZvaWQgbWRldl9zZXRfZHJ2ZGF0YShzdHJ1 Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHZvaWQgKmRhdGEpOwogY29uc3QgZ3VpZF90ICptZGV2X3V1 aWQoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKK3ZvaWQgbWRldl9zZXRfY2xhc3Moc3RydWN0 IG1kZXZfZGV2aWNlICptZGV2LCB1MTYgaWQpOwogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1k ZXZfYnVzX3R5cGU7CiAKQEAgLTE0NSw0ICsxNDgsOSBAQCBzdHJ1Y3QgZGV2aWNlICptZGV2X3Bh cmVudF9kZXYoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIHN0cnVjdCBkZXZpY2UgKm1kZXZf ZGV2KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CiBzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXZf ZnJvbV9kZXYoc3RydWN0IGRldmljZSAqZGV2KTsKIAorZW51bSB7CisJTURFVl9DTEFTU19JRF9W RklPID0gMSwKKwkvKiBOZXcgZW50cmllcyBtdXN0IGJlIGFkZGVkIGhlcmUgKi8KK307CisKICNl bmRpZiAvKiBNREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRh YmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IDU3MTRmZDM1YTgz Yy4uZjMyYzZlNDRmYjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJs ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTgyMSw0ICs4MjEs MTIgQEAgc3RydWN0IHdtaV9kZXZpY2VfaWQgewogCWNvbnN0IHZvaWQgKmNvbnRleHQ7CiB9Owog CisvKioKKyAqIHN0cnVjdCBtZGV2X2NsYXNzX2lkIC0gTURFViBkZXZpY2UgY2xhc3MgaWRlbnRp ZmllcgorICogQGlkOiBVc2VkIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgY2xhc3Mgb2YgZGV2aWNl LCBlLmcgdmZpby1tZGV2IGRldmljZS4KKyAqLworc3RydWN0IG1kZXZfY2xhc3NfaWQgeworCV9f dTE2IGlkOworfTsKKwogI2VuZGlmIC8qIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9IICovCmRpZmYg LS1naXQgYS9zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYyBiL3NhbXBsZXMvdmZpby1tZGV2L21i b2Nocy5jCmluZGV4IGFjNWM4YzE3YjFmZi4uMTE1YmM1MDc0NjU2IDEwMDY0NAotLS0gYS9zYW1w bGVzL3ZmaW8tbWRldi9tYm9jaHMuYworKysgYi9zYW1wbGVzL3ZmaW8tbWRldi9tYm9jaHMuYwpA QCAtNTYxLDYgKzU2MSw3IEBAIHN0YXRpYyBpbnQgbWJvY2hzX2NyZWF0ZShzdHJ1Y3Qga29iamVj dCAqa29iaiwgc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1ib2Noc19yZXNldChtZGV2KTsK IAogCW1ib2Noc191c2VkX21ieXRlcyArPSB0eXBlLT5tYnl0ZXM7CisJbWRldl9zZXRfY2xhc3Mo bWRldiwgTURFVl9DTEFTU19JRF9WRklPKTsKIAlyZXR1cm4gMDsKIAogZXJyX21lbToKZGlmZiAt LWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHku YwppbmRleCBjYzg2YmY2NTY2ZTQuLjY2NTYxNDU3NGQ1MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy92 ZmlvLW1kZXYvbWRweS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L21kcHkuYwpAQCAtMjY5LDYg KzI2OSw3IEBAIHN0YXRpYyBpbnQgbWRweV9jcmVhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0 cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAltZHB5X3Jlc2V0KG1kZXYpOwogCiAJbWRweV9jb3Vu dCsrOworCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7CiAJcmV0dXJu IDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdmZpby1tZGV2L210dHkuYyBiL3NhbXBsZXMv dmZpby1tZGV2L210dHkuYwppbmRleCBjZTg0YTMwMGE0ZGEuLjkwZGExMmZmN2ZkOSAxMDA2NDQK LS0tIGEvc2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jCisrKyBiL3NhbXBsZXMvdmZpby1tZGV2L210 dHkuYwpAQCAtNzU1LDYgKzc1NSw3IEBAIHN0YXRpYyBpbnQgbXR0eV9jcmVhdGUoc3RydWN0IGtv YmplY3QgKmtvYmosIHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAlsaXN0X2FkZCgmbWRldl9z dGF0ZS0+bmV4dCwgJm1kZXZfZGV2aWNlc19saXN0KTsKIAltdXRleF91bmxvY2soJm1kZXZfbGlz dF9sb2NrKTsKIAorCW1kZXZfc2V0X2NsYXNzKG1kZXYsIE1ERVZfQ0xBU1NfSURfVkZJTyk7CiAJ cmV0dXJuIDA7CiB9CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4