From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v4 05/24] drm/i915: page table abstractions Date: Wed, 18 Feb 2015 13:27:14 +0200 Message-ID: <873863a299.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-6-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id A484A6E47B for ; Wed, 18 Feb 2015 03:27:22 -0800 (PST) In-Reply-To: <1421946106-7921-6-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+IFdoZW4gd2Ug bW92ZSB0byBkeW5hbWljIHBhZ2UgYWxsb2NhdGlvbiwga2VlcGluZyBwYWdlX2RpcmVjdG9yeSBh bmQgcGFnZXRhYnMgYXMKPiBzZXBhcmF0ZSBzdHJ1Y3R1cmVzIHdpbGwgaGVscCB0byBicmVhayBh Y3Rpb25zIGludG8gc2ltcGxlciB0YXNrcy4KPgo+IFRvIGhlbHAgdHJhbnNpdGlvbiB0aGUgY29k ZSBuaWNlbHkgdGhlcmUgaXMgc29tZSB3YXN0ZWQgc3BhY2UgaW4gZ2VuNi83Lgo+IFRoaXMgd2ls bCBiZSBhbWVsaW9yYXRlZCBzaG9ydGx5Lgo+Cj4gRm9sbG93aW5nIHRoZSB4ODYgcGFnZXRhYmxl IHRlcm1pbm9sb2d5Ogo+IFBEUEUgPSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVy X2VudHJ5Lgo+IFBERSA9IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5IFtwYWdlX2Rp cmVjdG9yeV0uCj4gUFRFID0gc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSBbcGFnZV90YWJs ZXNdLgo+Cj4gdjI6IGZpeGVkIG1pc21hdGNoZXMgYWZ0ZXIgY2xlYW4tdXAvcmViYXNlLgo+Cj4g djM6IENsYXJpZnkgdGhlIG5hbWVzIG9mIHRoZSBtdWx0aXBsZSBsZXZlbHMgb2YgcGFnZSB0YWJs ZXMgKERhbmllbCkKPgo+IFNpZ25lZC1vZmYtYnk6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3Nr Lm5ldD4KPiBTaWduZWQtb2ZmLWJ5OiBNaWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50 ZWwuY29tPiAodjIsIHYzKQo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYyB8IDE3NyArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggfCAgMjMgKysrKy0KPiAgMiBmaWxlcyBjaGFu Z2VkLCAxMDcgaW5zZXJ0aW9ucygrKSwgOTMgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IGI0OGI1ODYuLjk4YjQ2OTggMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0zMzQsNyArMzM0LDggQEAgc3RhdGljIHZvaWQg Z2VuOF9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAg CQkJCSAgICAgIEk5MTVfQ0FDSEVfTExDLCB1c2Vfc2NyYXRjaCk7Cj4gIAo+ICAJd2hpbGUgKG51 bV9lbnRyaWVzKSB7Cj4gLQkJc3RydWN0IHBhZ2UgKnBhZ2VfdGFibGUgPSBwcGd0dC0+Z2VuOF9w dF9wYWdlc1twZHBlXVtwZGVdOwo+ICsJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5 ICpwZCA9ICZwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkcGVdOwo+ICsJCXN0cnVjdCBwYWdl ICpwYWdlX3RhYmxlID0gcGQtPnBhZ2VfdGFibGVzW3BkZV0ucGFnZTsKPiAgCj4gIAkJbGFzdF9w dGUgPSBwdGUgKyBudW1fZW50cmllczsKPiAgCQlpZiAobGFzdF9wdGUgPiBHRU44X1BURVNfUEVS X1BBR0UpCj4gQEAgLTM3OCw4ICszNzksMTIgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNl cnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQlpZiAoV0FSTl9P TihwZHBlID49IEdFTjhfTEVHQUNZX1BEUEVTKSkKPiAgCQkJYnJlYWs7Cj4gIAo+IC0JCWlmIChw dF92YWRkciA9PSBOVUxMKQo+IC0JCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5nZW44 X3B0X3BhZ2VzW3BkcGVdW3BkZV0pOwo+ICsJCWlmIChwdF92YWRkciA9PSBOVUxMKSB7Cj4gKwkJ CXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCA9ICZwcGd0dC0+cGRwLnBhZ2Vf ZGlyZWN0b3J5W3BkcGVdOwo+ICsJCQlzdHJ1Y3QgcGFnZSAqcGFnZV90YWJsZSA9IHBkLT5wYWdl X3RhYmxlc1twZGVdLnBhZ2U7Cj4gKwo+ICsJCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBhZ2Vf dGFibGUpOwo+ICsJCX0KPiAgCj4gIAkJcHRfdmFkZHJbcHRlXSA9Cj4gIAkJCWdlbjhfcHRlX2Vu Y29kZShzZ19wYWdlX2l0ZXJfZG1hX2FkZHJlc3MoJnNnX2l0ZXIpLAo+IEBAIC00MDMsMjkgKzQw OCwzMyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBnZW44X2Zy ZWVfcGFnZV90YWJsZXMoc3RydWN0IHBhZ2UgKipwdF9wYWdlcykKPiArc3RhdGljIHZvaWQgZ2Vu OF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCkK PiAgewo+ICAJaW50IGk7Cj4gIAo+IC0JaWYgKHB0X3BhZ2VzID09IE5VTEwpCj4gKwlpZiAocGQt PnBhZ2VfdGFibGVzID09IE5VTEwpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkg PCBHRU44X1BERVNfUEVSX1BBR0U7IGkrKykKPiAtCQlpZiAocHRfcGFnZXNbaV0pCj4gLQkJCV9f ZnJlZV9wYWdlcyhwdF9wYWdlc1tpXSwgMCk7Cj4gKwkJaWYgKHBkLT5wYWdlX3RhYmxlc1tpXS5w YWdlKQo+ICsJCQlfX2ZyZWVfcGFnZShwZC0+cGFnZV90YWJsZXNbaV0ucGFnZSk7Cj4gIH0KPiAg Cj4gLXN0YXRpYyB2b2lkIGdlbjhfcHBndHRfZnJlZShjb25zdCBzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQpCj4gK3N0YXRpYyB2b2lkIGdlbjhfZnJlZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVj dCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KWW91IG9ubHkgZnJlZSBvbmUgZGlyZWN0b3J5IHNvIHdoeSBwbHVy YWwgaGVyZT8KCj4gK3sKCklmIHlvdSBmcmVlIHRoZSBwYWdlIHRhYmxlcyBmb3IgdGhlIGRpcmVj dG9yeSBoZXJlLi4KCj4gKwlrZnJlZShwZC0+cGFnZV90YWJsZXMpOwo+ICsJX19mcmVlX3BhZ2Uo cGQtPnBhZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2ZyZWUoc3RydWN0 IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICB7Cj4gIAlpbnQgaTsKPiAgCj4gIAlmb3IgKGkgPSAw OyBpIDwgcHBndHQtPm51bV9wZF9wYWdlczsgaSsrKSB7Cj4gLQkJZ2VuOF9mcmVlX3BhZ2VfdGFi bGVzKHBwZ3R0LT5nZW44X3B0X3BhZ2VzW2ldKTsKPiAtCQlrZnJlZShwcGd0dC0+Z2VuOF9wdF9w YWdlc1tpXSk7Cj4gKwkJZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKCZwcGd0dC0+cGRwLnBhZ2VfZGly ZWN0b3J5W2ldKTsKCi4uLnRoaXMgbG9vcCB3aWxsIGJlIGNsZWFuZXIuCgpBbHNvIGNvbnNpZGVy IHJlbmFtaW5nICdudW1fcGRfcGFnZXMnIHRvICdudW1fcGQnLiBCdXQgaWYgaXQgZG9lcwpjYXVz ZSBhIGxvdCBvZiByZWJhc2UgYnVyZGVuIGRvbnQgd29ycnkgYWJvdXQgaXQuCgo+ICsJCWdlbjhf ZnJlZV9wYWdlX2RpcmVjdG9yaWVzKCZwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiAg CQlrZnJlZShwcGd0dC0+Z2VuOF9wdF9kbWFfYWRkcltpXSk7Cj4gIAl9Cj4gLQo+IC0JX19mcmVl X3BhZ2VzKHBwZ3R0LT5wZF9wYWdlcywgZ2V0X29yZGVyKHBwZ3R0LT5udW1fcGRfcGFnZXMgPDwg UEFHRV9TSElGVCkpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X3VubWFwX3Bh Z2VzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiBAQCAtNDYwLDg2ICs0NjksNzUgQEAg c3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQo+ICAJZ2VuOF9wcGd0dF9mcmVlKHBwZ3R0KTsKPiAgfQo+ICAKPiAtc3RhdGljIHN0cnVj dCBwYWdlICoqX19nZW44X2FsbG9jX3BhZ2VfdGFibGVzKHZvaWQpCj4gK3N0YXRpYyBpbnQgZ2Vu OF9wcGd0dF9hbGxvY2F0ZV9kbWEoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICB7Cj4g LQlzdHJ1Y3QgcGFnZSAqKnB0X3BhZ2VzOwo+ICAJaW50IGk7Cj4gIAo+IC0JcHRfcGFnZXMgPSBr Y2FsbG9jKEdFTjhfUERFU19QRVJfUEFHRSwgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VS TkVMKTsKPiAtCWlmICghcHRfcGFnZXMpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g LQo+IC0JZm9yIChpID0gMDsgaSA8IEdFTjhfUERFU19QRVJfUEFHRTsgaSsrKSB7Cj4gLQkJcHRf cGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwo+IC0JCWlmICghcHRfcGFnZXNbaV0p Cj4gLQkJCWdvdG8gYmFpbDsKPiArCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+bnVtX3BkX3BhZ2Vz OyBpKyspIHsKPiArCQlwcGd0dC0+Z2VuOF9wdF9kbWFfYWRkcltpXSA9IGtjYWxsb2MoR0VOOF9Q REVTX1BFUl9QQUdFLAo+ICsJCQkJCQkgICAgIHNpemVvZihkbWFfYWRkcl90KSwKPiArCQkJCQkJ ICAgICBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXBwZ3R0LT5nZW44X3B0X2RtYV9hZGRyW2ldKQo+ ICsJCQlyZXR1cm4gLUVOT01FTTsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcHRfcGFnZXM7Cj4gLQo+ IC1iYWlsOgo+IC0JZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHB0X3BhZ2VzKTsKPiAtCWtmcmVlKHB0 X3BhZ2VzKTsKPiAtCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJcmV0dXJuIDA7Cj4gIH0K PiAgCj4gLXN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX3RhYmxlcyhzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqcHBndHQsCj4gLQkJCQkJICAgY29uc3QgaW50IG1heF9wZHApCj4gK3N0 YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQpCj4gIHsKPiAtCXN0cnVjdCBwYWdlICoqcHRfcGFnZXNbR0VOOF9MRUdBQ1lf UERQRVNdOwo+IC0JaW50IGksIHJldDsKPiArCWludCBpLCBqOwo+ICAKPiAtCWZvciAoaSA9IDA7 IGkgPCBtYXhfcGRwOyBpKyspIHsKPiAtCQlwdF9wYWdlc1tpXSA9IF9fZ2VuOF9hbGxvY19wYWdl X3RhYmxlcygpOwo+IC0JCWlmIChJU19FUlIocHRfcGFnZXNbaV0pKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIocHRfcGFnZXNbaV0pOwo+IC0JCQlnb3RvIHVud2luZF9vdXQ7Cj4gKwlmb3IgKGkgPSAw OyBpIDwgcHBndHQtPm51bV9wZF9wYWdlczsgaSsrKSB7Cj4gKwkJZm9yIChqID0gMDsgaiA8IEdF TjhfUERFU19QRVJfUEFHRTsgaisrKSB7Cj4gKwkJCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50 cnkgKnB0ID0gJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZV90YWJsZXNbal07Cj4g Kwo+ICsJCQlwdC0+cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+ ICsJCQlpZiAoIXB0LT5wYWdlKQo+ICsJCQkJZ290byB1bndpbmRfb3V0Owo+ICAJCX0KPiAgCX0K PiAgCj4gLQkvKiBOQjogQXZvaWQgdG91Y2hpbmcgZ2VuOF9wdF9wYWdlcyB1bnRpbCBsYXN0IHRv IGtlZXAgdGhlIGFsbG9jYXRpb24sCj4gLQkgKiAiYXRvbWljIiAtIGZvciBjbGVhbnVwIHB1cnBv c2VzLgo+IC0JICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgbWF4X3BkcDsgaSsrKQo+IC0JCXBwZ3R0 LT5nZW44X3B0X3BhZ2VzW2ldID0gcHRfcGFnZXNbaV07Cj4gLQo+ICAJcmV0dXJuIDA7Cj4gIAo+ ICB1bndpbmRfb3V0Ogo+IC0Jd2hpbGUgKGktLSkgewo+IC0JCWdlbjhfZnJlZV9wYWdlX3RhYmxl cyhwdF9wYWdlc1tpXSk7Cj4gLQkJa2ZyZWUocHRfcGFnZXNbaV0pOwo+IC0JfQo+ICsJd2hpbGUg KGktLSkKPiArCQlnZW44X2ZyZWVfcGFnZV90YWJsZXMoJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rv cnlbaV0pOwo+ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1cm4gLUVOT01FTTsKPiAgfQo+ICAK PiAtc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jYXRlX2RtYShzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQpCj4gK3N0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX2RpcmVjdG9y aWVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiArCQkJCQkJY29uc3QgaW50IG1heF9w ZHApCj4gIHsKPiAgCWludCBpOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+bnVtX3Bk X3BhZ2VzOyBpKyspIHsKPiAtCQlwcGd0dC0+Z2VuOF9wdF9kbWFfYWRkcltpXSA9IGtjYWxsb2Mo R0VOOF9QREVTX1BFUl9QQUdFLAo+IC0JCQkJCQkgICAgIHNpemVvZihkbWFfYWRkcl90KSwKPiAt CQkJCQkJICAgICBHRlBfS0VSTkVMKTsKPiAtCQlpZiAoIXBwZ3R0LT5nZW44X3B0X2RtYV9hZGRy W2ldKQo+IC0JCQlyZXR1cm4gLUVOT01FTTsKPiAtCX0KPiArCWZvciAoaSA9IDA7IGkgPCBtYXhf cGRwOyBpKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdDsKPiAgCj4g LQlyZXR1cm4gMDsKPiAtfQo+ICsJCXB0ID0ga2NhbGxvYyhHRU44X1BERVNfUEVSX1BBR0UsIHNp emVvZigqcHQpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXB0KQo+ICsJCQlnb3RvIHVud2luZF9v dXQ7Cj4gIAo+IC1zdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NhdGVfcGFnZV9kaXJlY3Rvcmll cyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4gLQkJCQkJCWNvbnN0IGludCBtYXhfcGRw KQo+IC17Cj4gLQlwcGd0dC0+cGRfcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCBnZXRf b3JkZXIobWF4X3BkcCA8PCBQQUdFX1NISUZUKSk7Cj4gLQlpZiAoIXBwZ3R0LT5wZF9wYWdlcykK PiAtCQlyZXR1cm4gLUVOT01FTTsKPiArCQlwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLnBh Z2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwo+ICsJCWlmICghcHBndHQtPnBkcC5wYWdlX2Rp cmVjdG9yeVtpXS5wYWdlKQo+ICsJCQlnb3RvIHVud2luZF9vdXQ7CgpJZiB5b3UgZW5kIHVwIGhh dmluZyBhbGxvYyBlcnJvciBoZXJlIHlvdSB3aWxsIGxlYWsgdGhlIHByZXZpb3VzbHkKYWxsb2Nh dGVkIHB0IGFib3ZlLgoKQWxzbyBjb25zaWRlciB0aGF0IGlmIHlvdSBkbyBnZW44X3BwZ3R0X2Fs bG9jYXRlX3BhZ2VfZGlyZWN0b3J5KCkgYW5kCmFkZCBudWxsIGNoZWNrIGZvciBwZC0+cGFnZSBp biBnZW44X2ZyZWVfcGFnZV9kaXJlY3RvcnkgeW91IHNob3VsZCBiZSBhYmxlIHRvIGF2b2lkCnRo ZSB1bndpbmRpbmcgYmVsb3cgY29tcGxldGVseS4KCj4gKwo+ICsJCXBwZ3R0LT5wZHAucGFnZV9k aXJlY3RvcnlbaV0ucGFnZV90YWJsZXMgPSBwdDsKPiArCX0KPiAgCj4gLQlwcGd0dC0+bnVtX3Bk X3BhZ2VzID0gMSA8PCBnZXRfb3JkZXIobWF4X3BkcCA8PCBQQUdFX1NISUZUKTsKPiArCXBwZ3R0 LT5udW1fcGRfcGFnZXMgPSBtYXhfcGRwOwo+ICAJQlVHX09OKHBwZ3R0LT5udW1fcGRfcGFnZXMg PiBHRU44X0xFR0FDWV9QRFBFUyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gKwo+ICt1bndpbmRfb3V0 Ogo+ICsJd2hpbGUgKGktLSkgewo+ICsJCWtmcmVlKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rvcnlb aV0ucGFnZV90YWJsZXMpOwo+ICsJCV9fZnJlZV9wYWdlKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rv cnlbaV0ucGFnZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FTk9NRU07Cj4gIH0KPiAgCj4gIHN0 YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvYyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4g QEAgLTU1MSwxOCArNTQ5LDE5IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvYyhzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqcHBndHQsCj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ IC0JcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX3RhYmxlcyhwcGd0dCwgbWF4X3BkcCk7 Cj4gLQlpZiAocmV0KSB7Cj4gLQkJX19mcmVlX3BhZ2VzKHBwZ3R0LT5wZF9wYWdlcywgZ2V0X29y ZGVyKG1heF9wZHAgPDwgUEFHRV9TSElGVCkpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gKwly ZXQgPSBnZW44X3BwZ3R0X2FsbG9jYXRlX3BhZ2VfdGFibGVzKHBwZ3R0KTsKPiArCWlmIChyZXQp Cj4gKwkJZ290byBlcnJfb3V0Owo+ICAKPiAgCXBwZ3R0LT5udW1fcGRfZW50cmllcyA9IG1heF9w ZHAgKiBHRU44X1BERVNfUEVSX1BBR0U7Cj4gIAo+ICAJcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY2F0 ZV9kbWEocHBndHQpOwo+IC0JaWYgKHJldCkKPiAtCQlnZW44X3BwZ3R0X2ZyZWUocHBndHQpOwo+ ICsJaWYgKCFyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAgCj4gKwkvKiBUT0RPOiBDaGVjayB0aGlz IGZvciBhbGwgY2FzZXMgKi8KClRoZSBjaGVjayBmb3IgemVybyByZXR1cm4gYW5kIHRoZW4gcmV0 dXJuaW5nIGl0IHdpdGggdGhlIGNvbW1lbnQgaXMKY29uZnVzaW5nLiBXaHkgbm90IGp1c3QgZG8g dGhlIHNhbWUgcGF0dGVybiBhcyBpbiBhYm92ZT8KCmlmIChyZXQpCiAgIGdvdG8gZXJyX291dDsK CnJldHVybiAwOwoKLU1pa2EKCj4gK2Vycl9vdXQ6Cj4gKwlnZW44X3BwZ3R0X2ZyZWUocHBndHQp Owo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiBAQCAtNTczLDcgKzU3Miw3IEBAIHN0YXRpYyBp bnQgZ2VuOF9wcGd0dF9zZXR1cF9wYWdlX2RpcmVjdG9yaWVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICpwcGd0dCwKPiAgCWludCByZXQ7Cj4gIAo+ICAJcGRfYWRkciA9IHBjaV9tYXBfcGFnZShwcGd0 dC0+YmFzZS5kZXYtPnBkZXYsCj4gLQkJCSAgICAgICAmcHBndHQtPnBkX3BhZ2VzW3BkXSwgMCwK PiArCQkJICAgICAgIHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRdLnBhZ2UsIDAsCj4gIAkJ CSAgICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gIAo+ICAJcmV0ID0g cGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBwZ3R0LT5iYXNlLmRldi0+cGRldiwgcGRfYWRkcik7Cj4g QEAgLTU5Myw3ICs1OTIsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfc2V0dXBfcGFnZV90YWJs ZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAJc3RydWN0IHBhZ2UgKnA7Cj4gIAlp bnQgcmV0Owo+ICAKPiAtCXAgPSBwcGd0dC0+Z2VuOF9wdF9wYWdlc1twZF1bcHRdOwo+ICsJcCA9 IHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRdLnBhZ2VfdGFibGVzW3B0XS5wYWdlOwo+ICAJ cHRfYWRkciA9IHBjaV9tYXBfcGFnZShwcGd0dC0+YmFzZS5kZXYtPnBkZXYsCj4gIAkJCSAgICAg ICBwLCAwLCBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gIAlyZXQgPSBwY2lf ZG1hX21hcHBpbmdfZXJyb3IocHBndHQtPmJhc2UuZGV2LT5wZGV2LCBwdF9hZGRyKTsKPiBAQCAt NjU0LDcgKzY1Myw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpwcGd0dCwgdWludDY0X3Qgc2l6ZSkKPiAgCSAqLwo+ICAJZm9yIChpID0gMDsgaSA8 IG1heF9wZHA7IGkrKykgewo+ICAJCWdlbjhfcHBndHRfcGRlX3QgKnBkX3ZhZGRyOwo+IC0JCXBk X3ZhZGRyID0ga21hcF9hdG9taWMoJnBwZ3R0LT5wZF9wYWdlc1tpXSk7Cj4gKwkJcGRfdmFkZHIg PSBrbWFwX2F0b21pYyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLnBhZ2UpOwo+ICAJCWZv ciAoaiA9IDA7IGogPCBHRU44X1BERVNfUEVSX1BBR0U7IGorKykgewo+ICAJCQlkbWFfYWRkcl90 IGFkZHIgPSBwcGd0dC0+Z2VuOF9wdF9kbWFfYWRkcltpXVtqXTsKPiAgCQkJcGRfdmFkZHJbal0g PSBnZW44X3BkZV9lbmNvZGUocHBndHQtPmJhc2UuZGV2LCBhZGRyLAo+IEBAIC03MTcsNyArNzE2 LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9kdW1wX3BwZ3R0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJCQkJICAgZXhwZWN0ZWQpOwo+ICAJCXNlcV9w cmludGYobSwgIlx0UERFOiAleFxuIiwgcGRfZW50cnkpOwo+ICAKPiAtCQlwdF92YWRkciA9IGtt YXBfYXRvbWljKHBwZ3R0LT5wdF9wYWdlc1twZGVdKTsKPiArCQlwdF92YWRkciA9IGttYXBfYXRv bWljKHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1twZGVdLnBhZ2UpOwo+ICAJCWZvciAocHRlID0gMDsg cHRlIDwgSTkxNV9QUEdUVF9QVF9FTlRSSUVTOyBwdGUrPTQpIHsKPiAgCQkJdW5zaWduZWQgbG9u ZyB2YSA9Cj4gIAkJCQkocGRlICogUEFHRV9TSVpFICogSTkxNV9QUEdUVF9QVF9FTlRSSUVTKSAr Cj4gQEAgLTkyMiw3ICs5MjEsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2NsZWFyX3Jhbmdl KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCWlmIChsYXN0X3B0ZSA+IEk5MTVf UFBHVFRfUFRfRU5UUklFUykKPiAgCQkJbGFzdF9wdGUgPSBJOTE1X1BQR1RUX1BUX0VOVFJJRVM7 Cj4gIAo+IC0JCXB0X3ZhZGRyID0ga21hcF9hdG9taWMocHBndHQtPnB0X3BhZ2VzW2FjdF9wdF0p Owo+ICsJCXB0X3ZhZGRyID0ga21hcF9hdG9taWMocHBndHQtPnBkLnBhZ2VfdGFibGVzW2FjdF9w dF0ucGFnZSk7Cj4gIAo+ICAJCWZvciAoaSA9IGZpcnN0X3B0ZTsgaSA8IGxhc3RfcHRlOyBpKysp Cj4gIAkJCXB0X3ZhZGRyW2ldID0gc2NyYXRjaF9wdGU7Cj4gQEAgLTk1MSw3ICs5NTAsNyBAQCBz dGF0aWMgdm9pZCBnZW42X3BwZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtLAo+ICAJcHRfdmFkZHIgPSBOVUxMOwo+ICAJZm9yX2VhY2hfc2dfcGFnZShwYWdl cy0+c2dsLCAmc2dfaXRlciwgcGFnZXMtPm5lbnRzLCAwKSB7Cj4gIAkJaWYgKHB0X3ZhZGRyID09 IE5VTEwpCj4gLQkJCXB0X3ZhZGRyID0ga21hcF9hdG9taWMocHBndHQtPnB0X3BhZ2VzW2FjdF9w dF0pOwo+ICsJCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1th Y3RfcHRdLnBhZ2UpOwo+ICAKPiAgCQlwdF92YWRkclthY3RfcHRlXSA9Cj4gIAkJCXZtLT5wdGVf ZW5jb2RlKHNnX3BhZ2VfaXRlcl9kbWFfYWRkcmVzcygmc2dfaXRlciksCj4gQEAgLTk4Niw4ICs5 ODUsOCBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWUoc3RydWN0IGk5MTVfaHdfcHBndHQg KnBwZ3R0KQo+ICAKPiAgCWtmcmVlKHBwZ3R0LT5wdF9kbWFfYWRkcik7Cj4gIAlmb3IgKGkgPSAw OyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspCj4gLQkJX19mcmVlX3BhZ2UocHBndHQt PnB0X3BhZ2VzW2ldKTsKPiAtCWtmcmVlKHBwZ3R0LT5wdF9wYWdlcyk7Cj4gKwkJX19mcmVlX3Bh Z2UocHBndHQtPnBkLnBhZ2VfdGFibGVzW2ldLnBhZ2UpOwo+ICsJa2ZyZWUocHBndHQtPnBkLnBh Z2VfdGFibGVzKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+IEBAIC0xMDQ0LDIyICsxMDQzLDIyIEBAIGFs bG9jOgo+ICAKPiAgc3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jYXRlX3BhZ2VfdGFibGVzKHN0 cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgewo+ICsJc3RydWN0IGk5MTVfcGFnZV90YWJs ZV9lbnRyeSAqcHQ7Cj4gIAlpbnQgaTsKPiAgCj4gLQlwcGd0dC0+cHRfcGFnZXMgPSBrY2FsbG9j KHBwZ3R0LT5udW1fcGRfZW50cmllcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLAo+IC0JCQkJICBH RlBfS0VSTkVMKTsKPiAtCj4gLQlpZiAoIXBwZ3R0LT5wdF9wYWdlcykKPiArCXB0ID0ga2NhbGxv YyhwcGd0dC0+bnVtX3BkX2VudHJpZXMsIHNpemVvZigqcHQpLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghcHQpCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IHBwZ3R0 LT5udW1fcGRfZW50cmllczsgaSsrKSB7Cj4gLQkJcHBndHQtPnB0X3BhZ2VzW2ldID0gYWxsb2Nf cGFnZShHRlBfS0VSTkVMKTsKPiAtCQlpZiAoIXBwZ3R0LT5wdF9wYWdlc1tpXSkgewo+ICsJCXB0 W2ldLnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwo+ICsJCWlmICghcHQtPnBhZ2UpIHsK PiAgCQkJZ2VuNl9wcGd0dF9mcmVlKHBwZ3R0KTsKPiAgCQkJcmV0dXJuIC1FTk9NRU07Cj4gIAkJ fQo+ICAJfQo+ICAKPiArCXBwZ3R0LT5wZC5wYWdlX3RhYmxlcyA9IHB0Owo+ICAJcmV0dXJuIDA7 Cj4gIH0KPiAgCj4gQEAgLTEwOTQsOSArMTA5MywxMSBAQCBzdGF0aWMgaW50IGdlbjZfcHBndHRf c2V0dXBfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJaW50IGk7 Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfZW50cmllczsgaSsrKSB7Cj4g KwkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gIAkJZG1hX2FkZHJfdCBwdF9hZGRyOwo+ICAKPiAtCQlw dF9hZGRyID0gcGNpX21hcF9wYWdlKGRldi0+cGRldiwgcHBndHQtPnB0X3BhZ2VzW2ldLCAwLCA0 MDk2LAo+ICsJCXBhZ2UgPSBwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0ucGFnZTsKPiArCQlwdF9h ZGRyID0gcGNpX21hcF9wYWdlKGRldi0+cGRldiwgcGFnZSwgMCwgNDA5NiwKPiAgCQkJCSAgICAg ICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwo+ICAKPiAgCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vy cm9yKGRldi0+cGRldiwgcHRfYWRkcikpIHsKPiBAQCAtMTE0MCw3ICsxMTQxLDcgQEAgc3RhdGlj IGludCBnZW42X3BwZ3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJcHBn dHQtPmJhc2UuaW5zZXJ0X2VudHJpZXMgPSBnZW42X3BwZ3R0X2luc2VydF9lbnRyaWVzOwo+ICAJ cHBndHQtPmJhc2UuY2xlYW51cCA9IGdlbjZfcHBndHRfY2xlYW51cDsKPiAgCXBwZ3R0LT5iYXNl LnN0YXJ0ID0gMDsKPiAtCXBwZ3R0LT5iYXNlLnRvdGFsID0gIHBwZ3R0LT5udW1fcGRfZW50cmll cyAqIEk5MTVfUFBHVFRfUFRfRU5UUklFUyAqIFBBR0VfU0laRTsKPiArCXBwZ3R0LT5iYXNlLnRv dGFsID0gcHBndHQtPm51bV9wZF9lbnRyaWVzICogSTkxNV9QUEdUVF9QVF9FTlRSSUVTICogUEFH RV9TSVpFOwo+ICAJcHBndHQtPmRlYnVnX2R1bXAgPSBnZW42X2R1bXBfcHBndHQ7Cj4gIAo+ICAJ cHBndHQtPnBkX29mZnNldCA9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiBpbmRl eCA4Zjc2OTkwLi5kOWJjMzc1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgK PiBAQCAtMTg3LDYgKzE4NywyMCBAQCBzdHJ1Y3QgaTkxNV92bWEgewo+ICAJCQkgdTMyIGZsYWdz KTsKPiAgfTsKPiAgCj4gK3N0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgewo+ICsJc3RydWN0 IHBhZ2UgKnBhZ2U7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRy eSB7Cj4gKwlzdHJ1Y3QgcGFnZSAqcGFnZTsgLyogTlVMTCBmb3IgR0VONi1HRU43ICovCj4gKwlz dHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwYWdlX3RhYmxlczsKPiArfTsKPiArCj4gK3N0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXJfZW50cnkgewo+ICsJLyogc3RydWN0IHBh Z2UgKnBhZ2U7ICovCj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSBwYWdlX2Rp cmVjdG9yeVtHRU44X0xFR0FDWV9QRFBFU107Cj4gK307Cj4gKwo+ICBzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlIHsKPiAgCXN0cnVjdCBkcm1fbW0gbW07Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2Owo+IEBAIC0yNzIsMTEgKzI4Niw2IEBAIHN0cnVjdCBpOTE1X2h3X3BwZ3R0IHsKPiAgCXVu c2lnbmVkIG51bV9wZF9lbnRyaWVzOwo+ICAJdW5zaWduZWQgbnVtX3BkX3BhZ2VzOyAvKiBnZW44 KyAqLwo+ICAJdW5pb24gewo+IC0JCXN0cnVjdCBwYWdlICoqcHRfcGFnZXM7Cj4gLQkJc3RydWN0 IHBhZ2UgKipnZW44X3B0X3BhZ2VzW0dFTjhfTEVHQUNZX1BEUEVTXTsKPiAtCX07Cj4gLQlzdHJ1 Y3QgcGFnZSAqcGRfcGFnZXM7Cj4gLQl1bmlvbiB7Cj4gIAkJdWludDMyX3QgcGRfb2Zmc2V0Owo+ ICAJCWRtYV9hZGRyX3QgcGRfZG1hX2FkZHJbR0VOOF9MRUdBQ1lfUERQRVNdOwo+ICAJfTsKPiBA QCAtMjg0LDYgKzI5MywxMCBAQCBzdHJ1Y3QgaTkxNV9od19wcGd0dCB7Cj4gIAkJZG1hX2FkZHJf dCAqcHRfZG1hX2FkZHI7Cj4gIAkJZG1hX2FkZHJfdCAqZ2VuOF9wdF9kbWFfYWRkcltHRU44X0xF R0FDWV9QRFBFU107Cj4gIAl9Owo+ICsJdW5pb24gewo+ICsJCXN0cnVjdCBpOTE1X3BhZ2VfZGly ZWN0b3J5X3BvaW50ZXJfZW50cnkgcGRwOwo+ICsJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5 X2VudHJ5IHBkOwo+ICsJfTsKPiAgCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpm aWxlX3ByaXY7Cj4gIAo+IC0tIAo+IDIuMS4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=