From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH -next 02/15] drm/vmwgfx: Move buffer object related code to vmwgfx_bo.c Date: Tue, 3 Jul 2018 21:14:47 +0200 Message-ID: <20180703191500.2374-3-thellstrom@vmware.com> References: <20180703191500.2374-1-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM05-BY2-obe.outbound.protection.outlook.com (mail-eopbgr710084.outbound.protection.outlook.com [40.107.71.84]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6CB9A6E8B5 for ; Tue, 3 Jul 2018 19:16:30 +0000 (UTC) In-Reply-To: <20180703191500.2374-1-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Thomas Hellstrom , linux-graphics-maintainer@vmware.com List-Id: dri-devel@lists.freedesktop.org SXQgbWFrZXMgbW9yZSBzZW5zZSB0byBoYXZlIGFsbCB0aGUgYnVmZmVyIG9iamVjdCByZWxhdGVk IGNvZGUgaW4KYSBzaW5nbGUgZmlsZSByYXRoZXIgdGhhbiBzcGxpdHRpbmcgaXQgdXAgYmV0d2Vl biB0aGUgcmVzb3VyY2UgY29kZQphbmQgYnVmZmVyIG9iamVjdCBwaW5uaW5nIHV0aWxpdGllcy4K ClBsYWNlIGFsbCBidWZmZXIgb2JqZWN0IHJlbGF0ZWQgY29kZSBpbiB2bXdnZnhfYm8uYy4gRml4 IHVwIGhlYWRlcnMKYW5kIGV4cG9ydCByZXNvdXJjZSBmdW5jdGlvbmFsaXR5IHdoZW4gbmVlZGVk IGluIHRoZSBidWZmZXIgb2JqZWN0CmNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0 cm9tIDx0aGVsbHN0cm9tQHZtd2FyZS5jb20+ClJldmlld2VkLWJ5OiBCcmlhbiBQYXVsIDxicmlh bnBAdm13YXJlLmNvbT4KUmV2aWV3ZWQtYnk6IFNpbmNsYWlyIFllaCA8c3llaEB2bXdhcmUuY29t PgpSZXZpZXdlZC1ieTogRGVlcGFrIFJhd2F0IDxkcmF3YXRAdm13YXJlLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jICAgICAgICAgfCA4MTYgKysrKysrKysrKysr KysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb250ZXh0LmMgICAgfCAg IDQgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NvdGFibGUuYyAgICB8ICAgNCAr LQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggICAgICAgIHwgIDczICstCiBk cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jICAgICAgICAgfCAgIDIgKy0KIGRyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jICAgICAgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jICAgfCA2NDAgKy0tLS0tLS0tLS0tLS0tLQogZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2hhZGVyLmMgICAgIHwgICA0ICstCiBkcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X3R0bV9idWZmZXIuYyB8ICAgNCArLQogMTEgZmlsZXMgY2hhbmdl ZCwgODUxIGluc2VydGlvbnMoKyksIDcwOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfYm8uYwppbmRleCBmMjZmNjU4Y2NjZGIuLmQ5NTAyNDQ3OThmZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9iby5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgotICogQ29weXJpZ2h0IMKpIDIwMTEtMjAxNSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0Eu LCBVU0EKKyAqIENvcHlyaWdodCDCqSAyMDExLTIwMTggVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8s IENBLiwgVVNBCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CkBAIC0yOSw2ICsyOSw1MSBAQAogCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlICJ2 bXdnZnhfZHJ2LmgiCisjaW5jbHVkZSAiZHJtL3R0bS90dG1fb2JqZWN0LmgiCisKKworLyoqCisg KiBzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAtIFVzZXItc3BhY2UtdmlzaWJsZSBidWZm ZXIgb2JqZWN0CisgKgorICogQHByaW1lOiBUaGUgcHJpbWUgb2JqZWN0IHByb3ZpZGluZyB1c2Vy IHZpc2liaWxpdHkuCisgKiBAdmJvOiBUaGUgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0CisgKi8K K3N0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0IHsKKwlzdHJ1Y3QgdHRtX3ByaW1lX29iamVj dCBwcmltZTsKKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgdmJvOworfTsKKworCisvKioKKyAq IHZtd19idWZmZXJfb2JqZWN0IC0gQ29udmVydCBhIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCB0 byBhIHN0cnVjdAorICogdm13X2J1ZmZlcl9vYmplY3QuCisgKgorICogQGJvOiBQb2ludGVyIHRv IHRoZSBUVE0gYnVmZmVyIG9iamVjdC4KKyAqIFJldHVybjogUG9pbnRlciB0byB0aGUgc3RydWN0 IHZtd19idWZmZXJfb2JqZWN0IGVtYmVkZGluZyB0aGUKKyAqIFRUTSBidWZmZXIgb2JqZWN0Lgor ICovCitzdGF0aWMgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICoKK3Ztd19idWZmZXJfb2JqZWN0 KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihi bywgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0LCBiYXNlKTsKK30KKworCisvKioKKyAqIHZtd191 c2VyX2J1ZmZlcl9vYmplY3QgLSBDb252ZXJ0IGEgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IHRv IGEgc3RydWN0CisgKiB2bXdfdXNlcl9idWZmZXJfb2JqZWN0LgorICoKKyAqIEBibzogUG9pbnRl ciB0byB0aGUgVFRNIGJ1ZmZlciBvYmplY3QuCisgKiBSZXR1cm46IFBvaW50ZXIgdG8gdGhlIHN0 cnVjdCB2bXdfYnVmZmVyX29iamVjdCBlbWJlZGRpbmcgdGhlIFRUTSBidWZmZXIKKyAqIG9iamVj dC4KKyAqLworc3RhdGljIHN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICoKK3Ztd191c2Vy X2J1ZmZlcl9vYmplY3Qoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3Qg dm13X2J1ZmZlcl9vYmplY3QgKnZtd19ibyA9IHZtd19idWZmZXJfb2JqZWN0KGJvKTsKKworCXJl dHVybiBjb250YWluZXJfb2Yodm13X2JvLCBzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCwg dmJvKTsKK30KIAogCiAvKioKQEAgLTM4LDkgKzgzLDggQEAKICAqIEBidWY6ICBETUEgYnVmZmVy IHRvIG1vdmUuCiAgKiBAcGxhY2VtZW50OiAgVGhlIHBsYWNlbWVudCB0byBwaW4gaXQuCiAgKiBA aW50ZXJydXB0aWJsZTogIFVzZSBpbnRlcnJ1cHRpYmxlIHdhaXQuCi0gKgotICogUmV0dXJucwot ICogIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KKyAqIFJldHVybjog WmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIEluIHBhcnRp Y3VsYXIKKyAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbAogICovCiBp bnQgdm13X2JvX3Bpbl9pbl9wbGFjZW1lbnQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwK IAkJCSAgICBzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKmJ1ZiwKQEAgLTc4LDYgKzEyMiw3IEBA IGludCB2bXdfYm9fcGluX2luX3BsYWNlbWVudChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LAogCXJldHVybiByZXQ7CiB9CiAKKwogLyoqCiAgKiB2bXdfYm9fcGluX2luX3ZyYW1fb3JfZ21y IC0gTW92ZSBhIGJ1ZmZlciB0byB2cmFtIG9yIGdtci4KICAqCkBAIC04OCw5ICsxMzMsOCBAQCBp bnQgdm13X2JvX3Bpbl9pbl9wbGFjZW1lbnQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwK ICAqIEBidWY6ICBETUEgYnVmZmVyIHRvIG1vdmUuCiAgKiBAcGluOiAgUGluIGJ1ZmZlciBpZiB0 cnVlLgogICogQGludGVycnVwdGlibGU6ICBVc2UgaW50ZXJydXB0aWJsZSB3YWl0LgotICoKLSAq IFJldHVybnMKLSAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KKyAq IFJldHVybjogWmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu IEluIHBhcnRpY3VsYXIKKyAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25h bAogICovCiBpbnQgdm13X2JvX3Bpbl9pbl92cmFtX29yX2dtcihzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAogCQkJICAgICAgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICpidWYsCkBAIC0x MzMsNiArMTc3LDcgQEAgaW50IHZtd19ib19waW5faW5fdnJhbV9vcl9nbXIoc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qKgogICogdm13X2JvX3Bp bl9pbl92cmFtIC0gTW92ZSBhIGJ1ZmZlciB0byB2cmFtLgogICoKQEAgLTE0Miw5ICsxODcsOCBA QCBpbnQgdm13X2JvX3Bpbl9pbl92cmFtX29yX2dtcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2LAogICogQGRldl9wcml2OiAgRHJpdmVyIHByaXZhdGUuCiAgKiBAYnVmOiAgRE1BIGJ1ZmZl ciB0byBtb3ZlLgogICogQGludGVycnVwdGlibGU6ICBVc2UgaW50ZXJydXB0aWJsZSB3YWl0Lgot ICoKLSAqIFJldHVybnMKLSAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25h bC4KKyAqIFJldHVybjogWmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuIEluIHBhcnRpY3VsYXIKKyAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBh IHNpZ25hbAogICovCiBpbnQgdm13X2JvX3Bpbl9pbl92cmFtKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCSAgICAgICBzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKmJ1ZiwKQEAgLTE1 NCw2ICsxOTgsNyBAQCBpbnQgdm13X2JvX3Bpbl9pbl92cmFtKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCQkJICAgICAgIGludGVycnVwdGlibGUpOwogfQogCisKIC8qKgogICogdm13 X2JvX3Bpbl9pbl9zdGFydF9vZl92cmFtIC0gTW92ZSBhIGJ1ZmZlciB0byBzdGFydCBvZiB2cmFt LgogICoKQEAgLTE2Myw5ICsyMDgsOCBAQCBpbnQgdm13X2JvX3Bpbl9pbl92cmFtKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAgKiBAZGV2X3ByaXY6ICBEcml2ZXIgcHJpdmF0ZS4KICAq IEBidWY6ICBETUEgYnVmZmVyIHRvIHBpbi4KICAqIEBpbnRlcnJ1cHRpYmxlOiAgVXNlIGludGVy cnVwdGlibGUgd2FpdC4KLSAqCi0gKiBSZXR1cm5zCi0gKiAtRVJFU1RBUlRTWVMgaWYgaW50ZXJy dXB0ZWQgYnkgYSBzaWduYWwuCisgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLiBJbiBwYXJ0aWN1bGFyCisgKiAtRVJFU1RBUlRTWVMgaWYg aW50ZXJydXB0ZWQgYnkgYSBzaWduYWwKICAqLwogaW50IHZtd19ib19waW5faW5fc3RhcnRfb2Zf dnJhbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCXN0cnVjdCB2bXdfYnVmZmVy X29iamVjdCAqYnVmLApAQCAtMjI1LDYgKzI2OSw3IEBAIGludCB2bXdfYm9fcGluX2luX3N0YXJ0 X29mX3ZyYW0oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gcmV0OwogfQog CisKIC8qKgogICogdm13X2JvX3VucGluIC0gVW5waW4gdGhlIGJ1ZmZlciBnaXZlbiBidWZmZXIs IGRvZXMgbm90IG1vdmUgdGhlIGJ1ZmZlci4KICAqCkBAIC0yMzMsOSArMjc4LDggQEAgaW50IHZt d19ib19waW5faW5fc3RhcnRfb2ZfdnJhbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAog ICogQGRldl9wcml2OiAgRHJpdmVyIHByaXZhdGUuCiAgKiBAYnVmOiAgRE1BIGJ1ZmZlciB0byB1 bnBpbi4KICAqIEBpbnRlcnJ1cHRpYmxlOiAgVXNlIGludGVycnVwdGlibGUgd2FpdC4KLSAqCi0g KiBSZXR1cm5zCi0gKiAtRVJFU1RBUlRTWVMgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCisg KiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl LiBJbiBwYXJ0aWN1bGFyCisgKiAtRVJFU1RBUlRTWVMgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWdu YWwKICAqLwogaW50IHZtd19ib191bnBpbihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAog CQkgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICpidWYsCkBAIC0zMjUsMjUgKzM2OSw4IEBAIHZv aWQgdm13X2JvX3Bpbl9yZXNlcnZlZChzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibywgYm9v bCBwaW4pCiB9CiAKIAotLyoKLSAqIHZtd19idWZmZXJfb2JqZWN0X3VubWFwIC0gVGVhciBkb3du IGEgY2FjaGVkIGJ1ZmZlciBvYmplY3QgbWFwLgotICoKLSAqIEB2Ym86IFRoZSBidWZmZXIgb2Jq ZWN0IHdob3NlIG1hcCB3ZSBhcmUgdGVhcmluZyBkb3duLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g dGVhcnMgZG93biBhIGNhY2hlZCBtYXAgc2V0IHVwIHVzaW5nCi0gKiB2bXdfYnVmZmVyX29iamVj dF9tYXBfYW5kX2NhY2hlKCkuCi0gKi8KLXZvaWQgdm13X2J1ZmZlcl9vYmplY3RfdW5tYXAoc3Ry dWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pCi17Ci0JaWYgKHZiby0+bWFwLmJvID09IE5VTEwp Ci0JCXJldHVybjsKLQotCXR0bV9ib19rdW5tYXAoJnZiby0+bWFwKTsKLX0KLQotCi0vKgotICog dm13X2J1ZmZlcl9vYmplY3RfbWFwX2FuZF9jYWNoZSAtIE1hcCBhIGJ1ZmZlciBvYmplY3QgYW5k IGNhY2hlIHRoZSBtYXAKKy8qKgorICogdm13X2JvX21hcF9hbmRfY2FjaGUgLSBNYXAgYSBidWZm ZXIgb2JqZWN0IGFuZCBjYWNoZSB0aGUgbWFwCiAgKgogICogQHZibzogVGhlIGJ1ZmZlciBvYmpl Y3QgdG8gbWFwCiAgKiBSZXR1cm46IEEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvciBOVUxMIGlm IG1hcHBpbmcgZmFpbGVkLgpAQCAtMzU3LDcgKzM4NCw3IEBAIHZvaWQgdm13X2J1ZmZlcl9vYmpl Y3RfdW5tYXAoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pCiAgKiAzKSBCdWZmZXIgb2Jq ZWN0IGRlc3RydWN0aW9uCiAgKgogICovCi12b2lkICp2bXdfYnVmZmVyX29iamVjdF9tYXBfYW5k X2NhY2hlKHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvKQordm9pZCAqdm13X2JvX21hcF9h bmRfY2FjaGUoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pCiB7CiAJc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0ICpibyA9ICZ2Ym8tPmJhc2U7CiAJYm9vbCBub3RfdXNlZDsKQEAgLTM3NCwz ICs0MDEsNzIwIEBAIHZvaWQgKnZtd19idWZmZXJfb2JqZWN0X21hcF9hbmRfY2FjaGUoc3RydWN0 IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pCiAKIAlyZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwo JnZiby0+bWFwLCAmbm90X3VzZWQpOwogfQorCisKKy8qKgorICogdm13X2JvX3VubWFwIC0gVGVh ciBkb3duIGEgY2FjaGVkIGJ1ZmZlciBvYmplY3QgbWFwLgorICoKKyAqIEB2Ym86IFRoZSBidWZm ZXIgb2JqZWN0IHdob3NlIG1hcCB3ZSBhcmUgdGVhcmluZyBkb3duLgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gdGVhcnMgZG93biBhIGNhY2hlZCBtYXAgc2V0IHVwIHVzaW5nCisgKiB2bXdfYnVmZmVy X29iamVjdF9tYXBfYW5kX2NhY2hlKCkuCisgKi8KK3ZvaWQgdm13X2JvX3VubWFwKHN0cnVjdCB2 bXdfYnVmZmVyX29iamVjdCAqdmJvKQoreworCWlmICh2Ym8tPm1hcC5ibyA9PSBOVUxMKQorCQly ZXR1cm47CisKKwl0dG1fYm9fa3VubWFwKCZ2Ym8tPm1hcCk7Cit9CisKKworLyoqCisgKiB2bXdf Ym9fYWNjX3NpemUgLSBDYWxjdWxhdGUgdGhlIHBpbm5lZCBtZW1vcnkgdXNhZ2Ugb2YgYnVmZmVy cworICoKKyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIHN0cnVjdCB2bXdfcHJpdmF0ZSBpZGVu dGlmeWluZyB0aGUgZGV2aWNlLgorICogQHNpemU6IFRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUu CisgKiBAdXNlcjogV2hldGhlciB0aGlzIGlzIGFuIG9yZGluYXJ5IGRtYSBidWZmZXIgb3IgYSB1 c2VyIGRtYSBidWZmZXIuCisgKi8KK3N0YXRpYyBzaXplX3Qgdm13X2JvX2FjY19zaXplKHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHNpemVfdCBzaXplLAorCQkJICAgICAgYm9vbCB1c2Vy KQoreworCXN0YXRpYyBzaXplX3Qgc3RydWN0X3NpemUsIHVzZXJfc3RydWN0X3NpemU7CisJc2l6 ZV90IG51bV9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVDsKKwlzaXplX3Qg cGFnZV9hcnJheV9zaXplID0gdHRtX3JvdW5kX3BvdChudW1fcGFnZXMgKiBzaXplb2Yodm9pZCAq KSk7CisKKwlpZiAodW5saWtlbHkoc3RydWN0X3NpemUgPT0gMCkpIHsKKwkJc2l6ZV90IGJhY2tl bmRfc2l6ZSA9IHR0bV9yb3VuZF9wb3Qodm13X3R0X3NpemUpOworCisJCXN0cnVjdF9zaXplID0g YmFja2VuZF9zaXplICsKKwkJCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfYnVmZmVy X29iamVjdCkpOworCQl1c2VyX3N0cnVjdF9zaXplID0gYmFja2VuZF9zaXplICsKKwkJCXR0bV9y b3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0KSk7CisJfQorCisJ aWYgKGRldl9wcml2LT5tYXBfbW9kZSA9PSB2bXdfZG1hX2FsbG9jX2NvaGVyZW50KQorCQlwYWdl X2FycmF5X3NpemUgKz0KKwkJCXR0bV9yb3VuZF9wb3QobnVtX3BhZ2VzICogc2l6ZW9mKGRtYV9h ZGRyX3QpKTsKKworCXJldHVybiAoKHVzZXIpID8gdXNlcl9zdHJ1Y3Rfc2l6ZSA6IHN0cnVjdF9z aXplKSArCisJCXBhZ2VfYXJyYXlfc2l6ZTsKK30KKworCisvKioKKyAqIHZtd19ib19ib19mcmVl IC0gdm13IGJ1ZmZlciBvYmplY3QgZGVzdHJ1Y3RvcgorICoKKyAqIEBibzogUG9pbnRlciB0byB0 aGUgZW1iZWRkZWQgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0CisgKi8KK3ZvaWQgdm13X2JvX2Jv X2ZyZWUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3Qgdm13X2J1ZmZl cl9vYmplY3QgKnZtd19ibyA9IHZtd19idWZmZXJfb2JqZWN0KGJvKTsKKworCXZtd19ib191bm1h cCh2bXdfYm8pOworCWtmcmVlKHZtd19ibyk7Cit9CisKKworLyoqCisgKiB2bXdfdXNlcl9ib19k ZXN0cm95IC0gdm13IGJ1ZmZlciBvYmplY3QgZGVzdHJ1Y3RvcgorICoKKyAqIEBibzogUG9pbnRl ciB0byB0aGUgZW1iZWRkZWQgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0CisgKi8KK3N0YXRpYyB2 b2lkIHZtd191c2VyX2JvX2Rlc3Ryb3koc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sK KwlzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAqdm13X3VzZXJfYm8gPSB2bXdfdXNlcl9i dWZmZXJfb2JqZWN0KGJvKTsKKworCXZtd19ib191bm1hcCgmdm13X3VzZXJfYm8tPnZibyk7CisJ dHRtX3ByaW1lX29iamVjdF9rZnJlZSh2bXdfdXNlcl9ibywgcHJpbWUpOworfQorCisKKy8qKgor ICogdm13X2JvX2luaXQgLSBJbml0aWFsaXplIGEgdm13IGJ1ZmZlciBvYmplY3QKKyAqCisgKiBA ZGV2X3ByaXY6IFBvaW50ZXIgdG8gdGhlIGRldmljZSBwcml2YXRlIHN0cnVjdAorICogQHZtd19i bzogUG9pbnRlciB0byB0aGUgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0IHRvIGluaXRpYWxpemUu CisgKiBAc2l6ZTogQnVmZmVyIG9iamVjdCBzaXplIGluIGJ5dGVzLgorICogQHBsYWNlbWVudDog SW5pdGlhbCBwbGFjZW1lbnQuCisgKiBAaW50ZXJydXB0aWJsZTogV2hldGhlciB3YWl0cyBzaG91 bGQgYmUgcGVyZm9ybWVkIGludGVycnVwdGlibGUuCisgKiBAYm9fZnJlZTogVGhlIGJ1ZmZlciBv YmplY3QgZGVzdHJ1Y3Rvci4KKyAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBlcnJvci4KKyAqCisgKiBOb3RlIHRoYXQgb24gZXJyb3IsIHRoZSBjb2Rl IHdpbGwgZnJlZSB0aGUgYnVmZmVyIG9iamVjdC4KKyAqLworaW50IHZtd19ib19pbml0KHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdm13 X2JvLAorCQlzaXplX3Qgc2l6ZSwgc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCwKKwkJ Ym9vbCBpbnRlcnJ1cHRpYmxlLAorCQl2b2lkICgqYm9fZnJlZSkoc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibykpCit7CisJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSAmZGV2X3ByaXYt PmJkZXY7CisJc2l6ZV90IGFjY19zaXplOworCWludCByZXQ7CisJYm9vbCB1c2VyID0gKGJvX2Zy ZWUgPT0gJnZtd191c2VyX2JvX2Rlc3Ryb3kpOworCisJV0FSTl9PTl9PTkNFKCFib19mcmVlICYm ICghdXNlciAmJiAoYm9fZnJlZSAhPSB2bXdfYm9fYm9fZnJlZSkpKTsKKworCWFjY19zaXplID0g dm13X2JvX2FjY19zaXplKGRldl9wcml2LCBzaXplLCB1c2VyKTsKKwltZW1zZXQodm13X2JvLCAw LCBzaXplb2YoKnZtd19ibykpOworCisJSU5JVF9MSVNUX0hFQUQoJnZtd19iby0+cmVzX2xpc3Qp OworCisJcmV0ID0gdHRtX2JvX2luaXQoYmRldiwgJnZtd19iby0+YmFzZSwgc2l6ZSwKKwkJCSAg dHRtX2JvX3R5cGVfZGV2aWNlLCBwbGFjZW1lbnQsCisJCQkgIDAsIGludGVycnVwdGlibGUsIGFj Y19zaXplLAorCQkJICBOVUxMLCBOVUxMLCBib19mcmVlKTsKKwlyZXR1cm4gcmV0OworfQorCisK Ky8qKgorICogdm13X3VzZXJfYm9fcmVsZWFzZSAtIFRUTSByZWZlcmVuY2UgYmFzZSBvYmplY3Qg cmVsZWFzZSBjYWxsYmFjayBmb3IKKyAqIHZtdyB1c2VyIGJ1ZmZlciBvYmplY3RzCisgKgorICog QHBfYmFzZTogVGhlIFRUTSBiYXNlIG9iamVjdCBwb2ludGVyIGFib3V0IHRvIGJlIHVucmVmZXJl bmNlZC4KKyAqCisgKiBDbGVhcnMgdGhlIFRUTSBiYXNlIG9iamVjdCBwb2ludGVyIGFuZCBkcm9w cyB0aGUgcmVmZXJlbmNlIHRoZQorICogYmFzZSBvYmplY3QgaGFzIG9uIHRoZSB1bmRlcmx5aW5n IHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdC4KKyAqLworc3RhdGljIHZvaWQgdm13X3VzZXJfYm9f cmVsZWFzZShzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICoqcF9iYXNlKQoreworCXN0cnVjdCB2bXdf dXNlcl9idWZmZXJfb2JqZWN0ICp2bXdfdXNlcl9ibzsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0 ICpiYXNlID0gKnBfYmFzZTsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOworCisJKnBf YmFzZSA9IE5VTEw7CisKKwlpZiAodW5saWtlbHkoYmFzZSA9PSBOVUxMKSkKKwkJcmV0dXJuOwor CisJdm13X3VzZXJfYm8gPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IHZtd191c2VyX2J1ZmZl cl9vYmplY3QsCisJCQkJICAgcHJpbWUuYmFzZSk7CisJYm8gPSAmdm13X3VzZXJfYm8tPnZiby5i YXNlOworCXR0bV9ib191bnJlZigmYm8pOworfQorCisKKy8qKgorICogdm13X3VzZXJfYm9fcmVm X29iai1yZWxlYXNlIC0gVFRNIHN5bmNjcHUgcmVmZXJlbmNlIG9iamVjdCByZWxlYXNlIGNhbGxi YWNrCisgKiBmb3Igdm13IHVzZXIgYnVmZmVyIG9iamVjdHMKKyAqCisgKiBAYmFzZTogUG9pbnRl ciB0byB0aGUgVFRNIGJhc2Ugb2JqZWN0CisgKiBAcmVmX3R5cGU6IFJlZmVyZW5jZSB0eXBlIG9m IHRoZSByZWZlcmVuY2UgcmVhY2hpbmcgemVyby4KKyAqCisgKiBDYWxsZWQgd2hlbiB1c2VyLXNw YWNlIGRyb3BzIGl0cyBsYXN0IHN5bmNjcHUgcmVmZXJlbmNlIG9uIHRoZSBidWZmZXIKKyAqIG9i amVjdCwgRWl0aGVyIGV4cGxpY2l0bHkgb3IgYXMgcGFydCBvZiBhIGNsZWFudXAgZmlsZSBjbG9z ZS4KKyAqLworc3RhdGljIHZvaWQgdm13X3VzZXJfYm9fcmVmX29ial9yZWxlYXNlKHN0cnVjdCB0 dG1fYmFzZV9vYmplY3QgKmJhc2UsCisJCQkJCWVudW0gdHRtX3JlZl90eXBlIHJlZl90eXBlKQor eworCXN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICp1c2VyX2JvOworCisJdXNlcl9ibyA9 IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCwgcHJpbWUu YmFzZSk7CisKKwlzd2l0Y2ggKHJlZl90eXBlKSB7CisJY2FzZSBUVE1fUkVGX1NZTkNDUFVfV1JJ VEU6CisJCXR0bV9ib19zeW5jY3B1X3dyaXRlX3JlbGVhc2UoJnVzZXJfYm8tPnZiby5iYXNlKTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTkNFKHRydWUsICJVbmRlZmluZWQgYnVmZmVy IG9iamVjdCByZWZlcmVuY2UgcmVsZWFzZS5cbiIpOworCX0KK30KKworCisvKioKKyAqIHZtd191 c2VyX2JvX2FsbG9jIC0gQWxsb2NhdGUgYSB1c2VyIGJ1ZmZlciBvYmplY3QKKyAqCisgKiBAZGV2 X3ByaXY6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIHByaXZhdGUuCisgKiBAdGZpbGU6IFBv aW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX29iamVjdF9maWxlIG9uIHdoaWNoIHRvIHJlZ2lzdGVyIHRo ZSB1c2VyCisgKiBvYmplY3QuCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgYnVmZmVyIG9iamVjdC4K KyAqIEBzaGFyZWFibGU6IEJvb2xlYW4gd2hldGhlciB0aGUgYnVmZmVyIGlzIHNoYXJlYWJsZSB3 aXRoIG90aGVyIG9wZW4gZmlsZXMuCisgKiBAaGFuZGxlOiBQb2ludGVyIHRvIHdoZXJlIHRoZSBo YW5kbGUgdmFsdWUgc2hvdWxkIGJlIGFzc2lnbmVkLgorICogQHBfdmJvOiBQb2ludGVyIHRvIHdo ZXJlIHRoZSByZWZjb3VudGVkIHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCBwb2ludGVyCisgKiBz aG91bGQgYmUgYXNzaWduZWQuCisgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBlcnJvci4KKyAqLworaW50IHZtd191c2VyX2JvX2FsbG9jKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRm aWxlLAorCQkgICAgICB1aW50MzJfdCBzaXplLAorCQkgICAgICBib29sIHNoYXJlYWJsZSwKKwkJ ICAgICAgdWludDMyX3QgKmhhbmRsZSwKKwkJICAgICAgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0 ICoqcF92Ym8sCisJCSAgICAgIHN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKipwX2Jhc2UpCit7CisJ c3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmplY3QgKnVzZXJfYm87CisJc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0ICp0bXA7CisJaW50IHJldDsKKworCXVzZXJfYm8gPSBremFsbG9jKHNpemVvZigq dXNlcl9ibyksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghdXNlcl9ibykpIHsKKwkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIuXG4iKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJcmV0ID0gdm13X2JvX2luaXQoZGV2X3ByaXYsICZ1c2VyX2JvLT52Ym8sIHNp emUsCisJCQkgIChkZXZfcHJpdi0+aGFzX21vYikgPworCQkJICAmdm13X3N5c19wbGFjZW1lbnQg OgorCQkJICAmdm13X3ZyYW1fc3lzX3BsYWNlbWVudCwgdHJ1ZSwKKwkJCSAgJnZtd191c2VyX2Jv X2Rlc3Ryb3kpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwl0 bXAgPSB0dG1fYm9fcmVmZXJlbmNlKCZ1c2VyX2JvLT52Ym8uYmFzZSk7CisJcmV0ID0gdHRtX3By aW1lX29iamVjdF9pbml0KHRmaWxlLAorCQkJCSAgICBzaXplLAorCQkJCSAgICAmdXNlcl9iby0+ cHJpbWUsCisJCQkJICAgIHNoYXJlYWJsZSwKKwkJCQkgICAgdHRtX2J1ZmZlcl90eXBlLAorCQkJ CSAgICAmdm13X3VzZXJfYm9fcmVsZWFzZSwKKwkJCQkgICAgJnZtd191c2VyX2JvX3JlZl9vYmpf cmVsZWFzZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQl0dG1fYm9fdW5yZWYoJnRt cCk7CisJCWdvdG8gb3V0X25vX2Jhc2Vfb2JqZWN0OworCX0KKworCSpwX3ZibyA9ICZ1c2VyX2Jv LT52Ym87CisJaWYgKHBfYmFzZSkgeworCQkqcF9iYXNlID0gJnVzZXJfYm8tPnByaW1lLmJhc2U7 CisJCWtyZWZfZ2V0KCYoKnBfYmFzZSktPnJlZmNvdW50KTsKKwl9CisJKmhhbmRsZSA9IHVzZXJf Ym8tPnByaW1lLmJhc2UuaGFzaC5rZXk7CisKK291dF9ub19iYXNlX29iamVjdDoKKwlyZXR1cm4g cmV0OworfQorCisKKy8qKgorICogdm13X3VzZXJfYm9fdmVyaWZ5X2FjY2VzcyAtIHZlcmlmeSBh Y2Nlc3MgcGVybWlzc2lvbnMgb24gdGhpcworICogYnVmZmVyIG9iamVjdC4KKyAqCisgKiBAYm86 IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvYmplY3QgYmVpbmcgYWNjZXNzZWQKKyAqIEB0ZmlsZTog SWRlbnRpZnlpbmcgdGhlIGNhbGxlci4KKyAqLworaW50IHZtd191c2VyX2JvX3ZlcmlmeV9hY2Nl c3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCSAgICAgIHN0cnVjdCB0dG1fb2Jq ZWN0X2ZpbGUgKnRmaWxlKQoreworCXN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICp2bXdf dXNlcl9ibzsKKworCWlmICh1bmxpa2VseShiby0+ZGVzdHJveSAhPSB2bXdfdXNlcl9ib19kZXN0 cm95KSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXZtd191c2VyX2JvID0gdm13X3VzZXJfYnVmZmVy X29iamVjdChibyk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBjYWxsZXIgaGFzIG9wZW5lZCB0aGUg b2JqZWN0LiAqLworCWlmIChsaWtlbHkodHRtX3JlZl9vYmplY3RfZXhpc3RzKHRmaWxlLCAmdm13 X3VzZXJfYm8tPnByaW1lLmJhc2UpKSkKKwkJcmV0dXJuIDA7CisKKwlEUk1fRVJST1IoIkNvdWxk IG5vdCBncmFudCBidWZmZXIgYWNjZXNzLlxuIik7CisJcmV0dXJuIC1FUEVSTTsKK30KKworCisv KioKKyAqIHZtd191c2VyX2JvX3N5bmNjcHVfZ3JhYiAtIEdyYWIgYSBzdHJ1Y3Qgdm13X3VzZXJf YnVmZmVyX29iamVjdCBmb3IgY3B1CisgKiBhY2Nlc3MsIGlkbGluZyBwcmV2aW91cyBHUFUgb3Bl cmF0aW9ucyBvbiB0aGUgYnVmZmVyIGFuZCBvcHRpb25hbGx5CisgKiBibG9ja2luZyBpdCBmb3Ig ZnVydGhlciBjb21tYW5kIHN1Ym1pc3Npb25zLgorICoKKyAqIEB1c2VyX2JvOiBQb2ludGVyIHRv IHRoZSBidWZmZXIgb2JqZWN0IGJlaW5nIGdyYWJiZWQgZm9yIENQVSBhY2Nlc3MKKyAqIEB0Zmls ZTogSWRlbnRpZnlpbmcgdGhlIGNhbGxlci4KKyAqIEBmbGFnczogRmxhZ3MgaW5kaWNhdGluZyBo b3cgdGhlIGdyYWIgc2hvdWxkIGJlIHBlcmZvcm1lZC4KKyAqIFJldHVybjogWmVybyBvbiBzdWNj ZXNzLCBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLiBJbiBwYXJ0aWN1bGFyLAorICogLUVC VVNZIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBkb250YmxvY2sgb3BlcmF0aW9uIGlzIHJlcXVlc3Rl ZCBhbmQgdGhlCisgKiBidWZmZXIgb2JqZWN0IGlzIGJ1c3ksIGFuZCAtRVJFU1RBUlRTWVMgd2ls bCBiZSByZXR1cm5lZCBpZiBhIHdhaXQgaXMKKyAqIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgor ICoKKyAqIEEgYmxvY2tpbmcgZ3JhYiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVsZWFzZWQgd2hl biBAdGZpbGUgaXMgY2xvc2VkLgorICovCitzdGF0aWMgaW50IHZtd191c2VyX2JvX3N5bmNjcHVf Z3JhYihzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAqdXNlcl9ibywKKwkJCQkgICAgc3Ry dWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCisJCQkJICAgIHVpbnQzMl90IGZsYWdzKQorewor CXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSAmdXNlcl9iby0+dmJvLmJhc2U7CisJYm9v bCBleGlzdGVkOworCWludCByZXQ7CisKKwlpZiAoZmxhZ3MgJiBkcm1fdm13X3N5bmNjcHVfYWxs b3dfY3MpIHsKKwkJYm9vbCBub25ibG9jayA9ICEhKGZsYWdzICYgZHJtX3Ztd19zeW5jY3B1X2Rv bnRibG9jayk7CisJCWxvbmcgbHJldDsKKworCQlscmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3dh aXRfdGltZW91dF9yY3UKKwkJCShiby0+cmVzdiwgdHJ1ZSwgdHJ1ZSwKKwkJCSBub25ibG9jayA/ IDAgOiBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJCWlmICghbHJldCkKKwkJCXJldHVybiAtRUJV U1k7CisJCWVsc2UgaWYgKGxyZXQgPCAwKQorCQkJcmV0dXJuIGxyZXQ7CisJCXJldHVybiAwOwor CX0KKworCXJldCA9IHR0bV9ib19zeW5jY3B1X3dyaXRlX2dyYWIKKwkJKGJvLCAhIShmbGFncyAm IGRybV92bXdfc3luY2NwdV9kb250YmxvY2spKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHRtX3JlZl9vYmplY3RfYWRkKHRmaWxlLCAmdXNlcl9i by0+cHJpbWUuYmFzZSwKKwkJCQkgVFRNX1JFRl9TWU5DQ1BVX1dSSVRFLCAmZXhpc3RlZCwgZmFs c2UpOworCWlmIChyZXQgIT0gMCB8fCBleGlzdGVkKQorCQl0dG1fYm9fc3luY2NwdV93cml0ZV9y ZWxlYXNlKCZ1c2VyX2JvLT52Ym8uYmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAq IHZtd191c2VyX2JvX3N5bmNjcHVfcmVsZWFzZSAtIFJlbGVhc2UgYSBwcmV2aW91cyBncmFiIGZv ciBDUFUgYWNjZXNzLAorICogYW5kIHVuYmxvY2sgY29tbWFuZCBzdWJtaXNzaW9uIG9uIHRoZSBi dWZmZXIgaWYgYmxvY2tlZC4KKyAqCisgKiBAaGFuZGxlOiBIYW5kbGUgaWRlbnRpZnlpbmcgdGhl IGJ1ZmZlciBvYmplY3QuCisgKiBAdGZpbGU6IElkZW50aWZ5aW5nIHRoZSBjYWxsZXIuCisgKiBA ZmxhZ3M6IEZsYWdzIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgcmVsZWFzZS4KKyAqLworc3RhdGlj IGludCB2bXdfdXNlcl9ib19zeW5jY3B1X3JlbGVhc2UodWludDMyX3QgaGFuZGxlLAorCQkJCQkg ICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCQkJICAgdWludDMyX3QgZmxhZ3Mp Cit7CisJaWYgKCEoZmxhZ3MgJiBkcm1fdm13X3N5bmNjcHVfYWxsb3dfY3MpKQorCQlyZXR1cm4g dHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgaGFuZGxlLAorCQkJCQkJIFRUTV9SRUZf U1lOQ0NQVV9XUklURSk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIHZtd191c2VyX2Jv X3N5bmNjcHVfaW9jdGwgLSBpb2N0bCBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIHN5bmNjcHUK KyAqIGZ1bmN0aW9uYWxpdHkuCisgKgorICogQGRldjogSWRlbnRpZmllcyB0aGUgZHJtIGRldmlj ZS4KKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBpb2N0bCBhcmd1bWVudC4KKyAqIEBmaWxlX3By aXY6IElkZW50aWZpZXMgdGhlIGNhbGxlci4KKyAqIFJldHVybjogWmVybyBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tz IHRoZSBpb2N0bCBhcmd1bWVudHMgZm9yIHZhbGlkaXR5IGFuZCBjYWxscyB0aGUKKyAqIHJlbGV2 YW50IHN5bmNjcHUgZnVuY3Rpb25zLgorICovCitpbnQgdm13X3VzZXJfYm9fc3luY2NwdV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92bXdfc3luY2NwdV9hcmcgKmFyZyA9 CisJCShzdHJ1Y3QgZHJtX3Ztd19zeW5jY3B1X2FyZyAqKSBkYXRhOworCXN0cnVjdCB2bXdfYnVm ZmVyX29iamVjdCAqdmJvOworCXN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICp1c2VyX2Jv OworCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdikt PnRmaWxlOworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJ1ZmZlcl9iYXNlOworCWludCByZXQ7 CisKKwlpZiAoKGFyZy0+ZmxhZ3MgJiAoZHJtX3Ztd19zeW5jY3B1X3JlYWQgfCBkcm1fdm13X3N5 bmNjcHVfd3JpdGUpKSA9PSAwCisJICAgIHx8IChhcmctPmZsYWdzICYgfihkcm1fdm13X3N5bmNj cHVfcmVhZCB8IGRybV92bXdfc3luY2NwdV93cml0ZSB8CisJCQkgICAgICAgZHJtX3Ztd19zeW5j Y3B1X2RvbnRibG9jayB8CisJCQkgICAgICAgZHJtX3Ztd19zeW5jY3B1X2FsbG93X2NzKSkgIT0g MCkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgc3luY2NwdSBmbGFncy5cbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGFyZy0+b3ApIHsKKwljYXNlIGRybV92bXdfc3luY2Nw dV9ncmFiOgorCQlyZXQgPSB2bXdfdXNlcl9ib19sb29rdXAodGZpbGUsIGFyZy0+aGFuZGxlLCAm dmJvLAorCQkJCQkgICAgICZidWZmZXJfYmFzZSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CisJCQlyZXR1cm4gcmV0OworCisJCXVzZXJfYm8gPSBjb250YWluZXJfb2YodmJvLCBzdHJ1Y3Qg dm13X3VzZXJfYnVmZmVyX29iamVjdCwKKwkJCQkgICAgICAgdmJvKTsKKwkJcmV0ID0gdm13X3Vz ZXJfYm9fc3luY2NwdV9ncmFiKHVzZXJfYm8sIHRmaWxlLCBhcmctPmZsYWdzKTsKKwkJdm13X2Jv X3VucmVmZXJlbmNlKCZ2Ym8pOworCQl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJ1ZmZlcl9iYXNl KTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYKKwkJ CSAgICAgcmV0ICE9IC1FQlVTWSkpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHN5bmNjcHUgZ3Jh YiBvbiBoYW5kbGUgMHglMDh4LlxuIiwKKwkJCQkgICh1bnNpZ25lZCBpbnQpIGFyZy0+aGFuZGxl KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBkcm1fdm13X3N5bmNjcHVf cmVsZWFzZToKKwkJcmV0ID0gdm13X3VzZXJfYm9fc3luY2NwdV9yZWxlYXNlKGFyZy0+aGFuZGxl LCB0ZmlsZSwKKwkJCQkJCSAgYXJnLT5mbGFncyk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkp IHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHN5bmNjcHUgcmVsZWFzZSBvbiBoYW5kbGUgMHglMDh4 LlxuIiwKKwkJCQkgICh1bnNpZ25lZCBpbnQpIGFyZy0+aGFuZGxlKTsKKwkJCXJldHVybiByZXQ7 CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIHN5bmNjcHUg b3BlcmF0aW9uLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQor CisKKy8qKgorICogdm13X2JvX2FsbG9jX2lvY3RsIC0gaW9jdGwgZnVuY3Rpb24gaW1wbGVtZW50 aW5nIHRoZSBidWZmZXIgb2JqZWN0CisgKiBhbGxvY2F0aW9uIGZ1bmN0aW9uYWxpdHkuCisgKgor ICogQGRldjogSWRlbnRpZmllcyB0aGUgZHJtIGRldmljZS4KKyAqIEBkYXRhOiBQb2ludGVyIHRv IHRoZSBpb2N0bCBhcmd1bWVudC4KKyAqIEBmaWxlX3ByaXY6IElkZW50aWZpZXMgdGhlIGNhbGxl ci4KKyAqIFJldHVybjogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVy cm9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBpb2N0bCBhcmd1bWVudHMgZm9y IHZhbGlkaXR5IGFuZCBhbGxvY2F0ZXMgYQorICogc3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmpl Y3QgYm8uCisgKi8KK2ludCB2bXdfYm9fYWxsb2NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorewor CXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOworCXVuaW9uIGRy bV92bXdfYWxsb2NfZG1hYnVmX2FyZyAqYXJnID0KKwkgICAgKHVuaW9uIGRybV92bXdfYWxsb2Nf ZG1hYnVmX2FyZyAqKWRhdGE7CisJc3RydWN0IGRybV92bXdfYWxsb2NfZG1hYnVmX3JlcSAqcmVx ID0gJmFyZy0+cmVxOworCXN0cnVjdCBkcm1fdm13X2RtYWJ1Zl9yZXAgKnJlcCA9ICZhcmctPnJl cDsKKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibzsKKwl1aW50MzJfdCBoYW5kbGU7CisJ aW50IHJldDsKKworCXJldCA9IHR0bV9yZWFkX2xvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9z ZW0sIHRydWUpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSB2bXdfdXNlcl9ib19hbGxvYyhkZXZfcHJpdiwgdm13X2Zwcml2KGZpbGVfcHJpdiktPnRm aWxlLAorCQkJCXJlcS0+c2l6ZSwgZmFsc2UsICZoYW5kbGUsICZ2Ym8sCisJCQkJTlVMTCk7CisJ aWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfbm9fYm87CisKKwlyZXAtPmhhbmRs ZSA9IGhhbmRsZTsKKwlyZXAtPm1hcF9oYW5kbGUgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIo JnZiby0+YmFzZS52bWFfbm9kZSk7CisJcmVwLT5jdXJfZ21yX2lkID0gaGFuZGxlOworCXJlcC0+ Y3VyX2dtcl9vZmZzZXQgPSAwOworCisJdm13X2JvX3VucmVmZXJlbmNlKCZ2Ym8pOworCitvdXRf bm9fYm86CisJdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKKwor CXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiB2bXdfYm9fdW5yZWZfaW9jdGwgLSBHZW5lcmlj IGhhbmRsZSBjbG9zZSBpb2N0bC4KKyAqCisgKiBAZGV2OiBJZGVudGlmaWVzIHRoZSBkcm0gZGV2 aWNlLgorICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50LgorICogQGZpbGVf cHJpdjogSWRlbnRpZmllcyB0aGUgY2FsbGVyLgorICogUmV0dXJuOiBaZXJvIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZXJyb3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVj a3MgdGhlIGlvY3RsIGFyZ3VtZW50cyBmb3IgdmFsaWRpdHkgYW5kIGNsb3NlcyBhCisgKiBoYW5k bGUgdG8gYSBUVE0gYmFzZSBvYmplY3QsIG9wdGlvbmFsbHkgZnJlZWluZyB0aGUgb2JqZWN0Lgor ICovCitpbnQgdm13X2JvX3VucmVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qg ZHJtX3Ztd191bnJlZl9kbWFidWZfYXJnICphcmcgPQorCSAgICAoc3RydWN0IGRybV92bXdfdW5y ZWZfZG1hYnVmX2FyZyAqKWRhdGE7CisKKwlyZXR1cm4gdHRtX3JlZl9vYmplY3RfYmFzZV91bnJl Zih2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGUsCisJCQkJCSBhcmctPmhhbmRsZSwKKwkJCQkJ IFRUTV9SRUZfVVNBR0UpOworfQorCisKKy8qKgorICogdm13X3VzZXJfYm9fbG9va3VwIC0gTG9v ayB1cCBhIHZtdyB1c2VyIGJ1ZmZlciBvYmplY3QgZnJvbSBhIGhhbmRsZS4KKyAqCisgKiBAdGZp bGU6IFRoZSBUVE0gb2JqZWN0IGZpbGUgdGhlIGhhbmRsZSBpcyByZWdpc3RlcmVkIHdpdGguCisg KiBAaGFuZGxlOiBUaGUgdXNlciBidWZmZXIgb2JqZWN0IGhhbmRsZQorICogQG91dDogUG9pbnRl ciB0byBhIHdoZXJlIGEgcG9pbnRlciB0byB0aGUgZW1iZWRkZWQKKyAqIHN0cnVjdCB2bXdfYnVm ZmVyX29iamVjdCBzaG91bGQgYmUgcGxhY2VkLgorICogQHBfYmFzZTogUG9pbnRlciB0byB3aGVy ZSBhIHBvaW50ZXIgdG8gdGhlIFRUTSBiYXNlIG9iamVjdCBzaG91bGQgYmUKKyAqIHBsYWNlZCwg b3IgTlVMTCBpZiBubyBzdWNoIHBvaW50ZXIgaXMgcmVxdWlyZWQuCisgKiBSZXR1cm46IFplcm8g b24gc3VjY2VzcywgTmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvci4KKyAqCisgKiBCb3RoIHRo ZSBvdXRwdXQgYmFzZSBvYmplY3QgcG9pbnRlciBhbmQgdGhlIHZtdyBidWZmZXIgb2JqZWN0IHBv aW50ZXIKKyAqIHdpbGwgYmUgcmVmY291bnRlZC4KKyAqLworaW50IHZtd191c2VyX2JvX2xvb2t1 cChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJICAgICAgIHVpbnQzMl90IGhhbmRs ZSwgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICoqb3V0LAorCQkgICAgICAgc3RydWN0IHR0bV9i YXNlX29iamVjdCAqKnBfYmFzZSkKK3sKKwlzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAq dm13X3VzZXJfYm87CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKKworCWJhc2UgPSB0 dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCBoYW5kbGUpOworCWlmICh1bmxpa2VseShiYXNl ID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBidWZmZXIgb2JqZWN0IGhhbmRsZSAw eCUwOGx4LlxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKKwkJcmV0dXJuIC1FU1JD SDsKKwl9CisKKwlpZiAodW5saWtlbHkodHRtX2Jhc2Vfb2JqZWN0X3R5cGUoYmFzZSkgIT0gdHRt X2J1ZmZlcl90eXBlKSkgeworCQl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCQlEUk1f RVJST1IoIkludmFsaWQgYnVmZmVyIG9iamVjdCBoYW5kbGUgMHglMDhseC5cbiIsCisJCQkgICh1 bnNpZ25lZCBsb25nKWhhbmRsZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZtd191c2Vy X2JvID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0LAor CQkJCSAgIHByaW1lLmJhc2UpOworCSh2b2lkKXR0bV9ib19yZWZlcmVuY2UoJnZtd191c2VyX2Jv LT52Ym8uYmFzZSk7CisJaWYgKHBfYmFzZSkKKwkJKnBfYmFzZSA9IGJhc2U7CisJZWxzZQorCQl0 dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCSpvdXQgPSAmdm13X3VzZXJfYm8tPnZibzsK KworCXJldHVybiAwOworfQorCisKKy8qKgorICogdm13X3VzZXJfYm9fcmVmZXJlbmNlIC0gT3Bl biBhIGhhbmRsZSB0byBhIHZtdyB1c2VyIGJ1ZmZlciBvYmplY3QuCisgKgorICogQHRmaWxlOiBU aGUgVFRNIG9iamVjdCBmaWxlIHRvIHJlZ2lzdGVyIHRoZSBoYW5kbGUgd2l0aC4KKyAqIEB2Ym86 IFRoZSBlbWJlZGRlZCB2bXcgYnVmZmVyIG9iamVjdC4KKyAqIEBoYW5kbGU6IFBvaW50ZXIgdG8g d2hlcmUgdGhlIG5ldyBoYW5kbGUgc2hvdWxkIGJlIHBsYWNlZC4KKyAqIFJldHVybjogWmVybyBv biBzdWNjZXNzLCBOZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLgorICovCitpbnQgdm13X3Vz ZXJfYm9fcmVmZXJlbmNlKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJICBzdHJ1 Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibywKKwkJCSAgdWludDMyX3QgKmhhbmRsZSkKK3sKKwlz dHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAqdXNlcl9ibzsKKworCWlmICh2Ym8tPmJhc2Uu ZGVzdHJveSAhPSB2bXdfdXNlcl9ib19kZXN0cm95KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVz ZXJfYm8gPSBjb250YWluZXJfb2YodmJvLCBzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCwg dmJvKTsKKworCSpoYW5kbGUgPSB1c2VyX2JvLT5wcmltZS5iYXNlLmhhc2gua2V5OworCXJldHVy biB0dG1fcmVmX29iamVjdF9hZGQodGZpbGUsICZ1c2VyX2JvLT5wcmltZS5iYXNlLAorCQkJCSAg VFRNX1JFRl9VU0FHRSwgTlVMTCwgZmFsc2UpOworfQorCisKKy8qKgorICogdm13X2JvX2ZlbmNl X3NpbmdsZSAtIFV0aWxpdHkgZnVuY3Rpb24gdG8gZmVuY2UgYSBzaW5nbGUgVFRNIGJ1ZmZlcgor ICogICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCB3aXRob3V0IHVucmVzZXJ2aW5nIGl0Lgor ICoKKyAqIEBibzogICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0IHRvIGZlbmNlLgorICogQGZlbmNlOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBmZW5j ZS4gSWYgTlVMTCwgdGhpcyBmdW5jdGlvbiB3aWxsCisgKiAgICAgICAgICAgICAgICAgIGluc2Vy dCBhIGZlbmNlIGludG8gdGhlIGNvbW1hbmQgc3RyZWFtLi4KKyAqCisgKiBDb250cmFyeSB0byB0 aGUgdHRtX2V1IHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiwgaXQgdGFrZXMgb25seQorICogYSBz aW5nbGUgYnVmZmVyIG9iamVjdCBpbnN0ZWFkIG9mIGEgbGlzdCwgYW5kIGl0IGFsc28gZG9lc24n dAorICogdW5yZXNlcnZlIHRoZSBidWZmZXIgb2JqZWN0LCB3aGljaCBuZWVkcyB0byBiZSBkb25l IHNlcGFyYXRlbHkuCisgKi8KK3ZvaWQgdm13X2JvX2ZlbmNlX3NpbmdsZShzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvLAorCQkJIHN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSkKK3sKKwlz dHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCisJc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdiA9CisJCWNvbnRhaW5lcl9vZihiZGV2LCBzdHJ1Y3Qgdm13X3ByaXZhdGUs IGJkZXYpOworCisJaWYgKGZlbmNlID09IE5VTEwpIHsKKwkJdm13X2V4ZWNidWZfZmVuY2VfY29t bWFuZHMoTlVMTCwgZGV2X3ByaXYsICZmZW5jZSwgTlVMTCk7CisJCXJlc2VydmF0aW9uX29iamVj dF9hZGRfZXhjbF9mZW5jZShiby0+cmVzdiwgJmZlbmNlLT5iYXNlKTsKKwkJZG1hX2ZlbmNlX3B1 dCgmZmVuY2UtPmJhc2UpOworCX0gZWxzZQorCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xf ZmVuY2UoYm8tPnJlc3YsICZmZW5jZS0+YmFzZSk7Cit9CisKKworLyoqCisgKiB2bXdfZHVtYl9j cmVhdGUgLSBDcmVhdGUgYSBkdW1iIGttcyBidWZmZXIKKyAqCisgKiBAZmlsZV9wcml2OiBQb2lu dGVyIHRvIGEgc3RydWN0IGRybV9maWxlIGlkZW50aWZ5aW5nIHRoZSBjYWxsZXIuCisgKiBAZGV2 OiBQb2ludGVyIHRvIHRoZSBkcm0gZGV2aWNlLgorICogQGFyZ3M6IFBvaW50ZXIgdG8gYSBzdHJ1 Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgc3RydWN0dXJlCisgKiBSZXR1cm46IFplcm8gb24gc3Vj Y2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICoKKyAqIFRoaXMgaXMgYSBk cml2ZXIgY2FsbGJhY2sgZm9yIHRoZSBjb3JlIGRybSBjcmVhdGVfZHVtYiBmdW5jdGlvbmFsaXR5 LgorICogTm90ZSB0aGF0IHRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB2bXdfYm9fYWxsb2Mg aW9jdGwsIGV4Y2VwdAorICogdGhhdCB0aGUgYXJndW1lbnRzIGhhdmUgYSBkaWZmZXJlbnQgZm9y bWF0LgorICovCitpbnQgdm13X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkcm1fbW9kZV9j cmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13 X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibzsKKwlpbnQgcmV0Owor CisJYXJncy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAqICgoYXJncy0+YnBwICsgNykgLyA4KTsKKwlh cmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisKKwlyZXQgPSB0dG1fcmVh ZF9sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtLCB0cnVlKTsKKwlpZiAodW5saWtlbHko cmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdm13X3VzZXJfYm9fYWxsb2MoZGV2 X3ByaXYsIHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwKKwkJCQkgICAgYXJncy0+c2l6ZSwg ZmFsc2UsICZhcmdzLT5oYW5kbGUsCisJCQkJICAgICZ2Ym8sIE5VTEwpOworCWlmICh1bmxpa2Vs eShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X25vX2JvOworCisJdm13X2JvX3VucmVmZXJlbmNlKCZ2 Ym8pOworb3V0X25vX2JvOgorCXR0bV9yZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9u X3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIHZtd19kdW1iX21hcF9vZmZzZXQg LSBSZXR1cm4gdGhlIGFkZHJlc3Mgc3BhY2Ugb2Zmc2V0IG9mIGEgZHVtYiBidWZmZXIKKyAqCisg KiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgc3RydWN0IGRybV9maWxlIGlkZW50aWZ5aW5nIHRo ZSBjYWxsZXIuCisgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBkcm0gZGV2aWNlLgorICogQGhhbmRs ZTogSGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBkdW1iIGJ1ZmZlci4KKyAqIEBvZmZzZXQ6IFRoZSBh ZGRyZXNzIHNwYWNlIG9mZnNldCByZXR1cm5lZC4KKyAqIFJldHVybjogWmVybyBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKgorICogVGhpcyBpcyBhIGRyaXZl ciBjYWxsYmFjayBmb3IgdGhlIGNvcmUgZHJtIGR1bWJfbWFwX29mZnNldCBmdW5jdGlvbmFsaXR5 LgorICovCitpbnQgdm13X2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwKKwkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCXVpbnQ2 NF90ICpvZmZzZXQpCit7CisJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnBy aXYoZmlsZV9wcml2KS0+dGZpbGU7CisJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICpvdXRfYnVm OworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfdXNlcl9ib19sb29rdXAodGZpbGUsIGhhbmRsZSwg Jm91dF9idWYsIE5VTEwpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkq b2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZvdXRfYnVmLT5iYXNlLnZtYV9ub2Rl KTsKKwl2bXdfYm9fdW5yZWZlcmVuY2UoJm91dF9idWYpOworCXJldHVybiAwOworfQorCisKKy8q KgorICogdm13X2R1bWJfZGVzdHJveSAtIERlc3Ryb3kgYSBkdW1iIGJvZmZlcgorICoKKyAqIEBm aWxlX3ByaXY6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX2ZpbGUgaWRlbnRpZnlpbmcgdGhlIGNh bGxlci4KKyAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIGRybSBkZXZpY2UuCisgKiBAaGFuZGxlOiBI YW5kbGUgaWRlbnRpZnlpbmcgdGhlIGR1bWIgYnVmZmVyLgorICogUmV0dXJuOiBaZXJvIG9uIHN1 Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqCisgKiBUaGlzIGlzIGEg ZHJpdmVyIGNhbGxiYWNrIGZvciB0aGUgY29yZSBkcm0gZHVtYl9kZXN0cm95IGZ1bmN0aW9uYWxp dHkuCisgKi8KK2ludCB2bXdfZHVtYl9kZXN0cm95KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgdWludDMyX3QgaGFuZGxl KQoreworCXJldHVybiB0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKHZtd19mcHJpdihmaWxlX3By aXYpLT50ZmlsZSwKKwkJCQkJIGhhbmRsZSwgVFRNX1JFRl9VU0FHRSk7Cit9CisKKworLyoqCisg KiB2bXdfYm9fc3dhcF9ub3RpZnkgLSBzd2Fwb3V0IG5vdGlmeSBjYWxsYmFjay4KKyAqCisgKiBA Ym86IFRoZSBidWZmZXIgb2JqZWN0IHRvIGJlIHN3YXBwZWQgb3V0LgorICovCit2b2lkIHZtd19i b19zd2FwX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQoreworCS8qIElzIEBi byBlbWJlZGRlZCBpbiBhIHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdD8gKi8KKwlpZiAoYm8tPmRl c3Ryb3kgIT0gdm13X2JvX2JvX2ZyZWUgJiYKKwkgICAgYm8tPmRlc3Ryb3kgIT0gdm13X3VzZXJf Ym9fZGVzdHJveSkKKwkJcmV0dXJuOworCisJLyogS2lsbCBhbnkgY2FjaGVkIGtlcm5lbCBtYXBz IGJlZm9yZSBzd2Fwb3V0ICovCisJdm13X2JvX3VubWFwKHZtd19idWZmZXJfb2JqZWN0KGJvKSk7 Cit9CisKKworLyoqCisgKiB2bXdfYm9fbW92ZV9ub3RpZnkgLSBUVE0gbW92ZV9ub3RpZnlfY2Fs bGJhY2sKKyAqCisgKiBAYm86IFRoZSBUVE0gYnVmZmVyIG9iamVjdCBhYm91dCB0byBtb3ZlLgor ICogQG1lbTogVGhlIHN0cnVjdCB0dG1fbWVtX3JlZyBpbmRpY2F0aW5nIHRvIHdoYXQgbWVtb3J5 CisgKiAgICAgICByZWdpb24gdGhlIG1vdmUgaXMgdGFraW5nIHBsYWNlLgorICoKKyAqIERldGFj aGVzIGNhY2hlZCBtYXBzIGFuZCBkZXZpY2UgYmluZGluZ3MgdGhhdCByZXF1aXJlIHRoYXQgdGhl CisgKiBidWZmZXIgZG9lc24ndCBtb3ZlLgorICovCit2b2lkIHZtd19ib19tb3ZlX25vdGlmeShz dHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJc3RydWN0IHR0bV9tZW1fcmVnICptZW0p Cit7CisJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym87CisKKwlpZiAobWVtID09IE5VTEwp CisJCXJldHVybjsKKworCS8qIE1ha2Ugc3VyZSBAYm8gaXMgZW1iZWRkZWQgaW4gYSBzdHJ1Y3Qg dm13X2J1ZmZlcl9vYmplY3Q/ICovCisJaWYgKGJvLT5kZXN0cm95ICE9IHZtd19ib19ib19mcmVl ICYmCisJICAgIGJvLT5kZXN0cm95ICE9IHZtd191c2VyX2JvX2Rlc3Ryb3kpCisJCXJldHVybjsK KworCXZibyA9IGNvbnRhaW5lcl9vZihibywgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0LCBiYXNl KTsKKworCS8qCisJICogS2lsbCBhbnkgY2FjaGVkIGtlcm5lbCBtYXBzIGJlZm9yZSBtb3ZlLiBB biBvcHRpbWl6YXRpb24gY291bGQKKwkgKiBiZSB0byBkbyB0aGlzIGlmZiBzb3VyY2Ugb3IgZGVz dGluYXRpb24gbWVtb3J5IHR5cGUgaXMgaW4gVlJBTS4KKwkgKi8KKwl2bXdfYm9fdW5tYXAodmJv KTsKKworCS8qCisJICogSWYgd2UncmUgbW92aW5nIGEgYmFja3VwIE1PQiBvdXQgb2YgTU9CIHBs YWNlbWVudCwgdGhlbiBtYWtlIHN1cmUgd2UKKwkgKiByZWFkIGJhY2sgYWxsIHJlc291cmNlIGNv bnRlbnQgZmlyc3QsIGFuZCB1bmJpbmQgdGhlIE1PQiBmcm9tCisJICogdGhlIHJlc291cmNlLgor CSAqLworCWlmIChtZW0tPm1lbV90eXBlICE9IFZNV19QTF9NT0IpCisJCXZtd19yZXNvdXJjZV91 bmJpbmRfbGlzdCh2Ym8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY29udGV4dC5j CmluZGV4IGZmOGFjYzc0Nzg2Yy4uZDQ2MGE3MjFlYWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfY29udGV4dC5jCkBAIC00MjQsNyArNDI0LDcgQEAgc3RhdGljIGludCB2bXdfZ2Jf Y29udGV4dF91bmJpbmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAogCSh2b2lkKSB2bXdfZXhl Y2J1Zl9mZW5jZV9jb21tYW5kcyhOVUxMLCBkZXZfcHJpdiwKIAkJCQkJICAmZmVuY2UsIE5VTEwp OwogCi0Jdm13X2ZlbmNlX3NpbmdsZV9ibyhibywgZmVuY2UpOworCXZtd19ib19mZW5jZV9zaW5n bGUoYm8sIGZlbmNlKTsKIAogCWlmIChsaWtlbHkoZmVuY2UgIT0gTlVMTCkpCiAJCXZtd19mZW5j ZV9vYmpfdW5yZWZlcmVuY2UoJmZlbmNlKTsKQEAgLTY0OCw3ICs2NDgsNyBAQCBzdGF0aWMgaW50 IHZtd19keF9jb250ZXh0X3VuYmluZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJKHZvaWQp IHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9wcml2LAogCQkJCQkgICZmZW5j ZSwgTlVMTCk7CiAKLQl2bXdfZmVuY2Vfc2luZ2xlX2JvKGJvLCBmZW5jZSk7CisJdm13X2JvX2Zl bmNlX3NpbmdsZShibywgZmVuY2UpOwogCiAJaWYgKGxpa2VseShmZW5jZSAhPSBOVUxMKSkKIAkJ dm13X2ZlbmNlX29ial91bnJlZmVyZW5jZSgmZmVuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfY290YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfY290YWJsZS5jCmluZGV4IDEwNTJjZDNjYjcwMC4uOTgwZTZlN2NkNTkyIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb3RhYmxlLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY290YWJsZS5jCkBAIC0zMjQsNyArMzI0LDcgQEAgc3Rh dGljIGludCB2bXdfY290YWJsZV91bmJpbmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAogCQl2 bXdfZHhfY29udGV4dF9zY3J1Yl9jb3RhYmxlcyh2Y290YmwtPmN0eCwgcmVhZGJhY2spOwogCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOwogCSh2b2lkKSB2bXdfZXhlY2J1 Zl9mZW5jZV9jb21tYW5kcyhOVUxMLCBkZXZfcHJpdiwgJmZlbmNlLCBOVUxMKTsKLQl2bXdfZmVu Y2Vfc2luZ2xlX2JvKGJvLCBmZW5jZSk7CisJdm13X2JvX2ZlbmNlX3NpbmdsZShibywgZmVuY2Up OwogCWlmIChsaWtlbHkoZmVuY2UgIT0gTlVMTCkpCiAJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVu Y2UoJmZlbmNlKTsKIApAQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbnQgdm13X2NvdGFibGVf cmVhZGJhY2soc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQogCX0KIAogCSh2b2lkKSB2bXdfZXhl Y2J1Zl9mZW5jZV9jb21tYW5kcyhOVUxMLCBkZXZfcHJpdiwgJmZlbmNlLCBOVUxMKTsKLQl2bXdf ZmVuY2Vfc2luZ2xlX2JvKCZyZXMtPmJhY2t1cC0+YmFzZSwgZmVuY2UpOworCXZtd19ib19mZW5j ZV9zaW5nbGUoJnJlcy0+YmFja3VwLT5iYXNlLCBmZW5jZSk7CiAJdm13X2ZlbmNlX29ial91bnJl ZmVyZW5jZSgmZmVuY2UpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Ry di5oCmluZGV4IDI1YzJmNjY4YWQ2Yy4uNzY5ZDcyZmFiYjU2IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9kcnYuaApAQCAtNjMwLDM2ICs2MzAsNiBAQCBleHRlcm4gaW50IHZtd191c2VyX3Jl c291cmNlX2xvb2t1cF9oYW5kbGUoCiAJdWludDMyX3QgaGFuZGxlLAogCWNvbnN0IHN0cnVjdCB2 bXdfdXNlcl9yZXNvdXJjZV9jb252ICpjb252ZXJ0ZXIsCiAJc3RydWN0IHZtd19yZXNvdXJjZSAq KnBfcmVzKTsKLWV4dGVybiB2b2lkIHZtd19ib19ib19mcmVlKHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8pOwotZXh0ZXJuIGludCB2bXdfYm9faW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAotCQkgICAgICAgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2bXdfYm8sCi0JCSAg ICAgICBzaXplX3Qgc2l6ZSwgc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCwKLQkJICAg ICAgIGJvb2wgaW50ZXJ1cHRhYmxlLAotCQkgICAgICAgdm9pZCAoKmJvX2ZyZWUpKHN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdCAqYm8pKTsKLWV4dGVybiBpbnQgdm13X3VzZXJfYm9fdmVyaWZ5X2Fj Y2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJCSAgICAgc3RydWN0IHR0bV9v YmplY3RfZmlsZSAqdGZpbGUpOwotZXh0ZXJuIGludCB2bXdfdXNlcl9ib19hbGxvYyhzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0 ZmlsZSwKLQkJCSAgICAgdWludDMyX3Qgc2l6ZSwKLQkJCSAgICAgYm9vbCBzaGFyZWFibGUsCi0J CQkgICAgIHVpbnQzMl90ICpoYW5kbGUsCi0JCQkgICAgIHN0cnVjdCB2bXdfYnVmZmVyX29iamVj dCAqKnBfZG1hX2J1ZiwKLQkJCSAgICAgc3RydWN0IHR0bV9iYXNlX29iamVjdCAqKnBfYmFzZSk7 Ci1leHRlcm4gaW50IHZtd191c2VyX2JvX3JlZmVyZW5jZShzdHJ1Y3QgdHRtX29iamVjdF9maWxl ICp0ZmlsZSwKLQkJCQkgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICpkbWFfYnVmLAotCQkJCSB1 aW50MzJfdCAqaGFuZGxlKTsKLWV4dGVybiBpbnQgdm13X2JvX2FsbG9jX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdik7Ci1leHRlcm4gaW50IHZtd19ib191bnJlZl9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp OwotZXh0ZXJuIGludCB2bXdfdXNlcl9ib19zeW5jY3B1X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7 Ci1leHRlcm4gdWludDMyX3Qgdm13X2JvX3ZhbGlkYXRlX25vZGUoc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibywKLQkJCQkgICAgIHVpbnQzMl90IGN1cl92YWxpZGF0ZV9ub2RlKTsKLWV4dGVy biB2b2lkIHZtd19ib192YWxpZGF0ZV9jbGVhcihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv KTsKLWV4dGVybiBpbnQgdm13X3VzZXJfYm9fbG9va3VwKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUg KnRmaWxlLAotCQkJICAgICAgdWludDMyX3QgaWQsIHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAq Km91dCwKLQkJCSAgICAgIHN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKipiYXNlKTsKIGV4dGVybiBp bnQgdm13X3N0cmVhbV9jbGFpbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCB2bXdf c3RyZWFtX3VucmVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBA IC02NzIsMTYgKzY0MiwxMSBAQCBleHRlcm4gdm9pZCB2bXdfcmVzb3VyY2VfdW5yZXNlcnZlKHN0 cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKIAkJCQkgICBib29sIHN3aXRjaF9iYWNrdXAsCiAJCQkJ ICAgc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICpuZXdfYmFja3VwLAogCQkJCSAgIHVuc2lnbmVk IGxvbmcgbmV3X2JhY2t1cF9vZmZzZXQpOwotZXh0ZXJuIHZvaWQgdm13X3Jlc291cmNlX21vdmVf bm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkJICAgICBzdHJ1Y3QgdHRt X21lbV9yZWcgKm1lbSk7CiBleHRlcm4gdm9pZCB2bXdfcXVlcnlfbW92ZV9ub3RpZnkoc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkJCQkgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKTsK LWV4dGVybiB2b2lkIHZtd19yZXNvdXJjZV9zd2FwX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvKTsKIGV4dGVybiBpbnQgdm13X3F1ZXJ5X3JlYWRiYWNrX2FsbChzdHJ1Y3Qgdm13 X2J1ZmZlcl9vYmplY3QgKmR4X3F1ZXJ5X21vYik7Ci1leHRlcm4gdm9pZCB2bXdfZmVuY2Vfc2lu Z2xlX2JvKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkJc3RydWN0IHZtd19mZW5j ZV9vYmogKmZlbmNlKTsKIGV4dGVybiB2b2lkIHZtd19yZXNvdXJjZV9ldmljdF9hbGwoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdik7Ci0KK2V4dGVybiB2b2lkIHZtd19yZXNvdXJjZV91bmJp bmRfbGlzdChzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyk7CiAKIC8qKgogICogQnVmZmVy IG9iamVjdCBoZWxwZXIgZnVuY3Rpb25zIC0gdm13Z2Z4X2JvLmMKQEAgLTcwNSw4ICs2NzAsNDAg QEAgZXh0ZXJuIGludCB2bXdfYm9fdW5waW4oc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwK IGV4dGVybiB2b2lkIHZtd19ib19nZXRfZ3Vlc3RfcHRyKGNvbnN0IHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqYnVmLAogCQkJCSBTVkdBR3Vlc3RQdHIgKnB0cik7CiBleHRlcm4gdm9pZCB2bXdf Ym9fcGluX3Jlc2VydmVkKHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqYm8sIGJvb2wgcGluKTsK LWV4dGVybiB2b2lkICp2bXdfYnVmZmVyX29iamVjdF9tYXBfYW5kX2NhY2hlKHN0cnVjdCB2bXdf YnVmZmVyX29iamVjdCAqdmJvKTsKLWV4dGVybiB2b2lkIHZtd19idWZmZXJfb2JqZWN0X3VubWFw KHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvKTsKK2V4dGVybiB2b2lkIHZtd19ib19ib19m cmVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOworZXh0ZXJuIGludCB2bXdfYm9faW5p dChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgICAgc3RydWN0IHZtd19idWZm ZXJfb2JqZWN0ICp2bXdfYm8sCisJCSAgICAgICBzaXplX3Qgc2l6ZSwgc3RydWN0IHR0bV9wbGFj ZW1lbnQgKnBsYWNlbWVudCwKKwkJICAgICAgIGJvb2wgaW50ZXJ1cHRhYmxlLAorCQkgICAgICAg dm9pZCAoKmJvX2ZyZWUpKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pKTsKK2V4dGVybiBp bnQgdm13X3VzZXJfYm9fdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv LAorCQkJCSAgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUpOworZXh0ZXJuIGludCB2 bXdfdXNlcl9ib19hbGxvYyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICBz dHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCSAgICAgdWludDMyX3Qgc2l6ZSwKKwkJ CSAgICAgYm9vbCBzaGFyZWFibGUsCisJCQkgICAgIHVpbnQzMl90ICpoYW5kbGUsCisJCQkgICAg IHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqKnBfZG1hX2J1ZiwKKwkJCSAgICAgc3RydWN0IHR0 bV9iYXNlX29iamVjdCAqKnBfYmFzZSk7CitleHRlcm4gaW50IHZtd191c2VyX2JvX3JlZmVyZW5j ZShzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCQkgc3RydWN0IHZtd19idWZmZXJf b2JqZWN0ICpkbWFfYnVmLAorCQkJCSB1aW50MzJfdCAqaGFuZGxlKTsKK2V4dGVybiBpbnQgdm13 X2JvX2FsbG9jX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkg ICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd19ib191bnJl Zl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCB2bXdfdXNlcl9ib19zeW5jY3B1 X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd191c2VyX2JvX2xvb2t1cChz dHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCSAgICAgIHVpbnQzMl90IGlkLCBzdHJ1 Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKipvdXQsCisJCQkgICAgICBzdHJ1Y3QgdHRtX2Jhc2Vfb2Jq ZWN0ICoqYmFzZSk7CitleHRlcm4gdm9pZCB2bXdfYm9fZmVuY2Vfc2luZ2xlKHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqYm8sCisJCQkJc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNlKTsKK2V4 dGVybiB2b2lkICp2bXdfYm9fbWFwX2FuZF9jYWNoZShzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3Qg KnZibyk7CitleHRlcm4gdm9pZCB2bXdfYm9fdW5tYXAoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0 ICp2Ym8pOworZXh0ZXJuIHZvaWQgdm13X2JvX21vdmVfbm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqYm8sCisJCQkgICAgICAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pOworZXh0ZXJu IHZvaWQgdm13X2JvX3N3YXBfbm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwog CiAvKioKICAqIE1pc2MgSW9jdGwgZnVuY3Rpb25hbGl0eSAtIHZtd2dmeF9pb2N0bC5jCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jIGIvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwppbmRleCBkY2RlNDk4NWM1NzQuLmI5MTNhNTZmMzQyNiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGlj IHZvaWQgdm13X2ZiX2RpcnR5X2ZsdXNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCSh2 b2lkKSB0dG1fcmVhZF9sb2NrKCZ2bXdfcHJpdi0+cmVzZXJ2YXRpb25fc2VtLCBmYWxzZSk7CiAJ KHZvaWQpIHR0bV9ib19yZXNlcnZlKCZ2Ym8tPmJhc2UsIGZhbHNlLCBmYWxzZSwgTlVMTCk7Ci0J dmlydHVhbCA9IHZtd19idWZmZXJfb2JqZWN0X21hcF9hbmRfY2FjaGUodmJvKTsKKwl2aXJ0dWFs ID0gdm13X2JvX21hcF9hbmRfY2FjaGUodmJvKTsKIAlpZiAoIXZpcnR1YWwpCiAJCWdvdG8gb3V0 X3VucmVzZXJ2ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf a21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwppbmRleCA3YTMyYmUw Y2VmMTQuLmU3YTdhMmU3M2JiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAg LTI0OTMsNyArMjQ5Myw3IEBAIHZvaWQgdm13X2ttc19oZWxwZXJfYnVmZmVyX2ZpbmlzaChzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCXJldCA9IHZtd19leGVjYnVmX2ZlbmNlX2NvbW1h bmRzKGZpbGVfcHJpdiwgZGV2X3ByaXYsICZmZW5jZSwKIAkJCQkJIGZpbGVfcHJpdiA/ICZoYW5k bGUgOiBOVUxMKTsKIAlpZiAoYnVmKQotCQl2bXdfZmVuY2Vfc2luZ2xlX2JvKCZidWYtPmJhc2Us IGZlbmNlKTsKKwkJdm13X2JvX2ZlbmNlX3NpbmdsZSgmYnVmLT5iYXNlLCBmZW5jZSk7CiAJaWYg KGZpbGVfcHJpdikKIAkJdm13X2V4ZWNidWZfY29weV9mZW5jZV91c2VyKGRldl9wcml2LCB2bXdf ZnByaXYoZmlsZV9wcml2KSwKIAkJCQkJICAgIHJldCwgdXNlcl9mZW5jZV9yZXAsIGZlbmNlLApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYwppbmRleCBkMDdjNTg1ZTNjMWQuLmU0NGRhN2Ji NDg2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMKQEAgLTIyNSw3ICsyMjUsNyBA QCBzdGF0aWMgdm9pZCB2bXdfdGFrZWRvd25fb3RhYmxlX2Jhc2Uoc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiwKIAkJcmV0ID0gdHRtX2JvX3Jlc2VydmUoYm8sIGZhbHNlLCB0cnVlLCBOVUxM KTsKIAkJQlVHX09OKHJldCAhPSAwKTsKIAotCQl2bXdfZmVuY2Vfc2luZ2xlX2JvKGJvLCBOVUxM KTsKKwkJdm13X2JvX2ZlbmNlX3NpbmdsZShibywgTlVMTCk7CiAJCXR0bV9ib191bnJlc2VydmUo Ym8pOwogCX0KIApAQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyB2b2lkIHZtd19vdGFibGVfYmF0 Y2hfdGFrZWRvd24oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAlyZXQgPSB0dG1fYm9f cmVzZXJ2ZShibywgZmFsc2UsIHRydWUsIE5VTEwpOwogCUJVR19PTihyZXQgIT0gMCk7CiAKLQl2 bXdfZmVuY2Vfc2luZ2xlX2JvKGJvLCBOVUxMKTsKKwl2bXdfYm9fZmVuY2Vfc2luZ2xlKGJvLCBO VUxMKTsKIAl0dG1fYm9fdW5yZXNlcnZlKGJvKTsKIAogCXR0bV9ib191bnJlZigmYmF0Y2gtPm90 YWJsZV9ibyk7CkBAIC02MjAsNyArNjIwLDcgQEAgdm9pZCB2bXdfbW9iX3VuYmluZChzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAogCQl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVv ZigqY21kKSk7CiAJfQogCWlmIChibykgewotCQl2bXdfZmVuY2Vfc2luZ2xlX2JvKGJvLCBOVUxM KTsKKwkJdm13X2JvX2ZlbmNlX3NpbmdsZShibywgTlVMTCk7CiAJCXR0bV9ib191bnJlc2VydmUo Ym8pOwogCX0KIAl2bXdfZmlmb19yZXNvdXJjZV9kZWMoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYyBiL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKaW5kZXggNWFhZjlhYzY1Y2JhLi42ZDJjYWQ3NDRm NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYwpAQCAtMjcsNyAr MjcsNiBAQAogCiAjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgogI2luY2x1ZGUgPGRybS92bXdnZnhf ZHJtLmg+Ci0jaW5jbHVkZSA8ZHJtL3R0bS90dG1fb2JqZWN0Lmg+CiAjaW5jbHVkZSA8ZHJtL3R0 bS90dG1fcGxhY2VtZW50Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlICJ2bXdn ZnhfcmVzb3VyY2VfcHJpdi5oIgpAQCAtMzUsMzAgKzM0LDYgQEAKIAogI2RlZmluZSBWTVdfUkVT X0VWSUNUX0VSUl9DT1VOVCAxMAogCi1zdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCB7Ci0J c3RydWN0IHR0bV9wcmltZV9vYmplY3QgcHJpbWU7Ci0Jc3RydWN0IHZtd19idWZmZXJfb2JqZWN0 IHZibzsKLX07Ci0KLXN0cnVjdCB2bXdfYm9fdXNlcl9yZXAgewotCXVpbnQzMl90IGhhbmRsZTsK LQl1aW50NjRfdCBtYXBfaGFuZGxlOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm13X2J1 ZmZlcl9vYmplY3QgKgotdm13X2J1ZmZlcl9vYmplY3Qoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICpibykKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmpl Y3QsIGJhc2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2Jq ZWN0ICoKLXZtd191c2VyX2J1ZmZlcl9vYmplY3Qoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bykKLXsKLQlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZtd19ibyA9IHZtd19idWZmZXJfb2Jq ZWN0KGJvKTsKLQotCXJldHVybiBjb250YWluZXJfb2Yodm13X2JvLCBzdHJ1Y3Qgdm13X3VzZXJf YnVmZmVyX29iamVjdCwgdmJvKTsKLX0KLQogc3RydWN0IHZtd19yZXNvdXJjZSAqdm13X3Jlc291 cmNlX3JlZmVyZW5jZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiB7CiAJa3JlZl9nZXQoJnJl cy0+a3JlZik7CkBAIC0zMTYsNTA5ICsyOTEsNiBAQCBpbnQgdm13X3VzZXJfbG9va3VwX2hhbmRs ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgot ICogQnVmZmVyIG1hbmFnZW1lbnQuCi0gKi8KLQotLyoqCi0gKiB2bXdfYm9fYWNjX3NpemUgLSBD YWxjdWxhdGUgdGhlIHBpbm5lZCBtZW1vcnkgdXNhZ2Ugb2YgYnVmZmVycwotICoKLSAqIEBkZXZf cHJpdjogUG9pbnRlciB0byBhIHN0cnVjdCB2bXdfcHJpdmF0ZSBpZGVudGlmeWluZyB0aGUgZGV2 aWNlLgotICogQHNpemU6IFRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUuCi0gKiBAdXNlcjogV2hl dGhlciB0aGlzIGlzIGFuIG9yZGluYXJ5IGRtYSBidWZmZXIgb3IgYSB1c2VyIGRtYSBidWZmZXIu Ci0gKi8KLXN0YXRpYyBzaXplX3Qgdm13X2JvX2FjY19zaXplKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsIHNpemVfdCBzaXplLAotCQkJICAgICAgYm9vbCB1c2VyKQotewotCXN0YXRpYyBz aXplX3Qgc3RydWN0X3NpemUsIHVzZXJfc3RydWN0X3NpemU7Ci0Jc2l6ZV90IG51bV9wYWdlcyA9 IFBBR0VfQUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVDsKLQlzaXplX3QgcGFnZV9hcnJheV9zaXpl ID0gdHRtX3JvdW5kX3BvdChudW1fcGFnZXMgKiBzaXplb2Yodm9pZCAqKSk7Ci0KLQlpZiAodW5s aWtlbHkoc3RydWN0X3NpemUgPT0gMCkpIHsKLQkJc2l6ZV90IGJhY2tlbmRfc2l6ZSA9IHR0bV9y b3VuZF9wb3Qodm13X3R0X3NpemUpOwotCi0JCXN0cnVjdF9zaXplID0gYmFja2VuZF9zaXplICsK LQkJCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCkpOwotCQl1 c2VyX3N0cnVjdF9zaXplID0gYmFja2VuZF9zaXplICsKLQkJCXR0bV9yb3VuZF9wb3Qoc2l6ZW9m KHN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0KSk7Ci0JfQotCi0JaWYgKGRldl9wcml2LT5t YXBfbW9kZSA9PSB2bXdfZG1hX2FsbG9jX2NvaGVyZW50KQotCQlwYWdlX2FycmF5X3NpemUgKz0K LQkJCXR0bV9yb3VuZF9wb3QobnVtX3BhZ2VzICogc2l6ZW9mKGRtYV9hZGRyX3QpKTsKLQotCXJl dHVybiAoKHVzZXIpID8gdXNlcl9zdHJ1Y3Rfc2l6ZSA6IHN0cnVjdF9zaXplKSArCi0JCXBhZ2Vf YXJyYXlfc2l6ZTsKLX0KLQotdm9pZCB2bXdfYm9fYm9fZnJlZShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvKQotewotCXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdm13X2JvID0gdm13X2J1 ZmZlcl9vYmplY3QoYm8pOwotCi0Jdm13X2J1ZmZlcl9vYmplY3RfdW5tYXAodm13X2JvKTsKLQlr ZnJlZSh2bXdfYm8pOwotfQotCi1zdGF0aWMgdm9pZCB2bXdfdXNlcl9ib19kZXN0cm95KHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCi17Ci0Jc3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmpl Y3QgKnZtd191c2VyX2JvID0gdm13X3VzZXJfYnVmZmVyX29iamVjdChibyk7Ci0KLQl2bXdfYnVm ZmVyX29iamVjdF91bm1hcCgmdm13X3VzZXJfYm8tPnZibyk7Ci0JdHRtX3ByaW1lX29iamVjdF9r ZnJlZSh2bXdfdXNlcl9ibywgcHJpbWUpOwotfQotCi1pbnQgdm13X2JvX2luaXQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwKLQkJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2bXdfYm8s Ci0JCXNpemVfdCBzaXplLCBzdHJ1Y3QgdHRtX3BsYWNlbWVudCAqcGxhY2VtZW50LAotCQlib29s IGludGVycnVwdGlibGUsCi0JCXZvaWQgKCpib19mcmVlKShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmJvKSkKLXsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9ICZkZXZfcHJpdi0+YmRl djsKLQlzaXplX3QgYWNjX3NpemU7Ci0JaW50IHJldDsKLQlib29sIHVzZXIgPSAoYm9fZnJlZSA9 PSAmdm13X3VzZXJfYm9fZGVzdHJveSk7Ci0KLQlXQVJOX09OX09OQ0UoIWJvX2ZyZWUgJiYgKCF1 c2VyICYmIChib19mcmVlICE9IHZtd19ib19ib19mcmVlKSkpOwotCi0JYWNjX3NpemUgPSB2bXdf Ym9fYWNjX3NpemUoZGV2X3ByaXYsIHNpemUsIHVzZXIpOwotCW1lbXNldCh2bXdfYm8sIDAsIHNp emVvZigqdm13X2JvKSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmdm13X2JvLT5yZXNfbGlzdCk7Ci0K LQlyZXQgPSB0dG1fYm9faW5pdChiZGV2LCAmdm13X2JvLT5iYXNlLCBzaXplLAotCQkJICB0dG1f Ym9fdHlwZV9kZXZpY2UsIHBsYWNlbWVudCwKLQkJCSAgMCwgaW50ZXJydXB0aWJsZSwgYWNjX3Np emUsCi0JCQkgIE5VTEwsIE5VTEwsIGJvX2ZyZWUpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyB2b2lkIHZtd191c2VyX2JvX3JlbGVhc2Uoc3RydWN0IHR0bV9iYXNlX29iamVjdCAqKnBfYmFz ZSkKLXsKLQlzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAqdm13X3VzZXJfYm87Ci0Jc3Ry dWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZSA9ICpwX2Jhc2U7Ci0Jc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibzsKLQotCSpwX2Jhc2UgPSBOVUxMOwotCi0JaWYgKHVubGlrZWx5KGJhc2UgPT0g TlVMTCkpCi0JCXJldHVybjsKLQotCXZtd191c2VyX2JvID0gY29udGFpbmVyX29mKGJhc2UsIHN0 cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0LAotCQkJCSAgIHByaW1lLmJhc2UpOwotCWJvID0g JnZtd191c2VyX2JvLT52Ym8uYmFzZTsKLQl0dG1fYm9fdW5yZWYoJmJvKTsKLX0KLQotc3RhdGlj IHZvaWQgdm13X3VzZXJfYm9fcmVmX29ial9yZWxlYXNlKHN0cnVjdCB0dG1fYmFzZV9vYmplY3Qg KmJhc2UsCi0JCQkJCWVudW0gdHRtX3JlZl90eXBlIHJlZl90eXBlKQotewotCXN0cnVjdCB2bXdf dXNlcl9idWZmZXJfb2JqZWN0ICp1c2VyX2JvOwotCi0JdXNlcl9ibyA9IGNvbnRhaW5lcl9vZihi YXNlLCBzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCwgcHJpbWUuYmFzZSk7Ci0KLQlzd2l0 Y2ggKHJlZl90eXBlKSB7Ci0JY2FzZSBUVE1fUkVGX1NZTkNDUFVfV1JJVEU6Ci0JCXR0bV9ib19z eW5jY3B1X3dyaXRlX3JlbGVhc2UoJnVzZXJfYm8tPnZiby5iYXNlKTsKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJQlVHKCk7Ci0JfQotfQotCi0vKioKLSAqIHZtd191c2VyX2JvX2FsbG9jIC0gQWxs b2NhdGUgYSB1c2VyIGRtYSBidWZmZXIKLSAqCi0gKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBz dHJ1Y3QgZGV2aWNlIHByaXZhdGUuCi0gKiBAdGZpbGU6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRt X29iamVjdF9maWxlIG9uIHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSB1c2VyCi0gKiBvYmplY3QuCi0g KiBAc2l6ZTogU2l6ZSBvZiB0aGUgZG1hIGJ1ZmZlci4KLSAqIEBzaGFyZWFibGU6IEJvb2xlYW4g d2hldGhlciB0aGUgYnVmZmVyIGlzIHNoYXJlYWJsZSB3aXRoIG90aGVyIG9wZW4gZmlsZXMuCi0g KiBAaGFuZGxlOiBQb2ludGVyIHRvIHdoZXJlIHRoZSBoYW5kbGUgdmFsdWUgc2hvdWxkIGJlIGFz c2lnbmVkLgotICogQHBfdmJvOiBQb2ludGVyIHRvIHdoZXJlIHRoZSByZWZjb3VudGVkIHN0cnVj dCB2bXdfYnVmZmVyX29iamVjdCBwb2ludGVyCi0gKiBzaG91bGQgYmUgYXNzaWduZWQuCi0gKi8K LWludCB2bXdfdXNlcl9ib19hbGxvYyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkg ICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJICAgICAgdWludDMyX3Qgc2l6 ZSwKLQkJICAgICAgYm9vbCBzaGFyZWFibGUsCi0JCSAgICAgIHVpbnQzMl90ICpoYW5kbGUsCi0J CSAgICAgIHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqKnBfdmJvLAotCQkgICAgICBzdHJ1Y3Qg dHRtX2Jhc2Vfb2JqZWN0ICoqcF9iYXNlKQotewotCXN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2Jq ZWN0ICp1c2VyX2JvOwotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdG1wOwotCWludCByZXQ7 Ci0KLQl1c2VyX2JvID0ga3phbGxvYyhzaXplb2YoKnVzZXJfYm8pLCBHRlBfS0VSTkVMKTsKLQlp ZiAodW5saWtlbHkoIXVzZXJfYm8pKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRl IGEgYnVmZmVyLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHZtd19ib19p bml0KGRldl9wcml2LCAmdXNlcl9iby0+dmJvLCBzaXplLAotCQkJICAoZGV2X3ByaXYtPmhhc19t b2IpID8KLQkJCSAgJnZtd19zeXNfcGxhY2VtZW50IDoKLQkJCSAgJnZtd192cmFtX3N5c19wbGFj ZW1lbnQsIHRydWUsCi0JCQkgICZ2bXdfdXNlcl9ib19kZXN0cm95KTsKLQlpZiAodW5saWtlbHko cmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JdG1wID0gdHRtX2JvX3JlZmVyZW5jZSgmdXNl cl9iby0+dmJvLmJhc2UpOwotCXJldCA9IHR0bV9wcmltZV9vYmplY3RfaW5pdCh0ZmlsZSwKLQkJ CQkgICAgc2l6ZSwKLQkJCQkgICAgJnVzZXJfYm8tPnByaW1lLAotCQkJCSAgICBzaGFyZWFibGUs Ci0JCQkJICAgIHR0bV9idWZmZXJfdHlwZSwKLQkJCQkgICAgJnZtd191c2VyX2JvX3JlbGVhc2Us Ci0JCQkJICAgICZ2bXdfdXNlcl9ib19yZWZfb2JqX3JlbGVhc2UpOwotCWlmICh1bmxpa2VseShy ZXQgIT0gMCkpIHsKLQkJdHRtX2JvX3VucmVmKCZ0bXApOwotCQlnb3RvIG91dF9ub19iYXNlX29i amVjdDsKLQl9Ci0KLQkqcF92Ym8gPSAmdXNlcl9iby0+dmJvOwotCWlmIChwX2Jhc2UpIHsKLQkJ KnBfYmFzZSA9ICZ1c2VyX2JvLT5wcmltZS5iYXNlOwotCQlrcmVmX2dldCgmKCpwX2Jhc2UpLT5y ZWZjb3VudCk7Ci0JfQotCSpoYW5kbGUgPSB1c2VyX2JvLT5wcmltZS5iYXNlLmhhc2gua2V5Owot Ci1vdXRfbm9fYmFzZV9vYmplY3Q6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiB2bXdfdXNl cl9ib192ZXJpZnlfYWNjZXNzIC0gdmVyaWZ5IGFjY2VzcyBwZXJtaXNzaW9ucyBvbiB0aGlzCi0g KiBidWZmZXIgb2JqZWN0LgotICoKLSAqIEBibzogUG9pbnRlciB0byB0aGUgYnVmZmVyIG9iamVj dCBiZWluZyBhY2Nlc3NlZAotICogQHRmaWxlOiBJZGVudGlmeWluZyB0aGUgY2FsbGVyLgotICov Ci1pbnQgdm13X3VzZXJfYm9fdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KmJvLAotCQkJCSAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUpCi17Ci0Jc3RydWN0IHZt d191c2VyX2J1ZmZlcl9vYmplY3QgKnZtd191c2VyX2JvOwotCi0JaWYgKHVubGlrZWx5KGJvLT5k ZXN0cm95ICE9IHZtd191c2VyX2JvX2Rlc3Ryb3kpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jdm13 X3VzZXJfYm8gPSB2bXdfdXNlcl9idWZmZXJfb2JqZWN0KGJvKTsKLQotCS8qIENoZWNrIHRoYXQg dGhlIGNhbGxlciBoYXMgb3BlbmVkIHRoZSBvYmplY3QuICovCi0JaWYgKGxpa2VseSh0dG1fcmVm X29iamVjdF9leGlzdHModGZpbGUsICZ2bXdfdXNlcl9iby0+cHJpbWUuYmFzZSkpKQotCQlyZXR1 cm4gMDsKLQotCURSTV9FUlJPUigiQ291bGQgbm90IGdyYW50IGJ1ZmZlciBhY2Nlc3MuXG4iKTsK LQlyZXR1cm4gLUVQRVJNOwotfQotCi0vKioKLSAqIHZtd191c2VyX2JvX3N5bmNjcHVfZ3JhYiAt IEdyYWIgYSBzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCBmb3IgY3B1Ci0gKiBhY2Nlc3Ms IGlkbGluZyBwcmV2aW91cyBHUFUgb3BlcmF0aW9ucyBvbiB0aGUgYnVmZmVyIGFuZCBvcHRpb25h bGx5Ci0gKiBibG9ja2luZyBpdCBmb3IgZnVydGhlciBjb21tYW5kIHN1Ym1pc3Npb25zLgotICoK LSAqIEB1c2VyX2JvOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgb2JqZWN0IGJlaW5nIGdyYWJiZWQg Zm9yIENQVSBhY2Nlc3MKLSAqIEB0ZmlsZTogSWRlbnRpZnlpbmcgdGhlIGNhbGxlci4KLSAqIEBm bGFnczogRmxhZ3MgaW5kaWNhdGluZyBob3cgdGhlIGdyYWIgc2hvdWxkIGJlIHBlcmZvcm1lZC4K LSAqCi0gKiBBIGJsb2NraW5nIGdyYWIgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkIHdo ZW4gQHRmaWxlIGlzIGNsb3NlZC4KLSAqLwotc3RhdGljIGludCB2bXdfdXNlcl9ib19zeW5jY3B1 X2dyYWIoc3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmplY3QgKnVzZXJfYm8sCi0JCQkJCXN0cnVj dCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJCQl1aW50MzJfdCBmbGFncykKLXsKLQlzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gJnVzZXJfYm8tPnZiby5iYXNlOwotCWJvb2wgZXhp c3RlZDsKLQlpbnQgcmV0OwotCi0JaWYgKGZsYWdzICYgZHJtX3Ztd19zeW5jY3B1X2FsbG93X2Nz KSB7Ci0JCWJvb2wgbm9uYmxvY2sgPSAhIShmbGFncyAmIGRybV92bXdfc3luY2NwdV9kb250Ymxv Y2spOwotCQlsb25nIGxyZXQ7Ci0KLQkJbHJldCA9IHJlc2VydmF0aW9uX29iamVjdF93YWl0X3Rp bWVvdXRfcmN1KGJvLT5yZXN2LCB0cnVlLCB0cnVlLAotCQkJCQkJCSAgIG5vbmJsb2NrID8gMCA6 IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQkJaWYgKCFscmV0KQotCQkJcmV0dXJuIC1FQlVTWTsK LQkJZWxzZSBpZiAobHJldCA8IDApCi0JCQlyZXR1cm4gbHJldDsKLQkJcmV0dXJuIDA7Ci0JfQot Ci0JcmV0ID0gdHRtX2JvX3N5bmNjcHVfd3JpdGVfZ3JhYgotCQkoYm8sICEhKGZsYWdzICYgZHJt X3Ztd19zeW5jY3B1X2RvbnRibG9jaykpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCXJl dHVybiByZXQ7Ci0KLQlyZXQgPSB0dG1fcmVmX29iamVjdF9hZGQodGZpbGUsICZ1c2VyX2JvLT5w cmltZS5iYXNlLAotCQkJCSBUVE1fUkVGX1NZTkNDUFVfV1JJVEUsICZleGlzdGVkLCBmYWxzZSk7 Ci0JaWYgKHJldCAhPSAwIHx8IGV4aXN0ZWQpCi0JCXR0bV9ib19zeW5jY3B1X3dyaXRlX3JlbGVh c2UoJnVzZXJfYm8tPnZiby5iYXNlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogdm13 X3VzZXJfYm9fc3luY2NwdV9yZWxlYXNlIC0gUmVsZWFzZSBhIHByZXZpb3VzIGdyYWIgZm9yIENQ VSBhY2Nlc3MsCi0gKiBhbmQgdW5ibG9jayBjb21tYW5kIHN1Ym1pc3Npb24gb24gdGhlIGJ1ZmZl ciBpZiBibG9ja2VkLgotICoKLSAqIEBoYW5kbGU6IEhhbmRsZSBpZGVudGlmeWluZyB0aGUgYnVm ZmVyIG9iamVjdC4KLSAqIEB0ZmlsZTogSWRlbnRpZnlpbmcgdGhlIGNhbGxlci4KLSAqIEBmbGFn czogRmxhZ3MgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiByZWxlYXNlLgotICovCi1zdGF0aWMgaW50 IHZtd191c2VyX2JvX3N5bmNjcHVfcmVsZWFzZSh1aW50MzJfdCBoYW5kbGUsCi0JCQkJCSAgIHN0 cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJCQkgICB1aW50MzJfdCBmbGFncykKLXsK LQlpZiAoIShmbGFncyAmIGRybV92bXdfc3luY2NwdV9hbGxvd19jcykpCi0JCXJldHVybiB0dG1f cmVmX29iamVjdF9iYXNlX3VucmVmKHRmaWxlLCBoYW5kbGUsCi0JCQkJCQkgVFRNX1JFRl9TWU5D Q1BVX1dSSVRFKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHZtd191c2VyX2JvX3N5bmNj cHVfcmVsZWFzZSAtIGlvY3RsIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgc3luY2NwdQotICog ZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBAZGV2OiBJZGVudGlmaWVzIHRoZSBkcm0gZGV2aWNlLgot ICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50LgotICogQGZpbGVfcHJpdjog SWRlbnRpZmllcyB0aGUgY2FsbGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBp b2N0bCBhcmd1bWVudHMgZm9yIHZhbGlkaXR5IGFuZCBjYWxscyB0aGUKLSAqIHJlbGV2YW50IHN5 bmNjcHUgZnVuY3Rpb25zLgotICovCi1pbnQgdm13X3VzZXJfYm9fc3luY2NwdV9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJCSAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV92bXdfc3luY2NwdV9hcmcgKmFyZyA9Ci0JCShzdHJ1 Y3QgZHJtX3Ztd19zeW5jY3B1X2FyZyAqKSBkYXRhOwotCXN0cnVjdCB2bXdfYnVmZmVyX29iamVj dCAqdmJvOwotCXN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICp1c2VyX2JvOwotCXN0cnVj dCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOwot CXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJ1ZmZlcl9iYXNlOwotCWludCByZXQ7Ci0KLQlpZiAo KGFyZy0+ZmxhZ3MgJiAoZHJtX3Ztd19zeW5jY3B1X3JlYWQgfCBkcm1fdm13X3N5bmNjcHVfd3Jp dGUpKSA9PSAwCi0JICAgIHx8IChhcmctPmZsYWdzICYgfihkcm1fdm13X3N5bmNjcHVfcmVhZCB8 IGRybV92bXdfc3luY2NwdV93cml0ZSB8Ci0JCQkgICAgICAgZHJtX3Ztd19zeW5jY3B1X2RvbnRi bG9jayB8Ci0JCQkgICAgICAgZHJtX3Ztd19zeW5jY3B1X2FsbG93X2NzKSkgIT0gMCkgewotCQlE Uk1fRVJST1IoIklsbGVnYWwgc3luY2NwdSBmbGFncy5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlzd2l0Y2ggKGFyZy0+b3ApIHsKLQljYXNlIGRybV92bXdfc3luY2NwdV9ncmFiOgot CQlyZXQgPSB2bXdfdXNlcl9ib19sb29rdXAodGZpbGUsIGFyZy0+aGFuZGxlLCAmdmJvLAotCQkJ CQkgICAgICZidWZmZXJfYmFzZSk7Ci0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCQlyZXR1 cm4gcmV0OwotCi0JCXVzZXJfYm8gPSBjb250YWluZXJfb2YodmJvLCBzdHJ1Y3Qgdm13X3VzZXJf YnVmZmVyX29iamVjdCwKLQkJCQkgICAgICAgdmJvKTsKLQkJcmV0ID0gdm13X3VzZXJfYm9fc3lu Y2NwdV9ncmFiKHVzZXJfYm8sIHRmaWxlLCBhcmctPmZsYWdzKTsKLQkJdm13X2JvX3VucmVmZXJl bmNlKCZ2Ym8pOwotCQl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJ1ZmZlcl9iYXNlKTsKLQkJaWYg KHVubGlrZWx5KHJldCAhPSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYKLQkJCSAgICAgcmV0 ICE9IC1FQlVTWSkpIHsKLQkJCURSTV9FUlJPUigiRmFpbGVkIHN5bmNjcHUgZ3JhYiBvbiBoYW5k bGUgMHglMDh4LlxuIiwKLQkJCQkgICh1bnNpZ25lZCBpbnQpIGFyZy0+aGFuZGxlKTsKLQkJCXJl dHVybiByZXQ7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBkcm1fdm13X3N5bmNjcHVfcmVsZWFzZToK LQkJcmV0ID0gdm13X3VzZXJfYm9fc3luY2NwdV9yZWxlYXNlKGFyZy0+aGFuZGxlLCB0ZmlsZSwK LQkJCQkJCSAgYXJnLT5mbGFncyk7Ci0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJCURS TV9FUlJPUigiRmFpbGVkIHN5bmNjcHUgcmVsZWFzZSBvbiBoYW5kbGUgMHglMDh4LlxuIiwKLQkJ CQkgICh1bnNpZ25lZCBpbnQpIGFyZy0+aGFuZGxlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHN5bmNjcHUgb3BlcmF0aW9u LlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgdm13 X2JvX2FsbG9jX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCSAg ICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKLQl1bmlvbiBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9h cmcgKmFyZyA9Ci0JICAgICh1bmlvbiBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9hcmcgKilkYXRhOwot CXN0cnVjdCBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9yZXEgKnJlcSA9ICZhcmctPnJlcTsKLQlzdHJ1 Y3QgZHJtX3Ztd19kbWFidWZfcmVwICpyZXAgPSAmYXJnLT5yZXA7Ci0Jc3RydWN0IHZtd19idWZm ZXJfb2JqZWN0ICp2Ym87Ci0JdWludDMyX3QgaGFuZGxlOwotCWludCByZXQ7Ci0KLQlyZXQgPSB0 dG1fcmVhZF9sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtLCB0cnVlKTsKLQlpZiAodW5s aWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gdm13X3VzZXJfYm9fYWxs b2MoZGV2X3ByaXYsIHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwKLQkJCQlyZXEtPnNpemUs IGZhbHNlLCAmaGFuZGxlLCAmdmJvLAotCQkJCU5VTEwpOwotCWlmICh1bmxpa2VseShyZXQgIT0g MCkpCi0JCWdvdG8gb3V0X25vX2JvOwotCi0JcmVwLT5oYW5kbGUgPSBoYW5kbGU7Ci0JcmVwLT5t YXBfaGFuZGxlID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZ2Ym8tPmJhc2Uudm1hX25vZGUp OwotCXJlcC0+Y3VyX2dtcl9pZCA9IGhhbmRsZTsKLQlyZXAtPmN1cl9nbXJfb2Zmc2V0ID0gMDsK LQotCXZtd19ib191bnJlZmVyZW5jZSgmdmJvKTsKLQotb3V0X25vX2JvOgotCXR0bV9yZWFkX3Vu bG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1p bnQgdm13X2JvX3VucmVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs Ci0JCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX3Zt d191bnJlZl9kbWFidWZfYXJnICphcmcgPQotCSAgICAoc3RydWN0IGRybV92bXdfdW5yZWZfZG1h YnVmX2FyZyAqKWRhdGE7Ci0KLQlyZXR1cm4gdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih2bXdf ZnByaXYoZmlsZV9wcml2KS0+dGZpbGUsCi0JCQkJCSBhcmctPmhhbmRsZSwKLQkJCQkJIFRUTV9S RUZfVVNBR0UpOwotfQotCi1pbnQgdm13X3VzZXJfYm9fbG9va3VwKHN0cnVjdCB0dG1fb2JqZWN0 X2ZpbGUgKnRmaWxlLAotCQkJICAgdWludDMyX3QgaGFuZGxlLCBzdHJ1Y3Qgdm13X2J1ZmZlcl9v YmplY3QgKipvdXQsCi0JCQkgICBzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICoqcF9iYXNlKQotewot CXN0cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICp2bXdfdXNlcl9ibzsKLQlzdHJ1Y3QgdHRt X2Jhc2Vfb2JqZWN0ICpiYXNlOwotCi0JYmFzZSA9IHR0bV9iYXNlX29iamVjdF9sb29rdXAodGZp bGUsIGhhbmRsZSk7Ci0JaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIGJ1ZmZlciBvYmplY3QgaGFuZGxlIDB4JTA4bHhcbiIsCi0JCSAgICAgICAodW5zaWdu ZWQgbG9uZyloYW5kbGUpOwotCQlyZXR1cm4gLUVTUkNIOwotCX0KLQotCWlmICh1bmxpa2VseSh0 dG1fYmFzZV9vYmplY3RfdHlwZShiYXNlKSAhPSB0dG1fYnVmZmVyX3R5cGUpKSB7Ci0JCXR0bV9i YXNlX29iamVjdF91bnJlZigmYmFzZSk7Ci0JCXByX2VycigiSW52YWxpZCBidWZmZXIgb2JqZWN0 IGhhbmRsZSAweCUwOGx4XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jdm13X3VzZXJfYm8gPSBjb250YWluZXJfb2YoYmFzZSwg c3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmplY3QsCi0JCQkJICAgcHJpbWUuYmFzZSk7Ci0JKHZv aWQpdHRtX2JvX3JlZmVyZW5jZSgmdm13X3VzZXJfYm8tPnZiby5iYXNlKTsKLQlpZiAocF9iYXNl KQotCQkqcF9iYXNlID0gYmFzZTsKLQllbHNlCi0JCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFz ZSk7Ci0JKm91dCA9ICZ2bXdfdXNlcl9iby0+dmJvOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB2 bXdfdXNlcl9ib19yZWZlcmVuY2Uoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCQkg ICAgICBzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibywKLQkJCSAgICAgIHVpbnQzMl90ICpo YW5kbGUpCi17Ci0Jc3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmplY3QgKnVzZXJfYm87Ci0KLQlp ZiAodmJvLT5iYXNlLmRlc3Ryb3kgIT0gdm13X3VzZXJfYm9fZGVzdHJveSkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQl1c2VyX2JvID0gY29udGFpbmVyX29mKHZibywgc3RydWN0IHZtd191c2VyX2J1 ZmZlcl9vYmplY3QsIHZibyk7Ci0KLQkqaGFuZGxlID0gdXNlcl9iby0+cHJpbWUuYmFzZS5oYXNo LmtleTsKLQlyZXR1cm4gdHRtX3JlZl9vYmplY3RfYWRkKHRmaWxlLCAmdXNlcl9iby0+cHJpbWUu YmFzZSwKLQkJCQkgIFRUTV9SRUZfVVNBR0UsIE5VTEwsIGZhbHNlKTsKLX0KLQotLyoqCi0gKiB2 bXdfZHVtYl9jcmVhdGUgLSBDcmVhdGUgYSBkdW1iIGttcyBidWZmZXIKLSAqCi0gKiBAZmlsZV9w cml2OiBQb2ludGVyIHRvIGEgc3RydWN0IGRybV9maWxlIGlkZW50aWZ5aW5nIHRoZSBjYWxsZXIu Ci0gKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBkcm0gZGV2aWNlLgotICogQGFyZ3M6IFBvaW50ZXIg dG8gYSBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgc3RydWN0dXJlCi0gKgotICogVGhpcyBp cyBhIGRyaXZlciBjYWxsYmFjayBmb3IgdGhlIGNvcmUgZHJtIGNyZWF0ZV9kdW1iIGZ1bmN0aW9u YWxpdHkuCi0gKiBOb3RlIHRoYXQgdGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHZtd19ib19h bGxvYyBpb2N0bCwgZXhjZXB0Ci0gKiB0aGF0IHRoZSBhcmd1bWVudHMgaGF2ZSBhIGRpZmZlcmVu dCBmb3JtYXQuCi0gKi8KLWludCB2bXdfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCi0JCSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkgICAgc3RydWN0IGRybV9t b2RlX2NyZWF0ZV9kdW1iICphcmdzKQotewotCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYg PSB2bXdfcHJpdihkZXYpOwotCXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvOwotCWludCBy ZXQ7Ci0KLQlhcmdzLT5waXRjaCA9IGFyZ3MtPndpZHRoICogKChhcmdzLT5icHAgKyA3KSAvIDgp OwotCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKLQotCXJldCA9IHR0 bV9yZWFkX2xvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0sIHRydWUpOwotCWlmICh1bmxp a2VseShyZXQgIT0gMCkpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB2bXdfdXNlcl9ib19hbGxv YyhkZXZfcHJpdiwgdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlLAotCQkJCSAgICBhcmdzLT5z aXplLCBmYWxzZSwgJmFyZ3MtPmhhbmRsZSwKLQkJCQkgICAgJnZibywgTlVMTCk7Ci0JaWYgKHVu bGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfbm9fYm87Ci0KLQl2bXdfYm9fdW5yZWZlcmVu Y2UoJnZibyk7Ci1vdXRfbm9fYm86Ci0JdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2 YXRpb25fc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHZtd19kdW1iX21hcF9vZmZz ZXQgLSBSZXR1cm4gdGhlIGFkZHJlc3Mgc3BhY2Ugb2Zmc2V0IG9mIGEgZHVtYiBidWZmZXIKLSAq Ci0gKiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgc3RydWN0IGRybV9maWxlIGlkZW50aWZ5aW5n IHRoZSBjYWxsZXIuCi0gKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBkcm0gZGV2aWNlLgotICogQGhh bmRsZTogSGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBkdW1iIGJ1ZmZlci4KLSAqIEBvZmZzZXQ6IFRo ZSBhZGRyZXNzIHNwYWNlIG9mZnNldCByZXR1cm5lZC4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVy IGNhbGxiYWNrIGZvciB0aGUgY29yZSBkcm0gZHVtYl9tYXBfb2Zmc2V0IGZ1bmN0aW9uYWxpdHku Ci0gKi8KLWludCB2bXdfZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAotCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxlLAotCQkJdWludDY0 X3QgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJp dihmaWxlX3ByaXYpLT50ZmlsZTsKLQlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKm91dF9idWY7 Ci0JaW50IHJldDsKLQotCXJldCA9IHZtd191c2VyX2JvX2xvb2t1cCh0ZmlsZSwgaGFuZGxlLCAm b3V0X2J1ZiwgTlVMTCk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCSpv ZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm91dF9idWYtPmJhc2Uudm1hX25vZGUp OwotCXZtd19ib191bnJlZmVyZW5jZSgmb3V0X2J1Zik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgot ICogdm13X2R1bWJfZGVzdHJveSAtIERlc3Ryb3kgYSBkdW1iIGJvZmZlcgotICoKLSAqIEBmaWxl X3ByaXY6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX2ZpbGUgaWRlbnRpZnlpbmcgdGhlIGNhbGxl ci4KLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIGRybSBkZXZpY2UuCi0gKiBAaGFuZGxlOiBIYW5k bGUgaWRlbnRpZnlpbmcgdGhlIGR1bWIgYnVmZmVyLgotICoKLSAqIFRoaXMgaXMgYSBkcml2ZXIg Y2FsbGJhY2sgZm9yIHRoZSBjb3JlIGRybSBkdW1iX2Rlc3Ryb3kgZnVuY3Rpb25hbGl0eS4KLSAq LwotaW50IHZtd19kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCSAg ICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgICB1aW50MzJfdCBoYW5kbGUpCi17Ci0J cmV0dXJuIHR0bV9yZWZfb2JqZWN0X2Jhc2VfdW5yZWYodm13X2Zwcml2KGZpbGVfcHJpdiktPnRm aWxlLAotCQkJCQkgaGFuZGxlLCBUVE1fUkVGX1VTQUdFKTsKLX0KLQogLyoqCiAgKiB2bXdfcmVz b3VyY2VfYnVmX2FsbG9jIC0gQWxsb2NhdGUgYSBiYWNrdXAgYnVmZmVyIGZvciBhIHJlc291cmNl LgogICoKQEAgLTExODIsMTA5ICs2NTQsMzkgQEAgaW50IHZtd19yZXNvdXJjZV92YWxpZGF0ZShz dHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiAJcmV0dXJuIHJldDsKIH0KIAotLyoqCi0gKiB2bXdf ZmVuY2Vfc2luZ2xlX2JvIC0gVXRpbGl0eSBmdW5jdGlvbiB0byBmZW5jZSBhIHNpbmdsZSBUVE0g YnVmZmVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHdpdGhvdXQgdW5yZXNlcnZp bmcgaXQuCi0gKgotICogQGJvOiAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgdG8gZmVuY2UuCi0gKiBAZmVuY2U6ICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGZlbmNlLiBJZiBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAqICAgICAgICAgICAgICAg ICAgaW5zZXJ0IGEgZmVuY2UgaW50byB0aGUgY29tbWFuZCBzdHJlYW0uLgotICoKLSAqIENvbnRy YXJ5IHRvIHRoZSB0dG1fZXUgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLCBpdCB0YWtlcyBvbmx5 Ci0gKiBhIHNpbmdsZSBidWZmZXIgb2JqZWN0IGluc3RlYWQgb2YgYSBsaXN0LCBhbmQgaXQgYWxz byBkb2Vzbid0Ci0gKiB1bnJlc2VydmUgdGhlIGJ1ZmZlciBvYmplY3QsIHdoaWNoIG5lZWRzIHRv IGJlIGRvbmUgc2VwYXJhdGVseS4KLSAqLwotdm9pZCB2bXdfZmVuY2Vfc2luZ2xlX2JvKHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkgc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNl KQotewotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7Ci0KLQlzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJY29udGFpbmVyX29mKGJkZXYsIHN0cnVjdCB2bXdf cHJpdmF0ZSwgYmRldik7Ci0KLQlpZiAoZmVuY2UgPT0gTlVMTCkgewotCQl2bXdfZXhlY2J1Zl9m ZW5jZV9jb21tYW5kcyhOVUxMLCBkZXZfcHJpdiwgJmZlbmNlLCBOVUxMKTsKLQkJcmVzZXJ2YXRp b25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKGJvLT5yZXN2LCAmZmVuY2UtPmJhc2UpOwotCQlkbWFf ZmVuY2VfcHV0KCZmZW5jZS0+YmFzZSk7Ci0JfSBlbHNlCi0JCXJlc2VydmF0aW9uX29iamVjdF9h ZGRfZXhjbF9mZW5jZShiby0+cmVzdiwgJmZlbmNlLT5iYXNlKTsKLX0KIAogLyoqCi0gKiB2bXdf cmVzb3VyY2VfbW92ZV9ub3RpZnkgLSBUVE0gbW92ZV9ub3RpZnlfY2FsbGJhY2sKKyAqIHZtd19y ZXNvdXJjZV91bmJpbmRfbGlzdAogICoKLSAqIEBibzogVGhlIFRUTSBidWZmZXIgb2JqZWN0IGFi b3V0IHRvIG1vdmUuCi0gKiBAbWVtOiBUaGUgc3RydWN0IHR0bV9tZW1fcmVnIGluZGljYXRpbmcg dG8gd2hhdCBtZW1vcnkKLSAqICAgICAgIHJlZ2lvbiB0aGUgbW92ZSBpcyB0YWtpbmcgcGxhY2Uu CisgKiBAdmJvOiBQb2ludGVyIHRvIHRoZSBjdXJyZW50IGJhY2tpbmcgTU9CLgogICoKICAqIEV2 aWN0cyB0aGUgR3Vlc3QgQmFja2VkIGhhcmR3YXJlIHJlc291cmNlIGlmIHRoZSBiYWNrdXAKICAq IGJ1ZmZlciBpcyBiZWluZyBtb3ZlZCBvdXQgb2YgTU9CIG1lbW9yeS4KLSAqIE5vdGUgdGhhdCB0 aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgcmFjZSB3aXRoIHRoZSByZXNvdXJjZQotICogdmFsaWRh dGlvbiBjb2RlIGFzIGxvbmcgYXMgaXQgYWNjZXNzZXMgb25seSBtZW1iZXJzIG9mIHN0cnVjdAot ICogcmVzb3VyY2UgdGhhdCByZW1haW4gc3RhdGljIHdoaWxlIGJvOjpyZXMgaXMgIU5VTEwgYW5k Ci0gKiB3aGlsZSB3ZSBoYXZlIEBibyByZXNlcnZlZC4gc3RydWN0IHJlc291cmNlOjpiYWNrdXAg aXMgKm5vdCogYQotICogc3RhdGljIG1lbWJlci4gVGhlIHJlc291cmNlIHZhbGlkYXRpb24gY29k ZSB3aWxsIHRha2UgY2FyZQotICogdG8gc2V0IEBibzo6cmVzIHRvIE5VTEwsIHdoaWxlIGhhdmlu ZyBAYm8gcmVzZXJ2ZWQgd2hlbiB0aGUKLSAqIGJ1ZmZlciBpcyBubyBsb25nZXIgYm91bmQgdG8g dGhlIHJlc291cmNlLCBzbyBAYm86cmVzIGNhbiBiZQotICogdXNlZCB0byBkZXRlcm1pbmUgd2hl dGhlciB0aGVyZSBpcyBhIG5lZWQgdG8gdW5iaW5kIGFuZCB3aGV0aGVyCi0gKiBpdCBpcyBzYWZl IHRvIHVuYmluZC4KKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHJhY2Ugd2l0 aCB0aGUgcmVzb3VyY2UKKyAqIHZhbGlkYXRpb24gY29kZSwgc2luY2UgcmVzb3VyY2UgdmFsaWRh dGlvbiBhbmQgZXZpY3Rpb24KKyAqIGJvdGggcmVxdWlyZSB0aGUgYmFja3VwIGJ1ZmZlciB0byBi ZSByZXNlcnZlZC4KICAqLwotdm9pZCB2bXdfcmVzb3VyY2VfbW92ZV9ub3RpZnkoc3RydWN0IHR0 bV9idWZmZXJfb2JqZWN0ICpibywKLQkJCSAgICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQor dm9pZCB2bXdfcmVzb3VyY2VfdW5iaW5kX2xpc3Qoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2 Ym8pCiB7Ci0Jc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym87Ci0KLQlpZiAobWVtID09IE5V TEwpCi0JCXJldHVybjsKLQotCWlmIChiby0+ZGVzdHJveSAhPSB2bXdfYm9fYm9fZnJlZSAmJgot CSAgICBiby0+ZGVzdHJveSAhPSB2bXdfdXNlcl9ib19kZXN0cm95KQotCQlyZXR1cm47Ci0KLQl2 Ym8gPSBjb250YWluZXJfb2YoYm8sIHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCwgYmFzZSk7Ci0K LQkvKgotCSAqIEtpbGwgYW55IGNhY2hlZCBrZXJuZWwgbWFwcyBiZWZvcmUgbW92ZS4gQW4gb3B0 aW1pemF0aW9uIGNvdWxkCi0JICogYmUgdG8gZG8gdGhpcyBpZmYgc291cmNlIG9yIGRlc3RpbmF0 aW9uIG1lbW9yeSB0eXBlIGlzIFZSQU0uCi0JICovCi0Jdm13X2J1ZmZlcl9vYmplY3RfdW5tYXAo dmJvKTsKIAotCWlmIChtZW0tPm1lbV90eXBlICE9IFZNV19QTF9NT0IpIHsKLQkJc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzLCAqbjsKLQkJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgdmFsX2J1 ZjsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsICpuZXh0OworCXN0cnVjdCB0dG1fdmFsaWRh dGVfYnVmZmVyIHZhbF9idWYgPSB7CisJCS5ibyA9ICZ2Ym8tPmJhc2UsCisJCS5zaGFyZWQgPSBm YWxzZQorCX07CiAKLQkJdmFsX2J1Zi5ibyA9IGJvOwotCQl2YWxfYnVmLnNoYXJlZCA9IGZhbHNl OworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZiby0+YmFzZS5yZXN2LT5sb2NrLmJhc2UpOworCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIG5leHQsICZ2Ym8tPnJlc19saXN0LCBtb2JfaGVh ZCkgeworCQlpZiAoIXJlcy0+ZnVuYy0+dW5iaW5kKQorCQkJY29udGludWU7CiAKLQkJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKHJlcywgbiwgJnZiby0+cmVzX2xpc3QsIG1vYl9oZWFkKSB7Ci0K LQkJCWlmICh1bmxpa2VseShyZXMtPmZ1bmMtPnVuYmluZCA9PSBOVUxMKSkKLQkJCQljb250aW51 ZTsKLQotCQkJKHZvaWQpIHJlcy0+ZnVuYy0+dW5iaW5kKHJlcywgdHJ1ZSwgJnZhbF9idWYpOwot CQkJcmVzLT5iYWNrdXBfZGlydHkgPSB0cnVlOwotCQkJcmVzLT5yZXNfZGlydHkgPSBmYWxzZTsK LQkJCWxpc3RfZGVsX2luaXQoJnJlcy0+bW9iX2hlYWQpOwotCQl9Ci0KLQkJKHZvaWQpIHR0bV9i b193YWl0KGJvLCBmYWxzZSwgZmFsc2UpOworCQkodm9pZCkgcmVzLT5mdW5jLT51bmJpbmQocmVz LCB0cnVlLCAmdmFsX2J1Zik7CisJCXJlcy0+YmFja3VwX2RpcnR5ID0gdHJ1ZTsKKwkJcmVzLT5y ZXNfZGlydHkgPSBmYWxzZTsKKwkJbGlzdF9kZWxfaW5pdCgmcmVzLT5tb2JfaGVhZCk7CiAJfQot fQotCi0KLS8qKgotICogdm13X3Jlc291cmNlX3N3YXBfbm90aWZ5IC0gc3dhcG91dCBub3RpZnkg Y2FsbGJhY2suCi0gKgotICogQGJvOiBUaGUgYnVmZmVyIG9iamVjdCB0byBiZSBzd2FwcGVkIG91 dC4KLSAqLwotdm9pZCB2bXdfcmVzb3VyY2Vfc3dhcF9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibykKLXsKLQlpZiAoYm8tPmRlc3Ryb3kgIT0gdm13X2JvX2JvX2ZyZWUgJiYKLQkg ICAgYm8tPmRlc3Ryb3kgIT0gdm13X3VzZXJfYm9fZGVzdHJveSkKLQkJcmV0dXJuOwogCi0JLyog S2lsbCBhbnkgY2FjaGVkIGtlcm5lbCBtYXBzIGJlZm9yZSBzd2Fwb3V0ICovCi0Jdm13X2J1ZmZl cl9vYmplY3RfdW5tYXAodm13X2J1ZmZlcl9vYmplY3QoYm8pKTsKKwkodm9pZCkgdHRtX2JvX3dh aXQoJnZiby0+YmFzZSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogCkBAIC0xMzcwLDcgKzc3Miw3IEBA IHZvaWQgdm13X3F1ZXJ5X21vdmVfbm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8s CiAKIAkJLyogQ3JlYXRlIGEgZmVuY2UgYW5kIGF0dGFjaCB0aGUgQk8gdG8gaXQgKi8KIAkJKHZv aWQpIHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9wcml2LCAmZmVuY2UsIE5V TEwpOwotCQl2bXdfZmVuY2Vfc2luZ2xlX2JvKGJvLCBmZW5jZSk7CisJCXZtd19ib19mZW5jZV9z aW5nbGUoYm8sIGZlbmNlKTsKIAogCQlpZiAoZmVuY2UgIT0gTlVMTCkKIAkJCXZtd19mZW5jZV9v YmpfdW5yZWZlcmVuY2UoJmZlbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X3NoYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2hhZGVy LmMKaW5kZXggZjZjOTM5ZjNmZjVlLi40ZWMxYTkxOTkwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X3NoYWRlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X3NoYWRlci5jCkBAIC0zMDYsNyArMzA2LDcgQEAgc3RhdGljIGludCB2bXdfZ2Jf c2hhZGVyX3VuYmluZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJKHZvaWQpIHZtd19leGVj YnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9wcml2LAogCQkJCQkgICZmZW5jZSwgTlVMTCk7 CiAKLQl2bXdfZmVuY2Vfc2luZ2xlX2JvKHZhbF9idWYtPmJvLCBmZW5jZSk7CisJdm13X2JvX2Zl bmNlX3NpbmdsZSh2YWxfYnVmLT5ibywgZmVuY2UpOwogCiAJaWYgKGxpa2VseShmZW5jZSAhPSBO VUxMKSkKIAkJdm13X2ZlbmNlX29ial91bnJlZmVyZW5jZSgmZmVuY2UpOwpAQCAtNTM3LDcgKzUz Nyw3IEBAIHN0YXRpYyBpbnQgdm13X2R4X3NoYWRlcl91bmJpbmQoc3RydWN0IHZtd19yZXNvdXJj ZSAqcmVzLAogCiAJKHZvaWQpIHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9w cml2LAogCQkJCQkgICZmZW5jZSwgTlVMTCk7Ci0Jdm13X2ZlbmNlX3NpbmdsZV9ibyh2YWxfYnVm LT5ibywgZmVuY2UpOworCXZtd19ib19mZW5jZV9zaW5nbGUodmFsX2J1Zi0+Ym8sIGZlbmNlKTsK IAogCWlmIChsaWtlbHkoZmVuY2UgIT0gTlVMTCkpCiAJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVu Y2UoJmZlbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1 cmZhY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYwppbmRleCAy YjJlOGFhNzExNGEuLmYyYWY1MzYxMzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC92bXdnZnhfc3VyZmFjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X3N1cmZhY2UuYwpAQCAtNDY4LDcgKzQ2OCw3IEBAIHN0YXRpYyBpbnQgdm13X2xlZ2FjeV9zcmZf ZG1hKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKIAkodm9pZCkgdm13X2V4ZWNidWZfZmVuY2Vf Y29tbWFuZHMoTlVMTCwgZGV2X3ByaXYsCiAJCQkJCSAgJmZlbmNlLCBOVUxMKTsKIAotCXZtd19m ZW5jZV9zaW5nbGVfYm8odmFsX2J1Zi0+Ym8sIGZlbmNlKTsKKwl2bXdfYm9fZmVuY2Vfc2luZ2xl KHZhbF9idWYtPmJvLCBmZW5jZSk7CiAKIAlpZiAobGlrZWx5KGZlbmNlICE9IE5VTEwpKQogCQl2 bXdfZmVuY2Vfb2JqX3VucmVmZXJlbmNlKCZmZW5jZSk7CkBAIC0xMjEwLDcgKzEyMTAsNyBAQCBz dGF0aWMgaW50IHZtd19nYl9zdXJmYWNlX3VuYmluZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMs CiAJKHZvaWQpIHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9wcml2LAogCQkJ CQkgICZmZW5jZSwgTlVMTCk7CiAKLQl2bXdfZmVuY2Vfc2luZ2xlX2JvKHZhbF9idWYtPmJvLCBm ZW5jZSk7CisJdm13X2JvX2ZlbmNlX3NpbmdsZSh2YWxfYnVmLT5ibywgZmVuY2UpOwogCiAJaWYg KGxpa2VseShmZW5jZSAhPSBOVUxMKSkKIAkJdm13X2ZlbmNlX29ial91bnJlZmVyZW5jZSgmZmVu Y2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdHRtX2J1ZmZl ci5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdHRtX2J1ZmZlci5jCmluZGV4IDA5 MzFmNDM5MTNiMS4uMjM5ZTFlZGYwOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF90dG1fYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfdHRtX2J1ZmZlci5jCkBAIC04NTIsNyArODUyLDcgQEAgc3RhdGljIHZvaWQgdm13X21vdmVf bm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCQkgICAgYm9vbCBldmljdCwK IAkJCSAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKIHsKLQl2bXdfcmVzb3VyY2VfbW92ZV9u b3RpZnkoYm8sIG1lbSk7CisJdm13X2JvX21vdmVfbm90aWZ5KGJvLCBtZW0pOwogCXZtd19xdWVy eV9tb3ZlX25vdGlmeShibywgbWVtKTsKIH0KIApAQCAtODY0LDcgKzg2NCw3IEBAIHN0YXRpYyB2 b2lkIHZtd19tb3ZlX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogICovCiBz dGF0aWMgdm9pZCB2bXdfc3dhcF9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykK IHsKLQl2bXdfcmVzb3VyY2Vfc3dhcF9ub3RpZnkoYm8pOworCXZtd19ib19zd2FwX25vdGlmeShi byk7CiAJKHZvaWQpIHR0bV9ib193YWl0KGJvLCBmYWxzZSwgZmFsc2UpOwogfQogCi0tIAoyLjE4 LjAucmMxCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK