From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v3] drm/i915/userptr: Disallow wrapping GTT into a userptr Date: Wed, 8 Mar 2017 13:28:31 +0000 Message-ID: References: <20170307205851.32578-3-chris@chris-wilson.co.uk> <20170308103348.16402-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D7B46E8F2 for ; Wed, 8 Mar 2017 13:28:34 +0000 (UTC) In-Reply-To: <20170308103348.16402-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 Ck9uIDA4LzAzLzIwMTcgMTA6MzMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJZiB3ZSBhbGxvdyB0 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 b3VzX29yX292ZXJsYXBzX2dndHQuCj4KPiBSZXBvcnRlZC1ieTogTWljaGHFgiBXaW5pYXJza2kg PG1pY2hhbC53aW5pYXJza2lAaW50ZWwuY29tPgo+IFRlc3RjYXNlOiBpZ3QvZ2VtX3VzZXJwdHJf YmxpdHMvbWFwLWZpeGVkLWludmFsaWRhdGUtZ3VwCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2ls c29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxt aWNoYWwud2luaWFyc2tpQGludGVsLmNvbT4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51 cnN1bGluQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f dXNlcnB0ci5jIHwgODggKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4gIDEgZmls ZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiBpbmRleCBkYzliZjUyODIwNzEuLjJhOThk ZWVkNjIyZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2Vy cHRyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiBA QCAtNDg4LDYgKzQ4OCwzNyBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+Cj4gK3N0YXRp YyBib29sIG5vbmNvbnRpZ3VvdXNfb3Jfb3ZlcmxhcHNfZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+ICsJCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICt7Cj4gKwlj b25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKmdlbV92bV9vcHMgPQo+ICsJCW9iai0+ YmFzZS5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsKPiArCXVuc2lnbmVkIGxvbmcgYWRkciA9IG9i ai0+dXNlcnB0ci5wdHI7Cj4gKwljb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgKyBvYmot PmJhc2Uuc2l6ZTsKPiArCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwo+ICsKPiArCS8qIENo ZWNrIGZvciBhIGNvbnRpZ3VvdXMgc2V0IG9mIHZtYSBjb3ZlcmluZyB0aGUgdXNlcnB0ciwgaWYg YW55Cj4gKwkgKiBhcmUgYWJzZW50LCB0aGV5IHdpbGwgRUZBVUxULiBNb3JlIGltcG9ydGFudGx5 IGlmIGFueSBwb2ludCBiYWNrCj4gKwkgKiB0byBhIGRybV9pOTE1X2dlbV9vYmplY3QgR1RUIG1t YXBpbmcsIHdlIG1heSB0cmlnZ2VyIGEgZGVhZGxvY2sKPiArCSAqIGJldHdlZW4gdGhlIGRlZmVy cmVkIGd1cCBvZiB0aGlzIHVzZXJwdHIgYW5kIHRoZSBvYmplY3QgYmVpbmcKPiArCSAqIHVuYm91 bmQgY2FsbGluZyBpbnZhbGlkYXRlX3JhbmdlIC0+IGNhbmNlbF91c2VycHRyLgo+ICsJICovCj4g Kwlmb3IgKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQp IHsKPiArCQlpZiAodm1hLT52bV9zdGFydCA+IGFkZHIpIC8qIGdhcCAqLwo+ICsJCQlicmVhazsK PiArCj4gKwkJaWYgKHZtYS0+dm1fZW5kID49IGVuZCkKPiArCQkJcmV0dXJuIGZhbHNlOwoKT2th eSByaXNraW5nIG1vcmUgZW1iYXJyYXNzaW5nIG1pc3NlcywgYnV0IGlzIHRoaXMgbm90IGEgZmFs c2UgbmVnYXRpdmU/IApVc2VycHRyIGNyZWF0ZWQgZnJvbSBhbiBlcXVhbCBvciBzbWFsbGVyIHRo YW4gdGhlIEdUVCBtYXBwaW5nIHdvdWxkIG5vdCAKdHJpZ2dlciB0aGlzIHJldHVybiBmYWxzZSBm b3Igc29tZSByZWFzb24/Cgo+ICsKPiArCQlpZiAodm1hLT52bV9vcHMgPT0gZ2VtX3ZtX29wcykg LyogR1RUIG1tYXBwaW5nICovCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlhZGRyID0gdm1hLT52bV9l bmQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4g IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAq X3dvcmspCj4gIHsKPiBAQCAtNTU2LDggKzU4Nyw3IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRf cGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCj4gIH0KPgo+ICBzdGF0aWMg c3RydWN0IHNnX3RhYmxlICoKPiAtX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc19zY2hlZHVs ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJICAgICAgYm9vbCAqYWN0 aXZlKQo+ICtfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3NjaGVkdWxlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCXN0cnVjdCBnZXRfcGFnZXNfd29yayAqd29y azsKPgo+IEBAIC01OTQsNyArNjI0LDYgQEAgX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc19z Y2hlZHVsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJSU5JVF9XT1JLKCZ3 b3JrLT53b3JrLCBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcik7Cj4gIAlzY2hl ZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKPgo+IC0JKmFjdGl2ZSA9IHRydWU7Cj4gIAlyZXR1cm4g RVJSX1BUUigtRUFHQUlOKTsKPiAgfQo+Cj4gQEAgLTYwMiwxMCArNjMxLDExIEBAIHN0YXRpYyBz dHJ1Y3Qgc2dfdGFibGUgKgo+ICBpOTE1X2dlbV91c2VycHRyX2dldF9wYWdlcyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gIAljb25zdCBpbnQgbnVtX3BhZ2VzID0gb2Jq LT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPiArCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gb2Jq LT51c2VycHRyLm1tLT5tbTsKPiAgCXN0cnVjdCBwYWdlICoqcHZlYzsKPiAgCXN0cnVjdCBzZ190 YWJsZSAqcGFnZXM7Cj4gLQlpbnQgcGlubmVkLCByZXQ7Cj4gIAlib29sIGFjdGl2ZTsKPiArCWlu dCBwaW5uZWQ7Cj4KPiAgCS8qIElmIHVzZXJzcGFjZSBzaG91bGQgZW5naW5lZXIgdGhhdCB0aGVz ZSBwYWdlcyBhcmUgcmVwbGFjZWQgaW4KPiAgCSAqIHRoZSB2bWEgYmV0d2VlbiB1cyBiaW5kaW5n IHRoaXMgcGFnZSBpbnRvIHRoZSBHVFQgYW5kIGNvbXBsZXRpb24KPiBAQCAtNjMyLDM3ICs2NjIs NDMgQEAgaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAgCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7Cj4gIAl9Cj4KPiAtCS8qIExl dCB0aGUgbW11LW5vdGlmaWVyIGtub3cgdGhhdCB3ZSBoYXZlIGJlZ3VuIGFuZCBuZWVkIGNhbmNl bGxhdGlvbiAqLwo+IC0JcmV0ID0gX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCB0 cnVlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAtCj4gIAlwdmVj ID0gTlVMTDsKPiAgCXBpbm5lZCA9IDA7Cj4gLQlpZiAob2JqLT51c2VycHRyLm1tLT5tbSA9PSBj dXJyZW50LT5tbSkgewo+IC0JCXB2ZWMgPSBkcm1fbWFsbG9jX2dmcChudW1fcGFnZXMsIHNpemVv ZihzdHJ1Y3QgcGFnZSAqKSwKPiAtCQkJCSAgICAgIEdGUF9URU1QT1JBUlkpOwo+IC0JCWlmIChw dmVjID09IE5VTEwpIHsKPiAtCQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBm YWxzZSk7Cj4gLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IC0JCX0KPgo+IC0JCXBpbm5l ZCA9IF9fZ2V0X3VzZXJfcGFnZXNfZmFzdChvYmotPnVzZXJwdHIucHRyLCBudW1fcGFnZXMsCj4g LQkJCQkJICAgICAgICFvYmotPnVzZXJwdHIucmVhZF9vbmx5LCBwdmVjKTsKPiArCWRvd25fcmVh ZCgmbW0tPm1tYXBfc2VtKTsKPiArCWlmICh1bmxpa2VseShub25jb250aWd1b3VzX29yX292ZXJs YXBzX2dndHQob2JqLCBtbSkpKSB7Cj4gKwkJcGlubmVkID0gLUVGQVVMVDsKPiArCX0gZWxzZSBp ZiAobW0gPT0gY3VycmVudC0+bW0pIHsKPiArCQlwdmVjID0gZHJtX21hbGxvY19nZnAobnVtX3Bh Z2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCj4gKwkJCQkgICAgICBHRlBfVEVNUE9SQVJZIHwK PiArCQkJCSAgICAgIF9fR0ZQX05PUkVUUlkgfAo+ICsJCQkJICAgICAgX19HRlBfTk9XQVJOKTsK PiArCQlpZiAocHZlYykgLyogZGVmZXIgdG8gd29ya2VyIGlmIG1hbGxvYyBmYWlscyAqLwo+ICsJ CQlwaW5uZWQgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3Qob2JqLT51c2VycHRyLnB0ciwKPiArCQkJ CQkJICAgICAgIG51bV9wYWdlcywKPiArCQkJCQkJICAgICAgICFvYmotPnVzZXJwdHIucmVhZF9v bmx5LAo+ICsJCQkJCQkgICAgICAgcHZlYyk7CgpIbSwgbm93IHRoYXQgdGhpcyBpcyB1bmRlciB0 aGUgbW1hcF9zZW0gY291bGQgd2UgYWZmb3JkIGEgbW9yZSB0aG9yb3VnaCAKZmxhdm91ciBvZiBn dXAgYW5kIGxlc3NlbiB0aGUgbGlrZWxpaG9vZCBvZiBuZWVkaW5nIGEgd29ya2VyPwoKPiAgCX0K Pgo+ICAJYWN0aXZlID0gZmFsc2U7Cj4gLQlpZiAocGlubmVkIDwgMCkKPiAtCQlwYWdlcyA9IEVS Ul9QVFIocGlubmVkKSwgcGlubmVkID0gMDsKPiAtCWVsc2UgaWYgKHBpbm5lZCA8IG51bV9wYWdl cykKPiAtCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUob2Jq LCAmYWN0aXZlKTsKPiAtCWVsc2UKPiArCWlmIChwaW5uZWQgPCAwKSB7Cj4gKwkJcGFnZXMgPSBF UlJfUFRSKHBpbm5lZCk7Cj4gKwkJcGlubmVkID0gMDsKPiArCX0gZWxzZSBpZiAocGlubmVkIDwg bnVtX3BhZ2VzKSB7Cj4gKwkJcGFnZXMgPSBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3Nj aGVkdWxlKG9iaik7Cj4gKwkJYWN0aXZlID0gcGFnZXMgPT0gRVJSX1BUUigtRUFHQUlOKTsKPiAr CX0gZWxzZSB7Cj4gIAkJcGFnZXMgPSBfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X3BhZ2VzKG9iaiwg cHZlYywgbnVtX3BhZ2VzKTsKPiAtCWlmIChJU19FUlIocGFnZXMpKSB7Cj4gLQkJX19pOTE1X2dl bV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBhY3RpdmUpOwo+IC0JCXJlbGVhc2VfcGFnZXMocHZl YywgcGlubmVkLCAwKTsKPiArCQlhY3RpdmUgPSAhSVNfRVJSKHBhZ2VzKTsKPiAgCX0KPiArCWlm IChhY3RpdmUpCj4gKwkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCB0cnVlKTsK PiArCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Cj4gKwo+ICsJaWYgKElTX0VSUihwYWdlcykpCj4g KwkJcmVsZWFzZV9wYWdlcyhwdmVjLCBwaW5uZWQsIDApOwo+ICAJZHJtX2ZyZWVfbGFyZ2UocHZl Yyk7Cj4gKwo+ICAJcmV0dXJuIHBhZ2VzOwo+ICB9Cj4KPgoKUmVnYXJkcywKClR2cnRrbwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK