From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 12/13] drm/i915/execlists: Virtual engine bonding Date: Mon, 11 Mar 2019 13:38:52 +0000 Message-ID: <657c86d2-2b31-d38c-0e0c-0fa17068863e@linux.intel.com> References: <20190308141244.16837-1-chris@chris-wilson.co.uk> <20190308141244.16837-13-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED54F89B12 for ; Mon, 11 Mar 2019 13:38:55 +0000 (UTC) In-Reply-To: <20190308141244.16837-13-chris@chris-wilson.co.uk> Content-Language: en-US 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 List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzAzLzIwMTkgMTQ6MTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTb21lIHVzZXJzIHJl cXVpcmUgdGhhdCB3aGVuIGEgbWFzdGVyIGJhdGNoIGlzIGV4ZWN1dGVkIG9uIG9uZSBwYXJ0aWN1 bGFyCj4gZW5naW5lLCBhIGNvbXBhbmlvbiBiYXRjaCBpcyBydW4gc2ltdWx0YW5lb3VzbHkgb24g YSBzcGVjaWZpYyBzbGF2ZQo+IGVuZ2luZS4gRm9yIHRoaXMgcHVycG9zZSwgd2UgaW50cm9kdWNl IHZpcnR1YWwgZW5naW5lIGJvbmRpbmcsIGFsbG93aW5nCj4gbWFwcyBvZiBtYXN0ZXI6c2xhdmVz IHRvIGJlIGNvbnN0cnVjdGVkIHRvIGNvbnN0cmFpbiB3aGljaCBwaHlzaWNhbAo+IGVuZ2luZXMg YSB2aXJ0dWFsIGVuZ2luZSBtYXkgc2VsZWN0IGdpdmVuIGEgZmVuY2Ugb24gYSBtYXN0ZXIgZW5n aW5lLgo+IAo+IEZvciB0aGUgbW9tZW50LCB3ZSBjb250aW51ZSB0byBpZ25vcmUgdGhlIGlzc3Vl IG9mIHByZWVtcHRpb24gZGVmZXJyaW5nCj4gdGhlIG1hc3RlciByZXF1ZXN0IGZvciBsYXRlci4g SWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB0aGVuIGFsc28gcmVtb3ZlCj4gdGhlIHNsYXZlIGFu ZCBydW4gc29tZXRoaW5nIGVsc2UgcmF0aGVyIHRoYW4gaGF2ZSBpdCBzdGFsbCB0aGUgcGlwZWxp bmUuCj4gV2l0aCBsb2FkIGJhbGFuY2luZywgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbW92ZSB3b3Jr bG9hZCBhcm91bmQgaXQsIGJ1dAo+IHRoZXJlIGlzIGEgc2ltaWxhciBzdGFsbCBvbiB0aGUgbWFz dGVyIHBpcGVsaW5lIHdoaWxlIGl0IG1heSB3YWl0IGZvcgo+IHRoZSBzbGF2ZSB0byBiZSBleGVj dXRlZC4gQXQgdGhlIGNvc3Qgb2YgbW9yZSBsYXRlbmN5IGZvciB0aGUgYm9uZGVkCj4gcmVxdWVz dCwgaXQgbWF5IGJlIGludGVyZXN0aW5nIHRvIGxhdW5jaCBib3RoIG9uIHRoZWlyIGVuZ2luZXMg aW4KPiBsb2Nrc3RlcC4gKEJ1YmJsZXMgYWJvdW5kLikKPiAKPiBPcGVuczogQWxzbyB3aGF0IGFi b3V0IGJvbmRpbmcgYW4gZW5naW5lIGFzIGl0cyBvd24gbWFzdGVyPyBJdCBkb2Vzbid0Cj4gYnJl YWsgYW55dGhpbmcgaW50ZXJuYWxseSwgc28gYWxsb3cgdGhlIHNpbGxpbmVzcy4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgICB8ICA1MCArKysr KysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICB8ICAgMSAr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaCAgICAgICAgfCAgIDEgKwo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVzLmggIHwgICA3ICsKPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAgICB8IDExMSArKysrKysr KysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggICAgICAgICAgIHwg ICA0ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9scmMuYyB8IDE2 NyArKysrKysrKysrKysrKysrKysrKysKPiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAg ICAgICAgICAgICAgICB8ICAyMiArKysKPiAgIDggZmlsZXMgY2hhbmdlZCwgMzYzIGluc2VydGlv bnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29u dGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXgg MTNiNzk5ODBmN2YzLi4wZDg2MzA2NDk3YjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY29udGV4dC5jCj4gQEAgLTE0ODQsOCArMTQ4NCw1OCBAQCBzZXRfZW5naW5lc19fbG9h ZF9iYWxhbmNlKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNlciAqYmFzZSwgdm9pZCAq ZGF0YSkKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50Cj4gK3NldF9lbmdp bmVzX19ib25kKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNlciAqYmFzZSwgdm9pZCAq ZGF0YSkKPiArewo+ICsJc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2JvbmQgX191c2VyICpl eHQgPQo+ICsJCWNvbnRhaW5lcl9vZl91c2VyKGJhc2UsIHR5cGVvZigqZXh0KSwgYmFzZSk7Cj4g Kwljb25zdCBzdHJ1Y3Qgc2V0X2VuZ2luZXMgKnNldCA9IGRhdGE7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICptYXN0ZXI7Cj4gKwl1MzIgY2xhc3MsIGluc3RhbmNlLCBzaWJsaW5nczsKPiAr CXUxNiBpZHg7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmIChnZXRfdXNlcihpZHgsICZleHQtPmVu Z2luZV9pbmRleCkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJaWYgKGlkeCA+PSBzZXQt Pm5lbmdpbmUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWR4ID0gYXJyYXlfaW5kZXhf bm9zcGVjKGlkeCwgc2V0LT5uZW5naW5lKTsKPiArCWlmICghc2V0LT5lbmdpbmVzW2lkeF0pCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyoKPiArCSAqIEEgbm9uLXZpcnR1YWwgZW5naW5l IGhhcyAwIHNpYmxpbmdzIHRvIGNob29zZSBiZXR3ZWVuOyBhbmQgc3VibWl0Cj4gKwkgKiBmZW5j ZSB3aWxsIGFsd2F5cyBiZSBkaXJlY3RlZCB0byB0aGUgb25lIGVuZ2luZS4KPiArCSAqLwo+ICsJ aWYgKCFpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChzZXQtPmVuZ2luZXNbaWR4XSkpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJZXJyID0gY2hlY2tfdXNlcl9tYnoxNigmZXh0LT5tYnopOwo+ICsJaWYg KGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWlmIChnZXRfdXNlcihjbGFzcywgJmV4dC0+ bWFzdGVyX2NsYXNzKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoZ2V0X3VzZXIo aW5zdGFuY2UsICZleHQtPm1hc3Rlcl9pbnN0YW5jZSkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4g Kwo+ICsJbWFzdGVyID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHNldC0+Y3R4LT5pOTE1LCBj bGFzcywgaW5zdGFuY2UpOwo+ICsJaWYgKCFtYXN0ZXIpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJaWYgKGdldF91c2VyKHNpYmxpbmdzLCAmZXh0LT5zaWJsaW5nX21hc2spKQo+ICsJCXJl dHVybiAtRUZBVUxUOwo+ICsKPiArCXJldHVybiBpbnRlbF92aXJ0dWFsX2VuZ2luZV9hdHRhY2hf Ym9uZChzZXQtPmVuZ2luZXNbaWR4XSwKPiArCQkJCQkJbWFzdGVyLCBzaWJsaW5ncyk7Cj4gK30K PiArCj4gICBzdGF0aWMgY29uc3QgaTkxNV91c2VyX2V4dGVuc2lvbl9mbiBzZXRfZW5naW5lc19f ZXh0ZW5zaW9uc1tdID0gewo+ICAgCVtJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxB TkNFXSA9IHNldF9lbmdpbmVzX19sb2FkX2JhbGFuY2UsCj4gKwlbSTkxNV9DT05URVhUX0VOR0lO RVNfRVhUX0JPTkRdID0gc2V0X2VuZ2luZXNfX2JvbmQsCj4gICB9Owo+ICAgCj4gICBzdGF0aWMg aW50Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiBpbmRleCA1NTI3YWIyMmRiZjIu LjBjYWYzMWRlMmI5OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl cXVlc3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4gQEAg LTc0Myw2ICs3NDMsNyBAQCBpOTE1X3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCXJxLT5iYXRjaCA9 IE5VTEw7Cj4gICAJcnEtPmNhcHR1cmVfbGlzdCA9IE5VTEw7Cj4gICAJcnEtPndhaXRib29zdCA9 IGZhbHNlOwo+ICsJcnEtPmV4ZWN1dGlvbl9tYXNrID0gfjB1Owo+ICAgCj4gICAJLyoKPiAgIAkg KiBSZXNlcnZlIHNwYWNlIGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBjb21tYW5kcyBy ZXF1aXJlZCB0bwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVl c3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCj4gaW5kZXggZDRmNmIy OTQwMTMwLi44NjJiMjU5MzBkZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3Qu aAo+IEBAIC0xNDUsNiArMTQ1LDcgQEAgc3RydWN0IGk5MTVfcmVxdWVzdCB7Cj4gICAJICovCj4g ICAJc3RydWN0IGk5MTVfc2NoZWRfbm9kZSBzY2hlZDsKPiAgIAlzdHJ1Y3QgaTkxNV9kZXBlbmRl bmN5IGRlcDsKPiArCXVuc2lnbmVkIGludCBleGVjdXRpb25fbWFzazsKPiAgIAo+ICAgCS8qCj4g ICAJICogQSBjb252ZW5pZW5jZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGJyZWFkY3J1bWIgdmFs dWUgc3RvcmVkIGluCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Vu Z2luZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVzLmgK PiBpbmRleCBkNTRkMmExODQwY2MuLjZkZmNmNWNjMDhjMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2VuZ2luZV90eXBlcy5oCj4gQEAgLTM4Miw2ICszODIsMTMgQEAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyB7Cj4gICAJICovCj4gICAJdm9pZAkJKCpzdWJtaXRfcmVxdWVzdCko c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwo+ICAgCj4gKwkvKgo+ICsJICogQ2FsbGVkIG9uIHNp Z25hbGluZyBvZiBhIFNVQk1JVF9GRU5DRSwgcGFzc2luZyBhbG9uZyB0aGUgc2lnbmFsaW5nCj4g KwkgKiByZXF1ZXN0IGRvd24gdG8gdGhlIGJvbmRlZCBwYWlycy4KPiArCSAqLwo+ICsJdm9pZCAg ICAgICAgICAgICgqYm9uZF9leGVjdXRlKShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJ CQlzdHJ1Y3QgZG1hX2ZlbmNlICpzaWduYWwpOwo+ICsKPiAgIAkvKgo+ICAgCSAqIENhbGwgd2hl biB0aGUgcHJpb3JpdHkgb24gYSByZXF1ZXN0IGhhcyBjaGFuZ2VkIGFuZCBpdCBhbmQgaXRzCj4g ICAJICogZGVwZW5kZW5jaWVzIG1heSBuZWVkIHJlc2NoZWR1bGluZy4gTm90ZSB0aGUgcmVxdWVz dCBpdHNlbGYgbWF5Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCAwYzk3ZThmMzAy MjMuLmYwNjMxMmQxODVhZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAgLTE3 OSw2ICsxNzksMTIgQEAgc3RydWN0IHZpcnR1YWxfZW5naW5lIHsKPiAgIAkJaW50IHByaW87Cj4g ICAJfSBub2Rlc1tJOTE1X05VTV9FTkdJTkVTXTsKPiAgIAo+ICsJc3RydWN0IHZlX2JvbmQgewo+ ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm1hc3RlcjsKPiArCQl1bnNpZ25lZCBpbnQgc2li bGluZ19tYXNrOwo+ICsJfSAqYm9uZHM7Cj4gKwl1bnNpZ25lZCBpbnQgbmJvbmQ7Cj4gKwo+ICAg CXVuc2lnbmVkIGludCBjb3VudDsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5n c1swXTsKPiAgIH07Cj4gQEAgLTMxODMsNiArMzE4OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfY29udGV4dF9vcHMgdmlydHVhbF9jb250ZXh0X29wcyA9IHsKPiAgIHN0YXRpYyB2b2lk IHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKPiAgIHsKPiAg IAlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKiBjb25zdCB2ZSA9IChzdHJ1Y3QgdmlydHVhbF9lbmdp bmUgKilkYXRhOwo+ICsJdW5zaWduZWQgaW50IG1hc2s7Cj4gICAJdW5zaWduZWQgaW50IG47Cj4g ICAJaW50IHByaW87Cj4gICAKPiBAQCAtMzE5MSwxMiArMzE5OCwzMCBAQCBzdGF0aWMgdm9pZCB2 aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCj4gICAJCXJldHVy bjsKPiAgIAo+ICAgCWxvY2FsX2lycV9kaXNhYmxlKCk7Cj4gKwo+ICsJbWFzayA9IDA7Cj4gKwlz cGluX2xvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOwo+ICsJaWYgKHZlLT5yZXF1ZXN0KQo+ ICsJCW1hc2sgPSB2ZS0+cmVxdWVzdC0+ZXhlY3V0aW9uX21hc2s7Cj4gKwlzcGluX3VubG9jaygm dmUtPmJhc2UudGltZWxpbmUubG9jayk7Cj4gKwo+ICAgCWZvciAobiA9IDA7IFJFQURfT05DRSh2 ZS0+cmVxdWVzdCkgJiYgbiA8IHZlLT5jb3VudDsgbisrKSB7Cj4gICAJCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnNpYmxpbmcgPSB2ZS0+c2libGluZ3Nbbl07Cj4gICAJCXN0cnVjdCB2ZV9ub2Rl ICogY29uc3Qgbm9kZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+aWRdOwo+ICAgCQlzdHJ1Y3QgcmJf bm9kZSAqKnBhcmVudCwgKnJiOwo+ICAgCQlib29sIGZpcnN0Owo+IAoKLyogQ2hlY2sgaWYgcmVx dWVzdCBjYW4gYmUgZXhlY3V0ZWQgb24gdGhpcyBzaWJsaW5nLiBCZWNhdXNlIGl0IGNhbm5vdCAK YmUga25vd24gaW4gYWR2YW5jZSAoYXQgaW5zZXJ0IHRvIHF1ZXVlIHRpbWUpLi4gPyAqLwoKPiAr CQlpZiAodW5saWtlbHkoIShtYXNrICYgc2libGluZy0+bWFzaykpKSB7Cj4gKwkJCWlmICghUkJf RU1QVFlfTk9ERSgmbm9kZS0+cmIpKSB7Cj4gKwkJCQlzcGluX2xvY2soJnNpYmxpbmctPnRpbWVs aW5lLmxvY2spOwo+ICsJCQkJcmJfZXJhc2VfY2FjaGVkKCZub2RlLT5yYiwKPiArCQkJCQkJJnNp YmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKPiArCQkJCVJCX0NMRUFSX05PREUoJm5vZGUtPnJi KTsKPiArCQkJCXNwaW5fdW5sb2NrKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKPiArCQkJfQo+ ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICAgCQlzcGluX2xvY2soJnNpYmxpbmctPnRpbWVs aW5lLmxvY2spOwo+ICAgCj4gICAJCWlmICghUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIpKSB7Cj4g QEAgLTMyNTQsNiArMzI3OSwzMCBAQCBzdGF0aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4gICAJdGFza2xldF9zY2hlZHVsZSgmdmUt PmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBzdHJ1Y3QgdmVf Ym9uZCAqCj4gK3ZpcnR1YWxfZmluZF9ib25kKHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUsIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm1hc3RlcikKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IHZlLT5uYm9uZDsgaSsrKSB7Cj4gKwkJaWYgKHZlLT5ib25kc1tpXS5tYXN0 ZXIgPT0gbWFzdGVyKQo+ICsJCQlyZXR1cm4gJnZlLT5ib25kc1tpXTsKPiArCX0KPiArCj4gKwly ZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdmlydHVhbF9ib25kX2V4ZWN1 dGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHN0cnVjdCBkbWFfZmVuY2UgKnNpZ25hbCkKPiAr ewo+ICsJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5naW5lKHJxLT5l bmdpbmUpOwo+ICsJc3RydWN0IHZlX2JvbmQgKmJvbmQ7Cj4gKwo+ICsJYm9uZCA9IHZpcnR1YWxf ZmluZF9ib25kKHZlLCB0b19yZXF1ZXN0KHNpZ25hbCktPmVuZ2luZSk7Cj4gKwlpZiAoYm9uZCkg LyogWFhYIHNlcmlhbGlzZSB3aXRoIHJxLT5sb2NrPyAqLwo+ICsJCXJxLT5leGVjdXRpb25fbWFz ayAmPSBib25kLT5zaWJsaW5nX21hc2s7Cj4gK30KPiArCj4gICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICoKPiAgIGludGVsX2V4ZWNsaXN0c19jcmVhdGVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4LAo+ICAgCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKipzaWJs aW5ncywKPiBAQCAtMzI5NCw2ICszMzQzLDcgQEAgaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0 dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAKPiAgIAl2ZS0+YmFzZS5zY2hl ZHVsZSA9IGk5MTVfc2NoZWR1bGU7Cj4gICAJdmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgPSB2aXJ0 dWFsX3N1Ym1pdF9yZXF1ZXN0Owo+ICsJdmUtPmJhc2UuYm9uZF9leGVjdXRlID0gdmlydHVhbF9i b25kX2V4ZWN1dGU7Cj4gICAKPiAgIAl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlf aGludCA9IElOVF9NSU47Cj4gICAJdGFza2xldF9pbml0KCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFz a2xldCwKPiBAQCAtMzM2OSw5ICszNDE5LDcwIEBAIGludGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0 dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJaWYgKElTX0VSUihkc3QpKQo+ ICAgCQlyZXR1cm4gZHN0Owo+ICAgCj4gKwlpZiAoc2UtPm5ib25kKSB7Cj4gKwkJc3RydWN0IHZp cnR1YWxfZW5naW5lICpkZSA9IHRvX3ZpcnR1YWxfZW5naW5lKGRzdCk7Cj4gKwo+ICsJCWRlLT5i b25kcyA9IGttZW1kdXAoc2UtPmJvbmRzLAo+ICsJCQkJICAgIHNpemVvZigqc2UtPmJvbmRzKSAq IHNlLT5uYm9uZCwKPiArCQkJCSAgICBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIWRlLT5ib25kcykg ewo+ICsJCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9kZXN0cm95KGRzdCk7Cj4gKwkJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOwo+ICsJCX0KPiArCj4gKwkJZGUtPm5ib25kID0gc2UtPm5ib25kOwo+ ICsJfQo+ICsKPiAgIAlyZXR1cm4gZHN0Owo+ICAgfQo+ICAgCj4gK3N0YXRpYyB1bnNpZ25lZCBs b25nCj4gK3ZpcnR1YWxfZXhlY3V0aW9uX21hc2soc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSwg dW5zaWduZWQgbG9uZyBtYXNrKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGVtYXNrID0gMDsKPiAr CWludCBiaXQ7Cj4gKwo+ICsJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZtYXNrLCB2ZS0+Y291bnQp Cj4gKwkJZW1hc2sgfD0gdmUtPnNpYmxpbmdzW2JpdF0tPm1hc2s7Cj4gKwo+ICsJcmV0dXJuIGVt YXNrOwo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfdmlydHVhbF9lbmdpbmVfYXR0YWNoX2JvbmQoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICptYXN0ZXIsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbWFzaykKPiArewo+ICsJ c3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5naW5lKGVuZ2luZSk7Cj4g KwlzdHJ1Y3QgdmVfYm9uZCAqYm9uZDsKPiArCj4gKwlpZiAobWFzayA+PiB2ZS0+Y291bnQpCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJbWFzayA9IHZpcnR1YWxfZXhlY3V0aW9uX21hc2so dmUsIG1hc2spOwo+ICsJaWYgKCFtYXNrKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWJv bmQgPSB2aXJ0dWFsX2ZpbmRfYm9uZCh2ZSwgbWFzdGVyKTsKPiArCWlmIChib25kKSB7Cj4gKwkJ Ym9uZC0+c2libGluZ19tYXNrIHw9IG1hc2s7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJ Ym9uZCA9IGtyZWFsbG9jKHZlLT5ib25kcywKPiArCQkJc2l6ZW9mKCpib25kKSAqICh2ZS0+bmJv bmQgKyAxKSwKPiArCQkJR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWJvbmQpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwo+ICsJYm9uZFt2ZS0+bmJvbmRdLm1hc3RlciA9IG1hc3RlcjsKPiArCWJvbmRb dmUtPm5ib25kXS5zaWJsaW5nX21hc2sgPSBtYXNrOwo+ICsKPiArCXZlLT5ib25kcyA9IGJvbmQ7 Cj4gKwl2ZS0+bmJvbmQrKzsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgIHZvaWQgaW50 ZWxfdmlydHVhbF9lbmdpbmVfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gICB7CgpJIHRoaW5rIHRoZXJlIHNob3VsZCBiZSBhIGh1bmsgaW4gaGVyZSB0byBmcmVlIHZl LT5ib25kcy4KCj4gICAJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5n aW5lKGVuZ2luZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiBpbmRleCA5ZDkwZGM2OGUw MmIuLjc3Yjg1NjQ4MDQ1YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4gQEAgLTEy MSw2ICsxMjEsMTAgQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCj4gICBpbnRlbF9leGVjbGlz dHNfY2xvbmVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAgCQkJICAg ICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc3JjKTsKPiAgIAo+ICtpbnQgaW50ZWxfdmlydHVh bF9lbmdpbmVfYXR0YWNoX2JvbmQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJ CQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICptYXN0ZXIsCj4gKwkJCQkgICAgIHVuc2ln bmVkIGxvbmcgbWFzayk7Cj4gKwo+ICAgdm9pZCBpbnRlbF92aXJ0dWFsX2VuZ2luZV9kZXN0cm95 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gICAKPiAgIHUzMiBnZW44X21ha2Vf cnBjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGludGVsX3NzZXUgKmN0 eF9zc2V1KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jCj4g aW5kZXggNGI4YTMzOTUyOWQxLi5hN2RlN2E4ZmMyNGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jCj4gQEAgLTEzLDYgKzEzLDcgQEAKPiAgICNpbmNs dWRlICJpZ3RfbGl2ZV90ZXN0LmgiCj4gICAjaW5jbHVkZSAiaWd0X3NwaW5uZXIuaCIKPiAgICNp bmNsdWRlICJpOTE1X3JhbmRvbS5oIgo+ICsjaW5jbHVkZSAibGliX3N3X2ZlbmNlLmgiCj4gICAK PiAgICNpbmNsdWRlICJtb2NrX2NvbnRleHQuaCIKPiAgIAo+IEBAIC0xMjI0LDYgKzEyMjUsMTcx IEBAIHN0YXRpYyBpbnQgbGl2ZV92aXJ0dWFsX2VuZ2luZSh2b2lkICphcmcpCj4gICAJcmV0dXJu IGVycjsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IGJvbmRfdmlydHVhbF9lbmdpbmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2xhc3Ms Cj4gKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGluZ3MsCj4gKwkJCSAg ICAgICB1bnNpZ25lZCBpbnQgbnNpYmxpbmcsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxh Z3MpCj4gKyNkZWZpbmUgQk9ORF9TQ0hFRFVMRSBCSVQoMCkKPiArewo+ICsJc3RydWN0IGludGVs X2VuZ2luZV9jcyAqbWFzdGVyOwo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiAr CXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxWzE2XTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlk Owo+ICsJdW5zaWduZWQgbG9uZyBuOwo+ICsJaW50IGVycjsKPiArCj4gKwlHRU1fQlVHX09OKG5z aWJsaW5nID49IEFSUkFZX1NJWkUocnEpIC0gMSk7Cj4gKwo+ICsJY3R4ID0ga2VybmVsX2NvbnRl eHQoaTkxNSk7Cj4gKwlpZiAoIWN0eCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwllcnIg PSAwOwo+ICsJcnFbMF0gPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJZm9yX2VhY2hfZW5naW5lKG1h c3RlciwgaTkxNSwgaWQpIHsKPiArCQlzdHJ1Y3QgaTkxNV9zd19mZW5jZSBmZW5jZTsKPiArCj4g KwkJaWYgKG1hc3Rlci0+Y2xhc3MgPT0gY2xhc3MpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQly cVswXSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhtYXN0ZXIsIGN0eCk7Cj4gKwkJaWYgKElTX0VSUihy cVswXSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihycVswXSk7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJ CX0KPiArCj4gKwkJaWYgKGZsYWdzICYgQk9ORF9TQ0hFRFVMRSkKPiArCQkJb25zdGFja19mZW5j ZV9pbml0KCZmZW5jZSk7Cj4gKwo+ICsJCWk5MTVfcmVxdWVzdF9nZXQocnFbMF0pOwo+ICsJCWk5 MTVfcmVxdWVzdF9hZGQocnFbMF0pOwo+ICsKPiArCQlmb3IgKG4gPSAwOyBuIDwgbnNpYmxpbmc7 IG4rKykgewo+ICsJCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwo+ICsJCQll bmdpbmUgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoY3R4LAo+ICsJCQkJCQkJCXNp YmxpbmdzLAo+ICsJCQkJCQkJCW5zaWJsaW5nKTsKPiArCQkJaWYgKElTX0VSUihlbmdpbmUpKSB7 Cj4gKwkJCQllcnIgPSBQVFJfRVJSKGVuZ2luZSk7Cj4gKwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ ICsKPiArCQkJZXJyID0gaW50ZWxfdmlydHVhbF9lbmdpbmVfYXR0YWNoX2JvbmQoZW5naW5lLAo+ ICsJCQkJCQkJICAgICAgIG1hc3RlciwKPiArCQkJCQkJCSAgICAgICBCSVQobikpOwo+ICsJCQlp ZiAoZXJyKSB7Cj4gKwkJCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9kZXN0cm95KGVuZ2luZSk7Cj4g KwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsKPiArCQkJcnFbbiArIDFdID0gaTkxNV9yZXF1ZXN0 X2FsbG9jKGVuZ2luZSwgY3R4KTsKPiArCQkJaWYgKElTX0VSUihycVtuICsgMV0pKSB7Cj4gKwkJ CQllcnIgPSBQVFJfRVJSKHJxW24gKyAxXSk7Cj4gKwkJCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9k ZXN0cm95KGVuZ2luZSk7Cj4gKwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsJCQlpOTE1X3JlcXVl c3RfZ2V0KHJxW24gKyAxXSk7Cj4gKwo+ICsJCQllcnIgPSBpOTE1X3JlcXVlc3RfYXdhaXRfZXhl Y3V0aW9uKHJxW24gKyAxXSwKPiArCQkJCQkJCSAgICZycVswXS0+ZmVuY2UsCj4gKwkJCQkJCQkg ICBlbmdpbmUtPmJvbmRfZXhlY3V0ZSk7Cj4gKwkJCWk5MTVfcmVxdWVzdF9hZGQocnFbbiArIDFd KTsKPiArCQkJaW50ZWxfdmlydHVhbF9lbmdpbmVfZGVzdHJveShlbmdpbmUpOwo+ICsJCQlpZiAo ZXJyIDwgMCkKPiArCQkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCQlycVtuICsgMV0gPSBFUlJfUFRS KC1FSU5WQUwpOwo+ICsKPiArCQlpZiAoZmxhZ3MgJiBCT05EX1NDSEVEVUxFKQo+ICsJCQlvbnN0 YWNrX2ZlbmNlX2ZpbmkoJmZlbmNlKTsKClRoZSBpZGVhIG9mIHRoaXMgZmVuY2UgaXMgdG8gZGVs YXkgcnFbMF0/IEJ1dCBJIGRvbid0IHNlZSBpdCBwYXNzZWQgaW4gCmFueXdoZXJlPyBJIHdhbnRl ZCB0byBzdWdnZXN0IHRvIGNoZWNrIGJlZm9yZSBvbnN0YWNrX2ZlbmNlX2ZpbmkgdGhhdCAKcnFb MF0sIG9yIGFueSBvdGhlciByZXF1ZXN0LCBoYXZlbid0IGJlZW4gc3VibWl0dGVkL2NvbXBsZXRl ZCB5ZXQuCgo+ICsKPiArCQlmb3IgKG4gPSAwOyBuIDwgbnNpYmxpbmc7IG4rKykgewo+ICsJCQlp ZiAoaTkxNV9yZXF1ZXN0X3dhaXQocnFbbiArIDFdLAo+ICsJCQkJCSAgICAgIEk5MTVfV0FJVF9M T0NLRUQsCj4gKwkJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpIDwgMCkgewo+ICsJCQkJ ZXJyID0gLUVJTzsKPiArCQkJCWdvdG8gb3V0Owo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAocnFbbiAr IDFdLT5lbmdpbmUgIT0gc2libGluZ3Nbbl0pIHsKPiArCQkJCXByX2VycigiQm9uZGVkIHJlcXVl c3QgZGlkIG5vdCBleGVjdXRlIG9uIHRhcmdldCBlbmdpbmU6IGV4cGVjdGVkICVzLCB1c2VkICVz OyBtYXN0ZXIgd2FzICVzXG4iLAo+ICsJCQkJICAgICAgIHNpYmxpbmdzW25dLT5uYW1lLAo+ICsJ CQkJICAgICAgIHJxW24gKyAxXS0+ZW5naW5lLT5uYW1lLAo+ICsJCQkJICAgICAgIHJxWzBdLT5l bmdpbmUtPm5hbWUpOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCWdvdG8gb3V0Owo+ICsJ CQl9Cj4gKwkJfQo+ICsKPiArCQlmb3IgKG4gPSAwOyAhSVNfRVJSKHJxW25dKTsgbisrKQo+ICsJ CQlpOTE1X3JlcXVlc3RfcHV0KHJxW25dKTsKPiArCQlycVswXSA9IEVSUl9QVFIoLUVOT01FTSk7 Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlmb3IgKG4gPSAwOyAhSVNfRVJSKHJxW25dKTsgbisrKQo+ ICsJCWk5MTVfcmVxdWVzdF9wdXQocnFbbl0pOwo+ICsJaWYgKGlndF9mbHVzaF90ZXN0KGk5MTUs IEk5MTVfV0FJVF9MT0NLRUQpKQo+ICsJCWVyciA9IC1FSU87Cj4gKwo+ICsJa2VybmVsX2NvbnRl eHRfY2xvc2UoY3R4KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbGl2 ZV92aXJ0dWFsX2JvbmQodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBo YXNlIHsKPiArCQljb25zdCBjaGFyICpuYW1lOwo+ICsJCXVuc2lnbmVkIGludCBmbGFnczsKPiAr CX0gcGhhc2VzW10gPSB7Cj4gKwkJeyAiIiwgMCB9LAo+ICsJCXsgInNjaGVkdWxlIiwgQk9ORF9T Q0hFRFVMRSB9LAo+ICsJCXsgfSwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IGFyZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmdzW01BWF9FTkdJ TkVfSU5TVEFOQ0UgKyAxXTsKPiArCXVuc2lnbmVkIGludCBjbGFzcywgaW5zdDsKPiArCWludCBl cnIgPSAwOwo+ICsKPiArCWlmIChVU0VTX0dVQ19TVUJNSVNTSU9OKGk5MTUpKQo+ICsJCXJldHVy biAwOwoKT25lIGRheSBubyBvbmUgd2lsbCByZW1lbWJlciB0byBhZGQgbWlzc2luZyBjb3ZlcmFn ZSBidXQgd2UgZG9uJ3QgaGF2ZSAKc2VsZnRlc3Qgc2tpcHMuLiB0YXNrIGZvciBhbiBpbnRlcm4u Cgo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWZv ciAoY2xhc3MgPSAwOyBjbGFzcyA8PSBNQVhfRU5HSU5FX0NMQVNTOyBjbGFzcysrKSB7Cj4gKwkJ Y29uc3Qgc3RydWN0IHBoYXNlICpwOwo+ICsJCWludCBuc2libGluZzsKPiArCj4gKwkJbnNpYmxp bmcgPSAwOwo+ICsJCWZvciAoaW5zdCA9IDA7IGluc3QgPD0gTUFYX0VOR0lORV9JTlNUQU5DRTsg aW5zdCsrKSB7Cj4gKwkJCWlmICghaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0XSkKPiAr CQkJCWJyZWFrOwo+ICsKPiArCQkJR0VNX0JVR19PTihuc2libGluZyA9PSBBUlJBWV9TSVpFKHNp YmxpbmdzKSk7Cj4gKwkJCXNpYmxpbmdzW25zaWJsaW5nKytdID0gaTkxNS0+ZW5naW5lX2NsYXNz W2NsYXNzXVtpbnN0XTsKPiArCQl9Cj4gKwkJaWYgKG5zaWJsaW5nIDwgMikKPiArCQkJY29udGlu dWU7Cj4gKwo+ICsJCWZvciAocCA9IHBoYXNlczsgcC0+bmFtZTsgcCsrKSB7Cj4gKwkJCWVyciA9 IGJvbmRfdmlydHVhbF9lbmdpbmUoaTkxNSwKPiArCQkJCQkJICBjbGFzcywgc2libGluZ3MsIG5z aWJsaW5nLAo+ICsJCQkJCQkgIHAtPmZsYWdzKTsKPiArCQkJaWYgKGVycikgewo+ICsJCQkJcHJf ZXJyKCIlcyglcyk6IGZhaWxlZCBjbGFzcz0lZCwgbnNpYmxpbmc9JWQsIGVycj0lZFxuIiwKPiAr CQkJCSAgICAgICBfX2Z1bmNfXywgcC0+bmFtZSwgY2xhc3MsIG5zaWJsaW5nLCBlcnIpOwo+ICsJ CQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArb3V0X3VubG9j azoKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlyZXR1cm4g ZXJyOwo+ICt9Cj4gKwo+ICAgaW50IGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAgIAlzdGF0aWMgY29uc3Qgc3RydWN0 IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+IEBAIC0xMjM2LDYgKzE0MDIsNyBAQCBpbnQgaW50 ZWxfZXhlY2xpc3RzX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQo+ICAgCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9oYW5nKSwKPiAgIAkJU1VCVEVTVChsaXZlX3By ZWVtcHRfc21va2UpLAo+ICAgCQlTVUJURVNUKGxpdmVfdmlydHVhbF9lbmdpbmUpLAo+ICsJCVNV QlRFU1QobGl2ZV92aXJ0dWFsX2JvbmQpLAo+ICAgCX07Cj4gICAKPiAgIAlpZiAoIUhBU19FWEVD TElTVFMoaTkxNSkpCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBi L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+IGluZGV4IDU5MmIwMjY3NjA0NC4uOTRlNzJh ZTk1NGEwIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+ICsrKyBi L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+IEBAIC0xNTMwLDYgKzE1MzAsMTAgQEAgc3Ry dWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHsKPiAgICAqIHNpemVkIGFyZ3VtZW50LCB3 aWxsIHJldmVydCBiYWNrIHRvIGRlZmF1bHQgc2V0dGluZ3MuCj4gICAgKgo+ICAgICogU2VlIHN0 cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcy4KPiArICoKPiArICogRXh0ZW5zaW9uczoK PiArICogICBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2UgKEk5MTVfQ09OVEVYVF9F TkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0UpCj4gKyAqICAgaTkxNV9jb250ZXh0X2VuZ2luZXNfYm9u ZCAoSTkxNV9DT05URVhUX0VOR0lORVNfRVhUX0JPTkQpCj4gICAgKi8KPiAgICNkZWZpbmUgSTkx NV9DT05URVhUX1BBUkFNX0VOR0lORVMJMHhhCj4gICAvKiBNdXN0IGJlIGtlcHQgY29tcGFjdCAt LSBubyBob2xlcyBhbmQgd2VsbCBkb2N1bWVudGVkICovCj4gQEAgLTE2MjUsOSArMTYyOSwyNyBA QCBzdHJ1Y3QgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlIHsKPiAgIAlfX3U2NCBt Yno2NFs0XTsgLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVybyAqLwo+ICAg fTsKPiAgIAo+ICsvKgo+ICsgKiBpOTE1X2NvbnRleHRfZW5naW5lc19ib25kOgo+ICsgKgo+ICsg Ki8KPiArc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2JvbmQgewo+ICsJc3RydWN0IGk5MTVf dXNlcl9leHRlbnNpb24gYmFzZTsKPiArCj4gKwlfX3UxNiBlbmdpbmVfaW5kZXg7Cj4gKwlfX3Ux NiBtYno7Cj4gKwo+ICsJX191MTYgbWFzdGVyX2NsYXNzOwo+ICsJX191MTYgbWFzdGVyX2luc3Rh bmNlOwo+ICsKPiArCV9fdTY0IHNpYmxpbmdfbWFzazsKPiArCV9fdTY0IGZsYWdzOyAvKiBhbGwg dW5kZWZpbmVkIGZsYWdzIG11c3QgYmUgemVybyAqLwo+ICt9OwoKTmVlZCBzb21lIGFwaSBkb2Mg Zm9yIGl0IGFsbC4KCldlIGFyZSBub3QgaW4gZGFuZ2VyIG9mIGFueSBjb21waWxlciBhZGRlZCBw YWRkaW5nIGR1ZSBub3QgbGVhdmluZyBhbnkgCmhvbGVzLCByaWdodD8gU28gbm8gbmVlZCB0byBk ZWZpbmUgdGhpcyBhcyBwYWNrZWQ/Cgo+ICsKPiAgIHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1f ZW5naW5lcyB7Cj4gICAJX191NjQgZXh0ZW5zaW9uczsgLyogbGlua2VkIGNoYWluIG9mIGV4dGVu c2lvbiBibG9ja3MsIDAgdGVybWluYXRlcyAqLwo+ICAgI2RlZmluZSBJOTE1X0NPTlRFWFRfRU5H SU5FU19FWFRfTE9BRF9CQUxBTkNFIDAKPiArI2RlZmluZSBJOTE1X0NPTlRFWFRfRU5HSU5FU19F WFRfQk9ORCAxCj4gICAKPiAgIAlzdHJ1Y3Qgewo+ICAgCQlfX3UxNiBlbmdpbmVfY2xhc3M7IC8q IHNlZSBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgKi8KPiAKClJlZ2FyZHMsCgpUdnJ0 a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4