From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 29/38] drm/i915: Expose user control over the ppGTT associated with a context Date: Wed, 23 Jan 2019 12:15:15 +0000 Message-ID: <154824571539.693.10232498231848989206@skylake-alporthouse-com> References: <20190118140109.25261-1-chris@chris-wilson.co.uk> <20190118140109.25261-30-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id A3ED389F43 for ; Wed, 23 Jan 2019 12:15:20 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org UXVvdGluZyBUdnJ0a28gVXJzdWxpbiAoMjAxOS0wMS0yMyAxMjowMDo0OSkKPiAKPiBPbiAxOC8w MS8yMDE5IDE0OjAxLCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gPiBBbGxvdyB0aGUgdXNlciB0byBz aGFyZSBwcEdUVCBiZXR3ZWVuIGNvbnRleHRzIG9uIHRoZSBzYW1lIGZkLiBUaGlzCj4gPiBnaXZl cyB0aGUgdXNlciB0aGUgYWJpbGl0eSB0byByZWxheCB0aGVpciBjb250ZXh0IGlzb2xhdGlvbiB0 byBzaGFyZSB2bQo+ID4gYmV0d2VlbiB0aGVpciBvd24gY29udGV4dHMsIGJ1dCBkb2VzIG5vdCBh bGxvdyB0aGVtIHRvIGltcG9ydCBhIHZtIGZyb20KPiA+IGFub3RoZXIgZmQuIFRoZSB1c2UgY2Fz ZSBmb3Igc2hhcmluZyBhIHZtIGlzIGZvciB0aGUgcHJvcG9zZWQgdmlydHVhbAo+ID4gZW5naW5l IHdvcmsgd2hlcmUgYSBjb250ZXh0IG1heSBiZSBjcmVhdGVkIGV4cGxpY2l0bHkgdG8gc2V0dXAg YSBsb2FkCj4gPiBiYWxhbmNpbmcgZW5naW5lLCBidXQgYWx3YXlzIGJlIHJ1biBpbiBjb25qdW5j dGlvbiB3aXRoIGEgc2Vjb25kIGNvbnRleHQKPiA+IGZvciByY3MvY29tcHV0ZSBldGMuIEJ5IGdp dmluZyBjb250cm9sIHRvIHRoZSB1c2VyIG9uIGhvdyB0aGV5IHNldHVwIHRoZQo+ID4gdm0gYWxs b3dzIGZvciB0aGVtIHRvIGhhdmUgYSBzaW5nbGUgdm0gYmV0d2VlbiBhbGwga2VybmVsIGNvbnRl eHRzIGJlaW5nCj4gPiB1c2VkIHRvIGVtdWxhdGUgYSBzaW5nbGUgY2xpZW50IGNvbnRleHQsIHNp bWlsYXJseSB0byBob3cgd2UgdXNlIGEKPiA+IHNpbmdsZSB2bSBhY3Jvc3MgYWxsIGVuZ2luZXMg d2l0aGluIGEgc2luZ2xlIGtlcm5lbCBjb250ZXh0IHRvZGF5LiBJdAo+ID4gYWxzbyBhbGxvd3Mg Zm9yIGZ1dHVyZSBzcGVjaWZpY2F0aW9uIGEgc2VwYXJhdGUgdm0gYmV0d2VlbiBlbmdpbmVzCj4g PiBpbnNpZGUgYSBzaW5nbGUga2VybmVsIGNvbnRleHQgc2hvdWxkIHRoYXQgYmUgZGVzaXJlZC4K PiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+Cj4gPiBDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50 ZWwuY29tPgo+ID4gLS0tCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRl eHQuYyAgICAgICB8IDExOCArKysrKysrKy0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmMgICAgICAgICAgIHwgIDE3ICstCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oICAgICAgICAgICB8ICAxNCArLQo+ID4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAgfCAgIDEgLQo+ID4gICAuLi4vZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgfCAyNDcgKysrKysrKysrKysrKystLS0t Cj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8ICAg MSAtCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYyB8 ICAgOCArLQo+ID4gICBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAgICAg ICAgfCAgIDEgKwo+ID4gICA4IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNlcnRpb25zKCspLCA2OCBk ZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQu Ywo+ID4gaW5kZXggN2M5MDk4MTcwNGJmLi5mNzA3MjQxZGJjNzggMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+ID4gQEAgLTEwOSw2ICsxMDksOCBAQCBz dGF0aWMgdm9pZCBsdXRfY2xvc2Uoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiA+ICAg ICAgICAgICAgICAgc3RydWN0IGk5MTVfdm1hICp2bWEgPSByY3VfZGVyZWZlcmVuY2VfcmF3KCpz bG90KTsKPiA+ICAgCj4gPiAgICAgICAgICAgICAgIHJhZGl4X3RyZWVfaXRlcl9kZWxldGUoJmN0 eC0+aGFuZGxlc192bWEsICZpdGVyLCBzbG90KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgdm1h LT5vcGVuX2NvdW50LS07Cj4gCj4gSSBkaWQgbm90IGZpZ3VyZSBvdXQgd2hhdCBpcyB0aGlzLiBB KSB3aHkgb3BlbiBjb2RlZCB2bWEgbWFuYWdlbWVudCAKPiB3aXRob3V0IGFueSBjb21tZW50cywg YW5kIGIpIHJlc3Qgb2YgdGhlIHBhdGNoIGRvZXNuJ3Qgc2VlbSB0byB0b3VjaCAKPiB0aGlzIHRy ZWUuCgpBcyB0aGUgdm0gbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGNvbnRleHRzLCB3 ZSBtYXkgdGhlbiBvcGVuIHRoZQpzYW1lIHZtYSBhbmQgcmVjb3JkIGl0IGluIHRoZSBkaWZmZXJl bnQgY29udGV4dCBsdXQuIEVhY2ggaW5zdGFuY2UgbmVlZHMKdG8gYmUgYWNjb3VudGVkIGZvci4K Cj4gPiAgICAgICAgICAgICAgIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2 ZSh2bWEtPm9iaik7Cj4gPiAgICAgICB9Cj4gPiAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPiA+ IEBAIC0yOTEsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgY29udGV4dF9jbG9zZShzdHJ1Y3QgaTkx NV9nZW1fY29udGV4dCAqY3R4KQo+ID4gICAgICAgICovCj4gPiAgICAgICBsdXRfY2xvc2UoY3R4 KTsKPiA+ICAgICAgIGlmIChjdHgtPnBwZ3R0KQo+ID4gLSAgICAgICAgICAgICBpOTE1X3BwZ3R0 X2Nsb3NlKCZjdHgtPnBwZ3R0LT52bSk7Cj4gPiArICAgICAgICAgICAgIGk5MTVfcHBndHRfY2xv c2UoY3R4LT5wcGd0dCk7Cj4gCj4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgb2th eSBmb3IgY29udGV4dCB0byBjbG9zZSB0aGUgcHBndHQgCj4gaW5zdGVhZCBvZiBqdXN0IGRyb3Bw aW5nIHJlZmVyZW5jZXMgdG8gaXQuIExpa2UgdHdvIGNvbnRleHRzIHNoYXJpbmcgCj4gcHBndHQg YW5kIG9uZSBjbG9zZXMgaXQsIHRoZSBvdGhlciBvbmUgc2hvdWxkIGNvbnRpbnVlIHRvIHdvcmsg ZmluZSwgbm8/IAo+IE9yIGV2ZW4gYSB0aGlyZCBjb250ZXh0IGlzIGNyZWF0ZWQgc2hhcmluZyB0 aGUgc2FtZSBwcGd0dC4KCnBwZ3R0LT5vcGVuX2NvdW50PyBXZSBkb24ndCBjbG9zZSB1bnRpbCBl dmVyeW9uZSBhZ3JlZXMuCgo+ID4gICAgICAgY3R4LT5maWxlX3ByaXYgPSBFUlJfUFRSKC1FQkFE Rik7Cj4gPiAgICAgICBpOTE1X2dlbV9jb250ZXh0X3B1dChjdHgpOwo+ID4gQEAgLTQwMSw2ICs0 MDMsMjMgQEAgc3RhdGljIHZvaWQgX19kZXN0cm95X2h3X2NvbnRleHQoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCwKPiA+ICAgICAgIGNvbnRleHRfY2xvc2UoY3R4KTsKPiA+ICAgfQo+ID4g ICAKPiA+ICtzdGF0aWMgdm9pZCBfX3NldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dCkKPiA+ICt7Cj4gPiArICAgICBpZiAocHBndHQgPT0gY3R4LT5wcGd0dCkKPiA+ICsgICAgICAg ICAgICAgcmV0dXJuOwo+ID4gKwo+ID4gKyAgICAgaWYgKGN0eC0+cHBndHQpIHsKPiA+ICsgICAg ICAgICAgICAgaTkxNV9wcGd0dF9jbG9zZShjdHgtPnBwZ3R0KTsKPiAKPiBGZWVscyBpbmNvcnJl Y3QgdG8gY2xvc2UgaXQgaWYgaXQgY291bGQgYmUgc2hhcmVkIGFuZCBpbiB1c2UgZWxzZXdoZXJl Lgo+IAo+ID4gKyAgICAgICAgICAgICBpOTE1X3BwZ3R0X3B1dChjdHgtPnBwZ3R0KTsKPiA+ICsg ICAgIH0KPiA+ICsKPiA+ICsgICAgIGk5MTVfcHBndHRfb3BlbihwcGd0dCk7Cj4gCj4gRG8gd2Ug bmVlZCBzb21lIHByb3RlY3Rpb24gYWdhaW5zdCB0cnlpbmcgdG8gcmUtb3BlbiBhIGNsb3NlZCBw cGd0dCBoZXJlPwoKV2UgQlVHX09OIGFzIGEgY2xvc2VkIHBwZ3R0IHNob3VsZG4ndCBoYXZlIGJl ZW4gYWNjZXNzaWJsZSB2aWEgdGhlIGZpbGVfcHJpdi4KCj4gPiArICAgICBjdHgtPnBwZ3R0ID0g aTkxNV9wcGd0dF9nZXQocHBndHQpOwo+ID4gKwo+ID4gKyAgICAgY3R4LT5kZXNjX3RlbXBsYXRl ID0gZGVmYXVsdF9kZXNjX3RlbXBsYXRlKGN0eC0+aTkxNSwgcHBndHQpOwo+ID4gK30KPiA+ICsK PiA+ICAgc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoKPiA+ICAgaTkxNV9nZW1fY3Jl YXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdikK PiA+IEBAIC00MjcsOCArNDQ2LDggQEAgaTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBFUlJfQ0FTVChwcGd0dCk7Cj4gPiAgICAgICAgICAgICAgIH0KPiA+ICAgCj4gPiAtICAgICAg ICAgICAgIGN0eC0+cHBndHQgPSBwcGd0dDsKPiA+IC0gICAgICAgICAgICAgY3R4LT5kZXNjX3Rl bXBsYXRlID0gZGVmYXVsdF9kZXNjX3RlbXBsYXRlKGRldl9wcml2LCBwcGd0dCk7Cj4gPiArICAg ICAgICAgICAgIF9fc2V0X3BwZ3R0KGN0eCwgcHBndHQpOwo+ID4gKyAgICAgICAgICAgICBpOTE1 X3BwZ3R0X3B1dChwcGd0dCk7Cj4gPiAgICAgICB9Cj4gPiAgIAo+ID4gICAgICAgdHJhY2VfaTkx NV9jb250ZXh0X2NyZWF0ZShjdHgpOwo+ID4gQEAgLTc4NCw2ICs4MDMsODcgQEAgaW50IGk5MTVf Z2VtX3N3aXRjaF90b19rZXJuZWxfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiA+ICAgICAgIHJldHVybiAwOwo+ID4gICB9Cj4gPiAgIAo+ID4gK3N0YXRpYyBpbnQgZ2V0 X3BwZ3R0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHU2NCAqb3V0KQo+IAo+IHUzMiAq b3V0ID8KCk9oLCBsZWZ0IG92ZXIgZnJvbSBwbGFubmluZyBmb3Igc2V0dGluZyBkaWZmZXJlbnQg dm0gb24gZWFjaCBlbmdpbmUuIEluCnRoZSBlbmQsIEkgdGhvdWdodCBhIHNlcGFyYXRlIHNldHRl ci9nZXR0ZXIgd2FzIHNlbnNpYmxlIHJhdGhlciB0aGFuCnRyeWluZyB0byBvdmVybG9hZCBhIHNp bXBsZSBpbnRlcmZhY2Ugd2l0aCBhIG1vcmUgY29tcGxleCBvbmUuCgo+ID4gK3sKPiA+ICsgICAg IHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGN0eC0+ZmlsZV9wcml2 Owo+ID4gKyAgICAgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+ID4gKyAgICAgaW50IHJl dDsKPiA+ICsKPiA+ICsgICAgIC8qIFhYWCByY3UgYWNxdWlyZT8gKi8KPiA+ICsgICAgIHBwZ3R0 ID0gY3R4LT5wcGd0dDsKPiA+ICsgICAgIGlmICghcHBndHQpCj4gPiArICAgICAgICAgICAgIHJl dHVybiAtRU5PREVWOwo+ID4gKwo+ID4gKyAgICAgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ID4gKyAgICAgaWYgKHJldCkKPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgIHJldCA9IHBwZ3R0LT51c2VyX2hhbmRs ZTsKPiA+ICsgICAgIGlmICghcmV0KSB7Cj4gPiArICAgICAgICAgICAgIHJldCA9IGlkcl9hbGxv YygmZmlsZV9wcml2LT52bV9pZHIsIHBwZ3R0LCAwLCAwLCBHRlBfS0VSTkVMKTsKPiAKPiBHRU1f V0FSTl9PTihyZXQgPT0gMCkganVzdCBpbiBjYXNlPwo+IAo+ID4gKyAgICAgICAgICAgICBpZiAo cmV0ID4gMCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBwZ3R0LT51c2VyX2hhbmRsZSA9 IHJldDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpOTE1X3BwZ3R0X2dldChwcGd0dCk7Cj4g PiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIG11dGV4X3VubG9j aygmZmlsZV9wcml2LT52bV9sb2NrKTsKPiA+ICsgICAgIGlmIChyZXQgPCAwKQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgKm91dCA9IHJldDsKPiA+ICsgICAg IHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldF9wcGd0dChzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4LCB1MzIgaWQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGRy bV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gY3R4LT5maWxlX3ByaXY7Cj4gPiArICAg ICBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQ7Cj4gPiArICAgICBpbnQgZXJyOwo+ID4gKwo+ ID4gKyAgICAgZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaWxlX3ByaXYtPnZtX2xv Y2spOwo+ID4gKyAgICAgaWYgKGVycikKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiA+ ICsKPiA+ICsgICAgIHBwZ3R0ID0gaWRyX2ZpbmQoJmZpbGVfcHJpdi0+dm1faWRyLCBpZCk7Cj4g PiArICAgICBpZiAocHBndHQpCj4gPiArICAgICAgICAgICAgIGk5MTVfcHBndHRfZ2V0KHBwZ3R0 KTsKPiA+ICsgICAgIG11dGV4X3VubG9jaygmZmlsZV9wcml2LT52bV9sb2NrKTsKPiA+ICsgICAg IGlmICghcHBndHQpCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+ID4gKwo+ID4g KyAgICAgZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdHgtPmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ID4gKyAgICAgaWYgKGVycikKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7 Cj4gPiArCj4gPiArICAgICAvKgo+ID4gKyAgICAgICogV2UgbmVlZCB0byBmbHVzaCBhbnkgcmVx dWVzdHMgdXNpbmcgdGhlIGN1cnJlbnQgcHBndHQgYmVmb3JlCj4gPiArICAgICAgKiB3ZSByZWxl YXNlIGl0IGFzIHRoZSByZXF1ZXN0cyBkbyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0aGVtc2VsdmVz LAo+ID4gKyAgICAgICogb25seSBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGNvbnRleHQuIEJ5IHN3 aXRjaGluZyB0byB0aGUga2VybmVsCj4gPiArICAgICAgKiBjb250ZXh0LCB3ZSBlbnN1cmUgdGhh dCB0aGUgVExCcyBhcmUgcmVsb2FkZWQgYmVmb3JlIHVzaW5nIHRoZQo+ID4gKyAgICAgICogc2Ft ZSBjb250ZXh0IGFnYWluIC0tIGFuIGV4dHJhIGxheWVyIG9mIHBhcmFub2lhIG92ZXIgd2FpdF9m b3JfaWRsZS4KPiA+ICsgICAgICAqLwo+ID4gKyAgICAgZXJyID0gaTkxNV9nZW1fc3dpdGNoX3Rv X2tlcm5lbF9jb250ZXh0KGN0eC0+aTkxNSk7Cj4gPiArICAgICBpZiAoZXJyKQo+ID4gKyAgICAg ICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4gPiArCj4gPiArICAgICBlcnIgPSBpOTE1X2dlbV93 YWl0X2Zvcl9pZGxlKGN0eC0+aTkxNSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSTkxNV9XQUlUX0xPQ0tFRCB8Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4gCj4gVGhpcyBpcyBhIGJpdCB3 b3JyeWluZy4gRXZlcnkgbmV3IGNsaWVudCBzZXR0aW5nIHVwIHRoZWlyIGNvbnRleHRzIAo+IGNh dXNlcyBhIGdsb2JhbCBzeW5jIHBvaW50LiBTb3VuZHMgYmFkIGZvciBzY2FsYWJpbGl0eS4gSXQg bWF5IGJlIHRoYXQgCj4gaW4gcHJhY3RpY2UgdGhlIGV2ZW50IG1pZ2h0IGJlIGhhcHBlbmluZyBv bmx5IGV2ZXJ5IGZldyBzZWNvbmRzLCByYXRoZXIgCj4gdGhhbiBtdWx0aXBsZSB0aW1lcyBwZXIg c2Vjb25kLCBidXQgSSBhbSBvbmx5IGd1ZXNzaW5nLiBIb3cgZGlmZmljdWx0IHRvIAo+IG1ha2Ug cmVxdWVzdHMgb3duIHBwZ3R0IGRpcmVjdGx5PwoKT3IganVzdCBhZGQgYSByZXRpcmUgY2FsbGJh Y2sgZnJvbSB0aGUga2VybmVsLWNvbnRleHQuIFRoZSBtb3JlIHdlIGxvb2ssCnRoZSBtb3JlIHVz ZSBjYXNlcyB3ZSBmaW5kLgoKPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICppOTE1X3BwZ3R0X2dldChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gPiAgIHsKPiA+ IC0gICAgIGlmIChwcGd0dCkKPiA+IC0gICAgICAgICAgICAga3JlZl9nZXQoJnBwZ3R0LT5yZWYp Owo+ID4gKyAgICAga3JlZl9nZXQoJnBwZ3R0LT5yZWYpOwo+ID4gKyAgICAgcmV0dXJuIHBwZ3R0 Owo+IAo+IFVucmVsYXRlZCBodW5rPwoKQW0gSSBub3QgYWxsb3dlZCB0byB0aWR5IHVwIGFzIEkg Z28gYWxvbmchIEkgdXNlIGl0IGluIHRoaXMgcGF0Y2ggOikKCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPiA+IGluZGV4IDZhMjQx NzQ1ZTc4YS4uMjg2NGNmYjgyMzI1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+ID4gQEAgLTI0Myw2ICsyNDMsMTIg QEAgc3RhdGljIGludCBsaXZlX25vcF9zd2l0Y2godm9pZCAqYXJnKQo+ID4gICAgICAgcmV0dXJu IGVycjsKPiA+ICAgfQo+ID4gICAKPiA+ICsjZGVmaW5lIEdFTjhfSElHSF9BRERSRVNTX0JJVCA0 Nwo+ID4gK3N0YXRpYyBpbmxpbmUgdTY0IGdlbjhfY2Fub25pY2FsX2FkZHIodTY0IGFkZHJlc3Mp Cj4gPiArewo+ID4gKyAgICAgcmV0dXJuIHNpZ25fZXh0ZW5kNjQoYWRkcmVzcywgR0VOOF9ISUdI X0FERFJFU1NfQklUKTsKPiA+ICt9Cj4gCj4gV2UgY291bGQgbW92ZSB0aGUgY29weSBmcm9tIGk5 MTVfZ2VtX2V4ZWNidWZmZXIuYyB0byBpOTE1X2dlbV91dGlscy5oIG9yIAo+IHNvbWV3aGVyZS4K Ckl0J3MgcHJvYmFibHkgbm90IGV2ZW4gd29ydGggaXQsIHRoaXMgaXMgYSBkZWJ1ZyBodW5rIGZv ciBhbm90aGVyCnByb2JsZW0sIG5vdyBpdCdzIG93biBzZWxmdGVzdCB0byBleHBvc2UgdGhlIGlz c3VlLgoKPiBPa2F5IEkgd2VudCBhIGJpdCBiYWNrIGFuZCBmb3J0aCB3aXRoIHRoaXMgcGF0Y2gg c2luY2UgSSBkaWRuJ3QgcmVhbGx5IAo+IHVuZGVyc3RhbmQgdGhlIGN0eCBhbmQgcHBnZ3QgbGlm ZXRpbWUvb3Blbi1jbG9zZSBydWxlcy4KCkFuZCBJIGRpZG4ndCBldmVuIG5vdGljZSBJIHdhcyBy ZXBseWluZyB0byBhIHJlcGx5LgotQ2hyaXMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==