From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH v2 2/2] drm/i915: Switch to level-based DDB allocation algorithm (v3) Date: Mon, 10 Dec 2018 17:05:43 -0800 Message-ID: <20181211010543.13309-2-matthew.d.roper@intel.com> References: <20181211010543.13309-1-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id BDEFB89E41 for ; Tue, 11 Dec 2018 01:05:51 +0000 (UTC) In-Reply-To: <20181211010543.13309-1-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 VGhlIEREQiBhbGxvY2F0aW9uIGFsZ29yaXRobSBjdXJyZW50bHkgdXNlZCBieSB0aGUgZHJpdmVy IGdyYW50cyBlYWNoCnBsYW5lIGEgdmVyeSBzbWFsbCBtaW5pbXVtIGFsbG9jYXRpb24gb2YgRERC IGJsb2NrcyBhbmQgdGhlbiBkaXZpZXMgdXAKYWxsIG9mIHRoZSByZW1haW5pbmcgYmxvY2tzIGJh c2VkIG9uIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBkYXRhCnJhdGUgdGhhdCB0aGUgcGxh bmUgbWFrZXMgdXAuICBJdCB0dXJucyBvdXQgdGhhdCB0aGlzIHByb3BvcnRpb25hbAphbGxvY2F0 aW9uIGFwcHJvYWNoIGlzIG92ZXJseS1nZW5lcm91cyB3aXRoIHRoZSBsYXJnZXIgcGxhbmVzIGFu ZCBjYW4KbGVhdmUgdmVyeSBzbWFsbCBwbGFuZXMgd3Rob3V0IGEgYmlnIGVub3VnaCBhbGxvY2F0 aW9uIHRvIGV2ZW4gaGl0IHRoZWlyCmxldmVsIDAgd2F0ZXJtYXJrIHJlcXVpcmVtZW50cyAoZXNw ZWNpYWxseSBvbiBBUEwsIHdoaWNoIGhhcyBhIHNtYWxsZXIKRERCIGluIGdlbmVyYWwgdGhhbiBv dGhlciBnZW45IHBsYXRmb3JtcykuICBPciB0aGVyZSBjYW4gYmUgc2l0dWF0aW9ucwp3aGVyZSB0 aGUgc21hbGxlc3QgcGxhbmVzIGhpdCBhIGxvd2VyIHdhdGVybWFyayBsZXZlbCB0aGFuIHRoZXkg c2hvdWxkCmhhdmUgYmVlbiBhYmxlIHRvIGhpdCB3aXRoIGEgbW9yZSBlcXVpdGFibGUgZGl2aXNp b24gb2YgRERCIGJsb2NrcywgdGh1cwpsaW1pdGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2xlZXAg c3RhdGUgdGhhdCBjYW4gYmUgYWNoaWV2ZWQuCgpUaGUgYnNwZWMgbm93IGRlc2NyaWJlcyBhbiBh bHRlcm5hdGUgYWxnb3JpdGhtIHRoYXQgY2FuIGJlIHVzZWQgdG8Kb3ZlcmNvbWUgdGhlc2UgdHlw ZXMgb2YgaXNzdWVzLiAgV2l0aCB0aGUgbmV3IGFsZ29yaXRobSwgd2UgY2FsY3VsYXRlCmFsbCBw bGFuZSB3YXRlcm1hcmsgdmFsdWVzIGZvciBhbGwgd20gbGV2ZWxzIGZpcnN0LCB0aGVuIGdvIGJh Y2sgYW5kCnBhcnRpdGlvbiBhIHBpcGUncyBEREIgc3BhY2Ugc2Vjb25kLiAgVGhlIEREQiBhbGxv Y2F0aW9uIHdpbGwgY2FsY3VsYXRlCndoYXQgdGhlIGhpZ2hlc3Qgd2F0ZXJtYXJrIGxldmVsIHRo YXQgY2FuIGJlIGFjaGlldmVkIG9uICphbGwqIGFjdGl2ZQpwbGFuZXMsIGFuZCB0aGVuIGdyYW50 IHRoZSBibG9ja3MgbmVjZXNzYXJ5IHRvIGhpdCB0aGF0IGxldmVsIHRvIGVhY2gKcGxhbmUuICBB bnkgcmVtYWluaW5nIGJsb2NrcyBhcmUgdGhlbiBkaXZpZGVkIHVwIHByb3BvcnRpb25hbGx5CmFj Y29yZGluZyB0byBkYXRhIHJhdGUsIHNpbWlsYXIgdG8gdGhlIG9sZCBhbGdvcml0aG0uCgpUaGVy ZSB3YXMgYSBwcmV2aW91cyBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGlzIGFsZ29yaXRobSBhIGNv dXBsZSB5ZWFycwphZ28gaW4gYmI5ZDg1ZjZlOWQgKCJkcm0vaTkxNS9za2w6IE5ldyBkZGIgYWxs b2NhdGlvbiBhbGdvcml0aG0iKSwgYnV0CnNvbWUgcmVncmVzc2lvbnMgd2VyZSByZXBvcnRlZCwg dGhlIHBhdGNoIHdhcyByZXZlcnRlZCwgYW5kIG5vYm9keQpldmVyIGdvdCBhcm91bmQgdG8gZmln dXJpbmcgb3V0IGV4YWN0bHkgd2hlcmUgdGhlIGJ1ZyB3YXMgaW4gdGhhdAp2ZXJzaW9uLiAgT3Vy IHdhdGVybWFyayBjb2RlIGhhcyBldm9sdmVkIHNpZ25pZmljYW50bHkgaW4gdGhlIG1lYW50aW1l LApidXQgd2UncmUgc3RpbGwgZ2V0dGluZyBidWcgcmVwb3J0cyBjYXVzZWQgYnkgdGhlIHVuZmFp ciBwcm9wb3J0aW9uYWwKYWxnb3JpdGhtLCBzbyBsZXQncyBnaXZlIHRoaXMgYW5vdGhlciBzaG90 LgoKdjI6CiAtIE1ha2Ugc3VyZSBjdXJzb3IgYWxsb2NhdGlvbiBzdGF5cyBjb25zdGFudCBhbmQg Zml4ZWQgYXQgdGhlIGVuZCBvZgogICB0aGUgcGlwZSBhbGxvY2F0aW9uLgogLSBGaXggc29tZSB3 YXRlcm1hcmsgbGV2ZWwgaXRlcmF0b3JzIHRoYXQgd2VyZW4ndCBoYW5kbGluZyB0aGUgbWF4CiAg IGxldmVsLgoKdjM6CiAtIEVuc3VyZSB3ZSBkb24ndCBsZWF2ZSBhbnkgRERCIGJsb2NrcyB1bnVz ZWQgYnkgdXNpbmcgRElWX1JPVU5EX1VQK21pbgogICB0byBjYWxjdWxhdGUgdGhlIGV4dHJhIGJs b2NrcyBmb3IgZWFjaCBwbGFuZS4gIChWaWxsZSkKIC0gUmVwbGFjZSBhIHdoaWxlKCkgbG9vcCB3 aXRoIGEgZm9yKCkgbG9vcCB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aAogICBzdXJyb3VuZGlu ZyBjb2RlLiAgKFZpbGxlKQogLSBDbGVhbiB1bmF0dGFpbmFibGUgd2F0ZXJtYXJrIGxldmVscyB3 aXRoIG1lbXNldCByYXRoZXIgdGhhbiBkaXJlY3RseQogICBjbGVhcmluZyB0aGUgbWVtYmVyIGZp ZWxkcy4gIEFsc28gZG8gdGhlIHNhbWUgZm9yIHRoZSB0cmFuc2l0aW9uCiAgIHdhdGVybWFyayB2 YWx1ZXMgaWYgdGhleSBjYW4ndCBiZSBhY2hpZXZlZC4gIChWaWxsZSkKIC0gRHJvcCBtaW5fZGlz cF9idWZfbmVlZGVkIGNhbGN1bGF0aW9ucyBpbiBza2xfY29tcHV0ZV9wbGFuZV93bSgpIHNpbmNl CiAgIHRoZSByZXN1bHRzIGFyZSBubyBsb25nZXIgbmVlZGVkIG9yIHVzZWQuICAoVmlsbGUpCiAt IERyb3Agc2tsX2xhdGVuY3lbMF0gIT0gMCBzYW5pdHkgY2hlY2s7IGJvdGggd2F0ZXJtYXJrIG1l dGhvZHMgYWxyZWFkeQogICBhY2NvdW50IGZvciBhbiBpbnZhbGlkIDAgbGF0ZW5jeSBieSByZXR1 cm5pbmcgRlBfMTZfMTZfTUFYLiAgKFZpbGxlKQoKQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+CkJ1Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0 b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU0NTgKU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8 bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jIHwgMzc2ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMjQ0IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCmluZGV4IGJmOTcwY2Y3YjhhNS4uZjVmODY3NTc0NTdkIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKQEAgLTQzMDEsMTAyICs0MzAxLDYgQEAgaWNsX2dldF90b3RhbF9y ZWxhdGl2ZV9kYXRhX3JhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NzdGF0ZSwK IAlyZXR1cm4gdG90YWxfZGF0YV9yYXRlOwogfQogCi1zdGF0aWMgdWludDE2X3QKLXNrbF9kZGJf bWluX2FsbG9jKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsIGNv bnN0IGludCBwbGFuZSkKLXsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5iYXNlLmZiOwotCXVpbnQzMl90IHNyY193LCBzcmNfaDsKLQl1aW50MzJfdCBtaW5fc2Nh bmxpbmVzID0gODsKLQl1aW50OF90IHBsYW5lX2JwcDsKLQotCWlmIChXQVJOX09OKCFmYikpCi0J CXJldHVybiAwOwotCi0JLyogRm9yIHBhY2tlZCBmb3JtYXRzLCBhbmQgdXYtcGxhbmUsIHJldHVy biAwICovCi0JaWYgKHBsYW5lID09IDEgJiYgZmItPmZvcm1hdC0+Zm9ybWF0ICE9IERSTV9GT1JN QVRfTlYxMikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBGb3IgTm9uIFktdGlsZSByZXR1cm4gOC1ibG9j a3MgKi8KLQlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCi0J ICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgJiYKLQkgICAgZmIt Pm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyAmJgotCSAgICBmYi0+bW9k aWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykKLQkJcmV0dXJuIDg7Ci0KLQkv KgotCSAqIFNyYyBjb29yZGluYXRlcyBhcmUgYWxyZWFkeSByb3RhdGVkIGJ5IDI3MCBkZWdyZWVz IGZvcgotCSAqIHRoZSA5MC8yNzAgZGVncmVlIHBsYW5lIHJvdGF0aW9uIGNhc2VzICh0byBtYXRj aCB0aGUKLQkgKiBHVFQgbWFwcGluZyksIGhlbmNlIG5vIG5lZWQgdG8gYWNjb3VudCBmb3Igcm90 YXRpb24gaGVyZS4KLQkgKi8KLQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ YmFzZS5zcmMpID4+IDE2OwotCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+ YmFzZS5zcmMpID4+IDE2OwotCi0JLyogSGFsdmUgVVYgcGxhbmUgd2lkdGggYW5kIGhlaWdodCBm b3IgTlYxMiAqLwotCWlmIChwbGFuZSA9PSAxKSB7Ci0JCXNyY193IC89IDI7Ci0JCXNyY19oIC89 IDI7Ci0JfQotCi0JcGxhbmVfYnBwID0gZmItPmZvcm1hdC0+Y3BwW3BsYW5lXTsKLQotCWlmIChk cm1fcm90YXRpb25fOTBfb3JfMjcwKHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uKSkgewotCQlz d2l0Y2ggKHBsYW5lX2JwcCkgewotCQljYXNlIDE6Ci0JCQltaW5fc2NhbmxpbmVzID0gMzI7Ci0J CQlicmVhazsKLQkJY2FzZSAyOgotCQkJbWluX3NjYW5saW5lcyA9IDE2OwotCQkJYnJlYWs7Ci0J CWNhc2UgNDoKLQkJCW1pbl9zY2FubGluZXMgPSA4OwotCQkJYnJlYWs7Ci0JCWNhc2UgODoKLQkJ CW1pbl9zY2FubGluZXMgPSA0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOKDEsICJV bnN1cHBvcnRlZCBwaXhlbCBkZXB0aCAldSBmb3Igcm90YXRpb24iLAotCQkJICAgICBwbGFuZV9i cHApOwotCQkJbWluX3NjYW5saW5lcyA9IDMyOwotCQl9Ci0JfQotCi0JcmV0dXJuIERJVl9ST1VO RF9VUCgoNCAqIHNyY193ICogcGxhbmVfYnBwKSwgNTEyKSAqIG1pbl9zY2FubGluZXMvNCArIDM7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfZGRiX2NhbGNfbWluKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsIGludCBudW1fYWN0aXZlLAotCQkgdWludDE2X3QgKm1pbmltdW0s IHVpbnQxNl90ICp1dl9taW5pbXVtKQotewotCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnBzdGF0ZTsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKLQotCWRybV9hdG9taWNfY3J0Y19z dGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZShwbGFuZSwgcHN0YXRlLCAmY3N0YXRlLT5iYXNlKSB7 Ci0JCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSB0b19pbnRlbF9wbGFuZShwbGFuZSktPmlkOwot CQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVf c3RhdGUocHN0YXRlKTsKLQotCQlpZiAocGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SKQotCQkJY29u dGludWU7Ci0KLQkJLyogc2xhdmUgcGxhbmUgbXVzdCBiZSBpbnZpc2libGUgYW5kIGNhbGN1bGF0 ZWQgZnJvbSBtYXN0ZXIgKi8KLQkJaWYgKCFwc3RhdGUtPnZpc2libGUgfHwgV0FSTl9PTihwbGFu ZV9zdGF0ZS0+c2xhdmUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFwbGFuZV9zdGF0ZS0+bGlu a2VkX3BsYW5lKSB7Ci0JCQltaW5pbXVtW3BsYW5lX2lkXSA9IHNrbF9kZGJfbWluX2FsbG9jKHBs YW5lX3N0YXRlLCAwKTsKLQkJCXV2X21pbmltdW1bcGxhbmVfaWRdID0KLQkJCQlza2xfZGRiX21p bl9hbGxvYyhwbGFuZV9zdGF0ZSwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQllbnVtIHBsYW5lX2lkIHlf cGxhbmVfaWQgPQotCQkJCXBsYW5lX3N0YXRlLT5saW5rZWRfcGxhbmUtPmlkOwotCi0JCQltaW5p bXVtW3lfcGxhbmVfaWRdID0gc2tsX2RkYl9taW5fYWxsb2MocGxhbmVfc3RhdGUsIDApOwotCQkJ bWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwbGFuZV9zdGF0ZSwgMSk7Ci0J CX0KLQl9Ci0KLQltaW5pbXVtW1BMQU5FX0NVUlNPUl0gPSBza2xfY3Vyc29yX2FsbG9jYXRpb24o bnVtX2FjdGl2ZSk7Ci19Ci0KIHN0YXRpYyBpbnQKIHNrbF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxv Y2F0aW9uICpkZGIgLyogb3V0ICovKQpAQCAtNDQwNiwxNSArNDMxMCwxNyBAQCBza2xfYWxsb2Nh dGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmRldik7CiAJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCXN0cnVjdCBza2xf ZGRiX2VudHJ5ICphbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5kZGI7Ci0JdWludDE2X3QgYWxsb2Nf c2l6ZSwgc3RhcnQ7Ci0JdWludDE2X3QgbWluaW11bVtJOTE1X01BWF9QTEFORVNdID0ge307Ci0J dWludDE2X3QgdXZfbWluaW11bVtJOTE1X01BWF9QTEFORVNdID0ge307CisJc3RydWN0IHNrbF9w bGFuZV93bSAqd207CisJdWludDE2X3QgYWxsb2Nfc2l6ZSwgc3RhcnQgPSAwOworCXVpbnQxNl90 IHRvdGFsW0k5MTVfTUFYX1BMQU5FU10gPSB7fTsKKwl1aW50MTZfdCB1dl90b3RhbFtJOTE1X01B WF9QTEFORVNdID0ge307CiAJdTY0IHRvdGFsX2RhdGFfcmF0ZTsKIAllbnVtIHBsYW5lX2lkIHBs YW5lX2lkOwogCWludCBudW1fYWN0aXZlOwogCXU2NCBwbGFuZV9kYXRhX3JhdGVbSTkxNV9NQVhf UExBTkVTXSA9IHt9OwogCXU2NCB1dl9wbGFuZV9kYXRhX3JhdGVbSTkxNV9NQVhfUExBTkVTXSA9 IHt9OwotCXVpbnQxNl90IHRvdGFsX21pbl9ibG9ja3MgPSAwOworCXVpbnQxNl90IGJsb2NrcyA9 IDA7CisJaW50IGxldmVsOwogCiAJLyogQ2xlYXIgdGhlIHBhcnRpdGlvbmluZyBmb3IgZGlzYWJs ZWQgcGxhbmVzLiAqLwogCW1lbXNldChjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeSwgMCwgc2l6 ZW9mKGNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95KSk7CkBAIC00NDQ0LDgxICs0MzUwLDEyNSBA QCBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwK IAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXNrbF9kZGJfY2FsY19taW4o Y3N0YXRlLCBudW1fYWN0aXZlLCBtaW5pbXVtLCB1dl9taW5pbXVtKTsKKwkvKiBBbGxvY2F0ZSBm aXhlZCBudW1iZXIgb2YgYmxvY2tzIGZvciBjdXJzb3IuICovCisJdG90YWxbUExBTkVfQ1VSU09S XSA9IHNrbF9jdXJzb3JfYWxsb2NhdGlvbihudW1fYWN0aXZlKTsKKwlhbGxvY19zaXplIC09IHRv dGFsW1BMQU5FX0NVUlNPUl07CisJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbUExBTkVfQ1VS U09SXS5zdGFydCA9CisJCWFsbG9jLT5lbmQgLSB0b3RhbFtQTEFORV9DVVJTT1JdOworCWNzdGF0 ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKKwor CWlmICh0b3RhbF9kYXRhX3JhdGUgPT0gMCkKKwkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIDEuIEFs bG9jYXRlIHRoZSBtaW5pbnVtIHJlcXVpcmVkIGJsb2NrcyBmb3IgZWFjaCBhY3RpdmUgcGxhbmUK LQkgKiBhbmQgYWxsb2NhdGUgdGhlIGN1cnNvciwgaXQgZG9lc24ndCByZXF1aXJlIGV4dHJhIGFs bG9jYXRpb24KLQkgKiBwcm9wb3J0aW9uYWwgdG8gdGhlIGRhdGEgcmF0ZS4KKwkgKiBGaW5kIHRo ZSBoaWdoZXN0IHdhdGVybWFyayBsZXZlbCBmb3Igd2hpY2ggd2UgY2FuIHNhdGlzZnkgdGhlIGJs b2NrCisJICogcmVxdWlyZW1lbnQgb2YgYWN0aXZlIHBsYW5lcy4KIAkgKi8KKwlmb3IgKGxldmVs ID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7IGxldmVsID49IDA7IGxldmVsLS0pIHsKKwkJ Zm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgeworCQkJaWYg KHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKKwkJCQljb250aW51ZTsKIAotCWZvcl9lYWNoX3Bs YW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKLQkJdG90YWxfbWluX2Jsb2Nr cyArPSBtaW5pbXVtW3BsYW5lX2lkXTsKLQkJdG90YWxfbWluX2Jsb2NrcyArPSB1dl9taW5pbXVt W3BsYW5lX2lkXTsKKwkJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5l X2lkXTsKKwkJCWJsb2NrcyArPSB3bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iOworCQkJYmxvY2tz ICs9IHdtLT51dl93bVtsZXZlbF0ucGxhbmVfcmVzX2I7CisJCX0KKworCQlpZiAoYmxvY2tzIDwg YWxsb2Nfc2l6ZSkgeworCQkJYWxsb2Nfc2l6ZSAtPSBibG9ja3M7CisJCQlicmVhazsKKwkJfQog CX0KIAotCWlmICh0b3RhbF9taW5fYmxvY2tzID4gYWxsb2Nfc2l6ZSkgeworCWlmIChsZXZlbCA8 IDApIHsKIAkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3BsYXkgY29uZmlndXJhdGlvbiBl eGNlZWRzIHN5c3RlbSBEREIgbGltaXRhdGlvbnMiKTsKLQkJRFJNX0RFQlVHX0tNUygibWluaW11 bSByZXF1aXJlZCAlZC8lZFxuIiwgdG90YWxfbWluX2Jsb2NrcywKLQkJCQkJCQlhbGxvY19zaXpl KTsKKwkJRFJNX0RFQlVHX0tNUygibWluaW11bSByZXF1aXJlZCAlZC8lZFxuIiwgYmxvY2tzLAor CQkJICAgICAgYWxsb2Nfc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWFsbG9jX3Np emUgLT0gdG90YWxfbWluX2Jsb2NrczsKLQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFO RV9DVVJTT1JdLnN0YXJ0ID0gYWxsb2MtPmVuZCAtIG1pbmltdW1bUExBTkVfQ1VSU09SXTsKLQlj c3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLmVuZCA9IGFsbG9jLT5lbmQ7 Ci0KIAkvKgotCSAqIDIuIERpc3RyaWJ1dGUgdGhlIHJlbWFpbmluZyBzcGFjZSBpbiBwcm9wb3J0 aW9uIHRvIHRoZSBhbW91bnQgb2YKLQkgKiBkYXRhIGVhY2ggcGxhbmUgbmVlZHMgdG8gZmV0Y2gg ZnJvbSBtZW1vcnkuCi0JICoKLQkgKiBGSVhNRTogd2UgbWF5IG5vdCBhbGxvY2F0ZSBldmVyeSBz aW5nbGUgYmxvY2sgaGVyZS4KKwkgKiBHcmFudCBlYWNoIHBsYW5lIHRoZSBibG9ja3MgaXQgcmVx dWlyZXMgYXQgdGhlIGhpZ2hlc3QgYWNoaWV2YWJsZQorCSAqIHdhdGVybWFyayBsZXZlbCwgcGx1 cyBhbiBleHRyYSBzaGFyZSBvZiB0aGUgbGVmdG92ZXIgYmxvY2tzCisJICogcHJvcG9ydGlvbmFs IHRvIGl0cyByZWxhdGl2ZSBkYXRhIHJhdGUuCiAJICovCi0JaWYgKHRvdGFsX2RhdGFfcmF0ZSA9 PSAwKQotCQlyZXR1cm4gMDsKLQotCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0OwogCWZvcl9lYWNoX3Bs YW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKLQkJdTY0IGRhdGFfcmF0ZSwg dXZfZGF0YV9yYXRlOwotCQl1aW50MTZfdCBwbGFuZV9ibG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsK KwkJdTY0IHJhdGU7CisJCXUxNiBleHRyYTsKIAogCQlpZiAocGxhbmVfaWQgPT0gUExBTkVfQ1VS U09SKQogCQkJY29udGludWU7CisJCWlmIChhbGxvY19zaXplID09IDApCisJCQljb250aW51ZTsK IAotCQlkYXRhX3JhdGUgPSBwbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQl3bSA9ICZjc3Rh dGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CiAKLQkJLyoKLQkJICogYWxsb2Nh dGlvbiBmb3IgKHBhY2tlZCBmb3JtYXRzKSBvciAodXYtcGxhbmUgcGFydCBvZiBwbGFuYXIgZm9y bWF0KToKLQkJICogcHJvbW90ZSB0aGUgZXhwcmVzc2lvbiB0byA2NCBiaXRzIHRvIGF2b2lkIG92 ZXJmbG93aW5nLCB0aGUKLQkJICogcmVzdWx0IGlzIDwgYXZhaWxhYmxlIGFzIGRhdGFfcmF0ZSAv IHRvdGFsX2RhdGFfcmF0ZSA8IDEKLQkJICovCi0JCXBsYW5lX2Jsb2NrcyA9IG1pbmltdW1bcGxh bmVfaWRdOwotCQlwbGFuZV9ibG9ja3MgKz0gZGl2NjRfdTY0KGFsbG9jX3NpemUgKiBkYXRhX3Jh dGUsIHRvdGFsX2RhdGFfcmF0ZSk7CisJCXJhdGUgPSBwbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRd OworCQlleHRyYSA9IG1pbl90KHUxNiwgYWxsb2Nfc2l6ZSwKKwkJCSAgICAgIERJVl9ST1VORF9V UChhbGxvY19zaXplICogcmF0ZSwgdG90YWxfZGF0YV9yYXRlKSk7CisJCXRvdGFsW3BsYW5lX2lk XSA9IHdtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2IgKyBleHRyYTsKKwkJYWxsb2Nfc2l6ZSAtPSBl eHRyYTsKKwkJdG90YWxfZGF0YV9yYXRlIC09IHJhdGU7CiAKLQkJLyogTGVhdmUgZGlzYWJsZWQg cGxhbmVzIGF0ICgwLDApICovCi0JCWlmIChkYXRhX3JhdGUpIHsKLQkJCWNzdGF0ZS0+d20uc2ts LnBsYW5lX2RkYl95W3BsYW5lX2lkXS5zdGFydCA9IHN0YXJ0OwotCQkJY3N0YXRlLT53bS5za2wu cGxhbmVfZGRiX3lbcGxhbmVfaWRdLmVuZCA9IHN0YXJ0ICsgcGxhbmVfYmxvY2tzOwotCQl9CisJ CWlmIChhbGxvY19zaXplID09IDApCisJCQljb250aW51ZTsKIAotCQlzdGFydCArPSBwbGFuZV9i bG9ja3M7CisJCXJhdGUgPSB1dl9wbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQlleHRyYSA9 IG1pbl90KHUxNiwgYWxsb2Nfc2l6ZSwKKwkJCSAgICAgIERJVl9ST1VORF9VUChhbGxvY19zaXpl ICogcmF0ZSwgdG90YWxfZGF0YV9yYXRlKSk7CisJCXV2X3RvdGFsW3BsYW5lX2lkXSA9IHdtLT51 dl93bVtsZXZlbF0ucGxhbmVfcmVzX2IgKyBleHRyYTsKKwkJYWxsb2Nfc2l6ZSAtPSBleHRyYTsK KwkJdG90YWxfZGF0YV9yYXRlIC09IHJhdGU7CisJfQorCVdBUk5fT04oYWxsb2Nfc2l6ZSAhPSAw IHx8IHRvdGFsX2RhdGFfcmF0ZSAhPSAwKTsKIAotCQkvKiBBbGxvY2F0ZSBEREIgZm9yIFVWIHBs YW5lIGZvciBwbGFuYXIgZm9ybWF0L05WMTIgKi8KLQkJdXZfZGF0YV9yYXRlID0gdXZfcGxhbmVf ZGF0YV9yYXRlW3BsYW5lX2lkXTsKKwkvKiBTZXQgdGhlIGFjdHVhbCBEREIgc3RhcnQvZW5kIHBv aW50cyBmb3IgZWFjaCBwbGFuZSAqLworCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0OworCWZvcl9lYWNo X3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKKwkJc3RydWN0IHNrbF9k ZGJfZW50cnkgKnBsYW5lX2FsbG9jLCAqdXZfcGxhbmVfYWxsb2M7CiAKLQkJdXZfcGxhbmVfYmxv Y2tzID0gdXZfbWluaW11bVtwbGFuZV9pZF07Ci0JCXV2X3BsYW5lX2Jsb2NrcyArPSBkaXY2NF91 NjQoYWxsb2Nfc2l6ZSAqIHV2X2RhdGFfcmF0ZSwgdG90YWxfZGF0YV9yYXRlKTsKKwkJaWYgKHBs YW5lX2lkID09IFBMQU5FX0NVUlNPUikKKwkJCWNvbnRpbnVlOworCisJCXBsYW5lX2FsbG9jID0g JmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKKwkJdXZfcGxhbmVfYWxsb2Mg PSAmY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXTsKIAogCQkvKiBHZW4xMSsg dXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZvciBVViB3YXRlcm1hcmtzICovCi0JCVdBUk5fT04oSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJiB1dl9wbGFuZV9ibG9ja3MpOworCQlXQVJOX09OKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYgdXZfdG90YWxbcGxhbmVfaWRdKTsKKworCQkvKiBM ZWF2ZSBkaXNhYmxlZCBwbGFuZXMgYXQgKDAsMCkgKi8KKwkJaWYgKHRvdGFsW3BsYW5lX2lkXSkg eworCQkJcGxhbmVfYWxsb2MtPnN0YXJ0ID0gc3RhcnQ7CisJCQlwbGFuZV9hbGxvYy0+ZW5kID0g c3RhcnQgKz0gdG90YWxbcGxhbmVfaWRdOworCQl9CiAKLQkJaWYgKHV2X2RhdGFfcmF0ZSkgewot CQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5zdGFydCA9IHN0YXJ0Owot CQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5lbmQgPQotCQkJCXN0YXJ0 ICsgdXZfcGxhbmVfYmxvY2tzOworCQlpZiAodXZfdG90YWxbcGxhbmVfaWRdKSB7CisJCQl1dl9w bGFuZV9hbGxvYy0+c3RhcnQgPSBzdGFydDsKKwkJCXV2X3BsYW5lX2FsbG9jLT5lbmQgPSBzdGFy dCArIHV2X3RvdGFsW3BsYW5lX2lkXTsKIAkJfQorCX0KIAotCQlzdGFydCArPSB1dl9wbGFuZV9i bG9ja3M7CisJLyoKKwkgKiBXaGVuIHdlIGNhbGN1bGF0ZWQgd2F0ZXJtYXJrIHZhbHVlcyB3ZSBk aWRuJ3Qga25vdyBob3cgaGlnaAorCSAqIG9mIGEgbGV2ZWwgd2UnZCBhY3R1YWxseSBiZSBhYmxl IHRvIGhpdCwgc28gd2UganVzdCBtYXJrZWQKKwkgKiBhbGwgbGV2ZWxzIGFzICJlbmFibGVkLiIg IEdvIGJhY2sgbm93IGFuZCBkaXNhYmxlIHRoZSBvbmVzCisJICogdGhhdCBhcmVuJ3QgYWN0dWFs bHkgcG9zc2libGUuCisJICovCisJZm9yIChsZXZlbCsrOyBsZXZlbCA8PSBpbGtfd21fbWF4X2xl dmVsKGRldl9wcml2KTsgbGV2ZWwrKykgeworCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGlu dGVsX2NydGMsIHBsYW5lX2lkKSB7CisJCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBs YW5lc1twbGFuZV9pZF07CisJCQltZW1zZXQoJndtLT53bVtsZXZlbF0sIDAsIHNpemVvZih3bS0+ d21bbGV2ZWxdKSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEdvIGJhY2sgYW5kIGRpc2FibGUgdGhl IHRyYW5zaXRpb24gd2F0ZXJtYXJrIGlmIGl0IHR1cm5zIG91dCB3ZQorCSAqIGRvbid0IGhhdmUg ZW5vdWdoIEREQiBibG9ja3MgZm9yIGl0LgorCSAqLworCWZvcl9lYWNoX3BsYW5lX2lkX29uX2Ny dGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKKwkJd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1h bC5wbGFuZXNbcGxhbmVfaWRdOworCQlpZiAod20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iID4gdG90 YWxbcGxhbmVfaWRdKQorCQkJbWVtc2V0KCZ3bS0+dHJhbnNfd20sIDAsIHNpemVvZih3bS0+dHJh bnNfd20pKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQ3MTUsMTcgKzQ2NjUsMTUgQEAgc2tsX2Nv bXB1dGVfcGxhbmVfd21fcGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3Rh dGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKLQkJCQljb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKLQkJCQl1aW50MTZfdCBkZGJfYWxsb2NhdGlv biwKLQkJCQlpbnQgbGV2ZWwsCi0JCQkJY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAot CQkJCWNvbnN0IHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2LAotCQkJCXN0cnVjdCBz a2xfd21fbGV2ZWwgKnJlc3VsdCAvKiBvdXQgKi8pCitzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV9w bGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAorCQkJCSBjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKKwkJCQkgaW50IGxldmVs LAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCisJCQkJIGNvbnN0IHN0cnVj dCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2LAorCQkJCSBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpy ZXN1bHQgLyogb3V0ICovKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 CiAJCXRvX2k5MTUoaW50ZWxfcHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9ICZpbnRlbF9wc3RhdGUtPmJhc2U7CiAJdWludDMy X3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeVtsZXZlbF07CiAJdWludF9maXhl ZF8xNl8xNl90IG1ldGhvZDEsIG1ldGhvZDI7CiAJdWludF9maXhlZF8xNl8xNl90IHNlbGVjdGVk X3Jlc3VsdDsKQEAgLTQ3MzMsMTAgKzQ2ODEsNiBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRlX3Bs YW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJc3RydWN0IGlu dGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQogCQl0b19pbnRlbF9hdG9taWNfc3RhdGUoY3N0YXRl LT5iYXNlLnN0YXRlKTsKIAlib29sIGFwcGx5X21lbW9yeV9id193YSA9IHNrbF9uZWVkc19tZW1v cnlfYndfd2Eoc3RhdGUpOwotCXVpbnQzMl90IG1pbl9kaXNwX2J1Zl9uZWVkZWQ7Ci0KLQlpZiAo bGF0ZW5jeSA9PSAwKQotCQlyZXR1cm4gbGV2ZWwgPT0gMCA/IC1FSU5WQUwgOiAwOwogCiAJLyog RGlzcGxheSBXQSAjMTE0MToga2JsLGNmbCAqLwogCWlmICgoSVNfS0FCWUxBS0UoZGV2X3ByaXYp IHx8IElTX0NPRkZFRUxBS0UoZGV2X3ByaXYpIHx8CkBAIC00ODAwLDYxICs0NzQ0LDI0IEBAIHN0 YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSwKIAkJCXJlc19ibG9ja3MgPSByZXN1bHRfcHJldi0+cGxhbmVfcmVzX2I7CiAJ fQogCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKLQkJaWYgKHdwLT55X3RpbGVk KSB7Ci0JCQl1aW50MzJfdCBleHRyYV9saW5lczsKLQkJCXVpbnRfZml4ZWRfMTZfMTZfdCBmcF9t aW5fZGlzcF9idWZfbmVlZGVkOwotCi0JCQlpZiAocmVzX2xpbmVzICUgd3AtPnlfbWluX3NjYW5s aW5lcyA9PSAwKQotCQkJCWV4dHJhX2xpbmVzID0gd3AtPnlfbWluX3NjYW5saW5lczsKLQkJCWVs c2UKLQkJCQlleHRyYV9saW5lcyA9IHdwLT55X21pbl9zY2FubGluZXMgKiAyIC0KLQkJCQkJICAg ICAgcmVzX2xpbmVzICUgd3AtPnlfbWluX3NjYW5saW5lczsKLQotCQkJZnBfbWluX2Rpc3BfYnVm X25lZWRlZCA9IG11bF91MzJfZml4ZWQxNihyZXNfbGluZXMgKwotCQkJCQkJZXh0cmFfbGluZXMs Ci0JCQkJCQl3cC0+cGxhbmVfYmxvY2tzX3Blcl9saW5lKTsKLQkJCW1pbl9kaXNwX2J1Zl9uZWVk ZWQgPSBmaXhlZDE2X3RvX3UzMl9yb3VuZF91cCgKLQkJCQkJCWZwX21pbl9kaXNwX2J1Zl9uZWVk ZWQpOwotCQl9IGVsc2UgewotCQkJbWluX2Rpc3BfYnVmX25lZWRlZCA9IERJVl9ST1VORF9VUChy ZXNfYmxvY2tzICogMTEsIDEwKTsKLQkJfQotCX0gZWxzZSB7Ci0JCW1pbl9kaXNwX2J1Zl9uZWVk ZWQgPSByZXNfYmxvY2tzOwotCX0KLQotCWlmICgobGV2ZWwgPiAwICYmIHJlc19saW5lcyA+IDMx KSB8fAotCSAgICByZXNfYmxvY2tzID49IGRkYl9hbGxvY2F0aW9uIHx8Ci0JICAgIG1pbl9kaXNw X2J1Zl9uZWVkZWQgPj0gZGRiX2FsbG9jYXRpb24pIHsKLQkJLyoKLQkJICogSWYgdGhlcmUgYXJl IG5vIHZhbGlkIGxldmVsIDAgd2F0ZXJtYXJrcywgdGhlbiB3ZSBjYW4ndAotCQkgKiBzdXBwb3J0 IHRoaXMgZGlzcGxheSBjb25maWd1cmF0aW9uLgotCQkgKi8KLQkJaWYgKGxldmVsKSB7Ci0JCQly ZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcHN0YXRl LT5wbGFuZTsKLQotCQkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3BsYXkgY29uZmlndXJh dGlvbiBleGNlZWRzIHN5c3RlbSB3YXRlcm1hcmsgbGltaXRhdGlvbnNcbiIpOwotCQkJRFJNX0RF QlVHX0tNUygiW1BMQU5FOiVkOiVzXSBibG9ja3MgcmVxdWlyZWQgPSAldS8ldSwgbGluZXMgcmVx dWlyZWQgPSAldS8zMVxuIiwKLQkJCQkgICAgICBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUs Ci0JCQkJICAgICAgcmVzX2Jsb2NrcywgZGRiX2FsbG9jYXRpb24sIHJlc19saW5lcyk7Ci0JCQly ZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQogCS8qIFRoZSBudW1iZXIgb2YgbGluZXMgYXJlIGln bm9yZWQgZm9yIHRoZSBsZXZlbCAwIHdhdGVybWFyay4gKi8KKwlpZiAobGV2ZWwgPiAwICYmIHJl c19saW5lcyA+IDMxKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHJlc19saW5lcyBpcyB2YWxp ZCwgYXNzdW1lIHdlIGNhbiB1c2UgdGhpcyB3YXRlcm1hcmsgbGV2ZWwKKwkgKiBmb3Igbm93LiAg V2UnbGwgY29tZSBiYWNrIGFuZCBkaXNhYmxlIGl0IGFmdGVyIHdlIGNhbGN1bGF0ZSB0aGUKKwkg KiBEREIgYWxsb2NhdGlvbiBpZiBpdCB0dXJucyBvdXQgd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBl bm91Z2gKKwkgKiBibG9ja3MgdG8gc2F0aXNmeSBpdC4KKwkgKi8KIAlyZXN1bHQtPnBsYW5lX3Jl c19iID0gcmVzX2Jsb2NrczsKIAlyZXN1bHQtPnBsYW5lX3Jlc19sID0gcmVzX2xpbmVzOwogCXJl c3VsdC0+cGxhbmVfZW4gPSB0cnVlOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKK3N0 YXRpYyB2b2lkCiBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzdGF0ZSwKIAkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpp bnRlbF9wc3RhdGUsCi0JCSAgICAgIHVpbnQxNl90IGRkYl9ibG9ja3MsCiAJCSAgICAgIGNvbnN0 IHN0cnVjdCBza2xfd21fcGFyYW1zICp3bV9wYXJhbXMsCiAJCSAgICAgIHN0cnVjdCBza2xfd21f bGV2ZWwgKmxldmVscykKIHsKQEAgLTQ4NjIsMjUgKzQ3NjksMTUgQEAgc2tsX2NvbXB1dGVfd21f bGV2ZWxzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJCXRvX2k5MTUo aW50ZWxfcHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwogCWludCBsZXZlbCwgbWF4X2xldmVsID0g aWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7CiAJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0 X3ByZXYgPSAmbGV2ZWxzWzBdOwotCWludCByZXQ7CiAKIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwg PD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7CiAJCXN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdCA9 ICZsZXZlbHNbbGV2ZWxdOwogCi0JCXJldCA9IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNzdGF0ZSwK LQkJCQkJICAgaW50ZWxfcHN0YXRlLAotCQkJCQkgICBkZGJfYmxvY2tzLAotCQkJCQkgICBsZXZl bCwKLQkJCQkJICAgd21fcGFyYW1zLAotCQkJCQkgICByZXN1bHRfcHJldiwKLQkJCQkJICAgcmVz dWx0KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCXNrbF9jb21wdXRlX3BsYW5lX3dt KGNzdGF0ZSwgaW50ZWxfcHN0YXRlLCBsZXZlbCwgd21fcGFyYW1zLAorCQkJCSAgICAgcmVzdWx0 X3ByZXYsIHJlc3VsdCk7CiAKIAkJcmVzdWx0X3ByZXYgPSByZXN1bHQ7CiAJfQotCi0JcmV0dXJu IDA7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNDkwOCw4ICs0ODA1LDcgQEAgc2tsX2NvbXB1 dGVfbGluZXRpbWVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKIAog c3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1z ICp3cCwKLQkJCQkgICAgICBzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSwKLQkJCQkgICAgICB1aW50 MTZfdCBkZGJfYWxsb2NhdGlvbikKKwkJCQkgICAgICBzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSkK IHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3N0YXRlLT5iYXNlLmNydGMtPmRldjsKIAlj b25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CkBA IC00OTU3LDEyICs0ODUzLDEzIEBAIHN0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3RyYW5zaXRpb25f d20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAogCX0KIAotCXJlc19i bG9ja3MgKz0gMTsKLQotCWlmIChyZXNfYmxvY2tzIDwgZGRiX2FsbG9jYXRpb24pIHsKLQkJd20t PnRyYW5zX3dtLnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKLQkJd20tPnRyYW5zX3dtLnBsYW5l X2VuID0gdHJ1ZTsKLQl9CisJLyoKKwkgKiBKdXN0IGFzc3VtZSB3ZSBjYW4gZW5hYmxlIHRoZSB0 cmFuc2l0aW9uIHdhdGVybWFyay4gIEFmdGVyCisJICogY29tcHV0aW5nIHRoZSBEREIgd2UnbGwg Y29tZSBiYWNrIGFuZCBkaXNhYmxlIGl0IGlmIHRoYXQKKwkgKiBhc3N1bXB0aW9uIHR1cm5zIG91 dCB0byBiZSBmYWxzZS4KKwkgKi8KKwl3bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IgPSByZXNfYmxv Y2tzICsgMTsKKwl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSB0cnVlOwogfQogCiBzdGF0aWMgaW50 IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCkBAIC00OTcwLDcgKzQ4NjcsNiBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93 bV9zaW5nbGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQkJICAgICBl bnVtIHBsYW5lX2lkIHBsYW5lX2lkLCBpbnQgY29sb3JfcGxhbmUpCiB7CiAJc3RydWN0IHNrbF9w bGFuZV93bSAqd20gPSAmY3J0Y19zdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lk XTsKLQl1MTYgZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmY3J0Y19zdGF0ZS0+d20u c2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXSk7CiAJc3RydWN0IHNrbF93bV9wYXJhbXMgd21fcGFy YW1zOwogCWludCByZXQ7CiAKQEAgLTQ5NzksMTIgKzQ4NzUsOCBAQCBzdGF0aWMgaW50IHNrbF9i dWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNrbF9jb21wdXRlX3dtX2xldmVs cyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwKLQkJCQkgICAgZGRiX2Jsb2NrcywgJndtX3BhcmFt cywgd20tPndtKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0Jc2tsX2NvbXB1dGVfdHJh bnNpdGlvbl93bShjcnRjX3N0YXRlLCAmd21fcGFyYW1zLCB3bSwgZGRiX2Jsb2Nrcyk7CisJc2ts X2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmd21fcGFyYW1zLCB3 bS0+d20pOworCXNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3J0Y19zdGF0ZSwgJndtX3BhcmFt cywgd20pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTk0LDcgKzQ4ODYsNiBAQCBzdGF0aWMgaW50 IHNrbF9idWlsZF9wbGFuZV93bV91dihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKIAkJCQkgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKIHsKIAlzdHJ1Y3Qgc2tsX3BsYW5lX3dt ICp3bSA9ICZjcnRjX3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwotCXUx NiBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZjcnRjX3N0YXRlLT53bS5za2wucGxh bmVfZGRiX3V2W3BsYW5lX2lkXSk7CiAJc3RydWN0IHNrbF93bV9wYXJhbXMgd21fcGFyYW1zOwog CWludCByZXQ7CiAKQEAgLTUwMDYsMTAgKzQ4OTcsNyBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9w bGFuZV93bV91dihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0 KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3Rh dGUsIHBsYW5lX3N0YXRlLAotCQkJCSAgICBkZGJfYmxvY2tzLCAmd21fcGFyYW1zLCB3bS0+dXZf d20pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNy dGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmd21fcGFyYW1zLCB3bS0+dXZfd20pOwogCiAJcmV0dXJu IDA7CiB9CkBAIC01NTIxLDEzICs1NDA5LDkgQEAgc2tsX2NvbXB1dGVfd20oc3RydWN0IGludGVs X2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJaWYgKHJldCB8fCAhY2hhbmdlZCkKIAkJcmV0dXJuIHJl dDsKIAotCXJldCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJu IHJldDsKLQogCS8qCiAJICogQ2FsY3VsYXRlIFdNJ3MgZm9yIGFsbCBwaXBlcyB0aGF0IGFyZSBw YXJ0IG9mIHRoaXMgdHJhbnNhY3Rpb24uCi0JICogTm90ZSB0aGF0IHRoZSBEREIgYWxsb2NhdGlv biBhYm92ZSBtYXkgaGF2ZSBhZGRlZCBtb3JlIENSVEMncyB0aGF0CisJICogTm90ZSB0aGF0IHNr bF9kZGJfYWRkX2FmZmVjdGVkX3BpcGVzIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRoYXQK IAkgKiB3ZXJlbid0IG90aGVyd2lzZSBiZWluZyBtb2RpZmllZCAoYW5kIHNldCBiaXRzIGluIGRp cnR5X3BpcGVzKSBpZgogCSAqIHBpcGUgYWxsb2NhdGlvbnMgaGFkIHRvIGNoYW5nZS4KIAkgKi8K QEAgLTU1NDksNiArNTQzMywxMCBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSkKIAkJCXJlc3VsdHMtPmRpcnR5X3BpcGVzIHw9IGRybV9jcnRjX21hc2so JmNydGMtPmJhc2UpOwogCX0KIAorCXJldCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXNrbF9wcmludF93bV9jaGFuZ2VzKHN0YXRlKTsKIAog CXJldHVybiAwOwotLSAKMi4xNC40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK