From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH v3 15/18] drm/i915: Rewrite fb rotation GTT handling Date: Wed, 20 Jan 2016 21:05:36 +0200 Message-ID: <1453316739-13296-16-git-send-email-ville.syrjala@linux.intel.com> References: <1453316739-13296-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 463DF6E951 for ; Wed, 20 Jan 2016 11:06:29 -0800 (PST) In-Reply-To: <1453316739-13296-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClJl ZG8gdGhlIGZiIHJvdGF0aW9uIGhhbmRsaW5nIGluIG9yZGVyIHRvOgotIGVsaW1pbmF0ZSB0aGUg TlYxMiBzcGVjaWFsIGNhc2luZwotIGhhbmRsZSBmYi0+b2Zmc2V0c1tdIHByb3Blcmx5Ci0gbWFr ZSB0aGUgcm90YXRpb24gaGFuZGxpbmcgcmVhc2llciBmb3IgdGhlIHBsYW5lIGNvZGUKClRvIGFj aGlldmUgdGhlc2UgZ29hbHMgd2UgcmVkdWNlIGludGVsX3JvdGF0aW9uX2luZm8gdG8gb25seSBj b250YWluCihmb3IgZWFjaCBwbGFuZSkgdGhlIHJvdGF0ZWQgdmlldyB3aWR0aCxoZWlnaHQsc3Ry aWRlIGluIHRpbGUgdW5pdHMsCmFuZCB0aGUgcGFnZSBvZmZzZXQgaW50byB0aGUgb2JqZWN0IHdo ZXJlIHRoZSBwbGFuZSBzdGFydHMuIEVhY2ggcGxhbmUKaXMgaGFuZGxlZCBleGFjdGx5IHRoZSBz YW1lIHdheSwgbm8gc3BlY2lhbCBjYXNpbmcgZm9yIE5WMTIgb3Igb3RoZXIKZm9ybWF0cy4gV2Ug dGhlbiBzdG9yZSB0aGUgY29tcHV0ZWQgcm90YXRpb25faW5mbyB1bmRlcgppbnRlbF9mcmFtZWJ1 ZmZlciBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmVjb21wdXRlIGl0IGFnYWluLgoKVG8gaGFu ZGxlIGZiLT5vZmZzZXRzW10gd2UgdHJlYXQgdGhlbSBhcyBhIGxpbmVhciBvZmZzZXRzIGFuZCBj b252ZXJ0CnRoZW0gdG8geC95IG9mZnNldHMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHJlbGV2YW50 IEdUVCBtYXBwaW5nIChlaXRoZXIKbm9ybWFsIG9yIHJvdGF0ZWQpLiBXZSBzdG9yZSB0aGUgeC95 IG9mZnNldHMgdW5kZXIgaW50ZWxfZnJhbWVidWZmZXIsCmFuZCBmb3Igc29tZSBleHRyYSBjb252 ZW5pZW5jZSB3ZSBhbHNvIHN0b3JlIHRoZSByb3RhdGVkIHBpdGNoIChpZS4KdGlsZSBhbGlnbmVk IHBsYW5lIGhlaWdodCkuIFNvIGZvciBlYWNoIHBsYW5lIHdlIGhhdmUgdGhlIG5vcm1hbAp4L3kg b2Zmc2V0cywgcm90YXRlZCB4L3kgb2Zmc2V0cywgYW5kIHRoZSByb3RhdGVkIHBpdGNoLiBUaGUg bm9ybWFsCnBpdGNoIGlzIGF2YWlsYWJsZSBhbHJlYWR5IGluIGZiLT5waXRjaGVzW10uCgpXaGls ZSB3ZSdyZSBnYXRoZXJpbmcgdXAgYWxsIHRoYXQgZXh0cmEgaW5mb3JtYXRpb24sIHdlIGNhbiBh bHNvIGVhc2lseQpjb21wdXRlIHRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGZyYW1l YnVmZmVyLCBzbyB0aGF0IHdlIGNhbgpjaGVjayB0aGF0IHRoZSBvYmplY3QgaXMgYmlnIGVub3Vn aCB0byBob2xkIGl0LgoKV2hlbiBpdCBjb21lcyB0aW1lIHRvIGRlYWwgd2l0aCB0aGUgcGxhbmUg c291cmNlIGNvb3JkaW5hdGVzLCB3ZSBmaXJzdApyb3RhdGUgdGhlIGNsaXBwZWQgc3JjIGNvb3Jk aW5hdGVzIHRvIG1hdGNoIHRoZSByZWxldmFudCBHVFQgdmlldwpvcmllbnRhdGlvbiwgdGhlbiBh ZGQgdG8gdGhlbSB0aGUgZmIgeC95IG9mZnNldHMuIE5leHQgd2UgY29tcHV0ZQp0aGUgYWxpZ25l ZCBzdXJmYWNlIHBhZ2Ugb2Zmc2V0LCBhbmQgYXMgYSByZXN1bHQgd2UncmUgbGVmdCB3aXRoIHNv bWUKcmVzaWR1YWwgeC95IG9mZnNldHMuIEZpbmFsbHksIGlmIHJlcXVpcmVkIGJ5IHRoZSBoYXJk d2FyZSwgd2UgY29udmVydAp0aGUgcmVtYWluaW5nIHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIg b2Zmc2V0LgoKRm9yIGdlbjIvMyB3ZSBzaW1wbHkgc2tpcCBjb21wdXRpbmcgdGhlIGZpbmFsIHBh Z2Ugb2Zmc2V0LCBhbmQganVzdApjb252ZXJ0IHRoZSBzcmMrZmIgeC95IG9mZnNldHMgZGlyZWN0 bHkgaW50byBhIGxpbmVhciBvZmZzZXQgc2luY2UKdGhhdCdzIHdoYXQgdGhlIGhhcmR3YXJlIHdh bnRzLgoKQWZ0ZXIgdGhpcyBhbGwgcGxhdGZvcm1zLCBpbmNsdWluZyBTS0wrLCBjb21wdXRlIHRo ZXNlIHRoaW5ncyBpbiBleGFjdGx5CnRoZSBzYW1lIHdheSAoZXhjbHVkaW5nIGFsaWduZW1udCBk aWZmZXJlbmNlcykuCgp2MjogVXNlIEJJVChEUk1fUk9UQVRFXzI3MCkgaW5zdGVhZCBvZiBST1RB VEVfMjcwIHdoZW4gcm90YXRpbmcKICAgIHBsYW5lIHNyYyBjb29yZGluYXRlcwogICAgRHJvcCBz b21lIHNwdXJpb3VzIGNoYW5nZXMgdGhhdCBnb3QgbGVmdCBiZWhpbmQgZHVyaW5nCiAgICBkZXZl bG9wbWVudAp2MzogU3BsaXQgb3V0IG1vcmUgY2hhbmdlcyB0byBwcmVwIHBhdGNoZXMgKERhbmll bCkKICAgIHMvaW50ZWxfZmItPnBsYW5lW10uZm9vLmJhci9pbnRlbF9mYi0+Zm9vW10uYmFyLyBm b3IgYnJldml0eQogICAgUmVuYW1lIGludGVsX3N1cmZfZ3R0X29mZnNldCB0byBpbnRlbF9mYl9n dHRfb2Zmc2V0CiAgICBLaWxsIHRoZSBwb2ludGxlc3MgJ3BsYW5lJyBwYXJhbWV0ZXIgZnJvbSBp bnRlbF9mYl9ndHRfb2Zmc2V0KCkKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmMgIHwgIDUxICsrLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuaCAgfCAgIDUgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDM3 NiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmggICAgIHwgIDE5ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9z cHJpdGUuYyAgfCAgOTcgKysrKy0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25z KCspLCAyMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRl eCBkYjgwZWMwOGNjYTQuLjU2ZWRhNWQ1YWUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMKQEAgLTMzNTksMTYgKzMzNTksMTQgQEAgcm90YXRlX3BhZ2VzKGNvbnN0IGRtYV9hZGRy X3QgKmluLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogfQogCiBzdGF0aWMgc3RydWN0IHNnX3RhYmxl ICoKLWludGVsX3JvdGF0ZV9mYl9vYmpfcGFnZXMoc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8g KnJvdF9pbmZvLAoraW50ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhjb25zdCBzdHJ1Y3QgaW50ZWxf cm90YXRpb25faW5mbyAqcm90X2luZm8sCiAJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiB7Ci0JdW5zaWduZWQgaW50IHNpemVfcGFnZXMgPSByb3RfaW5mby0+cGxhbmVbMF0u d2lkdGggKiByb3RfaW5mby0+cGxhbmVbMF0uaGVpZ2h0OwotCXVuc2lnbmVkIGludCBzaXplX3Bh Z2VzX3V2OworCXVuc2lnbmVkIGludCBzaXplID0gaW50ZWxfcm90YXRpb25faW5mb19zaXplKHJv dF9pbmZvKTsKIAlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnX2l0ZXI7CiAJdW5zaWduZWQgbG9uZyBp OwogCWRtYV9hZGRyX3QgKnBhZ2VfYWRkcl9saXN0OwogCXN0cnVjdCBzZ190YWJsZSAqc3Q7Ci0J dW5zaWduZWQgaW50IHV2X3N0YXJ0X3BhZ2U7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlp bnQgcmV0ID0gLUVOT01FTTsKIApAQCAtMzM3OCwxOCArMzM3NiwxMiBAQCBpbnRlbF9yb3RhdGVf ZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywKIAlpZiAo IXBhZ2VfYWRkcl9saXN0KQogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCi0JLyogQWNjb3VudCBm b3IgVVYgcGxhbmUgd2l0aCBOVjEyLiAqLwotCWlmIChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0ID09 IERSTV9GT1JNQVRfTlYxMikKLQkJc2l6ZV9wYWdlc191diA9IHJvdF9pbmZvLT5wbGFuZVsxXS53 aWR0aCAqIHJvdF9pbmZvLT5wbGFuZVsxXS5oZWlnaHQ7Ci0JZWxzZQotCQlzaXplX3BhZ2VzX3V2 ID0gMDsKLQogCS8qIEFsbG9jYXRlIHRhcmdldCBTRyBsaXN0LiAqLwogCXN0ID0ga21hbGxvYyhz aXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdCkKIAkJZ290byBlcnJfc3RfYWxsb2M7 CiAKLQlyZXQgPSBzZ19hbGxvY190YWJsZShzdCwgc2l6ZV9wYWdlcyArIHNpemVfcGFnZXNfdXYs IEdGUF9LRVJORUwpOworCXJldCA9IHNnX2FsbG9jX3RhYmxlKHN0LCBzaXplLCBHRlBfS0VSTkVM KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9zZ19hbGxvYzsKIApAQCAtMzQwMywzMiArMzM5NSwx NCBAQCBpbnRlbF9yb3RhdGVfZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZv ICpyb3RfaW5mbywKIAlzdC0+bmVudHMgPSAwOwogCXNnID0gc3QtPnNnbDsKIAotCS8qIFJvdGF0 ZSB0aGUgcGFnZXMuICovCi0Jc2cgPSByb3RhdGVfcGFnZXMocGFnZV9hZGRyX2xpc3QsIDAsCi0J CQkgIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwK LQkJCSAgcm90X2luZm8tPnBsYW5lWzBdLndpZHRoLAotCQkJICBzdCwgc2cpOwotCi0JLyogQXBw ZW5kIHRoZSBVViBwbGFuZSBpZiBOVjEyLiAqLwotCWlmIChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0 ID09IERSTV9GT1JNQVRfTlYxMikgewotCQl1dl9zdGFydF9wYWdlID0gc2l6ZV9wYWdlczsKLQot CQkvKiBDaGVjayBmb3IgdGlsZS1yb3cgdW4tYWxpZ25tZW50LiAqLwotCQlpZiAob2Zmc2V0X2lu X3BhZ2Uocm90X2luZm8tPnV2X29mZnNldCkpCi0JCQl1dl9zdGFydF9wYWdlLS07Ci0KLQkJcm90 X2luZm8tPnV2X3N0YXJ0X3BhZ2UgPSB1dl9zdGFydF9wYWdlOwotCi0JCXNnID0gcm90YXRlX3Bh Z2VzKHBhZ2VfYWRkcl9saXN0LCByb3RfaW5mby0+dXZfc3RhcnRfcGFnZSwKLQkJCQkgIHJvdF9p bmZvLT5wbGFuZVsxXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzFdLmhlaWdodCwKLQkJCQkgIHJv dF9pbmZvLT5wbGFuZVsxXS53aWR0aCwKLQkJCQkgIHN0LCBzZyk7CisJZm9yIChpID0gMCA7IGkg PCBBUlJBWV9TSVpFKHJvdF9pbmZvLT5wbGFuZSk7IGkrKykgeworCQlzZyA9IHJvdGF0ZV9wYWdl cyhwYWdlX2FkZHJfbGlzdCwgcm90X2luZm8tPnBsYW5lW2ldLm9mZnNldCwKKwkJCQkgIHJvdF9p bmZvLT5wbGFuZVtpXS53aWR0aCwgcm90X2luZm8tPnBsYW5lW2ldLmhlaWdodCwKKwkJCQkgIHJv dF9pbmZvLT5wbGFuZVtpXS5zdHJpZGUsIHN0LCBzZyk7CiAJfQogCi0JRFJNX0RFQlVHX0tNUygi Q3JlYXRlZCByb3RhdGVkIHBhZ2UgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ICgldXgldSB0 aWxlcywgJXUgcGFnZXMgKCV1IHBsYW5lIDApKS5cbiIsCi0JCSAgICAgIG9iai0+YmFzZS5zaXpl LCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCi0JCSAgICAgIHJvdF9pbmZvLT5wbGFuZVswXS5o ZWlnaHQsIHNpemVfcGFnZXMgKyBzaXplX3BhZ2VzX3V2LAotCQkgICAgICBzaXplX3BhZ2VzKTsK KwlEUk1fREVCVUdfS01TKCJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5nIGZvciBvYmplY3Qg c2l6ZSAlenUgKCV1eCV1IHRpbGVzLCAldSBwYWdlcylcbiIsCisJCSAgICAgIG9iai0+YmFzZS5z aXplLCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQs IHNpemUpOwogCiAJZHJtX2ZyZWVfbGFyZ2UocGFnZV9hZGRyX2xpc3QpOwogCkBAIC0zNDM5LDEw ICszNDEzLDkgQEAgZXJyX3NnX2FsbG9jOgogZXJyX3N0X2FsbG9jOgogCWRybV9mcmVlX2xhcmdl KHBhZ2VfYWRkcl9saXN0KTsKIAotCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byBjcmVhdGUgcm90 YXRlZCBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUhICglZCkgKCV1eCV1IHRpbGVzLCAldSBw YWdlcyAoJXUgcGxhbmUgMCkpXG4iLAotCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcmV0LCByb3Rf aW5mby0+cGxhbmVbMF0ud2lkdGgsCi0JCSAgICAgIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQs IHNpemVfcGFnZXMgKyBzaXplX3BhZ2VzX3V2LAotCQkgICAgICBzaXplX3BhZ2VzKTsKKwlEUk1f REVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNp emUgJXp1ISAoJXV4JXUgdGlsZXMsICV1IHBhZ2VzKVxuIiwKKwkJICAgICAgb2JqLT5iYXNlLnNp emUsIHJvdF9pbmZvLT5wbGFuZVswXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwg c2l6ZSk7CisKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5oCmluZGV4IDRiOGEzNzhiOWQzZi4uMzlkYjQ2NjM3Mzk1IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuaApAQCAtMTM1LDEyICsxMzUsOSBAQCBlbnVtIGk5MTVfZ2d0dF92 aWV3X3R5cGUgewogfTsKIAogc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gewotCXVuc2lnbmVk IGludCB1dl9vZmZzZXQ7Ci0JdWludDMyX3QgcGl4ZWxfZm9ybWF0OwotCXVuc2lnbmVkIGludCB1 dl9zdGFydF9wYWdlOwogCXN0cnVjdCB7CiAJCS8qIHRpbGVzICovCi0JCXVuc2lnbmVkIGludCB3 aWR0aCwgaGVpZ2h0OworCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBvZmZz ZXQ7CiAJfSBwbGFuZVsyXTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpp bmRleCA3ZWQzM2I1ZWI0NDMuLmVmNjg4OTJmNGUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwpAQCAtMjMxNSwzMyArMjMxNSw2IEBAIGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3 KHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldywKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1pbnRl bF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkgICBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5m byAqaW5mbyA9ICZ0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPnJvdF9pbmZvOwotCXVuc2lnbmVk IGludCB0aWxlX3NpemUsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBjcHA7Ci0KLQl0aWxlX3Np emUgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwotCi0JY3BwID0gZHJtX2Zvcm1hdF9wbGFu ZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Ci0JaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2LCAm dGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0LAotCQkJZmItPm1vZGlmaWVyWzBdLCBjcHApOwotCi0J aW5mby0+cGxhbmVbMF0ud2lkdGggPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbMF0sIHRpbGVf d2lkdGggKiBjcHApOwotCWluZm8tPnBsYW5lWzBdLmhlaWdodCA9IERJVl9ST1VORF9VUChmYi0+ aGVpZ2h0LCB0aWxlX2hlaWdodCk7Ci0KLQlpZiAoaW5mby0+cGl4ZWxfZm9ybWF0ID09IERSTV9G T1JNQVRfTlYxMikgewotCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9y bWF0LCAxKTsKLQkJaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2LCAmdGlsZV93aWR0aCwgJnRpbGVf aGVpZ2h0LAotCQkJCWZiLT5tb2RpZmllclsxXSwgY3BwKTsKLQotCQlpbmZvLT51dl9vZmZzZXQg PSBmYi0+b2Zmc2V0c1sxXTsKLQkJaW5mby0+cGxhbmVbMV0ud2lkdGggPSBESVZfUk9VTkRfVVAo ZmItPnBpdGNoZXNbMV0sIHRpbGVfd2lkdGggKiBjcHApOwotCQlpbmZvLT5wbGFuZVsxXS5oZWln aHQgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCAvIDIsIHRpbGVfaGVpZ2h0KTsKLQl9Ci19Ci0K IHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbGluZWFyX2FsaWdubWVudChjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYp LT5nZW4gPj0gOSkKQEAgLTI0NjMsNiArMjQzNiw0MiBAQCBzdGF0aWMgdm9pZCBpbnRlbF91bnBp bl9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2lnbmVkIGludCByb3RhdGlv bgogfQogCiAvKgorICogQ29udmVydCB0aGUgeC95IG9mZnNldHMgaW50byBhIGxpbmVhciBvZmZz ZXQuCisgKiBPbmx5IHZhbGlkIHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uLCB3aGljaCBpcyBm aW5lIHNpbmNlIGxpbmVhcgorICogb2Zmc2V0IGlzIG9ubHkgdXNlZCB3aXRoIGxpbmVhciBidWZm ZXJzIG9uIHByZS1oc3cgYW5kIHRpbGVkIGJ1ZmZlcnMKKyAqIHdpdGggZ2VuMi8zLCBhbmQgOTAv MjcwIGRlZ3JlZSByb3RhdGlvbnMgaXNuJ3Qgc3VwcG9ydGVkIG9uIGFueSBvZiB0aGVtLgorICov Cit1bnNpZ25lZCBpbnQgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4LCBpbnQgeSwKKwkJCQkg ICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQoreworCXVuc2ln bmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBwbGFu ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoID0gZmItPnBpdGNoZXNbcGxhbmVdOworCisJcmV0dXJu IHkgKiBwaXRjaCArIHggKiBjcHA7Cit9CisKKy8qCisgKiBBZGQgdGhlIHgveSBvZmZzZXRzIGRl cml2ZWQgZnJvbSBmYi0+b2Zmc2V0c1tdIHRvIHRoZSB1c2VyCisgKiBzcGVjaWZpZWQgcGxhbmUg c3JjIHgveSBvZmZzZXRzLiBUaGUgcmVzdWx0aW5nIHgveSBvZmZzZXRzCisgKiBzcGVjaWZ5IHRo ZSBzdGFydCBvZiBzY2Fub3V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZ3R0IG1hcHBpbmcu CisgKi8KK3ZvaWQgaW50ZWxfYWRkX2ZiX29mZnNldHMoaW50ICp4LCBpbnQgKnksCisJCQkgIGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCisJCQkgIHVuc2lnbmVk IGludCByb3RhdGlvbikKKworeworCWNvbnN0IHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50 ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CisKKwlpZiAoaW50ZWxfcm90YXRpb25f OTBfb3JfMjcwKHJvdGF0aW9uKSkgeworCQkqeCArPSBpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0u eDsKKwkJKnkgKz0gaW50ZWxfZmItPnJvdGF0ZWRbcGxhbmVdLnk7CisJfSBlbHNlIHsKKwkJKngg Kz0gaW50ZWxfZmItPm5vcm1hbFtwbGFuZV0ueDsKKwkJKnkgKz0gaW50ZWxfZmItPm5vcm1hbFtw bGFuZV0ueTsKKwl9Cit9CisKKy8qCiAgKiBBZGp1c3QgdGhlIHRpbGUgb2Zmc2V0IGJ5IG1vdmlu ZyB0aGUgZGlmZmVyZW5jZSBpbnRvCiAgKiB0aGUgeC95IG9mZnNldHMuCiAgKgpAQCAtMjQ5OCwy MCArMjUwNywyMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoaW50ICp4 LCBpbnQgKnksCiAgKiBJbiB0aGUgOTAvMjcwIHJvdGF0ZWQgY2FzZSwgeCBhbmQgeSBhcmUgYXNz dW1lZAogICogdG8gYmUgYWxyZWFkeSByb3RhdGVkIHRvIG1hdGNoIHRoZSByb3RhdGVkIEdUVCB2 aWV3LCBhbmQKICAqIHBpdGNoIGlzIHRoZSB0aWxlX2hlaWdodCBhbGlnbmVkIGZyYW1lYnVmZmVy IGhlaWdodC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBjb21wdXRpbmcgdGhl IGRlcml2ZWQgaW5mb3JtYXRpb24KKyAqIHVuZGVyIGludGVsX2ZyYW1lYnVmZmVyLCBzbyB1c2lu ZyBhbnkgb2YgdGhhdCBpbmZvcm1hdGlvbgorICogaGVyZSBpcyBub3QgYWxsb3dlZC4gQW55dGhp bmcgdW5kZXIgZHJtX2ZyYW1lYnVmZmVyIGNhbiBiZQorICogdXNlZC4gVGhpcyBpcyB3aHkgdGhl IHVzZXIgaGFzIHRvIHBhc3MgaW4gdGhlIHBpdGNoIHNpbmNlIGl0CisgKiBpcyBzcGVjaWZpZWQg aW4gdGhlIHJvdGF0ZWQgb3JpZW50YXRpb24uCiAgKi8KLXUzMiBpbnRlbF9jb21wdXRlX3RpbGVf b2Zmc2V0KGludCAqeCwgaW50ICp5LAotCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsIGludCBwbGFuZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBwaXRjaCwKLQkJCSAg ICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3N0YXRpYyB1MzIgX2ludGVsX2NvbXB1dGVfdGls ZV9vZmZzZXQoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAg ICAgIGludCAqeCwgaW50ICp5LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAorCQkJCSAg ICAgIHVuc2lnbmVkIGludCByb3RhdGlvbiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWxpZ25t ZW50KQogewotCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZmItPmRldik7CiAJdWludDY0X3QgZmJfbW9kaWZpZXIgPSBmYi0+bW9kaWZpZXJbcGxhbmVd OwogCXVuc2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9y bWF0LCBwbGFuZSk7Ci0JdW5zaWduZWQgaW50IG9mZnNldCwgYWxpZ25tZW50OwotCi0JYWxpZ25t ZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiX21vZGlmaWVyKTsKLQlpZiAo YWxpZ25tZW50KQotCQlhbGlnbm1lbnQtLTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCiAJaWYg KGZiX21vZGlmaWVyICE9IERSTV9GT1JNQVRfTU9EX05PTkUpIHsKIAkJdW5zaWduZWQgaW50IHRp bGVfc2l6ZSwgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7CkBAIC0yNTQ4LDYgKzI1NjAsMTQxIEBA IHUzMiBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGludCAqeCwgaW50ICp5LAogCXJldHVybiBv ZmZzZXQgJiB+YWxpZ25tZW50OwogfQogCit1bnNpZ25lZCBpbnQgaW50ZWxfY29tcHV0ZV90aWxl X29mZnNldChpbnQgKngsIGludCAqeSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAor CQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJY29uc3Qgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShmYi0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQg YWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllcltw bGFuZV0pOworCisJcmV0dXJuIF9pbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KGRldl9wcml2LCB4 LCB5LCBmYiwgcGxhbmUsIHBpdGNoLAorCQkJCQkgIHJvdGF0aW9uLCBhbGlnbm1lbnQgPyAoYWxp Z25tZW50IC0gMSkgOiAwKTsKK30KKworLyogQ29udmVydCB0aGUgZmItPm9mZnNldFtdIGxpbmVh ciBvZmZzZXQgaW50byB4L3kgb2Zmc2V0cyAqLworc3RhdGljIHZvaWQgaW50ZWxfZmJfb2Zmc2V0 X3RvX3h5KGludCAqeCwgaW50ICp5LAorCQkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsIGludCBwbGFuZSkKK3sKKwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFu ZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgcGxhbmUpOworCXVuc2lnbmVkIGludCBwaXRjaCA9IGZi LT5waXRjaGVzW3BsYW5lXTsKKwl1bnNpZ25lZCBpbnQgbGluZWFyX29mZnNldCA9IGZiLT5vZmZz ZXRzW3BsYW5lXTsKKworCSp5ID0gbGluZWFyX29mZnNldCAvIHBpdGNoOworCSp4ID0gbGluZWFy X29mZnNldCAlIHBpdGNoIC8gY3BwOworfQorCitzdGF0aWMgaW50CitpbnRlbF9maWxsX2ZiX2lu Zm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0g dG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOworCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpy b3RfaW5mbyA9ICZpbnRlbF9mYi0+cm90X2luZm87CisJdW5zaWduZWQgaW50IGd0dF9vZmZzZXRf cm90YXRlZCA9IDA7CisJdW5zaWduZWQgaW50IG1heF9zaXplID0gMDsKKwl1aW50MzJfdCBmb3Jt YXQgPSBmYi0+cGl4ZWxfZm9ybWF0OworCWludCBpLCBudW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9u dW1fcGxhbmVzKGZvcm1hdCk7CisJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSA9IGludGVsX3RpbGVf c2l6ZShkZXZfcHJpdik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7CisJ CXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworCQl1bnNpZ25lZCBpbnQgY3BwLCBvZmZzZXQs IHNpemU7CisJCWludCB4LCB5OworCisJCWNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZvcm1h dCwgaSk7CisJCXdpZHRoID0gZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChmYi0+d2lkdGgsIGZvcm1h dCwgaSk7CisJCWhlaWdodCA9IGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0KGZiLT5oZWlnaHQsIGZv cm1hdCwgaSk7CisKKwkJaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOworCisJ CS8qCisJCSAqIEZpcnN0IHBpeGVsIG9mIHRoZSBmcmFtZWJ1ZmZlciBmcm9tCisJCSAqIHRoZSBz dGFydCBvZiB0aGUgbm9ybWFsIGd0dCBtYXBwaW5nLgorCQkgKi8KKwkJaW50ZWxfZmItPm5vcm1h bFtpXS54ID0geDsKKwkJaW50ZWxfZmItPm5vcm1hbFtpXS55ID0geTsKKworCQlvZmZzZXQgPSBf aW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChkZXZfcHJpdiwgJngsICZ5LAorCQkJCQkJICAgIGZi LCAwLCBmYi0+cGl0Y2hlc1tpXSwKKwkJCQkJCSAgICBCSVQoRFJNX1JPVEFURV8wKSwgdGlsZV9z aXplKTsKKwkJb2Zmc2V0IC89IHRpbGVfc2l6ZTsKKwkJRFJNX0RFQlVHKCJvZmZzZXQgJXUgdGls ZXNcbiIsIG9mZnNldCk7CisKKwkJaWYgKGZiLT5tb2RpZmllcltpXSAhPSBEUk1fRk9STUFUX01P RF9OT05FKSB7CisJCQl1bnNpZ25lZCBpbnQgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7CisJCQl1 bnNpZ25lZCBpbnQgcGl0Y2g7CisJCQlzdHJ1Y3QgZHJtX3JlY3QgcjsKKworCQkJaW50ZWxfdGls ZV9kaW1zKGRldl9wcml2LCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0LAorCQkJCQlmYi0+bW9k aWZpZXJbaV0sIGNwcCk7CisKKwkJCXJvdF9pbmZvLT5wbGFuZVtpXS5vZmZzZXQgPSBvZmZzZXQ7 CisJCQlyb3RfaW5mby0+cGxhbmVbaV0uc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVz W2ldLCB0aWxlX3dpZHRoICogY3BwKTsKKwkJCXJvdF9pbmZvLT5wbGFuZVtpXS53aWR0aCA9IERJ Vl9ST1VORF9VUCh4ICsgd2lkdGgsIHRpbGVfd2lkdGgpOworCQkJcm90X2luZm8tPnBsYW5lW2ld LmhlaWdodCA9IERJVl9ST1VORF9VUCh5ICsgaGVpZ2h0LCB0aWxlX2hlaWdodCk7CisKKwkJCWlu dGVsX2ZiLT5yb3RhdGVkW2ldLnBpdGNoID0KKwkJCQlyb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0 ICogdGlsZV9oZWlnaHQ7CisKKwkJCS8qIGhvdyBtYW55IHRpbGVzIGRvZXMgdGhpcyBwbGFuZSBu ZWVkICovCisJCQlzaXplID0gcm90X2luZm8tPnBsYW5lW2ldLnN0cmlkZSAqIHJvdF9pbmZvLT5w bGFuZVtpXS5oZWlnaHQ7CisJCQkvKgorCQkJICogSWYgdGhlIHBsYW5lIGlzbid0IGhvcml6b250 YWxseSB0aWxlIGFsaWduZWQsCisJCQkgKiB3ZSBuZWVkIG9uZSBtb3JlIHRpbGUuCisJCQkgKi8K KwkJCWlmICh4ICE9IDApCisJCQkJc2l6ZSsrOworCisJCQlwaXRjaCA9IGludGVsX2ZiLT5yb3Rh dGVkW2ldLnBpdGNoOworCisJCQkvKiByb3RhdGUgdGhlIHgveSBvZmZzZXRzIHRvIG1hdGNoIHRo ZSBHVFQgdmlldyAqLworCQkJci54MSA9IHg7CisJCQlyLnkxID0geTsKKwkJCXIueDIgPSB4ICsg d2lkdGg7CisJCQlyLnkyID0geSArIGhlaWdodDsKKwkJCWRybV9yZWN0X3JvdGF0ZSgmciwgd2lk dGgsIHBpdGNoLCBCSVQoRFJNX1JPVEFURV8yNzApKTsKKwkJCXggPSByLngxOworCQkJeSA9IHIu eTE7CisKKwkJCS8qIHJvdGF0ZSB0aGUgdGlsZSBkaW1lbnNpb25zIHRvIG1hdGNoIHRoZSBHVFQg dmlldyAqLworCQkJc3dhcCh0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCk7CisKKwkJCS8qCisJCQkg KiBXZSBvbmx5IGtlZXAgdGhlIHgveSBvZmZzZXRzLCBzbyBwdXNoIGFsbCBvZiB0aGUKKwkJCSAq IGd0dCBvZmZzZXQgaW50byB0aGUgeC95IG9mZnNldHMuCisJCQkgKi8KKwkJCWludGVsX2FkanVz dF90aWxlX29mZnNldCgmeCwgJnksIHRpbGVfc2l6ZSwKKwkJCQkJCSB0aWxlX3dpZHRoLCB0aWxl X2hlaWdodCwgcGl0Y2gsCisJCQkJCQkgZ3R0X29mZnNldF9yb3RhdGVkICogdGlsZV9zaXplLCAw KTsKKworCQkJZ3R0X29mZnNldF9yb3RhdGVkICs9IHJvdF9pbmZvLT5wbGFuZVtpXS53aWR0aCAq IHJvdF9pbmZvLT5wbGFuZVtpXS5oZWlnaHQ7CisKKwkJCS8qCisJCQkgKiBGaXJzdCBwaXhlbCBv ZiB0aGUgZnJhbWVidWZmZXIgZnJvbQorCQkJICogdGhlIHN0YXJ0IG9mIHRoZSByb3RhdGVkIGd0 dCBtYXBwaW5nLgorCQkJICovCisJCQlpbnRlbF9mYi0+cm90YXRlZFtpXS54ID0geDsKKwkJCWlu dGVsX2ZiLT5yb3RhdGVkW2ldLnkgPSB5OworCQl9IGVsc2UgeworCQkJc2l6ZSA9IERJVl9ST1VO RF9VUCgoeSArIGhlaWdodCkgKiBmYi0+cGl0Y2hlc1tpXSArCisJCQkJCSAgICB4ICogY3BwLCB0 aWxlX3NpemUpOworCQl9CisJCURSTV9ERUJVRygiJWQgb2Zmc2V0ICV1LCBzaXplICV1LCBzdHJp ZGUgJXUsIGhlaWdodCAldVxuIiwKKwkJCSAgaSwgb2Zmc2V0LCBzaXplLCByb3RfaW5mby0+cGxh bmVbaV0uc3RyaWRlLCByb3RfaW5mby0+cGxhbmVbaV0uaGVpZ2h0KTsKKworCQkvKiBob3cgbWFu eSB0aWxlcyBpbiB0b3RhbCBuZWVkZWQgaW4gdGhlIGJvICovCisJCW1heF9zaXplID0gbWF4KG1h eF9zaXplLCBvZmZzZXQgKyBzaXplKTsKKwl9CisKKwlpZiAobWF4X3NpemUgKiB0aWxlX3NpemUg PiB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPm9iai0+YmFzZS5zaXplKSB7CisJCURSTV9ERUJV RygiZmIgdG9vIGJpZyBmb3IgYm8gKG5lZWQgJXUgYnl0ZXMsIGhhdmUgJXp1IGJ5dGVzKVxuIiwK KwkJCSAgbWF4X3NpemUgKiB0aWxlX3NpemUsIHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+b2Jq LT5iYXNlLnNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwog c3RhdGljIGludCBpOXh4X2Zvcm1hdF90b19mb3VyY2MoaW50IGZvcm1hdCkKIHsKIAlzd2l0Y2gg KGZvcm1hdCkgewpAQCAtMjc3OCw3ICsyOTI1LDYgQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVf cHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAogCXUzMiBkc3BjbnRyOwog CWk5MTVfcmVnX3QgcmVnID0gRFNQQ05UUihwbGFuZSk7CiAJdW5zaWduZWQgaW50IHJvdGF0aW9u ID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Ci0JaW50IGNwcCA9IGRybV9mb3JtYXRfcGxh bmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwogCWludCB4ID0gcGxhbmVfc3RhdGUtPnNyYy54 MSA+PiAxNjsKIAlpbnQgeSA9IHBsYW5lX3N0YXRlLT5zcmMueTEgPj4gMTY7CiAKQEAgLTI4Mzgs MzAgKzI5ODQsMjUgQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAogCWlmIChJU19HNFgoZGV2KSkKIAkJZHNwY250ciB8PSBE SVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7CiAKLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZi LT5waXRjaGVzWzBdICsgeCAqIGNwcDsKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZi LCAwLCByb3RhdGlvbik7CiAKLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgeworCWlm IChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQogCQlpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNl dCA9CiAJCQlpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCiAJCQkJCQkg IGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Ci0JCWxpbmVhcl9vZmZzZXQgLT0gaW50ZWxfY3J0 Yy0+ZHNwYWRkcl9vZmZzZXQ7Ci0JfSBlbHNlIHsKLQkJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZz ZXQgPSBsaW5lYXJfb2Zmc2V0OwotCX0KIAogCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFU RV8xODApKSB7CiAJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7CiAKIAkJeCArPSAo Y3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyAtIDEpOwogCQl5ICs9IChjcnRjX3N0YXRlLT5waXBlX3Ny Y19oIC0gMSk7Ci0KLQkJLyogRmluZGluZyB0aGUgbGFzdCBwaXhlbCBvZiB0aGUgbGFzdCBsaW5l IG9mIHRoZSBkaXNwbGF5Ci0JCWRhdGEgYW5kIGFkZGluZyB0byBsaW5lYXJfb2Zmc2V0Ki8KLQkJ bGluZWFyX29mZnNldCArPQotCQkJKGNydGNfc3RhdGUtPnBpcGVfc3JjX2ggLSAxKSAqIGZiLT5w aXRjaGVzWzBdICsKLQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSkgKiBjcHA7CiAJfQog CisJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7CisK KwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KQorCQlpbnRlbF9jcnRjLT5kc3BhZGRyX29m ZnNldCA9IGxpbmVhcl9vZmZzZXQ7CisKIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geDsKIAlp bnRlbF9jcnRjLT5hZGp1c3RlZF95ID0geTsKIApAQCAtMjg3MCw3ICszMDExLDggQEAgc3RhdGlj IHZvaWQgaTl4eF91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 LAogCUk5MTVfV1JJVEUoRFNQU1RSSURFKHBsYW5lKSwgZmItPnBpdGNoZXNbMF0pOwogCWlmIChJ TlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7CiAJCUk5MTVfV1JJVEUoRFNQU1VSRihwbGFuZSks Ci0JCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRzcGFk ZHJfb2Zmc2V0KTsKKwkJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHJvdGF0aW9uKSArCisJ CQkgICBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCk7CiAJCUk5MTVfV1JJVEUoRFNQVElMRU9G RihwbGFuZSksICh5IDw8IDE2KSB8IHgpOwogCQlJOTE1X1dSSVRFKERTUExJTk9GRihwbGFuZSks IGxpbmVhcl9vZmZzZXQpOwogCX0gZWxzZQpAQCAtMjkwOCw3ICszMDUwLDYgQEAgc3RhdGljIHZv aWQgaXJvbmxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcHJpbWFy eSwKIAl1MzIgZHNwY250cjsKIAlpOTE1X3JlZ190IHJlZyA9IERTUENOVFIocGxhbmUpOwogCXVu c2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwotCWludCBj cHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKIAlpbnQgeCA9 IHBsYW5lX3N0YXRlLT5zcmMueDEgPj4gMTY7CiAJaW50IHkgPSBwbGFuZV9zdGF0ZS0+c3JjLnkx ID4+IDE2OwogCkBAIC0yOTQ3LDI2ICszMDg4LDIzIEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3Vw ZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCiAJaWYgKCFJU19I QVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKQogCQlkc3BjbnRyIHw9IERJU1BQTEFO RV9UUklDS0xFX0ZFRURfRElTQUJMRTsKIAotCWxpbmVhcl9vZmZzZXQgPSB5ICogZmItPnBpdGNo ZXNbMF0gKyB4ICogY3BwOworCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJv dGF0aW9uKTsKKwogCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0KIAkJaW50ZWxfY29tcHV0 ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAogCQkJCQkgIGZiLT5waXRjaGVzWzBdLCByb3Rh dGlvbik7Ci0JbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKKwog CWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7CiAJCWRzcGNudHIgfD0gRElT UFBMQU5FX1JPVEFURV8xODA7CiAKIAkJaWYgKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FE V0VMTChkZXYpKSB7CiAJCQl4ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSk7CiAJCQl5 ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSk7Ci0KLQkJCS8qIEZpbmRpbmcgdGhlIGxh c3QgcGl4ZWwgb2YgdGhlIGxhc3QgbGluZSBvZiB0aGUgZGlzcGxheQotCQkJZGF0YSBhbmQgYWRk aW5nIHRvIGxpbmVhcl9vZmZzZXQqLwotCQkJbGluZWFyX29mZnNldCArPQotCQkJCShjcnRjX3N0 YXRlLT5waXBlX3NyY19oIC0gMSkgKiBmYi0+cGl0Y2hlc1swXSArCi0JCQkJKGNydGNfc3RhdGUt PnBpcGVfc3JjX3cgLSAxKSAqIGNwcDsKIAkJfQogCX0KIAorCWxpbmVhcl9vZmZzZXQgPSBpbnRl bF9mYl94eV90b19saW5lYXIoeCwgeSwgZmIsIDApOworCiAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRf eCA9IHg7CiAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHk7CiAKQEAgLTI5NzQsNyArMzExMiw4 IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1f cGxhbmUgKnByaW1hcnksCiAKIAlJOTE1X1dSSVRFKERTUFNUUklERShwbGFuZSksIGZiLT5waXRj aGVzWzBdKTsKIAlJOTE1X1dSSVRFKERTUFNVUkYocGxhbmUpLAotCQkgICBpOTE1X2dlbV9vYmpf Z2d0dF9vZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKKwkJICAgaW50 ZWxfZmJfZ3R0X29mZnNldChmYiwgcm90YXRpb24pICsKKwkJICAgaW50ZWxfY3J0Yy0+ZHNwYWRk cl9vZmZzZXQpOwogCWlmIChJU19IQVNXRUxMKGRldikgfHwgSVNfQlJPQURXRUxMKGRldikpIHsK IAkJSTkxNV9XUklURShEU1BPRkZTRVQocGxhbmUpLCAoeSA8PCAxNikgfCB4KTsKIAl9IGVsc2Ug ewpAQCAtMjk5NiwzMiArMzEzNSwxNSBAQCB1MzIgaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJfQogfQogCi11MzIgaW50 ZWxfcGxhbmVfb2JqX29mZnNldChzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lLAotCQkJ ICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgIHVuc2lnbmVkIGludCBw bGFuZSkKK3UzMiBpbnRlbF9mYl9ndHRfb2Zmc2V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LAorCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQogeworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwogCXN0cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3 OwotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCXU2NCBvZmZzZXQ7Ci0KLQlpbnRlbF9maWxsX2Zi X2dndHRfdmlldygmdmlldywgaW50ZWxfcGxhbmUtPmJhc2Uuc3RhdGUtPmZiLAotCQkJCWludGVs X3BsYW5lLT5iYXNlLnN0YXRlLT5yb3RhdGlvbik7Ci0KLQl2bWEgPSBpOTE1X2dlbV9vYmpfdG9f Z2d0dF92aWV3KG9iaiwgJnZpZXcpOwotCWlmIChXQVJOKCF2bWEsICJnZ3R0IHZtYSBmb3IgZGlz cGxheSBvYmplY3Qgbm90IGZvdW5kISAodmlldz0ldSlcbiIsCi0JCXZpZXcudHlwZSkpCi0JCXJl dHVybiAtMTsKLQotCW9mZnNldCA9IHZtYS0+bm9kZS5zdGFydDsKIAotCWlmIChwbGFuZSA9PSAx KSB7Ci0JCW9mZnNldCArPSB2bWEtPmdndHRfdmlldy5wYXJhbXMucm90YXRlZC51dl9zdGFydF9w YWdlICoKLQkJCSAgUEFHRV9TSVpFOwotCX0KLQotCVdBUk5fT04odXBwZXJfMzJfYml0cyhvZmZz ZXQpKTsKKwlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9uKTsKIAot CXJldHVybiBsb3dlcl8zMl9iaXRzKG9mZnNldCk7CisJcmV0dXJuIGk5MTVfZ2VtX29ial9nZ3R0 X29mZnNldF92aWV3KG9iaiwgJnZpZXcpOwogfQogCiBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3Nj YWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywgaW50IGlkKQpAQCAtMzE0MCwxMiAr MzI2Miw5IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwogCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsK IAl1MzIgcGxhbmVfY3RsLCBzdHJpZGVfZGl2LCBzdHJpZGU7Ci0JdTMyIHRpbGVfaGVpZ2h0LCBw bGFuZV9vZmZzZXQsIHBsYW5lX3NpemU7CiAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVf c3RhdGUtPmJhc2Uucm90YXRpb247Ci0JaW50IHhfb2Zmc2V0LCB5X29mZnNldDsKIAl1MzIgc3Vy Zl9hZGRyOwogCWludCBzY2FsZXJfaWQgPSBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkOwogCWludCBz cmNfeCA9IHBsYW5lX3N0YXRlLT5zcmMueDEgPj4gMTY7CkBAIC0zMTY2LDM2ICszMjg1LDQ5IEBA IHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCiAJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9QTEFORV9HQU1NQV9ESVNBQkxFOwog CXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0aW9uKHJvdGF0aW9uKTsKIAotCXN0cmlk ZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJb MF0sCi0JCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKLQlzdXJmX2FkZHIgPSBpbnRlbF9w bGFuZV9vYmpfb2Zmc2V0KHRvX2ludGVsX3BsYW5lKHBsYW5lKSwgb2JqLCAwKTsKLQotCVdBUk5f T04oZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5zcmMpID09IDApOwotCiAJaWYgKGludGVs X3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKKwkJc3RydWN0IGRybV9yZWN0IHIgPSB7 CisJCQkueDEgPSBzcmNfeCwKKwkJCS54MiA9IHNyY194ICsgc3JjX3csCisJCQkueTEgPSBzcmNf eSwKKwkJCS55MiA9IHNyY195ICsgc3JjX2gsCisJCX07CiAJCWludCBjcHAgPSBkcm1fZm9ybWF0 X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKKwkJc3RydWN0IGludGVsX2ZyYW1lYnVm ZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKKworCQkvKiBSb3RhdGUg c3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KKwkJZHJtX3JlY3Rf cm90YXRlKCZyLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIEJJVChEUk1fUk9UQVRFXzI3MCkpOwog Ci0JCS8qIHN0cmlkZSA9IFN1cmZhY2UgaGVpZ2h0IGluIHRpbGVzICovCi0JCXRpbGVfaGVpZ2h0 ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwgY3BwKTsKLQkJ c3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKLQkJeF9vZmZz ZXQgPSBzdHJpZGUgKiB0aWxlX2hlaWdodCAtIHNyY195IC0gc3JjX2g7Ci0JCXlfb2Zmc2V0ID0g c3JjX3g7Ci0JCXBsYW5lX3NpemUgPSAoc3JjX3cgLSAxKSA8PCAxNiB8IChzcmNfaCAtIDEpOwor CQlzcmNfeCA9IHIueDE7CisJCXNyY195ID0gci55MTsKKwkJc3JjX3cgPSBkcm1fcmVjdF93aWR0 aCgmcik7CisJCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZyKTsKKworCQlzdHJpZGVfZGl2ID0g aW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwgY3BwKTsKKwkJc3Ry aWRlID0gaW50ZWxfZmItPnJvdGF0ZWRbMF0ucGl0Y2g7CiAJfSBlbHNlIHsKLQkJc3RyaWRlID0g ZmItPnBpdGNoZXNbMF0gLyBzdHJpZGVfZGl2OwotCQl4X29mZnNldCA9IHNyY194OwotCQl5X29m ZnNldCA9IHNyY195OwotCQlwbGFuZV9zaXplID0gKHNyY19oIC0gMSkgPDwgMTYgfCAoc3JjX3cg LSAxKTsKKwkJc3RyaWRlX2RpdiA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoZGV2X3ByaXYs IGZiLT5tb2RpZmllclswXSwKKwkJCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKKwkJc3Ry aWRlID0gZmItPnBpdGNoZXNbMF07CiAJfQotCXBsYW5lX29mZnNldCA9IHlfb2Zmc2V0IDw8IDE2 IHwgeF9vZmZzZXQ7CiAKLQlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geF9vZmZzZXQ7Ci0JaW50 ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHlfb2Zmc2V0OworCWludGVsX2FkZF9mYl9vZmZzZXRzKCZz cmNfeCwgJnNyY195LCBmYiwgMCwgcm90YXRpb24pOworCXN1cmZfYWRkciA9IGludGVsX2NvbXB1 dGVfdGlsZV9vZmZzZXQoJnNyY194LCAmc3JjX3ksIGZiLCAwLAorCQkJCQkgICAgICBzdHJpZGUs IHJvdGF0aW9uKTsKKworCS8qIFNpemVzIGFyZSAwIGJhc2VkICovCisJc3JjX3ctLTsKKwlzcmNf aC0tOworCWRzdF93LS07CisJZHN0X2gtLTsKKworCWludGVsX2NydGMtPmFkanVzdGVkX3ggPSBz cmNfeDsKKwlpbnRlbF9jcnRjLT5hZGp1c3RlZF95ID0gc3JjX3k7CiAKIAlJOTE1X1dSSVRFKFBM QU5FX0NUTChwaXBlLCAwKSwgcGxhbmVfY3RsKTsKLQlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChw aXBlLCAwKSwgcGxhbmVfb2Zmc2V0KTsKLQlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCks IHBsYW5lX3NpemUpOwotCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIDApLCBzdHJpZGUp OworCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIDApLCAoc3JjX3kgPDwgMTYpIHwgc3Jj X3gpOworCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIDApLCBzdHJpZGUgLyBzdHJpZGVf ZGl2KTsKKwlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCksIChzcmNfaCA8PCAxNikgfCBz cmNfdyk7CiAKIAlpZiAoc2NhbGVyX2lkID49IDApIHsKIAkJdWludDMyX3QgcHNfY3RybCA9IDA7 CkBAIC0zMjEyLDcgKzMzNDQsOCBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5 X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlJOTE1X1dSSVRFKFBMQU5FX1BPUyhw aXBlLCAwKSwgKGRzdF95IDw8IDE2KSB8IGRzdF94KTsKIAl9CiAKLQlJOTE1X1dSSVRFKFBMQU5F X1NVUkYocGlwZSwgMCksIHN1cmZfYWRkcik7CisJSTkxNV9XUklURShQTEFORV9TVVJGKHBpcGUs IDApLAorCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKyBzdXJmX2FkZHIp OwogCiAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwgMCkpOwogfQpAQCAtMTEzODgsNyAr MTE1MjEsNyBAQCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjLAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBpbnRlbF9jcnRjLT5i YXNlLnByaW1hcnktPmZiOwogCWNvbnN0IGVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlw ZTsKLQl1MzIgY3RsLCBzdHJpZGUsIHRpbGVfaGVpZ2h0OworCXUzMiBjdGwsIHN0cmlkZTsKIAog CWN0bCA9IEk5MTVfUkVBRChQTEFORV9DVEwocGlwZSwgMCkpOwogCWN0bCAmPSB+UExBTkVfQ1RM X1RJTEVEX01BU0s7CkBAIC0xMTQxMyw5ICsxMTU0NiwxMSBAQCBzdGF0aWMgdm9pZCBza2xfZG9f bW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAogCSAqIGxpbmVhciBidWZm ZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVmZmVycy4KIAkgKi8KIAlpZiAo aW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQkvKiBzdHJpZGUgPSBTdXJm YWNlIGhlaWdodCBpbiB0aWxlcyAqLwotCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0 KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIDApOwotCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAo ZmItPmhlaWdodCwgdGlsZV9oZWlnaHQpOworCQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9j cHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7CisJCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50 ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CisKKwkJc3RyaWRlID0gaW50ZWxfZmIt PnJvdGF0ZWRbMF0ucGl0Y2ggLworCQkJaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5t b2RpZmllclswXSwgY3BwKTsKIAl9IGVsc2UgewogCQlzdHJpZGUgPSBmYi0+cGl0Y2hlc1swXSAv CiAJCQlpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0s CkBAIC0xMTc0MCw4ICsxMTg3NSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19wYWdlX2ZsaXAo c3RydWN0IGRybV9jcnRjICpjcnRjLAogCWlmIChyZXQpCiAJCWdvdG8gY2xlYW51cF9wZW5kaW5n OwogCi0Jd29yay0+Z3R0X29mZnNldCA9IGludGVsX3BsYW5lX29ial9vZmZzZXQodG9faW50ZWxf cGxhbmUocHJpbWFyeSksCi0JCQkJCQkgIG9iaiwgMCk7CisJd29yay0+Z3R0X29mZnNldCA9IGlu dGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHByaW1hcnktPnN0YXRlLT5yb3RhdGlvbik7CiAJd29yay0+ Z3R0X29mZnNldCArPSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKIAogCWlmIChtbWlvX2Zs aXApIHsKQEAgLTE0Nzc0LDcgKzE0OTA4LDYgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZl cl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKLQl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWlnaHQ7CiAJaW50IHJldDsKIAl1 MzIgcGl0Y2hfbGltaXQsIHN0cmlkZV9hbGlnbm1lbnQ7CiAKQEAgLTE0ODk5LDE3ICsxNTAzMiwx MiBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7 CiAKLQlhbGlnbmVkX2hlaWdodCA9IGludGVsX2ZiX2FsaWduX2hlaWdodChkZXYsIG1vZGVfY21k LT5oZWlnaHQsCi0JCQkJCSAgICAgICBtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0LAotCQkJCQkgICAg ICAgbW9kZV9jbWQtPm1vZGlmaWVyWzBdKTsKLQkvKiBGSVhNRSBkcm0gaGVscGVyIGZvciBzaXpl IGNoZWNrcyAoZXNwZWNpYWxseSBwbGFuYXIgZm9ybWF0cyk/ICovCi0JaWYgKG9iai0+YmFzZS5z aXplIDwgYWxpZ25lZF9oZWlnaHQgKiBtb2RlX2NtZC0+cGl0Y2hlc1swXSkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KIAlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJmludGVsX2ZiLT5iYXNl LCBtb2RlX2NtZCk7CiAJaW50ZWxfZmItPm9iaiA9IG9iajsKIAotCWludGVsX2ZpbGxfZmJfaW5m byhkZXZfcHJpdiwgJmludGVsX2ZiLT5iYXNlKTsKKwlyZXQgPSBpbnRlbF9maWxsX2ZiX2luZm8o ZGV2X3ByaXYsICZpbnRlbF9mYi0+YmFzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAog CXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJmludGVsX2ZiLT5iYXNlLCAmaW50ZWxf ZmJfZnVuY3MpOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggOGEw ZjRkZmQwNGE2Li40NzNiNGNmOWEyZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0x MTksNiArMTE5LDE2IEBAIHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciB7CiAJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciBiYXNlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3Ry dWN0IGludGVsX3JvdGF0aW9uX2luZm8gcm90X2luZm87CisKKwkvKiBmb3IgZWFjaCBwbGFuZSBp biB0aGUgbm9ybWFsIEdUVCB2aWV3ICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IHgsIHk7 CisJfSBub3JtYWxbMl07CisJLyogZm9yIGVhY2ggcGxhbmUgaW4gdGhlIHJvdGF0ZWQgR1RUIHZp ZXcgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgeCwgeTsKKwkJdW5zaWduZWQgaW50IHBp dGNoOyAvKiBwaXhlbHMgKi8KKwl9IHJvdGF0ZWRbMl07CiB9OwogCiBzdHJ1Y3QgaW50ZWxfZmJk ZXYgewpAQCAtMTA2MCw2ICsxMDcwLDExIEBAIHZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfY2xl YW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCiAvKiBpbnRlbF9kaXNw bGF5LmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGludGVsX3BsYW5l X2Z1bmNzOwordW5zaWduZWQgaW50IGludGVsX2ZiX3h5X3RvX2xpbmVhcihpbnQgeCwgaW50IHks CisJCQkJICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSk7Cit2 b2lkIGludGVsX2FkZF9mYl9vZmZzZXRzKGludCAqeCwgaW50ICp5LAorCQkJICBjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAorCQkJICB1bnNpZ25lZCBpbnQgcm90 YXRpb24pOwogdW5zaWduZWQgaW50IGludGVsX3JvdGF0aW9uX2luZm9fc2l6ZShjb25zdCBzdHJ1 Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8pOwogYm9vbCBpbnRlbF9oYXNfcGVuZGlu Z19mYl91bnBpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBpbnRlbF9wY2hfcmF3Y2xr KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMTIxNyw5ICsxMjMyLDcgQEAgdm9pZCBpbnRl bF9tb2Rlc2V0X3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSk7CiBpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSk7CiBpbnQgc2tsX21heF9zY2FsZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0Yywgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogCi11MzIgaW50ZWxf cGxhbmVfb2JqX29mZnNldChzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lLAotCQkJICAg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgIHVuc2lnbmVkIGludCBwbGFu ZSk7Cit1MzIgaW50ZWxfZmJfZ3R0X29mZnNldChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg dW5zaWduZWQgaW50IHJvdGF0aW9uKTsKIAogdTMyIHNrbF9wbGFuZV9jdGxfZm9ybWF0KHVpbnQz Ml90IHBpeGVsX2Zvcm1hdCk7CiB1MzIgc2tsX3BsYW5lX2N0bF90aWxpbmcodWludDY0X3QgZmJf bW9kaWZpZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRl LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwppbmRleCA4ODIxNTMzNTYx YjEuLjg2MTc2MzA0MTU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf c3ByaXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKQEAgLTE4 NiwxNSArMTg2LDEzIEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3Bs YW5lLAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CiAJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKGRy bV9wbGFuZSk7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZi KTsKKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVi dWZmZXIoZmIpOwogCWNvbnN0IGludCBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7CiAJY29uc3Qg aW50IHBsYW5lID0gaW50ZWxfcGxhbmUtPnBsYW5lICsgMTsKIAl1MzIgcGxhbmVfY3RsLCBzdHJp ZGVfZGl2LCBzdHJpZGU7CiAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkg KmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKIAl1MzIgc3VyZl9hZGRyOwotCXUzMiB0aWxlX2hl aWdodCwgcGxhbmVfb2Zmc2V0LCBwbGFuZV9zaXplOwogCXVuc2lnbmVkIGludCByb3RhdGlvbiA9 IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwotCWludCB4X29mZnNldCwgeV9vZmZzZXQ7CiAJ aW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5kc3QueDE7CiAJaW50IGNydGNfeSA9IHBsYW5lX3N0 YXRlLT5kc3QueTE7CiAJdWludDMyX3QgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT5kc3QpOwpAQCAtMjE1LDE1ICsyMTMsNiBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKmRybV9wbGFuZSwKIAogCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0 aW9uKHJvdGF0aW9uKTsKIAotCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50 KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCi0JCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0 KTsKLQotCS8qIFNpemVzIGFyZSAwIGJhc2VkICovCi0Jc3JjX3ctLTsKLQlzcmNfaC0tOwotCWNy dGNfdy0tOwotCWNydGNfaC0tOwotCiAJaWYgKGtleS0+ZmxhZ3MpIHsKIAkJSTkxNV9XUklURShQ TEFORV9LRVlWQUwocGlwZSwgcGxhbmUpLCBrZXktPm1pbl92YWx1ZSk7CiAJCUk5MTVfV1JJVEUo UExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lKSwga2V5LT5tYXhfdmFsdWUpOwpAQCAtMjM1LDI4ICsy MjQsNDQgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCiAJ ZWxzZSBpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKIAkJcGxhbmVf Y3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NPVVJDRTsKIAotCXN1cmZfYWRkciA9IGludGVs X3BsYW5lX29ial9vZmZzZXQoaW50ZWxfcGxhbmUsIG9iaiwgMCk7Ci0KIAlpZiAoaW50ZWxfcm90 YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFu ZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Ci0KLQkJLyogc3RyaWRlOiBTdXJmYWNlIGhlaWdo dCBpbiB0aWxlcyAqLwotCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2 LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Ci0JCXN0cmlkZSA9IERJVl9ST1VORF9VUChmYi0+aGVp Z2h0LCB0aWxlX2hlaWdodCk7Ci0JCXBsYW5lX3NpemUgPSAoc3JjX3cgPDwgMTYpIHwgc3JjX2g7 Ci0JCXhfb2Zmc2V0ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Ci0J CXlfb2Zmc2V0ID0geDsKKwkJc3RydWN0IGRybV9yZWN0IHIgPSB7CisJCQkueDEgPSB4LAorCQkJ LngyID0geCArIHNyY193LAorCQkJLnkxID0geSwKKwkJCS55MiA9IHkgKyBzcmNfaCwKKwkJfTsK KwkJdW5zaWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3Jt YXQsIDApOworCisJCS8qIFJvdGF0ZSBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggcm90YXRlZCBH VFQgdmlldyAqLworCQlkcm1fcmVjdF9yb3RhdGUoJnIsIGZiLT53aWR0aCwgZmItPmhlaWdodCwg QklUKERSTV9ST1RBVEVfMjcwKSk7CisKKwkJeCA9IHIueDE7CisJCXkgPSByLnkxOworCQlzcmNf dyA9IGRybV9yZWN0X3dpZHRoKCZyKTsKKwkJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnIpOwor CisJCXN0cmlkZV9kaXYgPSBpbnRlbF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVy WzBdLCBjcHApOworCQlzdHJpZGUgPSBpbnRlbF9mYi0+cm90YXRlZFswXS5waXRjaDsKIAl9IGVs c2UgewotCQlzdHJpZGUgPSBmYi0+cGl0Y2hlc1swXSAvIHN0cmlkZV9kaXY7Ci0JCXBsYW5lX3Np emUgPSAoc3JjX2ggPDwgMTYpIHwgc3JjX3c7Ci0JCXhfb2Zmc2V0ID0geDsKLQkJeV9vZmZzZXQg PSB5OworCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwg ZmItPm1vZGlmaWVyWzBdLAorCQkJCQkJICAgICAgIGZiLT5waXhlbF9mb3JtYXQpOworCQlzdHJp ZGUgPSBmYi0+cGl0Y2hlc1swXTsKIAl9Ci0JcGxhbmVfb2Zmc2V0ID0geV9vZmZzZXQgPDwgMTYg fCB4X29mZnNldDsKIAotCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lKSwgcGxh bmVfb2Zmc2V0KTsKLQlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZSksIHN0cmlk ZSk7Ci0JSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lKSwgcGxhbmVfc2l6ZSk7CisJ aW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOworCXN1cmZfYWRk ciA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBmYiwgMCwKKwkJCQkJICAgICAg c3RyaWRlLCByb3RhdGlvbik7CisKKwkvKiBTaXplcyBhcmUgMCBiYXNlZCAqLworCXNyY193LS07 CisJc3JjX2gtLTsKKwljcnRjX3ctLTsKKwljcnRjX2gtLTsKKworCUk5MTVfV1JJVEUoUExBTkVf T0ZGU0VUKHBpcGUsIHBsYW5lKSwgKHkgPDwgMTYpIHwgeCk7CisJSTkxNV9XUklURShQTEFORV9T VFJJREUocGlwZSwgcGxhbmUpLCBzdHJpZGUgLyBzdHJpZGVfZGl2KTsKKwlJOTE1X1dSSVRFKFBM QU5FX1NJWkUocGlwZSwgcGxhbmUpLCAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOwogCiAJLyogcHJv Z3JhbSBwbGFuZSBzY2FsZXIgKi8KIAlpZiAocGxhbmVfc3RhdGUtPnNjYWxlcl9pZCA+PSAwKSB7 CkBAIC0yNzgsNyArMjgzLDggQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpk cm1fcGxhbmUsCiAJfQogCiAJSTkxNV9XUklURShQTEFORV9DVEwocGlwZSwgcGxhbmUpLCBwbGFu ZV9jdGwpOwotCUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBlLCBwbGFuZSksIHN1cmZfYWRkcik7 CisJSTkxNV9XUklURShQTEFORV9TVVJGKHBpcGUsIHBsYW5lKSwKKwkJICAgaW50ZWxfZmJfZ3R0 X29mZnNldChmYiwgcm90YXRpb24pICsgc3VyZl9hZGRyKTsKIAlQT1NUSU5HX1JFQUQoUExBTkVf U1VSRihwaXBlLCBwbGFuZSkpOwogfQogCkBAIC0zNTEsNyArMzU3LDYgQEAgdmx2X3VwZGF0ZV9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUsCiAJdTMyIHNwcmN0bDsKIAl1MzIgc3Byc3Vy Zl9vZmZzZXQsIGxpbmVhcl9vZmZzZXQ7CiAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gZHBsYW5l LT5zdGF0ZS0+cm90YXRpb247Ci0JaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5w aXhlbF9mb3JtYXQsIDApOwogCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5 ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7CiAJaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5k c3QueDE7CiAJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT5kc3QueTE7CkBAIC00MjIsMTkgKzQy NywxOSBAQCB2bHZfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRwbGFuZSwKIAljcnRj X3ctLTsKIAljcnRjX2gtLTsKIAotCWxpbmVhcl9vZmZzZXQgPSB5ICogZmItPnBpdGNoZXNbMF0g KyB4ICogY3BwOworCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgZmIsIDAsIHJvdGF0aW9u KTsKIAlzcHJzdXJmX29mZnNldCA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBm YiwgMCwKIAkJCQkJCSAgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Ci0JbGluZWFyX29mZnNl dCAtPSBzcHJzdXJmX29mZnNldDsKIAogCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8x ODApKSB7CiAJCXNwcmN0bCB8PSBTUF9ST1RBVEVfMTgwOwogCiAJCXggKz0gc3JjX3c7CiAJCXkg Kz0gc3JjX2g7Ci0JCWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNy Y193ICogY3BwOwogCX0KIAorCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIo eCwgeSwgZmIsIDApOworCiAJaWYgKGtleS0+ZmxhZ3MpIHsKIAkJSTkxNV9XUklURShTUEtFWU1J TlZBTChwaXBlLCBwbGFuZSksIGtleS0+bWluX3ZhbHVlKTsKIAkJSTkxNV9XUklURShTUEtFWU1B WFZBTChwaXBlLCBwbGFuZSksIGtleS0+bWF4X3ZhbHVlKTsKQEAgLTQ1OSw4ICs0NjQsOCBAQCB2 bHZfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRwbGFuZSwKIAogCUk5MTVfV1JJVEUo U1BTSVpFKHBpcGUsIHBsYW5lKSwgKGNydGNfaCA8PCAxNikgfCBjcnRjX3cpOwogCUk5MTVfV1JJ VEUoU1BDTlRSKHBpcGUsIHBsYW5lKSwgc3ByY3RsKTsKLQlJOTE1X1dSSVRFKFNQU1VSRihwaXBl LCBwbGFuZSksIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsKLQkJICAgc3Byc3VyZl9v ZmZzZXQpOworCUk5MTVfV1JJVEUoU1BTVVJGKHBpcGUsIHBsYW5lKSwKKwkJICAgaW50ZWxfZmJf Z3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3Byc3VyZl9vZmZzZXQpOwogCVBPU1RJTkdfUkVB RChTUFNVUkYocGlwZSwgcGxhbmUpKTsKIH0KIApAQCAtNDkzLDcgKzQ5OCw2IEBAIGl2Yl91cGRh dGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJdTMyIHNwcmN0bCwgc3Byc2NhbGUg PSAwOwogCXUzMiBzcHJzdXJmX29mZnNldCwgbGluZWFyX29mZnNldDsKIAl1bnNpZ25lZCBpbnQg cm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKLQlpbnQgY3BwID0gZHJtX2Zv cm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7CiAJY29uc3Qgc3RydWN0IGRybV9p bnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKIAlpbnQgY3J0 Y194ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsKIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmRz dC55MTsKQEAgLTU1NSwxMCArNTU5LDkgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNydGNfaCAhPSBzcmNfaCkKIAkJ c3Byc2NhbGUgPSBTUFJJVEVfU0NBTEVfRU5BQkxFIHwgKHNyY193IDw8IDE2KSB8IHNyY19oOwog Ci0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7CisJaW50ZWxf YWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOwogCXNwcnN1cmZfb2Zmc2V0 ID0gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAogCQkJCQkJICAgZmIt PnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKLQlsaW5lYXJfb2Zmc2V0IC09IHNwcnN1cmZfb2Zmc2V0 OwogCiAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKIAkJc3ByY3RsIHw9 IFNQUklURV9ST1RBVEVfMTgwOwpAQCAtNTY3LDEwICs1NzAsMTEgQEAgaXZiX3VwZGF0ZV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJaWYgKCFJU19IQVNXRUxMKGRldikgJiYgIUlT X0JST0FEV0VMTChkZXYpKSB7CiAJCQl4ICs9IHNyY193OwogCQkJeSArPSBzcmNfaDsKLQkJCWxp bmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNyY193ICogY3BwOwogCQl9 CiAJfQogCisJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwg MCk7CisKIAlpZiAoa2V5LT5mbGFncykgewogCQlJOTE1X1dSSVRFKFNQUktFWVZBTChwaXBlKSwg a2V5LT5taW5fdmFsdWUpOwogCQlJOTE1X1dSSVRFKFNQUktFWU1BWChwaXBlKSwga2V5LT5tYXhf dmFsdWUpOwpAQCAtNTk5LDcgKzYwMyw3IEBAIGl2Yl91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCiAJCUk5MTVfV1JJVEUoU1BSU0NBTEUocGlwZSksIHNwcnNjYWxlKTsKIAlJ OTE1X1dSSVRFKFNQUkNUTChwaXBlKSwgc3ByY3RsKTsKIAlJOTE1X1dSSVRFKFNQUlNVUkYocGlw ZSksCi0JCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgc3Byc3VyZl9vZmZzZXQp OworCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKyBzcHJzdXJmX29mZnNl dCk7CiAJUE9TVElOR19SRUFEKFNQUlNVUkYocGlwZSkpOwogfQogCkBAIC02MzQsNyArNjM4LDYg QEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAl1MzIgZHZzY250 ciwgZHZzc2NhbGU7CiAJdTMyIGR2c3N1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0OwogCXVuc2ln bmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwotCWludCBjcHAg PSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKIAljb25zdCBzdHJ1 Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5Owog CWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+ZHN0LngxOwogCWludCBjcnRjX3kgPSBwbGFuZV9z dGF0ZS0+ZHN0LnkxOwpAQCAtNjkyLDE5ICs2OTUsMTkgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNydGNfaCAhPSBz cmNfaCkKIAkJZHZzc2NhbGUgPSBEVlNfU0NBTEVfRU5BQkxFIHwgKHNyY193IDw8IDE2KSB8IHNy Y19oOwogCi0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7CisJ aW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOwogCWR2c3N1cmZf b2Zmc2V0ID0gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAogCQkJCQkJ ICAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKLQlsaW5lYXJfb2Zmc2V0IC09IGR2c3N1cmZf b2Zmc2V0OwogCiAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKIAkJZHZz Y250ciB8PSBEVlNfUk9UQVRFXzE4MDsKIAogCQl4ICs9IHNyY193OwogCQl5ICs9IHNyY19oOwot CQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19oICogZmItPnBpdGNoZXNbMF0gKyBzcmNfdyAqIGNwcDsK IAl9CiAKKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHksIGZiLCAw KTsKKwogCWlmIChrZXktPmZsYWdzKSB7CiAJCUk5MTVfV1JJVEUoRFZTS0VZVkFMKHBpcGUpLCBr ZXktPm1pbl92YWx1ZSk7CiAJCUk5MTVfV1JJVEUoRFZTS0VZTUFYKHBpcGUpLCBrZXktPm1heF92 YWx1ZSk7CkBAIC03MjgsNyArNzMxLDcgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAlJOTE1X1dSSVRFKERWU1NDQUxFKHBpcGUpLCBkdnNzY2FsZSk7CiAJSTkx NV9XUklURShEVlNDTlRSKHBpcGUpLCBkdnNjbnRyKTsKIAlJOTE1X1dSSVRFKERWU1NVUkYocGlw ZSksCi0JCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgZHZzc3VyZl9vZmZzZXQp OworCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKyBkdnNzdXJmX29mZnNl dCk7CiAJUE9TVElOR19SRUFEKERWU1NVUkYocGlwZSkpOwogfQogCi0tIAoyLjQuMTAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==