From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v4 07/24] drm/i915: Create page table allocators Date: Fri, 20 Feb 2015 18:50:50 +0200 Message-ID: <8761awzfv9.fsf@gaia.fi.intel.com> References: <1418922621-25818-1-git-send-email-michel.thierry@intel.com> <1421946106-7921-1-git-send-email-michel.thierry@intel.com> <1421946106-7921-8-git-send-email-michel.thierry@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 ESMTP id 298916E6B6 for ; Fri, 20 Feb 2015 08:51:01 -0800 (PST) In-Reply-To: <1421946106-7921-8-git-send-email-michel.thierry@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michel Thierry , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org TWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4gd3JpdGVzOgoKPiBGcm9t OiBCZW4gV2lkYXdza3kgPGJlbmphbWluLndpZGF3c2t5QGludGVsLmNvbT4KPgo+IEFzIHdlIG1v dmUgdG93YXJkIGR5bmFtaWMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uLCBpdCBiZWNvbWVzIG11Y2gg ZWFzaWVyCj4gdG8gbWFuYWdlIG91ciBkYXRhIHN0cnVjdHVyZXMgaWYgYnJlYWsgZG8gdGhpbmdz IGxlc3MgY29hcnNlbHkgYnkKPiBicmVha2luZyB1cCBhbGwgb2Ygb3VyIGFjdGlvbnMgaW50byBp bmRpdmlkdWFsIHRhc2tzLiAgVGhpcyBtYWtlcyB0aGUKPiBjb2RlIGVhc2llciB0byB3cml0ZSwg cmVhZCwgYW5kIHZlcmlmeS4KPgo+IEFzaWRlIGZyb20gdGhlIGRpc3NlY3Rpb24gb2YgdGhlIGFs bG9jYXRpb24gZnVuY3Rpb25zLCB0aGUgcGF0Y2gKPiBzdGF0aWNhbGx5IGFsbG9jYXRlcyB0aGUg cGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIHdpdGhvdXQgYSBwYWdlIGRpcmVjdG9yeS4KPiBUaGlzIHJl bWFpbnMgdGhlIHNhbWUgZm9yIGFsbCBwbGF0Zm9ybXMsCj4KPiBUaGUgcGF0Y2ggaXRzZWxmIHNo b3VsZCBub3QgaGF2ZSBtdWNoIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZS4gVGhlIHByaW1hcnkKPiBu b3RpY2VhYmxlIGRpZmZlcmVuY2UgaXMgdGhlIGZhY3QgdGhhdCBwYWdlIHRhYmxlcyBhcmUgbm8g bG9uZ2VyCj4gYWxsb2NhdGVkLCBidXQgcmF0aGVyIHN0YXRpY2FsbHkgZGVjbGFyZWQgYXMgcGFy dCBvZiB0aGUgcGFnZSBkaXJlY3RvcnkuCj4gVGhpcyBoYXMgbm9uLXplcm8gb3ZlcmhlYWQsIGJ1 dCB0aGluZ3MgZ2FpbiBub24tdHJpdmlhbCBjb21wbGV4aXR5IGFzIGEKPiByZXN1bHQuCj4KPiBU aGlzIHBhdGNoIGV4aXN0cyBmb3IgYSBmZXcgcmVhc29uczoKPiAxLiBTcGxpdHRpbmcgb3V0IHRo ZSBmdW5jdGlvbnMgYWxsb3dzIGVhc2lseSBjb21iaW5pbmcgR0VONiBhbmQgR0VOOAo+IGNvZGUu IFBhZ2UgdGFibGVzIGhhdmUgbm8gZGlmZmVyZW5jZSBiYXNlZCBvbiBHRU44LiBBcyB3ZSdsbCBz ZWUgaW4gYQo+IGZ1dHVyZSBwYXRjaCB3aGVuIHdlIGFkZCB0aGUgRE1BIG1hcHBpbmdzIHRvIHRo ZSBhbGxvY2F0aW9ucywgaXQKPiByZXF1aXJlcyBvbmx5IG9uZSBzbWFsbCBjaGFuZ2UgdG8gbWFr ZSB3b3JrLCBhbmQgZXJyb3IgaGFuZGxpbmcgc2hvdWxkCj4ganVzdCBmYWxsIGludG8gcGxhY2Uu Cj4KPiAyLiBVbmxlc3Mgd2UgYWx3YXlzIHdhbnQgdG8gYWxsb2NhdGUgYWxsIHBhZ2UgdGFibGVz IHVuZGVyIGEgZ2l2ZW4gUERFLAo+IHdlJ2xsIGhhdmUgdG8gZXZlbnR1YWxseSBicmVhayB0aGlz IHVwIGludG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgKG9yCj4gcG9pbnRlciB0byBwb2ludGVyKS4K Pgo+IDMuIEhhdmluZyB0aGUgZGlzY3JldGUgZnVuY3Rpb25zIGlzIGVhc2llciB0byByZXZpZXcs IGFuZCB1bmRlcnN0YW5kLgo+IEFsbCBhbGxvY2F0aW9ucyBhbmQgZnJlZXMgbm93IHRha2UgcGxh Y2UgaW4ganVzdCBhIGNvdXBsZSBvZiBsb2NhdGlvbnMuCj4gUmV2aWV3aW5nLCBhbmQgY2F0Y2hp bmcgbGVha3Mgc2hvdWxkIGJlIGVhc3kuCj4KPiA0LiBMZXNzIGltcG9ydGFudDogdGhlIEdGUCBm bGFncyBhcmUgY29uZmluZWQgdG8gb25lIGxvY2F0aW9uLCB3aGljaAo+IG1ha2VzIHBsYXlpbmcg YXJvdW5kIHdpdGggc3VjaCB0aGluZ3MgdHJpdmlhbC4KPgo+IHYyOiBVcGRhdGVkIGNvbW1pdCBt ZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgcGF0Y2ggZXhpc3RzCj4KPiB2MzogRm9yIGxyYywg cy9wZHAucGFnZV9kaXJlY3RvcnlbaV0uZGFkZHIvcGRwLnBhZ2VfZGlyZWN0b3J5W2ldLT5kYWRk ci8KPgo+IHY0OiBSZW5hbWVkIGZyZWVfcHQvcGRfc2luZ2xlIGZ1bmN0aW9ucyB0byB1bm1hcF9h bmRfZnJlZV9wdC9wZCAoRGFuaWVsKQo+Cj4gdjU6IEFkZGVkIGFkZGl0aW9uYWwgc2FmZXR5IGNo ZWNrcyBpbiBnZW44IGNsZWFyL2ZyZWUvdW5tYXAuCj4KPiBTaWduZWQtb2ZmLWJ5OiBCZW4gV2lk YXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gU2lnbmVkLW9mZi1ieTogTWljaGVsIFRoaWVycnkg PG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4gKHYzLCB2NCwgdjUpCj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwgMjUxICsrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCB8ICAg NCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICB8ICAxNiArLS0KPiAg MyBmaWxlcyBjaGFuZ2VkLCAxNzkgaW5zZXJ0aW9ucygrKSwgOTIgZGVsZXRpb25zKC0pCj4KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IDBmZTVjMWUuLjg1ZWE1MzUgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0yNzUsNiArMjc1LDk5IEBA IHN0YXRpYyBnZW42X2d0dF9wdGVfdCBpcmlzX3B0ZV9lbmNvZGUoZG1hX2FkZHJfdCBhZGRyLAo+ ICAJcmV0dXJuIHB0ZTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgdW5tYXBfYW5kX2ZyZWVfcHQo c3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQpCj4gK3sKPiArCWlmIChXQVJOX09OKCFw dC0+cGFnZSkpCj4gKwkJcmV0dXJuOwo+ICsJX19mcmVlX3BhZ2UocHQtPnBhZ2UpOwo+ICsJa2Zy ZWUocHQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAq YWxsb2NfcHRfc2luZ2xlKHZvaWQpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50 cnkgKnB0Owo+ICsKPiArCXB0ID0ga3phbGxvYyhzaXplb2YoKnB0KSwgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIXB0KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXB0LT5wYWdl ID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwlpZiAoIXB0LT5wYWdl KSB7Cj4gKwkJa2ZyZWUocHQpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ ICsKPiArCXJldHVybiBwdDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFsbG9jX3B0X3JhbmdlKCkg LSBBbGxvY2F0ZSBhIG11bHRpcGxlIHBhZ2UgdGFibGVzCj4gKyAqIEBwZDoJCVRoZSBwYWdlIGRp cmVjdG9yeSB3aGljaCB3aWxsIGhhdmUgYXQgbGVhc3QgQGNvdW50IGVudHJpZXMKPiArICoJCWF2 YWlsYWJsZSB0byBwb2ludCB0byB0aGUgYWxsb2NhdGVkIHBhZ2UgdGFibGVzLgo+ICsgKiBAcGRl OglGaXJzdCBwYWdlIGRpcmVjdG9yeSBlbnRyeSBmb3Igd2hpY2ggd2UgYXJlIGFsbG9jYXRpbmcu Cj4gKyAqIEBjb3VudDoJTnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLgo+ICsgKgo+ICsgKiBB bGxvY2F0ZXMgbXVsdGlwbGUgcGFnZSB0YWJsZSBwYWdlcyBhbmQgc2V0cyB0aGUgYXBwcm9wcmlh dGUgZW50cmllcyBpbiB0aGUKPiArICogcGFnZSB0YWJsZSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBw YWdlIGRpcmVjdG9yeS4gRnVuY3Rpb24gY2xlYW5zIHVwIGFmdGVyCj4gKyAqIGl0c2VsZiBvbiBh bnkgZmFpbHVyZXMuCj4gKyAqCj4gKyAqIFJldHVybjogMCBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRl ZC4KPiArICovCj4gK3N0YXRpYyBpbnQgYWxsb2NfcHRfcmFuZ2Uoc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnlfZW50cnkgKnBkLCB1aW50MTZfdCBwZGUsIHNpemVfdCBjb3VudCkKPiArewo+ICsJ aW50IGksIHJldDsKPiArCj4gKwkvKiA1MTIgaXMgdGhlIG1heCBwYWdlIHRhYmxlcyBwZXIgcGFn ZV9kaXJlY3Rvcnkgb24gYW55IHBsYXRmb3JtLgo+ICsJICogVE9ETzogbWFrZSBXQVJOIGFmdGVy IHBhdGNoIHNlcmllcyBpcyBkb25lCj4gKwkgKi8KPiArCUJVR19PTihwZGUgKyBjb3VudCA+IEdF TjZfUFBHVFRfUERfRU5UUklFUyk7Cj4gKwoKV0FSTl9PTiBpbiBoZXJlIGFuZCByZXR1cm4gLUVJ TlZBTC4KCi1NaWthCgo+ICsJZm9yIChpID0gcGRlOyBpIDwgcGRlICsgY291bnQ7IGkrKykgewo+ ICsJCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0ID0gYWxsb2NfcHRfc2luZ2xlKCk7 Cj4gKwo+ICsJCWlmIChJU19FUlIocHQpKSB7Cj4gKwkJCXJldCA9IFBUUl9FUlIocHQpOwo+ICsJ CQlnb3RvIGVycl9vdXQ7Cj4gKwkJfQo+ICsJCVdBUk4ocGQtPnBhZ2VfdGFibGVzW2ldLAo+ICsJ CSAgICAgIkxlYWtpbmcgcGFnZSBkaXJlY3RvcnkgZW50cnkgJWQgKCVwYSlcbiIsCj4gKwkJICAg ICBpLCBwZC0+cGFnZV90YWJsZXNbaV0pOwo+ICsJCXBkLT5wYWdlX3RhYmxlc1tpXSA9IHB0Owo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX291dDoKPiArCXdoaWxlIChpLS0pCj4g KwkJdW5tYXBfYW5kX2ZyZWVfcHQocGQtPnBhZ2VfdGFibGVzW2ldKTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVubWFwX2FuZF9mcmVlX3BkKHN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5X2VudHJ5ICpwZCkKPiArewo+ICsJaWYgKHBkLT5wYWdlKSB7Cj4gKwkJX19m cmVlX3BhZ2UocGQtPnBhZ2UpOwo+ICsJCWtmcmVlKHBkKTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICphbGxvY19wZF9zaW5nbGUodm9p ZCkKPiArewo+ICsJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkOwo+ICsKPiAr CXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBkKQo+ICsJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXBkLT5wYWdlID0gYWxsb2NfcGFnZShH RlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwlpZiAoIXBkLT5wYWdlKSB7Cj4gKwkJa2ZyZWUo cGQpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ICsKPiArCXJldHVybiBw ZDsKPiArfQo+ICsKPiAgLyogQnJvYWR3ZWxsIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIgRGVzY3Jp cHRvcnMgKi8KPiAgc3RhdGljIGludCBnZW44X3dyaXRlX3BkcChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLCB1bnNpZ25lZCBlbnRyeSwKPiAgCQkJICAgdWludDY0X3QgdmFsKQo+IEBAIC0z MDcsNyArNDAwLDcgQEAgc3RhdGljIGludCBnZW44X21tX3N3aXRjaChzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQsCj4gIAlpbnQgdXNlZF9wZCA9IHBwZ3R0LT5udW1fcGRfZW50cmllcyAvIEdF TjhfUERFU19QRVJfUEFHRTsKPiAgCj4gIAlmb3IgKGkgPSB1c2VkX3BkIC0gMTsgaSA+PSAwOyBp LS0pIHsKPiAtCQlkbWFfYWRkcl90IGFkZHIgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ld LmRhZGRyOwo+ICsJCWRtYV9hZGRyX3QgYWRkciA9IHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rvcnlb aV0tPmRhZGRyOwo+ICAJCXJldCA9IGdlbjhfd3JpdGVfcGRwKHJpbmcsIGksIGFkZHIpOwo+ICAJ CWlmIChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gQEAgLTMzNCw4ICs0MjcsMjQgQEAgc3RhdGlj IHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKPiAgCQkJCSAgICAgIEk5MTVfQ0FDSEVfTExDLCB1c2Vfc2NyYXRjaCk7Cj4gIAo+ICAJd2hp bGUgKG51bV9lbnRyaWVzKSB7Cj4gLQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkg KnBkID0gJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRwZV07Cj4gLQkJc3RydWN0IHBhZ2Ug KnBhZ2VfdGFibGUgPSBwZC0+cGFnZV90YWJsZXNbcGRlXS5wYWdlOwo+ICsJCXN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZDsKPiArCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2Vu dHJ5ICpwdDsKPiArCQlzdHJ1Y3QgcGFnZSAqcGFnZV90YWJsZTsKPiArCj4gKwkJaWYgKFdBUk5f T04oIXBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRwZV0pKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJcGQgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkcGVdOwo+ICsKPiArCQlpZiAo V0FSTl9PTighcGQtPnBhZ2VfdGFibGVzW3BkZV0pKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJ cHQgPSBwZC0+cGFnZV90YWJsZXNbcGRlXTsKPiArCj4gKwkJaWYgKFdBUk5fT04oIXB0LT5wYWdl KSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXBhZ2VfdGFibGUgPSBwdC0+cGFnZTsKPiAgCj4g IAkJbGFzdF9wdGUgPSBwdGUgKyBudW1fZW50cmllczsKPiAgCQlpZiAobGFzdF9wdGUgPiBHRU44 X1BURVNfUEVSX1BBR0UpCj4gQEAgLTM4MCw4ICs0ODksOSBAQCBzdGF0aWMgdm9pZCBnZW44X3Bw Z3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQli cmVhazsKPiAgCj4gIAkJaWYgKHB0X3ZhZGRyID09IE5VTEwpIHsKPiAtCQkJc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkID0gJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRw ZV07Cj4gLQkJCXN0cnVjdCBwYWdlICpwYWdlX3RhYmxlID0gcGQtPnBhZ2VfdGFibGVzW3BkZV0u cGFnZTsKPiArCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkID0gcHBndHQt PnBkcC5wYWdlX2RpcmVjdG9yeVtwZHBlXTsKPiArCQkJc3RydWN0IGk5MTVfcGFnZV90YWJsZV9l bnRyeSAqcHQgPSBwZC0+cGFnZV90YWJsZXNbcGRlXTsKPiArCQkJc3RydWN0IHBhZ2UgKnBhZ2Vf dGFibGUgPSBwdC0+cGFnZTsKPiAgCj4gIAkJCXB0X3ZhZGRyID0ga21hcF9hdG9taWMocGFnZV90 YWJsZSk7Cj4gIAkJfQo+IEBAIC00MTIsMTggKzUyMiwxNiBAQCBzdGF0aWMgdm9pZCBnZW44X2Zy ZWVfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkKQo+ICB7 Cj4gIAlpbnQgaTsKPiAgCj4gLQlpZiAocGQtPnBhZ2VfdGFibGVzID09IE5VTEwpCj4gKwlpZiAo IXBkLT5wYWdlKQo+ICAJCXJldHVybjsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgR0VOOF9QREVT X1BFUl9QQUdFOyBpKyspCj4gLQkJaWYgKHBkLT5wYWdlX3RhYmxlc1tpXS5wYWdlKQo+IC0JCQlf X2ZyZWVfcGFnZShwZC0+cGFnZV90YWJsZXNbaV0ucGFnZSk7Cj4gLX0KPiArCWZvciAoaSA9IDA7 IGkgPCBHRU44X1BERVNfUEVSX1BBR0U7IGkrKykgewo+ICsJCWlmIChXQVJOX09OKCFwZC0+cGFn ZV90YWJsZXNbaV0pKQo+ICsJCQljb250aW51ZTsKPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjhfZnJl ZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCkK PiAtewo+IC0Ja2ZyZWUocGQtPnBhZ2VfdGFibGVzKTsKPiAtCV9fZnJlZV9wYWdlKHBkLT5wYWdl KTsKPiArCQl1bm1hcF9hbmRfZnJlZV9wdChwZC0+cGFnZV90YWJsZXNbaV0pOwo+ICsJCXBkLT5w YWdlX3RhYmxlc1tpXSA9IE5VTEw7Cj4gKwl9Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjhf cHBndHRfZnJlZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gQEAgLTQzMSw4ICs1Mzks MTEgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9mcmVlKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCkKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+bnVtX3BkX3Bh Z2VzOyBpKyspIHsKPiAtCQlnZW44X2ZyZWVfcGFnZV90YWJsZXMoJnBwZ3R0LT5wZHAucGFnZV9k aXJlY3RvcnlbaV0pOwo+IC0JCWdlbjhfZnJlZV9wYWdlX2RpcmVjdG9yaWVzKCZwcGd0dC0+cGRw LnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiArCQlpZiAoV0FSTl9PTighcHBndHQtPnBkcC5wYWdlX2Rp cmVjdG9yeVtpXSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlnZW44X2ZyZWVfcGFnZV90YWJs ZXMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSk7Cj4gKwkJdW5tYXBfYW5kX2ZyZWVfcGQo cHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSk7Cj4gIAl9Cj4gIH0KPiAgCj4gQEAgLTQ0NCwx NCArNTU1LDIzIEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfdW5tYXBfcGFnZXMoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfcGFn ZXM7IGkrKykgewo+ICAJCS8qIFRPRE86IEluIHRoZSBmdXR1cmUgd2UnbGwgc3VwcG9ydCBzcGFy c2UgbWFwcGluZ3MsIHNvIHRoaXMKPiAgCQkgKiB3aWxsIGhhdmUgdG8gY2hhbmdlLiAqLwo+IC0J CWlmICghcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5kYWRkcikKPiArCQlpZiAoIXBwZ3R0 LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0tPmRhZGRyKQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJ cGNpX3VubWFwX3BhZ2UoaHdkZXYsIHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0uZGFkZHIs IFBBR0VfU0laRSwKPiArCQlwY2lfdW5tYXBfcGFnZShod2RldiwgcHBndHQtPnBkcC5wYWdlX2Rp cmVjdG9yeVtpXS0+ZGFkZHIsIFBBR0VfU0laRSwKPiAgCQkJICAgICAgIFBDSV9ETUFfQklESVJF Q1RJT05BTCk7Cj4gIAo+ICAJCWZvciAoaiA9IDA7IGogPCBHRU44X1BERVNfUEVSX1BBR0U7IGor Kykgewo+IC0JCQlkbWFfYWRkcl90IGFkZHIgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ld LnBhZ2VfdGFibGVzW2pdLmRhZGRyOwo+ICsJCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9l bnRyeSAqcGQgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldOwo+ICsJCQlzdHJ1Y3QgaTkx NV9wYWdlX3RhYmxlX2VudHJ5ICpwdDsKPiArCQkJZG1hX2FkZHJfdCBhZGRyOwo+ICsKPiArCQkJ aWYgKFdBUk5fT04oIXBkLT5wYWdlX3RhYmxlc1tqXSkpCj4gKwkJCQljb250aW51ZTsKPiArCj4g KwkJCXB0ID0gcGQtPnBhZ2VfdGFibGVzW2pdOwo+ICsJCQlhZGRyID0gcHQtPmRhZGRyOwo+ICsK PiAgCQkJaWYgKGFkZHIpCj4gIAkJCQlwY2lfdW5tYXBfcGFnZShod2RldiwgYWRkciwgUEFHRV9T SVpFLAo+ICAJCQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwo+IEBAIC00NzAsMjUg KzU5MCwyMCBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXAoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0pCj4gIAo+ICBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NhdGVfcGFn ZV90YWJsZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICB7Cj4gLQlpbnQgaSwgajsK PiArCWludCBpLCByZXQ7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfcGFn ZXM7IGkrKykgewo+IC0JCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCA9ICZw cGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldOwo+IC0JCWZvciAoaiA9IDA7IGogPCBHRU44X1BE RVNfUEVSX1BBR0U7IGorKykgewo+IC0JCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpw dCA9ICZwZC0+cGFnZV90YWJsZXNbal07Cj4gLQo+IC0JCQlwdC0+cGFnZSA9IGFsbG9jX3BhZ2Uo R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+IC0JCQlpZiAoIXB0LT5wYWdlKQo+IC0JCQkJZ290 byB1bndpbmRfb3V0Owo+IC0KPiAtCQl9Cj4gKwkJcmV0ID0gYWxsb2NfcHRfcmFuZ2UocHBndHQt PnBkcC5wYWdlX2RpcmVjdG9yeVtpXSwKPiArCQkJCSAgICAgMCwgR0VOOF9QREVTX1BFUl9QQUdF KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIHVud2luZF9vdXQ7Cj4gIAl9Cj4gIAo+ICAJcmV0 dXJuIDA7Cj4gIAo+ICB1bndpbmRfb3V0Ogo+ICAJd2hpbGUgKGktLSkKPiAtCQlnZW44X2ZyZWVf cGFnZV90YWJsZXMoJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0pOwo+ICsJCWdlbjhfZnJl ZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiAgCj4gIAlyZXR1 cm4gLUVOT01FTTsKPiAgfQo+IEBAIC00OTksMTcgKzYxNCw5IEBAIHN0YXRpYyBpbnQgZ2VuOF9w cGd0dF9hbGxvY2F0ZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dCwKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBtYXhfcGRwOyBpKyspIHsKPiAt CQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdDsKPiAtCj4gLQkJcHQgPSBrY2FsbG9j KEdFTjhfUERFU19QRVJfUEFHRSwgc2l6ZW9mKCpwdCksIEdGUF9LRVJORUwpOwo+IC0JCWlmICgh cHQpCj4gKwkJcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSA9IGFsbG9jX3BkX3NpbmdsZSgp Owo+ICsJCWlmIChJU19FUlIocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSkpCj4gIAkJCWdv dG8gdW53aW5kX291dDsKPiAtCj4gLQkJcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdl ID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKPiAtCQlpZiAoIXBwZ3R0LT5wZHAucGFnZV9kaXJl Y3RvcnlbaV0ucGFnZSkKPiAtCQkJZ290byB1bndpbmRfb3V0Owo+IC0KPiAtCQlwcGd0dC0+cGRw LnBhZ2VfZGlyZWN0b3J5W2ldLnBhZ2VfdGFibGVzID0gcHQ7Cj4gIAl9Cj4gIAo+ICAJcHBndHQt Pm51bV9wZF9wYWdlcyA9IG1heF9wZHA7Cj4gQEAgLTUxOCwxMCArNjI1LDggQEAgc3RhdGljIGlu dCBnZW44X3BwZ3R0X2FsbG9jYXRlX3BhZ2VfZGlyZWN0b3JpZXMoc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0LAo+ICAJcmV0dXJuIDA7Cj4gIAo+ICB1bndpbmRfb3V0Ogo+IC0Jd2hpbGUgKGkt LSkgewo+IC0JCWtmcmVlKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZV90YWJsZXMp Owo+IC0JCV9fZnJlZV9wYWdlKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZSk7Cj4g LQl9Cj4gKwl3aGlsZSAoaS0tKQo+ICsJCXVubWFwX2FuZF9mcmVlX3BkKHBwZ3R0LT5wZHAucGFn ZV9kaXJlY3RvcnlbaV0pOwo+ICAKPiAgCXJldHVybiAtRU5PTUVNOwo+ICB9Cj4gQEAgLTU1Niwx NCArNjYxLDE0IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9zZXR1cF9wYWdlX2RpcmVjdG9yaWVz KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCWludCByZXQ7Cj4gIAo+ICAJcGRfYWRk ciA9IHBjaV9tYXBfcGFnZShwcGd0dC0+YmFzZS5kZXYtPnBkZXYsCj4gLQkJCSAgICAgICBwcGd0 dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkXS5wYWdlLCAwLAo+ICsJCQkgICAgICAgcHBndHQtPnBk cC5wYWdlX2RpcmVjdG9yeVtwZF0tPnBhZ2UsIDAsCj4gIAkJCSAgICAgICBQQUdFX1NJWkUsIFBD SV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gIAo+ICAJcmV0ID0gcGNpX2RtYV9tYXBwaW5nX2Vycm9y KHBwZ3R0LT5iYXNlLmRldi0+cGRldiwgcGRfYWRkcik7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVy biByZXQ7Cj4gIAo+IC0JcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZF0uZGFkZHIgPSBwZF9h ZGRyOwo+ICsJcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZF0tPmRhZGRyID0gcGRfYWRkcjsK PiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC01NzMsOCArNjc4LDggQEAgc3RhdGljIGludCBn ZW44X3BwZ3R0X3NldHVwX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwK PiAgCQkJCQljb25zdCBpbnQgcHQpCj4gIHsKPiAgCWRtYV9hZGRyX3QgcHRfYWRkcjsKPiAtCXN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZGlyID0gJnBwZ3R0LT5wZHAucGFnZV9k aXJlY3RvcnlbcGRdOwo+IC0Jc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHRhYiA9ICZw ZGlyLT5wYWdlX3RhYmxlc1twdF07Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRy eSAqcGRpciA9IHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRdOwo+ICsJc3RydWN0IGk5MTVf cGFnZV90YWJsZV9lbnRyeSAqcHRhYiA9IHBkaXItPnBhZ2VfdGFibGVzW3B0XTsKPiAgCXN0cnVj dCBwYWdlICpwID0gcHRhYi0+cGFnZTsKPiAgCWludCByZXQ7Cj4gIAo+IEBAIC02MzcsMTAgKzc0 MiwxMiBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfaW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAq cHBndHQsIHVpbnQ2NF90IHNpemUpCj4gIAkgKiB3aWxsIG5ldmVyIG5lZWQgdG8gdG91Y2ggdGhl IFBERXMgYWdhaW4uCj4gIAkgKi8KPiAgCWZvciAoaSA9IDA7IGkgPCBtYXhfcGRwOyBpKyspIHsK PiArCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGQgPSBwcGd0dC0+cGRwLnBh Z2VfZGlyZWN0b3J5W2ldOwo+ICAJCWdlbjhfcHBndHRfcGRlX3QgKnBkX3ZhZGRyOwo+IC0JCXBk X3ZhZGRyID0ga21hcF9hdG9taWMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdlKTsK PiArCQlwZF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0t PnBhZ2UpOwo+ICAJCWZvciAoaiA9IDA7IGogPCBHRU44X1BERVNfUEVSX1BBR0U7IGorKykgewo+ IC0JCQlkbWFfYWRkcl90IGFkZHIgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLnBhZ2Vf dGFibGVzW2pdLmRhZGRyOwo+ICsJCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdCA9 IHBkLT5wYWdlX3RhYmxlc1tqXTsKPiArCQkJZG1hX2FkZHJfdCBhZGRyID0gcHQtPmRhZGRyOwo+ ICAJCQlwZF92YWRkcltqXSA9IGdlbjhfcGRlX2VuY29kZShwcGd0dC0+YmFzZS5kZXYsIGFkZHIs Cj4gIAkJCQkJCSAgICAgIEk5MTVfQ0FDSEVfTExDKTsKPiAgCQl9Cj4gQEAgLTY5MSw3ICs3OTgs NyBAQCBzdGF0aWMgdm9pZCBnZW42X2R1bXBfcHBndHQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBw Z3R0LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gIAlmb3IgKHBkZSA9IDA7IHBkZSA8IHBwZ3R0LT5u dW1fcGRfZW50cmllczsgcGRlKyspIHsKPiAgCQl1MzIgZXhwZWN0ZWQ7Cj4gIAkJZ2VuNl9ndHRf cHRlX3QgKnB0X3ZhZGRyOwo+IC0JCWRtYV9hZGRyX3QgcHRfYWRkciA9IHBwZ3R0LT5wZC5wYWdl X3RhYmxlc1twZGVdLmRhZGRyOwo+ICsJCWRtYV9hZGRyX3QgcHRfYWRkciA9IHBwZ3R0LT5wZC5w YWdlX3RhYmxlc1twZGVdLT5kYWRkcjsKPiAgCQlwZF9lbnRyeSA9IHJlYWRsKHBkX2FkZHIgKyBw ZGUpOwo+ICAJCWV4cGVjdGVkID0gKEdFTjZfUERFX0FERFJfRU5DT0RFKHB0X2FkZHIpIHwgR0VO Nl9QREVfVkFMSUQpOwo+ICAKPiBAQCAtNzAyLDcgKzgwOSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZf ZHVtcF9wcGd0dChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsIHN0cnVjdCBzZXFfZmlsZSAq bSkKPiAgCQkJCSAgIGV4cGVjdGVkKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJcdFBERTogJXhcbiIs IHBkX2VudHJ5KTsKPiAgCj4gLQkJcHRfdmFkZHIgPSBrbWFwX2F0b21pYyhwcGd0dC0+cGQucGFn ZV90YWJsZXNbcGRlXS5wYWdlKTsKPiArCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5w ZC5wYWdlX3RhYmxlc1twZGVdLT5wYWdlKTsKPiAgCQlmb3IgKHB0ZSA9IDA7IHB0ZSA8IEk5MTVf UFBHVFRfUFRfRU5UUklFUzsgcHRlKz00KSB7Cj4gIAkJCXVuc2lnbmVkIGxvbmcgdmEgPQo+ICAJ CQkJKHBkZSAqIFBBR0VfU0laRSAqIEk5MTVfUFBHVFRfUFRfRU5UUklFUykgKwo+IEBAIC03NDEs NyArODQ4LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl93cml0ZV9wZGVzKHN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICpwcGd0dCkKPiAgCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+bnVtX3BkX2VudHJpZXM7IGkr Kykgewo+ICAJCWRtYV9hZGRyX3QgcHRfYWRkcjsKPiAgCj4gLQkJcHRfYWRkciA9IHBwZ3R0LT5w ZC5wYWdlX3RhYmxlc1tpXS5kYWRkcjsKPiArCQlwdF9hZGRyID0gcHBndHQtPnBkLnBhZ2VfdGFi bGVzW2ldLT5kYWRkcjsKPiAgCQlwZF9lbnRyeSA9IEdFTjZfUERFX0FERFJfRU5DT0RFKHB0X2Fk ZHIpOwo+ICAJCXBkX2VudHJ5IHw9IEdFTjZfUERFX1ZBTElEOwo+ICAKPiBAQCAtOTA3LDcgKzEw MTQsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCWlmIChsYXN0X3B0ZSA+IEk5MTVfUFBHVFRfUFRfRU5UUklF UykKPiAgCQkJbGFzdF9wdGUgPSBJOTE1X1BQR1RUX1BUX0VOVFJJRVM7Cj4gIAo+IC0JCXB0X3Zh ZGRyID0ga21hcF9hdG9taWMocHBndHQtPnBkLnBhZ2VfdGFibGVzW2FjdF9wdF0ucGFnZSk7Cj4g KwkJcHRfdmFkZHIgPSBrbWFwX2F0b21pYyhwcGd0dC0+cGQucGFnZV90YWJsZXNbYWN0X3B0XS0+ cGFnZSk7Cj4gIAo+ICAJCWZvciAoaSA9IGZpcnN0X3B0ZTsgaSA8IGxhc3RfcHRlOyBpKyspCj4g IAkJCXB0X3ZhZGRyW2ldID0gc2NyYXRjaF9wdGU7Cj4gQEAgLTkzNiw3ICsxMDQzLDcgQEAgc3Rh dGljIHZvaWQgZ2VuNl9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiAgCXB0X3ZhZGRyID0gTlVMTDsKPiAgCWZvcl9lYWNoX3NnX3BhZ2UocGFnZXMt PnNnbCwgJnNnX2l0ZXIsIHBhZ2VzLT5uZW50cywgMCkgewo+ICAJCWlmIChwdF92YWRkciA9PSBO VUxMKQo+IC0JCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1th Y3RfcHRdLnBhZ2UpOwo+ICsJCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5wZC5wYWdl X3RhYmxlc1thY3RfcHRdLT5wYWdlKTsKPiAgCj4gIAkJcHRfdmFkZHJbYWN0X3B0ZV0gPQo+ICAJ CQl2bS0+cHRlX2VuY29kZShzZ19wYWdlX2l0ZXJfZG1hX2FkZHJlc3MoJnNnX2l0ZXIpLAo+IEBA IC05NTksNyArMTA2Niw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfdW5tYXBfcGFnZXMoc3Ry dWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+ bnVtX3BkX2VudHJpZXM7IGkrKykKPiAgCQlwY2lfdW5tYXBfcGFnZShwcGd0dC0+YmFzZS5kZXYt PnBkZXYsCj4gLQkJCSAgICAgICBwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0uZGFkZHIsCj4gKwkJ CSAgICAgICBwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0tPmRhZGRyLAo+ICAJCQkgICAgICAgNDA5 NiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKPiAgfQo+ICAKPiBAQCAtOTY4LDggKzEwNzUsOSBA QCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWUoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 KQo+ICAJaW50IGk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfZW50cmll czsgaSsrKQo+IC0JCV9fZnJlZV9wYWdlKHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1tpXS5wYWdlKTsK PiAtCWtmcmVlKHBwZ3R0LT5wZC5wYWdlX3RhYmxlcyk7Cj4gKwkJdW5tYXBfYW5kX2ZyZWVfcHQo cHBndHQtPnBkLnBhZ2VfdGFibGVzW2ldKTsKPiArCj4gKwl1bm1hcF9hbmRfZnJlZV9wZCgmcHBn dHQtPnBkKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+IEBAIC0xMDI0LDI3ICsxMTMyLDYgQEAgYWxsb2M6 Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jYXRl X3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAtewo+IC0Jc3RydWN0 IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQ7Cj4gLQlpbnQgaTsKPiAtCj4gLQlwdCA9IGtjYWxs b2MocHBndHQtPm51bV9wZF9lbnRyaWVzLCBzaXplb2YoKnB0KSwgR0ZQX0tFUk5FTCk7Cj4gLQlp ZiAoIXB0KQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBwcGd0 dC0+bnVtX3BkX2VudHJpZXM7IGkrKykgewo+IC0JCXB0W2ldLnBhZ2UgPSBhbGxvY19wYWdlKEdG UF9LRVJORUwpOwo+IC0JCWlmICghcHQtPnBhZ2UpIHsKPiAtCQkJZ2VuNl9wcGd0dF9mcmVlKHBw Z3R0KTsKPiAtCQkJcmV0dXJuIC1FTk9NRU07Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXBwZ3R0LT5w ZC5wYWdlX3RhYmxlcyA9IHB0Owo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQg Z2VuNl9wcGd0dF9hbGxvYyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIHsKPiAgCWlu dCByZXQ7Cj4gQEAgLTEwNTMsNyArMTE0MCw3IEBAIHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9hbGxv YyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiBy ZXQ7Cj4gIAo+IC0JcmV0ID0gZ2VuNl9wcGd0dF9hbGxvY2F0ZV9wYWdlX3RhYmxlcyhwcGd0dCk7 Cj4gKwlyZXQgPSBhbGxvY19wdF9yYW5nZSgmcHBndHQtPnBkLCAwLCBwcGd0dC0+bnVtX3BkX2Vu dHJpZXMpOwo+ICAJaWYgKHJldCkgewo+ICAJCWRybV9tbV9yZW1vdmVfbm9kZSgmcHBndHQtPm5v ZGUpOwo+ICAJCXJldHVybiByZXQ7Cj4gQEAgLTEwNzEsNyArMTE1OCw3IEBAIHN0YXRpYyBpbnQg Z2VuNl9wcGd0dF9zZXR1cF9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQp Cj4gIAkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gIAkJZG1hX2FkZHJfdCBwdF9hZGRyOwo+ICAKPiAt CQlwYWdlID0gcHBndHQtPnBkLnBhZ2VfdGFibGVzW2ldLnBhZ2U7Cj4gKwkJcGFnZSA9IHBwZ3R0 LT5wZC5wYWdlX3RhYmxlc1tpXS0+cGFnZTsKPiAgCQlwdF9hZGRyID0gcGNpX21hcF9wYWdlKGRl di0+cGRldiwgcGFnZSwgMCwgNDA5NiwKPiAgCQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9O QUwpOwo+ICAKPiBAQCAtMTA4MCw3ICsxMTY3LDcgQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X3Nl dHVwX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCQkJcmV0dXJu IC1FSU87Cj4gIAkJfQo+ICAKPiAtCQlwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0uZGFkZHIgPSBw dF9hZGRyOwo+ICsJCXBwZ3R0LT5wZC5wYWdlX3RhYmxlc1tpXS0+ZGFkZHIgPSBwdF9hZGRyOwo+ ICAJfQo+ICAKPiAgCXJldHVybiAwOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4g aW5kZXggNmVmZWIxOC4uZThjYWQ3MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5oCj4gQEAgLTE5OSwxMiArMTk5LDEyIEBAIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2Vu dHJ5IHsKPiAgCQlkbWFfYWRkcl90IGRhZGRyOwo+ICAJfTsKPiAgCj4gLQlzdHJ1Y3QgaTkxNV9w YWdlX3RhYmxlX2VudHJ5ICpwYWdlX3RhYmxlczsKPiArCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVf ZW50cnkgKnBhZ2VfdGFibGVzW0dFTjZfUFBHVFRfUERfRU5UUklFU107IC8qIFBERXMgKi8KPiAg fTsKPiAgCj4gIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXJfZW50cnkgewo+ICAJ Lyogc3RydWN0IHBhZ2UgKnBhZ2U7ICovCj4gLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9l bnRyeSBwYWdlX2RpcmVjdG9yeVtHRU44X0xFR0FDWV9QRFBFU107Cj4gKwlzdHJ1Y3QgaTkxNV9w YWdlX2RpcmVjdG9yeV9lbnRyeSAqcGFnZV9kaXJlY3RvcnlbR0VOOF9MRUdBQ1lfUERQRVNdOwo+ ICB9Owo+ICAKPiAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSB7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmMKPiBpbmRleCBhNzg0ZDFkLi5lZmFhZWJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmMKPiBAQCAtMTczMSwxNCArMTczMSwxNCBAQCBwb3B1bGF0ZV9scl9jb250ZXh0KHN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhf bwo+ICAJcmVnX3N0YXRlW0NUWF9QRFAxX0xEV10gPSBHRU44X1JJTkdfUERQX0xEVyhyaW5nLCAx KTsKPiAgCXJlZ19zdGF0ZVtDVFhfUERQMF9VRFddID0gR0VOOF9SSU5HX1BEUF9VRFcocmluZywg MCk7Cj4gIAlyZWdfc3RhdGVbQ1RYX1BEUDBfTERXXSA9IEdFTjhfUklOR19QRFBfTERXKHJpbmcs IDApOwo+IC0JcmVnX3N0YXRlW0NUWF9QRFAzX1VEVysxXSA9IHVwcGVyXzMyX2JpdHMocHBndHQt PnBkcC5wYWdlX2RpcmVjdG9yeVszXS5kYWRkcik7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDNfTERX KzFdID0gbG93ZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzNdLmRhZGRyKTsK PiAtCXJlZ19zdGF0ZVtDVFhfUERQMl9VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAu cGFnZV9kaXJlY3RvcnlbMl0uZGFkZHIpOwo+IC0JcmVnX3N0YXRlW0NUWF9QRFAyX0xEVysxXSA9 IGxvd2VyXzMyX2JpdHMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVsyXS5kYWRkcik7Cj4gLQly ZWdfc3RhdGVbQ1RYX1BEUDFfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2Vf ZGlyZWN0b3J5WzFdLmRhZGRyKTsKPiAtCXJlZ19zdGF0ZVtDVFhfUERQMV9MRFcrMV0gPSBsb3dl cl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMV0uZGFkZHIpOwo+IC0JcmVnX3N0 YXRlW0NUWF9QRFAwX1VEVysxXSA9IHVwcGVyXzMyX2JpdHMocHBndHQtPnBkcC5wYWdlX2RpcmVj dG9yeVswXS5kYWRkcik7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDBfTERXKzFdID0gbG93ZXJfMzJf Yml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzBdLmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtD VFhfUERQM19VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rvcnlb M10tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQM19MRFcrMV0gPSBsb3dlcl8zMl9iaXRz KHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbM10tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhf UERQMl9VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMl0t PmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMl9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBw Z3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMl0tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQ MV9VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMV0tPmRh ZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMV9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0 LT5wZHAucGFnZV9kaXJlY3RvcnlbMV0tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMF9V RFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMF0tPmRhZGRy KTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMF9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5w ZHAucGFnZV9kaXJlY3RvcnlbMF0tPmRhZGRyKTsKPiAgCWlmIChyaW5nLT5pZCA9PSBSQ1MpIHsK PiAgCQlyZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMl0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgx KTsKPiAgCQlyZWdfc3RhdGVbQ1RYX1JfUFdSX0NMS19TVEFURV0gPSAweDIwYzg7Cj4gLS0gCj4g Mi4xLjEKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==