From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH v2 03/10] drm/imx: atomic phase 1: Use transitional atomic CRTC and plane helpers Date: Tue, 31 May 2016 17:24:24 +0800 Message-ID: <1464686671-20299-4-git-send-email-gnuiyl@gmail.com> References: <1464686671-20299-1-git-send-email-gnuiyl@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0072.outbound.protection.outlook.com [157.56.110.72]) by gabe.freedesktop.org (Postfix) with ESMTPS id B83A46E356 for ; Tue, 31 May 2016 09:24:58 +0000 (UTC) In-Reply-To: <1464686671-20299-1-git-send-email-gnuiyl@gmail.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: Russell King , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org VXNlIHRoZSBkcm1fcGxhbmVfaGVscGVyX3VwZGF0ZS9kaXNhYmxlKCkgYW5kIGRybV9oZWxwZXJf Y3J0Y19tb2RlX3NldCgpCnRyYW5zaXRpb25hbCBhdG9taWMgaGVscGVycy4gIFRoZSBjcnRjLT5t b2RlX3NldF9ub2ZiIGNhbGxiYWNrIGlzIGFkZGVkCnNvIHRoYXQgdGhlIHByaW1hcnkgcGxhbmUg aXMgbm8gbG9uZ2VyIHRpZWQgdG8gdGhlIENSVEMuICBDaGVjay91cGRhdGUKbG9naWNzIGFyZSBz ZXBhcmF0ZWQgdG8gbWFrZSBzdXJlIGNydGMtPm1vZGVfc2V0X25vZmIgYW5kIHBsYW5lLT5hdG9t aWNfdXBkYXRlCmFyZSBhbHdheXMgc3VjY2Vzc2Z1bC4gIEFsc28sIHNvbWUgbmVjZXNzYXJ5IGxv Z2ljcyBhcmUgdHdlYWtlZCBmb3IgYSBzbW9vdGgKdHJhbnNpdGlvbi4KClNpZ25lZC1vZmYtYnk6 IExpdSBZaW5nIDxnbnVpeWxAZ21haWwuY29tPgotLS0KdjEtPnYyOgoqIEdldCB0aGUgb3Zlcmxh eSBpcHUgcGxhbmUgcmVzb3VyY2Ugd2hlbiBpbml0aWFsaXppbmcgdGhlIHJlbGV2YW50IENSVEMK ICBhbmQgZG8gbm90IGdldCBpcHUgcGxhbmUgcmVzb3VyY2UgYW55IG1vcmUgd2hlbiB1cGRhdGlu ZyBwbGFuZSB0byBhdm9pZAogIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZS4KKiBSZW1vdmUg b2Jzb2xldGUgY29tbWVudHMgZnJvbSBpcHVfY3J0Y19lbmFibGUvZGlzYWJsZSgpLgoKIGRyaXZl cnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jICB8IDE5NyArKysrKysrKy0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYyB8IDUxNyArKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5oIHwgIDE2 ICstCiBkcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRjLmMgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMv Z3B1L2lwdS12My9pcHUtZGkuYyAgICAgICB8ICAgMyAtCiA1IGZpbGVzIGNoYW5nZWQsIDQxNiBp bnNlcnRpb25zKCspLCAzMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2lteC9pcHV2My1jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLWNydGMuYwpp bmRleCBmYzA0MDQxLi5iYTg4MGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lw dXYzLWNydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLWNydGMuYwpAQCAtNzMs NyArNzMsNyBAQCBzdHJ1Y3QgaXB1X2NydGMgewogCiAjZGVmaW5lIHRvX2lwdV9jcnRjKHgpIGNv bnRhaW5lcl9vZih4LCBzdHJ1Y3QgaXB1X2NydGMsIGJhc2UpCiAKLXN0YXRpYyB2b2lkIGlwdV9m Yl9lbmFibGUoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykKK3N0YXRpYyB2b2lkIGlwdV9jcnRj X2VuYWJsZShzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQogewogCXN0cnVjdCBpcHVfc29jICpp cHUgPSBkZXZfZ2V0X2RydmRhdGEoaXB1X2NydGMtPmRldi0+cGFyZW50KTsKIApAQCAtODEsMzAg KzgxLDMwIEBAIHN0YXRpYyB2b2lkIGlwdV9mYl9lbmFibGUoc3RydWN0IGlwdV9jcnRjICppcHVf Y3J0YykKIAkJcmV0dXJuOwogCiAJaXB1X2RjX2VuYWJsZShpcHUpOwotCWlwdV9wbGFuZV9lbmFi bGUoaXB1X2NydGMtPnBsYW5lWzBdKTsKLQkvKiBTdGFydCBEQyBjaGFubmVsIGFuZCBESSBhZnRl ciBJRE1BQyAqLwogCWlwdV9kY19lbmFibGVfY2hhbm5lbChpcHVfY3J0Yy0+ZGMpOwogCWlwdV9k aV9lbmFibGUoaXB1X2NydGMtPmRpKTsKLQlkcm1fY3J0Y192Ymxhbmtfb24oJmlwdV9jcnRjLT5i YXNlKTsKLQogCWlwdV9jcnRjLT5lbmFibGVkID0gMTsKKworCS8qCisJICogSW4gb3JkZXIgbm90 IHRvIGJlIHdhcm5lZCBvbiBlbmFibGluZyB2YmxhbmsgZmFpbHVyZSwKKwkgKiB3ZSBzaG91bGQg Y2FsbCBkcm1fY3J0Y192Ymxhbmtfb24oKSBhZnRlciAtPmVuYWJsZWQgaXMgc2V0IHRvIDEuCisJ ICovCisJZHJtX2NydGNfdmJsYW5rX29uKCZpcHVfY3J0Yy0+YmFzZSk7CiB9CiAKLXN0YXRpYyB2 b2lkIGlwdV9mYl9kaXNhYmxlKHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCitzdGF0aWMgdm9p ZCBpcHVfY3J0Y19kaXNhYmxlKHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCiB7CiAJc3RydWN0 IGlwdV9zb2MgKmlwdSA9IGRldl9nZXRfZHJ2ZGF0YShpcHVfY3J0Yy0+ZGV2LT5wYXJlbnQpOwog CiAJaWYgKCFpcHVfY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JLyogU3RvcCBEQyBjaGFu bmVsIGFuZCBESSBiZWZvcmUgSURNQUMgKi8KIAlpcHVfZGNfZGlzYWJsZV9jaGFubmVsKGlwdV9j cnRjLT5kYyk7CiAJaXB1X2RpX2Rpc2FibGUoaXB1X2NydGMtPmRpKTsKLQlpcHVfcGxhbmVfZGlz YWJsZShpcHVfY3J0Yy0+cGxhbmVbMF0pOwogCWlwdV9kY19kaXNhYmxlKGlwdSk7Ci0JZHJtX2Ny dGNfdmJsYW5rX29mZigmaXB1X2NydGMtPmJhc2UpOwotCiAJaXB1X2NydGMtPmVuYWJsZWQgPSAw OworCisJZHJtX2NydGNfdmJsYW5rX29mZigmaXB1X2NydGMtPmJhc2UpOwogfQogCiBzdGF0aWMg dm9pZCBpcHVfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCkBAIC0x MTUsMTIgKzExNSwxMiBAQCBzdGF0aWMgdm9pZCBpcHVfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywgaW50IG1vZGUpCiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIERSTV9NT0RFX0RQ TVNfT046Ci0JCWlwdV9mYl9lbmFibGUoaXB1X2NydGMpOworCQlpcHVfY3J0Y19lbmFibGUoaXB1 X2NydGMpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERS TV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgotCQlpcHVfZmJf ZGlzYWJsZShpcHVfY3J0Yyk7CisJCWlwdV9jcnRjX2Rpc2FibGUoaXB1X2NydGMpOwogCQlicmVh azsKIAl9CiB9CkBAIC0yMzQsNzkgKzIzNCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfZnVuY3MgaXB1X2NydGNfZnVuY3MgPSB7CiAJLnBhZ2VfZmxpcCA9IGlwdV9wYWdlX2ZsaXAs CiB9OwogCi1zdGF0aWMgaW50IGlwdV9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqb3JpZ19tb2RlLAotCQkJICAg ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJICAgICAgIGludCB4LCBpbnQg eSwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7Ci0Jc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOwotCXN0 cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnID0ge307Ci0JdW5zaWduZWQgbG9uZyBlbmNv ZGVyX3R5cGVzID0gMDsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6 IG1vZGUtPmhkaXNwbGF5OiAlZFxuIiwgX19mdW5jX18sCi0JCQltb2RlLT5oZGlzcGxheSk7Ci0J ZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IG1vZGUtPnZkaXNwbGF5OiAlZFxuIiwgX19mdW5j X18sCi0JCQltb2RlLT52ZGlzcGxheSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIs ICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkKLQkJaWYgKGVuY29kZXItPmNy dGMgPT0gY3J0YykKLQkJCWVuY29kZXJfdHlwZXMgfD0gQklUKGVuY29kZXItPmVuY29kZXJfdHlw ZSk7Ci0KLQlkZXZfZGJnKGlwdV9jcnRjLT5kZXYsICIlczogYXR0YWNoZWQgdG8gZW5jb2RlciB0 eXBlcyAweCVseFxuIiwKLQkJX19mdW5jX18sIGVuY29kZXJfdHlwZXMpOwotCi0JLyoKLQkgKiBJ ZiB3ZSBoYXZlIERBQyBvciBMREIsIHRoZW4gd2UgbmVlZCB0aGUgSVBVIERJIGNsb2NrIHRvIGJl Ci0JICogdGhlIHNhbWUgYXMgdGhlIExEQiBESSBjbG9jay4gRm9yIFRWREFDLCBkZXJpdmUgdGhl IElQVSBESQotCSAqIGNsb2NrIGZyb20gMjcgTUh6IFRWRV9ESSBjbG9jaywgYnV0IGFsbG93IHRv IGRpdmlkZSBpdC4KLQkgKi8KLQlpZiAoZW5jb2Rlcl90eXBlcyAmIChCSVQoRFJNX01PREVfRU5D T0RFUl9EQUMpIHwKLQkJCSAgICAgQklUKERSTV9NT0RFX0VOQ09ERVJfTFZEUykpKQotCQlzaWdf Y2ZnLmNsa2ZsYWdzID0gSVBVX0RJX0NMS01PREVfU1lOQyB8IElQVV9ESV9DTEtNT0RFX0VYVDsK LQllbHNlIGlmIChlbmNvZGVyX3R5cGVzICYgQklUKERSTV9NT0RFX0VOQ09ERVJfVFZEQUMpKQot CQlzaWdfY2ZnLmNsa2ZsYWdzID0gSVBVX0RJX0NMS01PREVfRVhUOwotCWVsc2UKLQkJc2lnX2Nm Zy5jbGtmbGFncyA9IDA7Ci0KLQlzaWdfY2ZnLmVuYWJsZV9wb2wgPSAhKGlwdV9jcnRjLT5idXNf ZmxhZ3MgJiBEUk1fQlVTX0ZMQUdfREVfTE9XKTsKLQkvKiBEZWZhdWx0IHRvIGRyaXZpbmcgcGl4 ZWwgZGF0YSBvbiBuZWdhdGl2ZSBjbG9jayBlZGdlcyAqLwotCXNpZ19jZmcuY2xrX3BvbCA9ICEh KGlwdV9jcnRjLT5idXNfZmxhZ3MgJgotCQkJICAgICBEUk1fQlVTX0ZMQUdfUElYREFUQV9QT1NF REdFKTsKLQlzaWdfY2ZnLmJ1c19mb3JtYXQgPSBpcHVfY3J0Yy0+YnVzX2Zvcm1hdDsKLQlzaWdf Y2ZnLnZfdG9faF9zeW5jID0gMDsKLQlzaWdfY2ZnLmhzeW5jX3BpbiA9IGlwdV9jcnRjLT5kaV9o c3luY19waW47Ci0Jc2lnX2NmZy52c3luY19waW4gPSBpcHVfY3J0Yy0+ZGlfdnN5bmNfcGluOwot Ci0JZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUobW9kZSwgJnNpZ19jZmcubW9kZSk7Ci0K LQlyZXQgPSBpcHVfZGNfaW5pdF9zeW5jKGlwdV9jcnRjLT5kYywgaXB1X2NydGMtPmRpLAotCQkJ ICAgICAgIG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UsCi0JCQkgICAgICAg aXB1X2NydGMtPmJ1c19mb3JtYXQsIG1vZGUtPmhkaXNwbGF5KTsKLQlpZiAocmV0KSB7Ci0JCWRl dl9lcnIoaXB1X2NydGMtPmRldiwKLQkJCQkiaW5pdGlhbGl6aW5nIGRpc3BsYXkgY29udHJvbGxl ciBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJCQlyZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJl dCA9IGlwdV9kaV9pbml0X3N5bmNfcGFuZWwoaXB1X2NydGMtPmRpLCAmc2lnX2NmZyk7Ci0JaWYg KHJldCkgewotCQlkZXZfZXJyKGlwdV9jcnRjLT5kZXYsCi0JCQkJImluaXRpYWxpemluZyBwYW5l bCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4g aXB1X3BsYW5lX21vZGVfc2V0KGlwdV9jcnRjLT5wbGFuZVswXSwgY3J0YywgbW9kZSwKLQkJCQkg IGNydGMtPnByaW1hcnktPmZiLAotCQkJCSAgMCwgMCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5LAotCQkJCSAgeCwgeSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAotCQkJ CSAgbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSk7Ci19Ci0KIHN0YXRpYyB2 b2lkIGlwdV9jcnRjX2hhbmRsZV9wYWdlZmxpcChzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQog ewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzAsOCArMjU3LDcgQEAgc3RhdGljIGlycXJl dHVybl90IGlwdV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiAJaWYgKGlwdV9j cnRjLT5mbGlwX3N0YXRlID09IElQVV9GTElQX1NVQk1JVFRFRCkgewogCQlzdHJ1Y3QgaXB1X3Bs YW5lICpwbGFuZSA9IGlwdV9jcnRjLT5wbGFuZVswXTsKIAotCQlpcHVfcGxhbmVfc2V0X2Jhc2Uo cGxhbmUsIGlwdV9jcnRjLT5iYXNlLnByaW1hcnktPmZiLAotCQkJCSAgIHBsYW5lLT54LCBwbGFu ZS0+eSk7CisJCWlwdV9wbGFuZV9zZXRfYmFzZShwbGFuZSwgaXB1X2NydGMtPmJhc2UucHJpbWFy eS0+ZmIpOwogCQlpcHVfY3J0Y19oYW5kbGVfcGFnZWZsaXAoaXB1X2NydGMpOwogCQlxdWV1ZV93 b3JrKGlwdV9jcnRjLT5mbGlwX3F1ZXVlLAogCQkJICAgJmlwdV9jcnRjLT5mbGlwX3dvcmstPnVu cmVmX3dvcmspOwpAQCAtMzU1LDYgKzI4MSw5IEBAIHN0YXRpYyBib29sIGlwdV9jcnRjX21vZGVf Zml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsK IAorCWlmICgodm0udnN5bmNfbGVuID09IDApIHx8ICh2bS5oc3luY19sZW4gPT0gMCkpCisJCXJl dHVybiBmYWxzZTsKKwogCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJnZtLCBhZGp1 c3RlZF9tb2RlKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMzY0LDI4ICsyOTMsOTUgQEAgc3RhdGlj IHZvaWQgaXB1X2NydGNfcHJlcGFyZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0 IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOwogCi0JaXB1X2ZiX2Rpc2Fi bGUoaXB1X2NydGMpOworCWlwdV9jcnRjX2Rpc2FibGUoaXB1X2NydGMpOwogfQogCiBzdGF0aWMg dm9pZCBpcHVfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBp cHVfY3J0YyAqaXB1X2NydGMgPSB0b19pcHVfY3J0YyhjcnRjKTsKIAotCWlwdV9mYl9lbmFibGUo aXB1X2NydGMpOworCWlwdV9jcnRjX2VuYWJsZShpcHVfY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQg aXB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg aXB1X2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7CisJc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOworCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2Rl OworCXN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnID0ge307CisJdW5zaWduZWQgbG9u ZyBlbmNvZGVyX3R5cGVzID0gMDsKKworCWRldl9kYmcoaXB1X2NydGMtPmRldiwgIiVzOiBtb2Rl LT5oZGlzcGxheTogJWRcbiIsIF9fZnVuY19fLAorCQkJbW9kZS0+aGRpc3BsYXkpOworCWRldl9k YmcoaXB1X2NydGMtPmRldiwgIiVzOiBtb2RlLT52ZGlzcGxheTogJWRcbiIsIF9fZnVuY19fLAor CQkJbW9kZS0+dmRpc3BsYXkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2 LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpCisJCWlmIChlbmNvZGVyLT5jcnRjID09 IGNydGMpCisJCQllbmNvZGVyX3R5cGVzIHw9IEJJVChlbmNvZGVyLT5lbmNvZGVyX3R5cGUpOwor CisJZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IGF0dGFjaGVkIHRvIGVuY29kZXIgdHlwZXMg MHglbHhcbiIsCisJCV9fZnVuY19fLCBlbmNvZGVyX3R5cGVzKTsKKworCS8qCisJICogSWYgd2Ug aGF2ZSBEQUMgb3IgTERCLCB0aGVuIHdlIG5lZWQgdGhlIElQVSBESSBjbG9jayB0byBiZQorCSAq IHRoZSBzYW1lIGFzIHRoZSBMREIgREkgY2xvY2suIEZvciBUVkRBQywgZGVyaXZlIHRoZSBJUFUg REkKKwkgKiBjbG9jayBmcm9tIDI3IE1IeiBUVkVfREkgY2xvY2ssIGJ1dCBhbGxvdyB0byBkaXZp ZGUgaXQuCisJICovCisJaWYgKGVuY29kZXJfdHlwZXMgJiAoQklUKERSTV9NT0RFX0VOQ09ERVJf REFDKSB8CisJCQkgICAgIEJJVChEUk1fTU9ERV9FTkNPREVSX0xWRFMpKSkKKwkJc2lnX2NmZy5j bGtmbGFncyA9IElQVV9ESV9DTEtNT0RFX1NZTkMgfCBJUFVfRElfQ0xLTU9ERV9FWFQ7CisJZWxz ZSBpZiAoZW5jb2Rlcl90eXBlcyAmIEJJVChEUk1fTU9ERV9FTkNPREVSX1RWREFDKSkKKwkJc2ln X2NmZy5jbGtmbGFncyA9IElQVV9ESV9DTEtNT0RFX0VYVDsKKwllbHNlCisJCXNpZ19jZmcuY2xr ZmxhZ3MgPSAwOworCisJc2lnX2NmZy5lbmFibGVfcG9sID0gIShpcHVfY3J0Yy0+YnVzX2ZsYWdz ICYgRFJNX0JVU19GTEFHX0RFX0xPVyk7CisJLyogRGVmYXVsdCB0byBkcml2aW5nIHBpeGVsIGRh dGEgb24gbmVnYXRpdmUgY2xvY2sgZWRnZXMgKi8KKwlzaWdfY2ZnLmNsa19wb2wgPSAhIShpcHVf Y3J0Yy0+YnVzX2ZsYWdzICYKKwkJCSAgICAgRFJNX0JVU19GTEFHX1BJWERBVEFfUE9TRURHRSk7 CisJc2lnX2NmZy5idXNfZm9ybWF0ID0gaXB1X2NydGMtPmJ1c19mb3JtYXQ7CisJc2lnX2NmZy52 X3RvX2hfc3luYyA9IDA7CisJc2lnX2NmZy5oc3luY19waW4gPSBpcHVfY3J0Yy0+ZGlfaHN5bmNf cGluOworCXNpZ19jZmcudnN5bmNfcGluID0gaXB1X2NydGMtPmRpX3ZzeW5jX3BpbjsKKworCWRy bV9kaXNwbGF5X21vZGVfdG9fdmlkZW9tb2RlKG1vZGUsICZzaWdfY2ZnLm1vZGUpOworCisJaXB1 X2RjX2luaXRfc3luYyhpcHVfY3J0Yy0+ZGMsIGlwdV9jcnRjLT5kaSwKKwkJCSBtb2RlLT5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFLAorCQkJIGlwdV9jcnRjLT5idXNfZm9ybWF0LCBt b2RlLT5oZGlzcGxheSk7CisJaXB1X2RpX2luaXRfc3luY19wYW5lbChpcHVfY3J0Yy0+ZGksICZz aWdfY2ZnKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3Mg aXB1X2hlbHBlcl9mdW5jcyA9IHsKIAkuZHBtcyA9IGlwdV9jcnRjX2RwbXMsCiAJLm1vZGVfZml4 dXAgPSBpcHVfY3J0Y19tb2RlX2ZpeHVwLAotCS5tb2RlX3NldCA9IGlwdV9jcnRjX21vZGVfc2V0 LAorCS5tb2RlX3NldCA9IGRybV9oZWxwZXJfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXRfbm9m YiA9IGlwdV9jcnRjX21vZGVfc2V0X25vZmIsCiAJLnByZXBhcmUgPSBpcHVfY3J0Y19wcmVwYXJl LAogCS5jb21taXQgPSBpcHVfY3J0Y19jb21taXQsCisJLmF0b21pY19jaGVjayA9IGlwdV9jcnRj X2F0b21pY19jaGVjaywKIH07CiAKIHN0YXRpYyBpbnQgaXB1X2VuYWJsZV92Ymxhbmsoc3RydWN0 IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMgPSB0b19pcHVf Y3J0YyhjcnRjKTsKIAorCS8qCisJICogLT5jb21taXQgaXMgZG9uZSBhZnRlciAtPm1vZGVfc2V0 IGluIGRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZSgpLAorCSAqIHNvIHdhaXRpbmcgZm9yIHZibGFu ayBpbiBkcm1fcGxhbmVfaGVscGVyX2NvbW1pdCgpIHdpbGwgdGltZW91dC4KKwkgKiBDaGVjayB0 aGUgc3RhdGUgaGVyZSB0byBhdm9pZCB0aGUgd2FpdGluZy4KKwkgKi8KKwlpZiAoIWlwdV9jcnRj LT5lbmFibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWVuYWJsZV9pcnEoaXB1X2NydGMtPmly cSk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ5Niw4ICs0OTIsMTYgQEAgc3RhdGljIGludCBpcHVfY3J0 Y19pbml0KHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMsCiAJCQkJCQlJUFVfRFBfRkxPV19TWU5D X0ZHLAogCQkJCQkJZHJtX2NydGNfbWFzaygmaXB1X2NydGMtPmJhc2UpLAogCQkJCQkJRFJNX1BM QU5FX1RZUEVfT1ZFUkxBWSk7Ci0JCWlmIChJU19FUlIoaXB1X2NydGMtPnBsYW5lWzFdKSkKKwkJ aWYgKElTX0VSUihpcHVfY3J0Yy0+cGxhbmVbMV0pKSB7CiAJCQlpcHVfY3J0Yy0+cGxhbmVbMV0g PSBOVUxMOworCQl9IGVsc2UgeworCQkJcmV0ID0gaXB1X3BsYW5lX2dldF9yZXNvdXJjZXMoaXB1 X2NydGMtPnBsYW5lWzFdKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGlwdV9jcnRjLT5k ZXYsICJnZXR0aW5nIHBsYW5lIDEgIgorCQkJCQkicmVzb3VyY2VzIGZhaWxlZCB3aXRoICVkLlxu IiwgcmV0KTsKKwkJCQlnb3RvIGVycl9wdXRfcGxhbmUwX3JlczsKKwkJCX0KKwkJfQogCX0KIAog CWlwdV9jcnRjLT5pcnEgPSBpcHVfcGxhbmVfaXJxKGlwdV9jcnRjLT5wbGFuZVswXSk7CkBAIC01 MDUsNyArNTA5LDcgQEAgc3RhdGljIGludCBpcHVfY3J0Y19pbml0KHN0cnVjdCBpcHVfY3J0YyAq aXB1X2NydGMsCiAJCQkiaW14X2RybSIsIGlwdV9jcnRjKTsKIAlpZiAocmV0IDwgMCkgewogCQlk ZXZfZXJyKGlwdV9jcnRjLT5kZXYsICJpcnEgcmVxdWVzdCBmYWlsZWQgd2l0aCAlZC5cbiIsIHJl dCk7Ci0JCWdvdG8gZXJyX3B1dF9wbGFuZV9yZXM7CisJCWdvdG8gZXJyX3B1dF9wbGFuZTFfcmVz OwogCX0KIAkvKiBPbmx5IGVuYWJsZSBJUlEgd2hlbiB3ZSBhY3R1YWxseSBuZWVkIGl0IHRvIHRy aWdnZXIgd29yay4gKi8KIAlkaXNhYmxlX2lycShpcHVfY3J0Yy0+aXJxKTsKQEAgLTUxNCw3ICs1 MTgsMTAgQEAgc3RhdGljIGludCBpcHVfY3J0Y19pbml0KHN0cnVjdCBpcHVfY3J0YyAqaXB1X2Ny dGMsCiAKIAlyZXR1cm4gMDsKIAotZXJyX3B1dF9wbGFuZV9yZXM6CitlcnJfcHV0X3BsYW5lMV9y ZXM6CisJaWYgKGlwdV9jcnRjLT5wbGFuZVsxXSkKKwkJaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMo aXB1X2NydGMtPnBsYW5lWzFdKTsKK2Vycl9wdXRfcGxhbmUwX3JlczoKIAlpcHVfcGxhbmVfcHV0 X3Jlc291cmNlcyhpcHVfY3J0Yy0+cGxhbmVbMF0pOwogZXJyX3JlbW92ZV9jcnRjOgogCWlteF9k cm1fcmVtb3ZlX2NydGMoaXB1X2NydGMtPmlteF9jcnRjKTsKQEAgLTU1NCw4ICs1NjEsMTAgQEAg c3RhdGljIHZvaWQgaXB1X2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlICptYXN0ZXIsCiAJaW14X2RybV9yZW1vdmVfY3J0YyhpcHVfY3J0Yy0+aW14X2NydGMpOwog CiAJZGVzdHJveV93b3JrcXVldWUoaXB1X2NydGMtPmZsaXBfcXVldWUpOwotCWlwdV9wbGFuZV9w dXRfcmVzb3VyY2VzKGlwdV9jcnRjLT5wbGFuZVswXSk7CiAJaXB1X3B1dF9yZXNvdXJjZXMoaXB1 X2NydGMpOworCWlmIChpcHVfY3J0Yy0+cGxhbmVbMV0pCisJCWlwdV9wbGFuZV9wdXRfcmVzb3Vy Y2VzKGlwdV9jcnRjLT5wbGFuZVsxXSk7CisJaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoaXB1X2Ny dGMtPnBsYW5lWzBdKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGlw dV9jcnRjX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxh bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYwppbmRleCAwMjcwMWRlLi45 YjkyNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAj aW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9w bGFuZV9oZWxwZXIuaD4KIAogI2luY2x1ZGUgInZpZGVvL2lteC1pcHUtdjMuaCIKICNpbmNsdWRl ICJpcHV2My1wbGFuZS5oIgpAQCAtNTMsMTIgKzU0LDE1IEBAIGludCBpcHVfcGxhbmVfaXJxKHN0 cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKIAkJCQkgICAgIElQVV9JUlFfRU9GKTsKIH0KIAot aW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgICAgaW50IHgsIGludCB5KQoraW50IGlwdV9w bGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiKQogewotCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmpbM107 Ci0JdW5zaWduZWQgbG9uZyBlYmEsIHVibywgdmJvOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QgKmNtYV9vYmpbM10sICpvbGRfY21hX29ialszXTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSA9IGlwdV9wbGFuZS0+YmFzZS5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpvbGRfZmIgPSBzdGF0ZS0+ZmI7CisJdW5zaWduZWQgbG9uZyBlYmEsIHVibywgdmJvLCBvbGRf ZWJhLCBvbGRfdWJvLCBvbGRfdmJvOwogCWludCBhY3RpdmUsIGk7CisJaW50IHggPSBzdGF0ZS0+ c3JjX3ggPj4gMTY7CisJaW50IHkgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7CiAKIAlmb3IgKGkgPSAw OyBpIDwgZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZiLT5waXhlbF9mb3JtYXQpOyBpKyspIHsKIAkJ Y21hX29ialtpXSA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIGkpOwpAQCAtNjgsNiArNzIs MTQgQEAgaW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUs IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQl9CiAJfQogCisJZm9yIChpID0gMDsgaSA8 IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhvbGRfZmItPnBpeGVsX2Zvcm1hdCk7IGkrKykgeworCQlv bGRfY21hX29ialtpXSA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmoob2xkX2ZiLCBpKTsKKwkJaWYg KCFvbGRfY21hX29ialtpXSkgeworCQkJRFJNX0RFQlVHX0tNUygicGxhbmUgJWQgZW50cnkgaXMg bnVsbC5cbiIsIGkpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisKIAllYmEgPSBjbWFf b2JqWzBdLT5wYWRkciArIGZiLT5vZmZzZXRzWzBdICsKIAkgICAgICBmYi0+cGl0Y2hlc1swXSAq IHkgKyAoZmItPmJpdHNfcGVyX3BpeGVsID4+IDMpICogeDsKIApAQCAtODEsMTMgKzkzLDExIEBA IGludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGlw dV9wbGFuZS0+ZW5hYmxlZCAmJiBmYi0+cGl0Y2hlc1swXSAhPSBpcHVfcGxhbmUtPnN0cmlkZVsw XSkgeworCWlmIChmYi0+cGl0Y2hlc1swXSAhPSBvbGRfZmItPnBpdGNoZXNbMF0pIHsKIAkJRFJN X0RFQlVHX0tNUygicGl0Y2hlcyBtdXN0IG5vdCBjaGFuZ2Ugd2hpbGUgcGxhbmUgaXMgZW5hYmxl ZC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpcHVfcGxhbmUtPnN0cmlkZVswXSA9 IGZiLT5waXRjaGVzWzBdOwotCiAJc3dpdGNoIChmYi0+cGl4ZWxfZm9ybWF0KSB7CiAJY2FzZSBE Uk1fRk9STUFUX1lVVjQyMDoKIAljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgpAQCAtMTA0LDYgKzEx NCwxNCBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFu ZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCXZibyA9IGNtYV9vYmpbMl0tPnBhZGRy ICsgZmItPm9mZnNldHNbMl0gKwogCQkgICAgICBmYi0+cGl0Y2hlc1syXSAqIHkgLyAyICsgeCAv IDIgLSBlYmE7CiAKKwkJb2xkX2ViYSA9IG9sZF9jbWFfb2JqWzBdLT5wYWRkciArIG9sZF9mYi0+ b2Zmc2V0c1swXSArCisJCSAgICAgIG9sZF9mYi0+cGl0Y2hlc1swXSAqIHkgKworCQkgICAgICAo b2xkX2ZiLT5iaXRzX3Blcl9waXhlbCA+PiAzKSAqIHg7CisJCW9sZF91Ym8gPSBvbGRfY21hX29i alsxXS0+cGFkZHIgKyBvbGRfZmItPm9mZnNldHNbMV0gKworCQkgICAgICBvbGRfZmItPnBpdGNo ZXNbMV0gKiB5IC8gMiArIHggLyAyIC0gb2xkX2ViYTsKKwkJb2xkX3ZibyA9IG9sZF9jbWFfb2Jq WzJdLT5wYWRkciArIG9sZF9mYi0+b2Zmc2V0c1syXSArCisJCSAgICAgIG9sZF9mYi0+cGl0Y2hl c1syXSAqIHkgLyAyICsgeCAvIDIgLSBvbGRfZWJhOworCiAJCWlmICgodWJvICYgMHg3KSB8fCAo dmJvICYgMHg3KSkgewogCQkJRFJNX0RFQlVHX0tNUygiVS9WIGJ1ZmZlciBvZmZzZXRzIG11c3Qg YmUgYSBtdWx0aXBsZSBvZiA4LlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNCw4ICsx MzIsNyBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFu ZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQog Ci0JCWlmIChpcHVfcGxhbmUtPmVuYWJsZWQgJiYgKChpcHVfcGxhbmUtPnVfb2Zmc2V0ICE9IHVi bykgfHwKLQkJCQkJICAgKGlwdV9wbGFuZS0+dl9vZmZzZXQgIT0gdmJvKSkpIHsKKwkJaWYgKG9s ZF91Ym8gIT0gdWJvIHx8IG9sZF92Ym8gIT0gdmJvKSB7CiAJCQlEUk1fREVCVUdfS01TKCJVL1Yg YnVmZmVyIG9mZnNldHMgbXVzdCBub3QgY2hhbmdlIHdoaWxlIHBsYW5lIGlzIGVuYWJsZWQuXG4i KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMzAsMTYgKzE0NywxMSBAQCBpbnQgaXB1 X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChpcHVfcGxh bmUtPmVuYWJsZWQgJiYKLQkJICAgIChpcHVfcGxhbmUtPnN0cmlkZVsxXSAhPSBmYi0+cGl0Y2hl c1sxXSkpIHsKKwkJaWYgKG9sZF9mYi0+cGl0Y2hlc1sxXSAhPSBmYi0+cGl0Y2hlc1sxXSkgewog CQkJRFJNX0RFQlVHX0tNUygiVS9WIHBpdGNoZXMgbXVzdCBub3QgY2hhbmdlIHdoaWxlIHBsYW5l IGlzIGVuYWJsZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaXB1X3BsYW5l LT51X29mZnNldCA9IHVibzsKLQkJaXB1X3BsYW5lLT52X29mZnNldCA9IHZibzsKLQkJaXB1X3Bs YW5lLT5zdHJpZGVbMV0gPSBmYi0+cGl0Y2hlc1sxXTsKLQogCQlkZXZfZGJnKGlwdV9wbGFuZS0+ YmFzZS5kZXYtPmRldiwKIAkJCSJwaHlzID0gJXBhZCAlcGFkICVwYWQsIHggPSAlZCwgeSA9ICVk IiwKIAkJCSZjbWFfb2JqWzBdLT5wYWRkciwgJmNtYV9vYmpbMV0tPnBhZGRyLApAQCAtMTUxLDE2 NCArMTYzLDExMSBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlw dV9wbGFuZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCWJyZWFrOwogCX0KIAotCWlm IChpcHVfcGxhbmUtPmVuYWJsZWQpIHsKLQkJYWN0aXZlID0gaXB1X2lkbWFjX2dldF9jdXJyZW50 X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCk7Ci0JCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9w bGFuZS0+aXB1X2NoLCAhYWN0aXZlLCBlYmEpOwotCQlpcHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihp cHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSk7Ci0JfSBlbHNlIHsKLQkJaXB1X2NwbWVtX3NldF9i dWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsIDAsIGViYSk7Ci0JCWlwdV9jcG1lbV9zZXRfYnVmZmVy KGlwdV9wbGFuZS0+aXB1X2NoLCAxLCBlYmEpOwotCX0KLQotCS8qIGNhY2hlIG9mZnNldHMgZm9y IHN1YnNlcXVlbnQgcGFnZWZsaXBzICovCi0JaXB1X3BsYW5lLT54ID0geDsKLQlpcHVfcGxhbmUt PnkgPSB5OworCWFjdGl2ZSA9IGlwdV9pZG1hY19nZXRfY3VycmVudF9idWZmZXIoaXB1X3BsYW5l LT5pcHVfY2gpOworCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAhYWN0 aXZlLCBlYmEpOworCWlwdV9pZG1hY19zZWxlY3RfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAh YWN0aXZlKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgaXB1X3BsYW5lX21vZGVfc2V0KHN0cnVj dCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkgICAgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IGNydGNfeCwgaW50IGNydGNfeSwKLQkJICAgICAgIHVuc2lnbmVkIGlu dCBjcnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCi0JCSAgICAgICB1aW50MzJfdCBzcmNfeCwg dWludDMyX3Qgc3JjX3ksCi0JCSAgICAgICB1aW50MzJfdCBzcmNfdywgdWludDMyX3Qgc3JjX2gs IGJvb2wgaW50ZXJsYWNlZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZHJtX3BsYW5l X3N0YXRlX3RvX2ViYShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBpcHVfcGxhbmUtPmJhc2UuZGV2LT5kZXY7Ci0JaW50IHJldDsKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFf b2JqZWN0ICpjbWFfb2JqOwogCi0JLyogbm8gc2NhbGluZyAqLwotCWlmIChzcmNfdyAhPSBjcnRj X3cgfHwgc3JjX2ggIT0gY3J0Y19oKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljbWFfb2JqID0gZHJt X2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJQlVHX09OKCFjbWFfb2JqKTsKIAotCWlmIChp cHVfcGxhbmUtPmJhc2UudHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Ci0JCS8qIGZ1 bGwgcGxhbmUgZG9lc24ndCBzdXBwb3J0IHBhcnRpYWwgb2ZmIHNjcmVlbiAqLwotCQlpZiAoY3J0 Y194IHx8IGNydGNfeSB8fCBjcnRjX3cgIT0gbW9kZS0+aGRpc3BsYXkgfHwKLQkJCWNydGNfaCAh PSBtb2RlLT52ZGlzcGxheSkKLQkJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBjbWFfb2JqLT5w YWRkciArIGZiLT5vZmZzZXRzWzBdICsKKwkgICAgICAgZmItPnBpdGNoZXNbMF0gKiAoc3RhdGUt PnNyY195ID4+IDE2KSArCisJICAgICAgIChmYi0+Yml0c19wZXJfcGl4ZWwgPj4gMykgKiAoc3Rh dGUtPnNyY194ID4+IDE2KTsKK30KIAotCQkvKiBmdWxsIHBsYW5lIG1pbmltdW0gd2lkdGggaXMg MTMgcGl4ZWxzICovCi0JCWlmIChjcnRjX3cgPCAxMykKLQkJCXJldHVybiAtRUlOVkFMOwotCX0g ZWxzZSBpZiAoaXB1X3BsYW5lLT5iYXNlLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkg ewotCQkvKiBjbGlwIHRvIGNydGMgYm91bmRzICovCi0JCWlmIChjcnRjX3ggPCAwKSB7Ci0JCQlp ZiAoLWNydGNfeCA+IGNydGNfdykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXNyY194ICs9IC1j cnRjX3g7Ci0JCQlzcmNfdyAtPSAtY3J0Y194OwotCQkJY3J0Y193IC09IC1jcnRjX3g7Ci0JCQlj cnRjX3ggPSAwOwotCQl9Ci0JCWlmIChjcnRjX3kgPCAwKSB7Ci0JCQlpZiAoLWNydGNfeSA+IGNy dGNfaCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXNyY195ICs9IC1jcnRjX3k7Ci0JCQlzcmNf aCAtPSAtY3J0Y195OwotCQkJY3J0Y19oIC09IC1jcnRjX3k7Ci0JCQljcnRjX3kgPSAwOwotCQl9 Ci0JCWlmIChjcnRjX3ggKyBjcnRjX3cgPiBtb2RlLT5oZGlzcGxheSkgewotCQkJaWYgKGNydGNf eCA+IG1vZGUtPmhkaXNwbGF5KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJY3J0Y193ID0gbW9k ZS0+aGRpc3BsYXkgLSBjcnRjX3g7Ci0JCQlzcmNfdyA9IGNydGNfdzsKLQkJfQotCQlpZiAoY3J0 Y195ICsgY3J0Y19oID4gbW9kZS0+dmRpc3BsYXkpIHsKLQkJCWlmIChjcnRjX3kgPiBtb2RlLT52 ZGlzcGxheSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWNydGNfaCA9IG1vZGUtPnZkaXNwbGF5 IC0gY3J0Y195OwotCQkJc3JjX2ggPSBjcnRjX2g7Ci0JCX0KLQl9IGVsc2UKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JaWYgKGNydGNfaCA8IDIpCi0JCXJldHVybiAtRUlOVkFMOworc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBsb25nCitkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZi OworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisJdW5zaWduZWQgbG9uZyBl YmEgPSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJhKHN0YXRlKTsKIAotCS8qCi0JICogc2luY2Ugd2Ug Y2Fubm90IHRvdWNoIGFjdGl2ZSBJRE1BQyBjaGFubmVscywgd2UgZG8gbm90IHN1cHBvcnQKLQkg KiByZXNpemluZyB0aGUgZW5hYmxlZCBwbGFuZSBvciBjaGFuZ2luZyBpdHMgZm9ybWF0Ci0JICov Ci0JaWYgKGlwdV9wbGFuZS0+ZW5hYmxlZCkgewotCQlpZiAoc3JjX3cgIT0gaXB1X3BsYW5lLT53 IHx8IHNyY19oICE9IGlwdV9wbGFuZS0+aCB8fAotCQkgICAgZmItPnBpeGVsX2Zvcm1hdCAhPSBp cHVfcGxhbmUtPmJhc2UuZmItPnBpeGVsX2Zvcm1hdCkKLQkJCXJldHVybiAtRUlOVkFMOworCWNt YV9vYmogPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAxKTsKKwlCVUdfT04oIWNtYV9vYmop OwogCi0JCXJldHVybiBpcHVfcGxhbmVfc2V0X2Jhc2UoaXB1X3BsYW5lLCBmYiwgc3JjX3gsIHNy Y195KTsKLQl9CisJcmV0dXJuIGNtYV9vYmotPnBhZGRyICsgZmItPm9mZnNldHNbMV0gKworCSAg ICAgICBmYi0+cGl0Y2hlc1sxXSAqIChzdGF0ZS0+c3JjX3kgPj4gMTYpIC8gMiArCisJICAgICAg IChzdGF0ZS0+c3JjX3ggPj4gMTYpIC8gMiAtIGViYTsKK30KIAotCXN3aXRjaCAoaXB1X3BsYW5l LT5kcF9mbG93KSB7Ci0JY2FzZSBJUFVfRFBfRkxPV19TWU5DX0JHOgotCQlyZXQgPSBpcHVfZHBf c2V0dXBfY2hhbm5lbChpcHVfcGxhbmUtPmRwLAotCQkJCUlQVVYzX0NPTE9SU1BBQ0VfUkdCLAot CQkJCUlQVVYzX0NPTE9SU1BBQ0VfUkdCKTsKLQkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYs Ci0JCQkJImluaXRpYWxpemluZyBkaXNwbGF5IHByb2Nlc3NvciBmYWlsZWQgd2l0aCAlZFxuIiwK LQkJCQlyZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpcHVfZHBfc2V0X2dsb2JhbF9hbHBo YShpcHVfcGxhbmUtPmRwLCB0cnVlLCAwLCB0cnVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUFVfRFBf RkxPV19TWU5DX0ZHOgotCQlpcHVfZHBfc2V0dXBfY2hhbm5lbChpcHVfcGxhbmUtPmRwLAotCQkJ CWlwdV9kcm1fZm91cmNjX3RvX2NvbG9yc3BhY2UoZmItPnBpeGVsX2Zvcm1hdCksCi0JCQkJSVBV VjNfQ09MT1JTUEFDRV9VTktOT1dOKTsKLQkJaXB1X2RwX3NldF93aW5kb3dfcG9zKGlwdV9wbGFu ZS0+ZHAsIGNydGNfeCwgY3J0Y195KTsKLQkJLyogRW5hYmxlIGxvY2FsIGFscGhhIG9uIHBhcnRp YWwgcGxhbmUgKi8KLQkJc3dpdGNoIChmYi0+cGl4ZWxfZm9ybWF0KSB7Ci0JCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCMTU1NToKLQkJY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1OgotCQljYXNlIERSTV9G T1JNQVRfUkdCQTU1NTE6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKLQkJY2FzZSBEUk1f Rk9STUFUX0FSR0I0NDQ0OgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Ci0JCWNhc2UgRFJN X0ZPUk1BVF9BQkdSODg4ODoKLQkJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgotCQljYXNlIERS TV9GT1JNQVRfQkdSQTg4ODg6Ci0JCQlpcHVfZHBfc2V0X2dsb2JhbF9hbHBoYShpcHVfcGxhbmUt PmRwLCBmYWxzZSwgMCwgZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcKK2RybV9wbGFuZV9zdGF0ZV90b192Ym8oc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ ZmI7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKwl1bnNpZ25lZCBsb25n IGViYSA9IGRybV9wbGFuZV9zdGF0ZV90b19lYmEoc3RhdGUpOworCisJY21hX29iaiA9IGRybV9m Yl9jbWFfZ2V0X2dlbV9vYmooZmIsIDIpOworCUJVR19PTighY21hX29iaik7CisKKwlyZXR1cm4g Y21hX29iai0+cGFkZHIgKyBmYi0+b2Zmc2V0c1syXSArCisJICAgICAgIGZiLT5waXRjaGVzWzJd ICogKHN0YXRlLT5zcmNfeSA+PiAxNikgLyAyICsKKwkgICAgICAgKHN0YXRlLT5zcmNfeCA+PiAx NikgLyAyIC0gZWJhOworfQorCit2b2lkIGlwdV9wbGFuZV9hdG9taWNfc2V0X2Jhc2Uoc3RydWN0 IGlwdV9wbGFuZSAqaXB1X3BsYW5lLAorCQkJICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg Km9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZpcHVfcGxhbmUtPmJh c2U7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJdW5zaWduZWQgbG9uZyBlYmEs IHVibywgdmJvOworCWludCBhY3RpdmU7CisKKwllYmEgPSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJh KHN0YXRlKTsKKworCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0MjA6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKKwkJaWYgKG9sZF9zdGF0ZS0+ZmIp CiAJCQlicmVhazsKLQkJfQotCX0KIAotCWlwdV9kbWZjX2NvbmZpZ193YWl0NGVvdChpcHVfcGxh bmUtPmRtZmMsIGNydGNfdyk7CisJCS8qCisJCSAqIE11bHRpcGxhbmFyIGZvcm1hdHMgaGF2ZSB0 byBtZWV0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCQkgKiAtIFRoZSAodXAgdG8pIHRo cmVlIHBsYW5lIGFkZHJlc3NlcyBhcmUgRUJBLCBFQkErVUJPLCBFQkErVkJPCisJCSAqIC0gRUJB LCBVQk8gYW5kIFZCTyBhcmUgYSBtdWx0aXBsZSBvZiA4CisJCSAqIC0gVUJPIGFuZCBWQk8gYXJl IHVuc2lnbmVkIGFuZCBub3QgbGFyZ2VyIHRoYW4gMHhmZmZmZjgKKwkJICogLSBPbmx5IEVCQSBt YXkgYmUgY2hhbmdlZCB3aGlsZSBzY2Fub3V0IGlzIGFjdGl2ZQorCQkgKiAtIFRoZSBzdHJpZGVz IG9mIFUgYW5kIFYgcGxhbmVzIG11c3QgYmUgaWRlbnRpY2FsLgorCQkgKi8KKwkJdWJvID0gZHJt X3BsYW5lX3N0YXRlX3RvX3VibyhzdGF0ZSk7CisJCXZibyA9IGRybV9wbGFuZV9zdGF0ZV90b192 Ym8oc3RhdGUpOwogCi0JaXB1X2NwbWVtX3plcm8oaXB1X3BsYW5lLT5pcHVfY2gpOwotCWlwdV9j cG1lbV9zZXRfcmVzb2x1dGlvbihpcHVfcGxhbmUtPmlwdV9jaCwgc3JjX3csIHNyY19oKTsKLQly ZXQgPSBpcHVfY3BtZW1fc2V0X2ZtdChpcHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpeGVsX2Zvcm1h dCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBwaXhlbCBm b3JtYXQgMHglMDh4XG4iLAotCQkJZmItPnBpeGVsX2Zvcm1hdCk7Ci0JCXJldHVybiByZXQ7Ci0J fQotCWlwdV9jcG1lbV9zZXRfaGlnaF9wcmlvcml0eShpcHVfcGxhbmUtPmlwdV9jaCk7Ci0JaXB1 X2lkbWFjX3NldF9kb3VibGVfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAxKTsKLQlpcHVfY3Bt ZW1fc2V0X3N0cmlkZShpcHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpdGNoZXNbMF0pOworCQlpZiAo ZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lVVjQyMCkKKwkJCWlwdV9jcG1lbV9zZXRf eXV2X3BsYW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAorCQkJCQkJICAgICAgZmItPnBpdGNo ZXNbMV0sIHVibywgdmJvKTsKKwkJZWxzZQorCQkJaXB1X2NwbWVtX3NldF95dXZfcGxhbmFyX2Z1 bGwoaXB1X3BsYW5lLT5pcHVfY2gsCisJCQkJCQkgICAgICBmYi0+cGl0Y2hlc1sxXSwgdmJvLCB1 Ym8pOwogCi0JcmV0ID0gaXB1X3BsYW5lX3NldF9iYXNlKGlwdV9wbGFuZSwgZmIsIHNyY194LCBz cmNfeSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JaWYgKGludGVybGFjZWQpCi0J CWlwdV9jcG1lbV9pbnRlcmxhY2VkX3NjYW4oaXB1X3BsYW5lLT5pcHVfY2gsIGZiLT5waXRjaGVz WzBdKTsKLQotCWlmIChmYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfWVVWNDIwKSB7Ci0J CWlwdV9jcG1lbV9zZXRfeXV2X3BsYW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAotCQkJCQkg ICAgICBpcHVfcGxhbmUtPnN0cmlkZVsxXSwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT51X29mZnNl dCwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT52X29mZnNldCk7Ci0JfSBlbHNlIGlmIChmYi0+cGl4 ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfWVZVNDIwKSB7Ci0JCWlwdV9jcG1lbV9zZXRfeXV2X3Bs YW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAotCQkJCQkgICAgICBpcHVfcGxhbmUtPnN0cmlk ZVsxXSwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT52X29mZnNldCwKLQkJCQkJICAgICAgaXB1X3Bs YW5lLT51X29mZnNldCk7Ci0JfQorCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldiwK KwkJCSJwaHkgPSAlbHUgJWx1ICVsdSwgeCA9ICVkLCB5ID0gJWQiLCBlYmEsIHVibywgdmJvLAor CQkJc3RhdGUtPnNyY194ID4+IDE2LCBzdGF0ZS0+c3JjX3kgPj4gMTYpOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldiwgInBoeXMgPSAlbHUs IHggPSAlZCwgeSA9ICVkIiwKKwkJCWViYSwgc3RhdGUtPnNyY194ID4+IDE2LCBzdGF0ZS0+c3Jj X3kgPj4gMTYpOwogCi0JaXB1X3BsYW5lLT53ID0gc3JjX3c7Ci0JaXB1X3BsYW5lLT5oID0gc3Jj X2g7CisJCWJyZWFrOworCX0KIAotCXJldHVybiAwOworCWlmIChvbGRfc3RhdGUtPmZiKSB7CisJ CWFjdGl2ZSA9IGlwdV9pZG1hY19nZXRfY3VycmVudF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gp OworCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSwgZWJh KTsKKwkJaXB1X2lkbWFjX3NlbGVjdF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsICFhY3RpdmUp OworCX0gZWxzZSB7CisJCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAw LCBlYmEpOworCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgMSwgZWJh KTsKKwl9CiB9CiAKIHZvaWQgaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoc3RydWN0IGlwdV9wbGFu ZSAqaXB1X3BsYW5lKQpAQCAtMzU1LDcgKzMxNCw3IEBAIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsK IH0KIAotdm9pZCBpcHVfcGxhbmVfZW5hYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkK K3N0YXRpYyB2b2lkIGlwdV9wbGFuZV9lbmFibGUoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5l KQogewogCWlmIChpcHVfcGxhbmUtPmRwKQogCQlpcHVfZHBfZW5hYmxlKGlwdV9wbGFuZS0+aXB1 KTsKQEAgLTM2MywxNCArMzIyLDEwIEBAIHZvaWQgaXB1X3BsYW5lX2VuYWJsZShzdHJ1Y3QgaXB1 X3BsYW5lICppcHVfcGxhbmUpCiAJaXB1X2lkbWFjX2VuYWJsZV9jaGFubmVsKGlwdV9wbGFuZS0+ aXB1X2NoKTsKIAlpZiAoaXB1X3BsYW5lLT5kcCkKIAkJaXB1X2RwX2VuYWJsZV9jaGFubmVsKGlw dV9wbGFuZS0+ZHApOwotCi0JaXB1X3BsYW5lLT5lbmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBp cHVfcGxhbmVfZGlzYWJsZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCitzdGF0aWMgdm9p ZCBpcHVfcGxhbmVfZGlzYWJsZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCiB7Ci0JaXB1 X3BsYW5lLT5lbmFibGVkID0gZmFsc2U7Ci0KIAlpcHVfaWRtYWNfd2FpdF9idXN5KGlwdV9wbGFu ZS0+aXB1X2NoLCA1MCk7CiAKIAlpZiAoaXB1X3BsYW5lLT5kcCkKQEAgLTM4MSw3NCArMzM2LDIy MiBAQCB2b2lkIGlwdV9wbGFuZV9kaXNhYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkK IAkJaXB1X2RwX2Rpc2FibGUoaXB1X3BsYW5lLT5pcHUpOwogfQogCi0vKgotICogZHJtX3BsYW5l IEFQSQotICovCi0KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAotCQkJICAgIHVuc2lnbmVkIGludCBj cnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCi0JCQkgICAgdWludDMyX3Qgc3JjX3gsIHVpbnQz Ml90IHNyY195LAotCQkJICAgIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCkKK3N0YXRp YyBpbnQgaXB1X2Rpc2FibGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiB7CiAJc3Ry dWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKLQlpbnQgcmV0 ID0gMDsKLQotCURSTV9ERUJVR19LTVMoInBsYW5lIC0gJXBcbiIsIHBsYW5lKTsKLQotCWlmICgh aXB1X3BsYW5lLT5lbmFibGVkKQotCQlyZXQgPSBpcHVfcGxhbmVfZ2V0X3Jlc291cmNlcyhpcHVf cGxhbmUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaXB1X3BsYW5l X21vZGVfc2V0KGlwdV9wbGFuZSwgY3J0YywgJmNydGMtPmh3bW9kZSwgZmIsCi0JCQljcnRjX3gs IGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCi0JCQlzcmNfeCA+PiAxNiwgc3JjX3kgPj4gMTYsIHNy Y193ID4+IDE2LCBzcmNfaCA+PiAxNiwKLQkJCWZhbHNlKTsKLQlpZiAocmV0IDwgMCkgewotCQlp cHVfcGxhbmVfcHV0X3Jlc291cmNlcyhpcHVfcGxhbmUpOwotCQlyZXR1cm4gcmV0OwotCX0KIAot CWlmIChjcnRjICE9IHBsYW5lLT5jcnRjKQotCQlkZXZfZGJnKHBsYW5lLT5kZXYtPmRldiwgImNy dGMgY2hhbmdlOiAlcCAtPiAlcFxuIiwKLQkJCQlwbGFuZS0+Y3J0YywgY3J0Yyk7CisJRFJNX0RF QlVHX0tNUygiWyVkXSAlc1xuIiwgX19MSU5FX18sIF9fZnVuY19fKTsKIAotCWlmICghaXB1X3Bs YW5lLT5lbmFibGVkKQotCQlpcHVfcGxhbmVfZW5hYmxlKGlwdV9wbGFuZSk7CisJaXB1X3BsYW5l X2Rpc2FibGUoaXB1X3BsYW5lKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwdV9k aXNhYmxlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQorc3RhdGljIHZvaWQgaXB1X3Bs YW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiB7CiAJc3RydWN0IGlwdV9wbGFu ZSAqaXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKIAogCURSTV9ERUJVR19LTVMoIlsl ZF0gJXNcbiIsIF9fTElORV9fLCBfX2Z1bmNfXyk7CiAKLQlpZiAoaXB1X3BsYW5lLT5lbmFibGVk KQotCQlpcHVfcGxhbmVfZGlzYWJsZShpcHVfcGxhbmUpOworCWlwdV9kaXNhYmxlX3BsYW5lKHBs YW5lKTsKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUoaXB1X3BsYW5lKTsKK30K IAotCWlwdV9wbGFuZV9wdXRfcmVzb3VyY2VzKGlwdV9wbGFuZSk7CitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9wbGFuZV9mdW5jcyBpcHVfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZQk9 IGRybV9wbGFuZV9oZWxwZXJfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lCT0gZHJtX3BsYW5lX2hl bHBlcl9kaXNhYmxlLAorCS5kZXN0cm95CT0gaXB1X3BsYW5lX2Rlc3Ryb3ksCit9OworCitzdGF0 aWMgaW50IGlwdV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpvbGRfc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBsYW5lLT5kZXYtPmRldjsKKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0 ZS0+ZmI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiID0gb2xkX3N0YXRlLT5mYjsK Kwl1bnNpZ25lZCBsb25nIGViYSwgdWJvLCB2Ym8sIG9sZF91Ym8sIG9sZF92Ym87CisKKwkvKiBP ayB0byBkaXNhYmxlICovCisJaWYgKCFmYikKKwkJcmV0dXJuIG9sZF9mYiA/IDAgOiAtRUlOVkFM OworCisJLyogQ1JUQyBzaG91bGQgYmUgZW5hYmxlZCAqLworCWRybV9mb3JfZWFjaF9jcnRjKGNy dGMsIHBsYW5lLT5kZXYpIHsKKwkJaWYgKGRybV9jcnRjX21hc2soY3J0YykgPT0gcGxhbmUtPnBv c3NpYmxlX2NydGNzKSB7CisJCQlpZiAoIWNydGMtPmVuYWJsZWQpCisJCQkJcmV0dXJuIC1FSU5W QUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG5vIHNjYWxpbmcgKi8KKwlpZiAoc3RhdGUt PnNyY193ID4+IDE2ICE9IHN0YXRlLT5jcnRjX3cgfHwKKwkgICAgc3RhdGUtPnNyY19oID4+IDE2 ICE9IHN0YXRlLT5jcnRjX2gpCisJCXJldHVybiAtRUlOVkFMOworCisJY3J0Y19zdGF0ZSA9IHN0 YXRlLT5jcnRjLT5zdGF0ZTsKKworCXN3aXRjaCAocGxhbmUtPnR5cGUpIHsKKwljYXNlIERSTV9Q TEFORV9UWVBFX1BSSU1BUlk6CisJCS8qIGZ1bGwgcGxhbmUgZG9lc24ndCBzdXBwb3J0IHBhcnRp YWwgb2ZmIHNjcmVlbiAqLworCQlpZiAoc3RhdGUtPmNydGNfeCB8fCBzdGF0ZS0+Y3J0Y195IHx8 CisJCSAgICBzdGF0ZS0+Y3J0Y193ICE9IGNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUuaGRpc3Bs YXkgfHwKKwkJICAgIHN0YXRlLT5jcnRjX2ggIT0gY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52 ZGlzcGxheSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIGZ1bGwgcGxhbmUgbWluaW11bSB3 aWR0aCBpcyAxMyBwaXhlbHMgKi8KKwkJaWYgKHN0YXRlLT5jcnRjX3cgPCAxMykKKwkJCXJldHVy biAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6CisJCWlm IChzdGF0ZS0+Y3J0Y194IDwgMCB8fCBzdGF0ZS0+Y3J0Y195IDwgMCkKKwkJCXJldHVybiAtRUlO VkFMOworCisJCWlmIChzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdyA+CisJCSAgICBjcnRj X3N0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlm IChzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCA+CisJCSAgICBjcnRjX3N0YXRlLT5hZGp1 c3RlZF9tb2RlLnZkaXNwbGF5KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCWRldl93YXJuKGRldiwgIlVuc3VwcG9ydGVkIHBsYW5lIHR5cGVcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RhdGUtPmNydGNfaCA8IDIpCisJCXJldHVybiAtRUlO VkFMOworCisJLyoKKwkgKiBzaW5jZSB3ZSBjYW5ub3QgdG91Y2ggYWN0aXZlIElETUFDIGNoYW5u ZWxzLCB3ZSBkbyBub3Qgc3VwcG9ydAorCSAqIHJlc2l6aW5nIHRoZSBlbmFibGVkIHBsYW5lIG9y IGNoYW5naW5nIGl0cyBmb3JtYXQKKwkgKi8KKwlpZiAob2xkX2ZiICYmIChzdGF0ZS0+c3JjX3cg IT0gb2xkX3N0YXRlLT5zcmNfdyB8fAorCQkJICAgICAgc3RhdGUtPnNyY19oICE9IG9sZF9zdGF0 ZS0+c3JjX2ggfHwKKwkJCSAgICAgIGZiLT5waXhlbF9mb3JtYXQgIT0gb2xkX2ZiLT5waXhlbF9m b3JtYXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWViYSA9IGRybV9wbGFuZV9zdGF0ZV90b19l YmEoc3RhdGUpOworCisJaWYgKGViYSAmIDB4NykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAo ZmItPnBpdGNoZXNbMF0gPCAxIHx8IGZiLT5waXRjaGVzWzBdID4gMTYzODQpCisJCXJldHVybiAt RUlOVkFMOworCisJaWYgKG9sZF9mYiAmJiBmYi0+cGl0Y2hlc1swXSAhPSBvbGRfZmItPnBpdGNo ZXNbMF0pCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChmYi0+cGl4ZWxfZm9ybWF0KSB7 CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgorCQkv KgorCQkgKiBNdWx0aXBsYW5hciBmb3JtYXRzIGhhdmUgdG8gbWVldCB0aGUgZm9sbG93aW5nIHJl c3RyaWN0aW9uczoKKwkJICogLSBUaGUgKHVwIHRvKSB0aHJlZSBwbGFuZSBhZGRyZXNzZXMgYXJl IEVCQSwgRUJBK1VCTywgRUJBK1ZCTworCQkgKiAtIEVCQSwgVUJPIGFuZCBWQk8gYXJlIGEgbXVs dGlwbGUgb2YgOAorCQkgKiAtIFVCTyBhbmQgVkJPIGFyZSB1bnNpZ25lZCBhbmQgbm90IGxhcmdl ciB0aGFuIDB4ZmZmZmY4CisJCSAqIC0gT25seSBFQkEgbWF5IGJlIGNoYW5nZWQgd2hpbGUgc2Nh bm91dCBpcyBhY3RpdmUKKwkJICogLSBUaGUgc3RyaWRlcyBvZiBVIGFuZCBWIHBsYW5lcyBtdXN0 IGJlIGlkZW50aWNhbC4KKwkJICovCisJCXVibyA9IGRybV9wbGFuZV9zdGF0ZV90b191Ym8oc3Rh dGUpOworCQl2Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdmJvKHN0YXRlKTsKKworCQlpZiAoKHVi byAmIDB4NykgfHwgKHZibyAmIDB4NykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKHVi byA+IDB4ZmZmZmY4KSB8fCAodmJvID4gMHhmZmZmZjgpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisK KwkJaWYgKG9sZF9mYikgeworCQkJb2xkX3VibyA9IGRybV9wbGFuZV9zdGF0ZV90b191Ym8ob2xk X3N0YXRlKTsKKwkJCW9sZF92Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdmJvKG9sZF9zdGF0ZSk7 CisJCQlpZiAodWJvICE9IG9sZF91Ym8gfHwgdmJvICE9IG9sZF92Ym8pCisJCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKworCQlpZiAoZmItPnBpdGNoZXNbMV0gIT0gZmItPnBpdGNoZXNbMl0pCisJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZmItPnBpdGNoZXNbMV0gPCAxIHx8IGZiLT5waXRj aGVzWzFdID4gMTYzODQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAob2xkX2ZiICYmIG9s ZF9mYi0+cGl0Y2hlc1sxXSAhPSBmYi0+cGl0Y2hlc1sxXSkKKwkJCXJldHVybiAtRUlOVkFMOwor CX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpcHVfcGxhbmVfZGVzdHJveShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3N0YXRpYyB2b2lkIGlwdV9wbGFuZV9hdG9taWNfZGlzYWJs ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKm9sZF9zdGF0ZSkKK3sKKwlpcHVfZGlzYWJsZV9wbGFuZShwbGFuZSk7Cit9CisKK3N0YXRp YyB2b2lkIGlwdV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAor CQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCiB7CiAJc3RydWN0IGlw dV9wbGFuZSAqaXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKKwllbnVtIGlwdV9jb2xvcl9zcGFjZSBp Y3M7CiAKLQlEUk1fREVCVUdfS01TKCJbJWRdICVzXG4iLCBfX0xJTkVfXywgX19mdW5jX18pOwor CWlmIChvbGRfc3RhdGUtPmZiKSB7CisJCWlwdV9wbGFuZV9hdG9taWNfc2V0X2Jhc2UoaXB1X3Bs YW5lLCBvbGRfc3RhdGUpOworCQlyZXR1cm47CisJfQogCi0JaXB1X2Rpc2FibGVfcGxhbmUocGxh bmUpOwotCWRybV9wbGFuZV9jbGVhbnVwKHBsYW5lKTsKLQlrZnJlZShpcHVfcGxhbmUpOworCXN3 aXRjaCAoaXB1X3BsYW5lLT5kcF9mbG93KSB7CisJY2FzZSBJUFVfRFBfRkxPV19TWU5DX0JHOgor CQlpcHVfZHBfc2V0dXBfY2hhbm5lbChpcHVfcGxhbmUtPmRwLAorCQkJCQlJUFVWM19DT0xPUlNQ QUNFX1JHQiwKKwkJCQkJSVBVVjNfQ09MT1JTUEFDRV9SR0IpOworCQlpcHVfZHBfc2V0X2dsb2Jh bF9hbHBoYShpcHVfcGxhbmUtPmRwLCB0cnVlLCAwLCB0cnVlKTsKKwkJYnJlYWs7CisJY2FzZSBJ UFVfRFBfRkxPV19TWU5DX0ZHOgorCQlpY3MgPSBpcHVfZHJtX2ZvdXJjY190b19jb2xvcnNwYWNl KHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0KTsKKwkJaXB1X2RwX3NldHVwX2NoYW5uZWwoaXB1X3Bs YW5lLT5kcCwgaWNzLAorCQkJCQlJUFVWM19DT0xPUlNQQUNFX1VOS05PV04pOworCQlpcHVfZHBf c2V0X3dpbmRvd19wb3MoaXB1X3BsYW5lLT5kcCwgc3RhdGUtPmNydGNfeCwKKwkJCQkJc3RhdGUt PmNydGNfeSk7CisJCS8qIEVuYWJsZSBsb2NhbCBhbHBoYSBvbiBwYXJ0aWFsIHBsYW5lICovCisJ CXN3aXRjaCAoc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQpIHsKKwkJY2FzZSBEUk1fRk9STUFUX0FS R0IxNTU1OgorCQljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6CisJCWNhc2UgRFJNX0ZPUk1BVF9S R0JBNTU1MToKKwkJY2FzZSBEUk1fRk9STUFUX0JHUkE1NTUxOgorCQljYXNlIERSTV9GT1JNQVRf QVJHQjQ0NDQ6CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJY2FzZSBEUk1fRk9STUFU X0FCR1I4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJCWNhc2UgRFJNX0ZPUk1B VF9CR1JBODg4ODoKKwkJCWlwdV9kcF9zZXRfZ2xvYmFsX2FscGhhKGlwdV9wbGFuZS0+ZHAsIGZh bHNlLCAwLCBmYWxzZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJ fQorCisJaXB1X2RtZmNfY29uZmlnX3dhaXQ0ZW90KGlwdV9wbGFuZS0+ZG1mYywgc3RhdGUtPmNy dGNfdyk7CisKKwlpcHVfY3BtZW1femVybyhpcHVfcGxhbmUtPmlwdV9jaCk7CisJaXB1X2NwbWVt X3NldF9yZXNvbHV0aW9uKGlwdV9wbGFuZS0+aXB1X2NoLCBzdGF0ZS0+c3JjX3cgPj4gMTYsCisJ CQkJCXN0YXRlLT5zcmNfaCA+PiAxNik7CisJaXB1X2NwbWVtX3NldF9mbXQoaXB1X3BsYW5lLT5p cHVfY2gsIHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0KTsKKwlpcHVfY3BtZW1fc2V0X2hpZ2hfcHJp b3JpdHkoaXB1X3BsYW5lLT5pcHVfY2gpOworCWlwdV9pZG1hY19zZXRfZG91YmxlX2J1ZmZlcihp cHVfcGxhbmUtPmlwdV9jaCwgMSk7CisJaXB1X2NwbWVtX3NldF9zdHJpZGUoaXB1X3BsYW5lLT5p cHVfY2gsIHN0YXRlLT5mYi0+cGl0Y2hlc1swXSk7CisJaXB1X3BsYW5lX2F0b21pY19zZXRfYmFz ZShpcHVfcGxhbmUsIG9sZF9zdGF0ZSk7CisJaXB1X3BsYW5lX2VuYWJsZShpcHVfcGxhbmUpOwog fQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpcHVfcGxhbmVfZnVuY3Mg PSB7Ci0JLnVwZGF0ZV9wbGFuZQk9IGlwdV91cGRhdGVfcGxhbmUsCi0JLmRpc2FibGVfcGxhbmUJ PSBpcHVfZGlzYWJsZV9wbGFuZSwKLQkuZGVzdHJveQk9IGlwdV9wbGFuZV9kZXN0cm95LAorc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGlwdV9wbGFuZV9oZWxwZXJf ZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IGlwdV9wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0 b21pY19kaXNhYmxlID0gaXB1X3BsYW5lX2F0b21pY19kaXNhYmxlLAorCS5hdG9taWNfdXBkYXRl ID0gaXB1X3BsYW5lX2F0b21pY191cGRhdGUsCiB9OwogCiBzdHJ1Y3QgaXB1X3BsYW5lICppcHVf cGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaXB1X3NvYyAqaXB1LApA QCAtNDgxLDUgKzU4NCw3IEBAIHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZV9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpcHVfc29jICppcHUsCiAJCXJldHVybiBFUlJfUFRS KHJldCk7CiAJfQogCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJmlwdV9wbGFuZS0+YmFzZSwgJmlw dV9wbGFuZV9oZWxwZXJfZnVuY3MpOworCiAJcmV0dXJuIGlwdV9wbGFuZTsKIH0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9p bXgvaXB1djMtcGxhbmUuaAppbmRleCA0NDQ4ZmQ0Li5jNTFhNDRiIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9p cHV2My1wbGFuZS5oCkBAIC0yMywxNyArMjMsNiBAQCBzdHJ1Y3QgaXB1X3BsYW5lIHsKIAogCWlu dAkJCWRtYTsKIAlpbnQJCQlkcF9mbG93OwotCi0JaW50CQkJeDsKLQlpbnQJCQl5OwotCWludAkJ CXc7Ci0JaW50CQkJaDsKLQotCXVuc2lnbmVkIGludAkJdV9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50 CQl2X29mZnNldDsKLQl1bnNpZ25lZCBpbnQJCXN0cmlkZVsyXTsKLQotCWJvb2wJCQllbmFibGVk OwogfTsKIAogc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGlwdV9zb2MgKmlwdSwKQEAgLTQ4LDEwICszNyw3IEBAIGludCBpcHVf cGxhbmVfbW9kZV9zZXQoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAkJICAgICAgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwgdWludDMyX3Qg c3JjX3csCiAJCSAgICAgICB1aW50MzJfdCBzcmNfaCwgYm9vbCBpbnRlcmxhY2VkKTsKIAotdm9p ZCBpcHVfcGxhbmVfZW5hYmxlKHN0cnVjdCBpcHVfcGxhbmUgKnBsYW5lKTsKLXZvaWQgaXB1X3Bs YW5lX2Rpc2FibGUoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUpOwotaW50IGlwdV9wbGFuZV9zZXRf YmFzZShzdHJ1Y3QgaXB1X3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs Ci0JCSAgICAgICBpbnQgeCwgaW50IHkpOworaW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3Qg aXB1X3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwogCiBpbnQgaXB1 X3BsYW5lX2dldF9yZXNvdXJjZXMoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUpOwogdm9pZCBpcHVf cGxhbmVfcHV0X3Jlc291cmNlcyhzdHJ1Y3QgaXB1X3BsYW5lICpwbGFuZSk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRjLmMgYi9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRj LmMKaW5kZXggMmYyOTc4MC4uY2Q3MmRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaXB1LXYz L2lwdS1kYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtZGMuYwpAQCAtMTc4LDEwICsx NzgsNyBAQCBpbnQgaXB1X2RjX2luaXRfc3luYyhzdHJ1Y3QgaXB1X2RjICpkYywgc3RydWN0IGlw dV9kaSAqZGksIGJvb2wgaW50ZXJsYWNlZCwKIAlkYy0+ZGkgPSBpcHVfZGlfZ2V0X251bShkaSk7 CiAKIAltYXAgPSBpcHVfYnVzX2Zvcm1hdF90b19tYXAoYnVzX2Zvcm1hdCk7Ci0JaWYgKG1hcCA8 IDApIHsKLQkJZGV2X2RiZyhwcml2LT5kZXYsICJJUFVfRElTUDogTm8gTUFQXG4iKTsKLQkJcmV0 dXJuIG1hcDsKLQl9CisJQlVHX09OKG1hcCA8IDApOwogCiAJLyoKIAkgKiBJbiBpbnRlcmxhY2Vk IG1vZGUgd2UgbmVlZCBtb3JlIGNvdW50ZXJzIHRvIGNyZWF0ZSB0aGUgYXN5bW1ldHJpYwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1kaS5jIGIvZHJpdmVycy9ncHUvaXB1LXYz L2lwdS1kaS5jCmluZGV4IDM1OTI2OGUuLmE4ZDg3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2lwdS12My9pcHUtZGkuYworKysgYi9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRpLmMKQEAgLTU3 Miw5ICs1NzIsNiBAQCBpbnQgaXB1X2RpX2luaXRfc3luY19wYW5lbChzdHJ1Y3QgaXB1X2RpICpk aSwgc3RydWN0IGlwdV9kaV9zaWduYWxfY2ZnICpzaWcpCiAJZGV2X2RiZyhkaS0+aXB1LT5kZXYs ICJkaXNwICVkOiBwYW5lbCBzaXplID0gJWQgeCAlZFxuIiwKIAkJZGktPmlkLCBzaWctPm1vZGUu aGFjdGl2ZSwgc2lnLT5tb2RlLnZhY3RpdmUpOwogCi0JaWYgKChzaWctPm1vZGUudnN5bmNfbGVu ID09IDApIHx8IChzaWctPm1vZGUuaHN5bmNfbGVuID09IDApKQotCQlyZXR1cm4gLUVJTlZBTDsK LQogCWRldl9kYmcoZGktPmlwdS0+ZGV2LCAiQ2xvY2tzOiBJUFUgJWx1SHogREkgJWx1SHogTmVl ZGVkICVsdUh6XG4iLAogCQljbGtfZ2V0X3JhdGUoZGktPmNsa19pcHUpLAogCQljbGtfZ2V0X3Jh dGUoZGktPmNsa19kaSksCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==