From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 13/27] drm/i915/execlists: Pack the count into the low bits of the port.request Date: Thu, 20 Apr 2017 15:58:19 +0100 Message-ID: <9fbb8175-e95f-13fa-5580-05993604c6bf@linux.intel.com> References: <20170419094143.16922-1-chris@chris-wilson.co.uk> <20170419094143.16922-14-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 119BC6E5DA for ; Thu, 20 Apr 2017 14:58:23 +0000 (UTC) In-Reply-To: <20170419094143.16922-14-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Mika Kuoppala List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE5LzA0LzIwMTcgMTA6NDEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBhZGQvcmVtb3ZlOiAx LzEgZ3Jvdy9zaHJpbms6IDUvNCB1cC9kb3duOiAzOTEvLTU3OCAoLTE4NykKPiBmdW5jdGlvbiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgICAgIG5ldyAgIGRlbHRhCj4g ZXhlY2xpc3RzX3N1Ym1pdF9wb3J0cyAgICAgICAgICAgICAgICAgICAgICAgMjYyICAgICA0NzEg ICAgKzIwOQo+IHBvcnRfYXNzaWduLmlzcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LSAgICAgMTM2ICAgICsxMzYKPiBjYXB0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDYzNDQgICAgNjM1OSAgICAgKzE1Cj4gcmVzZXRfY29tbW9uX3JpbmcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgNDM4ICAgICA0NTIgICAgICsxNAo+IGV4ZWNsaXN0c19zdWJtaXRf cmVxdWVzdCAgICAgICAgICAgICAgICAgICAgIDIyOCAgICAgMjM4ICAgICArMTAKPiBnZW44X2lu aXRfY29tbW9uX3JpbmcgICAgICAgICAgICAgICAgICAgICAgICAzMzQgICAgIDM0MSAgICAgICs3 Cj4gaW50ZWxfZW5naW5lX2lzX2lkbGUgICAgICAgICAgICAgICAgICAgICAgICAgMTA2ICAgICAx MDUgICAgICAtMQo+IGk5MTVfZW5naW5lX2luZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAg MjMxNCAgICAyMjkwICAgICAtMjQKPiBfX2k5MTVfZ2VtX3NldF93ZWRnZWRfQktMICAgICAgICAg ICAgICAgICAgICA0ODUgICAgIDQxMSAgICAgLTc0Cj4gaW50ZWxfbHJjX2lycV9oYW5kbGVyICAg ICAgICAgICAgICAgICAgICAgICAxNzg5ICAgIDE2MDQgICAgLTE4NQo+IGV4ZWNsaXN0c191cGRh dGVfY29udGV4dCAgICAgICAgICAgICAgICAgICAgIDI5NCAgICAgICAtICAgIC0yOTQKPgo+IFRo ZSBtb3N0IGltcG9ydGFudCBjaGFuZ2UgdGhlcmUgaXMgdGhlIGltcHJvdmUgdG8gdGhlCj4gaW50 ZWxfbHJjX2lycV9oYW5kbGVyIGFuZCBleGNjbGlzdF9zdWJtaXRfcG9ydHMgKG5ldCBpbXByb3Zl bWVudCBzaW5jZQo+IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dCBpcyBub3cgaW5saW5lZCkuCj4K PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K PiBDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+Cj4gQ2M6IFR2cnRr byBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICB8ICAzMiArKysrLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICB8ICAgNiArLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgICAgfCAgMTMgKystCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyB8ICAxOCArKy0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAgICAgfCAxMzMgKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgIHwg ICA4ICstCj4gIDcgZmlsZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMoKyksIDkyIGRlbGV0aW9u cygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCA4NzBjNDcwMTc3 YjUuLjBiNWQ3MTQyZDhkOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4g QEAgLTMzMTUsNiArMzMxNSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9lbmdpbmVfaW5mbyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgCQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3Rz KSB7Cj4gIAkJCXUzMiBwdHIsIHJlYWQsIHdyaXRlOwo+ICAJCQlzdHJ1Y3QgcmJfbm9kZSAqcmI7 Cj4gKwkJCXVuc2lnbmVkIGludCBpZHg7Cj4KPiAgCQkJc2VxX3ByaW50ZihtLCAiXHRFeGVjbGlz dCBzdGF0dXM6IDB4JTA4eCAlMDh4XG4iLAo+ICAJCQkJICAgSTkxNV9SRUFEKFJJTkdfRVhFQ0xJ U1RfU1RBVFVTX0xPKGVuZ2luZSkpLAo+IEBAIC0zMzMyLDggKzMzMzMsNyBAQCBzdGF0aWMgaW50 IGk5MTVfZW5naW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAkJ CWlmIChyZWFkID4gd3JpdGUpCj4gIAkJCQl3cml0ZSArPSBHRU44X0NTQl9FTlRSSUVTOwo+ICAJ CQl3aGlsZSAocmVhZCA8IHdyaXRlKSB7Cj4gLQkJCQl1bnNpZ25lZCBpbnQgaWR4ID0gKytyZWFk ICUgR0VOOF9DU0JfRU5UUklFUzsKPiAtCj4gKwkJCQlpZHggPSArK3JlYWQgJSBHRU44X0NTQl9F TlRSSUVTOwo+ICAJCQkJc2VxX3ByaW50ZihtLCAiXHRFeGVjbGlzdCBDU0JbJWRdOiAweCUwOHgs IGNvbnRleHQ6ICVkXG4iLAo+ICAJCQkJCSAgIGlkeCwKPiAgCQkJCQkgICBJOTE1X1JFQUQoUklO R19DT05URVhUX1NUQVRVU19CVUZfTE8oZW5naW5lLCBpZHgpKSwKPiBAQCAtMzM0MSwyMSArMzM0 MSwxOSBAQCBzdGF0aWMgaW50IGk5MTVfZW5naW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2 b2lkICp1bnVzZWQpCj4gIAkJCX0KPgo+ICAJCQlyY3VfcmVhZF9sb2NrKCk7Cj4gLQkJCXJxID0g UkVBRF9PTkNFKGVuZ2luZS0+ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0KTsKPiAtCQkJaWYgKHJx KSB7Cj4gLQkJCQlzZXFfcHJpbnRmKG0sICJcdFx0RUxTUFswXSBjb3VudD0lZCwgIiwKPiAtCQkJ CQkgICBlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMF0uY291bnQpOwo+IC0JCQkJcHJpbnRfcmVxdWVz dChtLCBycSwgInJxOiAiKTsKPiAtCQkJfSBlbHNlIHsKPiAtCQkJCXNlcV9wcmludGYobSwgIlx0 XHRFTFNQWzBdIGlkbGVcbiIpOwo+IC0JCQl9Cj4gLQkJCXJxID0gUkVBRF9PTkNFKGVuZ2luZS0+ ZXhlY2xpc3RfcG9ydFsxXS5yZXF1ZXN0KTsKPiAtCQkJaWYgKHJxKSB7Cj4gLQkJCQlzZXFfcHJp bnRmKG0sICJcdFx0RUxTUFsxXSBjb3VudD0lZCwgIiwKPiAtCQkJCQkgICBlbmdpbmUtPmV4ZWNs aXN0X3BvcnRbMV0uY291bnQpOwo+IC0JCQkJcHJpbnRfcmVxdWVzdChtLCBycSwgInJxOiAiKTsK PiAtCQkJfSBlbHNlIHsKPiAtCQkJCXNlcV9wcmludGYobSwgIlx0XHRFTFNQWzFdIGlkbGVcbiIp Owo+ICsJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZW5naW5lLT5leGVjbGlzdF9w b3J0KTsgaWR4KyspIHsKPiArCQkJCXVuc2lnbmVkIGludCBjb3VudDsKPiArCj4gKwkJCQlycSA9 IHBvcnRfdW5wYWNrKCZlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbaWR4XSwKPiArCQkJCQkJICZjb3Vu dCk7Cj4gKwkJCQlpZiAocnEpIHsKPiArCQkJCQlzZXFfcHJpbnRmKG0sICJcdFx0RUxTUFslZF0g Y291bnQ9JWQsICIsCj4gKwkJCQkJCSAgIGlkeCwgY291bnQpOwo+ICsJCQkJCXByaW50X3JlcXVl c3QobSwgcnEsICJycTogIik7Cj4gKwkJCQl9IGVsc2Ugewo+ICsJCQkJCXNlcV9wcmludGYobSwg Ilx0XHRFTFNQWyVkXSBpZGxlXG4iLAo+ICsJCQkJCQkgICBpZHgpOwo+ICsJCQkJfQo+ICAJCQl9 Cj4gIAkJCXJjdV9yZWFkX3VubG9jaygpOwo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5k ZXggMmJjNzIzMTRjZGQxLi5mNmRmNDAyYTUyNDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKPiBAQCAtMzAzOSwxMiArMzAzOSwxNCBAQCBzdGF0aWMgdm9pZCBlbmdpbmVfc2V0X3dlZGdl ZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkgKi8KPgo+ICAJaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cykgewo+ICsJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZW5n aW5lLT5leGVjbGlzdF9wb3J0Owo+ICAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwkJdW5zaWdu ZWQgaW50IG47Cj4KPiAgCQlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT50aW1lbGluZS0+bG9j aywgZmxhZ3MpOwo+Cj4gLQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQoZW5naW5lLT5leGVjbGlzdF9w b3J0WzBdLnJlcXVlc3QpOwo+IC0JCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KGVuZ2luZS0+ZXhlY2xp c3RfcG9ydFsxXS5yZXF1ZXN0KTsKPiArCQlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShlbmdp bmUtPmV4ZWNsaXN0X3BvcnQpOyBuKyspCj4gKwkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHBvcnRf cmVxdWVzdCgmcG9ydFtuXSkpOwo+ICAJCW1lbXNldChlbmdpbmUtPmV4ZWNsaXN0X3BvcnQsIDAs IHNpemVvZihlbmdpbmUtPmV4ZWNsaXN0X3BvcnQpKTsKPiAgCQllbmdpbmUtPmV4ZWNsaXN0X3F1 ZXVlID0gUkJfUk9PVDsKPiAgCQllbmdpbmUtPmV4ZWNsaXN0X2ZpcnN0ID0gTlVMTDsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBpbmRleCA0YjI0N2IwNTBkY2QuLmM1Y2Rj NjYxMWQ3ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJv ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+IEBAIC0x MzI0LDEyICsxMzI0LDE3IEBAIHN0YXRpYyB2b2lkIGVuZ2luZV9yZWNvcmRfcmVxdWVzdHMoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICBzdGF0aWMgdm9pZCBlcnJvcl9yZWNvcmRf ZW5naW5lX2V4ZWNsaXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAkJCQkJ ICBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSkKPiAgewo+ICsJY29uc3Qgc3RydWN0 IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBlbmdpbmUtPmV4ZWNsaXN0X3BvcnQ7Cj4gIAl1bnNpZ25l ZCBpbnQgbjsKPgo+IC0JZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoZW5naW5lLT5leGVjbGlz dF9wb3J0KTsgbisrKQo+IC0JCWlmIChlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbbl0ucmVxdWVzdCkK PiAtCQkJcmVjb3JkX3JlcXVlc3QoZW5naW5lLT5leGVjbGlzdF9wb3J0W25dLnJlcXVlc3QsCj4g LQkJCQkgICAgICAgJmVlLT5leGVjbGlzdFtuXSk7Cj4gKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlf U0laRShlbmdpbmUtPmV4ZWNsaXN0X3BvcnQpOyBuKyspIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJxID0gcG9ydF9yZXF1ZXN0KCZwb3J0W25dKTsKPiArCj4gKwkJaWYgKCFy cSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXJlY29yZF9yZXF1ZXN0KHJxLCAmZWUtPmV4ZWNsaXN0 W25dKTsKPiArCX0KPiAgfQo+Cj4gIHN0YXRpYyB2b2lkIHJlY29yZF9jb250ZXh0KHN0cnVjdCBk cm1faTkxNV9lcnJvcl9jb250ZXh0ICplLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1 Y19zdWJtaXNzaW9uLmMKPiBpbmRleCAxNjQyZmZmOWNmMTMuLjM3MDM3M2M5N2I4MSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPiBAQCAtNjU4LDcg KzY1OCw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gIHN0YXRpYyBib29sIGk5MTVfZ3VjX2RlcXVldWUoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgZXhlY2xpc3RfcG9y dCAqcG9ydCA9IGVuZ2luZS0+ZXhlY2xpc3RfcG9ydDsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqbGFzdCA9IHBvcnRbMF0ucmVxdWVzdDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqbGFzdCA9IHBvcnRbMF0ucmVxdWVzdF9jb3VudDsKCkl0J3MgY29uZnVzaW5nIHRo YXQgaW4gdGhpcyBuZXcgc2NoZW1lIHNvbWV0aW1lcyB3ZSBoYXZlIGRpcmVjdCBhY2Nlc3MgCnRv IHRoZSByZXF1ZXN0IGFuZCBzb21ldGltZXMgd2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBwb3J0 X3JlcXVlc3QgbWFjcm8uCgpTbyBtYXliZSB3ZSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgcG9ydF9y ZXF1ZXN0IG1hY3JvLiBIbSwgY291bGQgd2UgCmludmVudCBhIG5ldyB0eXBlIHRvIGhlbHAgZW5m b3JjZSB0aGF0PyBMaWtlOgoKc3RydWN0IGRybV9pOTE1X2dlbV9wb3J0X3JlcXVlc3Rfc2xvdCB7 CglzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcV9jb3VudDsKfTsKCkFuZCB0aGVuIGV4 ZWNsaXN0IHBvcnQgd291bGQgY29udGFpbiB0aGVzZSBhbmQgaGVscGVycyB3b3VsZCBuZWVkIHRv IGJlIApmdW5jdGlvbnM/CgpJJ3ZlIGFsc28gbm90aWNlZCBzb21lIEdWVC9HdUMgcGF0Y2hlcyB3 aGljaCBzb3VuZGVkIGxpa2UgdGhleSBhcmUgCmFkZGluZyB0aGUgc2FtZSBzaW5nbGUgc3VibWlz c2lvbiBjb25zdHJhaW50cyBzbyBtYXliZSBub3cgaXMgdGhlIHRpbWUgCnRvIHVuaWZ5IHRoZSBk ZXF1ZXVlPyAoSGF2ZW4ndCBsb29rZWQgYXQgdGhvc2UgcGF0Y2hlcyBkZWVwZXIgdGhhbiB0aGUg CnN1YmplY3QgbGluZSBzbyBtaWdodCBiZSB3cm9uZy4pCgpOb3Qgc3VyZSAxMDAlIG9mIGFsbCB0 aGUgYWJvdmUsIHdvdWxkIG5lZWQgdG8gc2tldGNoIGl0LiBXaGF0IGFyZSB5b3VyIAp0aG91Z2h0 cz8KCj4gIAlzdHJ1Y3QgcmJfbm9kZSAqcmI7Cj4gIAlib29sIHN1Ym1pdCA9IGZhbHNlOwo+Cj4g QEAgLTY3Miw3ICs2NzIsNyBAQCBzdGF0aWMgYm9vbCBpOTE1X2d1Y19kZXF1ZXVlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQkJaWYgKHBvcnQgIT0gZW5naW5lLT5leGVjbGlz dF9wb3J0KQo+ICAJCQkJYnJlYWs7Cj4KPiAtCQkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJnBv cnQtPnJlcXVlc3QsIGxhc3QpOwo+ICsJCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmcG9ydC0+ cmVxdWVzdF9jb3VudCwgbGFzdCk7Cj4gIAkJCW5lc3RlZF9lbmFibGVfc2lnbmFsaW5nKGxhc3Qp Owo+ICAJCQlwb3J0Kys7Cj4gIAkJfQo+IEBAIC02ODgsNyArNjg4LDcgQEAgc3RhdGljIGJvb2wg aTkxNV9ndWNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJc3Vi bWl0ID0gdHJ1ZTsKPiAgCX0KPiAgCWlmIChzdWJtaXQpIHsKPiAtCQlpOTE1X2dlbV9yZXF1ZXN0 X2Fzc2lnbigmcG9ydC0+cmVxdWVzdCwgbGFzdCk7Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9hc3Np Z24oJnBvcnQtPnJlcXVlc3RfY291bnQsIGxhc3QpOwo+ICAJCW5lc3RlZF9lbmFibGVfc2lnbmFs aW5nKGxhc3QpOwo+ICAJCWVuZ2luZS0+ZXhlY2xpc3RfZmlyc3QgPSByYjsKPiAgCX0KPiBAQCAt NzA1LDE3ICs3MDUsMTkgQEAgc3RhdGljIHZvaWQgaTkxNV9ndWNfaXJxX2hhbmRsZXIodW5zaWdu ZWQgbG9uZyBkYXRhKQo+ICAJYm9vbCBzdWJtaXQ7Cj4KPiAgCWRvIHsKPiAtCQlycSA9IHBvcnRb MF0ucmVxdWVzdDsKPiArCQlycSA9IHBvcnRbMF0ucmVxdWVzdF9jb3VudDsKPiAgCQl3aGlsZSAo cnEgJiYgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocnEpKSB7Cj4gIAkJCXRyYWNlX2k5MTVf Z2VtX3JlcXVlc3Rfb3V0KHJxKTsKPiAgCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocnEpOwo+IC0J CQlwb3J0WzBdLnJlcXVlc3QgPSBwb3J0WzFdLnJlcXVlc3Q7Cj4gLQkJCXBvcnRbMV0ucmVxdWVz dCA9IE5VTEw7Cj4gLQkJCXJxID0gcG9ydFswXS5yZXF1ZXN0Owo+ICsKPiArCQkJcG9ydFswXS5y ZXF1ZXN0X2NvdW50ID0gcG9ydFsxXS5yZXF1ZXN0X2NvdW50Owo+ICsJCQlwb3J0WzFdLnJlcXVl c3RfY291bnQgPSBOVUxMOwo+ICsKPiArCQkJcnEgPSBwb3J0WzBdLnJlcXVlc3RfY291bnQ7Cj4g IAkJfQo+Cj4gIAkJc3VibWl0ID0gZmFsc2U7Cj4gLQkJaWYgKCFwb3J0WzFdLnJlcXVlc3QpCj4g KwkJaWYgKCFwb3J0WzFdLnJlcXVlc3RfY291bnQpCj4gIAkJCXN1Ym1pdCA9IGk5MTVfZ3VjX2Rl cXVldWUoZW5naW5lKTsKPiAgCX0gd2hpbGUgKHN1Ym1pdCk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+IGluZGV4IDQwMjc2OWQ5ZDg0MC4uMTAwMjdkMGEwOWI1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKPiBAQCAtMTE0OCw3 ICsxMTQ4LDcgQEAgYm9vbCBpbnRlbF9lbmdpbmVfaXNfaWRsZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIAkJcmV0dXJuIGZhbHNlOwo+Cj4gIAkvKiBCb3RoIHBvcnRzIGRyYWlu ZWQsIG5vIG1vcmUgRUxTUCBzdWJtaXNzaW9uPyAqLwo+IC0JaWYgKGVuZ2luZS0+ZXhlY2xpc3Rf cG9ydFswXS5yZXF1ZXN0KQo+ICsJaWYgKHBvcnRfcmVxdWVzdCgmZW5naW5lLT5leGVjbGlzdF9w b3J0WzBdKSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4KPiAgCS8qIFJpbmcgc3RvcHBlZD8gKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGluZGV4IDdkZjI3OGZlNDkyZS4uNjkyOTlmYmFiNGY5 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMzQyLDM5ICszNDIsMzIgQEAg c3RhdGljIHU2NCBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpycSkKPgo+ICBzdGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0X3BvcnRzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICAJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBv cnQgPSBlbmdpbmUtPmV4ZWNsaXN0X3BvcnQ7Cj4gIAl1MzIgX19pb21lbSAqZWxzcCA9Cj4gLQkJ ZGV2X3ByaXYtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0VMU1AoZW5naW5lKSk7 Cj4gLQl1NjQgZGVzY1syXTsKPiAtCj4gLQlHRU1fQlVHX09OKHBvcnRbMF0uY291bnQgPiAxKTsK PiAtCWlmICghcG9ydFswXS5jb3VudCkKPiAtCQlleGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hh bmdlKHBvcnRbMF0ucmVxdWVzdCwKPiAtCQkJCQkJSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9JTik7 Cj4gLQlkZXNjWzBdID0gZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHBvcnRbMF0ucmVxdWVzdCk7 Cj4gLQlHRU1fREVCVUdfRVhFQyhwb3J0WzBdLmNvbnRleHRfaWQgPSB1cHBlcl8zMl9iaXRzKGRl c2NbMF0pKTsKPiAtCXBvcnRbMF0uY291bnQrKzsKPiAtCj4gLQlpZiAocG9ydFsxXS5yZXF1ZXN0 KSB7Cj4gLQkJR0VNX0JVR19PTihwb3J0WzFdLmNvdW50KTsKPiAtCQlleGVjbGlzdHNfY29udGV4 dF9zdGF0dXNfY2hhbmdlKHBvcnRbMV0ucmVxdWVzdCwKPiAtCQkJCQkJSU5URUxfQ09OVEVYVF9T Q0hFRFVMRV9JTik7Cj4gLQkJZGVzY1sxXSA9IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChwb3J0 WzFdLnJlcXVlc3QpOwo+IC0JCUdFTV9ERUJVR19FWEVDKHBvcnRbMV0uY29udGV4dF9pZCA9IHVw cGVyXzMyX2JpdHMoZGVzY1sxXSkpOwo+IC0JCXBvcnRbMV0uY291bnQgPSAxOwo+IC0JfSBlbHNl IHsKPiAtCQlkZXNjWzFdID0gMDsKPiAtCX0KPiAtCUdFTV9CVUdfT04oZGVzY1swXSA9PSBkZXNj WzFdKTsKPiAtCj4gLQkvKiBZb3UgbXVzdCBhbHdheXMgd3JpdGUgYm90aCBkZXNjcmlwdG9ycyBp biB0aGUgb3JkZXIgYmVsb3cuICovCj4gLQl3cml0ZWwodXBwZXJfMzJfYml0cyhkZXNjWzFdKSwg ZWxzcCk7Cj4gLQl3cml0ZWwobG93ZXJfMzJfYml0cyhkZXNjWzFdKSwgZWxzcCk7Cj4gKwkJZW5n aW5lLT5pOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19FTFNQKGVuZ2luZSkp Owo+ICsJdW5zaWduZWQgaW50IG47Cj4gKwo+ICsJZm9yIChuID0gQVJSQVlfU0laRShlbmdpbmUt PmV4ZWNsaXN0X3BvcnQpOyBuLS07ICkgewoKV2UgY291bGQgYWxzbyBhZGQgZm9yX2VhY2hfcmVx X3BvcnQgb3Igc29tZXRoaW5nLCB0byBpdGVyYXRlIGFuZCB1bnBhY2sgCmVpdGhlciByZXEgb25s eSBvciB0aGUgY291bnQgYXMgd2VsbD8KClByZWxpbWluYXJ5IHBhc3Mgb25seSBiZWZvcmUgdGhl IG10Zy4gOikKClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpycTsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwkJdTY0IGRlc2M7Cj4gKwo+ICsJ CXJxID0gcG9ydF91bnBhY2soJnBvcnRbbl0sICZjb3VudCk7Cj4gKwkJaWYgKHJxKSB7Cj4gKwkJ CUdFTV9CVUdfT04oY291bnQgPiAhbik7Cj4gKwkJCWlmICghY291bnQrKykKPiArCQkJCWV4ZWNs aXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfSU4p Owo+ICsJCQlwb3J0W25dLnJlcXVlc3RfY291bnQgPSBwb3J0X3BhY2socnEsIGNvdW50KTsKPiAr CQkJZGVzYyA9IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChycSk7Cj4gKwkJCUdFTV9ERUJVR19F WEVDKHBvcnRbbl0uY29udGV4dF9pZCA9IHVwcGVyXzMyX2JpdHMoZGVzYykpOwo+ICsJCX0gZWxz ZSB7Cj4gKwkJCUdFTV9CVUdfT04oIW4pOwo+ICsJCQlkZXNjID0gMDsKPiArCQl9Cj4KPiAtCXdy aXRlbCh1cHBlcl8zMl9iaXRzKGRlc2NbMF0pLCBlbHNwKTsKPiAtCS8qIFRoZSBjb250ZXh0IGlz IGF1dG9tYXRpY2FsbHkgbG9hZGVkIGFmdGVyIHRoZSBmb2xsb3dpbmcgKi8KPiAtCXdyaXRlbChs b3dlcl8zMl9iaXRzKGRlc2NbMF0pLCBlbHNwKTsKPiArCQl3cml0ZWwodXBwZXJfMzJfYml0cyhk ZXNjKSwgZWxzcCk7Cj4gKwkJd3JpdGVsKGxvd2VyXzMyX2JpdHMoZGVzYyksIGVsc3ApOwo+ICsJ fQo+ICB9Cj4KPiAgc3RhdGljIGJvb2wgY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24oY29uc3Qg c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiBAQCAtMzk1LDYgKzM4OCwxOCBAQCBzdGF0 aWMgYm9vbCBjYW5fbWVyZ2VfY3R4KGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpwcmV2 LAo+ICAJcmV0dXJuIHRydWU7Cj4gIH0KPgo+ICtzdGF0aWMgdm9pZCBwb3J0X2Fzc2lnbihzdHJ1 Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCwKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpycSkKPiArewo+ICsJR0VNX0JVR19PTihycSA9PSBwb3J0X3JlcXVlc3QocG9ydCkpOwo+ICsK PiArCWlmIChwb3J0LT5yZXF1ZXN0X2NvdW50KQo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHBv cnRfcmVxdWVzdChwb3J0KSk7Cj4gKwo+ICsJcG9ydC0+cmVxdWVzdF9jb3VudCA9Cj4gKwkJcG9y dF9wYWNrKGk5MTVfZ2VtX3JlcXVlc3RfZ2V0KHJxKSwgcG9ydF9jb3VudChwb3J0KSk7Cj4gK30K PiArCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0Owo+ IEBAIC00MDIsNyArNDA3LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJc3RydWN0IHJiX25vZGUgKnJiOwo+ICAJYm9v bCBzdWJtaXQgPSBmYWxzZTsKPgo+IC0JbGFzdCA9IHBvcnQtPnJlcXVlc3Q7Cj4gKwlsYXN0ID0g cG9ydF9yZXF1ZXN0KHBvcnQpOwo+ICAJaWYgKGxhc3QpCj4gIAkJLyogV2FJZGxlTGl0ZVJlc3Rv cmU6YmR3LHNrbAo+ICAJCSAqIEFwcGx5IHRoZSB3YSBOT09QcyB0byBwcmV2ZW50IHJpbmc6SEVB RCA9PSByZXE6VEFJTAo+IEBAIC00MTIsNyArNDE3LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3Rz X2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCSAqLwo+ICAJCWxh c3QtPnRhaWwgPSBsYXN0LT53YV90YWlsOwo+Cj4gLQlHRU1fQlVHX09OKHBvcnRbMV0ucmVxdWVz dCk7Cj4gKwlHRU1fQlVHX09OKHBvcnRbMV0ucmVxdWVzdF9jb3VudCk7Cj4KPiAgCS8qIEhhcmR3 YXJlIHN1Ym1pc3Npb24gaXMgdGhyb3VnaCAyIHBvcnRzLiBDb25jZXB0dWFsbHkgZWFjaCBwb3J0 Cj4gIAkgKiBoYXMgYSAoUklOR19TVEFSVCwgUklOR19IRUFELCBSSU5HX1RBSUwpIHR1cGxlLiBS SU5HX1NUQVJUIGlzCj4gQEAgLTQ2OSw3ICs0NzQsOCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNf ZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4KPiAgCQkJR0VNX0JVR19P TihsYXN0LT5jdHggPT0gY3Vyc29yLT5jdHgpOwo+Cj4gLQkJCWk5MTVfZ2VtX3JlcXVlc3RfYXNz aWduKCZwb3J0LT5yZXF1ZXN0LCBsYXN0KTsKPiArCQkJaWYgKHN1Ym1pdCkKPiArCQkJCXBvcnRf YXNzaWduKHBvcnQsIGxhc3QpOwo+ICAJCQlwb3J0Kys7Cj4gIAkJfQo+Cj4gQEAgLTQ4NCw3ICs0 OTAsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIAkJc3VibWl0ID0gdHJ1ZTsKPiAgCX0KPiAgCWlmIChzdWJtaXQpIHsK PiAtCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmcG9ydC0+cmVxdWVzdCwgbGFzdCk7Cj4gKwkJ cG9ydF9hc3NpZ24ocG9ydCwgbGFzdCk7Cj4gIAkJZW5naW5lLT5leGVjbGlzdF9maXJzdCA9IHJi Owo+ICAJfQo+ICAJc3Bpbl91bmxvY2tfaXJxKCZlbmdpbmUtPnRpbWVsaW5lLT5sb2NrKTsKPiBA QCAtNDk1LDE0ICs1MDEsMTQgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Cj4gIHN0YXRpYyBib29sIGV4ZWNsaXN0c19lbHNw X2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gLQlyZXR1cm4gIWVu Z2luZS0+ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0Owo+ICsJcmV0dXJuICFwb3J0X2NvdW50KCZl bmdpbmUtPmV4ZWNsaXN0X3BvcnRbMF0pOwo+ICB9Cj4KPiAgc3RhdGljIGJvb2wgZXhlY2xpc3Rz X2Vsc3BfcmVhZHkoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4g IAljb25zdCBzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGVuZ2luZS0+ZXhlY2xpc3RfcG9y dDsKPgo+IC0JcmV0dXJuIHBvcnRbMF0uY291bnQgKyBwb3J0WzFdLmNvdW50IDwgMjsKPiArCXJl dHVybiBwb3J0X2NvdW50KCZwb3J0WzBdKSArIHBvcnRfY291bnQoJnBvcnRbMV0pIDwgMjsKPiAg fQo+Cj4gIC8qCj4gQEAgLTU1Miw3ICs1NTgsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9scmNfaXJx X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQo+ICAJCXRhaWwgPSBHRU44X0NTQl9XUklURV9Q VFIoaGVhZCk7Cj4gIAkJaGVhZCA9IEdFTjhfQ1NCX1JFQURfUFRSKGhlYWQpOwo+ICAJCXdoaWxl IChoZWFkICE9IHRhaWwpIHsKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsK PiAgCQkJdW5zaWduZWQgaW50IHN0YXR1czsKPiArCQkJdW5zaWduZWQgaW50IGNvdW50Owo+Cj4g IAkJCWlmICgrK2hlYWQgPT0gR0VOOF9DU0JfRU5UUklFUykKPiAgCQkJCWhlYWQgPSAwOwo+IEBA IC01ODIsMjAgKzU5MCwyNCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIodW5z aWduZWQgbG9uZyBkYXRhKQo+ICAJCQlHRU1fREVCVUdfQlVHX09OKHJlYWRsKGJ1ZiArIDIgKiBo ZWFkICsgMSkgIT0KPiAgCQkJCQkgcG9ydFswXS5jb250ZXh0X2lkKTsKPgo+IC0JCQlHRU1fQlVH X09OKHBvcnRbMF0uY291bnQgPT0gMCk7Cj4gLQkJCWlmICgtLXBvcnRbMF0uY291bnQgPT0gMCkg ewo+ICsJCQlycSA9IHBvcnRfdW5wYWNrKCZwb3J0WzBdLCAmY291bnQpOwo+ICsJCQlHRU1fQlVH X09OKGNvdW50ID09IDApOwo+ICsJCQlpZiAoLS1jb3VudCA9PSAwKSB7Cj4gIAkJCQlHRU1fQlVH X09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQpOwo+IC0JCQkJR0VNX0JVR19P TighaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocG9ydFswXS5yZXF1ZXN0KSk7Cj4gLQkJCQll eGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKHBvcnRbMF0ucmVxdWVzdCwKPiAtCQkJCQkJ CQlJTlRFTF9DT05URVhUX1NDSEVEVUxFX09VVCk7Cj4gKwkJCQlHRU1fQlVHX09OKCFpOTE1X2dl bV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpOwo+ICsJCQkJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVz X2NoYW5nZShycSwgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQpOwo+ICsKPiArCQkJCXRyYWNl X2k5MTVfZ2VtX3JlcXVlc3Rfb3V0KHJxKTsKPiArCQkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHJx KTsKPgo+IC0JCQkJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9vdXQocG9ydFswXS5yZXF1ZXN0KTsK PiAtCQkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHBvcnRbMF0ucmVxdWVzdCk7Cj4gIAkJCQlwb3J0 WzBdID0gcG9ydFsxXTsKPiAgCQkJCW1lbXNldCgmcG9ydFsxXSwgMCwgc2l6ZW9mKHBvcnRbMV0p KTsKPiArCQkJfSBlbHNlIHsKPiArCQkJCXBvcnRbMF0ucmVxdWVzdF9jb3VudCA9IHBvcnRfcGFj ayhycSwgY291bnQpOwo+ICAJCQl9Cj4KPiAtCQkJR0VNX0JVR19PTihwb3J0WzBdLmNvdW50ID09 IDAgJiYKPiArCQkJLyogQWZ0ZXIgdGhlIGZpbmFsIGVsZW1lbnQsIHRoZSBodyBzaG91bGQgYmUg aWRsZSAqLwo+ICsJCQlHRU1fQlVHX09OKHBvcnRfY291bnQoJnBvcnRbMF0pID09IDAgJiYKPiAg CQkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9JRExFKSk7Cj4gIAkJfQo+ Cj4gQEAgLTExNDgsMTEgKzExNjAsNiBAQCBzdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3Vu ZF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlyZXR1cm4gcmV0Owo+ICB9 Cj4KPiAtc3RhdGljIHUzMiBwb3J0X3NlcW5vKHN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0KQo+ IC17Cj4gLQlyZXR1cm4gcG9ydC0+cmVxdWVzdCA/IHBvcnQtPnJlcXVlc3QtPmdsb2JhbF9zZXFu byA6IDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQgZ2VuOF9pbml0X2NvbW1vbl9yaW5nKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IEBAIC0xMTc3LDEyICsxMTg0LDIyIEBAIHN0 YXRpYyBpbnQgZ2VuOF9pbml0X2NvbW1vbl9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgCS8qIEFmdGVyIGEgR1BVIHJlc2V0LCB3ZSBtYXkgaGF2ZSByZXF1ZXN0cyB0byBy ZXBsYXkgKi8KPiAgCWNsZWFyX2JpdChFTkdJTkVfSVJRX0VYRUNMSVNULCAmZW5naW5lLT5pcnFf cG9zdGVkKTsKPiAgCWlmICghaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Npb24gJiYgIWV4ZWNsaXN0 c19lbHNwX2lkbGUoZW5naW5lKSkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoIlJlc3RhcnRpbmcg JXMgZnJvbSByZXF1ZXN0cyBbMHgleCwgMHgleF1cbiIsCj4gLQkJCQkgZW5naW5lLT5uYW1lLAo+ IC0JCQkJIHBvcnRfc2Vxbm8oJmVuZ2luZS0+ZXhlY2xpc3RfcG9ydFswXSksCj4gLQkJCQkgcG9y dF9zZXFubygmZW5naW5lLT5leGVjbGlzdF9wb3J0WzFdKSk7Cj4gLQkJZW5naW5lLT5leGVjbGlz dF9wb3J0WzBdLmNvdW50ID0gMDsKPiAtCQllbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMV0uY291bnQg PSAwOwo+ICsJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZW5naW5lLT5leGVjbGlzdF9w b3J0Owo+ICsJCXVuc2lnbmVkIGludCBuOwo+ICsKPiArCQlmb3IgKG4gPSAwOyBuIDwgQVJSQVlf U0laRShlbmdpbmUtPmV4ZWNsaXN0X3BvcnQpOyBuKyspIHsKPiArCQkJaWYgKCFwb3J0W25dLnJl cXVlc3RfY291bnQpCj4gKwkJCQlicmVhazsKPiArCj4gKwkJCURSTV9ERUJVR19EUklWRVIoIlJl c3RhcnRpbmcgJXMgZnJvbSAweCV4IFslZF1cbiIsCj4gKwkJCQkJIGVuZ2luZS0+bmFtZSwKPiAr CQkJCQkgcG9ydF9yZXF1ZXN0KCZwb3J0W25dKS0+Z2xvYmFsX3NlcW5vLAo+ICsJCQkJCSBuKTsK PiArCj4gKwkJCS8qIERpc2NhcmQgdGhlIGN1cnJlbnQgaW5mbGlnaHQgY291bnQgKi8KPiArCQkJ cG9ydFtuXS5yZXF1ZXN0X2NvdW50ID0gcG9ydF9yZXF1ZXN0KCZwb3J0W25dKTsKPiArCQl9Cj4g Kwo+ICAJCWV4ZWNsaXN0c19zdWJtaXRfcG9ydHMoZW5naW5lKTsKPiAgCX0KPgo+IEBAIC0xMjYx LDEzICsxMjc4LDEzIEBAIHN0YXRpYyB2b2lkIHJlc2V0X2NvbW1vbl9yaW5nKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCWludGVsX3JpbmdfdXBkYXRlX3NwYWNlKHJlcXVlc3Qt PnJpbmcpOwo+Cj4gIAkvKiBDYXRjaCB1cCB3aXRoIGFueSBtaXNzZWQgY29udGV4dC1zd2l0Y2gg aW50ZXJydXB0cyAqLwo+IC0JaWYgKHJlcXVlc3QtPmN0eCAhPSBwb3J0WzBdLnJlcXVlc3QtPmN0 eCkgewo+IC0JCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHBvcnRbMF0ucmVxdWVzdCk7Cj4gKwlpZiAo cmVxdWVzdC0+Y3R4ICE9IHBvcnRfcmVxdWVzdCgmcG9ydFswXSktPmN0eCkgewo+ICsJCWk5MTVf Z2VtX3JlcXVlc3RfcHV0KHBvcnRfcmVxdWVzdCgmcG9ydFswXSkpOwo+ICAJCXBvcnRbMF0gPSBw b3J0WzFdOwo+ICAJCW1lbXNldCgmcG9ydFsxXSwgMCwgc2l6ZW9mKHBvcnRbMV0pKTsKPiAgCX0K Pgo+IC0JR0VNX0JVR19PTihyZXF1ZXN0LT5jdHggIT0gcG9ydFswXS5yZXF1ZXN0LT5jdHgpOwo+ ICsJR0VNX0JVR19PTihyZXF1ZXN0LT5jdHggIT0gcG9ydF9yZXF1ZXN0KCZwb3J0WzBdKS0+Y3R4 KTsKPgo+ICAJLyogUmVzZXQgV2FJZGxlTGl0ZVJlc3RvcmU6YmR3LHNrbCBhcyB3ZWxsICovCj4g IAlyZXF1ZXN0LT50YWlsID0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5o Cj4gaW5kZXggZDI1Yjg4NDY3ZTVlLi4zOWI3MzNlNWNmZDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gQEAgLTM3Nyw4ICszNzcsMTIgQEAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyB7Cj4gIAkvKiBFeGVjbGlzdHMgKi8KPiAgCXN0cnVjdCB0YXNrbGV0X3N0 cnVjdCBpcnFfdGFza2xldDsKPiAgCXN0cnVjdCBleGVjbGlzdF9wb3J0IHsKPiAtCQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4gLQkJdW5zaWduZWQgaW50IGNvdW50Owo+ ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdF9jb3VudDsKCldvdWxkIHJl cSh1ZXN0KV9zbG90IG1heWJlIGJlIGJldHRlcj8KCj4gKyNkZWZpbmUgRVhFQ0xJU1RfQ09VTlRf QklUUyAyCj4gKyNkZWZpbmUgcG9ydF9yZXF1ZXN0KHApIHB0cl9tYXNrX2JpdHMoKHApLT5yZXF1 ZXN0X2NvdW50LCBFWEVDTElTVF9DT1VOVF9CSVRTKQo+ICsjZGVmaW5lIHBvcnRfY291bnQocCkg cHRyX3VubWFza19iaXRzKChwKS0+cmVxdWVzdF9jb3VudCwgRVhFQ0xJU1RfQ09VTlRfQklUUykK PiArI2RlZmluZSBwb3J0X3BhY2socnEsIGNvdW50KSBwdHJfcGFja19iaXRzKHJxLCBjb3VudCwg RVhFQ0xJU1RfQ09VTlRfQklUUykKPiArI2RlZmluZSBwb3J0X3VucGFjayhwLCBjb3VudCkgcHRy X3VucGFja19iaXRzKChwKS0+cmVxdWVzdF9jb3VudCwgY291bnQsIEVYRUNMSVNUX0NPVU5UX0JJ VFMpCj4gIAkJR0VNX0RFQlVHX0RFQ0wodTMyIGNvbnRleHRfaWQpOwo+ICAJfSBleGVjbGlzdF9w b3J0WzJdOwo+ICAJc3RydWN0IHJiX3Jvb3QgZXhlY2xpc3RfcXVldWU7Cj4KX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==