From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 2/3] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 15 Jan 2019 11:25:28 +0000 Message-ID: References: <20190114211729.30352-1-chris@chris-wilson.co.uk> <20190114211729.30352-2-chris@chris-wilson.co.uk> <154754641398.30063.2409175736489997964@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 740EA6E666 for ; Tue, 15 Jan 2019 11:25:29 +0000 (UTC) In-Reply-To: <154754641398.30063.2409175736489997964@skylake-alporthouse-com> Content-Language: en-US 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 Ck9uIDE1LzAxLzIwMTkgMTA6MDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE5LTAxLTE1IDA5OjQ3OjQ1KQo+Pgo+PiBPbiAxNC8wMS8yMDE5IDIxOjE3 LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBTaW5jZSBjb21taXQgOTMwNjVhYzc1M2U0ICgibW0s IG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1tdQo+Pj4gbm90aWZpZXJzIikg d2UgaGF2ZSBiZWVuIGFibGUgdG8gcmVwb3J0IGZhaWx1cmUgZnJvbQo+Pj4gbW11X2ludmFsaWRh dGVfcmFuZ2Vfc3RhcnQgd2hpY2ggYWxsb3dzIHVzIHRvIHVzZSBhIHRyeWxvY2sgb24gdGhlCj4+ PiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vyc2lvbiBhbmQgcmVwb3J0IC1F QlVTWSBpbnN0ZWFkLgo+Pj4gRnVydGhlcm1vcmUsIHRoaXMgYWxsb3dzIHVzIHRvIHB1bGwgdGhl IHdvcmsgaW50byB0aGUgbWFpbiBjYWxsYmFjayBhbmQKPj4+IGF2b2lkIHRoZSBzbGVpZ2h0LW9m LWhhbmQgaW4gdXNpbmcgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9ja2RlcC4KPj4+Cj4+PiBIb3dl dmVyLCBub3QgYWxsIHBhdGhzIHRvIG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IGFyZSBwcmVw YXJlZCB0bwo+Pj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRoZSBy ZWN1cnNpb24sIGRlYWwgd2l0aCBpdCBieQo+Pj4gcHJvcGFnYXRpbmcgdGhlIGZhaWx1cmUgdXB3 YXJkcywgd2hvIGNhbiBkZWNpZGUgdGhlbXNlbHZlcyB0byBoYW5kbGUgaXQKPj4+IG9yIHJlcG9y dCBpdC4KPj4+Cj4+PiB2MjogTWFyayB1cCB0aGUgcmVjdXJzaXZlIGxvY2sgYmVoYXZpb3VyIGFu ZCBjb21tZW50IG9uIHRoZSB2YXJpb3VzIHdlYWsKPj4+IHBvaW50cy4KPj4+Cj4+PiBCdWd6aWxs YTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mzc1Cj4+ PiBSZWZlcmVuY2VzOiA5MzA2NWFjNzUzZTQgKCJtbSwgb29tOiBkaXN0aW5ndWlzaCBibG9ja2Fi bGUgbW9kZSBmb3IgbW11IG5vdGlmaWVycyIpCj4+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oICAgICAgICAgfCAgIDQgKy0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMgICAgICAgICB8ICAzMCArKystCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9vYmplY3QuaCAgfCAgIDcgKwo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fdXNlcnB0ci5jIHwgMjIwICsrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+Pj4gICAg NCBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgMTI2IGRlbGV0aW9ucygtKQo+Pj4K Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gaW5kZXggZmE5OTgyNGY2M2IzLi40YjY3MDM3 YzAzMTggMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBAQCAtMjkzMSw4ICsy OTMxLDggQEAgZW51bSBpOTE1X21tX3N1YmNsYXNzIHsgLyogbG9ja2RlcCBzdWJjbGFzcyBmb3Ig b2JqLT5tbS5sb2NrL3N0cnVjdF9tdXRleCAqLwo+Pj4gICAgICAgIEk5MTVfTU1fU0hSSU5LRVIg LyogY2FsbGVkICJyZWN1cnNpdmVseSIgZnJvbSBkaXJlY3QtcmVjbGFpbS1lc3F1ZSAqLwo+Pj4g ICAgfTsKPj4+ICAgIAo+Pj4gLXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKPj4+ICtpbnQgX19pOTE1X2dl bV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGk5MTVfbW1fc3ViY2xhc3Mgc3ViY2xh c3MpOwo+Pj4gICAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9pbnZhbGlkYXRlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+Pj4gICAgCj4+PiAgICBlbnVtIGk5MTVfbWFwX3R5cGUg ewo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+PiBpbmRleCAwYmZlZDMzMTc4ZTEuLjkwYzE2 N2Y3MTM0NSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+IEBAIC0yMzAzLDgg KzIzMDMsOCBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQo+Pj4gICAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXM7Cj4+PiAg ICAKPj4+ICAgICAgICBwYWdlcyA9IGZldGNoX2FuZF96ZXJvKCZvYmotPm1tLnBhZ2VzKTsKPj4+ IC0gICAgIGlmICghcGFnZXMpCj4+PiAtICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+Pj4gKyAg ICAgaWYgKElTX0VSUl9PUl9OVUxMKHBhZ2VzKSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIHBh Z2VzOwo+Pj4gICAgCj4+PiAgICAgICAgc3Bpbl9sb2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7Cj4+ PiAgICAgICAgbGlzdF9kZWwoJm9iai0+bW0ubGluayk7Cj4+PiBAQCAtMjMyOCwyMiArMjMyOCwy MyBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+Pj4gICAgICAgIHJldHVybiBwYWdlczsKPj4+ICAgIH0KPj4+ICAgIAo+Pj4g LXZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBpOTE1X21t X3N1YmNsYXNzIHN1YmNsYXNzKQo+Pj4gK2ludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcykKPj4+ICAgIHsKPj4+ICAg ICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwo+Pj4gKyAgICAgaW50IHJldDsKPj4+ICAgIAo+ Pj4gICAgICAgIGlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhvYmopKQo+Pj4g LSAgICAgICAgICAgICByZXR1cm47Cj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4+ PiAgICAKPj4+ICAgICAgICBHRU1fQlVHX09OKG9iai0+YmluZF9jb3VudCk7Cj4+PiAtICAgICBp ZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKSkKPj4+IC0gICAgICAgICAgICAgcmV0 dXJuOwo+Pj4gICAgCj4+PiAgICAgICAgLyogTWF5IGJlIGNhbGxlZCBieSBzaHJpbmtlciBmcm9t IHdpdGhpbiBnZXRfcGFnZXMoKSAob24gYW5vdGhlciBibykgKi8KPj4+ICAgICAgICBtdXRleF9s b2NrX25lc3RlZCgmb2JqLT5tbS5sb2NrLCBzdWJjbGFzcyk7Cj4+PiAtICAgICBpZiAodW5saWtl bHkoYXRvbWljX3JlYWQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KSkpCj4+PiArICAgICBpZiAo dW5saWtlbHkoYXRvbWljX3JlYWQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KSkpIHsKPj4+ICsg ICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwo+Pj4gICAgICAgICAgICAgICAgZ290byB1bmxvY2s7 Cj4+PiArICAgICB9Cj4+PiAgICAKPj4+ICAgICAgICAvKgo+Pj4gICAgICAgICAqIC0+cHV0X3Bh Z2VzIG1pZ2h0IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYml0MTcgc3dpenpsZQo+ Pj4gQEAgLTIzNTEsMTEgKzIzNTIsMjQgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+ICAgICAgICAgKiBsaXN0cyBl YXJseS4KPj4+ICAgICAgICAgKi8KPj4+ICAgICAgICBwYWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0 X3Vuc2V0X3BhZ2VzKG9iaik7Cj4+PiArCj4+PiArICAgICAvKgo+Pj4gKyAgICAgICogWFhYIFRl bXBvcmFyeSBoaWppbnggdG8gYXZvaWQgdXBkYXRpbmcgYWxsIGJhY2tlbmRzIHRvIGhhbmRsZQo+ Pj4gKyAgICAgICogTlVMTCBwYWdlcy4gSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSBoYXZlIG1vcmUg YXN5bmNocm9ub3VzCj4+PiArICAgICAgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ugc2hvdWxkIGJl IGJldHRlciBhYmxlIHRvIGhhbmRsZSB0aGUKPj4+ICsgICAgICAqIGNhbmNlbGxhdGlvbiBvZiB0 aGUgYXN5bmMgdGFzayBpbiBhIG1vcmUgdW5pZm9ybSBtYW5uZXIuCj4+PiArICAgICAgKi8KPj4+ ICsgICAgIGlmICghcGFnZXMgJiYgIWk5MTVfZ2VtX29iamVjdF9uZWVkc19hc3luY19jYW5jZWwo b2JqKSkKPj4+ICsgICAgICAgICAgICAgcGFnZXMgPSBFUlJfUFRSKC1FSU5WQUwpOwo+Pj4gKwo+ Pj4gICAgICAgIGlmICghSVNfRVJSKHBhZ2VzKSkKPj4+ICAgICAgICAgICAgICAgIG9iai0+b3Bz LT5wdXRfcGFnZXMob2JqLCBwYWdlcyk7Cj4+PiAgICAKPj4+ICsgICAgIHJldCA9IDA7Cj4+PiAg ICB1bmxvY2s6Cj4+PiAgICAgICAgbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwo+Pj4gKwo+ Pj4gKyAgICAgcmV0dXJuIHJldDsKPj4+ICAgIH0KPj4+ICAgIAo+Pj4gICAgYm9vbCBpOTE1X3Nn X3RyaW0oc3RydWN0IHNnX3RhYmxlICpvcmlnX3N0KQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fb2JqZWN0LmgKPj4+IGluZGV4IGZmM2RhNjQ0NzBkZC4uY2IxYjAxNDRkMjc0IDEwMDY0 NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKPj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCj4+PiBAQCAtNTcsNiAr NTcsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewo+Pj4gICAgI2RlZmluZSBJ OTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFICAgICBCSVQoMCkKPj4+ICAgICNkZWZpbmUg STkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUgICAgICAgQklUKDEpCj4+PiAgICAjZGVmaW5l IEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWSAgICBCSVQoMikKPj4+ICsjZGVmaW5lIEk5MTVfR0VN X09CSkVDVF9BU1lOQ19DQU5DRUwgQklUKDMpCj4+PiAgICAKPj4+ICAgICAgICAvKiBJbnRlcmZh Y2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3RvcmFnZS4KPj4+ICAg ICAgICAgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9mIHRo ZSBhc3NvY2lhdGVkIHNldAo+Pj4gQEAgLTM4Nyw2ICszODgsMTIgQEAgaTkxNV9nZW1fb2JqZWN0 X2lzX3Byb3h5KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4+PiAgICAg ICAgcmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWTsKPj4+ ICAgIH0KPj4+ICAgIAo+Pj4gK3N0YXRpYyBpbmxpbmUgYm9vbAo+Pj4gK2k5MTVfZ2VtX29iamVj dF9uZWVkc19hc3luY19jYW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKPj4+ICt7Cj4+PiArICAgICByZXR1cm4gb2JqLT5vcHMtPmZsYWdzICYgSTkxNV9HRU1fT0JK RUNUX0FTWU5DX0NBTkNFTDsKPj4+ICt9Cj4+PiArCj4+PiAgICBzdGF0aWMgaW5saW5lIGJvb2wK Pj4+ICAgIGk5MTVfZ2VtX29iamVjdF9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKPj4+ICAgIHsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91 c2VycHRyLmMKPj4+IGluZGV4IDFmYjZhN2JiNTA1NC4uOWMyMDA4YTQ4MGUyIDEwMDY0NAo+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPj4+IEBAIC00OSw3NyArNDks ODEgQEAgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyIHsKPj4+ICAgICAgICBzdHJ1Y3QgaGxpc3Rf bm9kZSBub2RlOwo+Pj4gICAgICAgIHN0cnVjdCBtbXVfbm90aWZpZXIgbW47Cj4+PiAgICAgICAg c3RydWN0IHJiX3Jvb3RfY2FjaGVkIG9iamVjdHM7Cj4+PiAtICAgICBzdHJ1Y3Qgd29ya3F1ZXVl X3N0cnVjdCAqd3E7Cj4+PiArICAgICBzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tOwo+Pj4gICAg fTsKPj4+ICAgIAo+Pj4gICAgc3RydWN0IGk5MTVfbW11X29iamVjdCB7Cj4+PiAgICAgICAgc3Ry dWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKPj4+ICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwo+Pj4gICAgICAgIHN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgaXQ7Cj4+ PiAtICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cj4+PiAtICAgICBzdHJ1Y3Qgd29ya19zdHJ1 Y3Qgd29yazsKPj4+IC0gICAgIGJvb2wgYXR0YWNoZWQ7Cj4+PiAgICB9Owo+Pj4gICAgCj4+PiAt c3RhdGljIHZvaWQgY2FuY2VsX3VzZXJwdHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+Pj4g K3N0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4+PiAg ICB7Cj4+PiAtICAgICBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbyA9IGNvbnRhaW5lcl9vZih3 b3JrLCB0eXBlb2YoKm1vKSwgd29yayk7Cj4+PiAtICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqID0gbW8tPm9iajsKPj4+IC0gICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqYWN0aXZl Owo+Pj4gLQo+Pj4gLSAgICAgLyogQ2FuY2VsIGFueSBhY3RpdmUgd29ya2VyIGFuZCBmb3JjZSB1 cyB0byByZS1ldmFsdWF0ZSBndXAgKi8KPj4+IC0gICAgIG11dGV4X2xvY2soJm9iai0+bW0ubG9j ayk7Cj4+PiAtICAgICBhY3RpdmUgPSBmZXRjaF9hbmRfemVybygmb2JqLT51c2VycHRyLndvcmsp Owo+Pj4gLSAgICAgbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwo+Pj4gLSAgICAgaWYgKGFj dGl2ZSkKPj4+IC0gICAgICAgICAgICAgZ290byBvdXQ7Cj4+PiAtCj4+PiAtICAgICBpOTE1X2dl bV9vYmplY3Rfd2FpdChvYmosIEk5MTVfV0FJVF9BTEwsIE1BWF9TQ0hFRFVMRV9USU1FT1VULCBO VUxMKTsKPj4+IC0KPj4+IC0gICAgIG11dGV4X2xvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9t dXRleCk7Cj4+PiAtCj4+PiAtICAgICAvKiBXZSBhcmUgaW5zaWRlIGEga3RocmVhZCBjb250ZXh0 IGFuZCBjYW4ndCBiZSBpbnRlcnJ1cHRlZCAqLwo+Pj4gLSAgICAgaWYgKGk5MTVfZ2VtX29iamVj dF91bmJpbmQob2JqKSA9PSAwKQo+Pj4gLSAgICAgICAgICAgICBfX2k5MTVfZ2VtX29iamVjdF9w dXRfcGFnZXMob2JqLCBJOTE1X01NX05PUk1BTCk7Cj4+PiAtICAgICBXQVJOX09OQ0UoaTkxNV9n ZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopLAo+Pj4gLSAgICAgICAgICAgICAgICJGYWlsZWQgdG8g cmVsZWFzZSBwYWdlczogYmluZF9jb3VudD0lZCwgcGFnZXNfcGluX2NvdW50PSVkLCBwaW5fZ2xv YmFsPSVkXG4iLAo+Pj4gLSAgICAgICAgICAgICAgIG9iai0+YmluZF9jb3VudCwKPj4+IC0gICAg ICAgICAgICAgICBhdG9taWNfcmVhZCgmb2JqLT5tbS5wYWdlc19waW5fY291bnQpLAo+Pj4gLSAg ICAgICAgICAgICAgIG9iai0+cGluX2dsb2JhbCk7Cj4+PiAtCj4+PiAtICAgICBtdXRleF91bmxv Y2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Cj4+PiAtCj4+PiAtb3V0Ogo+Pj4gLSAg ICAgaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+Pj4gKyAgICAgR0VNX0JVR19PTighUkJfRU1Q VFlfTk9ERSgmbW8tPml0LnJiKSk7Cj4+PiArICAgICBpbnRlcnZhbF90cmVlX2luc2VydCgmbW8t Pml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPj4+ICAgIH0KPj4+ICAgIAo+Pj4gLXN0YXRpYyB2b2lk IGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8pCj4+PiArc3RhdGljIHZvaWQg ZGVsX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbykKPj4+ICAgIHsKPj4+IC0gICAg IGlmIChtby0+YXR0YWNoZWQpCj4+PiArICAgICBpZiAoUkJfRU1QVFlfTk9ERSgmbW8tPml0LnJi KSkKPj4+ICAgICAgICAgICAgICAgIHJldHVybjsKPj4+ICAgIAo+Pj4gLSAgICAgaW50ZXJ2YWxf dHJlZV9pbnNlcnQoJm1vLT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Cj4+PiAtICAgICBtby0+YXR0 YWNoZWQgPSB0cnVlOwo+Pj4gKyAgICAgaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1vLT5pdCwgJm1v LT5tbi0+b2JqZWN0cyk7Cj4+PiArICAgICBSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwo+Pj4g ICAgfQo+Pj4gICAgCj4+PiAtc3RhdGljIHZvaWQgZGVsX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVf b2JqZWN0ICptbykKPj4+ICtzdGF0aWMgdm9pZAo+Pj4gK19faTkxNV9nZW1fdXNlcnB0cl9zZXRf YWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgdmFsdWUpCj4+PiAg ICB7Cj4+PiAtICAgICBpZiAoIW1vLT5hdHRhY2hlZCkKPj4+ICsgICAgIHN0cnVjdCBpOTE1X21t dV9vYmplY3QgKm1vID0gb2JqLT51c2VycHRyLm1tdV9vYmplY3Q7Cj4+PiArCj4+PiArICAgICAv Kgo+Pj4gKyAgICAgICogRHVyaW5nIG1tX2ludmFsaWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5j ZWwgYW55IHVzZXJwdHIgdGhhdAo+Pj4gKyAgICAgICogb3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5n IGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJlcyB0aGUKPj4+ICsgICAgICAqIHN0cnVjdF9t dXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQo+Pj4gKyAg ICAgICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1c2VycHRyIGFkZHJlc3Mg c3BhY2Ugd2l0aAo+Pj4gKyAgICAgICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxlIHdpdGggYSBN QVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKPj4+ICsgICAgICAqIHRvIGludmFsaWRhdGUg dGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4+PiArICAg ICAgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRv IHByZXZlbnQgdGhhdAo+Pj4gKyAgICAgICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9t bXVfbm90aWZpZXIgc3BpbmxvY2sgdG8gaW5kaWNhdGUKPj4+ICsgICAgICAqIHdoZXRoZXIgdGhp cyBvYmplY3QgaXMgdmFsaWQuCj4+PiArICAgICAgKi8KPj4+ICsgICAgIGlmICghbW8pCj4+PiAg ICAgICAgICAgICAgICByZXR1cm47Cj4+PiAgICAKPj4+IC0gICAgIGludGVydmFsX3RyZWVfcmVt b3ZlKCZtby0+aXQsICZtby0+bW4tPm9iamVjdHMpOwo+Pj4gLSAgICAgbW8tPmF0dGFjaGVkID0g ZmFsc2U7Cj4+PiArICAgICBzcGluX2xvY2soJm1vLT5tbi0+bG9jayk7Cj4+PiArICAgICBpZiAo dmFsdWUpCj4+PiArICAgICAgICAgICAgIGFkZF9vYmplY3QobW8pOwo+Pj4gKyAgICAgZWxzZQo+ Pj4gKyAgICAgICAgICAgICBkZWxfb2JqZWN0KG1vKTsKPj4+ICsgICAgIHNwaW5fdW5sb2NrKCZt by0+bW4tPmxvY2spOwo+Pj4gICAgfQo+Pj4gICAgCj4+PiAtc3RhdGljIGludCBpOTE1X2dlbV91 c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21u LAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFu Z2UgKnJhbmdlKQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggKl9faTkxNV9tdXRleF9sb2NrX3Jl Y3Vyc2l2ZShzdHJ1Y3QgbXV0ZXggKm0pCj4+PiArewo+Pj4gKyAgICAgc3dpdGNoIChtdXRleF90 cnlsb2NrX3JlY3Vyc2l2ZShtKSkgewo+Pj4gKyAgICAgZGVmYXVsdDoKPj4+ICsgICAgIGNhc2Ug TVVURVhfVFJZTE9DS19GQUlMRUQ6Cj4+PiArICAgICAgICAgICAgIG11dGV4X2xvY2tfbmVzdGVk KG0sIEk5MTVfTU1fU0hSSU5LRVIpOwo+Pgo+PiBIYXZlIHlvdSBmb3VuZCBpbiB0aGUgbWVhbnRp bWUgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZD8gQWx0aG91Z2ggaXQKPj4gaXMgc2luY2Ug d2UgdXNlIHRoaXMgc3ViY2xhc3MgdG8gcHV0IHRoZSBwYWdlcy4uCj4gCj4gWWVzLCBpZiB3ZSBk byBub3QgYXR0ZW1wdCB0byB0cnkgYSBmdWxsIG11dGV4X2xvY2soKSBoZXJlLCB3ZSBmYWlsCj4g dGhlIGludmFsaWRhdGlvbiBzdWJ0ZXN0cyBvZiBnZW1fdXNlcnB0cl9ibGl0cygpLiBCdXQgeW91 IG1lYW4gdGhlCj4gc3ViY2xhc3M/IEdpdmVuIGVub3VnaCB0aW1lIEknbGwgZmluZCB0aGUgcGF0 aCB0byBicmVhayBpdCwgYXQgdGhlCj4gcHJlc2VudCB0aW1lIEkgZmVlbCBtb3JlIGNvbWZvcnRh YmxlIGNhcmdvLWN1bHRpbmcgdGhlIHJ1bGVzIGRldmlzZWQgZm9yCj4gdGhlIHJlY3Vyc2l2ZSBs b2NraW5nIGZyb20gaW5zaWRlIGRpcmVjdC1yZWNsYWltIHRvIGFub3RoZXIKPiBkaXJlY3QtcmVj bGFpbSBwYXRoLgo+IAo+IFRoZSBlbmQtZ29hbCBoZXJlIGlzIHRoYXQgdXBvbiBicmVha2luZyB1 cCBzdHJ1Y3RfbXV0ZXggd2UgcmVwbGFjZSBpdAo+IHZhcmlvdXMgbG9ja3MgdGhhdCB3ZSBhcmUg bm90IGFsbG93ZWQgdG8gYWxsb2NhdGUgdW5kZXIuIE5vIG1vcmUgZGlyZWN0Cj4gcmVjbGFpbSBy ZWN1cnNpb24uCj4gCj4+IFNob3VsZCBpOTE1X2dlbV9zaHJpbmtlcl90YWluc3RfbXV0ZXggdGFp bnQgb2JqLT5tbS5sb2NrIHdpdGggdGhlCj4+IHNocmlua2VyIHN1YmNsYXNzPwo+IAo+IFRoZSBz aHJpbmtlciB1c2VzIHRoZSBvYmotPm1tLmxvY2sgSTkxNV9NTV9TSFJJTktFUiBzdWJjbGFzcywg c28gaXQncyBhCj4gbGl0dGxlIG1vcmUgZmFmZiB0byB0YWludC4KCkkgYW0gbm90IDEwMCUgc3Vy ZSBvZiBhbGwgcGF0aHMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGUgc3RydWN0IAptdXRl eCBuZXN0ZWQgYW5ub3RhdGlvbiBidXQgSSBndWVzcyBpdCBpcyB3b3J0aCBhIHNob3QuLgoKUmV2 aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CgpSZWdh cmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=