From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v6 03/32] drm/i915: Create page table allocators Date: Wed, 25 Feb 2015 15:34:20 +0200 Message-ID: <8761aq868z.fsf@gaia.fi.intel.com> References: <1418922621-25818-1-git-send-email-michel.thierry@intel.com> <1424794985-14441-1-git-send-email-michel.thierry@intel.com> <1424794985-14441-4-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 3A6FD6E656 for ; Wed, 25 Feb 2015 05:35:38 -0800 (PST) In-Reply-To: <1424794985-14441-4-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 dCB0aGluZ3MgZ2FpbiBhZGRpdGlvbmFsIGNvbXBsZXhpdHkgYXMgYQo+IHJlc3VsdC4KPgo+IFRo aXMgcGF0Y2ggZXhpc3RzIGZvciBhIGZldyByZWFzb25zOgo+IDEuIFNwbGl0dGluZyBvdXQgdGhl IGZ1bmN0aW9ucyBhbGxvd3MgZWFzaWx5IGNvbWJpbmluZyBHRU42IGFuZCBHRU44Cj4gY29kZS4g UGFnZSB0YWJsZXMgaGF2ZSBubyBkaWZmZXJlbmNlIGJhc2VkIG9uIEdFTjguIEFzIHdlJ2xsIHNl ZSBpbiBhCj4gZnV0dXJlIHBhdGNoIHdoZW4gd2UgYWRkIHRoZSBETUEgbWFwcGluZ3MgdG8gdGhl IGFsbG9jYXRpb25zLCBpdAo+IHJlcXVpcmVzIG9ubHkgb25lIHNtYWxsIGNoYW5nZSB0byBtYWtl IHdvcmssIGFuZCBlcnJvciBoYW5kbGluZyBzaG91bGQKPiBqdXN0IGZhbGwgaW50byBwbGFjZS4K Pgo+IDIuIFVubGVzcyB3ZSBhbHdheXMgd2FudCB0byBhbGxvY2F0ZSBhbGwgcGFnZSB0YWJsZXMg dW5kZXIgYSBnaXZlbiBQREUsCj4gd2UnbGwgaGF2ZSB0byBldmVudHVhbGx5IGJyZWFrIHRoaXMg dXAgaW50byBhbiBhcnJheSBvZiBwb2ludGVycyAob3IKPiBwb2ludGVyIHRvIHBvaW50ZXIpLgo+ Cj4gMy4gSGF2aW5nIHRoZSBkaXNjcmV0ZSBmdW5jdGlvbnMgaXMgZWFzaWVyIHRvIHJldmlldywg YW5kIHVuZGVyc3RhbmQuCj4gQWxsIGFsbG9jYXRpb25zIGFuZCBmcmVlcyBub3cgdGFrZSBwbGFj ZSBpbiBqdXN0IGEgY291cGxlIG9mIGxvY2F0aW9ucy4KPiBSZXZpZXdpbmcsIGFuZCBjYXRjaGlu ZyBsZWFrcyBzaG91bGQgYmUgZWFzeS4KPgo+IDQuIExlc3MgaW1wb3J0YW50OiB0aGUgR0ZQIGZs YWdzIGFyZSBjb25maW5lZCB0byBvbmUgbG9jYXRpb24sIHdoaWNoCj4gbWFrZXMgcGxheWluZyBh cm91bmQgd2l0aCBzdWNoIHRoaW5ncyB0cml2aWFsLgo+Cj4gdjI6IFVwZGF0ZWQgY29tbWl0IG1l c3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBwYXRjaCBleGlzdHMKPgo+IHYzOiBGb3IgbHJjLCBz L3BkcC5wYWdlX2RpcmVjdG9yeVtpXS5kYWRkci9wZHAucGFnZV9kaXJlY3RvcnlbaV0tPmRhZGRy Lwo+Cj4gdjQ6IFJlbmFtZWQgZnJlZV9wdC9wZF9zaW5nbGUgZnVuY3Rpb25zIHRvIHVubWFwX2Fu ZF9mcmVlX3B0L3BkIChEYW5pZWwpCj4KPiB2NTogQWRkZWQgYWRkaXRpb25hbCBzYWZldHkgY2hl Y2tzIGluIGdlbjggY2xlYXIvZnJlZS91bm1hcC4KPgo+IHY2OiBVc2UgV0FSTl9PTiBhbmQgcmV0 dXJuIC1FSU5WQUwgaW4gYWxsb2NfcHRfcmFuZ2UgKE1pa2EpLgo+Cj4gdjc6IE1ha2UgZXJyX291 dCBsb29wIHN5bW1ldHJpY2FsIHRvIHRoZSB3YXkgd2UgYWxsb2NhdGUgaW4KPiBhbGxvY19wdF9y YW5nZS4gQWxzbyBzL3BhZ2VfdGFibGVzL3BhZ2VfdGFibGUgYW5kIGNvcnJlY3QgY29tbWl0Cj4g bWVzc2FnZSAoTWlrYSkKPgo+IENjOiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4 LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5u ZXQ+Cj4gU2lnbmVkLW9mZi1ieTogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVs LmNvbT4gKHYzKykKClJldmlld2VkLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGlu dGVsLmNvbT4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwg MjU0ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuaCB8ICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYyAgICB8ICAxNiArLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNzggaW5zZXJ0aW9u cygrKSwgOTYgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ IGluZGV4IGFiNmYxZDQuLjgxYzFkYmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYwo+IEBAIC0yNzksNiArMjc5LDk4IEBAIHN0YXRpYyBnZW42X2d0dF9wdGVfdCBpcmlzX3B0 ZV9lbmNvZGUoZG1hX2FkZHJfdCBhZGRyLAo+ICAJcmV0dXJuIHB0ZTsKPiAgfQo+ICAKPiArc3Rh dGljIHZvaWQgdW5tYXBfYW5kX2ZyZWVfcHQoc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAq cHQpCj4gK3sKPiArCWlmIChXQVJOX09OKCFwdC0+cGFnZSkpCj4gKwkJcmV0dXJuOwo+ICsJX19m cmVlX3BhZ2UocHQtPnBhZ2UpOwo+ICsJa2ZyZWUocHQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqYWxsb2NfcHRfc2luZ2xlKHZvaWQpCj4gK3sKPiAr CXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0Owo+ICsKPiArCXB0ID0ga3phbGxvYyhz aXplb2YoKnB0KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXB0KQo+ICsJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwo+ICsKPiArCXB0LT5wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19H RlBfWkVSTyk7Cj4gKwlpZiAoIXB0LT5wYWdlKSB7Cj4gKwkJa2ZyZWUocHQpOwo+ICsJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ICsKPiArCXJldHVybiBwdDsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIGFsbG9jX3B0X3JhbmdlKCkgLSBBbGxvY2F0ZSBhIG11bHRpcGxlIHBhZ2UgdGFi bGVzCj4gKyAqIEBwZDoJCVRoZSBwYWdlIGRpcmVjdG9yeSB3aGljaCB3aWxsIGhhdmUgYXQgbGVh c3QgQGNvdW50IGVudHJpZXMKPiArICoJCWF2YWlsYWJsZSB0byBwb2ludCB0byB0aGUgYWxsb2Nh dGVkIHBhZ2UgdGFibGVzLgo+ICsgKiBAcGRlOglGaXJzdCBwYWdlIGRpcmVjdG9yeSBlbnRyeSBm b3Igd2hpY2ggd2UgYXJlIGFsbG9jYXRpbmcuCj4gKyAqIEBjb3VudDoJTnVtYmVyIG9mIHBhZ2Vz IHRvIGFsbG9jYXRlLgo+ICsgKgo+ICsgKiBBbGxvY2F0ZXMgbXVsdGlwbGUgcGFnZSB0YWJsZSBw YWdlcyBhbmQgc2V0cyB0aGUgYXBwcm9wcmlhdGUgZW50cmllcyBpbiB0aGUKPiArICogcGFnZSB0 YWJsZSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBwYWdlIGRpcmVjdG9yeS4gRnVuY3Rpb24gY2xlYW5z IHVwIGFmdGVyCj4gKyAqIGl0c2VsZiBvbiBhbnkgZmFpbHVyZXMuCj4gKyAqCj4gKyAqIFJldHVy bjogMCBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZC4KPiArICovCj4gK3N0YXRpYyBpbnQgYWxsb2Nf cHRfcmFuZ2Uoc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkLCB1aW50MTZfdCBw ZGUsIHNpemVfdCBjb3VudCkKPiArewo+ICsJaW50IGksIHJldDsKPiArCj4gKwkvKiA1MTIgaXMg dGhlIG1heCBwYWdlIHRhYmxlcyBwZXIgcGFnZV9kaXJlY3Rvcnkgb24gYW55IHBsYXRmb3JtLiAq Lwo+ICsJaWYgKFdBUk5fT04ocGRlICsgY291bnQgPiBHRU42X1BQR1RUX1BEX0VOVFJJRVMpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWZvciAoaSA9IHBkZTsgaSA8IHBkZSArIGNvdW50 OyBpKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdCA9IGFsbG9jX3B0 X3NpbmdsZSgpOwo+ICsKPiArCQlpZiAoSVNfRVJSKHB0KSkgewo+ICsJCQlyZXQgPSBQVFJfRVJS KHB0KTsKPiArCQkJZ290byBlcnJfb3V0Owo+ICsJCX0KPiArCQlXQVJOKHBkLT5wYWdlX3RhYmxl W2ldLAo+ICsJCSAgICAgIkxlYWtpbmcgcGFnZSBkaXJlY3RvcnkgZW50cnkgJWQgKCVwYSlcbiIs Cj4gKwkJICAgICBpLCBwZC0+cGFnZV90YWJsZVtpXSk7Cj4gKwkJcGQtPnBhZ2VfdGFibGVbaV0g PSBwdDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9vdXQ6Cj4gKwl3aGlsZSAo aS0tID4gcGRlKQo+ICsJCXVubWFwX2FuZF9mcmVlX3B0KHBkLT5wYWdlX3RhYmxlW2ldKTsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVubWFwX2FuZF9mcmVlX3BkKHN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCkKPiArewo+ICsJaWYgKHBkLT5wYWdl KSB7Cj4gKwkJX19mcmVlX3BhZ2UocGQtPnBhZ2UpOwo+ICsJCWtmcmVlKHBkKTsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICphbGxvY19w ZF9zaW5nbGUodm9pZCkKPiArewo+ICsJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkg KnBkOwo+ICsKPiArCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIXBkKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXBkLT5wYWdlID0g YWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwlpZiAoIXBkLT5wYWdlKSB7 Cj4gKwkJa2ZyZWUocGQpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ICsK PiArCXJldHVybiBwZDsKPiArfQo+ICsKPiAgLyogQnJvYWR3ZWxsIFBhZ2UgRGlyZWN0b3J5IFBv aW50ZXIgRGVzY3JpcHRvcnMgKi8KPiAgc3RhdGljIGludCBnZW44X3dyaXRlX3BkcChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLCB1bnNpZ25lZCBlbnRyeSwKPiAgCQkJICAgdWludDY0X3Qg dmFsKQo+IEBAIC0zMTEsNyArNDAzLDcgQEAgc3RhdGljIGludCBnZW44X21tX3N3aXRjaChzdHJ1 Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4gIAlpbnQgdXNlZF9wZCA9IHBwZ3R0LT5udW1fcGRf ZW50cmllcyAvIEdFTjhfUERFU19QRVJfUEFHRTsKPiAgCj4gIAlmb3IgKGkgPSB1c2VkX3BkIC0g MTsgaSA+PSAwOyBpLS0pIHsKPiAtCQlkbWFfYWRkcl90IGFkZHIgPSBwcGd0dC0+cGRwLnBhZ2Vf ZGlyZWN0b3J5W2ldLmRhZGRyOwo+ICsJCWRtYV9hZGRyX3QgYWRkciA9IHBwZ3R0LT5wZHAucGFn ZV9kaXJlY3RvcnlbaV0tPmRhZGRyOwo+ICAJCXJldCA9IGdlbjhfd3JpdGVfcGRwKHJpbmcsIGks IGFkZHIpOwo+ICAJCWlmIChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gQEAgLTMzOCw4ICs0MzAs MjQgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCQkJCSAgICAgIEk5MTVfQ0FDSEVfTExDLCB1c2Vfc2NyYXRjaCk7 Cj4gIAo+ICAJd2hpbGUgKG51bV9lbnRyaWVzKSB7Cj4gLQkJc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnlfZW50cnkgKnBkID0gJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRwZV07Cj4gLQkJ c3RydWN0IHBhZ2UgKnBhZ2VfdGFibGUgPSBwZC0+cGFnZV90YWJsZVtwZGVdLnBhZ2U7Cj4gKwkJ c3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkOwo+ICsJCXN0cnVjdCBpOTE1X3Bh Z2VfdGFibGVfZW50cnkgKnB0Owo+ICsJCXN0cnVjdCBwYWdlICpwYWdlX3RhYmxlOwo+ICsKPiAr CQlpZiAoV0FSTl9PTighcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZHBlXSkpCj4gKwkJCWNv bnRpbnVlOwo+ICsKPiArCQlwZCA9IHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRwZV07Cj4g Kwo+ICsJCWlmIChXQVJOX09OKCFwZC0+cGFnZV90YWJsZVtwZGVdKSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCXB0ID0gcGQtPnBhZ2VfdGFibGVbcGRlXTsKPiArCj4gKwkJaWYgKFdBUk5fT04o IXB0LT5wYWdlKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXBhZ2VfdGFibGUgPSBwdC0+cGFn ZTsKPiAgCj4gIAkJbGFzdF9wdGUgPSBwdGUgKyBudW1fZW50cmllczsKPiAgCQlpZiAobGFzdF9w dGUgPiBHRU44X1BURVNfUEVSX1BBR0UpCj4gQEAgLTM4NCw4ICs0OTIsOSBAQCBzdGF0aWMgdm9p ZCBnZW44X3BwZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAo+ICAJCQlicmVhazsKPiAgCj4gIAkJaWYgKHB0X3ZhZGRyID09IE5VTEwpIHsKPiAtCQkJc3Ry dWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkID0gJnBwZ3R0LT5wZHAucGFnZV9kaXJl Y3RvcnlbcGRwZV07Cj4gLQkJCXN0cnVjdCBwYWdlICpwYWdlX3RhYmxlID0gcGQtPnBhZ2VfdGFi bGVbcGRlXS5wYWdlOwo+ICsJCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGQg PSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkcGVdOwo+ICsJCQlzdHJ1Y3QgaTkxNV9wYWdl X3RhYmxlX2VudHJ5ICpwdCA9IHBkLT5wYWdlX3RhYmxlW3BkZV07Cj4gKwkJCXN0cnVjdCBwYWdl ICpwYWdlX3RhYmxlID0gcHQtPnBhZ2U7Cj4gIAo+ICAJCQlwdF92YWRkciA9IGttYXBfYXRvbWlj KHBhZ2VfdGFibGUpOwo+ICAJCX0KPiBAQCAtNDE2LDE5ICs1MjUsMTYgQEAgc3RhdGljIHZvaWQg Z2VuOF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpw ZCkKPiAgewo+ICAJaW50IGk7Cj4gIAo+IC0JaWYgKHBkLT5wYWdlX3RhYmxlID09IE5VTEwpCj4g KwlpZiAoIXBkLT5wYWdlKQo+ICAJCXJldHVybjsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgR0VO OF9QREVTX1BFUl9QQUdFOyBpKyspCj4gLQkJaWYgKHBkLT5wYWdlX3RhYmxlW2ldLnBhZ2UpCj4g LQkJCV9fZnJlZV9wYWdlKHBkLT5wYWdlX3RhYmxlW2ldLnBhZ2UpOwo+IC19Cj4gKwlmb3IgKGkg PSAwOyBpIDwgR0VOOF9QREVTX1BFUl9QQUdFOyBpKyspIHsKPiArCQlpZiAoV0FSTl9PTighcGQt PnBhZ2VfdGFibGVbaV0pKQo+ICsJCQljb250aW51ZTsKPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjhf ZnJlZV9wYWdlX2RpcmVjdG9yeShzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGQp Cj4gLXsKPiAtCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwZCk7Cj4gLQlrZnJlZShwZC0+cGFnZV90 YWJsZSk7Cj4gLQlfX2ZyZWVfcGFnZShwZC0+cGFnZSk7Cj4gKwkJdW5tYXBfYW5kX2ZyZWVfcHQo cGQtPnBhZ2VfdGFibGVbaV0pOwo+ICsJCXBkLT5wYWdlX3RhYmxlW2ldID0gTlVMTDsKPiArCX0K PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9mcmVlKHN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICpwcGd0dCkKPiBAQCAtNDM2LDcgKzU0MiwxMSBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0 X2ZyZWUoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJaW50IGk7Cj4gIAo+ICAJZm9y IChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfcGFnZXM7IGkrKykgewo+IC0JCWdlbjhfZnJlZV9w YWdlX2RpcmVjdG9yeSgmcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSk7Cj4gKwkJaWYgKFdB Uk5fT04oIXBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0pKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0p Owo+ICsJCXVubWFwX2FuZF9mcmVlX3BkKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0pOwo+ ICAJfQo+ICB9Cj4gIAo+IEBAIC00NDgsMTQgKzU1OCwyMyBAQCBzdGF0aWMgdm9pZCBnZW44X3Bw Z3R0X3VubWFwX3BhZ2VzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCWZvciAoaSA9 IDA7IGkgPCBwcGd0dC0+bnVtX3BkX3BhZ2VzOyBpKyspIHsKPiAgCQkvKiBUT0RPOiBJbiB0aGUg ZnV0dXJlIHdlJ2xsIHN1cHBvcnQgc3BhcnNlIG1hcHBpbmdzLCBzbyB0aGlzCj4gIAkJICogd2ls bCBoYXZlIHRvIGNoYW5nZS4gKi8KPiAtCQlpZiAoIXBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rvcnlb aV0uZGFkZHIpCj4gKwkJaWYgKCFwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLT5kYWRkcikK PiAgCQkJY29udGludWU7Cj4gIAo+IC0JCXBjaV91bm1hcF9wYWdlKGh3ZGV2LCBwcGd0dC0+cGRw LnBhZ2VfZGlyZWN0b3J5W2ldLmRhZGRyLCBQQUdFX1NJWkUsCj4gKwkJcGNpX3VubWFwX3BhZ2Uo aHdkZXYsIHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0tPmRhZGRyLCBQQUdFX1NJWkUsCj4g IAkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwo+ICAKPiAgCQlmb3IgKGogPSAwOyBq IDwgR0VOOF9QREVTX1BFUl9QQUdFOyBqKyspIHsKPiAtCQkJZG1hX2FkZHJfdCBhZGRyID0gcHBn dHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdlX3RhYmxlW2pdLmRhZGRyOwo+ICsJCQlzdHJ1 Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGQgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0 b3J5W2ldOwo+ICsJCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdDsKPiArCQkJZG1h X2FkZHJfdCBhZGRyOwo+ICsKPiArCQkJaWYgKFdBUk5fT04oIXBkLT5wYWdlX3RhYmxlW2pdKSkK PiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJcHQgPSBwZC0+cGFnZV90YWJsZVtqXTsKPiArCQkJ YWRkciA9IHB0LT5kYWRkcjsKPiArCj4gIAkJCWlmIChhZGRyKQo+ICAJCQkJcGNpX3VubWFwX3Bh Z2UoaHdkZXYsIGFkZHIsIFBBR0VfU0laRSwKPiAgCQkJCQkgICAgICAgUENJX0RNQV9CSURJUkVD VElPTkFMKTsKPiBAQCAtNDc0LDI1ICs1OTMsMjAgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9j bGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAKPiAgc3RhdGljIGludCBn ZW44X3BwZ3R0X2FsbG9jYXRlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dCkKPiAgewo+IC0JaW50IGksIGo7Cj4gKwlpbnQgaSwgcmV0Owo+ICAKPiAgCWZvciAoaSA9IDA7 IGkgPCBwcGd0dC0+bnVtX3BkX3BhZ2VzOyBpKyspIHsKPiAtCQlzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeV9lbnRyeSAqcGQgPSAmcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXTsKPiAtCQlm b3IgKGogPSAwOyBqIDwgR0VOOF9QREVTX1BFUl9QQUdFOyBqKyspIHsKPiAtCQkJc3RydWN0IGk5 MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQgPSAmcGQtPnBhZ2VfdGFibGVbal07Cj4gLQo+IC0JCQlw dC0+cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+IC0JCQlpZiAo IXB0LT5wYWdlKQo+IC0JCQkJZ290byB1bndpbmRfb3V0Owo+IC0KPiAtCQl9Cj4gKwkJcmV0ID0g YWxsb2NfcHRfcmFuZ2UocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSwKPiArCQkJCSAgICAg MCwgR0VOOF9QREVTX1BFUl9QQUdFKTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIHVud2luZF9v dXQ7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIAo+ICB1bndpbmRfb3V0Ogo+ICAJd2hpbGUg KGktLSkKPiAtCQlnZW44X2ZyZWVfcGFnZV90YWJsZXMoJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rv cnlbaV0pOwo+ICsJCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0 b3J5W2ldKTsKPiAgCj4gIAlyZXR1cm4gLUVOT01FTTsKPiAgfQo+IEBAIC01MDMsMTkgKzYxNyw5 IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVj dCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkg PCBtYXhfcGRwOyBpKyspIHsKPiAtCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdDsK PiAtCj4gLQkJcHQgPSBrY2FsbG9jKEdFTjhfUERFU19QRVJfUEFHRSwgc2l6ZW9mKCpwdCksIEdG UF9LRVJORUwpOwo+IC0JCWlmICghcHQpCj4gLQkJCWdvdG8gdW53aW5kX291dDsKPiAtCj4gLQkJ cHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVM KTsKPiAtCQlpZiAoIXBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZSkgewo+IC0JCQlr ZnJlZShwdCk7Cj4gKwkJcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSA9IGFsbG9jX3BkX3Np bmdsZSgpOwo+ICsJCWlmIChJU19FUlIocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSkpCj4g IAkJCWdvdG8gdW53aW5kX291dDsKPiAtCQl9Cj4gLQo+IC0JCXBwZ3R0LT5wZHAucGFnZV9kaXJl Y3RvcnlbaV0ucGFnZV90YWJsZSA9IHB0Owo+ICAJfQo+ICAKPiAgCXBwZ3R0LT5udW1fcGRfcGFn ZXMgPSBtYXhfcGRwOwo+IEBAIC01MjQsMTAgKzYyOCw4IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0 dF9hbGxvY2F0ZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwK PiAgCXJldHVybiAwOwo+ICAKPiAgdW53aW5kX291dDoKPiAtCXdoaWxlIChpLS0pIHsKPiAtCQlr ZnJlZShwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLnBhZ2VfdGFibGUpOwo+IC0JCV9fZnJl ZV9wYWdlKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZSk7Cj4gLQl9Cj4gKwl3aGls ZSAoaS0tKQo+ICsJCXVubWFwX2FuZF9mcmVlX3BkKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rvcnlb aV0pOwo+ICAKPiAgCXJldHVybiAtRU5PTUVNOwo+ICB9Cj4gQEAgLTU2MSwxNCArNjYzLDE0IEBA IHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9zZXR1cF9wYWdlX2RpcmVjdG9yaWVzKHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCWludCByZXQ7Cj4gIAo+ICAJcGRfYWRkciA9IHBjaV9tYXBf cGFnZShwcGd0dC0+YmFzZS5kZXYtPnBkZXYsCj4gLQkJCSAgICAgICBwcGd0dC0+cGRwLnBhZ2Vf ZGlyZWN0b3J5W3BkXS5wYWdlLCAwLAo+ICsJCQkgICAgICAgcHBndHQtPnBkcC5wYWdlX2RpcmVj dG9yeVtwZF0tPnBhZ2UsIDAsCj4gIAkJCSAgICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJF Q1RJT05BTCk7Cj4gIAo+ICAJcmV0ID0gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBwZ3R0LT5iYXNl LmRldi0+cGRldiwgcGRfYWRkcik7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ IC0JcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZF0uZGFkZHIgPSBwZF9hZGRyOwo+ICsJcHBn dHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZF0tPmRhZGRyID0gcGRfYWRkcjsKPiAgCj4gIAlyZXR1 cm4gMDsKPiAgfQo+IEBAIC01NzgsOCArNjgwLDggQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X3Nl dHVwX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCQkJCQljb25z dCBpbnQgcHQpCj4gIHsKPiAgCWRtYV9hZGRyX3QgcHRfYWRkcjsKPiAtCXN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5X2VudHJ5ICpwZGlyID0gJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRd Owo+IC0Jc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHRhYiA9ICZwZGlyLT5wYWdlX3Rh YmxlW3B0XTsKPiArCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZGlyID0gcHBn dHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZF07Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2Vu dHJ5ICpwdGFiID0gcGRpci0+cGFnZV90YWJsZVtwdF07Cj4gIAlzdHJ1Y3QgcGFnZSAqcCA9IHB0 YWItPnBhZ2U7Cj4gIAlpbnQgcmV0Owo+ICAKPiBAQCAtNjQyLDEwICs3NDQsMTIgQEAgc3RhdGlj IGludCBnZW44X3BwZ3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCB1aW50NjRf dCBzaXplKQo+ICAJICogd2lsbCBuZXZlciBuZWVkIHRvIHRvdWNoIHRoZSBQREVzIGFnYWluLgo+ ICAJICovCj4gIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3BkcDsgaSsrKSB7Cj4gKwkJc3RydWN0IGk5 MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkID0gcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtp XTsKPiAgCQlnZW44X3BwZ3R0X3BkZV90ICpwZF92YWRkcjsKPiAtCQlwZF92YWRkciA9IGttYXBf YXRvbWljKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZSk7Cj4gKwkJcGRfdmFkZHIg PSBrbWFwX2F0b21pYyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLT5wYWdlKTsKPiAgCQlm b3IgKGogPSAwOyBqIDwgR0VOOF9QREVTX1BFUl9QQUdFOyBqKyspIHsKPiAtCQkJZG1hX2FkZHJf dCBhZGRyID0gcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdlX3RhYmxlW2pdLmRhZGRy Owo+ICsJCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdCA9IHBkLT5wYWdlX3RhYmxl W2pdOwo+ICsJCQlkbWFfYWRkcl90IGFkZHIgPSBwdC0+ZGFkZHI7Cj4gIAkJCXBkX3ZhZGRyW2pd ID0gZ2VuOF9wZGVfZW5jb2RlKHBwZ3R0LT5iYXNlLmRldiwgYWRkciwKPiAgCQkJCQkJICAgICAg STkxNV9DQUNIRV9MTEMpOwo+ICAJCX0KPiBAQCAtNjk2LDcgKzgwMCw3IEBAIHN0YXRpYyB2b2lk IGdlbjZfZHVtcF9wcGd0dChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsIHN0cnVjdCBzZXFf ZmlsZSAqbSkKPiAgCWZvciAocGRlID0gMDsgcGRlIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBw ZGUrKykgewo+ICAJCXUzMiBleHBlY3RlZDsKPiAgCQlnZW42X2d0dF9wdGVfdCAqcHRfdmFkZHI7 Cj4gLQkJZG1hX2FkZHJfdCBwdF9hZGRyID0gcHBndHQtPnBkLnBhZ2VfdGFibGVbcGRlXS5kYWRk cjsKPiArCQlkbWFfYWRkcl90IHB0X2FkZHIgPSBwcGd0dC0+cGQucGFnZV90YWJsZVtwZGVdLT5k YWRkcjsKPiAgCQlwZF9lbnRyeSA9IHJlYWRsKHBkX2FkZHIgKyBwZGUpOwo+ICAJCWV4cGVjdGVk ID0gKEdFTjZfUERFX0FERFJfRU5DT0RFKHB0X2FkZHIpIHwgR0VONl9QREVfVkFMSUQpOwo+ICAK PiBAQCAtNzA3LDcgKzgxMSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfZHVtcF9wcGd0dChzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqcHBndHQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCQkJCSAgIGV4cGVj dGVkKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJcdFBERTogJXhcbiIsIHBkX2VudHJ5KTsKPiAgCj4g LQkJcHRfdmFkZHIgPSBrbWFwX2F0b21pYyhwcGd0dC0+cGQucGFnZV90YWJsZVtwZGVdLnBhZ2Up Owo+ICsJCXB0X3ZhZGRyID0ga21hcF9hdG9taWMocHBndHQtPnBkLnBhZ2VfdGFibGVbcGRlXS0+ cGFnZSk7Cj4gIAkJZm9yIChwdGUgPSAwOyBwdGUgPCBJOTE1X1BQR1RUX1BUX0VOVFJJRVM7IHB0 ZSs9NCkgewo+ICAJCQl1bnNpZ25lZCBsb25nIHZhID0KPiAgCQkJCShwZGUgKiBQQUdFX1NJWkUg KiBJOTE1X1BQR1RUX1BUX0VOVFJJRVMpICsKPiBAQCAtNzQ2LDcgKzg1MCw3IEBAIHN0YXRpYyB2 b2lkIGdlbjZfd3JpdGVfcGRlcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAlmb3Ig KGkgPSAwOyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspIHsKPiAgCQlkbWFfYWRkcl90 IHB0X2FkZHI7Cj4gIAo+IC0JCXB0X2FkZHIgPSBwcGd0dC0+cGQucGFnZV90YWJsZVtpXS5kYWRk cjsKPiArCQlwdF9hZGRyID0gcHBndHQtPnBkLnBhZ2VfdGFibGVbaV0tPmRhZGRyOwo+ICAJCXBk X2VudHJ5ID0gR0VONl9QREVfQUREUl9FTkNPREUocHRfYWRkcik7Cj4gIAkJcGRfZW50cnkgfD0g R0VONl9QREVfVkFMSUQ7Cj4gIAo+IEBAIC05MjIsNyArMTAyNiw3IEBAIHN0YXRpYyB2b2lkIGdl bjZfcHBndHRfY2xlYXJfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJ aWYgKGxhc3RfcHRlID4gSTkxNV9QUEdUVF9QVF9FTlRSSUVTKQo+ICAJCQlsYXN0X3B0ZSA9IEk5 MTVfUFBHVFRfUFRfRU5UUklFUzsKPiAgCj4gLQkJcHRfdmFkZHIgPSBrbWFwX2F0b21pYyhwcGd0 dC0+cGQucGFnZV90YWJsZVthY3RfcHRdLnBhZ2UpOwo+ICsJCXB0X3ZhZGRyID0ga21hcF9hdG9t aWMocHBndHQtPnBkLnBhZ2VfdGFibGVbYWN0X3B0XS0+cGFnZSk7Cj4gIAo+ICAJCWZvciAoaSA9 IGZpcnN0X3B0ZTsgaSA8IGxhc3RfcHRlOyBpKyspCj4gIAkJCXB0X3ZhZGRyW2ldID0gc2NyYXRj aF9wdGU7Cj4gQEAgLTk1MSw3ICsxMDU1LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9pbnNl cnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXB0X3ZhZGRyID0g TlVMTDsKPiAgCWZvcl9lYWNoX3NnX3BhZ2UocGFnZXMtPnNnbCwgJnNnX2l0ZXIsIHBhZ2VzLT5u ZW50cywgMCkgewo+ICAJCWlmIChwdF92YWRkciA9PSBOVUxMKQo+IC0JCQlwdF92YWRkciA9IGtt YXBfYXRvbWljKHBwZ3R0LT5wZC5wYWdlX3RhYmxlW2FjdF9wdF0ucGFnZSk7Cj4gKwkJCXB0X3Zh ZGRyID0ga21hcF9hdG9taWMocHBndHQtPnBkLnBhZ2VfdGFibGVbYWN0X3B0XS0+cGFnZSk7Cj4g IAo+ICAJCXB0X3ZhZGRyW2FjdF9wdGVdID0KPiAgCQkJdm0tPnB0ZV9lbmNvZGUoc2dfcGFnZV9p dGVyX2RtYV9hZGRyZXNzKCZzZ19pdGVyKSwKPiBAQCAtOTc0LDcgKzEwNzgsNyBAQCBzdGF0aWMg dm9pZCBnZW42X3BwZ3R0X3VubWFwX3BhZ2VzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkK PiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspCj4gIAkJ cGNpX3VubWFwX3BhZ2UocHBndHQtPmJhc2UuZGV2LT5wZGV2LAo+IC0JCQkgICAgICAgcHBndHQt PnBkLnBhZ2VfdGFibGVbaV0uZGFkZHIsCj4gKwkJCSAgICAgICBwcGd0dC0+cGQucGFnZV90YWJs ZVtpXS0+ZGFkZHIsCj4gIAkJCSAgICAgICA0MDk2LCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwo+ ICB9Cj4gIAo+IEBAIC05ODMsOSArMTA4Nyw5IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfZnJl ZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAlpbnQgaTsKPiAgCj4gIAlmb3IgKGkg PSAwOyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspCj4gLQkJaWYgKHBwZ3R0LT5wZC5w YWdlX3RhYmxlW2ldLnBhZ2UpCj4gLQkJCV9fZnJlZV9wYWdlKHBwZ3R0LT5wZC5wYWdlX3RhYmxl W2ldLnBhZ2UpOwo+IC0Ja2ZyZWUocHBndHQtPnBkLnBhZ2VfdGFibGUpOwo+ICsJCXVubWFwX2Fu ZF9mcmVlX3B0KHBwZ3R0LT5wZC5wYWdlX3RhYmxlW2ldKTsKPiArCj4gKwl1bm1hcF9hbmRfZnJl ZV9wZCgmcHBndHQtPnBkKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVh bnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+IEBAIC0xMDQwLDI4ICsxMTQ0LDYg QEAgYWxsb2M6Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBnZW42X3BwZ3R0 X2FsbG9jYXRlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAtewo+ IC0Jc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQ7Cj4gLQlpbnQgaTsKPiAtCj4gLQlw dCA9IGtjYWxsb2MocHBndHQtPm51bV9wZF9lbnRyaWVzLCBzaXplb2YoKnB0KSwgR0ZQX0tFUk5F TCk7Cj4gLQlpZiAoIXB0KQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCXBwZ3R0LT5wZC5w YWdlX3RhYmxlID0gcHQ7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfZW50 cmllczsgaSsrKSB7Cj4gLQkJcHRbaV0ucGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Cj4g LQkJaWYgKCFwdC0+cGFnZSkgewo+IC0JCQlnZW42X3BwZ3R0X2ZyZWUocHBndHQpOwo+IC0JCQly ZXR1cm4gLUVOT01FTTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4g IHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9hbGxvYyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQp Cj4gIHsKPiAgCWludCByZXQ7Cj4gQEAgLTEwNzAsNyArMTE1Miw3IEBAIHN0YXRpYyBpbnQgZ2Vu Nl9wcGd0dF9hbGxvYyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAlpZiAocmV0KQo+ ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gZ2VuNl9wcGd0dF9hbGxvY2F0ZV9wYWdlX3Rh YmxlcyhwcGd0dCk7Cj4gKwlyZXQgPSBhbGxvY19wdF9yYW5nZSgmcHBndHQtPnBkLCAwLCBwcGd0 dC0+bnVtX3BkX2VudHJpZXMpOwo+ICAJaWYgKHJldCkgewo+ICAJCWRybV9tbV9yZW1vdmVfbm9k ZSgmcHBndHQtPm5vZGUpOwo+ICAJCXJldHVybiByZXQ7Cj4gQEAgLTEwODgsNyArMTE3MCw3IEBA IHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9zZXR1cF9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQpCj4gIAkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gIAkJZG1hX2FkZHJfdCBwdF9h ZGRyOwo+ICAKPiAtCQlwYWdlID0gcHBndHQtPnBkLnBhZ2VfdGFibGVbaV0ucGFnZTsKPiArCQlw YWdlID0gcHBndHQtPnBkLnBhZ2VfdGFibGVbaV0tPnBhZ2U7Cj4gIAkJcHRfYWRkciA9IHBjaV9t YXBfcGFnZShkZXYtPnBkZXYsIHBhZ2UsIDAsIDQwOTYsCj4gIAkJCQkgICAgICAgUENJX0RNQV9C SURJUkVDVElPTkFMKTsKPiAgCj4gQEAgLTEwOTcsNyArMTE3OSw3IEBAIHN0YXRpYyBpbnQgZ2Vu Nl9wcGd0dF9zZXR1cF9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4g IAkJCXJldHVybiAtRUlPOwo+ICAJCX0KPiAgCj4gLQkJcHBndHQtPnBkLnBhZ2VfdGFibGVbaV0u ZGFkZHIgPSBwdF9hZGRyOwo+ICsJCXBwZ3R0LT5wZC5wYWdlX3RhYmxlW2ldLT5kYWRkciA9IHB0 X2FkZHI7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmgKPiBpbmRleCAxMTQ0YjcwOS4uYzllOTNmNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5oCj4gQEAgLTE5OSwxMiArMTk5LDEyIEBAIHN0cnVjdCBpOTE1X3BhZ2VfZGly ZWN0b3J5X2VudHJ5IHsKPiAgCQlkbWFfYWRkcl90IGRhZGRyOwo+ICAJfTsKPiAgCj4gLQlzdHJ1 Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwYWdlX3RhYmxlOwo+ICsJc3RydWN0IGk5MTVfcGFn ZV90YWJsZV9lbnRyeSAqcGFnZV90YWJsZVtHRU42X1BQR1RUX1BEX0VOVFJJRVNdOyAvKiBQREVz ICovCj4gIH07Cj4gIAo+ICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyX2VudHJ5 IHsKPiAgCS8qIHN0cnVjdCBwYWdlICpwYWdlOyAqLwo+IC0Jc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnlfZW50cnkgcGFnZV9kaXJlY3RvcnlbR0VOOF9MRUdBQ1lfUERQRVNdOwo+ICsJc3RydWN0 IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBhZ2VfZGlyZWN0b3J5W0dFTjhfTEVHQUNZX1BE UEVTXTsKPiAgfTsKPiAgCj4gIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ugewo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jCj4gaW5kZXggOWU3MTk5Mi4uYmM5YzdjMyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jCj4gQEAgLTE3MzUsMTQgKzE3MzUsMTQgQEAgcG9wdWxhdGVfbHJfY29u dGV4dChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqY3R4X28KPiAgCXJlZ19zdGF0ZVtDVFhfUERQMV9MRFddID0gR0VOOF9SSU5HX1BEUF9MRFco cmluZywgMSk7Cj4gIAlyZWdfc3RhdGVbQ1RYX1BEUDBfVURXXSA9IEdFTjhfUklOR19QRFBfVURX KHJpbmcsIDApOwo+ICAJcmVnX3N0YXRlW0NUWF9QRFAwX0xEV10gPSBHRU44X1JJTkdfUERQX0xE VyhyaW5nLCAwKTsKPiAtCXJlZ19zdGF0ZVtDVFhfUERQM19VRFcrMV0gPSB1cHBlcl8zMl9iaXRz KHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbM10uZGFkZHIpOwo+IC0JcmVnX3N0YXRlW0NUWF9Q RFAzX0xEVysxXSA9IGxvd2VyXzMyX2JpdHMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVszXS5k YWRkcik7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDJfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0 dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzJdLmRhZGRyKTsKPiAtCXJlZ19zdGF0ZVtDVFhfUERQMl9M RFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMl0uZGFkZHIp Owo+IC0JcmVnX3N0YXRlW0NUWF9QRFAxX1VEVysxXSA9IHVwcGVyXzMyX2JpdHMocHBndHQtPnBk cC5wYWdlX2RpcmVjdG9yeVsxXS5kYWRkcik7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDFfTERXKzFd ID0gbG93ZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzFdLmRhZGRyKTsKPiAt CXJlZ19zdGF0ZVtDVFhfUERQMF9VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFn ZV9kaXJlY3RvcnlbMF0uZGFkZHIpOwo+IC0JcmVnX3N0YXRlW0NUWF9QRFAwX0xEVysxXSA9IGxv d2VyXzMyX2JpdHMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVswXS5kYWRkcik7Cj4gKwlyZWdf c3RhdGVbQ1RYX1BEUDNfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGly ZWN0b3J5WzNdLT5kYWRkcik7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDNfTERXKzFdID0gbG93ZXJf MzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzNdLT5kYWRkcik7Cj4gKwlyZWdfc3Rh dGVbQ1RYX1BEUDJfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0 b3J5WzJdLT5kYWRkcik7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDJfTERXKzFdID0gbG93ZXJfMzJf Yml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzJdLT5kYWRkcik7Cj4gKwlyZWdfc3RhdGVb Q1RYX1BEUDFfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5 WzFdLT5kYWRkcik7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDFfTERXKzFdID0gbG93ZXJfMzJfYml0 cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzFdLT5kYWRkcik7Cj4gKwlyZWdfc3RhdGVbQ1RY X1BEUDBfVURXKzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzBd LT5kYWRkcik7Cj4gKwlyZWdfc3RhdGVbQ1RYX1BEUDBfTERXKzFdID0gbG93ZXJfMzJfYml0cyhw cGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzBdLT5kYWRkcik7Cj4gIAlpZiAocmluZy0+aWQgPT0g UkNTKSB7Cj4gIAkJcmVnX3N0YXRlW0NUWF9MUklfSEVBREVSXzJdID0gTUlfTE9BRF9SRUdJU1RF Ul9JTU0oMSk7Cj4gIAkJcmVnX3N0YXRlW0NUWF9SX1BXUl9DTEtfU1RBVEVdID0gMHgyMGM4Owo+ IC0tIAo+IDIuMS4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=