From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 01/11] drm/i915/gtt: Use shallow dma pages for scratch Date: Tue, 09 Jul 2019 15:24:27 +0300 Message-ID: <87h87v1jlw.fsf@gaia.fi.intel.com> References: <20190707210024.26192-1-chris@chris-wilson.co.uk> <20190707210024.26192-2-chris@chris-wilson.co.uk> 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 ESMTPS id 0A00D89467 for ; Tue, 9 Jul 2019 12:24:41 +0000 (UTC) In-Reply-To: <20190707210024.26192-2-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gV2Ugb25s eSB1c2UgdGhlIGRtYSBwYWdlcyBmb3Igc2NyYXRjaCwgYW5kIHNvIGRvIG5vdCBuZWVkIHRvIGFs bG9jYXRlCj4gdGhlIGV4dHJhIHN0b3JhZ2UgZm9yIHRoZSBzaGFkb3cgcGFnZSBkaXJlY3Rvcnku Cj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4KPiBDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwgMTkyICsrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmggfCAgIDYgKy0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspLCAxMTMgZGVs ZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IDIzNmM5 NjRkZDc2MS4uOTM3MjM2OTEzZTcwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmMKPiBAQCAtNTk0LDI1ICs1OTQsMTcgQEAgc3RhdGljIHZvaWQgY2xlYW51cF9wYWdlX2RtYShz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCj4gICNkZWZpbmUga21hcF9hdG9taWNf cHgocHgpIGttYXBfYXRvbWljKHB4X2Jhc2UocHgpLT5wYWdlKQo+ICAKPiAtI2RlZmluZSBmaWxs X3B4KHZtLCBweCwgdikgZmlsbF9wYWdlX2RtYSgodm0pLCBweF9iYXNlKHB4KSwgKHYpKQo+IC0j ZGVmaW5lIGZpbGwzMl9weCh2bSwgcHgsIHYpIGZpbGxfcGFnZV9kbWFfMzIoKHZtKSwgcHhfYmFz ZShweCksICh2KSkKPiArI2RlZmluZSBmaWxsX3B4KHB4LCB2KSBmaWxsX3BhZ2VfZG1hKHB4X2Jh c2UocHgpLCAodikpCj4gKyNkZWZpbmUgZmlsbDMyX3B4KHB4LCB2KSBmaWxsX3BhZ2VfZG1hXzMy KHB4X2Jhc2UocHgpLCAodikpCj4gIAo+IC1zdGF0aWMgdm9pZCBmaWxsX3BhZ2VfZG1hKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkgIHN0cnVjdCBpOTE1X3BhZ2VfZG1hICpw LAo+IC0JCQkgIGNvbnN0IHU2NCB2YWwpCj4gK3N0YXRpYyB2b2lkIGZpbGxfcGFnZV9kbWEoc3Ry dWN0IGk5MTVfcGFnZV9kbWEgKnAsIGNvbnN0IHU2NCB2YWwpCj4gIHsKPiAtCXU2NCAqIGNvbnN0 IHZhZGRyID0ga21hcF9hdG9taWMocC0+cGFnZSk7Cj4gLQo+IC0JbWVtc2V0NjQodmFkZHIsIHZh bCwgUEFHRV9TSVpFIC8gc2l6ZW9mKHZhbCkpOwo+IC0KPiAtCWt1bm1hcF9hdG9taWModmFkZHIp Owo+ICsJa3VubWFwX2F0b21pYyhtZW1zZXQ2NChrbWFwX2F0b21pYyhwLT5wYWdlKSwgdmFsLCBJ OTE1X1BERVMpKTsKCk5lYXQuCgpJIHdvdWxkIGdvIGZvciA1MTIgaW5zdGVhZCBvZiBJOTE1X1BE RVMuIFRoZXJlIGlzIG5vIG1hZ2ljCmFuZCB0aGVyZSBuZXZlciB3aWxsIGJlIG1hZ2ljIGFzIGl0 IGlzIGFzIGNvbnN0IGFzIGNhcnZlZCBpbnRvIHN0b25lLgoKPiAgfQo+ICAKPiAtc3RhdGljIHZv aWQgZmlsbF9wYWdlX2RtYV8zMihzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAtCQkJ ICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqcCwKPiAtCQkJICAgICBjb25zdCB1MzIgdikKPiAr c3RhdGljIHZvaWQgZmlsbF9wYWdlX2RtYV8zMihzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqcCwgY29u c3QgdTMyIHYpCj4gIHsKPiAtCWZpbGxfcGFnZV9kbWEodm0sIHAsICh1NjQpdiA8PCAzMiB8IHYp Owo+ICsJZmlsbF9wYWdlX2RtYShwLCAodTY0KXYgPDwgMzIgfCB2KTsKPiAgfQo+ICAKPiAgc3Rh dGljIGludAo+IEBAIC02ODcsNiArNjc5LDIxIEBAIHN0YXRpYyB2b2lkIGNsZWFudXBfc2NyYXRj aF9wYWdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAJX19mcmVlX3BhZ2VzKHAt PnBhZ2UsIG9yZGVyKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgZnJlZV9zY3JhdGNoKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICt7Cj4gKwlpZiAoIXZtLT5zY3JhdGNoX3BhZ2Uu ZGFkZHIpIC8qIHNldCB0byAwIG9uIGNsb25lcyAqLwo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAo dm0tPnNjcmF0Y2hfcGRwLmRhZGRyKQo+ICsJCWNsZWFudXBfcGFnZV9kbWEodm0sICZ2bS0+c2Ny YXRjaF9wZHApOwo+ICsJaWYgKHZtLT5zY3JhdGNoX3BkLmRhZGRyKQo+ICsJCWNsZWFudXBfcGFn ZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wZCk7Cj4gKwlpZiAodm0tPnNjcmF0Y2hfcHQuZGFkZHIp Cj4gKwkJY2xlYW51cF9wYWdlX2RtYSh2bSwgJnZtLT5zY3JhdGNoX3B0KTsKPiArCj4gKwljbGVh bnVwX3NjcmF0Y2hfcGFnZSh2bSk7Cj4gK30KPiArCj4gIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdl X3RhYmxlICphbGxvY19wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgewo+ICAJ c3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQ7Cj4gQEAgLTcxMSwxOCArNzE4LDYgQEAgc3RhdGlj IHZvaWQgZnJlZV9wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgc3RydWN0IGk5MTVf cGFnZV90YWJsZSAqcHQpCj4gIAlrZnJlZShwdCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGdl bjhfaW5pdGlhbGl6ZV9wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAtCQkJICAg ICAgIHN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0KQo+IC17Cj4gLQlmaWxsX3B4KHZtLCBwdCwg dm0tPnNjcmF0Y2hfcHRlKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuNl9pbml0aWFsaXpl X3B0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkgICAgICAgc3RydWN0IGk5 MTVfcGFnZV90YWJsZSAqcHQpCj4gLXsKPiAtCWZpbGwzMl9weCh2bSwgcHQsIHZtLT5zY3JhdGNo X3B0ZSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqX19h bGxvY19wZCh2b2lkKQo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQ7Cj4g QEAgLTc2NSw5ICs3NjAsMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9wZChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCWtmcmVlKHBkKTsKPiAgfQo+ICAKPiAtI2RlZmluZSBpbml0X3Bk KHZtLCBwZCwgdG8pIHsJCQkJCVwKPiAtCWZpbGxfcHgoKHZtKSwgKHBkKSwgZ2VuOF9wZGVfZW5j b2RlKHB4X2RtYSh0byksIEk5MTVfQ0FDSEVfTExDKSk7IFwKPiAtCW1lbXNldF9wKChwZCktPmVu dHJ5LCAodG8pLCA1MTIpOwkJCQlcCj4gK3N0YXRpYyB2b2lkIGluaXRfcGQoc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnkgKnBkLAo+ICsJCSAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RtYSAqc2NyYXRj aCkKPiArewo+ICsJZmlsbF9weChwZCwgZ2VuOF9wZGVfZW5jb2RlKHNjcmF0Y2gtPmRhZGRyLCBJ OTE1X0NBQ0hFX0xMQykpOwo+ICsJbWVtc2V0X3AocGQtPmVudHJ5LCBzY3JhdGNoLCA1MTIpOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgaW5saW5lIHZvaWQKPiBAQCAtODY5LDEyICs4NjYsMTEgQEAgc3Rh dGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKPiAgCXUzMiBwZGU7Cj4gIAo+ICAJZ2VuOF9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwg bGVuZ3RoLCBwZGUpIHsKPiAtCQlHRU1fQlVHX09OKHB0ID09IHZtLT5zY3JhdGNoX3B0KTsKPiAr CQlHRU1fQlVHX09OKHB4X2Jhc2UocHQpID09ICZ2bS0+c2NyYXRjaF9wdCk7Cj4gIAo+ICAJCWF0 b21pY19pbmMoJnB0LT51c2VkKTsKPiAgCQlnZW44X3BwZ3R0X2NsZWFyX3B0KHZtLCBwdCwgc3Rh cnQsIGxlbmd0aCk7Cj4gLQkJaWYgKHJlbGVhc2VfcGRfZW50cnkocGQsIHBkZSwgJnB0LT51c2Vk LAo+IC0JCQkJICAgICBweF9iYXNlKHZtLT5zY3JhdGNoX3B0KSkpCj4gKwkJaWYgKHJlbGVhc2Vf cGRfZW50cnkocGQsIHBkZSwgJnB0LT51c2VkLCAmdm0tPnNjcmF0Y2hfcHQpKQo+ICAJCQlmcmVl X3B0KHZtLCBwdCk7Cj4gIAl9Cj4gIH0KPiBAQCAtODkwLDEyICs4ODYsMTEgQEAgc3RhdGljIHZv aWQgZ2VuOF9wcGd0dF9jbGVhcl9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4g IAl1bnNpZ25lZCBpbnQgcGRwZTsKPiAgCj4gIAlnZW44X2Zvcl9lYWNoX3BkcGUocGQsIHBkcCwg c3RhcnQsIGxlbmd0aCwgcGRwZSkgewo+IC0JCUdFTV9CVUdfT04ocGQgPT0gdm0tPnNjcmF0Y2hf cGQpOwo+ICsJCUdFTV9CVUdfT04ocHhfYmFzZShwZCkgPT0gJnZtLT5zY3JhdGNoX3BkKTsKClBl cmhhcHMgZnV0dXJlIHdpbGwgYnJpbmcgcGRfcG9pbnRzX3NjcmF0Y2gocGQpLgoKTm93IHRoZSBp bnRyaWd1aW5nLCBib3JkZXJpbmcgaXJyaXRhdGluZywgcXVlc3Rpb24gaW4gbXkgbWluZCBpcwp0 aGF0IGNhbiB3ZSBmb2xkIHRoZSBzY3JhdGNoX3BkIGFuZCBzY3JhdGNoX3BkcCB0byBiZSB0aGUg c2FtZSB0aGluZy4KClBhdGNoIGxndG0gd2l0aCBzb21lIGRpc2xpa2UgdG93YXJkcyBJOTE1X1BE RVMsCgpSZXZpZXdlZC1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRl bC5jb20+Cgo+ICAKPiAgCQlhdG9taWNfaW5jKCZwZC0+dXNlZCk7Cj4gIAkJZ2VuOF9wcGd0dF9j bGVhcl9wZCh2bSwgcGQsIHN0YXJ0LCBsZW5ndGgpOwo+IC0JCWlmIChyZWxlYXNlX3BkX2VudHJ5 KHBkcCwgcGRwZSwgJnBkLT51c2VkLAo+IC0JCQkJICAgICBweF9iYXNlKHZtLT5zY3JhdGNoX3Bk KSkpCj4gKwkJaWYgKHJlbGVhc2VfcGRfZW50cnkocGRwLCBwZHBlLCAmcGQtPnVzZWQsICZ2bS0+ c2NyYXRjaF9wZCkpCj4gIAkJCWZyZWVfcGQodm0sIHBkKTsKPiAgCX0KPiAgfQo+IEBAIC05MjEs MTIgKzkxNiwxMSBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFyXzRsdmwoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAlHRU1fQlVHX09OKCFpOTE1X3ZtX2lzXzRsdmwodm0p KTsKPiAgCj4gIAlnZW44X2Zvcl9lYWNoX3BtbDRlKHBkcCwgcG1sNCwgc3RhcnQsIGxlbmd0aCwg cG1sNGUpIHsKPiAtCQlHRU1fQlVHX09OKHBkcCA9PSB2bS0+c2NyYXRjaF9wZHApOwo+ICsJCUdF TV9CVUdfT04ocHhfYmFzZShwZHApID09ICZ2bS0+c2NyYXRjaF9wZHApOwo+ICAKPiAgCQlhdG9t aWNfaW5jKCZwZHAtPnVzZWQpOwo+ICAJCWdlbjhfcHBndHRfY2xlYXJfcGRwKHZtLCBwZHAsIHN0 YXJ0LCBsZW5ndGgpOwo+IC0JCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBtbDQsIHBtbDRlLCAmcGRw LT51c2VkLAo+IC0JCQkJICAgICBweF9iYXNlKHZtLT5zY3JhdGNoX3BkcCkpKQo+ICsJCWlmIChy ZWxlYXNlX3BkX2VudHJ5KHBtbDQsIHBtbDRlLCAmcGRwLT51c2VkLCAmdm0tPnNjcmF0Y2hfcGRw KSkKPiAgCQkJZnJlZV9wZCh2bSwgcGRwKTsKPiAgCX0KPiAgfQo+IEBAIC0xMTgxLDcgKzExNzUs NyBAQCBzdGF0aWMgdm9pZCBnZW44X2ZyZWVfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCj4gIAlpbnQgaTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgSTkxNV9QREVT OyBpKyspIHsKPiAtCQlpZiAocGQtPmVudHJ5W2ldICE9IHZtLT5zY3JhdGNoX3B0KQo+ICsJCWlm IChwZC0+ZW50cnlbaV0gIT0gJnZtLT5zY3JhdGNoX3B0KQo+ICAJCQlmcmVlX3B0KHZtLCBwZC0+ ZW50cnlbaV0pOwo+ICAJfQo+ICB9Cj4gQEAgLTEyMTgsMzcgKzEyMTIsMzUgQEAgc3RhdGljIGlu dCBnZW44X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgCQkJ CUk5MTVfQ0FDSEVfTExDLAo+ICAJCQkJdm0tPmhhc19yZWFkX29ubHkpOwo+ICAKPiAtCXZtLT5z Y3JhdGNoX3B0ID0gYWxsb2NfcHQodm0pOwo+IC0JaWYgKElTX0VSUih2bS0+c2NyYXRjaF9wdCkp IHsKPiAtCQlyZXQgPSBQVFJfRVJSKHZtLT5zY3JhdGNoX3B0KTsKPiArCWlmICh1bmxpa2VseShz ZXR1cF9wYWdlX2RtYSh2bSwgJnZtLT5zY3JhdGNoX3B0KSkpIHsKPiArCQlyZXQgPSAtRU5PTUVN Owo+ICAJCWdvdG8gZnJlZV9zY3JhdGNoX3BhZ2U7Cj4gIAl9Cj4gKwlmaWxsX3BhZ2VfZG1hKCZ2 bS0+c2NyYXRjaF9wdCwgdm0tPnNjcmF0Y2hfcHRlKTsKPiAgCj4gLQl2bS0+c2NyYXRjaF9wZCA9 IGFsbG9jX3BkKHZtKTsKPiAtCWlmIChJU19FUlIodm0tPnNjcmF0Y2hfcGQpKSB7Cj4gLQkJcmV0 ID0gUFRSX0VSUih2bS0+c2NyYXRjaF9wZCk7Cj4gKwlpZiAodW5saWtlbHkoc2V0dXBfcGFnZV9k bWEodm0sICZ2bS0+c2NyYXRjaF9wZCkpKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiAgCQlnb3Rv IGZyZWVfcHQ7Cj4gIAl9Cj4gKwlmaWxsX3BhZ2VfZG1hKCZ2bS0+c2NyYXRjaF9wZCwKPiArCQkg ICAgICBnZW44X3BkZV9lbmNvZGUodm0tPnNjcmF0Y2hfcGQuZGFkZHIsIEk5MTVfQ0FDSEVfTExD KSk7Cj4gIAo+ICAJaWYgKGk5MTVfdm1faXNfNGx2bCh2bSkpIHsKPiAtCQl2bS0+c2NyYXRjaF9w ZHAgPSBhbGxvY19wZCh2bSk7Cj4gLQkJaWYgKElTX0VSUih2bS0+c2NyYXRjaF9wZHApKSB7Cj4g LQkJCXJldCA9IFBUUl9FUlIodm0tPnNjcmF0Y2hfcGRwKTsKPiArCQlpZiAodW5saWtlbHkoc2V0 dXBfcGFnZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wZHApKSkgewo+ICsJCQlyZXQgPSAtRU5PTUVN Owo+ICAJCQlnb3RvIGZyZWVfcGQ7Cj4gIAkJfQo+ICsJCWZpbGxfcGFnZV9kbWEoJnZtLT5zY3Jh dGNoX3BkcCwKPiArCQkJICAgICAgZ2VuOF9wZGVfZW5jb2RlKHZtLT5zY3JhdGNoX3BkcC5kYWRk ciwKPiArCQkJCQkgICAgICBJOTE1X0NBQ0hFX0xMQykpOwo+ICAJfQo+ICAKPiAtCWdlbjhfaW5p dGlhbGl6ZV9wdCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwo+IC0JaW5pdF9wZCh2bSwgdm0tPnNjcmF0 Y2hfcGQsIHZtLT5zY3JhdGNoX3B0KTsKPiAtCWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKQo+IC0J CWluaXRfcGQodm0sIHZtLT5zY3JhdGNoX3BkcCwgdm0tPnNjcmF0Y2hfcGQpOwo+IC0KPiAgCXJl dHVybiAwOwo+ICAKPiAgZnJlZV9wZDoKPiAtCWZyZWVfcGQodm0sIHZtLT5zY3JhdGNoX3BkKTsK PiArCWNsZWFudXBfcGFnZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wZCk7Cj4gIGZyZWVfcHQ6Cj4g LQlmcmVlX3B0KHZtLCB2bS0+c2NyYXRjaF9wdCk7Cj4gKwljbGVhbnVwX3BhZ2VfZG1hKHZtLCAm dm0tPnNjcmF0Y2hfcHQpOwo+ICBmcmVlX3NjcmF0Y2hfcGFnZToKPiAgCWNsZWFudXBfc2NyYXRj aF9wYWdlKHZtKTsKPiAgCj4gQEAgLTEyOTIsMTggKzEyODQsNiBAQCBzdGF0aWMgaW50IGdlbjhf cHBndHRfbm90aWZ5X3ZndChzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQsIGJvb2wgY3JlYXRlKQo+ ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjhfZnJlZV9zY3JhdGNoKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+IC17Cj4gLQlpZiAoIXZtLT5zY3JhdGNoX3Bh Z2UuZGFkZHIpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKQo+ IC0JCWZyZWVfcGQodm0sIHZtLT5zY3JhdGNoX3BkcCk7Cj4gLQlmcmVlX3BkKHZtLCB2bS0+c2Ny YXRjaF9wZCk7Cj4gLQlmcmVlX3B0KHZtLCB2bS0+c2NyYXRjaF9wdCk7Cj4gLQljbGVhbnVwX3Nj cmF0Y2hfcGFnZSh2bSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51 cF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJICAgIHN0cnVjdCBp OTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHApCj4gIHsKPiBAQCAtMTMxMSw3ICsxMjkxLDcgQEAgc3Rh dGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCj4gIAlpbnQgaTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgcGRwZXM7IGkrKykgewo+ IC0JCWlmIChwZHAtPmVudHJ5W2ldID09IHZtLT5zY3JhdGNoX3BkKQo+ICsJCWlmIChwZHAtPmVu dHJ5W2ldID09ICZ2bS0+c2NyYXRjaF9wZCkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCWdlbjhf ZnJlZV9wYWdlX3RhYmxlcyh2bSwgcGRwLT5lbnRyeVtpXSk7Cj4gQEAgLTEzMjksNyArMTMwOSw3 IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51cF80bHZsKHN0cnVjdCBpOTE1X3BwZ3R0 ICpwcGd0dCkKPiAgCWZvciAoaSA9IDA7IGkgPCBHRU44X1BNTDRFU19QRVJfUE1MNDsgaSsrKSB7 Cj4gIAkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCA9IGk5MTVfcGRwX2VudHJ5KHBt bDQsIGkpOwo+ICAKPiAtCQlpZiAocGRwID09IHBwZ3R0LT52bS5zY3JhdGNoX3BkcCkKPiArCQlp ZiAocHhfYmFzZShwZHApID09ICZwcGd0dC0+dm0uc2NyYXRjaF9wZHApCj4gIAkJCWNvbnRpbnVl Owo+ICAKPiAgCQlnZW44X3BwZ3R0X2NsZWFudXBfM2x2bCgmcHBndHQtPnZtLCBwZHApOwo+IEBA IC0xMzUxLDcgKzEzMzEsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXAoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAllbHNlCj4gIAkJZ2VuOF9wcGd0dF9jbGVhbnVw XzNsdmwoJnBwZ3R0LT52bSwgcHBndHQtPnBkKTsKPiAgCj4gLQlnZW44X2ZyZWVfc2NyYXRjaCh2 bSk7Cj4gKwlmcmVlX3NjcmF0Y2godm0pOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGdlbjhfcHBn dHRfYWxsb2NfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gQEAgLTEzNjcsNyAr MTM0Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCWdlbjhfZm9yX2VhY2hfcGRlKHB0LCBwZCwgc3RhcnQsIGxlbmd0 aCwgcGRlKSB7Cj4gIAkJY29uc3QgaW50IGNvdW50ID0gZ2VuOF9wdGVfY291bnQoc3RhcnQsIGxl bmd0aCk7Cj4gIAo+IC0JCWlmIChwdCA9PSB2bS0+c2NyYXRjaF9wdCkgewo+ICsJCWlmIChweF9i YXNlKHB0KSA9PSAmdm0tPnNjcmF0Y2hfcHQpIHsKPiAgCQkJc3Bpbl91bmxvY2soJnBkLT5sb2Nr KTsKPiAgCj4gIAkJCXB0ID0gZmV0Y2hfYW5kX3plcm8oJmFsbG9jKTsKPiBAQCAtMTM3OSwxMCAr MTM1OSwxMCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGQoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCj4gIAkJCX0KPiAgCj4gIAkJCWlmIChjb3VudCA8IEdFTjhfUFRFUyB8 fCBpbnRlbF92Z3B1X2FjdGl2ZSh2bS0+aTkxNSkpCj4gLQkJCQlnZW44X2luaXRpYWxpemVfcHQo dm0sIHB0KTsKPiArCQkJCWZpbGxfcHgocHQsIHZtLT5zY3JhdGNoX3B0ZSk7Cj4gIAo+ICAJCQlz cGluX2xvY2soJnBkLT5sb2NrKTsKPiAtCQkJaWYgKHBkLT5lbnRyeVtwZGVdID09IHZtLT5zY3Jh dGNoX3B0KSB7Cj4gKwkJCWlmIChwZC0+ZW50cnlbcGRlXSA9PSAmdm0tPnNjcmF0Y2hfcHQpIHsK PiAgCQkJCXNldF9wZF9lbnRyeShwZCwgcGRlLCBwdCk7Cj4gIAkJCX0gZWxzZSB7Cj4gIAkJCQlh bGxvYyA9IHB0Owo+IEBAIC0xNDE0LDcgKzEzOTQsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRf YWxsb2NfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAKPiAgCXNwaW5fbG9j aygmcGRwLT5sb2NrKTsKPiAgCWdlbjhfZm9yX2VhY2hfcGRwZShwZCwgcGRwLCBzdGFydCwgbGVu Z3RoLCBwZHBlKSB7Cj4gLQkJaWYgKHBkID09IHZtLT5zY3JhdGNoX3BkKSB7Cj4gKwkJaWYgKHB4 X2Jhc2UocGQpID09ICZ2bS0+c2NyYXRjaF9wZCkgewo+ICAJCQlzcGluX3VubG9jaygmcGRwLT5s b2NrKTsKPiAgCj4gIAkJCXBkID0gZmV0Y2hfYW5kX3plcm8oJmFsbG9jKTsKPiBAQCAtMTQyNSwx MCArMTQwNSwxMCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGRwKHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCQkJZ290byB1bndpbmQ7Cj4gIAkJCX0KPiAgCj4gLQkJ CWluaXRfcGQodm0sIHBkLCB2bS0+c2NyYXRjaF9wdCk7Cj4gKwkJCWluaXRfcGQocGQsICZ2bS0+ c2NyYXRjaF9wdCk7Cj4gIAo+ICAJCQlzcGluX2xvY2soJnBkcC0+bG9jayk7Cj4gLQkJCWlmIChw ZHAtPmVudHJ5W3BkcGVdID09IHZtLT5zY3JhdGNoX3BkKSB7Cj4gKwkJCWlmIChwZHAtPmVudHJ5 W3BkcGVdID09ICZ2bS0+c2NyYXRjaF9wZCkgewo+ICAJCQkJc2V0X3BkX2VudHJ5KHBkcCwgcGRw ZSwgcGQpOwo+ICAJCQl9IGVsc2Ugewo+ICAJCQkJYWxsb2MgPSBwZDsKPiBAQCAtMTQ0OSw3ICsx NDI5LDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCWdvdG8gb3V0Owo+ICAKPiAgdW53aW5kX3BkOgo+IC0JaWYgKHJl bGVhc2VfcGRfZW50cnkocGRwLCBwZHBlLCAmcGQtPnVzZWQsIHB4X2Jhc2Uodm0tPnNjcmF0Y2hf cGQpKSkKPiArCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBkcCwgcGRwZSwgJnBkLT51c2VkLCAmdm0t PnNjcmF0Y2hfcGQpKQo+ICAJCWZyZWVfcGQodm0sIHBkKTsKPiAgdW53aW5kOgo+ICAJZ2VuOF9w cGd0dF9jbGVhcl9wZHAodm0sIHBkcCwgZnJvbSwgc3RhcnQgLSBmcm9tKTsKPiBAQCAtMTQ3OCw3 ICsxNDU4LDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICAJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKPiAgCWdl bjhfZm9yX2VhY2hfcG1sNGUocGRwLCBwbWw0LCBzdGFydCwgbGVuZ3RoLCBwbWw0ZSkgewo+IC0J CWlmIChwZHAgPT0gdm0tPnNjcmF0Y2hfcGRwKSB7Cj4gKwkJaWYgKHB4X2Jhc2UocGRwKSA9PSAm dm0tPnNjcmF0Y2hfcGRwKSB7Cj4gIAkJCXNwaW5fdW5sb2NrKCZwbWw0LT5sb2NrKTsKPiAgCj4g IAkJCXBkcCA9IGZldGNoX2FuZF96ZXJvKCZhbGxvYyk7Cj4gQEAgLTE0ODksMTAgKzE0NjksMTAg QEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCj4gIAkJCQlnb3RvIHVud2luZDsKPiAgCQkJfQo+ICAKPiAtCQkJaW5pdF9wZCh2 bSwgcGRwLCB2bS0+c2NyYXRjaF9wZCk7Cj4gKwkJCWluaXRfcGQocGRwLCAmdm0tPnNjcmF0Y2hf cGQpOwo+ICAKPiAgCQkJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKPiAtCQkJaWYgKHBtbDQtPmVu dHJ5W3BtbDRlXSA9PSB2bS0+c2NyYXRjaF9wZHApIHsKPiArCQkJaWYgKHBtbDQtPmVudHJ5W3Bt bDRlXSA9PSAmdm0tPnNjcmF0Y2hfcGRwKSB7Cj4gIAkJCQlzZXRfcGRfZW50cnkocG1sNCwgcG1s NGUsIHBkcCk7Cj4gIAkJCX0gZWxzZSB7Cj4gIAkJCQlhbGxvYyA9IHBkcDsKPiBAQCAtMTUxMyw3 ICsxNDkzLDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIAlnb3RvIG91dDsKPiAgCj4gIHVud2luZF9wZHA6Cj4gLQlp ZiAocmVsZWFzZV9wZF9lbnRyeShwbWw0LCBwbWw0ZSwgJnBkcC0+dXNlZCwgcHhfYmFzZSh2bS0+ c2NyYXRjaF9wZHApKSkKPiArCWlmIChyZWxlYXNlX3BkX2VudHJ5KHBtbDQsIHBtbDRlLCAmcGRw LT51c2VkLCAmdm0tPnNjcmF0Y2hfcGRwKSkKPiAgCQlmcmVlX3BkKHZtLCBwZHApOwo+ICB1bndp bmQ6Cj4gIAlnZW44X3BwZ3R0X2NsZWFyXzRsdmwodm0sIGZyb20sIHN0YXJ0IC0gZnJvbSk7Cj4g QEAgLTE1MzcsNyArMTUxNyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcmVhbGxvY2F0ZV90b3BfbGV2 ZWxfcGRwKHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCkKPiAgCQlpZiAoSVNfRVJSKHBkKSkKPiAg CQkJZ290byB1bndpbmQ7Cj4gIAo+IC0JCWluaXRfcGQodm0sIHBkLCB2bS0+c2NyYXRjaF9wdCk7 Cj4gKwkJaW5pdF9wZChwZCwgJnZtLT5zY3JhdGNoX3B0KTsKPiAgCQlzZXRfcGRfZW50cnkocGRw LCBwZHBlLCBwZCk7Cj4gIAl9Cj4gIAo+IEBAIC0xNTY4LDEwICsxNTQ4LDEwIEBAIHN0YXRpYyB2 b2lkIHBwZ3R0X2luaXQoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0LCBzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQo+ICAKPiAgc3RhdGljIHZvaWQgaW5pdF9wZF9uKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ICAJCSAgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCwKPiAtCQkg ICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqdG8sCj4gKwkJICAgICAgc3RydWN0IGk5 MTVfcGFnZV9kbWEgKnRvLAo+ICAJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbnRyaWVzKQo+ ICB7Cj4gLQljb25zdCB1NjQgZGFkZHIgPSBnZW44X3BkZV9lbmNvZGUocHhfZG1hKHRvKSwgSTkx NV9DQUNIRV9MTEMpOwo+ICsJY29uc3QgdTY0IGRhZGRyID0gZ2VuOF9wZGVfZW5jb2RlKHRvLT5k YWRkciwgSTkxNV9DQUNIRV9MTEMpOwo+ICAJdTY0ICogY29uc3QgdmFkZHIgPSBrbWFwX2F0b21p YyhwZC0+YmFzZS5wYWdlKTsKPiAgCj4gIAltZW1zZXQ2NCh2YWRkciwgZGFkZHIsIGVudHJpZXMp Owo+IEBAIC0xNTg4LDcgKzE1NjgsNyBAQCBnZW44X2FsbG9jX3RvcF9wZChzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSkKPiAgCWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKSB7Cj4gIAkJcGQg PSBhbGxvY19wZCh2bSk7Cj4gIAkJaWYgKCFJU19FUlIocGQpKQo+IC0JCQlpbml0X3BkKHZtLCBw ZCwgdm0tPnNjcmF0Y2hfcGRwKTsKPiArCQkJaW5pdF9wZChwZCwgJnZtLT5zY3JhdGNoX3BkcCk7 Cj4gIAo+ICAJCXJldHVybiBwZDsKPiAgCX0KPiBAQCAtMTYwNSw3ICsxNTg1LDcgQEAgZ2VuOF9h bGxvY190b3BfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cj4gIAl9Cj4gIAo+IC0JaW5pdF9wZF9uKHZtLCBwZCwgdm0tPnNjcmF0 Y2hfcGQsIEdFTjhfM0xWTF9QRFBFUyk7Cj4gKwlpbml0X3BkX24odm0sIHBkLCAmdm0tPnNjcmF0 Y2hfcGQsIEdFTjhfM0xWTF9QRFBFUyk7Cj4gIAo+ICAJcmV0dXJuIHBkOwo+ICB9Cj4gQEAgLTE2 NzgsNyArMTY1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wcGd0dCAqZ2VuOF9wcGd0dF9jcmVh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIGVycl9mcmVlX3BkOgo+ICAJZnJl ZV9wZCgmcHBndHQtPnZtLCBwcGd0dC0+cGQpOwo+ICBlcnJfZnJlZV9zY3JhdGNoOgo+IC0JZ2Vu OF9mcmVlX3NjcmF0Y2goJnBwZ3R0LT52bSk7Cj4gKwlmcmVlX3NjcmF0Y2goJnBwZ3R0LT52bSk7 Cj4gIGVycl9mcmVlOgo+ICAJa2ZyZWUocHBndHQpOwo+ICAJcmV0dXJuIEVSUl9QVFIoZXJyKTsK PiBAQCAtMTc2Myw3ICsxNzQzLDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhcl9yYW5n ZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQljb25zdCB1bnNpZ25lZCBpbnQg Y291bnQgPSBtaW4obnVtX2VudHJpZXMsIEdFTjZfUFRFUyAtIHB0ZSk7Cj4gIAkJZ2VuNl9wdGVf dCAqdmFkZHI7Cj4gIAo+IC0JCUdFTV9CVUdfT04ocHQgPT0gdm0tPnNjcmF0Y2hfcHQpOwo+ICsJ CUdFTV9CVUdfT04ocHhfYmFzZShwdCkgPT0gJnZtLT5zY3JhdGNoX3B0KTsKPiAgCj4gIAkJbnVt X2VudHJpZXMgLT0gY291bnQ7Cj4gIAo+IEBAIC0xODAwLDcgKzE3ODAsNyBAQCBzdGF0aWMgdm9p ZCBnZW42X3BwZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAo+ICAJc3RydWN0IHNndF9kbWEgaXRlciA9IHNndF9kbWEodm1hKTsKPiAgCWdlbjZfcHRlX3Qg KnZhZGRyOwo+ICAKPiAtCUdFTV9CVUdfT04oaTkxNV9wdF9lbnRyeShwZCwgYWN0X3B0KSA9PSB2 bS0+c2NyYXRjaF9wdCk7Cj4gKwlHRU1fQlVHX09OKHBkLT5lbnRyeVthY3RfcHRdID09ICZ2bS0+ c2NyYXRjaF9wdCk7Cj4gIAo+ICAJdmFkZHIgPSBrbWFwX2F0b21pY19weChpOTE1X3B0X2VudHJ5 KHBkLCBhY3RfcHQpKTsKPiAgCWRvIHsKPiBAQCAtMTg0NSw3ICsxODI1LDcgQEAgc3RhdGljIGlu dCBnZW42X2FsbG9jX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJ Z2VuNl9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBwZGUpIHsKPiAgCQljb25z dCB1bnNpZ25lZCBpbnQgY291bnQgPSBnZW42X3B0ZV9jb3VudChzdGFydCwgbGVuZ3RoKTsKPiAg Cj4gLQkJaWYgKHB0ID09IHZtLT5zY3JhdGNoX3B0KSB7Cj4gKwkJaWYgKHB4X2Jhc2UocHQpID09 ICZ2bS0+c2NyYXRjaF9wdCkgewo+ICAJCQlzcGluX3VubG9jaygmcGQtPmxvY2spOwo+ICAKPiAg CQkJcHQgPSBmZXRjaF9hbmRfemVybygmYWxsb2MpOwo+IEBAIC0xODU2LDEwICsxODM2LDEwIEBA IHN0YXRpYyBpbnQgZ2VuNl9hbGxvY192YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKPiAgCQkJCWdvdG8gdW53aW5kX291dDsKPiAgCQkJfQo+ICAKPiAtCQkJZ2VuNl9pbml0 aWFsaXplX3B0KHZtLCBwdCk7Cj4gKwkJCWZpbGwzMl9weChwdCwgdm0tPnNjcmF0Y2hfcHRlKTsK PiAgCj4gIAkJCXNwaW5fbG9jaygmcGQtPmxvY2spOwo+IC0JCQlpZiAocGQtPmVudHJ5W3BkZV0g PT0gdm0tPnNjcmF0Y2hfcHQpIHsKPiArCQkJaWYgKHBkLT5lbnRyeVtwZGVdID09ICZ2bS0+c2Ny YXRjaF9wdCkgewo+ICAJCQkJcGQtPmVudHJ5W3BkZV0gPSBwdDsKPiAgCQkJCWlmIChpOTE1X3Zt YV9pc19ib3VuZChwcGd0dC0+dm1hLAo+ICAJCQkJCQkgICAgICBJOTE1X1ZNQV9HTE9CQUxfQklO RCkpIHsKPiBAQCAtMTkwOCwyNiArMTg4OCwxOCBAQCBzdGF0aWMgaW50IGdlbjZfcHBndHRfaW5p dF9zY3JhdGNoKHN0cnVjdCBnZW42X3BwZ3R0ICpwcGd0dCkKPiAgCQkJCQkgSTkxNV9DQUNIRV9O T05FLAo+ICAJCQkJCSBQVEVfUkVBRF9PTkxZKTsKPiAgCj4gLQl2bS0+c2NyYXRjaF9wdCA9IGFs bG9jX3B0KHZtKTsKPiAtCWlmIChJU19FUlIodm0tPnNjcmF0Y2hfcHQpKSB7Cj4gKwlpZiAodW5s aWtlbHkoc2V0dXBfcGFnZV9kbWEodm0sICZ2bS0+c2NyYXRjaF9wdCkpKSB7Cj4gIAkJY2xlYW51 cF9zY3JhdGNoX3BhZ2Uodm0pOwo+IC0JCXJldHVybiBQVFJfRVJSKHZtLT5zY3JhdGNoX3B0KTsK PiArCQlyZXR1cm4gLUVOT01FTTsKPiAgCX0KPiAtCj4gLQlnZW42X2luaXRpYWxpemVfcHQodm0s IHZtLT5zY3JhdGNoX3B0KTsKPiArCWZpbGxfcGFnZV9kbWFfMzIoJnZtLT5zY3JhdGNoX3B0LCB2 bS0+c2NyYXRjaF9wdGUpOwo+ICAKPiAgCWdlbjZfZm9yX2FsbF9wZGVzKHVudXNlZCwgcGQsIHBk ZSkKPiAtCQlwZC0+ZW50cnlbcGRlXSA9IHZtLT5zY3JhdGNoX3B0Owo+ICsJCXBkLT5lbnRyeVtw ZGVdID0gJnZtLT5zY3JhdGNoX3B0Owo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWVfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSkKPiAtewo+IC0JZnJlZV9wdCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwo+IC0JY2xlYW51cF9z Y3JhdGNoX3BhZ2Uodm0pOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWVf cGQoc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0KQo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeSAqIGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7Cj4gQEAgLTE5MzUsNyArMTkwNyw3 IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfZnJlZV9wZChzdHJ1Y3QgZ2VuNl9wcGd0dCAqcHBn dHQpCj4gIAl1MzIgcGRlOwo+ICAKPiAgCWdlbjZfZm9yX2FsbF9wZGVzKHB0LCBwZCwgcGRlKQo+ IC0JCWlmIChwdCAhPSBwcGd0dC0+YmFzZS52bS5zY3JhdGNoX3B0KQo+ICsJCWlmIChweF9iYXNl KHB0KSAhPSAmcHBndHQtPmJhc2Uudm0uc2NyYXRjaF9wdCkKPiAgCQkJZnJlZV9wdCgmcHBndHQt PmJhc2Uudm0sIHB0KTsKPiAgfQo+ICAKPiBAQCAtMTk1MCw3ICsxOTIyLDcgQEAgc3RhdGljIHZv aWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAJ bXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgCj4gIAlnZW42X3BwZ3R0 X2ZyZWVfcGQocHBndHQpOwo+IC0JZ2VuNl9wcGd0dF9mcmVlX3NjcmF0Y2godm0pOwo+ICsJZnJl ZV9zY3JhdGNoKHZtKTsKPiAgCWtmcmVlKHBwZ3R0LT5iYXNlLnBkKTsKPiAgfQo+ICAKPiBAQCAt MTk5Myw3ICsxOTY1LDcgQEAgc3RhdGljIHZvaWQgcGRfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKPiAgewo+ICAJc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0ID0gdm1hLT5wcml2YXRl Owo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwZCA9IHBwZ3R0LT5iYXNl LnBkOwo+IC0Jc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqIGNvbnN0IHNjcmF0Y2hfcHQgPSBwcGd0 dC0+YmFzZS52bS5zY3JhdGNoX3B0Owo+ICsJc3RydWN0IGk5MTVfcGFnZV9kbWEgKiBjb25zdCBz Y3JhdGNoID0gJnBwZ3R0LT5iYXNlLnZtLnNjcmF0Y2hfcHQ7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdl X3RhYmxlICpwdDsKPiAgCXVuc2lnbmVkIGludCBwZGU7Cj4gIAo+IEBAIC0yMDAyLDExICsxOTc0 LDExIEBAIHN0YXRpYyB2b2lkIHBkX3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g IAo+ICAJLyogRnJlZSBhbGwgbm8gbG9uZ2VyIHVzZWQgcGFnZSB0YWJsZXMgKi8KPiAgCWdlbjZf Zm9yX2FsbF9wZGVzKHB0LCBwcGd0dC0+YmFzZS5wZCwgcGRlKSB7Cj4gLQkJaWYgKGF0b21pY19y ZWFkKCZwdC0+dXNlZCkgfHwgcHQgPT0gc2NyYXRjaF9wdCkKPiArCQlpZiAocHhfYmFzZShwdCkg PT0gc2NyYXRjaCB8fCBhdG9taWNfcmVhZCgmcHQtPnVzZWQpKQo+ICAJCQljb250aW51ZTsKPiAg Cj4gIAkJZnJlZV9wdCgmcHBndHQtPmJhc2Uudm0sIHB0KTsKPiAtCQlwZC0+ZW50cnlbcGRlXSA9 IHNjcmF0Y2hfcHQ7Cj4gKwkJcGQtPmVudHJ5W3BkZV0gPSBzY3JhdGNoOwo+ICAJfQo+ICAKPiAg CXBwZ3R0LT5zY2FuX2Zvcl91bnVzZWRfcHQgPSBmYWxzZTsKPiBAQCAtMjE0OCw3ICsyMTIwLDcg QEAgc3RhdGljIHN0cnVjdCBpOTE1X3BwZ3R0ICpnZW42X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCXJldHVybiAmcHBndHQtPmJhc2U7Cj4gIAo+ICBlcnJf c2NyYXRjaDoKPiAtCWdlbjZfcHBndHRfZnJlZV9zY3JhdGNoKCZwcGd0dC0+YmFzZS52bSk7Cj4g KwlmcmVlX3NjcmF0Y2goJnBwZ3R0LT5iYXNlLnZtKTsKPiAgZXJyX3BkOgo+ICAJa2ZyZWUocHBn dHQtPmJhc2UucGQpOwo+ICBlcnJfZnJlZToKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu aAo+IGluZGV4IDU3YTY4ZWY0ZWRhNy4uODYwODUwNDExYTFiIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmgKPiBAQCAtMzA0LDkgKzMwNCw5IEBAIHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2Ugewo+ICAJdTY0IHNjcmF0Y2hfcHRlOwo+ICAJaW50IHNjcmF0Y2hfb3JkZXI7Cj4g IAlzdHJ1Y3QgaTkxNV9wYWdlX2RtYSBzY3JhdGNoX3BhZ2U7Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdl X3RhYmxlICpzY3JhdGNoX3B0Owo+IC0Jc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnNjcmF0 Y2hfcGQ7Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqc2NyYXRjaF9wZHA7IC8qIEdF TjgrICYgNDhiIFBQR1RUICovCj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX2RtYSBzY3JhdGNoX3B0Owo+ ICsJc3RydWN0IGk5MTVfcGFnZV9kbWEgc2NyYXRjaF9wZDsKPiArCXN0cnVjdCBpOTE1X3BhZ2Vf ZG1hIHNjcmF0Y2hfcGRwOyAvKiBHRU44KyAmIDQ4YiBQUEdUVCAqLwo+ICAKPiAgCS8qKgo+ICAJ ICogTGlzdCBvZiB2bWEgY3VycmVudGx5IGJvdW5kLgo+IC0tIAo+IDIuMjAuMQpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=