From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH v3 03/10] drm/imx: atomic phase 1: Use transitional atomic CRTC and plane helpers Date: Mon, 4 Jul 2016 15:40:32 +0800 Message-ID: <1467618039-7457-4-git-send-email-gnuiyl@gmail.com> References: <1467618039-7457-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 NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0044.outbound.protection.outlook.com [104.47.33.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id CAE5F6E3B0 for ; Mon, 4 Jul 2016 07:57:04 +0000 (UTC) In-Reply-To: <1467618039-7457-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 IExpdSBZaW5nIDxnbnVpeWxAZ21haWwuY29tPgotLS0KdjItPnYzOgoqIEEgbWlub3IgY2hhbmdl IHRvIHNpbXBsaWZ5IHRoZSB3YXkgd2UgZmluZCBjcnRjLT5lbmFibGVkIGluCiAgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcy0+YXRvbWljX2NoZWNrLgoKdjEtPnYyOgoqIEdldCB0aGUgb3ZlcmxheSBp cHUgcGxhbmUgcmVzb3VyY2Ugd2hlbiBpbml0aWFsaXppbmcgdGhlIHJlbGV2YW50IENSVEMKICBh bmQgZG8gbm90IGdldCBpcHUgcGxhbmUgcmVzb3VyY2UgYW55IG1vcmUgd2hlbiB1cGRhdGluZyBw bGFuZSB0byBhdm9pZAogIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZS4KKiBSZW1vdmUgb2Jz b2xldGUgY29tbWVudHMgZnJvbSBpcHVfY3J0Y19lbmFibGUvZGlzYWJsZSgpLgoKIGRyaXZlcnMv Z3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jICB8IDE5NyArKysrKysrKy0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYyB8IDUxMSArKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5oIHwgIDE2ICst CiBkcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRjLmMgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvZ3B1 L2lwdS12My9pcHUtZGkuYyAgICAgICB8ICAgMyAtCiA1IGZpbGVzIGNoYW5nZWQsIDQxMCBpbnNl cnRpb25zKCspLCAzMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2lteC9pcHV2My1jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLWNydGMuYwppbmRl eCBmYzA0MDQxLi5iYTg4MGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYz LWNydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLWNydGMuYwpAQCAtNzMsNyAr NzMsNyBAQCBzdHJ1Y3QgaXB1X2NydGMgewogCiAjZGVmaW5lIHRvX2lwdV9jcnRjKHgpIGNvbnRh aW5lcl9vZih4LCBzdHJ1Y3QgaXB1X2NydGMsIGJhc2UpCiAKLXN0YXRpYyB2b2lkIGlwdV9mYl9l bmFibGUoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykKK3N0YXRpYyB2b2lkIGlwdV9jcnRjX2Vu YWJsZShzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQogewogCXN0cnVjdCBpcHVfc29jICppcHUg PSBkZXZfZ2V0X2RydmRhdGEoaXB1X2NydGMtPmRldi0+cGFyZW50KTsKIApAQCAtODEsMzAgKzgx LDMwIEBAIHN0YXRpYyB2b2lkIGlwdV9mYl9lbmFibGUoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0 YykKIAkJcmV0dXJuOwogCiAJaXB1X2RjX2VuYWJsZShpcHUpOwotCWlwdV9wbGFuZV9lbmFibGUo aXB1X2NydGMtPnBsYW5lWzBdKTsKLQkvKiBTdGFydCBEQyBjaGFubmVsIGFuZCBESSBhZnRlciBJ RE1BQyAqLwogCWlwdV9kY19lbmFibGVfY2hhbm5lbChpcHVfY3J0Yy0+ZGMpOwogCWlwdV9kaV9l bmFibGUoaXB1X2NydGMtPmRpKTsKLQlkcm1fY3J0Y192Ymxhbmtfb24oJmlwdV9jcnRjLT5iYXNl KTsKLQogCWlwdV9jcnRjLT5lbmFibGVkID0gMTsKKworCS8qCisJICogSW4gb3JkZXIgbm90IHRv IGJlIHdhcm5lZCBvbiBlbmFibGluZyB2YmxhbmsgZmFpbHVyZSwKKwkgKiB3ZSBzaG91bGQgY2Fs bCBkcm1fY3J0Y192Ymxhbmtfb24oKSBhZnRlciAtPmVuYWJsZWQgaXMgc2V0IHRvIDEuCisJICov CisJZHJtX2NydGNfdmJsYW5rX29uKCZpcHVfY3J0Yy0+YmFzZSk7CiB9CiAKLXN0YXRpYyB2b2lk IGlwdV9mYl9kaXNhYmxlKHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCitzdGF0aWMgdm9pZCBp cHVfY3J0Y19kaXNhYmxlKHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCiB7CiAJc3RydWN0IGlw dV9zb2MgKmlwdSA9IGRldl9nZXRfZHJ2ZGF0YShpcHVfY3J0Yy0+ZGV2LT5wYXJlbnQpOwogCiAJ aWYgKCFpcHVfY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JLyogU3RvcCBEQyBjaGFubmVs IGFuZCBESSBiZWZvcmUgSURNQUMgKi8KIAlpcHVfZGNfZGlzYWJsZV9jaGFubmVsKGlwdV9jcnRj LT5kYyk7CiAJaXB1X2RpX2Rpc2FibGUoaXB1X2NydGMtPmRpKTsKLQlpcHVfcGxhbmVfZGlzYWJs ZShpcHVfY3J0Yy0+cGxhbmVbMF0pOwogCWlwdV9kY19kaXNhYmxlKGlwdSk7Ci0JZHJtX2NydGNf dmJsYW5rX29mZigmaXB1X2NydGMtPmJhc2UpOwotCiAJaXB1X2NydGMtPmVuYWJsZWQgPSAwOwor CisJZHJtX2NydGNfdmJsYW5rX29mZigmaXB1X2NydGMtPmJhc2UpOwogfQogCiBzdGF0aWMgdm9p ZCBpcHVfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCkBAIC0xMTUs MTIgKzExNSwxMiBAQCBzdGF0aWMgdm9pZCBpcHVfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywgaW50IG1vZGUpCiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIERSTV9NT0RFX0RQTVNf T046Ci0JCWlwdV9mYl9lbmFibGUoaXB1X2NydGMpOworCQlpcHVfY3J0Y19lbmFibGUoaXB1X2Ny dGMpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9N T0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgotCQlpcHVfZmJfZGlz YWJsZShpcHVfY3J0Yyk7CisJCWlwdV9jcnRjX2Rpc2FibGUoaXB1X2NydGMpOwogCQlicmVhazsK IAl9CiB9CkBAIC0yMzQsNzkgKzIzNCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNf ZnVuY3MgaXB1X2NydGNfZnVuY3MgPSB7CiAJLnBhZ2VfZmxpcCA9IGlwdV9wYWdlX2ZsaXAsCiB9 OwogCi1zdGF0aWMgaW50IGlwdV9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK LQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqb3JpZ19tb2RlLAotCQkJICAgICAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJICAgICAgIGludCB4LCBpbnQgeSwK LQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCi17Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7 Ci0Jc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOwotCXN0cnVj dCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnID0ge307Ci0JdW5zaWduZWQgbG9uZyBlbmNvZGVy X3R5cGVzID0gMDsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IG1v ZGUtPmhkaXNwbGF5OiAlZFxuIiwgX19mdW5jX18sCi0JCQltb2RlLT5oZGlzcGxheSk7Ci0JZGV2 X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IG1vZGUtPnZkaXNwbGF5OiAlZFxuIiwgX19mdW5jX18s Ci0JCQltb2RlLT52ZGlzcGxheSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZk ZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkKLQkJaWYgKGVuY29kZXItPmNydGMg PT0gY3J0YykKLQkJCWVuY29kZXJfdHlwZXMgfD0gQklUKGVuY29kZXItPmVuY29kZXJfdHlwZSk7 Ci0KLQlkZXZfZGJnKGlwdV9jcnRjLT5kZXYsICIlczogYXR0YWNoZWQgdG8gZW5jb2RlciB0eXBl cyAweCVseFxuIiwKLQkJX19mdW5jX18sIGVuY29kZXJfdHlwZXMpOwotCi0JLyoKLQkgKiBJZiB3 ZSBoYXZlIERBQyBvciBMREIsIHRoZW4gd2UgbmVlZCB0aGUgSVBVIERJIGNsb2NrIHRvIGJlCi0J ICogdGhlIHNhbWUgYXMgdGhlIExEQiBESSBjbG9jay4gRm9yIFRWREFDLCBkZXJpdmUgdGhlIElQ VSBESQotCSAqIGNsb2NrIGZyb20gMjcgTUh6IFRWRV9ESSBjbG9jaywgYnV0IGFsbG93IHRvIGRp dmlkZSBpdC4KLQkgKi8KLQlpZiAoZW5jb2Rlcl90eXBlcyAmIChCSVQoRFJNX01PREVfRU5DT0RF Ul9EQUMpIHwKLQkJCSAgICAgQklUKERSTV9NT0RFX0VOQ09ERVJfTFZEUykpKQotCQlzaWdfY2Zn LmNsa2ZsYWdzID0gSVBVX0RJX0NMS01PREVfU1lOQyB8IElQVV9ESV9DTEtNT0RFX0VYVDsKLQll bHNlIGlmIChlbmNvZGVyX3R5cGVzICYgQklUKERSTV9NT0RFX0VOQ09ERVJfVFZEQUMpKQotCQlz aWdfY2ZnLmNsa2ZsYWdzID0gSVBVX0RJX0NMS01PREVfRVhUOwotCWVsc2UKLQkJc2lnX2NmZy5j bGtmbGFncyA9IDA7Ci0KLQlzaWdfY2ZnLmVuYWJsZV9wb2wgPSAhKGlwdV9jcnRjLT5idXNfZmxh Z3MgJiBEUk1fQlVTX0ZMQUdfREVfTE9XKTsKLQkvKiBEZWZhdWx0IHRvIGRyaXZpbmcgcGl4ZWwg ZGF0YSBvbiBuZWdhdGl2ZSBjbG9jayBlZGdlcyAqLwotCXNpZ19jZmcuY2xrX3BvbCA9ICEhKGlw dV9jcnRjLT5idXNfZmxhZ3MgJgotCQkJICAgICBEUk1fQlVTX0ZMQUdfUElYREFUQV9QT1NFREdF KTsKLQlzaWdfY2ZnLmJ1c19mb3JtYXQgPSBpcHVfY3J0Yy0+YnVzX2Zvcm1hdDsKLQlzaWdfY2Zn LnZfdG9faF9zeW5jID0gMDsKLQlzaWdfY2ZnLmhzeW5jX3BpbiA9IGlwdV9jcnRjLT5kaV9oc3lu Y19waW47Ci0Jc2lnX2NmZy52c3luY19waW4gPSBpcHVfY3J0Yy0+ZGlfdnN5bmNfcGluOwotCi0J ZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUobW9kZSwgJnNpZ19jZmcubW9kZSk7Ci0KLQly ZXQgPSBpcHVfZGNfaW5pdF9zeW5jKGlwdV9jcnRjLT5kYywgaXB1X2NydGMtPmRpLAotCQkJICAg ICAgIG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UsCi0JCQkgICAgICAgaXB1 X2NydGMtPmJ1c19mb3JtYXQsIG1vZGUtPmhkaXNwbGF5KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9l cnIoaXB1X2NydGMtPmRldiwKLQkJCQkiaW5pdGlhbGl6aW5nIGRpc3BsYXkgY29udHJvbGxlciBm YWlsZWQgd2l0aCAlZFxuIiwKLQkJCQlyZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9 IGlwdV9kaV9pbml0X3N5bmNfcGFuZWwoaXB1X2NydGMtPmRpLCAmc2lnX2NmZyk7Ci0JaWYgKHJl dCkgewotCQlkZXZfZXJyKGlwdV9jcnRjLT5kZXYsCi0JCQkJImluaXRpYWxpemluZyBwYW5lbCBm YWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gaXB1 X3BsYW5lX21vZGVfc2V0KGlwdV9jcnRjLT5wbGFuZVswXSwgY3J0YywgbW9kZSwKLQkJCQkgIGNy dGMtPnByaW1hcnktPmZiLAotCQkJCSAgMCwgMCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5LAotCQkJCSAgeCwgeSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAotCQkJCSAg bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSk7Ci19Ci0KIHN0YXRpYyB2b2lk IGlwdV9jcnRjX2hhbmRsZV9wYWdlZmxpcChzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQogewog CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzAsOCArMjU3LDcgQEAgc3RhdGljIGlycXJldHVy bl90IGlwdV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiAJaWYgKGlwdV9jcnRj LT5mbGlwX3N0YXRlID09IElQVV9GTElQX1NVQk1JVFRFRCkgewogCQlzdHJ1Y3QgaXB1X3BsYW5l ICpwbGFuZSA9IGlwdV9jcnRjLT5wbGFuZVswXTsKIAotCQlpcHVfcGxhbmVfc2V0X2Jhc2UocGxh bmUsIGlwdV9jcnRjLT5iYXNlLnByaW1hcnktPmZiLAotCQkJCSAgIHBsYW5lLT54LCBwbGFuZS0+ eSk7CisJCWlwdV9wbGFuZV9zZXRfYmFzZShwbGFuZSwgaXB1X2NydGMtPmJhc2UucHJpbWFyeS0+ ZmIpOwogCQlpcHVfY3J0Y19oYW5kbGVfcGFnZWZsaXAoaXB1X2NydGMpOwogCQlxdWV1ZV93b3Jr KGlwdV9jcnRjLT5mbGlwX3F1ZXVlLAogCQkJICAgJmlwdV9jcnRjLT5mbGlwX3dvcmstPnVucmVm X3dvcmspOwpAQCAtMzU1LDYgKzI4MSw5IEBAIHN0YXRpYyBib29sIGlwdV9jcnRjX21vZGVfZml4 dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAor CWlmICgodm0udnN5bmNfbGVuID09IDApIHx8ICh2bS5oc3luY19sZW4gPT0gMCkpCisJCXJldHVy biBmYWxzZTsKKwogCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJnZtLCBhZGp1c3Rl ZF9tb2RlKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMzY0LDI4ICsyOTMsOTUgQEAgc3RhdGljIHZv aWQgaXB1X2NydGNfcHJlcGFyZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGlw dV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOwogCi0JaXB1X2ZiX2Rpc2FibGUo aXB1X2NydGMpOworCWlwdV9jcnRjX2Rpc2FibGUoaXB1X2NydGMpOwogfQogCiBzdGF0aWMgdm9p ZCBpcHVfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBpcHVf Y3J0YyAqaXB1X2NydGMgPSB0b19pcHVfY3J0YyhjcnRjKTsKIAotCWlwdV9mYl9lbmFibGUoaXB1 X2NydGMpOworCWlwdV9jcnRjX2VuYWJsZShpcHVfY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQgaXB1 X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXB1 X2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7 CisJc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOworCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwor CXN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnID0ge307CisJdW5zaWduZWQgbG9uZyBl bmNvZGVyX3R5cGVzID0gMDsKKworCWRldl9kYmcoaXB1X2NydGMtPmRldiwgIiVzOiBtb2RlLT5o ZGlzcGxheTogJWRcbiIsIF9fZnVuY19fLAorCQkJbW9kZS0+aGRpc3BsYXkpOworCWRldl9kYmco aXB1X2NydGMtPmRldiwgIiVzOiBtb2RlLT52ZGlzcGxheTogJWRcbiIsIF9fZnVuY19fLAorCQkJ bW9kZS0+dmRpc3BsYXkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5t b2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpCisJCWlmIChlbmNvZGVyLT5jcnRjID09IGNy dGMpCisJCQllbmNvZGVyX3R5cGVzIHw9IEJJVChlbmNvZGVyLT5lbmNvZGVyX3R5cGUpOworCisJ ZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IGF0dGFjaGVkIHRvIGVuY29kZXIgdHlwZXMgMHgl bHhcbiIsCisJCV9fZnVuY19fLCBlbmNvZGVyX3R5cGVzKTsKKworCS8qCisJICogSWYgd2UgaGF2 ZSBEQUMgb3IgTERCLCB0aGVuIHdlIG5lZWQgdGhlIElQVSBESSBjbG9jayB0byBiZQorCSAqIHRo ZSBzYW1lIGFzIHRoZSBMREIgREkgY2xvY2suIEZvciBUVkRBQywgZGVyaXZlIHRoZSBJUFUgREkK KwkgKiBjbG9jayBmcm9tIDI3IE1IeiBUVkVfREkgY2xvY2ssIGJ1dCBhbGxvdyB0byBkaXZpZGUg aXQuCisJICovCisJaWYgKGVuY29kZXJfdHlwZXMgJiAoQklUKERSTV9NT0RFX0VOQ09ERVJfREFD KSB8CisJCQkgICAgIEJJVChEUk1fTU9ERV9FTkNPREVSX0xWRFMpKSkKKwkJc2lnX2NmZy5jbGtm bGFncyA9IElQVV9ESV9DTEtNT0RFX1NZTkMgfCBJUFVfRElfQ0xLTU9ERV9FWFQ7CisJZWxzZSBp ZiAoZW5jb2Rlcl90eXBlcyAmIEJJVChEUk1fTU9ERV9FTkNPREVSX1RWREFDKSkKKwkJc2lnX2Nm Zy5jbGtmbGFncyA9IElQVV9ESV9DTEtNT0RFX0VYVDsKKwllbHNlCisJCXNpZ19jZmcuY2xrZmxh Z3MgPSAwOworCisJc2lnX2NmZy5lbmFibGVfcG9sID0gIShpcHVfY3J0Yy0+YnVzX2ZsYWdzICYg RFJNX0JVU19GTEFHX0RFX0xPVyk7CisJLyogRGVmYXVsdCB0byBkcml2aW5nIHBpeGVsIGRhdGEg b24gbmVnYXRpdmUgY2xvY2sgZWRnZXMgKi8KKwlzaWdfY2ZnLmNsa19wb2wgPSAhIShpcHVfY3J0 Yy0+YnVzX2ZsYWdzICYKKwkJCSAgICAgRFJNX0JVU19GTEFHX1BJWERBVEFfUE9TRURHRSk7CisJ c2lnX2NmZy5idXNfZm9ybWF0ID0gaXB1X2NydGMtPmJ1c19mb3JtYXQ7CisJc2lnX2NmZy52X3Rv X2hfc3luYyA9IDA7CisJc2lnX2NmZy5oc3luY19waW4gPSBpcHVfY3J0Yy0+ZGlfaHN5bmNfcGlu OworCXNpZ19jZmcudnN5bmNfcGluID0gaXB1X2NydGMtPmRpX3ZzeW5jX3BpbjsKKworCWRybV9k aXNwbGF5X21vZGVfdG9fdmlkZW9tb2RlKG1vZGUsICZzaWdfY2ZnLm1vZGUpOworCisJaXB1X2Rj X2luaXRfc3luYyhpcHVfY3J0Yy0+ZGMsIGlwdV9jcnRjLT5kaSwKKwkJCSBtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFLAorCQkJIGlwdV9jcnRjLT5idXNfZm9ybWF0LCBtb2Rl LT5oZGlzcGxheSk7CisJaXB1X2RpX2luaXRfc3luY19wYW5lbChpcHVfY3J0Yy0+ZGksICZzaWdf Y2ZnKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaXB1 X2hlbHBlcl9mdW5jcyA9IHsKIAkuZHBtcyA9IGlwdV9jcnRjX2RwbXMsCiAJLm1vZGVfZml4dXAg PSBpcHVfY3J0Y19tb2RlX2ZpeHVwLAotCS5tb2RlX3NldCA9IGlwdV9jcnRjX21vZGVfc2V0LAor CS5tb2RlX3NldCA9IGRybV9oZWxwZXJfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXRfbm9mYiA9 IGlwdV9jcnRjX21vZGVfc2V0X25vZmIsCiAJLnByZXBhcmUgPSBpcHVfY3J0Y19wcmVwYXJlLAog CS5jb21taXQgPSBpcHVfY3J0Y19jb21taXQsCisJLmF0b21pY19jaGVjayA9IGlwdV9jcnRjX2F0 b21pY19jaGVjaywKIH07CiAKIHN0YXRpYyBpbnQgaXB1X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMgPSB0b19pcHVfY3J0 YyhjcnRjKTsKIAorCS8qCisJICogLT5jb21taXQgaXMgZG9uZSBhZnRlciAtPm1vZGVfc2V0IGlu IGRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZSgpLAorCSAqIHNvIHdhaXRpbmcgZm9yIHZibGFuayBp biBkcm1fcGxhbmVfaGVscGVyX2NvbW1pdCgpIHdpbGwgdGltZW91dC4KKwkgKiBDaGVjayB0aGUg c3RhdGUgaGVyZSB0byBhdm9pZCB0aGUgd2FpdGluZy4KKwkgKi8KKwlpZiAoIWlwdV9jcnRjLT5l bmFibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWVuYWJsZV9pcnEoaXB1X2NydGMtPmlycSk7 CiAKIAlyZXR1cm4gMDsKQEAgLTQ5Niw4ICs0OTIsMTYgQEAgc3RhdGljIGludCBpcHVfY3J0Y19p bml0KHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMsCiAJCQkJCQlJUFVfRFBfRkxPV19TWU5DX0ZH LAogCQkJCQkJZHJtX2NydGNfbWFzaygmaXB1X2NydGMtPmJhc2UpLAogCQkJCQkJRFJNX1BMQU5F X1RZUEVfT1ZFUkxBWSk7Ci0JCWlmIChJU19FUlIoaXB1X2NydGMtPnBsYW5lWzFdKSkKKwkJaWYg KElTX0VSUihpcHVfY3J0Yy0+cGxhbmVbMV0pKSB7CiAJCQlpcHVfY3J0Yy0+cGxhbmVbMV0gPSBO VUxMOworCQl9IGVsc2UgeworCQkJcmV0ID0gaXB1X3BsYW5lX2dldF9yZXNvdXJjZXMoaXB1X2Ny dGMtPnBsYW5lWzFdKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGlwdV9jcnRjLT5kZXYs ICJnZXR0aW5nIHBsYW5lIDEgIgorCQkJCQkicmVzb3VyY2VzIGZhaWxlZCB3aXRoICVkLlxuIiwg cmV0KTsKKwkJCQlnb3RvIGVycl9wdXRfcGxhbmUwX3JlczsKKwkJCX0KKwkJfQogCX0KIAogCWlw dV9jcnRjLT5pcnEgPSBpcHVfcGxhbmVfaXJxKGlwdV9jcnRjLT5wbGFuZVswXSk7CkBAIC01MDUs NyArNTA5LDcgQEAgc3RhdGljIGludCBpcHVfY3J0Y19pbml0KHN0cnVjdCBpcHVfY3J0YyAqaXB1 X2NydGMsCiAJCQkiaW14X2RybSIsIGlwdV9jcnRjKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZf ZXJyKGlwdV9jcnRjLT5kZXYsICJpcnEgcmVxdWVzdCBmYWlsZWQgd2l0aCAlZC5cbiIsIHJldCk7 Ci0JCWdvdG8gZXJyX3B1dF9wbGFuZV9yZXM7CisJCWdvdG8gZXJyX3B1dF9wbGFuZTFfcmVzOwog CX0KIAkvKiBPbmx5IGVuYWJsZSBJUlEgd2hlbiB3ZSBhY3R1YWxseSBuZWVkIGl0IHRvIHRyaWdn ZXIgd29yay4gKi8KIAlkaXNhYmxlX2lycShpcHVfY3J0Yy0+aXJxKTsKQEAgLTUxNCw3ICs1MTgs MTAgQEAgc3RhdGljIGludCBpcHVfY3J0Y19pbml0KHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMs CiAKIAlyZXR1cm4gMDsKIAotZXJyX3B1dF9wbGFuZV9yZXM6CitlcnJfcHV0X3BsYW5lMV9yZXM6 CisJaWYgKGlwdV9jcnRjLT5wbGFuZVsxXSkKKwkJaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoaXB1 X2NydGMtPnBsYW5lWzFdKTsKK2Vycl9wdXRfcGxhbmUwX3JlczoKIAlpcHVfcGxhbmVfcHV0X3Jl c291cmNlcyhpcHVfY3J0Yy0+cGxhbmVbMF0pOwogZXJyX3JlbW92ZV9jcnRjOgogCWlteF9kcm1f cmVtb3ZlX2NydGMoaXB1X2NydGMtPmlteF9jcnRjKTsKQEAgLTU1NCw4ICs1NjEsMTAgQEAgc3Rh dGljIHZvaWQgaXB1X2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsCiAJaW14X2RybV9yZW1vdmVfY3J0YyhpcHVfY3J0Yy0+aW14X2NydGMpOwogCiAJ ZGVzdHJveV93b3JrcXVldWUoaXB1X2NydGMtPmZsaXBfcXVldWUpOwotCWlwdV9wbGFuZV9wdXRf cmVzb3VyY2VzKGlwdV9jcnRjLT5wbGFuZVswXSk7CiAJaXB1X3B1dF9yZXNvdXJjZXMoaXB1X2Ny dGMpOworCWlmIChpcHVfY3J0Yy0+cGxhbmVbMV0pCisJCWlwdV9wbGFuZV9wdXRfcmVzb3VyY2Vz KGlwdV9jcnRjLT5wbGFuZVsxXSk7CisJaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoaXB1X2NydGMt PnBsYW5lWzBdKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGlwdV9j cnRjX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUu YyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYwppbmRleCAwMjcwMWRlLi41OWYy MzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5j bHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KICNp bmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFu ZV9oZWxwZXIuaD4KIAogI2luY2x1ZGUgInZpZGVvL2lteC1pcHUtdjMuaCIKICNpbmNsdWRlICJp cHV2My1wbGFuZS5oIgpAQCAtNTMsMTIgKzU0LDE1IEBAIGludCBpcHVfcGxhbmVfaXJxKHN0cnVj dCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKIAkJCQkgICAgIElQVV9JUlFfRU9GKTsKIH0KIAotaW50 IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgICAgaW50IHgsIGludCB5KQoraW50IGlwdV9wbGFu ZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQogewotCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmpbM107Ci0J dW5zaWduZWQgbG9uZyBlYmEsIHVibywgdmJvOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg KmNtYV9vYmpbM10sICpvbGRfY21hX29ialszXTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSA9IGlwdV9wbGFuZS0+YmFzZS5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpv bGRfZmIgPSBzdGF0ZS0+ZmI7CisJdW5zaWduZWQgbG9uZyBlYmEsIHVibywgdmJvLCBvbGRfZWJh LCBvbGRfdWJvLCBvbGRfdmJvOwogCWludCBhY3RpdmUsIGk7CisJaW50IHggPSBzdGF0ZS0+c3Jj X3ggPj4gMTY7CisJaW50IHkgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7CiAKIAlmb3IgKGkgPSAwOyBp IDwgZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZiLT5waXhlbF9mb3JtYXQpOyBpKyspIHsKIAkJY21h X29ialtpXSA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIGkpOwpAQCAtNjgsNiArNzIsMTQg QEAgaW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQl9CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGRy bV9mb3JtYXRfbnVtX3BsYW5lcyhvbGRfZmItPnBpeGVsX2Zvcm1hdCk7IGkrKykgeworCQlvbGRf Y21hX29ialtpXSA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmoob2xkX2ZiLCBpKTsKKwkJaWYgKCFv bGRfY21hX29ialtpXSkgeworCQkJRFJNX0RFQlVHX0tNUygicGxhbmUgJWQgZW50cnkgaXMgbnVs bC5cbiIsIGkpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisKIAllYmEgPSBjbWFfb2Jq WzBdLT5wYWRkciArIGZiLT5vZmZzZXRzWzBdICsKIAkgICAgICBmYi0+cGl0Y2hlc1swXSAqIHkg KyAoZmItPmJpdHNfcGVyX3BpeGVsID4+IDMpICogeDsKIApAQCAtODEsMTMgKzkzLDExIEBAIGlu dCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGlwdV9w bGFuZS0+ZW5hYmxlZCAmJiBmYi0+cGl0Y2hlc1swXSAhPSBpcHVfcGxhbmUtPnN0cmlkZVswXSkg eworCWlmIChmYi0+cGl0Y2hlc1swXSAhPSBvbGRfZmItPnBpdGNoZXNbMF0pIHsKIAkJRFJNX0RF QlVHX0tNUygicGl0Y2hlcyBtdXN0IG5vdCBjaGFuZ2Ugd2hpbGUgcGxhbmUgaXMgZW5hYmxlZC5c biIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpcHVfcGxhbmUtPnN0cmlkZVswXSA9IGZi LT5waXRjaGVzWzBdOwotCiAJc3dpdGNoIChmYi0+cGl4ZWxfZm9ybWF0KSB7CiAJY2FzZSBEUk1f Rk9STUFUX1lVVjQyMDoKIAljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgpAQCAtMTA0LDYgKzExNCwx NCBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCXZibyA9IGNtYV9vYmpbMl0tPnBhZGRyICsg ZmItPm9mZnNldHNbMl0gKwogCQkgICAgICBmYi0+cGl0Y2hlc1syXSAqIHkgLyAyICsgeCAvIDIg LSBlYmE7CiAKKwkJb2xkX2ViYSA9IG9sZF9jbWFfb2JqWzBdLT5wYWRkciArIG9sZF9mYi0+b2Zm c2V0c1swXSArCisJCSAgICAgIG9sZF9mYi0+cGl0Y2hlc1swXSAqIHkgKworCQkgICAgICAob2xk X2ZiLT5iaXRzX3Blcl9waXhlbCA+PiAzKSAqIHg7CisJCW9sZF91Ym8gPSBvbGRfY21hX29ialsx XS0+cGFkZHIgKyBvbGRfZmItPm9mZnNldHNbMV0gKworCQkgICAgICBvbGRfZmItPnBpdGNoZXNb MV0gKiB5IC8gMiArIHggLyAyIC0gb2xkX2ViYTsKKwkJb2xkX3ZibyA9IG9sZF9jbWFfb2JqWzJd LT5wYWRkciArIG9sZF9mYi0+b2Zmc2V0c1syXSArCisJCSAgICAgIG9sZF9mYi0+cGl0Y2hlc1sy XSAqIHkgLyAyICsgeCAvIDIgLSBvbGRfZWJhOworCiAJCWlmICgodWJvICYgMHg3KSB8fCAodmJv ICYgMHg3KSkgewogCQkJRFJNX0RFQlVHX0tNUygiVS9WIGJ1ZmZlciBvZmZzZXRzIG11c3QgYmUg YSBtdWx0aXBsZSBvZiA4LlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNCw4ICsxMzIs NyBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0J CWlmIChpcHVfcGxhbmUtPmVuYWJsZWQgJiYgKChpcHVfcGxhbmUtPnVfb2Zmc2V0ICE9IHVibykg fHwKLQkJCQkJICAgKGlwdV9wbGFuZS0+dl9vZmZzZXQgIT0gdmJvKSkpIHsKKwkJaWYgKG9sZF91 Ym8gIT0gdWJvIHx8IG9sZF92Ym8gIT0gdmJvKSB7CiAJCQlEUk1fREVCVUdfS01TKCJVL1YgYnVm ZmVyIG9mZnNldHMgbXVzdCBub3QgY2hhbmdlIHdoaWxlIHBsYW5lIGlzIGVuYWJsZWQuXG4iKTsK IAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMzAsMTYgKzE0NywxMSBAQCBpbnQgaXB1X3Bs YW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChpcHVfcGxhbmUt PmVuYWJsZWQgJiYKLQkJICAgIChpcHVfcGxhbmUtPnN0cmlkZVsxXSAhPSBmYi0+cGl0Y2hlc1sx XSkpIHsKKwkJaWYgKG9sZF9mYi0+cGl0Y2hlc1sxXSAhPSBmYi0+cGl0Y2hlc1sxXSkgewogCQkJ RFJNX0RFQlVHX0tNUygiVS9WIHBpdGNoZXMgbXVzdCBub3QgY2hhbmdlIHdoaWxlIHBsYW5lIGlz IGVuYWJsZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaXB1X3BsYW5lLT51 X29mZnNldCA9IHVibzsKLQkJaXB1X3BsYW5lLT52X29mZnNldCA9IHZibzsKLQkJaXB1X3BsYW5l LT5zdHJpZGVbMV0gPSBmYi0+cGl0Y2hlc1sxXTsKLQogCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFz ZS5kZXYtPmRldiwKIAkJCSJwaHlzID0gJXBhZCAlcGFkICVwYWQsIHggPSAlZCwgeSA9ICVkIiwK IAkJCSZjbWFfb2JqWzBdLT5wYWRkciwgJmNtYV9vYmpbMV0tPnBhZGRyLApAQCAtMTUxLDE2NCAr MTYzLDExMSBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9w bGFuZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCWJyZWFrOwogCX0KIAotCWlmIChp cHVfcGxhbmUtPmVuYWJsZWQpIHsKLQkJYWN0aXZlID0gaXB1X2lkbWFjX2dldF9jdXJyZW50X2J1 ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCk7Ci0JCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFu ZS0+aXB1X2NoLCAhYWN0aXZlLCBlYmEpOwotCQlpcHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihpcHVf cGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSk7Ci0JfSBlbHNlIHsKLQkJaXB1X2NwbWVtX3NldF9idWZm ZXIoaXB1X3BsYW5lLT5pcHVfY2gsIDAsIGViYSk7Ci0JCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlw dV9wbGFuZS0+aXB1X2NoLCAxLCBlYmEpOwotCX0KLQotCS8qIGNhY2hlIG9mZnNldHMgZm9yIHN1 YnNlcXVlbnQgcGFnZWZsaXBzICovCi0JaXB1X3BsYW5lLT54ID0geDsKLQlpcHVfcGxhbmUtPnkg PSB5OworCWFjdGl2ZSA9IGlwdV9pZG1hY19nZXRfY3VycmVudF9idWZmZXIoaXB1X3BsYW5lLT5p cHVfY2gpOworCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAhYWN0aXZl LCBlYmEpOworCWlwdV9pZG1hY19zZWxlY3RfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAhYWN0 aXZlKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgaXB1X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBp cHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkgICAgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgaW50IGNydGNfeCwgaW50IGNydGNfeSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBj cnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCi0JCSAgICAgICB1aW50MzJfdCBzcmNfeCwgdWlu dDMyX3Qgc3JjX3ksCi0JCSAgICAgICB1aW50MzJfdCBzcmNfdywgdWludDMyX3Qgc3JjX2gsIGJv b2wgaW50ZXJsYWNlZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZHJtX3BsYW5lX3N0 YXRlX3RvX2ViYShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBpcHVfcGxhbmUtPmJhc2UuZGV2LT5kZXY7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2Jq ZWN0ICpjbWFfb2JqOwogCi0JLyogbm8gc2NhbGluZyAqLwotCWlmIChzcmNfdyAhPSBjcnRjX3cg fHwgc3JjX2ggIT0gY3J0Y19oKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljbWFfb2JqID0gZHJtX2Zi X2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJQlVHX09OKCFjbWFfb2JqKTsKIAotCWlmIChpcHVf cGxhbmUtPmJhc2UudHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Ci0JCS8qIGZ1bGwg cGxhbmUgZG9lc24ndCBzdXBwb3J0IHBhcnRpYWwgb2ZmIHNjcmVlbiAqLwotCQlpZiAoY3J0Y194 IHx8IGNydGNfeSB8fCBjcnRjX3cgIT0gbW9kZS0+aGRpc3BsYXkgfHwKLQkJCWNydGNfaCAhPSBt b2RlLT52ZGlzcGxheSkKLQkJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBjbWFfb2JqLT5wYWRk ciArIGZiLT5vZmZzZXRzWzBdICsKKwkgICAgICAgZmItPnBpdGNoZXNbMF0gKiAoc3RhdGUtPnNy Y195ID4+IDE2KSArCisJICAgICAgIChmYi0+Yml0c19wZXJfcGl4ZWwgPj4gMykgKiAoc3RhdGUt PnNyY194ID4+IDE2KTsKK30KIAotCQkvKiBmdWxsIHBsYW5lIG1pbmltdW0gd2lkdGggaXMgMTMg cGl4ZWxzICovCi0JCWlmIChjcnRjX3cgPCAxMykKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxz ZSBpZiAoaXB1X3BsYW5lLT5iYXNlLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkgewot CQkvKiBjbGlwIHRvIGNydGMgYm91bmRzICovCi0JCWlmIChjcnRjX3ggPCAwKSB7Ci0JCQlpZiAo LWNydGNfeCA+IGNydGNfdykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXNyY194ICs9IC1jcnRj X3g7Ci0JCQlzcmNfdyAtPSAtY3J0Y194OwotCQkJY3J0Y193IC09IC1jcnRjX3g7Ci0JCQljcnRj X3ggPSAwOwotCQl9Ci0JCWlmIChjcnRjX3kgPCAwKSB7Ci0JCQlpZiAoLWNydGNfeSA+IGNydGNf aCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXNyY195ICs9IC1jcnRjX3k7Ci0JCQlzcmNfaCAt PSAtY3J0Y195OwotCQkJY3J0Y19oIC09IC1jcnRjX3k7Ci0JCQljcnRjX3kgPSAwOwotCQl9Ci0J CWlmIChjcnRjX3ggKyBjcnRjX3cgPiBtb2RlLT5oZGlzcGxheSkgewotCQkJaWYgKGNydGNfeCA+ IG1vZGUtPmhkaXNwbGF5KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJY3J0Y193ID0gbW9kZS0+ aGRpc3BsYXkgLSBjcnRjX3g7Ci0JCQlzcmNfdyA9IGNydGNfdzsKLQkJfQotCQlpZiAoY3J0Y195 ICsgY3J0Y19oID4gbW9kZS0+dmRpc3BsYXkpIHsKLQkJCWlmIChjcnRjX3kgPiBtb2RlLT52ZGlz cGxheSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWNydGNfaCA9IG1vZGUtPnZkaXNwbGF5IC0g Y3J0Y195OwotCQkJc3JjX2ggPSBjcnRjX2g7Ci0JCX0KLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JaWYgKGNydGNfaCA8IDIpCi0JCXJldHVybiAtRUlOVkFMOworc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nCitkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOwor CXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisJdW5zaWduZWQgbG9uZyBlYmEg PSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJhKHN0YXRlKTsKIAotCS8qCi0JICogc2luY2Ugd2UgY2Fu bm90IHRvdWNoIGFjdGl2ZSBJRE1BQyBjaGFubmVscywgd2UgZG8gbm90IHN1cHBvcnQKLQkgKiBy ZXNpemluZyB0aGUgZW5hYmxlZCBwbGFuZSBvciBjaGFuZ2luZyBpdHMgZm9ybWF0Ci0JICovCi0J aWYgKGlwdV9wbGFuZS0+ZW5hYmxlZCkgewotCQlpZiAoc3JjX3cgIT0gaXB1X3BsYW5lLT53IHx8 IHNyY19oICE9IGlwdV9wbGFuZS0+aCB8fAotCQkgICAgZmItPnBpeGVsX2Zvcm1hdCAhPSBpcHVf cGxhbmUtPmJhc2UuZmItPnBpeGVsX2Zvcm1hdCkKLQkJCXJldHVybiAtRUlOVkFMOworCWNtYV9v YmogPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAxKTsKKwlCVUdfT04oIWNtYV9vYmopOwog Ci0JCXJldHVybiBpcHVfcGxhbmVfc2V0X2Jhc2UoaXB1X3BsYW5lLCBmYiwgc3JjX3gsIHNyY195 KTsKLQl9CisJcmV0dXJuIGNtYV9vYmotPnBhZGRyICsgZmItPm9mZnNldHNbMV0gKworCSAgICAg ICBmYi0+cGl0Y2hlc1sxXSAqIChzdGF0ZS0+c3JjX3kgPj4gMTYpIC8gMiArCisJICAgICAgIChz dGF0ZS0+c3JjX3ggPj4gMTYpIC8gMiAtIGViYTsKK30KIAotCXN3aXRjaCAoaXB1X3BsYW5lLT5k cF9mbG93KSB7Ci0JY2FzZSBJUFVfRFBfRkxPV19TWU5DX0JHOgotCQlyZXQgPSBpcHVfZHBfc2V0 dXBfY2hhbm5lbChpcHVfcGxhbmUtPmRwLAotCQkJCUlQVVYzX0NPTE9SU1BBQ0VfUkdCLAotCQkJ CUlQVVYzX0NPTE9SU1BBQ0VfUkdCKTsKLQkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYsCi0J CQkJImluaXRpYWxpemluZyBkaXNwbGF5IHByb2Nlc3NvciBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJ CQlyZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpcHVfZHBfc2V0X2dsb2JhbF9hbHBoYShp cHVfcGxhbmUtPmRwLCB0cnVlLCAwLCB0cnVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUFVfRFBfRkxP V19TWU5DX0ZHOgotCQlpcHVfZHBfc2V0dXBfY2hhbm5lbChpcHVfcGxhbmUtPmRwLAotCQkJCWlw dV9kcm1fZm91cmNjX3RvX2NvbG9yc3BhY2UoZmItPnBpeGVsX2Zvcm1hdCksCi0JCQkJSVBVVjNf Q09MT1JTUEFDRV9VTktOT1dOKTsKLQkJaXB1X2RwX3NldF93aW5kb3dfcG9zKGlwdV9wbGFuZS0+ ZHAsIGNydGNfeCwgY3J0Y195KTsKLQkJLyogRW5hYmxlIGxvY2FsIGFscGhhIG9uIHBhcnRpYWwg cGxhbmUgKi8KLQkJc3dpdGNoIChmYi0+cGl4ZWxfZm9ybWF0KSB7Ci0JCWNhc2UgRFJNX0ZPUk1B VF9BUkdCMTU1NToKLQkJY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1OgotCQljYXNlIERSTV9GT1JN QVRfUkdCQTU1NTE6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKLQkJY2FzZSBEUk1fRk9S TUFUX0FSR0I0NDQ0OgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Ci0JCWNhc2UgRFJNX0ZP Uk1BVF9BQkdSODg4ODoKLQkJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgotCQljYXNlIERSTV9G T1JNQVRfQkdSQTg4ODg6Ci0JCQlpcHVfZHBfc2V0X2dsb2JhbF9hbHBoYShpcHVfcGxhbmUtPmRw LCBmYWxzZSwgMCwgZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcKK2RybV9wbGFuZV9zdGF0ZV90b192Ym8oc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7 CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKwl1bnNpZ25lZCBsb25nIGVi YSA9IGRybV9wbGFuZV9zdGF0ZV90b19lYmEoc3RhdGUpOworCisJY21hX29iaiA9IGRybV9mYl9j bWFfZ2V0X2dlbV9vYmooZmIsIDIpOworCUJVR19PTighY21hX29iaik7CisKKwlyZXR1cm4gY21h X29iai0+cGFkZHIgKyBmYi0+b2Zmc2V0c1syXSArCisJICAgICAgIGZiLT5waXRjaGVzWzJdICog KHN0YXRlLT5zcmNfeSA+PiAxNikgLyAyICsKKwkgICAgICAgKHN0YXRlLT5zcmNfeCA+PiAxNikg LyAyIC0gZWJhOworfQorCit2b2lkIGlwdV9wbGFuZV9hdG9taWNfc2V0X2Jhc2Uoc3RydWN0IGlw dV9wbGFuZSAqaXB1X3BsYW5lLAorCQkJICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9s ZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZpcHVfcGxhbmUtPmJhc2U7 CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJdW5zaWduZWQgbG9uZyBlYmEsIHVi bywgdmJvOworCWludCBhY3RpdmU7CisKKwllYmEgPSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJhKHN0 YXRlKTsKKworCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9Z VVY0MjA6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKKwkJaWYgKG9sZF9zdGF0ZS0+ZmIpCiAJ CQlicmVhazsKLQkJfQotCX0KIAotCWlwdV9kbWZjX2NvbmZpZ193YWl0NGVvdChpcHVfcGxhbmUt PmRtZmMsIGNydGNfdyk7CisJCS8qCisJCSAqIE11bHRpcGxhbmFyIGZvcm1hdHMgaGF2ZSB0byBt ZWV0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCQkgKiAtIFRoZSAodXAgdG8pIHRocmVl IHBsYW5lIGFkZHJlc3NlcyBhcmUgRUJBLCBFQkErVUJPLCBFQkErVkJPCisJCSAqIC0gRUJBLCBV Qk8gYW5kIFZCTyBhcmUgYSBtdWx0aXBsZSBvZiA4CisJCSAqIC0gVUJPIGFuZCBWQk8gYXJlIHVu c2lnbmVkIGFuZCBub3QgbGFyZ2VyIHRoYW4gMHhmZmZmZjgKKwkJICogLSBPbmx5IEVCQSBtYXkg YmUgY2hhbmdlZCB3aGlsZSBzY2Fub3V0IGlzIGFjdGl2ZQorCQkgKiAtIFRoZSBzdHJpZGVzIG9m IFUgYW5kIFYgcGxhbmVzIG11c3QgYmUgaWRlbnRpY2FsLgorCQkgKi8KKwkJdWJvID0gZHJtX3Bs YW5lX3N0YXRlX3RvX3VibyhzdGF0ZSk7CisJCXZibyA9IGRybV9wbGFuZV9zdGF0ZV90b192Ym8o c3RhdGUpOwogCi0JaXB1X2NwbWVtX3plcm8oaXB1X3BsYW5lLT5pcHVfY2gpOwotCWlwdV9jcG1l bV9zZXRfcmVzb2x1dGlvbihpcHVfcGxhbmUtPmlwdV9jaCwgc3JjX3csIHNyY19oKTsKLQlyZXQg PSBpcHVfY3BtZW1fc2V0X2ZtdChpcHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpeGVsX2Zvcm1hdCk7 Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBwaXhlbCBmb3Jt YXQgMHglMDh4XG4iLAotCQkJZmItPnBpeGVsX2Zvcm1hdCk7Ci0JCXJldHVybiByZXQ7Ci0JfQot CWlwdV9jcG1lbV9zZXRfaGlnaF9wcmlvcml0eShpcHVfcGxhbmUtPmlwdV9jaCk7Ci0JaXB1X2lk bWFjX3NldF9kb3VibGVfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAxKTsKLQlpcHVfY3BtZW1f c2V0X3N0cmlkZShpcHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpdGNoZXNbMF0pOworCQlpZiAoZmIt PnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lVVjQyMCkKKwkJCWlwdV9jcG1lbV9zZXRfeXV2 X3BsYW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAorCQkJCQkJICAgICAgZmItPnBpdGNoZXNb MV0sIHVibywgdmJvKTsKKwkJZWxzZQorCQkJaXB1X2NwbWVtX3NldF95dXZfcGxhbmFyX2Z1bGwo aXB1X3BsYW5lLT5pcHVfY2gsCisJCQkJCQkgICAgICBmYi0+cGl0Y2hlc1sxXSwgdmJvLCB1Ym8p OwogCi0JcmV0ID0gaXB1X3BsYW5lX3NldF9iYXNlKGlwdV9wbGFuZSwgZmIsIHNyY194LCBzcmNf eSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JaWYgKGludGVybGFjZWQpCi0JCWlw dV9jcG1lbV9pbnRlcmxhY2VkX3NjYW4oaXB1X3BsYW5lLT5pcHVfY2gsIGZiLT5waXRjaGVzWzBd KTsKLQotCWlmIChmYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfWVVWNDIwKSB7Ci0JCWlw dV9jcG1lbV9zZXRfeXV2X3BsYW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAotCQkJCQkgICAg ICBpcHVfcGxhbmUtPnN0cmlkZVsxXSwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT51X29mZnNldCwK LQkJCQkJICAgICAgaXB1X3BsYW5lLT52X29mZnNldCk7Ci0JfSBlbHNlIGlmIChmYi0+cGl4ZWxf Zm9ybWF0ID09IERSTV9GT1JNQVRfWVZVNDIwKSB7Ci0JCWlwdV9jcG1lbV9zZXRfeXV2X3BsYW5h cl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAotCQkJCQkgICAgICBpcHVfcGxhbmUtPnN0cmlkZVsx XSwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT52X29mZnNldCwKLQkJCQkJICAgICAgaXB1X3BsYW5l LT51X29mZnNldCk7Ci0JfQorCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldiwKKwkJ CSJwaHkgPSAlbHUgJWx1ICVsdSwgeCA9ICVkLCB5ID0gJWQiLCBlYmEsIHVibywgdmJvLAorCQkJ c3RhdGUtPnNyY194ID4+IDE2LCBzdGF0ZS0+c3JjX3kgPj4gMTYpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldiwgInBoeXMgPSAlbHUsIHgg PSAlZCwgeSA9ICVkIiwKKwkJCWViYSwgc3RhdGUtPnNyY194ID4+IDE2LCBzdGF0ZS0+c3JjX3kg Pj4gMTYpOwogCi0JaXB1X3BsYW5lLT53ID0gc3JjX3c7Ci0JaXB1X3BsYW5lLT5oID0gc3JjX2g7 CisJCWJyZWFrOworCX0KIAotCXJldHVybiAwOworCWlmIChvbGRfc3RhdGUtPmZiKSB7CisJCWFj dGl2ZSA9IGlwdV9pZG1hY19nZXRfY3VycmVudF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gpOwor CQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSwgZWJhKTsK KwkJaXB1X2lkbWFjX3NlbGVjdF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsICFhY3RpdmUpOwor CX0gZWxzZSB7CisJCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAwLCBl YmEpOworCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgMSwgZWJhKTsK Kwl9CiB9CiAKIHZvaWQgaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoc3RydWN0IGlwdV9wbGFuZSAq aXB1X3BsYW5lKQpAQCAtMzU1LDcgKzMxNCw3IEBAIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0K IAotdm9pZCBpcHVfcGxhbmVfZW5hYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKK3N0 YXRpYyB2b2lkIGlwdV9wbGFuZV9lbmFibGUoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lKQog ewogCWlmIChpcHVfcGxhbmUtPmRwKQogCQlpcHVfZHBfZW5hYmxlKGlwdV9wbGFuZS0+aXB1KTsK QEAgLTM2MywxNCArMzIyLDEwIEBAIHZvaWQgaXB1X3BsYW5lX2VuYWJsZShzdHJ1Y3QgaXB1X3Bs YW5lICppcHVfcGxhbmUpCiAJaXB1X2lkbWFjX2VuYWJsZV9jaGFubmVsKGlwdV9wbGFuZS0+aXB1 X2NoKTsKIAlpZiAoaXB1X3BsYW5lLT5kcCkKIAkJaXB1X2RwX2VuYWJsZV9jaGFubmVsKGlwdV9w bGFuZS0+ZHApOwotCi0JaXB1X3BsYW5lLT5lbmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBpcHVf cGxhbmVfZGlzYWJsZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCitzdGF0aWMgdm9pZCBp cHVfcGxhbmVfZGlzYWJsZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCiB7Ci0JaXB1X3Bs YW5lLT5lbmFibGVkID0gZmFsc2U7Ci0KIAlpcHVfaWRtYWNfd2FpdF9idXN5KGlwdV9wbGFuZS0+ aXB1X2NoLCA1MCk7CiAKIAlpZiAoaXB1X3BsYW5lLT5kcCkKQEAgLTM4MSw3NCArMzM2LDIxNiBA QCB2b2lkIGlwdV9wbGFuZV9kaXNhYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKIAkJ aXB1X2RwX2Rpc2FibGUoaXB1X3BsYW5lLT5pcHUpOwogfQogCi0vKgotICogZHJtX3BsYW5lIEFQ SQotICovCi0KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAotCQkJICAgIHVuc2lnbmVkIGludCBjcnRj X3csIHVuc2lnbmVkIGludCBjcnRjX2gsCi0JCQkgICAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90 IHNyY195LAotCQkJICAgIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCkKK3N0YXRpYyBp bnQgaXB1X2Rpc2FibGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiB7CiAJc3RydWN0 IGlwdV9wbGFuZSAqaXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKLQlpbnQgcmV0ID0g MDsKIAotCURSTV9ERUJVR19LTVMoInBsYW5lIC0gJXBcbiIsIHBsYW5lKTsKLQotCWlmICghaXB1 X3BsYW5lLT5lbmFibGVkKQotCQlyZXQgPSBpcHVfcGxhbmVfZ2V0X3Jlc291cmNlcyhpcHVfcGxh bmUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaXB1X3BsYW5lX21v ZGVfc2V0KGlwdV9wbGFuZSwgY3J0YywgJmNydGMtPmh3bW9kZSwgZmIsCi0JCQljcnRjX3gsIGNy dGNfeSwgY3J0Y193LCBjcnRjX2gsCi0JCQlzcmNfeCA+PiAxNiwgc3JjX3kgPj4gMTYsIHNyY193 ID4+IDE2LCBzcmNfaCA+PiAxNiwKLQkJCWZhbHNlKTsKLQlpZiAocmV0IDwgMCkgewotCQlpcHVf cGxhbmVfcHV0X3Jlc291cmNlcyhpcHVfcGxhbmUpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlm IChjcnRjICE9IHBsYW5lLT5jcnRjKQotCQlkZXZfZGJnKHBsYW5lLT5kZXYtPmRldiwgImNydGMg Y2hhbmdlOiAlcCAtPiAlcFxuIiwKLQkJCQlwbGFuZS0+Y3J0YywgY3J0Yyk7CisJRFJNX0RFQlVH X0tNUygiWyVkXSAlc1xuIiwgX19MSU5FX18sIF9fZnVuY19fKTsKIAotCWlmICghaXB1X3BsYW5l LT5lbmFibGVkKQotCQlpcHVfcGxhbmVfZW5hYmxlKGlwdV9wbGFuZSk7CisJaXB1X3BsYW5lX2Rp c2FibGUoaXB1X3BsYW5lKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwdV9kaXNh YmxlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQorc3RhdGljIHZvaWQgaXB1X3BsYW5l X2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiB7CiAJc3RydWN0IGlwdV9wbGFuZSAq aXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKIAogCURSTV9ERUJVR19LTVMoIlslZF0g JXNcbiIsIF9fTElORV9fLCBfX2Z1bmNfXyk7CiAKLQlpZiAoaXB1X3BsYW5lLT5lbmFibGVkKQot CQlpcHVfcGxhbmVfZGlzYWJsZShpcHVfcGxhbmUpOworCWlwdV9kaXNhYmxlX3BsYW5lKHBsYW5l KTsKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUoaXB1X3BsYW5lKTsKK30KIAot CWlwdV9wbGFuZV9wdXRfcmVzb3VyY2VzKGlwdV9wbGFuZSk7CitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9mdW5jcyBpcHVfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZQk9IGRy bV9wbGFuZV9oZWxwZXJfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lCT0gZHJtX3BsYW5lX2hlbHBl cl9kaXNhYmxlLAorCS5kZXN0cm95CT0gaXB1X3BsYW5lX2Rlc3Ryb3ksCit9OworCitzdGF0aWMg aW50IGlwdV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpvbGRfc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBsYW5lLT5kZXYtPmRldjsKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpvbGRfZmIgPSBvbGRfc3RhdGUtPmZiOworCXVuc2lnbmVkIGxvbmcgZWJhLCB1Ym8sIHZi bywgb2xkX3Vibywgb2xkX3ZibzsKKworCS8qIE9rIHRvIGRpc2FibGUgKi8KKwlpZiAoIWZiKQor CQlyZXR1cm4gb2xkX2ZiID8gMCA6IC1FSU5WQUw7CisKKwkvKiBDUlRDIHNob3VsZCBiZSBlbmFi bGVkICovCisJaWYgKCFzdGF0ZS0+Y3J0Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwkvKiBubyBzY2FsaW5nICovCisJaWYgKHN0YXRlLT5zcmNfdyA+PiAxNiAhPSBzdGF0ZS0+Y3J0 Y193IHx8CisJICAgIHN0YXRlLT5zcmNfaCA+PiAxNiAhPSBzdGF0ZS0+Y3J0Y19oKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWNydGNfc3RhdGUgPSBzdGF0ZS0+Y3J0Yy0+c3RhdGU7CisKKwlzd2l0 Y2ggKHBsYW5lLT50eXBlKSB7CisJY2FzZSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOgorCQkvKiBm dWxsIHBsYW5lIGRvZXNuJ3Qgc3VwcG9ydCBwYXJ0aWFsIG9mZiBzY3JlZW4gKi8KKwkJaWYgKHN0 YXRlLT5jcnRjX3ggfHwgc3RhdGUtPmNydGNfeSB8fAorCQkgICAgc3RhdGUtPmNydGNfdyAhPSBj cnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5IHx8CisJCSAgICBzdGF0ZS0+Y3J0Y19o ICE9IGNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXkpCisJCQlyZXR1cm4gLUVJTlZB TDsKKworCQkvKiBmdWxsIHBsYW5lIG1pbmltdW0gd2lkdGggaXMgMTMgcGl4ZWxzICovCisJCWlm IChzdGF0ZS0+Y3J0Y193IDwgMTMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgorCQlpZiAoc3RhdGUtPmNydGNfeCA8IDAgfHwgc3Rh dGUtPmNydGNfeSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoc3RhdGUtPmNydGNf eCArIHN0YXRlLT5jcnRjX3cgPgorCQkgICAgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlz cGxheSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoc3RhdGUtPmNydGNfeSArIHN0YXRlLT5j cnRjX2ggPgorCQkgICAgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52ZGlzcGxheSkKKwkJCXJl dHVybiAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihkZXYsICJVbnN1 cHBvcnRlZCBwbGFuZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0 YXRlLT5jcnRjX2ggPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogc2luY2Ugd2Ug Y2Fubm90IHRvdWNoIGFjdGl2ZSBJRE1BQyBjaGFubmVscywgd2UgZG8gbm90IHN1cHBvcnQKKwkg KiByZXNpemluZyB0aGUgZW5hYmxlZCBwbGFuZSBvciBjaGFuZ2luZyBpdHMgZm9ybWF0CisJICov CisJaWYgKG9sZF9mYiAmJiAoc3RhdGUtPnNyY193ICE9IG9sZF9zdGF0ZS0+c3JjX3cgfHwKKwkJ CSAgICAgIHN0YXRlLT5zcmNfaCAhPSBvbGRfc3RhdGUtPnNyY19oIHx8CisJCQkgICAgICBmYi0+ cGl4ZWxfZm9ybWF0ICE9IG9sZF9mYi0+cGl4ZWxfZm9ybWF0KSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwllYmEgPSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJhKHN0YXRlKTsKKworCWlmIChlYmEgJiAw eDcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZiLT5waXRjaGVzWzBdIDwgMSB8fCBmYi0+ cGl0Y2hlc1swXSA+IDE2Mzg0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvbGRfZmIgJiYg ZmItPnBpdGNoZXNbMF0gIT0gb2xkX2ZiLT5waXRjaGVzWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6 CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKKwkJLyoKKwkJICogTXVsdGlwbGFuYXIgZm9ybWF0 cyBoYXZlIHRvIG1lZXQgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisJCSAqIC0gVGhlICh1 cCB0bykgdGhyZWUgcGxhbmUgYWRkcmVzc2VzIGFyZSBFQkEsIEVCQStVQk8sIEVCQStWQk8KKwkJ ICogLSBFQkEsIFVCTyBhbmQgVkJPIGFyZSBhIG11bHRpcGxlIG9mIDgKKwkJICogLSBVQk8gYW5k IFZCTyBhcmUgdW5zaWduZWQgYW5kIG5vdCBsYXJnZXIgdGhhbiAweGZmZmZmOAorCQkgKiAtIE9u bHkgRUJBIG1heSBiZSBjaGFuZ2VkIHdoaWxlIHNjYW5vdXQgaXMgYWN0aXZlCisJCSAqIC0gVGhl IHN0cmlkZXMgb2YgVSBhbmQgViBwbGFuZXMgbXVzdCBiZSBpZGVudGljYWwuCisJCSAqLworCQl1 Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0YXRlKTsKKwkJdmJvID0gZHJtX3BsYW5lX3N0 YXRlX3RvX3ZibyhzdGF0ZSk7CisKKwkJaWYgKCh1Ym8gJiAweDcpIHx8ICh2Ym8gJiAweDcpKQor CQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKCh1Ym8gPiAweGZmZmZmOCkgfHwgKHZibyA+IDB4 ZmZmZmY4KSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChvbGRfZmIpIHsKKwkJCW9sZF91 Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKG9sZF9zdGF0ZSk7CisJCQlvbGRfdmJvID0gZHJt X3BsYW5lX3N0YXRlX3RvX3ZibyhvbGRfc3RhdGUpOworCQkJaWYgKHVibyAhPSBvbGRfdWJvIHx8 IHZibyAhPSBvbGRfdmJvKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGZiLT5w aXRjaGVzWzFdICE9IGZiLT5waXRjaGVzWzJdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYg KGZiLT5waXRjaGVzWzFdIDwgMSB8fCBmYi0+cGl0Y2hlc1sxXSA+IDE2Mzg0KQorCQkJcmV0dXJu IC1FSU5WQUw7CisKKwkJaWYgKG9sZF9mYiAmJiBvbGRfZmItPnBpdGNoZXNbMV0gIT0gZmItPnBp dGNoZXNbMV0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIHZvaWQgaXB1X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCitzdGF0 aWMgdm9pZCBpcHVfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJaXB1X2Rp c2FibGVfcGxhbmUocGxhbmUpOworfQorCitzdGF0aWMgdm9pZCBpcHVfcGxhbmVfYXRvbWljX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqb2xkX3N0YXRlKQogewogCXN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSA9IHRvX2lw dV9wbGFuZShwbGFuZSk7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+ c3RhdGU7CisJZW51bSBpcHVfY29sb3Jfc3BhY2UgaWNzOwogCi0JRFJNX0RFQlVHX0tNUygiWyVk XSAlc1xuIiwgX19MSU5FX18sIF9fZnVuY19fKTsKKwlpZiAob2xkX3N0YXRlLT5mYikgeworCQlp cHVfcGxhbmVfYXRvbWljX3NldF9iYXNlKGlwdV9wbGFuZSwgb2xkX3N0YXRlKTsKKwkJcmV0dXJu OworCX0KIAotCWlwdV9kaXNhYmxlX3BsYW5lKHBsYW5lKTsKLQlkcm1fcGxhbmVfY2xlYW51cChw bGFuZSk7Ci0Ja2ZyZWUoaXB1X3BsYW5lKTsKKwlzd2l0Y2ggKGlwdV9wbGFuZS0+ZHBfZmxvdykg eworCWNhc2UgSVBVX0RQX0ZMT1dfU1lOQ19CRzoKKwkJaXB1X2RwX3NldHVwX2NoYW5uZWwoaXB1 X3BsYW5lLT5kcCwKKwkJCQkJSVBVVjNfQ09MT1JTUEFDRV9SR0IsCisJCQkJCUlQVVYzX0NPTE9S U1BBQ0VfUkdCKTsKKwkJaXB1X2RwX3NldF9nbG9iYWxfYWxwaGEoaXB1X3BsYW5lLT5kcCwgdHJ1 ZSwgMCwgdHJ1ZSk7CisJCWJyZWFrOworCWNhc2UgSVBVX0RQX0ZMT1dfU1lOQ19GRzoKKwkJaWNz ID0gaXB1X2RybV9mb3VyY2NfdG9fY29sb3JzcGFjZShzdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCk7 CisJCWlwdV9kcF9zZXR1cF9jaGFubmVsKGlwdV9wbGFuZS0+ZHAsIGljcywKKwkJCQkJSVBVVjNf Q09MT1JTUEFDRV9VTktOT1dOKTsKKwkJaXB1X2RwX3NldF93aW5kb3dfcG9zKGlwdV9wbGFuZS0+ ZHAsIHN0YXRlLT5jcnRjX3gsCisJCQkJCXN0YXRlLT5jcnRjX3kpOworCQkvKiBFbmFibGUgbG9j YWwgYWxwaGEgb24gcGFydGlhbCBwbGFuZSAqLworCQlzd2l0Y2ggKHN0YXRlLT5mYi0+cGl4ZWxf Zm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKKwkJY2FzZSBEUk1fRk9STUFU X0FCR1IxNTU1OgorCQljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6CisJCWNhc2UgRFJNX0ZPUk1B VF9CR1JBNTU1MToKKwkJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0OgorCQljYXNlIERSTV9GT1JN QVRfQVJHQjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJY2FzZSBEUk1fRk9S TUFUX1JHQkE4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCQlpcHVfZHBfc2V0 X2dsb2JhbF9hbHBoYShpcHVfcGxhbmUtPmRwLCBmYWxzZSwgMCwgZmFsc2UpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWlwdV9kbWZjX2NvbmZpZ193YWl0 NGVvdChpcHVfcGxhbmUtPmRtZmMsIHN0YXRlLT5jcnRjX3cpOworCisJaXB1X2NwbWVtX3plcm8o aXB1X3BsYW5lLT5pcHVfY2gpOworCWlwdV9jcG1lbV9zZXRfcmVzb2x1dGlvbihpcHVfcGxhbmUt PmlwdV9jaCwgc3RhdGUtPnNyY193ID4+IDE2LAorCQkJCQlzdGF0ZS0+c3JjX2ggPj4gMTYpOwor CWlwdV9jcG1lbV9zZXRfZm10KGlwdV9wbGFuZS0+aXB1X2NoLCBzdGF0ZS0+ZmItPnBpeGVsX2Zv cm1hdCk7CisJaXB1X2NwbWVtX3NldF9oaWdoX3ByaW9yaXR5KGlwdV9wbGFuZS0+aXB1X2NoKTsK KwlpcHVfaWRtYWNfc2V0X2RvdWJsZV9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsIDEpOworCWlw dV9jcG1lbV9zZXRfc3RyaWRlKGlwdV9wbGFuZS0+aXB1X2NoLCBzdGF0ZS0+ZmItPnBpdGNoZXNb MF0pOworCWlwdV9wbGFuZV9hdG9taWNfc2V0X2Jhc2UoaXB1X3BsYW5lLCBvbGRfc3RhdGUpOwor CWlwdV9wbGFuZV9lbmFibGUoaXB1X3BsYW5lKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgaXB1X3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUJPSBpcHVf dXBkYXRlX3BsYW5lLAotCS5kaXNhYmxlX3BsYW5lCT0gaXB1X2Rpc2FibGVfcGxhbmUsCi0JLmRl c3Ryb3kJPSBpcHVfcGxhbmVfZGVzdHJveSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyBpcHVfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sg PSBpcHVfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfZGlzYWJsZSA9IGlwdV9wbGFuZV9h dG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX3VwZGF0ZSA9IGlwdV9wbGFuZV9hdG9taWNfdXBkYXRl LAogfTsKIAogc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGlwdV9zb2MgKmlwdSwKQEAgLTQ4MSw1ICs1NzgsNyBAQCBzdHJ1Y3Qg aXB1X3BsYW5lICppcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg aXB1X3NvYyAqaXB1LAogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAorCWRybV9wbGFuZV9o ZWxwZXJfYWRkKCZpcHVfcGxhbmUtPmJhc2UsICZpcHVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwog CXJldHVybiBpcHVfcGxhbmU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lw dXYzLXBsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmgKaW5kZXggNDQ0 OGZkNC4uYzUxYTQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFu ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuaApAQCAtMjMsMTcgKzIz LDYgQEAgc3RydWN0IGlwdV9wbGFuZSB7CiAKIAlpbnQJCQlkbWE7CiAJaW50CQkJZHBfZmxvdzsK LQotCWludAkJCXg7Ci0JaW50CQkJeTsKLQlpbnQJCQl3OwotCWludAkJCWg7Ci0KLQl1bnNpZ25l ZCBpbnQJCXVfb2Zmc2V0OwotCXVuc2lnbmVkIGludAkJdl9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50 CQlzdHJpZGVbMl07Ci0KLQlib29sCQkJZW5hYmxlZDsKIH07CiAKIHN0cnVjdCBpcHVfcGxhbmUg KmlwdV9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpcHVfc29jICpp cHUsCkBAIC00OCwxMCArMzcsNyBAQCBpbnQgaXB1X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBpcHVf cGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCSAgICAgICB1aW50MzJfdCBz cmNfeCwgdWludDMyX3Qgc3JjX3ksIHVpbnQzMl90IHNyY193LAogCQkgICAgICAgdWludDMyX3Qg c3JjX2gsIGJvb2wgaW50ZXJsYWNlZCk7CiAKLXZvaWQgaXB1X3BsYW5lX2VuYWJsZShzdHJ1Y3Qg aXB1X3BsYW5lICpwbGFuZSk7Ci12b2lkIGlwdV9wbGFuZV9kaXNhYmxlKHN0cnVjdCBpcHVfcGxh bmUgKnBsYW5lKTsKLWludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqcGxh bmUsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgICAgaW50IHgsIGludCB5KTsK K2ludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiKTsKIAogaW50IGlwdV9wbGFuZV9nZXRfcmVzb3VyY2VzKHN0cnVj dCBpcHVfcGxhbmUgKnBsYW5lKTsKIHZvaWQgaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoc3RydWN0 IGlwdV9wbGFuZSAqcGxhbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1k Yy5jIGIvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1kYy5jCmluZGV4IDJmMjk3ODAuLmNkNzJkYWQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtZGMuYworKysgYi9kcml2ZXJzL2dw dS9pcHUtdjMvaXB1LWRjLmMKQEAgLTE3OCwxMCArMTc4LDcgQEAgaW50IGlwdV9kY19pbml0X3N5 bmMoc3RydWN0IGlwdV9kYyAqZGMsIHN0cnVjdCBpcHVfZGkgKmRpLCBib29sIGludGVybGFjZWQs CiAJZGMtPmRpID0gaXB1X2RpX2dldF9udW0oZGkpOwogCiAJbWFwID0gaXB1X2J1c19mb3JtYXRf dG9fbWFwKGJ1c19mb3JtYXQpOwotCWlmIChtYXAgPCAwKSB7Ci0JCWRldl9kYmcocHJpdi0+ZGV2 LCAiSVBVX0RJU1A6IE5vIE1BUFxuIik7Ci0JCXJldHVybiBtYXA7Ci0JfQorCUJVR19PTihtYXAg PCAwKTsKIAogCS8qCiAJICogSW4gaW50ZXJsYWNlZCBtb2RlIHdlIG5lZWQgbW9yZSBjb3VudGVy cyB0byBjcmVhdGUgdGhlIGFzeW1tZXRyaWMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2lwdS12 My9pcHUtZGkuYyBiL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtZGkuYwppbmRleCAzNTkyNjhlLi5h OGQ4N2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRpLmMKKysrIGIvZHJp dmVycy9ncHUvaXB1LXYzL2lwdS1kaS5jCkBAIC01NzIsOSArNTcyLDYgQEAgaW50IGlwdV9kaV9p bml0X3N5bmNfcGFuZWwoc3RydWN0IGlwdV9kaSAqZGksIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2Nm ZyAqc2lnKQogCWRldl9kYmcoZGktPmlwdS0+ZGV2LCAiZGlzcCAlZDogcGFuZWwgc2l6ZSA9ICVk IHggJWRcbiIsCiAJCWRpLT5pZCwgc2lnLT5tb2RlLmhhY3RpdmUsIHNpZy0+bW9kZS52YWN0aXZl KTsKIAotCWlmICgoc2lnLT5tb2RlLnZzeW5jX2xlbiA9PSAwKSB8fCAoc2lnLT5tb2RlLmhzeW5j X2xlbiA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlkZXZfZGJnKGRpLT5pcHUtPmRldiwg IkNsb2NrczogSVBVICVsdUh6IERJICVsdUh6IE5lZWRlZCAlbHVIelxuIiwKIAkJY2xrX2dldF9y YXRlKGRpLT5jbGtfaXB1KSwKIAkJY2xrX2dldF9yYXRlKGRpLT5jbGtfZGkpLAotLSAKMi43LjQK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=