From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH] drm/amdgpu: Optimize recursion in amdgpu_vm_update_level Date: Wed, 12 Jul 2017 13:52:01 +0800 Message-ID: <5965B901.6000102@amd.com> References: <1499831769-3764-1-git-send-email-Felix.Kuehling@amd.com> <5965A5F1.80902@amd.com> <4e7dee07-81d0-381d-579b-52e7e5969112@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <4e7dee07-81d0-381d-579b-52e7e5969112-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Felix Kuehling , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org CgpPbiAyMDE35bm0MDfmnIgxMuaXpSAxMjo1NiwgRmVsaXggS3VlaGxpbmcgd3JvdGU6Cj4gSGkg RGF2aWQsCj4KPiBSZXNwb25zZXMgaW5saW5lIC4uLgpZZWFoLCBJIHNlZSB5b3VyIG1lYW4sIHlv dSBtYWlubHkgd2FudCB0byBzYXZlIHNvbWUgY3B1IG92ZXJoZWFkLiBJZiAKb3RoZXJzIGhhdmUg bm8gb2JqZWN0LCBmZWVsIGZyZWUgYWRkIG15IFJCIHRoZW4uCgpSZWdhcmRzLApEYXZpZCBaaG91 Cj4KPiBPbiAxNy0wNy0xMiAxMjozMCBBTSwgemhvdWNtMSB3cm90ZToKPj4gbmljZSBpbXByb3Zl bWVudCwganVzdCBzb21lIG5pdHBpY2sgaW5saW5lLCBvdGhlcndpc2UgdGhlIHBhdGNoIGlzCj4+ IFJldmlld2VkLWJ5OiBDaHVubWluZyBaaG91IDxkYXZpZDEuemhvdUBhbWQuY29tPi4KPj4KPj4g T24gMjAxN+W5tDA35pyIMTLml6UgMTE6NTYsIEZlbGl4IEt1ZWhsaW5nIHdyb3RlOgo+Pj4gV2hl biBsb3RzIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgaXMgdXNlZCwgdGhlcmUgY2FuIGJlIHRo b3VzYW5kcwo+Pj4gb2YgcGFnZSB0YWJsZSBCT3MuIGFtZGdwdV92bV91cGRhdGVfbGV2ZWwgaXRl cmF0ZXMgb3ZlciBhbGwgb2YgdGhlbQo+Pj4gcmVjdXJzaXZlbHkuIEluIG1hbnkgY2FzZXMgb25s eSBhIGZldyBvciBub25lIGF0IGFsbCBuZWVkIHRvIGJlCj4+PiB1cGRhdGVkLiBNaW5pbWl6ZSB1 bm5lY2Vzc2FyeSBjb2RlIGV4ZWN1dGlvbiBhbmQgbWVtb3J5IHVzYWdlIGluCj4+PiB0aG9zZSBj YXNlcy4KPj4+Cj4+PiBUaGlzIHNwZWVkcyB1cCBtZW1vcnkgbWFwcGluZyBpbiBhIHN5bnRoZXRp YyBLRkQgbWVtb3J5IG1hcHBpbmcKPj4+IGJlbmNobWFyayBieSByb3VnaGx5IGEgZmFjdG9yIHR3 by4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBGZWxpeCBLdWVobGluZyA8RmVsaXguS3VlaGxpbmdA YW1kLmNvbT4KPj4+IC0tLQo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3ZtLmMgfCAxMDkKPj4+ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+Pj4gICAg MSBmaWxlIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQo+Pj4KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+Pj4g Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+Pj4gaW5kZXggZmY1ZGUz YS4uMjNiODk5YiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV92bS5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0u Ywo+Pj4gQEAgLTEwMjUsNyArMTAyNSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9s ZXZlbChzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiAgICB7Cj4+PiAgICAgICAg c3RydWN0IGFtZGdwdV9ibyAqc2hhZG93Owo+Pj4gICAgICAgIHN0cnVjdCBhbWRncHVfcmluZyAq cmluZyA9IE5VTEw7Cj4+PiAtICAgIHVpbnQ2NF90IHBkX2FkZHIsIHNoYWRvd19hZGRyID0gMDsK Pj4+ICsgICAgdWludDY0X3QgcGRfYWRkciA9IDAsIHNoYWRvd19hZGRyID0gMDsKPj4+ICAgICAg ICB1aW50MzJfdCBpbmNyID0gYW1kZ3B1X3ZtX2JvX3NpemUoYWRldiwgbGV2ZWwgKyAxKTsKPj4+ ICAgICAgICB1aW50NjRfdCBsYXN0X3BkZSA9IH4wLCBsYXN0X3B0ID0gfjAsIGxhc3Rfc2hhZG93 ID0gfjA7Cj4+PiAgICAgICAgdW5zaWduZWQgY291bnQgPSAwLCBwdF9pZHgsIG5kdyA9IDA7Cj4+ PiBAQCAtMTA0NCw0OCArMTA0NCwxOSBAQCBzdGF0aWMgaW50IGFtZGdwdV92bV91cGRhdGVfbGV2 ZWwoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gICAgICAgICAgV0FSTl9PTih2 bS0+dXNlX2NwdV9mb3JfdXBkYXRlICYmIHNoYWRvdyk7Cj4+PiAgICAgICAgaWYgKHZtLT51c2Vf Y3B1X2Zvcl91cGRhdGUgJiYgIXNoYWRvdykgewo+Pj4gLSAgICAgICAgciA9IGFtZGdwdV9ib19r bWFwKHBhcmVudC0+Ym8sICh2b2lkICoqKSZwZF9hZGRyKTsKPj4+IC0gICAgICAgIGlmIChyKQo+ Pj4gLSAgICAgICAgICAgIHJldHVybiByOwo+Pj4gLSAgICAgICAgciA9IGFtZGdwdV92bV9ib193 YWl0KGFkZXYsIHBhcmVudC0+Ym8pOwo+Pj4gLSAgICAgICAgaWYgKHVubGlrZWx5KHIpKSB7Cj4+ PiAtICAgICAgICAgICAgYW1kZ3B1X2JvX2t1bm1hcChwYXJlbnQtPmJvKTsKPj4+IC0gICAgICAg ICAgICByZXR1cm4gcjsKPj4+IC0gICAgICAgIH0KPj4+ICsgICAgICAgIC8qIERlZmVyIGttYXBw aW5nIHVudGlsIGl0J3MgYWN0dWFsbHkgbmVlZGVkLiBTb21lCj4+PiArICAgICAgICAgKiBQREJz IG1heSBuZWVkIG5vIHVwZGF0ZSBhdCBhbGwKPj4+ICsgICAgICAgICAqLwo+Pj4gICAgICAgICAg ICBwYXJhbXMuZnVuYyA9IGFtZGdwdV92bV9jcHVfc2V0X3B0ZXM7Cj4+PiArICAgICAgICBwYXJh bXMuaWIgPSAodm9pZCAqKShsb25nKS0xOwo+Pj4gICAgICAgIH0gZWxzZSB7Cj4+PiAtICAgICAg ICBpZiAoc2hhZG93KSB7Cj4+PiAtICAgICAgICAgICAgciA9IGFtZGdwdV90dG1fYmluZCgmc2hh ZG93LT50Ym8sICZzaGFkb3ctPnRiby5tZW0pOwo+Pj4gLSAgICAgICAgICAgIGlmIChyKQo+Pj4g LSAgICAgICAgICAgICAgICByZXR1cm4gcjsKPj4+IC0gICAgICAgIH0KPj4+IC0gICAgICAgIHJp bmcgPSBjb250YWluZXJfb2Yodm0tPmVudGl0eS5zY2hlZCwgc3RydWN0IGFtZGdwdV9yaW5nLAo+ Pj4gLSAgICAgICAgICAgICAgICAgICAgc2NoZWQpOwo+Pj4gLQo+Pj4gLSAgICAgICAgLyogcGFk ZGluZywgZXRjLiAqLwo+Pj4gLSAgICAgICAgbmR3ID0gNjQ7Cj4+PiAtCj4+PiAtICAgICAgICAv KiBhc3N1bWUgdGhlIHdvcnN0IGNhc2UgKi8KPj4+IC0gICAgICAgIG5kdyArPSBwYXJlbnQtPmxh c3RfZW50cnlfdXNlZCAqIDY7Cj4+PiAtCj4+PiAtICAgICAgICBwZF9hZGRyID0gYW1kZ3B1X2Jv X2dwdV9vZmZzZXQocGFyZW50LT5ibyk7Cj4+PiAtCj4+PiAtICAgICAgICBpZiAoc2hhZG93KSB7 Cj4+PiAtICAgICAgICAgICAgc2hhZG93X2FkZHIgPSBhbWRncHVfYm9fZ3B1X29mZnNldChzaGFk b3cpOwo+Pj4gLSAgICAgICAgICAgIG5kdyAqPSAyOwo+Pj4gLSAgICAgICAgfSBlbHNlIHsKPj4+ IC0gICAgICAgICAgICBzaGFkb3dfYWRkciA9IDA7Cj4+PiAtICAgICAgICB9Cj4+PiAtCj4+PiAt ICAgICAgICByID0gYW1kZ3B1X2pvYl9hbGxvY193aXRoX2liKGFkZXYsIG5kdyAqIDQsICZqb2Ip Owo+Pj4gLSAgICAgICAgaWYgKHIpCj4+PiAtICAgICAgICAgICAgcmV0dXJuIHI7Cj4+PiAtCj4+ PiAtICAgICAgICBwYXJhbXMuaWIgPSAmam9iLT5pYnNbMF07Cj4+PiArICAgICAgICAvKiBEZWZl ciBJQiBhbGxvY2F0aW9uIHVudGlsIGl0J3MgYWN0dWFsbHkKPj4+ICsgICAgICAgICAqIG5lZWRl ZC4gU29tZSBQREJzIG1heSBuZWVkIG5vIHVwZGF0ZSBhdCBhbGwKPj4+ICsgICAgICAgICAqLwo+ Pj4gKyAgICAgICAgcGFyYW1zLmliID0gTlVMTDsKPj4+ICAgICAgICAgICAgcGFyYW1zLmZ1bmMg PSBhbWRncHVfdm1fZG9fc2V0X3B0ZXM7Cj4+PiAgICAgICAgfQo+Pj4gICAgLQo+Pj4gICAgICAg IC8qIHdhbGsgb3ZlciB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgdXBkYXRlIHRoZSBkaXJlY3Rvcnkg Ki8KPj4+ICAgICAgICBmb3IgKHB0X2lkeCA9IDA7IHB0X2lkeCA8PSBwYXJlbnQtPmxhc3RfZW50 cnlfdXNlZDsgKytwdF9pZHgpIHsKPj4+ICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9ibyAqYm8g PSBwYXJlbnQtPmVudHJpZXNbcHRfaWR4XS5ibzsKPj4+IEBAIC0xMDk0LDIyICsxMDY1LDUzIEBA IHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9sZXZlbChzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4+PiAgICAgICAgICAgIGlmIChibyA9PSBOVUxMKQo+Pj4gICAgICAgICAgICAg ICAgY29udGludWU7Cj4+PiAgICAtICAgICAgICBpZiAoYm8tPnNoYWRvdykgewo+Pj4gLSAgICAg ICAgICAgIHN0cnVjdCBhbWRncHVfYm8gKnB0X3NoYWRvdyA9IGJvLT5zaGFkb3c7Cj4+PiAtCj4+ PiAtICAgICAgICAgICAgciA9IGFtZGdwdV90dG1fYmluZCgmcHRfc2hhZG93LT50Ym8sCj4+PiAt ICAgICAgICAgICAgICAgICAgICAgICAgJnB0X3NoYWRvdy0+dGJvLm1lbSk7Cj4+PiAtICAgICAg ICAgICAgaWYgKHIpCj4+PiAtICAgICAgICAgICAgICAgIHJldHVybiByOwo+Pj4gLSAgICAgICAg fQo+Pj4gLQo+Pj4gLSAgICAgICAgcHQgPSBhbWRncHVfYm9fZ3B1X29mZnNldChibyk7Cj4+PiAt ICAgICAgICBwdCA9IGFtZGdwdV9nYXJ0X2dldF92bV9wZGUoYWRldiwgcHQpOwo+Pj4gKyAgICAg ICAgcHQgPSBhbWRncHVfZ2FydF9nZXRfdm1fcGRlKGFkZXYsIGJvLT50Ym8ub2Zmc2V0KTsKPj4g R2V0dGluZyBvZmZzZXQgZnJvbSBhbWRncHVfYm9fZ3B1X29mZnNldChibykgIGlzIGJldHRlciBJ IHRoaW5rLAo+PiBhbHRob3VnaCB3ZSBjYW4gYXNzdW1lIHB0IGJvIGlzIGEga25vd24gZG9tYWlu Lgo+IGFtZGdwdV9ib19ncHVfb2Zmc2V0IGRvZXMgYSBidW5jaCBvZiBzYW5pdHkgY2hlY2tzIChX QVJOX09OX09OQ0UpLiBUaGV5Cj4gYXJlIHJlZHVuZGFudCBoZXJlLCBiZWNhdXNlIHdlIGNhbiBh c3N1bWUgdGhhdCB0aGUgcGFnZSB0YWJsZSBCT3MgaGF2ZQo+IGJlZW4gcHJvcGVybHkgY3JlYXRl ZCBhbmQgdmFsaWRhdGVkIGJ5IGtlcm5lbCBjb2RlIHdlIGNhbiB0cnVzdCBtb3JlCj4gdGhhbiB1 c2VyIG1vZGUuIEkgc2F3IGFtZGdwdV9ib19ncHVfb2Zmc2V0IG5lYXIgdGhlIHRvcCB3aXRoICJw ZXJmIHRvcCIKPiB3aGVuIHJ1bm5pbmcgbXkgbWVtb3J5IG1hcHBpbmcgYmVuY2htYXJrLCBzbyBJ IHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvCj4gZWxpbWluYXRlIHRoZSBmdW5jdGlvbiBjYWxsIGFu ZCByZWR1bmRhbnQgc2FuaXR5IGNoZWNrcyBpbiB0aGlzIGNvZGUgcGF0aC4KPgo+Pj4gICAgICAg ICAgICBpZiAocGFyZW50LT5lbnRyaWVzW3B0X2lkeF0uYWRkciA9PSBwdCkKPj4+ICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+Pj4gICAgICAgICAgICAgIHBhcmVudC0+ZW50cmllc1twdF9pZHhd LmFkZHIgPSBwdDsKPj4+ICAgICsgICAgICAgIGlmICghcGFyYW1zLmliKSB7Cj4+PiArICAgICAg ICAgICAgaWYgKHNoYWRvdykgewo+Pj4gKyAgICAgICAgICAgICAgICByID0gYW1kZ3B1X3R0bV9i aW5kKCZzaGFkb3ctPnRibywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYWRv dy0+dGJvLm1lbSk7Cj4+PiArICAgICAgICAgICAgICAgIGlmIChyKQo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHI7Cj4+PiArICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAg ICAgIHJpbmcgPSBjb250YWluZXJfb2Yodm0tPmVudGl0eS5zY2hlZCwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X3JpbmcsIHNjaGVkKTsKPj4+ICsKPj4+ICsgICAg ICAgICAgICAvKiBwYWRkaW5nLCBldGMuICovCj4+PiArICAgICAgICAgICAgbmR3ID0gNjQ7Cj4+ PiArCj4+PiArICAgICAgICAgICAgLyogYXNzdW1lIHRoZSB3b3JzdCBjYXNlICovCj4+PiArICAg ICAgICAgICAgbmR3ICs9IChwYXJlbnQtPmxhc3RfZW50cnlfdXNlZCAtIHB0X2lkeCkgKiA2Owo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgIHBkX2FkZHIgPSBwYXJlbnQtPmJvLT50Ym8ub2Zmc2V0Owo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgIGlmIChzaGFkb3cpIHsKPj4+ICsgICAgICAgICAgICAgICAg c2hhZG93X2FkZHIgPSBzaGFkb3ctPnRiby5vZmZzZXQ7Cj4+PiArICAgICAgICAgICAgICAgIG5k dyAqPSAyOwo+Pj4gKyAgICAgICAgICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICAgICAgICAgIHNo YWRvd19hZGRyID0gMDsKPj4+ICsgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgciA9IGFt ZGdwdV9qb2JfYWxsb2Nfd2l0aF9pYihhZGV2LCBuZHcgKiA0LCAmam9iKTsKPj4+ICsgICAgICAg ICAgICBpZiAocikKPj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+PiArCj4+PiArICAg ICAgICAgICAgcGFyYW1zLmliID0gJmpvYi0+aWJzWzBdOwo+Pj4gKyAgICAgICAgfSBlbHNlIGlm ICghcGRfYWRkcikgewo+Pj4gKyAgICAgICAgICAgIHIgPSBhbWRncHVfYm9fa21hcChwYXJlbnQt PmJvLCAodm9pZCAqKikmcGRfYWRkcik7Cj4+PiArICAgICAgICAgICAgaWYgKHIpCj4+PiArICAg ICAgICAgICAgICAgIHJldHVybiByOwo+Pj4gKyAgICAgICAgICAgIHIgPSBhbWRncHVfdm1fYm9f d2FpdChhZGV2LCBwYXJlbnQtPmJvKTsKPj4+ICsgICAgICAgICAgICBpZiAodW5saWtlbHkocikp IHsKPj4+ICsgICAgICAgICAgICAgICAgYW1kZ3B1X2JvX2t1bm1hcChwYXJlbnQtPmJvKTsKPj4+ ICsgICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+PiArICAgICAgICAgICAgfQo+Pj4gKyAgICAg ICAgfQo+Pj4gKwo+Pj4gICAgICAgICAgICBwZGUgPSBwZF9hZGRyICsgcHRfaWR4ICogODsKPj4+ ICAgICAgICAgICAgaWYgKCgobGFzdF9wZGUgKyA4ICogY291bnQpICE9IHBkZSkgfHwKPj4+ICAg ICAgICAgICAgICAgICgobGFzdF9wdCArIGluY3IgKiBjb3VudCkgIT0gcHQpIHx8Cj4+PiBAQCAt MTE0OCw5ICsxMTUwLDkgQEAgc3RhdGljIGludCBhbWRncHVfdm1fdXBkYXRlX2xldmVsKHN0cnVj dAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ICAgICAgICAgIGlmIChwYXJhbXMuZnVuYyA9 PSBhbWRncHVfdm1fY3B1X3NldF9wdGVzKQo+Pj4gICAgICAgICAgICBhbWRncHVfYm9fa3VubWFw KHBhcmVudC0+Ym8pOwo+Pj4gLSAgICBlbHNlIGlmIChwYXJhbXMuaWItPmxlbmd0aF9kdyA9PSAw KSB7Cj4+PiArICAgIGVsc2UgaWYgKHBhcmFtcy5pYiAmJiBwYXJhbXMuaWItPmxlbmd0aF9kdyA9 PSAwKSB7Cj4+PiAgICAgICAgICAgIGFtZGdwdV9qb2JfZnJlZShqb2IpOwo+Pj4gLSAgICB9IGVs c2Ugewo+Pj4gKyAgICB9IGVsc2UgaWYgKHBhcmFtcy5pYikgewo+Pj4gICAgICAgICAgICBhbWRn cHVfcmluZ19wYWRfaWIocmluZywgcGFyYW1zLmliKTsKPj4+ICAgICAgICAgICAgYW1kZ3B1X3N5 bmNfcmVzdihhZGV2LCAmam9iLT5zeW5jLCBwYXJlbnQtPmJvLT50Ym8ucmVzdiwKPj4+ICAgICAg ICAgICAgICAgICAgICAgQU1ER1BVX0ZFTkNFX09XTkVSX1ZNKTsKPj4+IEBAIC0xMTY2LDggKzEx NjgsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV92bV91cGRhdGVfbGV2ZWwoc3RydWN0Cj4+PiBhbWRn cHVfZGV2aWNlICphZGV2LAo+Pj4gICAgICAgICAgICAgIGFtZGdwdV9ib19mZW5jZShwYXJlbnQt PmJvLCBmZW5jZSwgdHJ1ZSk7Cj4+PiAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQodm0tPmxhc3Rf ZGlyX3VwZGF0ZSk7Cj4+PiAtICAgICAgICB2bS0+bGFzdF9kaXJfdXBkYXRlID0gZG1hX2ZlbmNl X2dldChmZW5jZSk7Cj4+PiAtICAgICAgICBkbWFfZmVuY2VfcHV0KGZlbmNlKTsKPj4+ICsgICAg ICAgIHZtLT5sYXN0X2Rpcl91cGRhdGUgPSBmZW5jZTsKPj4gSGVyZSBJIHByZWZlciB0byBrZWVw IHByZXZpb3VzIGNvZGUsIHRoZSBsb2dpYyBpcyBtb3JlIGNsZWFyLjopCj4gQWdhaW4sIHRoaXMg aXMgYSBjb2RlIHBhdGggdGhhdCBjYW4gYmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseS4gU28gSSdk Cj4gbGlrZSB0byBlbGltaW5hdGUgcmVkdW5kYW50IGF0b21pYyBvcGVyYXRpb25zIGhlcmUuCj4K Pj4+ICAgICAgICB9Cj4+PiAgICAgICAgLyoKPj4+ICAgICAgICAgKiBSZWN1cnNlIGludG8gdGhl IHN1YmRpcmVjdG9yaWVzLiBUaGlzIHJlY3Vyc2lvbiBpcyBoYXJtbGVzcwo+Pj4gYmVjYXVzZQo+ Pj4gQEAgLTExNzYsNyArMTE3Nyw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9sZXZl bChzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiAgICAgICAgZm9yIChwdF9pZHgg PSAwOyBwdF9pZHggPD0gcGFyZW50LT5sYXN0X2VudHJ5X3VzZWQ7ICsrcHRfaWR4KSB7Cj4+PiAg ICAgICAgICAgIHN0cnVjdCBhbWRncHVfdm1fcHQgKmVudHJ5ID0gJnBhcmVudC0+ZW50cmllc1tw dF9pZHhdOwo+Pj4gICAgLSAgICAgICAgaWYgKCFlbnRyeS0+Ym8pCj4+PiArICAgICAgICBpZiAo IWVudHJ5LT5ibyB8fCAhZW50cnktPmVudHJpZXMpCj4+IEluIGZhY3QsICFlbnRyeS0+ZW50cmll cyB3b3VsZCBiZSBjaGVja2VkIGF0IHRoZSBiZWdpbiBvZiB0aGlzCj4+IGZ1bmN0aW9uIGluIG5l eHQgbG9vcCwgYnV0IGVpdGhlciB3YXkgaXMgb2sgdG8gbWUgaGVyZS4KPiBEb2luZyB0aGUgY2hl Y2sgaGVyZSBlbGltaW5hdGVzIHRoZSBsb3dlc3QgbGV2ZWwgb2YgcmVjdXJzaXZlIGZ1bmN0aW9u Cj4gY2FsbHMuIFRoYXQncyB3aGVyZSBpdCBjb3VudHMgdGhlIG1vc3QuIEVhY2ggc3VjY2Vzc2l2 ZSBsZXZlbCBvZiB0aGUKPiByZWN1cnNpb24gcnVucyA1MTIgdGltZXMgYXMgb2Z0ZW4gYXMgdGhl IGxldmVsIGFib3ZlIGl0LiBTbyBjb21wbGV0ZWx5Cj4gZWxpbWluYXRpbmcgdGhlIGZ1bmN0aW9u IGNhbGwgb3ZlcmhlYWQgb2YgdGhlIGxvd2VzdCBsZXZlbCBpcyBhIGdvb2QgdGhpbmcuCj4KPiBS ZWdhcmRzLAo+ICAgIEZlbGl4Cj4KPj4gUmVnYXJkcywKPj4gRGF2aWQgWmhvdQo+Pj4gICAgICAg ICAgICAgICAgY29udGludWU7Cj4+PiAgICAgICAgICAgICAgciA9IGFtZGdwdV92bV91cGRhdGVf bGV2ZWwoYWRldiwgdm0sIGVudHJ5LCBsZXZlbCArIDEpOwo+PiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+PiBh bWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1k LWdmeAo=