From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH 06/14] drm/i915/skl: Eliminate usage of pipe_wm_parameters from SKL-style WM (v2) Date: Mon, 14 Sep 2015 19:19:22 -0700 Message-ID: <1442283570-26824-7-git-send-email-matthew.d.roper@intel.com> References: <1442283570-26824-1-git-send-email-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 904F46E97C for ; Mon, 14 Sep 2015 19:20:06 -0700 (PDT) In-Reply-To: <1442283570-26824-1-git-send-email-matthew.d.roper@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 SnVzdCBwdWxsIHRoZSBpbmZvIG91dCBvZiB0aGUgc3RhdGUgc3RydWN0dXJlcyByYXRoZXIgdGhh biBzdGFnaW5nCml0IGluIGFuIGFkZGl0aW9uYWwgc2V0IG9mIHN0cnVjdHVyZXMuICBUbyBtYWtl IHRoaXMgbW9yZQpzdHJhaWdodGZvcndhcmQsIHdlIGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHNl dmVyYWwgaW50ZXJuYWwgV00KZnVuY3Rpb25zIHRvIHRha2UgdGhlIGNydGMgc3RhdGUgYXMgYSBw YXJhbWV0ZXIuCgp2MjoKIC0gRG9uJ3QgZm9yZ2V0IHRvIHNraXAgY3Vyc29yIHBsYW5lcyBvbiBh IGxvb3AgaW4gdGhlIEREQiBhbGxvY2F0aW9uCiAgIGZ1bmN0aW9uIHRvIG1hdGNoIG9yaWdpbmFs IGJlaGF2aW9yLiAgKEFuZGVyKQogLSBDaGFuZ2UgYSB1c2Ugb2YgaW50ZWxfY3J0Yy0+YWN0aXZl IHRvIGNzdGF0ZS0+YWN0aXZlLiAgVGhleSBzaG91bGQKICAgYmUgaWRlbnRpY2FsLCBidXQgaXQn cyBiZXR0ZXIgdG8gYmUgY29uc2lzdGVudC4gIChBbmRlcikKIC0gUmV3b3JrIG1vcmUgZnVuY3Rp b24gc2lnbmF0dXJlcyB0byBwYXNzIHN0YXRlcyByYXRoZXIgdGhhbiBjcnRjIGZvcgogICBjb25z aXN0ZW5jeS4gKEFuZGVyKQoKU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJv cGVyQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIHwgMzI2 ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxNTEgaW5zZXJ0aW9ucygrKSwgMTc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jCmluZGV4IDcxMTUzNjguLjUxZGJkYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAt MTc4NywxMyArMTc4Nyw2IEBAIHN0YXRpYyB1aW50MzJfdCBpbGtfd21fZmJjKHVpbnQzMl90IHBy aV92YWwsIHVpbnQzMl90IGhvcml6X3BpeGVscywKIAlyZXR1cm4gRElWX1JPVU5EX1VQKHByaV92 YWwgKiA2NCwgaG9yaXpfcGl4ZWxzICogYnl0ZXNfcGVyX3BpeGVsKSArIDI7CiB9CiAKLXN0cnVj dCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzIHsKLQlib29sIGFjdGl2ZTsKLQl1aW50MzJfdCBwaXBl X2h0b3RhbDsKLQl1aW50MzJfdCBwaXhlbF9yYXRlOyAvKiBpbiBLSHogKi8KLQlzdHJ1Y3QgaW50 ZWxfcGxhbmVfd21fcGFyYW1ldGVycyBwbGFuZVtJOTE1X01BWF9QTEFORVNdOwotfTsKLQogc3Ry dWN0IGlsa193bV9tYXhpbXVtcyB7CiAJdWludDE2X3QgcHJpOwogCXVpbnQxNl90IHNwcjsKQEAg LTI4MzQsMTggKzI4MjcsNDAgQEAgc3RhdGljIGJvb2wgaWxrX2Rpc2FibGVfbHBfd20oc3RydWN0 IGRybV9kZXZpY2UgKmRldikKICNkZWZpbmUgU0tMX0REQl9TSVpFCQk4OTYJLyogaW4gYmxvY2tz ICovCiAjZGVmaW5lIEJYVF9EREJfU0laRQkJNTEyCiAKKy8qCisgKiBSZXR1cm4gdGhlIGluZGV4 IG9mIGEgcGxhbmUgaW4gdGhlIFNLTCBEREIgYW5kIHdtIHJlc3VsdCBhcnJheXMuICBQcmltYXJ5 CisgKiBwbGFuZSBpcyBhbHdheXMgaW4gc2xvdCAwLCBjdXJzb3IgaXMgYWx3YXlzIGluIHNsb3Qg STkxNV9NQVhfUExBTkVTLTEsIGFuZAorICogb3RoZXIgdW5pdmVyc2FsIHBsYW5lcyBhcmUgaW4g aW5kaWNlcyAxLi5uLiAgTm90ZSB0aGF0IHRoaXMgbWF5IGxlYXZlIHVudXNlZAorICogaW5kaWNl cyBiZXR3ZWVuIHRoZSB0b3AgInNwcml0ZSIgcGxhbmUgYW5kIHRoZSBjdXJzb3IuCisgKi8KK3N0 YXRpYyBpbnQKK3NrbF93bV9wbGFuZV9pZChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l KQoreworCXN3aXRjaCAocGxhbmUtPmJhc2UudHlwZSkgeworCWNhc2UgRFJNX1BMQU5FX1RZUEVf UFJJTUFSWToKKwkJcmV0dXJuIDA7CisJY2FzZSBEUk1fUExBTkVfVFlQRV9DVVJTT1I6CisJCXJl dHVybiBQTEFORV9DVVJTT1I7CisJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgorCQlyZXR1 cm4gcGxhbmUtPnBsYW5lOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShwbGFuZS0+YmFzZS50 eXBlKTsKKwkJcmV0dXJuIHBsYW5lLT5wbGFuZTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBza2xf ZGRiX2dldF9waXBlX2FsbG9jYXRpb25fbGltaXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0J CQkJICAgc3RydWN0IGRybV9jcnRjICpmb3JfY3J0YywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF93bV9jb25m aWcgKmNvbmZpZywKLQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAq cGFyYW1zLAogCQkJCSAgIHN0cnVjdCBza2xfZGRiX2VudHJ5ICphbGxvYyAvKiBvdXQgKi8pCiB7 CisJc3RydWN0IGRybV9jcnRjICpmb3JfY3J0YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOwogCXN0cnVj dCBkcm1fY3J0YyAqY3J0YzsKIAl1bnNpZ25lZCBpbnQgcGlwZV9zaXplLCBkZGJfc2l6ZTsKIAlp bnQgbnRoX2FjdGl2ZV9waXBlOwogCi0JaWYgKCFwYXJhbXMtPmFjdGl2ZSkgeworCWlmICghY3N0 YXRlLT5iYXNlLmFjdGl2ZSkgewogCQlhbGxvYy0+c3RhcnQgPSAwOwogCQlhbGxvYy0+ZW5kID0g MDsKIAkJcmV0dXJuOwpAQCAtMjkxMSwxOSArMjkyNiwyOSBAQCB2b2lkIHNrbF9kZGJfZ2V0X2h3 X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIH0KIAogc3RhdGljIHVu c2lnbmVkIGludAotc2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfd21fcGFyYW1ldGVycyAqcCwgaW50IHkpCitza2xfcGxhbmVfcmVsYXRpdmVfZGF0 YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCisJCQkgICAgIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSwKKwkJCSAgICAgaW50IHkpCiB7CisJ c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNzdGF0ZS0+YmFz ZS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBzdGF0ZS0+ZmI7CiAKIAkv KiBmb3IgcGxhbmFyIGZvcm1hdCAqLwotCWlmIChwLT55X2J5dGVzX3Blcl9waXhlbCkgeworCWlm IChmYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikgewogCQlpZiAoeSkgIC8qIHkt cGxhbmUgZGF0YSByYXRlICovCi0JCQlyZXR1cm4gcC0+aG9yaXpfcGl4ZWxzICogcC0+dmVydF9w aXhlbHMgKiBwLT55X2J5dGVzX3Blcl9waXhlbDsKKwkJCXJldHVybiBpbnRlbF9jcnRjLT5jb25m aWctPnBpcGVfc3JjX3cgKgorCQkJCWludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfaCAqCisJ CQkJZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7CiAJCWVsc2UgICAg LyogdXYtcGxhbmUgZGF0YSByYXRlICovCi0JCQlyZXR1cm4gKHAtPmhvcml6X3BpeGVscy8yKSAq IChwLT52ZXJ0X3BpeGVscy8yKSAqIHAtPmJ5dGVzX3Blcl9waXhlbDsKKwkJCXJldHVybiAoaW50 ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY193LzIpICoKKwkJCQkoaW50ZWxfY3J0Yy0+Y29uZmln LT5waXBlX3NyY19oLzIpICoKKwkJCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9y bWF0LCAxKTsKIAl9CiAKIAkvKiBmb3IgcGFja2VkIGZvcm1hdHMgKi8KLQlyZXR1cm4gcC0+aG9y aXpfcGl4ZWxzICogcC0+dmVydF9waXhlbHMgKiBwLT5ieXRlc19wZXJfcGl4ZWw7CisJcmV0dXJu IGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfdyAqCisJCWludGVsX2NydGMtPmNvbmZpZy0+ cGlwZV9zcmNfaCAqCisJCWRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDEp OwogfQogCiAvKgpAQCAtMjkzMiw0NiArMjk1Nyw1MSBAQCBza2xfcGxhbmVfcmVsYXRpdmVfZGF0 YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV93bV9wYXJhbWV0ZXJzICpwLCBpbnQgeSkK ICAqICAgMyAqIDQwOTYgKiA4MTkyICAqIDQgPCAyXjMyCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBp bnQKLXNrbF9nZXRfdG90YWxfcmVsYXRpdmVfZGF0YV9yYXRlKHN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjLAotCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcGFy YW1zKQorc2tsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNzdGF0ZSkKIHsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3N0YXRlLT5iYXNlLmNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmUgKmlu dGVsX3BsYW5lOwogCXVuc2lnbmVkIGludCB0b3RhbF9kYXRhX3JhdGUgPSAwOwotCWludCBwbGFu ZTsKIAotCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGludGVsX251bV9wbGFuZXMoaW50ZWxfY3J0 Yyk7IHBsYW5lKyspIHsKLQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMg KnA7CisJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhkZXYsIGludGVsX2NydGMsIGludGVs X3BsYW5lKSB7CisJCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9IGludGVs X3BsYW5lLT5iYXNlLnN0YXRlOwogCi0JCXAgPSAmcGFyYW1zLT5wbGFuZVtwbGFuZV07Ci0JCWlm ICghcC0+ZW5hYmxlZCkKKwkJaWYgKFdBUk5fT04ocHN0YXRlLT5mYiA9PSBOVUxMKSkKIAkJCWNv bnRpbnVlOwogCi0JCXRvdGFsX2RhdGFfcmF0ZSArPSBza2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9y YXRlKHAsIDApOyAvKiBwYWNrZWQvdXYgKi8KLQkJaWYgKHAtPnlfYnl0ZXNfcGVyX3BpeGVsKSB7 Ci0JCQl0b3RhbF9kYXRhX3JhdGUgKz0gc2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShwLCAx KTsgLyogeS1wbGFuZSAqLwotCQl9CisJCS8qIHBhY2tlZC91diAqLworCQl0b3RhbF9kYXRhX3Jh dGUgKz0gc2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShjc3RhdGUsCisJCQkJCQkJCXBzdGF0 ZSwKKwkJCQkJCQkJMCk7CisKKwkJaWYgKHBzdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1f Rk9STUFUX05WMTIpCisJCQkvKiB5LXBsYW5lICovCisJCQl0b3RhbF9kYXRhX3JhdGUgKz0gc2ts X3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShjc3RhdGUsCisJCQkJCQkJCQlwc3RhdGUsCisJCQkJ CQkJCQkxKTsKIAl9CiAKIAlyZXR1cm4gdG90YWxfZGF0YV9yYXRlOwogfQogCiBzdGF0aWMgdm9p ZAotc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKK3NrbF9hbGxv Y2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfd21fY29uZmlnICpjb25maWcsCi0JCSAgICAgIGNvbnN0IHN0cnVj dCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwYXJhbXMsCiAJCSAgICAgIHN0cnVjdCBza2xfZGRi X2FsbG9jYXRpb24gKmRkYiAvKiBvdXQgKi8pCiB7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0g Y3N0YXRlLT5iYXNlLmNydGM7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwog CXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlz dHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lOwogCWVudW0gcGlwZSBwaXBlID0gaW50ZWxf Y3J0Yy0+cGlwZTsKIAlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqYWxsb2MgPSAmZGRiLT5waXBlW3Bp cGVdOwogCXVpbnQxNl90IGFsbG9jX3NpemUsIHN0YXJ0LCBjdXJzb3JfYmxvY2tzOwogCXVpbnQx Nl90IG1pbmltdW1bSTkxNV9NQVhfUExBTkVTXTsKIAl1aW50MTZfdCB5X21pbmltdW1bSTkxNV9N QVhfUExBTkVTXTsKIAl1bnNpZ25lZCBpbnQgdG90YWxfZGF0YV9yYXRlOwotCWludCBwbGFuZTsK IAotCXNrbF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoZGV2LCBjcnRjLCBjb25maWcs IHBhcmFtcywgYWxsb2MpOworCXNrbF9kZGJfZ2V0X3BpcGVfYWxsb2NhdGlvbl9saW1pdHMoZGV2 LCBjc3RhdGUsIGNvbmZpZywgYWxsb2MpOwogCWFsbG9jX3NpemUgPSBza2xfZGRiX2VudHJ5X3Np emUoYWxsb2MpOwogCWlmIChhbGxvY19zaXplID09IDApIHsKIAkJbWVtc2V0KGRkYi0+cGxhbmVb cGlwZV0sIDAsIHNpemVvZihkZGItPnBsYW5lW3BpcGVdKSk7CkBAIC0yOTg4LDE3ICszMDE4LDIw IEBAIHNrbF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJYWxsb2Mt PmVuZCAtPSBjdXJzb3JfYmxvY2tzOwogCiAJLyogMS4gQWxsb2NhdGUgdGhlIG1pbmludW0gcmVx dWlyZWQgYmxvY2tzIGZvciBlYWNoIGFjdGl2ZSBwbGFuZSAqLwotCWZvcl9lYWNoX3BsYW5lKGRl dl9wcml2LCBwaXBlLCBwbGFuZSkgewotCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfd21fcGFy YW1ldGVycyAqcDsKKwlmb3JfZWFjaF9pbnRlbF9wbGFuZV9vbl9jcnRjKGRldiwgaW50ZWxfY3J0 YywgaW50ZWxfcGxhbmUpIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmaW50ZWxfcGxh bmUtPmJhc2U7CisJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPmZiOworCQlp bnQgaWQgPSBza2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpOwogCi0JCXAgPSAmcGFyYW1zLT5w bGFuZVtwbGFuZV07Ci0JCWlmICghcC0+ZW5hYmxlZCkKKwkJaWYgKGZiID09IE5VTEwpCisJCQlj b250aW51ZTsKKwkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKIAkJ CWNvbnRpbnVlOwogCi0JCW1pbmltdW1bcGxhbmVdID0gODsKLQkJYWxsb2Nfc2l6ZSAtPSBtaW5p bXVtW3BsYW5lXTsKLQkJeV9taW5pbXVtW3BsYW5lXSA9IHAtPnlfYnl0ZXNfcGVyX3BpeGVsID8g OCA6IDA7Ci0JCWFsbG9jX3NpemUgLT0geV9taW5pbXVtW3BsYW5lXTsKKwkJbWluaW11bVtpZF0g PSA4OworCQlhbGxvY19zaXplIC09IG1pbmltdW1baWRdOworCQl5X21pbmltdW1baWRdID0gKGZi LT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSA/IDggOiAwOworCQlhbGxvY19zaXpl IC09IHlfbWluaW11bVtpZF07CiAJfQogCiAJLyoKQEAgLTMwMDcsNDUgKzMwNDAsNTAgQEAgc2ts X2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkgKgogCSAqIEZJWE1F OiB3ZSBtYXkgbm90IGFsbG9jYXRlIGV2ZXJ5IHNpbmdsZSBibG9jayBoZXJlLgogCSAqLwotCXRv dGFsX2RhdGFfcmF0ZSA9IHNrbF9nZXRfdG90YWxfcmVsYXRpdmVfZGF0YV9yYXRlKGludGVsX2Ny dGMsIHBhcmFtcyk7CisJdG90YWxfZGF0YV9yYXRlID0gc2tsX2dldF90b3RhbF9yZWxhdGl2ZV9k YXRhX3JhdGUoY3N0YXRlKTsKIAogCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0OwotCWZvciAocGxhbmUg PSAwOyBwbGFuZSA8IGludGVsX251bV9wbGFuZXMoaW50ZWxfY3J0Yyk7IHBsYW5lKyspIHsKLQkJ Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMgKnA7CisJZm9yX2VhY2hfaW50 ZWxfcGxhbmVfb25fY3J0YyhkZXYsIGludGVsX2NydGMsIGludGVsX3BsYW5lKSB7CisJCXN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lID0gJmludGVsX3BsYW5lLT5iYXNlOworCQlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpwc3RhdGUgPSBpbnRlbF9wbGFuZS0+YmFzZS5zdGF0ZTsKIAkJdW5zaWduZWQg aW50IGRhdGFfcmF0ZSwgeV9kYXRhX3JhdGU7CiAJCXVpbnQxNl90IHBsYW5lX2Jsb2NrcywgeV9w bGFuZV9ibG9ja3MgPSAwOworCQlpbnQgaWQgPSBza2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUp OwogCi0JCXAgPSAmcGFyYW1zLT5wbGFuZVtwbGFuZV07Ci0JCWlmICghcC0+ZW5hYmxlZCkKKwkJ aWYgKHBzdGF0ZS0+ZmIgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAocGxhbmUtPnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQogCQkJY29udGludWU7CiAKLQkJZGF0YV9yYXRlID0g c2tsX3BsYW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShwLCAwKTsKKwkJZGF0YV9yYXRlID0gc2tsX3Bs YW5lX3JlbGF0aXZlX2RhdGFfcmF0ZShjc3RhdGUsIHBzdGF0ZSwgMCk7CiAKIAkJLyoKIAkJICog YWxsb2NhdGlvbiBmb3IgKHBhY2tlZCBmb3JtYXRzKSBvciAodXYtcGxhbmUgcGFydCBvZiBwbGFu YXIgZm9ybWF0KToKIAkJICogcHJvbW90ZSB0aGUgZXhwcmVzc2lvbiB0byA2NCBiaXRzIHRvIGF2 b2lkIG92ZXJmbG93aW5nLCB0aGUKIAkJICogcmVzdWx0IGlzIDwgYXZhaWxhYmxlIGFzIGRhdGFf cmF0ZSAvIHRvdGFsX2RhdGFfcmF0ZSA8IDEKIAkJICovCi0JCXBsYW5lX2Jsb2NrcyA9IG1pbmlt dW1bcGxhbmVdOworCQlwbGFuZV9ibG9ja3MgPSBtaW5pbXVtW2lkXTsKIAkJcGxhbmVfYmxvY2tz ICs9IGRpdl91NjQoKHVpbnQ2NF90KWFsbG9jX3NpemUgKiBkYXRhX3JhdGUsCiAJCQkJCXRvdGFs X2RhdGFfcmF0ZSk7CiAKLQkJZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV0uc3RhcnQgPSBzdGFydDsK LQkJZGRiLT5wbGFuZVtwaXBlXVtwbGFuZV0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7CisJ CWRkYi0+cGxhbmVbcGlwZV1baWRdLnN0YXJ0ID0gc3RhcnQ7CisJCWRkYi0+cGxhbmVbcGlwZV1b aWRdLmVuZCA9IHN0YXJ0ICsgcGxhbmVfYmxvY2tzOwogCiAJCXN0YXJ0ICs9IHBsYW5lX2Jsb2Nr czsKIAogCQkvKgogCQkgKiBhbGxvY2F0aW9uIGZvciB5X3BsYW5lIHBhcnQgb2YgcGxhbmFyIGZv cm1hdDoKIAkJICovCi0JCWlmIChwLT55X2J5dGVzX3Blcl9waXhlbCkgewotCQkJeV9kYXRhX3Jh dGUgPSBza2xfcGxhbmVfcmVsYXRpdmVfZGF0YV9yYXRlKHAsIDEpOwotCQkJeV9wbGFuZV9ibG9j a3MgPSB5X21pbmltdW1bcGxhbmVdOworCQlpZiAocHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09 IERSTV9GT1JNQVRfTlYxMikgeworCQkJeV9kYXRhX3JhdGUgPSBza2xfcGxhbmVfcmVsYXRpdmVf ZGF0YV9yYXRlKGNzdGF0ZSwKKwkJCQkJCQkJICAgcHN0YXRlLAorCQkJCQkJCQkgICAxKTsKKwkJ CXlfcGxhbmVfYmxvY2tzID0geV9taW5pbXVtW2lkXTsKIAkJCXlfcGxhbmVfYmxvY2tzICs9IGRp dl91NjQoKHVpbnQ2NF90KWFsbG9jX3NpemUgKiB5X2RhdGFfcmF0ZSwKIAkJCQkJCXRvdGFsX2Rh dGFfcmF0ZSk7CiAKLQkJCWRkYi0+eV9wbGFuZVtwaXBlXVtwbGFuZV0uc3RhcnQgPSBzdGFydDsK LQkJCWRkYi0+eV9wbGFuZVtwaXBlXVtwbGFuZV0uZW5kID0gc3RhcnQgKyB5X3BsYW5lX2Jsb2Nr czsKKwkJCWRkYi0+eV9wbGFuZVtwaXBlXVtpZF0uc3RhcnQgPSBzdGFydDsKKwkJCWRkYi0+eV9w bGFuZVtwaXBlXVtpZF0uZW5kID0gc3RhcnQgKyB5X3BsYW5lX2Jsb2NrczsKIAogCQkJc3RhcnQg Kz0geV9wbGFuZV9ibG9ja3M7CiAJCX0KQEAgLTMxNDYsNzMgKzMxODQsMTYgQEAgc3RhdGljIHZv aWQgc2tsX2NvbXB1dGVfd21fZ2xvYmFsX3BhcmFtZXRlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3dtX3BpcGVfcGFyYW1ldGVycyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJCSAgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0 ZXJzICpwKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWVudW0gcGlw ZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKLQlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQlpbnQgaSA9IDE7IC8qIEluZGV4IGZvciBzcHJp dGUgcGxhbmVzIHN0YXJ0ICovCi0KLQlwLT5hY3RpdmUgPSBpbnRlbF9jcnRjLT5hY3RpdmU7Ci0J aWYgKHAtPmFjdGl2ZSkgewotCQlwLT5waXBlX2h0b3RhbCA9IGludGVsX2NydGMtPmNvbmZpZy0+ YmFzZS5hZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsOwotCQlwLT5waXhlbF9yYXRlID0gc2tsX3Bp cGVfcGl4ZWxfcmF0ZShpbnRlbF9jcnRjLT5jb25maWcpOwotCi0JCWZiID0gY3J0Yy0+cHJpbWFy eS0+c3RhdGUtPmZiOwotCQkvKiBGb3IgcGxhbmFyOiBCcHAgaXMgZm9yIHV2IHBsYW5lLCB5X0Jw cCBpcyBmb3IgeSBwbGFuZSAqLwotCQlpZiAoZmIpIHsKLQkJCXAtPnBsYW5lWzBdLmVuYWJsZWQg PSB0cnVlOwotCQkJcC0+cGxhbmVbMF0uYnl0ZXNfcGVyX3BpeGVsID0gZmItPnBpeGVsX2Zvcm1h dCA9PSBEUk1fRk9STUFUX05WMTIgPwotCQkJCWRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhl bF9mb3JtYXQsIDEpIDoKLQkJCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0 LCAwKTsKLQkJCXAtPnBsYW5lWzBdLnlfYnl0ZXNfcGVyX3BpeGVsID0gZmItPnBpeGVsX2Zvcm1h dCA9PSBEUk1fRk9STUFUX05WMTIgPwotCQkJCWRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhl bF9mb3JtYXQsIDApIDogMDsKLQkJCXAtPnBsYW5lWzBdLnRpbGluZyA9IGZiLT5tb2RpZmllclsw XTsKLQkJfSBlbHNlIHsKLQkJCXAtPnBsYW5lWzBdLmVuYWJsZWQgPSBmYWxzZTsKLQkJCXAtPnBs YW5lWzBdLmJ5dGVzX3Blcl9waXhlbCA9IDA7Ci0JCQlwLT5wbGFuZVswXS55X2J5dGVzX3Blcl9w aXhlbCA9IDA7Ci0JCQlwLT5wbGFuZVswXS50aWxpbmcgPSBEUk1fRk9STUFUX01PRF9OT05FOwot CQl9Ci0JCXAtPnBsYW5lWzBdLmhvcml6X3BpeGVscyA9IGludGVsX2NydGMtPmNvbmZpZy0+cGlw ZV9zcmNfdzsKLQkJcC0+cGxhbmVbMF0udmVydF9waXhlbHMgPSBpbnRlbF9jcnRjLT5jb25maWct PnBpcGVfc3JjX2g7Ci0JCXAtPnBsYW5lWzBdLnJvdGF0aW9uID0gY3J0Yy0+cHJpbWFyeS0+c3Rh dGUtPnJvdGF0aW9uOwotCi0JCWZiID0gY3J0Yy0+Y3Vyc29yLT5zdGF0ZS0+ZmI7Ci0JCXAtPnBs YW5lW1BMQU5FX0NVUlNPUl0ueV9ieXRlc19wZXJfcGl4ZWwgPSAwOwotCQlpZiAoZmIpIHsKLQkJ CXAtPnBsYW5lW1BMQU5FX0NVUlNPUl0uZW5hYmxlZCA9IHRydWU7Ci0JCQlwLT5wbGFuZVtQTEFO RV9DVVJTT1JdLmJ5dGVzX3Blcl9waXhlbCA9IGZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Ci0JCQlw LT5wbGFuZVtQTEFORV9DVVJTT1JdLmhvcml6X3BpeGVscyA9IGNydGMtPmN1cnNvci0+c3RhdGUt PmNydGNfdzsKLQkJCXAtPnBsYW5lW1BMQU5FX0NVUlNPUl0udmVydF9waXhlbHMgPSBjcnRjLT5j dXJzb3ItPnN0YXRlLT5jcnRjX2g7Ci0JCX0gZWxzZSB7Ci0JCQlwLT5wbGFuZVtQTEFORV9DVVJT T1JdLmVuYWJsZWQgPSBmYWxzZTsKLQkJCXAtPnBsYW5lW1BMQU5FX0NVUlNPUl0uYnl0ZXNfcGVy X3BpeGVsID0gMDsKLQkJCXAtPnBsYW5lW1BMQU5FX0NVUlNPUl0uaG9yaXpfcGl4ZWxzID0gNjQ7 Ci0JCQlwLT5wbGFuZVtQTEFORV9DVVJTT1JdLnZlcnRfcGl4ZWxzID0gNjQ7Ci0JCX0KLQl9Ci0K LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2RlX2NvbmZpZy5wbGFuZV9saXN0 LCBoZWFkKSB7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZSk7Ci0KLQkJaWYgKGludGVsX3BsYW5lLT5waXBlID09IHBpcGUgJiYKLQkJCXBs YW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX09WRVJMQVkpCi0JCQlwLT5wbGFuZVtpKytdID0g aW50ZWxfcGxhbmUtPndtOwotCX0KLX0KLQogc3RhdGljIGJvb2wgc2tsX2NvbXB1dGVfcGxhbmVf d20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSBzdHJ1Y3Qg c2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcCwKLQkJCQkgc3RydWN0IGludGVsX3BsYW5lX3dtX3Bh cmFtZXRlcnMgKnBfcGFyYW1zLAorCQkJCSBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRl LAorCQkJCSBzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lLAogCQkJCSB1aW50MTZfdCBk ZGJfYWxsb2NhdGlvbiwKIAkJCQkgaW50IGxldmVsLAogCQkJCSB1aW50MTZfdCAqb3V0X2Jsb2Nr cywgLyogb3V0ICovCiAJCQkJIHVpbnQ4X3QgKm91dF9saW5lcyAvKiBvdXQgKi8pCiB7CisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmaW50ZWxfcGxhbmUtPmJhc2U7CisJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZS0+c3RhdGUtPmZiOwogCXVpbnQzMl90IGxhdGVuY3kgPSBk ZXZfcHJpdi0+d20uc2tsX2xhdGVuY3lbbGV2ZWxdOwogCXVpbnQzMl90IG1ldGhvZDEsIG1ldGhv ZDI7CiAJdWludDMyX3QgcGxhbmVfYnl0ZXNfcGVyX2xpbmUsIHBsYW5lX2Jsb2Nrc19wZXJfbGlu ZTsKQEAgLTMyMjAsMzEgKzMyMDEsMzUgQEAgc3RhdGljIGJvb2wgc2tsX2NvbXB1dGVfcGxhbmVf d20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXVpbnQzMl90IHNl bGVjdGVkX3Jlc3VsdDsKIAl1aW50OF90IGJ5dGVzX3Blcl9waXhlbDsKIAotCWlmIChsYXRlbmN5 ID09IDAgfHwgIXAtPmFjdGl2ZSB8fCAhcF9wYXJhbXMtPmVuYWJsZWQpCisJaWYgKGxhdGVuY3kg PT0gMCB8fCAhY3N0YXRlLT5iYXNlLmFjdGl2ZSB8fCAhZmIpCiAJCXJldHVybiBmYWxzZTsKIAot CWJ5dGVzX3Blcl9waXhlbCA9IHBfcGFyYW1zLT55X2J5dGVzX3Blcl9waXhlbCA/Ci0JCXBfcGFy YW1zLT55X2J5dGVzX3Blcl9waXhlbCA6Ci0JCXBfcGFyYW1zLT5ieXRlc19wZXJfcGl4ZWw7Ci0J bWV0aG9kMSA9IHNrbF93bV9tZXRob2QxKHAtPnBpeGVsX3JhdGUsCisJYnl0ZXNfcGVyX3BpeGVs ID0gKGZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSA/CisJCWRybV9mb3JtYXRf cGxhbmVfY3BwKERSTV9GT1JNQVRfTlYxMiwgMCkgOgorCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChE Uk1fRk9STUFUX05WMTIsIDEpOworCW1ldGhvZDEgPSBza2xfd21fbWV0aG9kMShza2xfcGlwZV9w aXhlbF9yYXRlKGNzdGF0ZSksCiAJCQkJIGJ5dGVzX3Blcl9waXhlbCwKIAkJCQkgbGF0ZW5jeSk7 Ci0JbWV0aG9kMiA9IHNrbF93bV9tZXRob2QyKHAtPnBpeGVsX3JhdGUsCi0JCQkJIHAtPnBpcGVf aHRvdGFsLAotCQkJCSBwX3BhcmFtcy0+aG9yaXpfcGl4ZWxzLAorCW1ldGhvZDIgPSBza2xfd21f bWV0aG9kMihza2xfcGlwZV9waXhlbF9yYXRlKGNzdGF0ZSksCisJCQkJIGNzdGF0ZS0+YmFzZS5h ZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsLAorCQkJCSBjc3RhdGUtPnBpcGVfc3JjX3csCiAJCQkJ IGJ5dGVzX3Blcl9waXhlbCwKLQkJCQkgcF9wYXJhbXMtPnRpbGluZywKKwkJCQkgZmItPm1vZGlm aWVyWzBdLAogCQkJCSBsYXRlbmN5KTsKIAotCXBsYW5lX2J5dGVzX3Blcl9saW5lID0gcF9wYXJh bXMtPmhvcml6X3BpeGVscyAqIGJ5dGVzX3Blcl9waXhlbDsKKwlwbGFuZV9ieXRlc19wZXJfbGlu ZSA9IGNzdGF0ZS0+cGlwZV9zcmNfdyAqIGJ5dGVzX3Blcl9waXhlbDsKIAlwbGFuZV9ibG9ja3Nf cGVyX2xpbmUgPSBESVZfUk9VTkRfVVAocGxhbmVfYnl0ZXNfcGVyX2xpbmUsIDUxMik7CiAKLQlp ZiAocF9wYXJhbXMtPnRpbGluZyA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAotCSAgICBw X3BhcmFtcy0+dGlsaW5nID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkgeworCWlmIChmYi0+ bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKKwkgICAgZmItPm1vZGlm aWVyWzBdID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkgewogCQl1aW50MzJfdCBtaW5fc2Nh bmxpbmVzID0gNDsKIAkJdWludDMyX3QgeV90aWxlX21pbmltdW07Ci0JCWlmIChpbnRlbF9yb3Rh dGlvbl85MF9vcl8yNzAocF9wYXJhbXMtPnJvdGF0aW9uKSkgewotCQkJc3dpdGNoIChwX3BhcmFt cy0+Ynl0ZXNfcGVyX3BpeGVsKSB7CisJCWlmIChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocGxh bmUtPnN0YXRlLT5yb3RhdGlvbikpIHsKKwkJCWludCBicHAgPSAoZmItPnBpeGVsX2Zvcm1hdCA9 PSBEUk1fRk9STUFUX05WMTIpID8KKwkJCQlkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxf Zm9ybWF0LCAxKSA6CisJCQkJZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwg MCk7CisKKwkJCXN3aXRjaCAoYnBwKSB7CiAJCQljYXNlIDE6CiAJCQkJbWluX3NjYW5saW5lcyA9 IDE2OwogCQkJCWJyZWFrOwpAQCAtMzI2OCw4ICszMjUzLDggQEAgc3RhdGljIGJvb2wgc2tsX2Nv bXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAog CXJlc19saW5lcyA9IERJVl9ST1VORF9VUChzZWxlY3RlZF9yZXN1bHQsIHBsYW5lX2Jsb2Nrc19w ZXJfbGluZSk7CiAKIAlpZiAobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSA3KSB7Ci0JCWlmIChwX3Bh cmFtcy0+dGlsaW5nID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8Ci0JCSAgICBwX3BhcmFt cy0+dGlsaW5nID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKKwkJaWYgKGZiLT5tb2RpZmll clswXSA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAorCQkgICAgZmItPm1vZGlmaWVyWzBd ID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKIAkJCXJlc19saW5lcyArPSA0OwogCQllbHNl CiAJCQlyZXNfYmxvY2tzKys7CkBAIC0zMjg2LDg0ICszMjcxLDgwIEBAIHN0YXRpYyBib29sIHNr bF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAogc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfd21fbGV2ZWwoY29uc3Qgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpk ZGIsCi0JCQkJIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwLAotCQkJCSBlbnVtIHBp cGUgcGlwZSwKKwkJCQkgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAkJCQkgaW50 IGxldmVsLAotCQkJCSBpbnQgbnVtX3BsYW5lcywKIAkJCQkgc3RydWN0IHNrbF93bV9sZXZlbCAq cmVzdWx0KQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhjc3RhdGUtPmJhc2Uu Y3J0Yyk7CisJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZTsKIAl1aW50MTZfdCBkZGJf YmxvY2tzOwotCWludCBpOworCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwor CWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFu ZSkgeworCQlpbnQgaSA9IHNrbF93bV9wbGFuZV9pZChpbnRlbF9wbGFuZSk7CiAKLQlmb3IgKGkg PSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7CiAJCWRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5 X3NpemUoJmRkYi0+cGxhbmVbcGlwZV1baV0pOwogCiAJCXJlc3VsdC0+cGxhbmVfZW5baV0gPSBz a2xfY29tcHV0ZV9wbGFuZV93bShkZXZfcHJpdiwKLQkJCQkJCXAsICZwLT5wbGFuZVtpXSwKKwkJ CQkJCWNzdGF0ZSwKKwkJCQkJCWludGVsX3BsYW5lLAogCQkJCQkJZGRiX2Jsb2NrcywKIAkJCQkJ CWxldmVsLAogCQkJCQkJJnJlc3VsdC0+cGxhbmVfcmVzX2JbaV0sCiAJCQkJCQkmcmVzdWx0LT5w bGFuZV9yZXNfbFtpXSk7CiAJfQotCi0JZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgm ZGRiLT5wbGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdKTsKLQlyZXN1bHQtPnBsYW5lX2VuW1BMQU5F X0NVUlNPUl0gPSBza2xfY29tcHV0ZV9wbGFuZV93bShkZXZfcHJpdiwgcCwKLQkJCQkJCSAmcC0+ cGxhbmVbUExBTkVfQ1VSU09SXSwKLQkJCQkJCSBkZGJfYmxvY2tzLCBsZXZlbCwKLQkJCQkJCSAm cmVzdWx0LT5wbGFuZV9yZXNfYltQTEFORV9DVVJTT1JdLAotCQkJCQkJICZyZXN1bHQtPnBsYW5l X3Jlc19sW1BMQU5FX0NVUlNPUl0pOwogfQogCiBzdGF0aWMgdWludDMyX3QKLXNrbF9jb21wdXRl X2xpbmV0aW1lX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IHNrbF9waXBlX3dtX3Bh cmFtZXRlcnMgKnApCitza2xfY29tcHV0ZV9saW5ldGltZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlKQogewotCWlmICghdG9faW50ZWxfY3J0YyhjcnRjKS0+YWN0aXZlKQorCWlm ICghY3N0YXRlLT5iYXNlLmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoV0FSTl9PTihwLT5w aXhlbF9yYXRlID09IDApKQorCWlmIChXQVJOX09OKHNrbF9waXBlX3BpeGVsX3JhdGUoY3N0YXRl KSA9PSAwKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gRElWX1JPVU5EX1VQKDggKiBwLT5waXBl X2h0b3RhbCAqIDEwMDAsIHAtPnBpeGVsX3JhdGUpOworCXJldHVybiBESVZfUk9VTkRfVVAoOCAq IGNzdGF0ZS0+YmFzZS5hZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsICogMTAwMCwKKwkJCSAgICBz a2xfcGlwZV9waXhlbF9yYXRlKGNzdGF0ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBza2xfY29tcHV0 ZV90cmFuc2l0aW9uX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkgICAgICBzdHJ1Y3Qg c2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcGFyYW1zLAorc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVf dHJhbnNpdGlvbl93bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkJCSAgICAg IHN0cnVjdCBza2xfd21fbGV2ZWwgKnRyYW5zX3dtIC8qIG91dCAqLykKIHsKKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBjc3RhdGUtPmJhc2UuY3J0YzsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Ci0JaW50IGk7CisJc3RydWN0IGludGVsX3Bs YW5lICppbnRlbF9wbGFuZTsKIAotCWlmICghcGFyYW1zLT5hY3RpdmUpCisJaWYgKCFjc3RhdGUt PmJhc2UuYWN0aXZlKQogCQlyZXR1cm47CiAKIAkvKiBVbnRpbCB3ZSBrbm93IG1vcmUsIGp1c3Qg ZGlzYWJsZSB0cmFuc2l0aW9uIFdNcyAqLwotCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxh bmVzKGludGVsX2NydGMpOyBpKyspCisJZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhjcnRj LT5kZXYsIGludGVsX2NydGMsIGludGVsX3BsYW5lKSB7CisJCWludCBpID0gc2tsX3dtX3BsYW5l X2lkKGludGVsX3BsYW5lKTsKKwogCQl0cmFuc193bS0+cGxhbmVfZW5baV0gPSBmYWxzZTsKLQl0 cmFuc193bS0+cGxhbmVfZW5bUExBTkVfQ1VSU09SXSA9IGZhbHNlOworCX0KIH0KIAotc3RhdGlj IHZvaWQgc2tsX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCitzdGF0aWMg dm9pZCBza2xfY29tcHV0ZV9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUs CiAJCQkJc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAotCQkJCXN0cnVjdCBza2xfcGlw ZV93bV9wYXJhbWV0ZXJzICpwYXJhbXMsCiAJCQkJc3RydWN0IHNrbF9waXBlX3dtICpwaXBlX3dt KQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNzdGF0ZS0+YmFzZS5jcnRjLT5kZXY7CiAJY29uc3Qgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJaW50IGxldmVsLCBtYXhf bGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldik7CiAKIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwg PD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7Ci0JCXNrbF9jb21wdXRlX3dtX2xldmVsKGRldl9wcml2 LCBkZGIsIHBhcmFtcywgaW50ZWxfY3J0Yy0+cGlwZSwKLQkJCQkgICAgIGxldmVsLCBpbnRlbF9u dW1fcGxhbmVzKGludGVsX2NydGMpLAotCQkJCSAgICAgJnBpcGVfd20tPndtW2xldmVsXSk7CisJ CXNrbF9jb21wdXRlX3dtX2xldmVsKGRldl9wcml2LCBkZGIsIGNzdGF0ZSwKKwkJCQkgICAgIGxl dmVsLCAmcGlwZV93bS0+d21bbGV2ZWxdKTsKIAl9Ci0JcGlwZV93bS0+bGluZXRpbWUgPSBza2xf Y29tcHV0ZV9saW5ldGltZV93bShjcnRjLCBwYXJhbXMpOworCXBpcGVfd20tPmxpbmV0aW1lID0g c2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY3N0YXRlKTsKIAotCXNrbF9jb21wdXRlX3RyYW5zaXRp b25fd20oY3J0YywgcGFyYW1zLCAmcGlwZV93bS0+dHJhbnNfd20pOworCXNrbF9jb21wdXRlX3Ry YW5zaXRpb25fd20oY3N0YXRlLCAmcGlwZV93bS0+dHJhbnNfd20pOwogfQogCiBzdGF0aWMgdm9p ZCBza2xfY29tcHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAg c3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnAsCiAJCQkJICAgc3RydWN0IHNrbF9waXBl X3dtICpwX3dtLAogCQkJCSAgIHN0cnVjdCBza2xfd21fdmFsdWVzICpyLAogCQkJCSAgIHN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjKQpAQCAtMzYwNywxNiArMzU4OCwxNSBAQCBzdGF0aWMg dm9pZCBza2xfZmx1c2hfd21fdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIH0KIAogc3RhdGljIGJvb2wgc2tsX3VwZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKLQkJCSAgICAgICBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAqcGFyYW1zLAog CQkJICAgICAgIHN0cnVjdCBpbnRlbF93bV9jb25maWcgKmNvbmZpZywKIAkJCSAgICAgICBzdHJ1 Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsIC8qIG91dCAqLwogCQkJICAgICAgIHN0cnVjdCBz a2xfcGlwZV93bSAqcGlwZV93bSAvKiBvdXQgKi8pCiB7CiAJc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIAotCXNrbF9jb21w dXRlX3dtX3BpcGVfcGFyYW1ldGVycyhjcnRjLCBwYXJhbXMpOwotCXNrbF9hbGxvY2F0ZV9waXBl X2RkYihjcnRjLCBjb25maWcsIHBhcmFtcywgZGRiKTsKLQlza2xfY29tcHV0ZV9waXBlX3dtKGNy dGMsIGRkYiwgcGFyYW1zLCBwaXBlX3dtKTsKKwlza2xfYWxsb2NhdGVfcGlwZV9kZGIoY3N0YXRl LCBjb25maWcsIGRkYik7CisJc2tsX2NvbXB1dGVfcGlwZV93bShjc3RhdGUsIGRkYiwgcGlwZV93 bSk7CiAKIAlpZiAoIW1lbWNtcCgmaW50ZWxfY3J0Yy0+d20uc2tsX2FjdGl2ZSwgcGlwZV93bSwg c2l6ZW9mKCpwaXBlX3dtKSkpCiAJCXJldHVybiBmYWxzZTsKQEAgLTM2NDksNyArMzYyOSw2IEBA IHN0YXRpYyB2b2lkIHNrbF91cGRhdGVfb3RoZXJfcGlwZV93bShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZWxfY3J0YywgJmRldi0+bW9kZV9j b25maWcuY3J0Y19saXN0LAogCQkJCWJhc2UuaGVhZCkgewotCQlzdHJ1Y3Qgc2tsX3BpcGVfd21f cGFyYW1ldGVycyBwYXJhbXMgPSB7fTsKIAkJc3RydWN0IHNrbF9waXBlX3dtIHBpcGVfd20gPSB7 fTsKIAkJYm9vbCB3bV9jaGFuZ2VkOwogCkBAIC0zNjU5LDggKzM2MzgsNyBAQCBzdGF0aWMgdm9p ZCBza2xfdXBkYXRlX290aGVyX3BpcGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJaWYg KCFpbnRlbF9jcnRjLT5hY3RpdmUpCiAJCQljb250aW51ZTsKIAotCQl3bV9jaGFuZ2VkID0gc2ts X3VwZGF0ZV9waXBlX3dtKCZpbnRlbF9jcnRjLT5iYXNlLAotCQkJCQkJJnBhcmFtcywgY29uZmln LAorCQl3bV9jaGFuZ2VkID0gc2tsX3VwZGF0ZV9waXBlX3dtKCZpbnRlbF9jcnRjLT5iYXNlLCBj b25maWcsCiAJCQkJCQkmci0+ZGRiLCAmcGlwZV93bSk7CiAKIAkJLyoKQEAgLTM2NzAsNyArMzY0 OCw3IEBAIHN0YXRpYyB2b2lkIHNrbF91cGRhdGVfb3RoZXJfcGlwZV93bShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAogCQkgKi8KIAkJV0FSTl9PTighd21fY2hhbmdlZCk7CiAKLQkJc2tsX2NvbXB1 dGVfd21fcmVzdWx0cyhkZXYsICZwYXJhbXMsICZwaXBlX3dtLCByLCBpbnRlbF9jcnRjKTsKKwkJ c2tsX2NvbXB1dGVfd21fcmVzdWx0cyhkZXYsICZwaXBlX3dtLCByLCBpbnRlbF9jcnRjKTsKIAkJ ci0+ZGlydHlbaW50ZWxfY3J0Yy0+cGlwZV0gPSB0cnVlOwogCX0KIH0KQEAgLTM2ODAsNyArMzY1 OCw2IEBAIHN0YXRpYyB2b2lkIHNrbF91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQog CXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHNrbF9waXBlX3dtX3Bh cmFtZXRlcnMgcGFyYW1zID0ge307CiAJc3RydWN0IHNrbF93bV92YWx1ZXMgKnJlc3VsdHMgPSAm ZGV2X3ByaXYtPndtLnNrbF9yZXN1bHRzOwogCXN0cnVjdCBza2xfcGlwZV93bSBwaXBlX3dtID0g e307CiAJc3RydWN0IGludGVsX3dtX2NvbmZpZyBjb25maWcgPSB7fTsKQEAgLTM2ODksMTEgKzM2 NjYsMTAgQEAgc3RhdGljIHZvaWQgc2tsX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiAKIAlza2xfY29tcHV0ZV93bV9nbG9iYWxfcGFyYW1ldGVycyhkZXYsICZjb25maWcpOwogCi0J aWYgKCFza2xfdXBkYXRlX3BpcGVfd20oY3J0YywgJnBhcmFtcywgJmNvbmZpZywKLQkJCQkmcmVz dWx0cy0+ZGRiLCAmcGlwZV93bSkpCisJaWYgKCFza2xfdXBkYXRlX3BpcGVfd20oY3J0YywgJmNv bmZpZywgJnJlc3VsdHMtPmRkYiwgJnBpcGVfd20pKQogCQlyZXR1cm47CiAKLQlza2xfY29tcHV0 ZV93bV9yZXN1bHRzKGRldiwgJnBhcmFtcywgJnBpcGVfd20sIHJlc3VsdHMsIGludGVsX2NydGMp OworCXNrbF9jb21wdXRlX3dtX3Jlc3VsdHMoZGV2LCAmcGlwZV93bSwgcmVzdWx0cywgaW50ZWxf Y3J0Yyk7CiAJcmVzdWx0cy0+ZGlydHlbaW50ZWxfY3J0Yy0+cGlwZV0gPSB0cnVlOwogCiAJc2ts X3VwZGF0ZV9vdGhlcl9waXBlX3dtKGRldiwgY3J0YywgJmNvbmZpZywgcmVzdWx0cyk7Ci0tIAoy LjEuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK