From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v4] drm/i915/userptr: Disallow wrapping GTT into a userptr Date: Thu, 9 Mar 2017 06:55:02 +0000 Message-ID: <4adaeee8-6854-773a-9fc0-5affb852bb87@linux.intel.com> References: <20170307205851.32578-3-chris@chris-wilson.co.uk> <20170308215903.24171-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id A45C96EB47 for ; Thu, 9 Mar 2017 06:55:04 +0000 (UTC) In-Reply-To: <20170308215903.24171-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 List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzAzLzIwMTcgMjE6NTksIENocmlzIFdpbHNvbiB3cm90ZToKPiBJZiB3ZSBhbGxvdyB0 aGUgdXNlciB0byBjb252ZXJ0IGEgR1RUIG1tYXAgYWRkcmVzcyBpbnRvIGEgdXNlcnB0ciwgd2UK PiBtYXkgZW5kIHVwIGluIHJlY3Vyc2lvbiBoZWxsLCB3aGVyZSBjdXJyZW50bHkgd2UgaGl0IGEg bXV0ZXggZGVhZGxvY2sKPiBidXQgb3RoZXIgcG9zc2liaWxpdGllcyBpbmNsdWRlIHVzZS1hZnRl ci1mcmVlIGR1cmluZyB0aGUKPiB1bmJpbmQvY2FuY2VsX3VzZXJwdHIuCj4KPiBbICAxNDMuMjAz OTg5XSBnZW1fdXNlcnB0cl9ibGkgRCAgICAwICAgOTAyICAgIDg5OCAweDAwMDAwMDAwCj4gWyAg MTQzLjIwNDA1NF0gQ2FsbCBUcmFjZToKPiBbICAxNDMuMjA0MTM3XSAgX19zY2hlZHVsZSsweDUx MS8weDExODAKPiBbICAxNDMuMjA0MTk1XSAgPyBwY2lfbW1jZmdfY2hlY2tfcmVzZXJ2ZWQrMHhj MC8weGMwCj4gWyAgMTQzLjIwNDI3NF0gIHNjaGVkdWxlKzB4NTcvMHhlMAo+IFsgIDE0My4yMDQz MjddICBzY2hlZHVsZV90aW1lb3V0KzB4MzgzLzB4NjcwCj4gWyAgMTQzLjIwNDM3NF0gID8gdHJh Y2VfaGFyZGlycXNfb25fY2FsbGVyKzB4MTg3LzB4MjgwCj4gWyAgMTQzLjIwNDQ1N10gID8gdHJh Y2VfaGFyZGlycXNfb25fdGh1bmsrMHgxYS8weDFjCj4gWyAgMTQzLjIwNDUwN10gID8gdXNsZWVw X3JhbmdlKzB4MTEwLzB4MTEwCj4gWyAgMTQzLjIwNDY1N10gID8gaXJxX2V4aXQrMHg4OS8weDEw MAo+IFsgIDE0My4yMDQ3MTBdICA/IHJldGludF9rZXJuZWwrMHgyZC8weDJkCj4gWyAgMTQzLjIw NDc5NF0gID8gdHJhY2VfaGFyZGlycXNfb25fY2FsbGVyKzB4MTg3LzB4MjgwCj4gWyAgMTQzLjIw NDg1N10gID8gX3Jhd19zcGluX3VubG9ja19pcnErMHgzMy8weDYwCj4gWyAgMTQzLjIwNDk0NF0g IHdhaXRfZm9yX2NvbW1vbisweDFmMC8weDJmMAo+IFsgIDE0My4yMDUwMDZdICA/IG91dF9vZl9s aW5lX3dhaXRfb25fYXRvbWljX3QrMHgxNzAvMHgxNzAKPiBbICAxNDMuMjA1MTAzXSAgPyB3YWtl X3VwX3ErMHhhMC8weGEwCj4gWyAgMTQzLjIwNTE1OV0gID8gZmx1c2hfd29ya3F1ZXVlX3ByZXBf cHdxcysweDE1YS8weDJjMAo+IFsgIDE0My4yMDUyMzddICB3YWl0X2Zvcl9jb21wbGV0aW9uKzB4 MWQvMHgyMAo+IFsgIDE0My4yMDUyOTJdICBmbHVzaF93b3JrcXVldWUrMHgyZTkvMHhiYjAKPiBb ICAxNDMuMjA1MzM5XSAgPyBmbHVzaF93b3JrcXVldWUrMHgxNjMvMHhiYjAKPiBbICAxNDMuMjA1 NDE4XSAgPyBfX3NjaGVkdWxlKzB4NTMzLzB4MTE4MAo+IFsgIDE0My4yMDU0OThdICA/IGNoZWNr X2ZsdXNoX2RlcGVuZGVuY3krMHgxYTAvMHgxYTAKPiBbICAxNDMuMjA1NjgxXSAgaTkxNV9nZW1f dXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KzB4MWM3LzB4MjcwIFtpOTE1XQo+IFsg IDE0My4yMDU4NjVdICA/IGk5MTVfZ2VtX3VzZXJwdHJfZG1hYnVmX2V4cG9ydCsweDQwLzB4NDAg W2k5MTVdCj4gWyAgMTQzLjIwNTk1NV0gIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vf c3RhcnQrMHhjNi8weDEyMAo+IFsgIDE0My4yMDYwNDRdICA/IF9fbW11X25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2Vfc3RhcnQrMHg1MS8weDEyMAo+IFsgIDE0My4yMDYxMjNdICB6YXBfcGFnZV9y YW5nZV9zaW5nbGUrMHgxYzcvMHgxZjAKPiBbICAxNDMuMjA2MTcxXSAgPyB1bm1hcF9zaW5nbGVf dm1hKzB4MTYwLzB4MTYwCj4gWyAgMTQzLjIwNjI2MF0gID8gdW5tYXBfbWFwcGluZ19yYW5nZSsw eGE5LzB4MWIwCj4gWyAgMTQzLjIwNjMwOF0gID8gdm1hX2ludGVydmFsX3RyZWVfc3VidHJlZV9z ZWFyY2grMHg3NS8weGQwCj4gWyAgMTQzLjIwNjM5N10gIHVubWFwX21hcHBpbmdfcmFuZ2UrMHgx OGYvMHgxYjAKPiBbICAxNDMuMjA2NDQ0XSAgPyB6YXBfdm1hX3B0ZXMrMHg3MC8weDcwCj4gWyAg MTQzLjIwNjUyNF0gID8gX19wbV9ydW50aW1lX3Jlc3VtZSsweDY3LzB4YTAKPiBbICAxNDMuMjA2 NzIzXSAgaTkxNV9nZW1fcmVsZWFzZV9tbWFwKzB4MWJhLzB4MWMwIFtpOTE1XQo+IFsgIDE0My4y MDY4NDZdICBpOTE1X3ZtYV91bmJpbmQrMHg1YzIvMHg2OTAgW2k5MTVdCj4gWyAgMTQzLjIwNjky NV0gID8gX19sb2NrX2lzX2hlbGQrMHg1Mi8weDEwMAo+IFsgIDE0My4yMDcwNzZdICBpOTE1X2dl bV9vYmplY3Rfc2V0X3RpbGluZysweDFkYi8weDY1MCBbaTkxNV0KPiBbICAxNDMuMjA3MjM2XSAg aTkxNV9nZW1fc2V0X3RpbGluZ19pb2N0bCsweDFkMy8weDNiMCBbaTkxNV0KPiBbICAxNDMuMjA3 Mzc3XSAgPyBpOTE1X2dlbV9zZXRfdGlsaW5nX2lvY3RsKzB4NS8weDNiMCBbaTkxNV0KPiBbICAx NDMuMjA3NDU3XSAgZHJtX2lvY3RsKzB4MzZjLzB4NjcwCj4gWyAgMTQzLjIwNzUzNV0gID8gZGVi dWdfbG9ja2RlcF9yY3VfZW5hYmxlZC5wYXJ0LjArMHgxYS8weDMwCj4gWyAgMTQzLjIwNzczMF0g ID8gaTkxNV9nZW1fb2JqZWN0X3NldF90aWxpbmcrMHg2NTAvMHg2NTAgW2k5MTVdCj4gWyAgMTQz LjIwNzc5M10gID8gZHJtX2dldHVuaXF1ZSsweDEyMC8weDEyMAo+IFsgIDE0My4yMDc4NzVdICA/ IF9faGFuZGxlX21tX2ZhdWx0KzB4OTk2LzB4MTRhMAo+IFsgIDE0My4yMDc5MzldICA/IHZtX2lu c2VydF9wYWdlKzB4MzQwLzB4MzQwCj4gWyAgMTQzLjIwODAyOF0gID8gdXBfd3JpdGUrMHgyOC8w eDUwCj4gWyAgMTQzLjIwODA4Nl0gID8gdm1fbW1hcF9wZ29mZisweDE2MC8weDE5MAo+IFsgIDE0 My4yMDgxNjNdICBkb192ZnNfaW9jdGwrMHgxMmMvMHhhNjAKPiBbICAxNDMuMjA4MjE4XSAgPyBk ZWJ1Z19sb2NrZGVwX3JjdV9lbmFibGVkKzB4MzUvMHg0MAo+IFsgIDE0My4yMDgyNjddICA/IGlv Y3RsX3ByZWFsbG9jYXRlKzB4MTUwLzB4MTUwCj4gWyAgMTQzLjIwODM1M10gID8gX19kb19wYWdl X2ZhdWx0KzB4MzZhLzB4NmUwCj4gWyAgMTQzLjIwODQwMF0gID8gbWFya19oZWxkX2xvY2tzKzB4 MjMvMHhjMAo+IFsgIDE0My4yMDg0NzldICA/IHVwX3JlYWQrMHgxZi8weDQwCj4gWyAgMTQzLjIw ODUyNl0gID8gZW50cnlfU1lTQ0FMTF82NF9mYXN0cGF0aCsweDUvMHhjNgo+IFsgIDE0My4yMDg2 NjldICA/IF9fZmdldF9saWdodCsweGE3LzB4YzAKPiBbICAxNDMuMjA4NzQ3XSAgU3lTX2lvY3Rs KzB4NDEvMHg3MAo+Cj4gVG8gcHJldmVudCB0aGUgcG9zc2liaWxpdHkgb2YgYSBkZWFkbG9jaywg d2UgZGVmZXIgc2NoZWR1bGluZyB0aGUgd29ya2VyCj4gdW50aWwgYWZ0ZXIgd2UgaGF2ZSBwcm92 ZW4gdGhhdCBnaXZlbiB0aGUgY3VycmVudCBtbSwgdGhlIHVzZXJwdHIgcmFuZ2UKPiBkb2VzIG5v dCBvdmVybGFwIGEgR0dUVCBtbWFwaW5nLiBJZiBhbm90aGVyIHRocmVhZCB0cmllcyB0byByZW1h cCB0aGUKPiBHR1RUIG92ZXIgdGhlIHVzZXJwdHIgYmVmb3JlIHRoZSB3b3JrZXIgaXMgc2NoZWR1 bGVkLCBpdCB3aWxsIGJlIHN0b3BwZWQKPiBieSBpdHMgaW52YWxpZGF0ZS1yYW5nZSBmbHVzaGlu ZyB0aGUgY3VycmVudCB3b3JrLCBiZWZvcmUgdGhlIGRlYWRsb2NrCj4gY2FuIG9jY3VyLgo+Cj4g djI6IEltcHJvdmUgZGlzY3Vzc2lvbiBvZiBob3cgd2UgZW5kIHVwIGluIHRoZSBkZWFkbG9jay4K PiB2MzogRG9uJ3QgZm9yZ2V0IHRvIG1hcmsgdGhlIHVzZXJwdHIgYXMgYWN0aXZlIGFmdGVyIGEg c3VjY2Vzc2Z1bAo+IGd1cF9mYXN0LiBSZW5hbWUgb3ZlcmxhcHNfZ2d0dCB0byBub25jb250aWd1 b3VzX29yX292ZXJsYXBzX2dndHQuCj4gdjQ6IEZpeCB0ZXN0IG9yZGVyaW5nIGJldHdlZW4gaW52 YWxpZCBHVFQgbW1hcGluZyBhbmQgcmFuZ2UgY29tcGxldGlvbgo+IChUdnJ0a28pCj4KPiBSZXBv cnRlZC1ieTogTWljaGHFgiBXaW5pYXJza2kgPG1pY2hhbC53aW5pYXJza2lAaW50ZWwuY29tPgo+ IFRlc3RjYXNlOiBpZ3QvZ2VtX3VzZXJwdHJfYmxpdHMvbWFwLWZpeGVkLWludmFsaWRhdGUtZ3Vw Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ Cj4gQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tpQGludGVsLmNvbT4KPiBD YzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiAtLS0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIHwgODggKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCAy NiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMK PiBpbmRleCBkYzliZjUyODIwNzEuLjA3MDQ2ZmE0YzZhOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiBAQCAtNDg4LDYgKzQ4OCwzNyBAQCBfX2k5MTVfZ2Vt X3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJ cmV0dXJuIHJldDsKPiAgfQo+Cj4gK3N0YXRpYyBib29sIG5vbmNvbnRpZ3VvdXNfb3Jfb3Zlcmxh cHNfZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJCSAgIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1 Y3QgKmdlbV92bV9vcHMgPQo+ICsJCW9iai0+YmFzZS5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsK PiArCXVuc2lnbmVkIGxvbmcgYWRkciA9IG9iai0+dXNlcnB0ci5wdHI7Cj4gKwljb25zdCB1bnNp Z25lZCBsb25nIGVuZCA9IGFkZHIgKyBvYmotPmJhc2Uuc2l6ZTsKPiArCXN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hOwo+ICsKPiArCS8qIENoZWNrIGZvciBhIGNvbnRpZ3VvdXMgc2V0IG9mIHZt YSBjb3ZlcmluZyB0aGUgdXNlcnB0ciwgaWYgYW55Cj4gKwkgKiBhcmUgYWJzZW50LCB0aGV5IHdp bGwgRUZBVUxULiBNb3JlIGltcG9ydGFudGx5IGlmIGFueSBwb2ludCBiYWNrCj4gKwkgKiB0byBh IGRybV9pOTE1X2dlbV9vYmplY3QgR1RUIG1tYXBpbmcsIHdlIG1heSB0cmlnZ2VyIGEgZGVhZGxv Y2sKPiArCSAqIGJldHdlZW4gdGhlIGRlZmVycmVkIGd1cCBvZiB0aGlzIHVzZXJwdHIgYW5kIHRo ZSBvYmplY3QgYmVpbmcKPiArCSAqIHVuYm91bmQgY2FsbGluZyBpbnZhbGlkYXRlX3JhbmdlIC0+ IGNhbmNlbF91c2VycHRyLgo+ICsJICovCj4gKwlmb3IgKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRy KTsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKPiArCQlpZiAodm1hLT52bV9zdGFydCA+IGFk ZHIpIC8qIGdhcCAqLwo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYgKHZtYS0+dm1fb3BzID09IGdl bV92bV9vcHMpIC8qIEdUVCBtbWFwcGluZyAqLwo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYgKHZt YS0+dm1fZW5kID49IGVuZCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCQlhZGRyID0gdm1h LT52bV9lbmQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gIHN0YXRpYyB2 b2lkCj4gIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0 cnVjdCAqX3dvcmspCj4gIHsKPiBAQCAtNTU2LDggKzU4Nyw3IEBAIF9faTkxNV9nZW1fdXNlcnB0 cl9nZXRfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCj4gIH0KPgo+ICBz dGF0aWMgc3RydWN0IHNnX3RhYmxlICoKPiAtX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc19z Y2hlZHVsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJICAgICAgYm9v bCAqYWN0aXZlKQo+ICtfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3NjaGVkdWxlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCXN0cnVjdCBnZXRfcGFnZXNfd29y ayAqd29yazsKPgo+IEBAIC01OTQsNyArNjI0LDYgQEAgX19pOTE1X2dlbV91c2VycHRyX2dldF9w YWdlc19zY2hlZHVsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJSU5JVF9X T1JLKCZ3b3JrLT53b3JrLCBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcik7Cj4g IAlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKPgo+IC0JKmFjdGl2ZSA9IHRydWU7Cj4gIAly ZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKPiAgfQo+Cj4gQEAgLTYwMiwxMCArNjMxLDExIEBAIHN0 YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgo+ICBpOTE1X2dlbV91c2VycHRyX2dldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gIAljb25zdCBpbnQgbnVtX3BhZ2Vz ID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPiArCXN0cnVjdCBtbV9zdHJ1Y3QgKm1t ID0gb2JqLT51c2VycHRyLm1tLT5tbTsKPiAgCXN0cnVjdCBwYWdlICoqcHZlYzsKPiAgCXN0cnVj dCBzZ190YWJsZSAqcGFnZXM7Cj4gLQlpbnQgcGlubmVkLCByZXQ7Cj4gIAlib29sIGFjdGl2ZTsK PiArCWludCBwaW5uZWQ7Cj4KPiAgCS8qIElmIHVzZXJzcGFjZSBzaG91bGQgZW5naW5lZXIgdGhh dCB0aGVzZSBwYWdlcyBhcmUgcmVwbGFjZWQgaW4KPiAgCSAqIHRoZSB2bWEgYmV0d2VlbiB1cyBi aW5kaW5nIHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBsZXRpb24KPiBAQCAtNjMyLDM3 ICs2NjIsNDMgQEAgaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKPiAgCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7Cj4gIAl9Cj4KPiAt CS8qIExldCB0aGUgbW11LW5vdGlmaWVyIGtub3cgdGhhdCB3ZSBoYXZlIGJlZ3VuIGFuZCBuZWVk IGNhbmNlbGxhdGlvbiAqLwo+IC0JcmV0ID0gX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUo b2JqLCB0cnVlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAtCj4g IAlwdmVjID0gTlVMTDsKPiAgCXBpbm5lZCA9IDA7Cj4gLQlpZiAob2JqLT51c2VycHRyLm1tLT5t bSA9PSBjdXJyZW50LT5tbSkgewo+IC0JCXB2ZWMgPSBkcm1fbWFsbG9jX2dmcChudW1fcGFnZXMs IHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKPiAtCQkJCSAgICAgIEdGUF9URU1QT1JBUlkpOwo+IC0J CWlmIChwdmVjID09IE5VTEwpIHsKPiAtCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUo b2JqLCBmYWxzZSk7Cj4gLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IC0JCX0KPgo+IC0J CXBpbm5lZCA9IF9fZ2V0X3VzZXJfcGFnZXNfZmFzdChvYmotPnVzZXJwdHIucHRyLCBudW1fcGFn ZXMsCj4gLQkJCQkJICAgICAgICFvYmotPnVzZXJwdHIucmVhZF9vbmx5LCBwdmVjKTsKPiArCWRv d25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKPiArCWlmICh1bmxpa2VseShub25jb250aWd1b3VzX29y X292ZXJsYXBzX2dndHQob2JqLCBtbSkpKSB7Cj4gKwkJcGlubmVkID0gLUVGQVVMVDsKPiArCX0g ZWxzZSBpZiAobW0gPT0gY3VycmVudC0+bW0pIHsKPiArCQlwdmVjID0gZHJtX21hbGxvY19nZnAo bnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCj4gKwkJCQkgICAgICBHRlBfVEVNUE9S QVJZIHwKPiArCQkJCSAgICAgIF9fR0ZQX05PUkVUUlkgfAo+ICsJCQkJICAgICAgX19HRlBfTk9X QVJOKTsKPiArCQlpZiAocHZlYykgLyogZGVmZXIgdG8gd29ya2VyIGlmIG1hbGxvYyBmYWlscyAq Lwo+ICsJCQlwaW5uZWQgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3Qob2JqLT51c2VycHRyLnB0ciwK PiArCQkJCQkJICAgICAgIG51bV9wYWdlcywKPiArCQkJCQkJICAgICAgICFvYmotPnVzZXJwdHIu cmVhZF9vbmx5LAo+ICsJCQkJCQkgICAgICAgcHZlYyk7Cj4gIAl9Cj4KPiAgCWFjdGl2ZSA9IGZh bHNlOwo+IC0JaWYgKHBpbm5lZCA8IDApCj4gLQkJcGFnZXMgPSBFUlJfUFRSKHBpbm5lZCksIHBp bm5lZCA9IDA7Cj4gLQllbHNlIGlmIChwaW5uZWQgPCBudW1fcGFnZXMpCj4gLQkJcGFnZXMgPSBf X2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3NjaGVkdWxlKG9iaiwgJmFjdGl2ZSk7Cj4gLQll bHNlCj4gKwlpZiAocGlubmVkIDwgMCkgewo+ICsJCXBhZ2VzID0gRVJSX1BUUihwaW5uZWQpOwo+ ICsJCXBpbm5lZCA9IDA7Cj4gKwl9IGVsc2UgaWYgKHBpbm5lZCA8IG51bV9wYWdlcykgewo+ICsJ CXBhZ2VzID0gX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc19zY2hlZHVsZShvYmopOwo+ICsJ CWFjdGl2ZSA9IHBhZ2VzID09IEVSUl9QVFIoLUVBR0FJTik7Cj4gKwl9IGVsc2Ugewo+ICAJCXBh Z2VzID0gX19pOTE1X2dlbV91c2VycHRyX3NldF9wYWdlcyhvYmosIHB2ZWMsIG51bV9wYWdlcyk7 Cj4gLQlpZiAoSVNfRVJSKHBhZ2VzKSkgewo+IC0JCV9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0 aXZlKG9iaiwgYWN0aXZlKTsKPiAtCQlyZWxlYXNlX3BhZ2VzKHB2ZWMsIHBpbm5lZCwgMCk7Cj4g KwkJYWN0aXZlID0gIUlTX0VSUihwYWdlcyk7Cj4gIAl9Cj4gKwlpZiAoYWN0aXZlKQo+ICsJCV9f aTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKG9iaiwgdHJ1ZSk7Cj4gKwl1cF9yZWFkKCZtbS0+ bW1hcF9zZW0pOwo+ICsKPiArCWlmIChJU19FUlIocGFnZXMpKQo+ICsJCXJlbGVhc2VfcGFnZXMo cHZlYywgcGlubmVkLCAwKTsKPiAgCWRybV9mcmVlX2xhcmdlKHB2ZWMpOwo+ICsKPiAgCXJldHVy biBwYWdlczsKPiAgfQo+Cj4KClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVy c3VsaW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK