From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v2] drm/i915/gtt: Serialise both updates to PDE and our shadow Date: Mon, 17 Jun 2019 16:55:36 +0300 Message-ID: <8736k88gfb.fsf@gaia.fi.intel.com> References: <20190617112036.9373-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 15B4688FD4 for ; Mon, 17 Jun 2019 13:55:45 +0000 (UTC) In-Reply-To: <20190617112036.9373-1-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 Cc: Matthew Auld List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gQ3VycmVu dGx5LCB3ZSBwZXJmb3JtIGEgbG9ja2VkIHVwZGF0ZSBvZiB0aGUgc2hhZG93IGVudHJ5IHdoZW4K PiBhbGxvY2F0aW5nIGEgcGFnZSBkaXJlY3RvcnkgZW50cnkgc3VjaCB0aGF0IGlmIHR3byBjbGll bnRzIGFyZQo+IGNvbmN1cnJlbnRseSBhbGxvY2F0aW5nIG5laWdoYm91cmluZyByYW5nZXMgd2Ug b25seSBpbnNlcnQgb25lIG5ldyBlbnRyeQo+IGZvciB0aGUgcGFpciBvZiB0aGVtLiBIb3dldmVy LCB3ZSBhbHNvIG5lZWQgdG8gc2VyaWFsaXNlIGJvdGggY2xpZW50cwo+IHdydCB0byB0aGUgYWN0 dWFsIGVudHJ5IGluIHRoZSBIVyB0YWJsZSwgb3IgZWxzZSB3ZSBtYXkgYWxsb3cgb25lIGNsaWVu dAo+IG9yIGV2ZW4gYSB0aGlyZCBjbGllbnQgdG8gcHJvY2VlZCBhaGVhZCBvZiB0aGUgSFcgd3Jp dGUuIE15IGhhbmR3YXZlCj4gYmVmb3JlIHdhcyB0aGF0IHVuZGVyIHRoZSBfcGF0aG9sb2dpY2Fs XyBjb25kaXRpb24gd2Ugd291bGQgc2VlIHRoZQo+IHNjcmF0Y2ggZW50cnkgaW5zdGVhZCBvZiB0 aGUgZXhwZWN0ZWQgZW50cnksIGNhdXNpbmcgYSB0ZW1wb3JhcnkKPiBnbGl0Y2guIFRoYXQgc3Rh cnZhdGlvbiBjb25kaXRpb24gd2lsbCBldmVudHVhbGx5IHNob3cgdXAgaW4gcHJhY3RpY2UsIHNv Cj4gZml4IGl0Lgo+Cj4gVGhlIHJlYXNvbiBmb3IgdGhlIHByZXZpb3VzIGNoZWF0IHdhcyB0byBh dm9pZCBoYXZpbmcgdG8gZnJlZSB0aGUgZXh0cmEKPiBhbGxvY2F0aW9uIHdoaWxlIHVuZGVyIHRo ZSBzcGlubG9jay4gTm93LCB3ZSBrZWVwIHRoZSBleHRyYSBlbnRyeQo+IGFsbG9jYXRlZCB1bnRp bCB0aGUgZW5kIGluc3RlYWQuCj4KPiB2MjogRml4IGVycm9yIHBhdGhzIGZvciBnZW42Cj4KPiBG aXhlczogMWQxYjU0OTBiOTFjICgiZHJtL2k5MTUvZ3R0OiBSZXBsYWNlIHN0cnVjdF9tdXRleCBz ZXJpYWxpc2F0aW9uIGZvciBhbGxvY2F0aW9uIikKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogTWF0dGhldyBBdWxkIDxtYXR0aGV3 LmF1bGRAaW50ZWwuY29tPgo+IENjOiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVs LmNvbT4KClJldmlld2VkLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4Lmlu dGVsLmNvbT4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwg MTMwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDcyIGlu c2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMKPiBpbmRleCAwMzkyYTRjNGJiOWIuLjA5ODc3NDhkMzI3YiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTEzODcsODIgKzEzODcsODggQEAgc3RhdGljIGlu dCBnZW44X3BwZ3R0X2FsbG9jX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJ CQkgICAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkLAo+ICAJCQkgICAgICAgdTY0 IHN0YXJ0LCB1NjQgbGVuZ3RoKQo+ICB7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICphbGxv YyA9IE5VTEw7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpwdDsKPiAgCXU2NCBmcm9tID0g c3RhcnQ7Cj4gIAl1bnNpZ25lZCBpbnQgcGRlOwo+ICsJaW50IHJldCA9IDA7Cj4gIAo+ICAJc3Bp bl9sb2NrKCZwZC0+bG9jayk7Cj4gIAlnZW44X2Zvcl9lYWNoX3BkZShwdCwgcGQsIHN0YXJ0LCBs ZW5ndGgsIHBkZSkgewo+ICAJCWNvbnN0IGludCBjb3VudCA9IGdlbjhfcHRlX2NvdW50KHN0YXJ0 LCBsZW5ndGgpOwo+ICAKPiAgCQlpZiAocHQgPT0gdm0tPnNjcmF0Y2hfcHQpIHsKPiAtCQkJc3Ry dWN0IGk5MTVfcGFnZV90YWJsZSAqb2xkOwo+IC0KPiAgCQkJc3Bpbl91bmxvY2soJnBkLT5sb2Nr KTsKPiAgCj4gLQkJCXB0ID0gYWxsb2NfcHQodm0pOwo+IC0JCQlpZiAoSVNfRVJSKHB0KSkKPiAr CQkJcHQgPSBmZXRjaF9hbmRfemVybygmYWxsb2MpOwo+ICsJCQlpZiAoIXB0KQo+ICsJCQkJcHQg PSBhbGxvY19wdCh2bSk7Cj4gKwkJCWlmIChJU19FUlIocHQpKSB7Cj4gKwkJCQlyZXQgPSBQVFJf RVJSKHB0KTsKPiAgCQkJCWdvdG8gdW53aW5kOwo+ICsJCQl9Cj4gIAo+ICAJCQlpZiAoY291bnQg PCBHRU44X1BURVMgfHwgaW50ZWxfdmdwdV9hY3RpdmUodm0tPmk5MTUpKQo+ICAJCQkJZ2VuOF9p bml0aWFsaXplX3B0KHZtLCBwdCk7Cj4gIAo+IC0JCQlvbGQgPSBjbXB4Y2hnKCZwZC0+cGFnZV90 YWJsZVtwZGVdLCB2bS0+c2NyYXRjaF9wdCwgcHQpOwo+IC0JCQlpZiAob2xkID09IHZtLT5zY3Jh dGNoX3B0KSB7Cj4gKwkJCXNwaW5fbG9jaygmcGQtPmxvY2spOwo+ICsJCQlpZiAocGQtPnBhZ2Vf dGFibGVbcGRlXSA9PSB2bS0+c2NyYXRjaF9wdCkgewo+ICAJCQkJZ2VuOF9wcGd0dF9zZXRfcGRl KHZtLCBwZCwgcHQsIHBkZSk7Cj4gKwkJCQlwZC0+cGFnZV90YWJsZVtwZGVdID0gcHQ7Cj4gIAkJ CQlhdG9taWNfaW5jKCZwZC0+dXNlZF9wZGVzKTsKPiAgCQkJfSBlbHNlIHsKPiAtCQkJCWZyZWVf cHQodm0sIHB0KTsKPiAtCQkJCXB0ID0gb2xkOwo+ICsJCQkJYWxsb2MgPSBwdDsKPiArCQkJCXB0 ID0gcGQtPnBhZ2VfdGFibGVbcGRlXTsKPiAgCQkJfQo+IC0KPiAtCQkJc3Bpbl9sb2NrKCZwZC0+ bG9jayk7Cj4gIAkJfQo+ICAKPiAgCQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWRfcHRlcyk7 Cj4gIAl9Cj4gIAlzcGluX3VubG9jaygmcGQtPmxvY2spOwo+IC0KPiAtCXJldHVybiAwOwo+ICsJ Z290byBvdXQ7Cj4gIAo+ICB1bndpbmQ6Cj4gIAlnZW44X3BwZ3R0X2NsZWFyX3BkKHZtLCBwZCwg ZnJvbSwgc3RhcnQgLSBmcm9tKTsKPiAtCXJldHVybiAtRU5PTUVNOwo+ICtvdXQ6Cj4gKwlpZiAo YWxsb2MpCj4gKwkJZnJlZV9wdCh2bSwgYWxsb2MpOwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAK PiAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiAgCQkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCwK PiAgCQkJCXU2NCBzdGFydCwgdTY0IGxlbmd0aCkKPiAgewo+ICsJc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnkgKmFsbG9jID0gTlVMTDsKPiAgCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpw ZDsKPiAgCXU2NCBmcm9tID0gc3RhcnQ7Cj4gIAl1bnNpZ25lZCBpbnQgcGRwZTsKPiAtCWludCBy ZXQ7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgCj4gIAlzcGluX2xvY2soJnBkcC0+bG9jayk7Cj4gIAln ZW44X2Zvcl9lYWNoX3BkcGUocGQsIHBkcCwgc3RhcnQsIGxlbmd0aCwgcGRwZSkgewo+ICAJCWlm IChwZCA9PSB2bS0+c2NyYXRjaF9wZCkgewo+IC0JCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eSAqb2xkOwo+IC0KPiAgCQkJc3Bpbl91bmxvY2soJnBkcC0+bG9jayk7Cj4gIAo+IC0JCQlwZCA9 IGFsbG9jX3BkKHZtKTsKPiAtCQkJaWYgKElTX0VSUihwZCkpCj4gKwkJCXBkID0gZmV0Y2hfYW5k X3plcm8oJmFsbG9jKTsKPiArCQkJaWYgKCFwZCkKPiArCQkJCXBkID0gYWxsb2NfcGQodm0pOwo+ ICsJCQlpZiAoSVNfRVJSKHBkKSkgewo+ICsJCQkJcmV0ID0gUFRSX0VSUihwZCk7Cj4gIAkJCQln b3RvIHVud2luZDsKPiArCQkJfQo+ICAKPiAgCQkJZ2VuOF9pbml0aWFsaXplX3BkKHZtLCBwZCk7 Cj4gIAo+IC0JCQlvbGQgPSBjbXB4Y2hnKCZwZHAtPnBhZ2VfZGlyZWN0b3J5W3BkcGVdLAo+IC0J CQkJICAgICAgdm0tPnNjcmF0Y2hfcGQsIHBkKTsKPiAtCQkJaWYgKG9sZCA9PSB2bS0+c2NyYXRj aF9wZCkgewo+ICsJCQlzcGluX2xvY2soJnBkcC0+bG9jayk7Cj4gKwkJCWlmIChwZHAtPnBhZ2Vf ZGlyZWN0b3J5W3BkcGVdID09IHZtLT5zY3JhdGNoX3BkKSB7Cj4gIAkJCQlnZW44X3BwZ3R0X3Nl dF9wZHBlKHZtLCBwZHAsIHBkLCBwZHBlKTsKPiArCQkJCXBkcC0+cGFnZV9kaXJlY3RvcnlbcGRw ZV0gPSBwZDsKPiAgCQkJCWF0b21pY19pbmMoJnBkcC0+dXNlZF9wZHBlcyk7Cj4gIAkJCX0gZWxz ZSB7Cj4gLQkJCQlmcmVlX3BkKHZtLCBwZCk7Cj4gLQkJCQlwZCA9IG9sZDsKPiArCQkJCWFsbG9j ID0gcGQ7Cj4gKwkJCQlwZCA9IHBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV07Cj4gIAkJCX0KPiAt Cj4gLQkJCXNwaW5fbG9jaygmcGRwLT5sb2NrKTsKPiAgCQl9Cj4gIAkJYXRvbWljX2luYygmcGQt PnVzZWRfcGRlcyk7Cj4gIAkJc3Bpbl91bmxvY2soJnBkcC0+bG9jayk7Cj4gQEAgLTE0NzUsOCAr MTQ4MSw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZHAoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCj4gIAkJYXRvbWljX2RlYygmcGQtPnVzZWRfcGRlcyk7Cj4gIAl9Cj4g IAlzcGluX3VubG9jaygmcGRwLT5sb2NrKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiArCWdvdG8gb3V0 Owo+ICAKPiAgdW53aW5kX3BkOgo+ICAJc3Bpbl9sb2NrKCZwZHAtPmxvY2spOwo+IEBAIC0xNDg5 LDcgKzE0OTQsMTAgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXNwaW5fdW5sb2NrKCZwZHAtPmxvY2spOwo+ICB1bndp bmQ6Cj4gIAlnZW44X3BwZ3R0X2NsZWFyX3BkcCh2bSwgcGRwLCBmcm9tLCBzdGFydCAtIGZyb20p Owo+IC0JcmV0dXJuIC1FTk9NRU07Cj4gK291dDoKPiArCWlmIChhbGxvYykKPiArCQlmcmVlX3Bk KHZtLCBhbGxvYyk7Cj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGdlbjhf cHBndHRfYWxsb2NfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiBAQCAtMTUw NCwzMyArMTUxMiwzNSBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgewo+ICAJc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0 ID0gaTkxNV92bV90b19wcGd0dCh2bSk7Cj4gIAlzdHJ1Y3QgaTkxNV9wbWw0ICpwbWw0ID0gJnBw Z3R0LT5wbWw0Owo+ICsJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqYWxsb2Mg PSBOVUxMOwo+ICAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwOwo+ICAJ dTY0IGZyb20gPSBzdGFydDsKPiArCWludCByZXQgPSAwOwo+ICAJdTMyIHBtbDRlOwo+IC0JaW50 IHJldDsKPiAgCj4gIAlzcGluX2xvY2soJnBtbDQtPmxvY2spOwo+ICAJZ2VuOF9mb3JfZWFjaF9w bWw0ZShwZHAsIHBtbDQsIHN0YXJ0LCBsZW5ndGgsIHBtbDRlKSB7Cj4gIAkJaWYgKHBkcCA9PSB2 bS0+c2NyYXRjaF9wZHApIHsKPiAtCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRl ciAqb2xkOwo+IC0KPiAgCQkJc3Bpbl91bmxvY2soJnBtbDQtPmxvY2spOwo+ICAKPiAtCQkJcGRw ID0gYWxsb2NfcGRwKHZtKTsKPiAtCQkJaWYgKElTX0VSUihwZHApKQo+ICsJCQlwZHAgPSBmZXRj aF9hbmRfemVybygmYWxsb2MpOwo+ICsJCQlpZiAoIXBkcCkKPiArCQkJCXBkcCA9IGFsbG9jX3Bk cCh2bSk7Cj4gKwkJCWlmIChJU19FUlIocGRwKSkgewo+ICsJCQkJcmV0ID0gUFRSX0VSUihwZHAp Owo+ICAJCQkJZ290byB1bndpbmQ7Cj4gKwkJCX0KPiAgCj4gIAkJCWdlbjhfaW5pdGlhbGl6ZV9w ZHAodm0sIHBkcCk7Cj4gIAo+IC0JCQlvbGQgPSBjbXB4Y2hnKCZwbWw0LT5wZHBzW3BtbDRlXSwg dm0tPnNjcmF0Y2hfcGRwLCBwZHApOwo+IC0JCQlpZiAob2xkID09IHZtLT5zY3JhdGNoX3BkcCkg ewo+ICsJCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwo+ICsJCQlpZiAocG1sNC0+cGRwc1twbWw0 ZV0gPT0gdm0tPnNjcmF0Y2hfcGRwKSB7Cj4gIAkJCQlnZW44X3BwZ3R0X3NldF9wbWw0ZShwbWw0 LCBwZHAsIHBtbDRlKTsKPiArCQkJCXBtbDQtPnBkcHNbcG1sNGVdID0gcGRwOwo+ICAJCQl9IGVs c2Ugewo+IC0JCQkJZnJlZV9wZHAodm0sIHBkcCk7Cj4gLQkJCQlwZHAgPSBvbGQ7Cj4gKwkJCQlh bGxvYyA9IHBkcDsKPiArCQkJCXBkcCA9IHBtbDQtPnBkcHNbcG1sNGVdOwo+ICAJCQl9Cj4gLQo+ IC0JCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwo+ICAJCX0KPiAgCQlhdG9taWNfaW5jKCZwZHAt PnVzZWRfcGRwZXMpOwo+ICAJCXNwaW5fdW5sb2NrKCZwbWw0LT5sb2NrKTsKPiBAQCAtMTU0Myw4 ICsxNTUzLDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJYXRvbWljX2RlYygmcGRwLT51c2VkX3BkcGVzKTsKPiAg CX0KPiAgCXNwaW5fdW5sb2NrKCZwbWw0LT5sb2NrKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiArCWdv dG8gb3V0Owo+ICAKPiAgdW53aW5kX3BkcDoKPiAgCXNwaW5fbG9jaygmcG1sNC0+bG9jayk7Cj4g QEAgLTE1NTUsNyArMTU2NCwxMCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2bChz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXNwaW5fdW5sb2NrKCZwbWw0LT5sb2Nr KTsKPiAgdW53aW5kOgo+ICAJZ2VuOF9wcGd0dF9jbGVhcl80bHZsKHZtLCBmcm9tLCBzdGFydCAt IGZyb20pOwo+IC0JcmV0dXJuIC1FTk9NRU07Cj4gK291dDoKPiArCWlmIChhbGxvYykKPiArCQlm cmVlX3BkcCh2bSwgYWxsb2MpOwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgc3RhdGljIGlu dCBnZW44X3ByZWFsbG9jYXRlX3RvcF9sZXZlbF9wZHAoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0 KQo+IEBAIC0xODIwLDExICsxODMyLDEzIEBAIHN0YXRpYyBpbnQgZ2VuNl9hbGxvY192YV9yYW5n ZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJICAgICAgIHU2NCBzdGFydCwg dTY0IGxlbmd0aCkKPiAgewo+ICAJc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0ID0gdG9fZ2VuNl9w cGd0dChpOTE1X3ZtX3RvX3BwZ3R0KHZtKSk7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICph bGxvYyA9IE5VTEw7Cj4gIAlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpwdDsKPiAgCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOwo+ICAJdTY0IGZyb20gPSBzdGFydDsKPiAgCXVuc2lnbmVkIGludCBw ZGU7Cj4gIAlib29sIGZsdXNoID0gZmFsc2U7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgCj4gIAl3YWtl cmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJnZtLT5pOTE1LT5ydW50aW1lX3BtKTsKPiAgCj4g QEAgLTE4MzMsMTkgKzE4NDcsMjAgQEAgc3RhdGljIGludCBnZW42X2FsbG9jX3ZhX3JhbmdlKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCWNvbnN0IHVuc2lnbmVkIGludCBjb3Vu dCA9IGdlbjZfcHRlX2NvdW50KHN0YXJ0LCBsZW5ndGgpOwo+ICAKPiAgCQlpZiAocHQgPT0gdm0t PnNjcmF0Y2hfcHQpIHsKPiAtCQkJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqb2xkOwo+IC0KPiAg CQkJc3Bpbl91bmxvY2soJnBwZ3R0LT5iYXNlLnBkLmxvY2spOwo+ICAKPiAtCQkJcHQgPSBhbGxv Y19wdCh2bSk7Cj4gLQkJCWlmIChJU19FUlIocHQpKQo+ICsJCQlwdCA9IGZldGNoX2FuZF96ZXJv KCZhbGxvYyk7Cj4gKwkJCWlmICghcHQpCj4gKwkJCQlwdCA9IGFsbG9jX3B0KHZtKTsKPiArCQkJ aWYgKElTX0VSUihwdCkpIHsKPiArCQkJCXJldCA9IFBUUl9FUlIocHQpOwo+ICAJCQkJZ290byB1 bndpbmRfb3V0Owo+ICsJCQl9Cj4gIAo+ICAJCQlnZW42X2luaXRpYWxpemVfcHQodm0sIHB0KTsK PiAgCj4gLQkJCW9sZCA9IGNtcHhjaGcoJnBwZ3R0LT5iYXNlLnBkLnBhZ2VfdGFibGVbcGRlXSwK PiAtCQkJCSAgICAgIHZtLT5zY3JhdGNoX3B0LCBwdCk7Cj4gLQkJCWlmIChvbGQgPT0gdm0tPnNj cmF0Y2hfcHQpIHsKPiArCQkJc3Bpbl9sb2NrKCZwcGd0dC0+YmFzZS5wZC5sb2NrKTsKPiArCQkJ aWYgKHBwZ3R0LT5iYXNlLnBkLnBhZ2VfdGFibGVbcGRlXSA9PSB2bS0+c2NyYXRjaF9wdCkgewo+ ICAJCQkJcHBndHQtPmJhc2UucGQucGFnZV90YWJsZVtwZGVdID0gcHQ7Cj4gIAkJCQlpZiAoaTkx NV92bWFfaXNfYm91bmQocHBndHQtPnZtYSwKPiAgCQkJCQkJICAgICAgSTkxNV9WTUFfR0xPQkFM X0JJTkQpKSB7Cj4gQEAgLTE4NTMsMTEgKzE4NjgsOSBAQCBzdGF0aWMgaW50IGdlbjZfYWxsb2Nf dmFfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkJZmx1c2ggPSB0 cnVlOwo+ICAJCQkJfQo+ICAJCQl9IGVsc2Ugewo+IC0JCQkJZnJlZV9wdCh2bSwgcHQpOwo+IC0J CQkJcHQgPSBvbGQ7Cj4gKwkJCQlhbGxvYyA9IHB0Owo+ICsJCQkJcHQgPSBwcGd0dC0+YmFzZS5w ZC5wYWdlX3RhYmxlW3BkZV07Cj4gIAkJCX0KPiAtCj4gLQkJCXNwaW5fbG9jaygmcHBndHQtPmJh c2UucGQubG9jayk7Cj4gIAkJfQo+ICAKPiAgCQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWRf cHRlcyk7Cj4gQEAgLTE4NjksMTQgKzE4ODIsMTUgQEAgc3RhdGljIGludCBnZW42X2FsbG9jX3Zh X3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJCWdlbjZfZ2d0dF9pbnZh bGlkYXRlKHZtLT5pOTE1KTsKPiAgCX0KPiAgCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmdm0t Pmk5MTUtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwo+IC0KPiAtCXJldHVybiAwOwo+ICsJZ290byBv dXQ7Cj4gIAo+ICB1bndpbmRfb3V0Ogo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoJnZtLT5pOTE1 LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiAgCWdlbjZfcHBndHRfY2xlYXJfcmFuZ2Uodm0sIGZy b20sIHN0YXJ0IC0gZnJvbSk7Cj4gLQlyZXR1cm4gLUVOT01FTTsKPiArb3V0Ogo+ICsJaWYgKGFs bG9jKQo+ICsJCWZyZWVfcHQodm0sIGFsbG9jKTsKPiArCWludGVsX3J1bnRpbWVfcG1fcHV0KCZ2 bS0+aTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ ICBzdGF0aWMgaW50IGdlbjZfcHBndHRfaW5pdF9zY3JhdGNoKHN0cnVjdCBnZW42X3BwZ3R0ICpw cGd0dCkKPiAtLSAKPiAyLjIwLjEKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZng=