From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH v3 2/2] drm/i915: Switch to level-based DDB allocation algorithm (v4) Date: Tue, 11 Dec 2018 09:03:46 -0800 Message-ID: <20181211170346.6608-2-matthew.d.roper@intel.com> References: <20181211170346.6608-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 15A9E6E2AA for ; Tue, 11 Dec 2018 17:03:59 +0000 (UTC) In-Reply-To: <20181211170346.6608-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 cm5pbmcgRlBfMTZfMTZfTUFYLiAgKFZpbGxlKQoKdjQ6CiAtIEJyZWFrIEREQiBhbGxvY2F0aW9u IGxvb3Agd2hlbiB0b3RhbF9kYXRhX3JhdGU9MCByYXRoZXIgdGhhbgogICBhbGxvY19zaXplPTAu ICBJZiB0b3RhbF9kYXRhX3JhdGUgaGFzIGRyb3BwZWQgdG8gMCwgYWxsIHJlbWFpbmluZwogICBw bGFuZXMgYXJlIGRpc2FibGVkLCB3aGljaCBpc24ndCB0cnVlIGZvciBhbGxvY19zaXplICh3ZSBt aWdodCBqdXN0CiAgIGhhdmUgbm90IGhhZCBhbnkgcmVtYWluaW5nIGJsb2NrcyB0byBoYW5kIG91 dCkuICBQbHVzCiAgIHRvdGFsX2RhdGFfcmF0ZT0wIGlzIHRoZSBjYXNlIHdlIG5lZWQgdG8gYXZv aWQgdG8gYSBwcmV2ZW50IGEKICAgZGl2LWJ5LTAuICAoVmlsbGUpCiAtIHMvRElWX1JPVU5EX1VQ L0RJVjY0X1U2NF9ST1VORF9VUC8gdG8gcHJldmVudCAzMi1iaXQgYnJlYWthZ2UgKFZpbGxlKQoK Q2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+CkJ1Z3pp bGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU0NTgK U2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIHwgMzgxICsrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMzggaW5zZXJ0aW9ucygr KSwgMjQzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IGJmOTcwY2Y3 YjhhNS4uM2JkZDhmYTQwZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTQzMDEsMTAy ICs0MzAxLDYgQEAgaWNsX2dldF90b3RhbF9yZWxhdGl2ZV9kYXRhX3JhdGUoc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmludGVsX2NzdGF0ZSwKIAlyZXR1cm4gdG90YWxfZGF0YV9yYXRlOwogfQog Ci1zdGF0aWMgdWludDE2X3QKLXNrbF9kZGJfbWluX2FsbG9jKGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsIGNvbnN0IGludCBwbGFuZSkKLXsKLQlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwotCXVpbnQzMl90IHNyY193 LCBzcmNfaDsKLQl1aW50MzJfdCBtaW5fc2NhbmxpbmVzID0gODsKLQl1aW50OF90IHBsYW5lX2Jw cDsKLQotCWlmIChXQVJOX09OKCFmYikpCi0JCXJldHVybiAwOwotCi0JLyogRm9yIHBhY2tlZCBm b3JtYXRzLCBhbmQgdXYtcGxhbmUsIHJldHVybiAwICovCi0JaWYgKHBsYW5lID09IDEgJiYgZmIt PmZvcm1hdC0+Zm9ybWF0ICE9IERSTV9GT1JNQVRfTlYxMikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBG b3IgTm9uIFktdGlsZSByZXR1cm4gOC1ibG9ja3MgKi8KLQlpZiAoZmItPm1vZGlmaWVyICE9IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCi0JICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQgJiYKLQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0NDUyAmJgotCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEX0NDUykKLQkJcmV0dXJuIDg7Ci0KLQkvKgotCSAqIFNyYyBjb29yZGluYXRlcyBhcmUgYWxy ZWFkeSByb3RhdGVkIGJ5IDI3MCBkZWdyZWVzIGZvcgotCSAqIHRoZSA5MC8yNzAgZGVncmVlIHBs YW5lIHJvdGF0aW9uIGNhc2VzICh0byBtYXRjaCB0aGUKLQkgKiBHVFQgbWFwcGluZyksIGhlbmNl IG5vIG5lZWQgdG8gYWNjb3VudCBmb3Igcm90YXRpb24gaGVyZS4KLQkgKi8KLQlzcmNfdyA9IGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2OwotCXNyY19oID0gZHJt X3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2OwotCi0JLyogSGFsdmUg VVYgcGxhbmUgd2lkdGggYW5kIGhlaWdodCBmb3IgTlYxMiAqLwotCWlmIChwbGFuZSA9PSAxKSB7 Ci0JCXNyY193IC89IDI7Ci0JCXNyY19oIC89IDI7Ci0JfQotCi0JcGxhbmVfYnBwID0gZmItPmZv cm1hdC0+Y3BwW3BsYW5lXTsKLQotCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHBsYW5lX3N0 YXRlLT5iYXNlLnJvdGF0aW9uKSkgewotCQlzd2l0Y2ggKHBsYW5lX2JwcCkgewotCQljYXNlIDE6 Ci0JCQltaW5fc2NhbmxpbmVzID0gMzI7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJbWluX3Nj YW5saW5lcyA9IDE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCW1pbl9zY2FubGluZXMgPSA4 OwotCQkJYnJlYWs7Ci0JCWNhc2UgODoKLQkJCW1pbl9zY2FubGluZXMgPSA0OwotCQkJYnJlYWs7 Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOKDEsICJVbnN1cHBvcnRlZCBwaXhlbCBkZXB0aCAldSBmb3Ig cm90YXRpb24iLAotCQkJICAgICBwbGFuZV9icHApOwotCQkJbWluX3NjYW5saW5lcyA9IDMyOwot CQl9Ci0JfQotCi0JcmV0dXJuIERJVl9ST1VORF9VUCgoNCAqIHNyY193ICogcGxhbmVfYnBwKSwg NTEyKSAqIG1pbl9zY2FubGluZXMvNCArIDM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfZGRiX2Nh bGNfbWluKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsIGludCBudW1fYWN0 aXZlLAotCQkgdWludDE2X3QgKm1pbmltdW0sIHVpbnQxNl90ICp1dl9taW5pbXVtKQotewotCWNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZTsKLQotCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZShwbGFu ZSwgcHN0YXRlLCAmY3N0YXRlLT5iYXNlKSB7Ci0JCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSB0 b19pbnRlbF9wbGFuZShwbGFuZSktPmlkOwotCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKTsKLQotCQlpZiAocGxhbmVf aWQgPT0gUExBTkVfQ1VSU09SKQotCQkJY29udGludWU7Ci0KLQkJLyogc2xhdmUgcGxhbmUgbXVz dCBiZSBpbnZpc2libGUgYW5kIGNhbGN1bGF0ZWQgZnJvbSBtYXN0ZXIgKi8KLQkJaWYgKCFwc3Rh dGUtPnZpc2libGUgfHwgV0FSTl9PTihwbGFuZV9zdGF0ZS0+c2xhdmUpKQotCQkJY29udGludWU7 Ci0KLQkJaWYgKCFwbGFuZV9zdGF0ZS0+bGlua2VkX3BsYW5lKSB7Ci0JCQltaW5pbXVtW3BsYW5l X2lkXSA9IHNrbF9kZGJfbWluX2FsbG9jKHBsYW5lX3N0YXRlLCAwKTsKLQkJCXV2X21pbmltdW1b cGxhbmVfaWRdID0KLQkJCQlza2xfZGRiX21pbl9hbGxvYyhwbGFuZV9zdGF0ZSwgMSk7Ci0JCX0g ZWxzZSB7Ci0JCQllbnVtIHBsYW5lX2lkIHlfcGxhbmVfaWQgPQotCQkJCXBsYW5lX3N0YXRlLT5s aW5rZWRfcGxhbmUtPmlkOwotCi0JCQltaW5pbXVtW3lfcGxhbmVfaWRdID0gc2tsX2RkYl9taW5f YWxsb2MocGxhbmVfc3RhdGUsIDApOwotCQkJbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21p bl9hbGxvYyhwbGFuZV9zdGF0ZSwgMSk7Ci0JCX0KLQl9Ci0KLQltaW5pbXVtW1BMQU5FX0NVUlNP Ul0gPSBza2xfY3Vyc29yX2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7Ci19Ci0KIHN0YXRpYyBpbnQK IHNrbF9hbGxvY2F0ZV9waXBlX2RkYihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAog CQkgICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIgLyogb3V0ICovKQpAQCAtNDQw NiwxNSArNDMxMCwxNyBAQCBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzdGF0ZSwKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGNydGMtPmRldik7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRl bF9jcnRjKGNydGMpOwogCXN0cnVjdCBza2xfZGRiX2VudHJ5ICphbGxvYyA9ICZjc3RhdGUtPndt LnNrbC5kZGI7Ci0JdWludDE2X3QgYWxsb2Nfc2l6ZSwgc3RhcnQ7Ci0JdWludDE2X3QgbWluaW11 bVtJOTE1X01BWF9QTEFORVNdID0ge307Ci0JdWludDE2X3QgdXZfbWluaW11bVtJOTE1X01BWF9Q TEFORVNdID0ge307CisJc3RydWN0IHNrbF9wbGFuZV93bSAqd207CisJdWludDE2X3QgYWxsb2Nf c2l6ZSwgc3RhcnQgPSAwOworCXVpbnQxNl90IHRvdGFsW0k5MTVfTUFYX1BMQU5FU10gPSB7fTsK Kwl1aW50MTZfdCB1dl90b3RhbFtJOTE1X01BWF9QTEFORVNdID0ge307CiAJdTY0IHRvdGFsX2Rh dGFfcmF0ZTsKIAllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOwogCWludCBudW1fYWN0aXZlOwogCXU2 NCBwbGFuZV9kYXRhX3JhdGVbSTkxNV9NQVhfUExBTkVTXSA9IHt9OwogCXU2NCB1dl9wbGFuZV9k YXRhX3JhdGVbSTkxNV9NQVhfUExBTkVTXSA9IHt9OwotCXVpbnQxNl90IHRvdGFsX21pbl9ibG9j a3MgPSAwOworCXVpbnQxNl90IGJsb2NrcyA9IDA7CisJaW50IGxldmVsOwogCiAJLyogQ2xlYXIg dGhlIHBhcnRpdGlvbmluZyBmb3IgZGlzYWJsZWQgcGxhbmVzLiAqLwogCW1lbXNldChjc3RhdGUt PndtLnNrbC5wbGFuZV9kZGJfeSwgMCwgc2l6ZW9mKGNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95 KSk7CkBAIC00NDQ0LDgxICs0MzUwLDEzMiBAQCBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAlpZiAoYWxsb2Nfc2l6ZSA9PSAwKQogCQlyZXR1 cm4gMDsKIAotCXNrbF9kZGJfY2FsY19taW4oY3N0YXRlLCBudW1fYWN0aXZlLCBtaW5pbXVtLCB1 dl9taW5pbXVtKTsKKwkvKiBBbGxvY2F0ZSBmaXhlZCBudW1iZXIgb2YgYmxvY2tzIGZvciBjdXJz b3IuICovCisJdG90YWxbUExBTkVfQ1VSU09SXSA9IHNrbF9jdXJzb3JfYWxsb2NhdGlvbihudW1f YWN0aXZlKTsKKwlhbGxvY19zaXplIC09IHRvdGFsW1BMQU5FX0NVUlNPUl07CisJY3N0YXRlLT53 bS5za2wucGxhbmVfZGRiX3lbUExBTkVfQ1VSU09SXS5zdGFydCA9CisJCWFsbG9jLT5lbmQgLSB0 b3RhbFtQTEFORV9DVVJTT1JdOworCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NV UlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKKworCWlmICh0b3RhbF9kYXRhX3JhdGUgPT0gMCkKKwkJ cmV0dXJuIDA7CiAKIAkvKgotCSAqIDEuIEFsbG9jYXRlIHRoZSBtaW5pbnVtIHJlcXVpcmVkIGJs b2NrcyBmb3IgZWFjaCBhY3RpdmUgcGxhbmUKLQkgKiBhbmQgYWxsb2NhdGUgdGhlIGN1cnNvciwg aXQgZG9lc24ndCByZXF1aXJlIGV4dHJhIGFsbG9jYXRpb24KLQkgKiBwcm9wb3J0aW9uYWwgdG8g dGhlIGRhdGEgcmF0ZS4KKwkgKiBGaW5kIHRoZSBoaWdoZXN0IHdhdGVybWFyayBsZXZlbCBmb3Ig d2hpY2ggd2UgY2FuIHNhdGlzZnkgdGhlIGJsb2NrCisJICogcmVxdWlyZW1lbnQgb2YgYWN0aXZl IHBsYW5lcy4KIAkgKi8KKwlmb3IgKGxldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7 IGxldmVsID49IDA7IGxldmVsLS0pIHsKKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRl bF9jcnRjLCBwbGFuZV9pZCkgeworCQkJaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKKwkJ CQljb250aW51ZTsKIAotCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxh bmVfaWQpIHsKLQkJdG90YWxfbWluX2Jsb2NrcyArPSBtaW5pbXVtW3BsYW5lX2lkXTsKLQkJdG90 YWxfbWluX2Jsb2NrcyArPSB1dl9taW5pbXVtW3BsYW5lX2lkXTsKKwkJCXdtID0gJmNzdGF0ZS0+ d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKKwkJCWJsb2NrcyArPSB3bS0+d21bbGV2 ZWxdLnBsYW5lX3Jlc19iOworCQkJYmxvY2tzICs9IHdtLT51dl93bVtsZXZlbF0ucGxhbmVfcmVz X2I7CisJCX0KKworCQlpZiAoYmxvY2tzIDwgYWxsb2Nfc2l6ZSkgeworCQkJYWxsb2Nfc2l6ZSAt PSBibG9ja3M7CisJCQlicmVhazsKKwkJfQogCX0KIAotCWlmICh0b3RhbF9taW5fYmxvY2tzID4g YWxsb2Nfc2l6ZSkgeworCWlmIChsZXZlbCA8IDApIHsKIAkJRFJNX0RFQlVHX0tNUygiUmVxdWVz dGVkIGRpc3BsYXkgY29uZmlndXJhdGlvbiBleGNlZWRzIHN5c3RlbSBEREIgbGltaXRhdGlvbnMi KTsKLQkJRFJNX0RFQlVHX0tNUygibWluaW11bSByZXF1aXJlZCAlZC8lZFxuIiwgdG90YWxfbWlu X2Jsb2NrcywKLQkJCQkJCQlhbGxvY19zaXplKTsKKwkJRFJNX0RFQlVHX0tNUygibWluaW11bSBy ZXF1aXJlZCAlZC8lZFxuIiwgYmxvY2tzLAorCQkJICAgICAgYWxsb2Nfc2l6ZSk7CiAJCXJldHVy biAtRUlOVkFMOwogCX0KIAotCWFsbG9jX3NpemUgLT0gdG90YWxfbWluX2Jsb2NrczsKLQljc3Rh dGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLnN0YXJ0ID0gYWxsb2MtPmVuZCAt IG1pbmltdW1bUExBTkVfQ1VSU09SXTsKLQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFO RV9DVVJTT1JdLmVuZCA9IGFsbG9jLT5lbmQ7Ci0KIAkvKgotCSAqIDIuIERpc3RyaWJ1dGUgdGhl IHJlbWFpbmluZyBzcGFjZSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBhbW91bnQgb2YKLQkgKiBkYXRh IGVhY2ggcGxhbmUgbmVlZHMgdG8gZmV0Y2ggZnJvbSBtZW1vcnkuCi0JICoKLQkgKiBGSVhNRTog d2UgbWF5IG5vdCBhbGxvY2F0ZSBldmVyeSBzaW5nbGUgYmxvY2sgaGVyZS4KKwkgKiBHcmFudCBl YWNoIHBsYW5lIHRoZSBibG9ja3MgaXQgcmVxdWlyZXMgYXQgdGhlIGhpZ2hlc3QgYWNoaWV2YWJs ZQorCSAqIHdhdGVybWFyayBsZXZlbCwgcGx1cyBhbiBleHRyYSBzaGFyZSBvZiB0aGUgbGVmdG92 ZXIgYmxvY2tzCisJICogcHJvcG9ydGlvbmFsIHRvIGl0cyByZWxhdGl2ZSBkYXRhIHJhdGUuCiAJ ICovCi0JaWYgKHRvdGFsX2RhdGFfcmF0ZSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXN0YXJ0ID0g YWxsb2MtPnN0YXJ0OwogCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxh bmVfaWQpIHsKLQkJdTY0IGRhdGFfcmF0ZSwgdXZfZGF0YV9yYXRlOwotCQl1aW50MTZfdCBwbGFu ZV9ibG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsKKwkJdTY0IHJhdGU7CisJCXUxNiBleHRyYTsKIAog CQlpZiAocGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SKQogCQkJY29udGludWU7CiAKLQkJZGF0YV9y YXRlID0gcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKLQogCQkvKgotCQkgKiBhbGxvY2F0aW9u IGZvciAocGFja2VkIGZvcm1hdHMpIG9yICh1di1wbGFuZSBwYXJ0IG9mIHBsYW5hciBmb3JtYXQp OgotCQkgKiBwcm9tb3RlIHRoZSBleHByZXNzaW9uIHRvIDY0IGJpdHMgdG8gYXZvaWQgb3ZlcmZs b3dpbmcsIHRoZQotCQkgKiByZXN1bHQgaXMgPCBhdmFpbGFibGUgYXMgZGF0YV9yYXRlIC8gdG90 YWxfZGF0YV9yYXRlIDwgMQorCQkgKiBXZSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCBhY3RpdmUgcGxh bmVzOyByZW1haW5pbmcgcGxhbmVzIGFyZQorCQkgKiBhbGwgZGlzYWJsZWQuCiAJCSAqLwotCQlw bGFuZV9ibG9ja3MgPSBtaW5pbXVtW3BsYW5lX2lkXTsKLQkJcGxhbmVfYmxvY2tzICs9IGRpdjY0 X3U2NChhbGxvY19zaXplICogZGF0YV9yYXRlLCB0b3RhbF9kYXRhX3JhdGUpOworCQlpZiAodG90 YWxfZGF0YV9yYXRlID09IDApCisJCQlicmVhazsKIAotCQkvKiBMZWF2ZSBkaXNhYmxlZCBwbGFu ZXMgYXQgKDAsMCkgKi8KLQkJaWYgKGRhdGFfcmF0ZSkgewotCQkJY3N0YXRlLT53bS5za2wucGxh bmVfZGRiX3lbcGxhbmVfaWRdLnN0YXJ0ID0gc3RhcnQ7Ci0JCQljc3RhdGUtPndtLnNrbC5wbGFu ZV9kZGJfeVtwbGFuZV9pZF0uZW5kID0gc3RhcnQgKyBwbGFuZV9ibG9ja3M7Ci0JCX0KKwkJd20g PSAmY3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwogCi0JCXN0YXJ0ICs9 IHBsYW5lX2Jsb2NrczsKKwkJcmF0ZSA9IHBsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF07CisJCWV4 dHJhID0gbWluX3QodTE2LCBhbGxvY19zaXplLAorCQkJICAgICAgRElWNjRfVTY0X1JPVU5EX1VQ KGFsbG9jX3NpemUgKiByYXRlLAorCQkJCQkJIHRvdGFsX2RhdGFfcmF0ZSkpOworCQl0b3RhbFtw bGFuZV9pZF0gPSB3bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iICsgZXh0cmE7CisJCWFsbG9jX3Np emUgLT0gZXh0cmE7CisJCXRvdGFsX2RhdGFfcmF0ZSAtPSByYXRlOwogCi0JCS8qIEFsbG9jYXRl IEREQiBmb3IgVVYgcGxhbmUgZm9yIHBsYW5hciBmb3JtYXQvTlYxMiAqLwotCQl1dl9kYXRhX3Jh dGUgPSB1dl9wbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQlpZiAodG90YWxfZGF0YV9yYXRl ID09IDApCisJCQlicmVhazsKIAotCQl1dl9wbGFuZV9ibG9ja3MgPSB1dl9taW5pbXVtW3BsYW5l X2lkXTsKLQkJdXZfcGxhbmVfYmxvY2tzICs9IGRpdjY0X3U2NChhbGxvY19zaXplICogdXZfZGF0 YV9yYXRlLCB0b3RhbF9kYXRhX3JhdGUpOworCQlyYXRlID0gdXZfcGxhbmVfZGF0YV9yYXRlW3Bs YW5lX2lkXTsKKwkJZXh0cmEgPSBtaW5fdCh1MTYsIGFsbG9jX3NpemUsCisJCQkgICAgICBESVY2 NF9VNjRfUk9VTkRfVVAoYWxsb2Nfc2l6ZSAqIHJhdGUsCisJCQkJCQkgdG90YWxfZGF0YV9yYXRl KSk7CisJCXV2X3RvdGFsW3BsYW5lX2lkXSA9IHdtLT51dl93bVtsZXZlbF0ucGxhbmVfcmVzX2Ig KyBleHRyYTsKKwkJYWxsb2Nfc2l6ZSAtPSBleHRyYTsKKwkJdG90YWxfZGF0YV9yYXRlIC09IHJh dGU7CisJfQorCVdBUk5fT04oYWxsb2Nfc2l6ZSAhPSAwIHx8IHRvdGFsX2RhdGFfcmF0ZSAhPSAw KTsKKworCS8qIFNldCB0aGUgYWN0dWFsIEREQiBzdGFydC9lbmQgcG9pbnRzIGZvciBlYWNoIHBs YW5lICovCisJc3RhcnQgPSBhbGxvYy0+c3RhcnQ7CisJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0 YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgeworCQlzdHJ1Y3Qgc2tsX2RkYl9lbnRyeSAqcGxhbmVf YWxsb2MsICp1dl9wbGFuZV9hbGxvYzsKKworCQlpZiAocGxhbmVfaWQgPT0gUExBTkVfQ1VSU09S KQorCQkJY29udGludWU7CisKKwkJcGxhbmVfYWxsb2MgPSAmY3N0YXRlLT53bS5za2wucGxhbmVf ZGRiX3lbcGxhbmVfaWRdOworCQl1dl9wbGFuZV9hbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5wbGFu ZV9kZGJfdXZbcGxhbmVfaWRdOwogCiAJCS8qIEdlbjExKyB1c2VzIGEgc2VwYXJhdGUgcGxhbmUg Zm9yIFVWIHdhdGVybWFya3MgKi8KLQkJV0FSTl9PTihJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx ICYmIHV2X3BsYW5lX2Jsb2Nrcyk7CisJCVdBUk5fT04oSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MSAmJiB1dl90b3RhbFtwbGFuZV9pZF0pOworCisJCS8qIExlYXZlIGRpc2FibGVkIHBsYW5lcyBh dCAoMCwwKSAqLworCQlpZiAodG90YWxbcGxhbmVfaWRdKSB7CisJCQlwbGFuZV9hbGxvYy0+c3Rh cnQgPSBzdGFydDsKKwkJCXBsYW5lX2FsbG9jLT5lbmQgPSBzdGFydCArPSB0b3RhbFtwbGFuZV9p ZF07CisJCX0KIAotCQlpZiAodXZfZGF0YV9yYXRlKSB7Ci0JCQljc3RhdGUtPndtLnNrbC5wbGFu ZV9kZGJfdXZbcGxhbmVfaWRdLnN0YXJ0ID0gc3RhcnQ7Ci0JCQljc3RhdGUtPndtLnNrbC5wbGFu ZV9kZGJfdXZbcGxhbmVfaWRdLmVuZCA9Ci0JCQkJc3RhcnQgKyB1dl9wbGFuZV9ibG9ja3M7CisJ CWlmICh1dl90b3RhbFtwbGFuZV9pZF0pIHsKKwkJCXV2X3BsYW5lX2FsbG9jLT5zdGFydCA9IHN0 YXJ0OworCQkJdXZfcGxhbmVfYWxsb2MtPmVuZCA9IHN0YXJ0ICsgdXZfdG90YWxbcGxhbmVfaWRd OwogCQl9CisJfQogCi0JCXN0YXJ0ICs9IHV2X3BsYW5lX2Jsb2NrczsKKwkvKgorCSAqIFdoZW4g d2UgY2FsY3VsYXRlZCB3YXRlcm1hcmsgdmFsdWVzIHdlIGRpZG4ndCBrbm93IGhvdyBoaWdoCisJ ICogb2YgYSBsZXZlbCB3ZSdkIGFjdHVhbGx5IGJlIGFibGUgdG8gaGl0LCBzbyB3ZSBqdXN0IG1h cmtlZAorCSAqIGFsbCBsZXZlbHMgYXMgImVuYWJsZWQuIiAgR28gYmFjayBub3cgYW5kIGRpc2Fi bGUgdGhlIG9uZXMKKwkgKiB0aGF0IGFyZW4ndCBhY3R1YWxseSBwb3NzaWJsZS4KKwkgKi8KKwlm b3IgKGxldmVsKys7IGxldmVsIDw9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOyBsZXZlbCsr KSB7CisJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsK KwkJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKKwkJCW1l bXNldCgmd20tPndtW2xldmVsXSwgMCwgc2l6ZW9mKHdtLT53bVtsZXZlbF0pKTsKKwkJfQorCX0K KworCS8qCisJICogR28gYmFjayBhbmQgZGlzYWJsZSB0aGUgdHJhbnNpdGlvbiB3YXRlcm1hcmsg aWYgaXQgdHVybnMgb3V0IHdlCisJICogZG9uJ3QgaGF2ZSBlbm91Z2ggRERCIGJsb2NrcyBmb3Ig aXQuCisJICovCisJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9p ZCkgeworCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CisJ CWlmICh3bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IgPiB0b3RhbFtwbGFuZV9pZF0pCisJCQltZW1z ZXQoJndtLT50cmFuc193bSwgMCwgc2l6ZW9mKHdtLT50cmFuc193bSkpOwogCX0KIAogCXJldHVy biAwOwpAQCAtNDcxNSwxNyArNDY3MiwxNSBAQCBza2xfY29tcHV0ZV9wbGFuZV93bV9wYXJhbXMo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAot c3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3N0YXRlLAotCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxf cHN0YXRlLAotCQkJCXVpbnQxNl90IGRkYl9hbGxvY2F0aW9uLAotCQkJCWludCBsZXZlbCwKLQkJ CQljb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCi0JCQkJY29uc3Qgc3RydWN0IHNrbF93 bV9sZXZlbCAqcmVzdWx0X3ByZXYsCi0JCQkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0IC8q IG91dCAqLykKK3N0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqaW50ZWxfcHN0YXRlLAorCQkJCSBpbnQgbGV2ZWwsCisJCQkJIGNvbnN0IHN0cnVjdCBz a2xfd21fcGFyYW1zICp3cCwKKwkJCQkgY29uc3Qgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0 X3ByZXYsCisJCQkJIHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdCAvKiBvdXQgKi8pCiB7CiAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KIAkJdG9faTkxNShpbnRlbF9wc3Rh dGUtPmJhc2UucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0 YXRlID0gJmludGVsX3BzdGF0ZS0+YmFzZTsKIAl1aW50MzJfdCBsYXRlbmN5ID0gZGV2X3ByaXYt PndtLnNrbF9sYXRlbmN5W2xldmVsXTsKIAl1aW50X2ZpeGVkXzE2XzE2X3QgbWV0aG9kMSwgbWV0 aG9kMjsKIAl1aW50X2ZpeGVkXzE2XzE2X3Qgc2VsZWN0ZWRfcmVzdWx0OwpAQCAtNDczMywxMCAr NDY4OCw2IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0 ZSA9CiAJCXRvX2ludGVsX2F0b21pY19zdGF0ZShjc3RhdGUtPmJhc2Uuc3RhdGUpOwogCWJvb2wg YXBwbHlfbWVtb3J5X2J3X3dhID0gc2tsX25lZWRzX21lbW9yeV9id193YShzdGF0ZSk7Ci0JdWlu dDMyX3QgbWluX2Rpc3BfYnVmX25lZWRlZDsKLQotCWlmIChsYXRlbmN5ID09IDApCi0JCXJldHVy biBsZXZlbCA9PSAwID8gLUVJTlZBTCA6IDA7CiAKIAkvKiBEaXNwbGF5IFdBICMxMTQxOiBrYmws Y2ZsICovCiAJaWYgKChJU19LQUJZTEFLRShkZXZfcHJpdikgfHwgSVNfQ09GRkVFTEFLRShkZXZf cHJpdikgfHwKQEAgLTQ4MDAsNjEgKzQ3NTEsMjQgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9w bGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkJcmVzX2Js b2NrcyA9IHJlc3VsdF9wcmV2LT5wbGFuZV9yZXNfYjsKIAl9CiAKLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMSkgewotCQlpZiAod3AtPnlfdGlsZWQpIHsKLQkJCXVpbnQzMl90IGV4dHJh X2xpbmVzOwotCQkJdWludF9maXhlZF8xNl8xNl90IGZwX21pbl9kaXNwX2J1Zl9uZWVkZWQ7Ci0K LQkJCWlmIChyZXNfbGluZXMgJSB3cC0+eV9taW5fc2NhbmxpbmVzID09IDApCi0JCQkJZXh0cmFf bGluZXMgPSB3cC0+eV9taW5fc2NhbmxpbmVzOwotCQkJZWxzZQotCQkJCWV4dHJhX2xpbmVzID0g d3AtPnlfbWluX3NjYW5saW5lcyAqIDIgLQotCQkJCQkgICAgICByZXNfbGluZXMgJSB3cC0+eV9t aW5fc2NhbmxpbmVzOwotCi0JCQlmcF9taW5fZGlzcF9idWZfbmVlZGVkID0gbXVsX3UzMl9maXhl ZDE2KHJlc19saW5lcyArCi0JCQkJCQlleHRyYV9saW5lcywKLQkJCQkJCXdwLT5wbGFuZV9ibG9j a3NfcGVyX2xpbmUpOwotCQkJbWluX2Rpc3BfYnVmX25lZWRlZCA9IGZpeGVkMTZfdG9fdTMyX3Jv dW5kX3VwKAotCQkJCQkJZnBfbWluX2Rpc3BfYnVmX25lZWRlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlt aW5fZGlzcF9idWZfbmVlZGVkID0gRElWX1JPVU5EX1VQKHJlc19ibG9ja3MgKiAxMSwgMTApOwot CQl9Ci0JfSBlbHNlIHsKLQkJbWluX2Rpc3BfYnVmX25lZWRlZCA9IHJlc19ibG9ja3M7Ci0JfQot Ci0JaWYgKChsZXZlbCA+IDAgJiYgcmVzX2xpbmVzID4gMzEpIHx8Ci0JICAgIHJlc19ibG9ja3Mg Pj0gZGRiX2FsbG9jYXRpb24gfHwKLQkgICAgbWluX2Rpc3BfYnVmX25lZWRlZCA+PSBkZGJfYWxs b2NhdGlvbikgewotCQkvKgotCQkgKiBJZiB0aGVyZSBhcmUgbm8gdmFsaWQgbGV2ZWwgMCB3YXRl cm1hcmtzLCB0aGVuIHdlIGNhbid0Ci0JCSAqIHN1cHBvcnQgdGhpcyBkaXNwbGF5IGNvbmZpZ3Vy YXRpb24uCi0JCSAqLwotCQlpZiAobGV2ZWwpIHsKLQkJCXJldHVybiAwOwotCQl9IGVsc2Ugewot CQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBwc3RhdGUtPnBsYW5lOwotCi0JCQlEUk1fREVC VUdfS01TKCJSZXF1ZXN0ZWQgZGlzcGxheSBjb25maWd1cmF0aW9uIGV4Y2VlZHMgc3lzdGVtIHdh dGVybWFyayBsaW1pdGF0aW9uc1xuIik7Ci0JCQlEUk1fREVCVUdfS01TKCJbUExBTkU6JWQ6JXNd IGJsb2NrcyByZXF1aXJlZCA9ICV1LyV1LCBsaW5lcyByZXF1aXJlZCA9ICV1LzMxXG4iLAotCQkJ CSAgICAgIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwKLQkJCQkgICAgICByZXNfYmxvY2tz LCBkZGJfYWxsb2NhdGlvbiwgcmVzX2xpbmVzKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0J fQotCiAJLyogVGhlIG51bWJlciBvZiBsaW5lcyBhcmUgaWdub3JlZCBmb3IgdGhlIGxldmVsIDAg d2F0ZXJtYXJrLiAqLworCWlmIChsZXZlbCA+IDAgJiYgcmVzX2xpbmVzID4gMzEpCisJCXJldHVy bjsKKworCS8qCisJICogSWYgcmVzX2xpbmVzIGlzIHZhbGlkLCBhc3N1bWUgd2UgY2FuIHVzZSB0 aGlzIHdhdGVybWFyayBsZXZlbAorCSAqIGZvciBub3cuICBXZSdsbCBjb21lIGJhY2sgYW5kIGRp c2FibGUgaXQgYWZ0ZXIgd2UgY2FsY3VsYXRlIHRoZQorCSAqIEREQiBhbGxvY2F0aW9uIGlmIGl0 IHR1cm5zIG91dCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGVub3VnaAorCSAqIGJsb2NrcyB0byBz YXRpc2Z5IGl0LgorCSAqLwogCXJlc3VsdC0+cGxhbmVfcmVzX2IgPSByZXNfYmxvY2tzOwogCXJl c3VsdC0+cGxhbmVfcmVzX2wgPSByZXNfbGluZXM7CiAJcmVzdWx0LT5wbGFuZV9lbiA9IHRydWU7 Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHNrbF9jb21wdXRl X3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKLQkJICAgICAg dWludDE2X3QgZGRiX2Jsb2NrcywKIAkJICAgICAgY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMg KndtX3BhcmFtcywKIAkJICAgICAgc3RydWN0IHNrbF93bV9sZXZlbCAqbGV2ZWxzKQogewpAQCAt NDg2MiwyNSArNDc3NiwxNSBAQCBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAkJdG9faTkxNShpbnRlbF9wc3RhdGUtPmJhc2UucGxh bmUtPmRldik7CiAJaW50IGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldl9w cml2KTsKIAlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRfcHJldiA9ICZsZXZlbHNbMF07Ci0J aW50IHJldDsKIAogCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKysp IHsKIAkJc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0ID0gJmxldmVsc1tsZXZlbF07CiAKLQkJ cmV0ID0gc2tsX2NvbXB1dGVfcGxhbmVfd20oY3N0YXRlLAotCQkJCQkgICBpbnRlbF9wc3RhdGUs Ci0JCQkJCSAgIGRkYl9ibG9ja3MsCi0JCQkJCSAgIGxldmVsLAotCQkJCQkgICB3bV9wYXJhbXMs Ci0JCQkJCSAgIHJlc3VsdF9wcmV2LAotCQkJCQkgICByZXN1bHQpOwotCQlpZiAocmV0KQotCQkJ cmV0dXJuIHJldDsKKwkJc2tsX2NvbXB1dGVfcGxhbmVfd20oY3N0YXRlLCBpbnRlbF9wc3RhdGUs IGxldmVsLCB3bV9wYXJhbXMsCisJCQkJICAgICByZXN1bHRfcHJldiwgcmVzdWx0KTsKIAogCQly ZXN1bHRfcHJldiA9IHJlc3VsdDsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVpbnQz Ml90CkBAIC00OTA4LDggKzQ4MTIsNyBAQCBza2xfY29tcHV0ZV9saW5ldGltZV93bShjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQogCiBzdGF0aWMgdm9pZCBza2xfY29tcHV0 ZV90cmFuc2l0aW9uX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJ CQkJICAgICAgY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndwLAotCQkJCSAgICAgIHN0cnVj dCBza2xfcGxhbmVfd20gKndtLAotCQkJCSAgICAgIHVpbnQxNl90IGRkYl9hbGxvY2F0aW9uKQor CQkJCSAgICAgIHN0cnVjdCBza2xfcGxhbmVfd20gKndtKQogewogCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2OwogCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKQEAgLTQ5NTcsMTIgKzQ4NjAsMTMgQEAg c3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3N0YXRlLAogCiAJfQogCi0JcmVzX2Jsb2NrcyArPSAxOwotCi0JaWYgKHJl c19ibG9ja3MgPCBkZGJfYWxsb2NhdGlvbikgewotCQl3bS0+dHJhbnNfd20ucGxhbmVfcmVzX2Ig PSByZXNfYmxvY2tzOwotCQl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSB0cnVlOwotCX0KKwkvKgor CSAqIEp1c3QgYXNzdW1lIHdlIGNhbiBlbmFibGUgdGhlIHRyYW5zaXRpb24gd2F0ZXJtYXJrLiAg QWZ0ZXIKKwkgKiBjb21wdXRpbmcgdGhlIEREQiB3ZSdsbCBjb21lIGJhY2sgYW5kIGRpc2FibGUg aXQgaWYgdGhhdAorCSAqIGFzc3VtcHRpb24gdHVybnMgb3V0IHRvIGJlIGZhbHNlLgorCSAqLwor CXdtLT50cmFuc193bS5wbGFuZV9yZXNfYiA9IHJlc19ibG9ja3MgKyAxOworCXdtLT50cmFuc193 bS5wbGFuZV9lbiA9IHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3Np bmdsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKQEAgLTQ5NzAsNyArNDg3 NCw2IEBAIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJCQkgICAgIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQs IGludCBjb2xvcl9wbGFuZSkKIHsKIAlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSA9ICZjcnRjX3N0 YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwotCXUxNiBkZGJfYmxvY2tzID0g c2tsX2RkYl9lbnRyeV9zaXplKCZjcnRjX3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVf aWRdKTsKIAlzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyB3bV9wYXJhbXM7CiAJaW50IHJldDsKIApAQCAt NDk3OSwxMiArNDg4Miw4IEBAIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4g cmV0OwogCi0JcmV0ID0gc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNfc3RhdGUsIHBsYW5lX3N0 YXRlLAotCQkJCSAgICBkZGJfYmxvY2tzLCAmd21fcGFyYW1zLCB3bS0+d20pOwotCWlmIChyZXQp Ci0JCXJldHVybiByZXQ7Ci0KLQlza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUs ICZ3bV9wYXJhbXMsIHdtLCBkZGJfYmxvY2tzKTsKKwlza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZ3bV9wYXJhbXMsIHdtLT53bSk7CisJc2tsX2NvbXB1dGVf dHJhbnNpdGlvbl93bShjcnRjX3N0YXRlLCAmd21fcGFyYW1zLCB3bSk7CiAKIAlyZXR1cm4gMDsK IH0KQEAgLTQ5OTQsNyArNDg5Myw2IEBAIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3V2 KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJCSBlbnVtIHBsYW5lX2lk IHBsYW5lX2lkKQogewogCXN0cnVjdCBza2xfcGxhbmVfd20gKndtID0gJmNydGNfc3RhdGUtPndt LnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07Ci0JdTE2IGRkYl9ibG9ja3MgPSBza2xfZGRi X2VudHJ5X3NpemUoJmNydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdKTsK IAlzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyB3bV9wYXJhbXM7CiAJaW50IHJldDsKIApAQCAtNTAwNiwx MCArNDkwNCw3IEBAIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3V2KHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQly ZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsCi0JCQkJ ICAgIGRkYl9ibG9ja3MsICZ3bV9wYXJhbXMsIHdtLT51dl93bSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKKwlza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUs ICZ3bV9wYXJhbXMsIHdtLT51dl93bSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU1MjEsMTMgKzU0 MTYsOSBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkK IAlpZiAocmV0IHx8ICFjaGFuZ2VkKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc2tsX2NvbXB1 dGVfZGRiKHN0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJLyoKIAkgKiBDYWxj dWxhdGUgV00ncyBmb3IgYWxsIHBpcGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyB0cmFuc2FjdGlv bi4KLQkgKiBOb3RlIHRoYXQgdGhlIEREQiBhbGxvY2F0aW9uIGFib3ZlIG1heSBoYXZlIGFkZGVk IG1vcmUgQ1JUQydzIHRoYXQKKwkgKiBOb3RlIHRoYXQgc2tsX2RkYl9hZGRfYWZmZWN0ZWRfcGlw ZXMgbWF5IGhhdmUgYWRkZWQgbW9yZSBDUlRDJ3MgdGhhdAogCSAqIHdlcmVuJ3Qgb3RoZXJ3aXNl IGJlaW5nIG1vZGlmaWVkIChhbmQgc2V0IGJpdHMgaW4gZGlydHlfcGlwZXMpIGlmCiAJICogcGlw ZSBhbGxvY2F0aW9ucyBoYWQgdG8gY2hhbmdlLgogCSAqLwpAQCAtNTU0OSw2ICs1NDQwLDEwIEBA IHNrbF9jb21wdXRlX3dtKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQkJcmVz dWx0cy0+ZGlydHlfcGlwZXMgfD0gZHJtX2NydGNfbWFzaygmY3J0Yy0+YmFzZSk7CiAJfQogCisJ cmV0ID0gc2tsX2NvbXB1dGVfZGRiKHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CiAJc2tsX3ByaW50X3dtX2NoYW5nZXMoc3RhdGUpOwogCiAJcmV0dXJuIDA7Ci0tIAoyLjE0LjQK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=