From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH 6/6] drm/amdgpu: add VRAM manager v2 Date: Tue, 27 Sep 2016 17:57:52 +0800 Message-ID: <57EA42A0.8020901@amd.com> References: <1474969797-1882-1-git-send-email-deathsimple@vodafone.de> <1474969797-1882-7-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1474969797-1882-7-git-send-email-deathsimple-ANTagKRnAhcb1SvskN2V4Q@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: =?UTF-8?B?Q2hyaXN0aWFuIEvDtm5pZw==?= , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org CgpPbiAyMDE25bm0MDnmnIgyN+aXpSAxNzo0OSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiBG cm9tOiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4KPiBTcGxp dCBWUkFNIGFsbG9jYXRpb25zIGludG8gNE1CIGJsb2Nrcy4KPgo+IHYyOiBmaXggdHlwbyBpbiBj b21tZW50LCBzb21lIHN1Z2dlc3RlZCBjbGVhbnVwcwo+IHYzOiBkb2N1bWVudCBob3cgdG8gZGlz YWJsZSB0aGUgZmVhdHVyZSwgZml4IHJlYmFzZSBpc3N1ZQo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hy aXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+IC0tLQo+ICAgZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUgICAgICAgICAgfCAgIDIgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oICAgICAgICAgIHwgICAxICsKPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyAgIHwgICA3ICsKPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYyAgICAgIHwgICA0ICsKPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyAgICAgIHwgICAyICstCj4gICBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmggICAgICB8ICAgMSArCj4gICBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyB8IDIyMiArKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgIDcgZmlsZXMgY2hhbmdlZCwgMjM3IGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZyYW1fbWdyLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2Vm aWxlCj4gaW5kZXggNzg2YjI4YS4uMjg3NGJmZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L01ha2VmaWxlCj4gQEAgLTMwLDcgKzMwLDcgQEAgYW1kZ3B1LXkgKz0gYW1kZ3B1X2RldmljZS5v IGFtZGdwdV9rbXMubyBcCj4gICAJYXRvbWJpb3NfZW5jb2RlcnMubyBhbWRncHVfc2EubyBhdG9t Ymlvc19pMmMubyBcCj4gICAJYW1kZ3B1X3ByaW1lLm8gYW1kZ3B1X3ZtLm8gYW1kZ3B1X2liLm8g YW1kZ3B1X3BsbC5vIFwKPiAgIAlhbWRncHVfdWNvZGUubyBhbWRncHVfYm9fbGlzdC5vIGFtZGdw dV9jdHgubyBhbWRncHVfc3luYy5vIFwKPiAtCWFtZGdwdV9ndHRfbWdyLm8KPiArCWFtZGdwdV9n dHRfbWdyLm8gYW1kZ3B1X3ZyYW1fbWdyLm8KPiAgIAo+ICAgIyBhZGQgYXNpYyBzcGVjaWZpYyBi bG9jawo+ICAgYW1kZ3B1LSQoQ09ORklHX0RSTV9BTURHUFVfQ0lLKSs9IGNpay5vIGNpa19paC5v IGt2X3NtYy5vIGt2X2RwbS5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaAo+IGlu ZGV4IDczYzlhMmQuLjJhOTU4MjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUu aAo+IEBAIC05OSw2ICs5OSw3IEBAIGV4dGVybiBjaGFyICphbWRncHVfZGlzYWJsZV9jdTsKPiAg IGV4dGVybiBpbnQgYW1kZ3B1X3NjbGtfZGVlcF9zbGVlcF9lbjsKPiAgIGV4dGVybiBjaGFyICph bWRncHVfdmlydHVhbF9kaXNwbGF5Owo+ICAgZXh0ZXJuIHVuc2lnbmVkIGFtZGdwdV9wcF9mZWF0 dXJlX21hc2s7Cj4gK2V4dGVybiBpbnQgYW1kZ3B1X3ZyYW1fcGFnZV9zcGxpdDsKPiAgIAo+ICAg I2RlZmluZSBBTURHUFVfV0FJVF9JRExFX1RJTUVPVVRfSU5fTVMJICAgICAgICAzMDAwCj4gICAj ZGVmaW5lIEFNREdQVV9NQVhfVVNFQ19USU1FT1VUCQkJMTAwMDAwCS8qIDEwMCBtcyAqLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMKPiBpbmRleCA1Y2E2YTM4 Li5kNjZhOGRmOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfZGV2aWNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2 aWNlLmMKPiBAQCAtMTA1Myw2ICsxMDUzLDEzIEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9jaGVja19h cmd1bWVudHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAJCQkgYW1kZ3B1X3ZtX2Js b2NrX3NpemUpOwo+ICAgCQlhbWRncHVfdm1fYmxvY2tfc2l6ZSA9IDk7Cj4gICAJfQo+ICsKPiAr CWlmICgoYW1kZ3B1X3ZyYW1fcGFnZV9zcGxpdCAhPSAtMSAmJiBhbWRncHVfdnJhbV9wYWdlX3Nw bGl0IDwgMTYpIHx8Cj4gKwkgICAgIWFtZGdwdV9jaGVja19wb3RfYXJndW1lbnQoYW1kZ3B1X3Zy YW1fcGFnZV9zcGxpdCkpIHsKPiArCQlkZXZfd2FybihhZGV2LT5kZXYsICJpbnZhbGlkIFZSQU0g cGFnZSBzcGxpdCAoJWQpXG4iLAo+ICsJCQkgYW1kZ3B1X3ZyYW1fcGFnZV9zcGxpdCk7Cj4gKwkJ YW1kZ3B1X3ZyYW1fcGFnZV9zcGxpdCA9IDEwMjQ7Cj4gKwl9Cj4gICB9Cj4gICAKPiAgIC8qKgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMKPiBpbmRleCAwOGJhNDQxLi41 MzhkM2E3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k cnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYwo+IEBA IC04NCw2ICs4NCw3IEBAIGludCBhbWRncHVfdm1fc2l6ZSA9IDY0Owo+ICAgaW50IGFtZGdwdV92 bV9ibG9ja19zaXplID0gLTE7Cj4gICBpbnQgYW1kZ3B1X3ZtX2ZhdWx0X3N0b3AgPSAwOwo+ICAg aW50IGFtZGdwdV92bV9kZWJ1ZyA9IDA7Cj4gK2ludCBhbWRncHVfdnJhbV9wYWdlX3NwbGl0ID0g MTAyNDsKPiAgIGludCBhbWRncHVfZXhwX2h3X3N1cHBvcnQgPSAwOwo+ICAgaW50IGFtZGdwdV9k YWwgPSAtMTsKPiAgIGludCBhbWRncHVfc2NoZWRfam9icyA9IDMyOwo+IEBAIC0xNjUsNiArMTY2 LDkgQEAgbW9kdWxlX3BhcmFtX25hbWVkKHZtX2ZhdWx0X3N0b3AsIGFtZGdwdV92bV9mYXVsdF9z dG9wLCBpbnQsIDA0NDQpOwo+ICAgTU9EVUxFX1BBUk1fREVTQyh2bV9kZWJ1ZywgIkRlYnVnIFZN IGhhbmRsaW5nICgwID0gZGlzYWJsZWQgKGRlZmF1bHQpLCAxID0gZW5hYmxlZCkiKTsKPiAgIG1v ZHVsZV9wYXJhbV9uYW1lZCh2bV9kZWJ1ZywgYW1kZ3B1X3ZtX2RlYnVnLCBpbnQsIDA2NDQpOwo+ ICAgCj4gK01PRFVMRV9QQVJNX0RFU0ModnJhbV9wYWdlX3NwbGl0LCAiTnVtYmVyIG9mIHBhZ2Vz IGFmdGVyIHdlIHNwbGl0IFZSQU0gYWxsb2NhdGlvbnMgKGRlZmF1bHQgMTAyNCwgLTEgPSBkaXNh YmxlKSIpOwo+ICttb2R1bGVfcGFyYW1fbmFtZWQodnJhbV9wYWdlX3NwbGl0LCBhbWRncHVfdnJh bV9wYWdlX3NwbGl0LCBpbnQsIDA0NDQpOwo+ICsKPiAgIE1PRFVMRV9QQVJNX0RFU0MoZXhwX2h3 X3N1cHBvcnQsICJleHBlcmltZW50YWwgaHcgc3VwcG9ydCAoMSA9IGVuYWJsZSwgMCA9IGRpc2Fi bGUgKGRlZmF1bHQpKSIpOwo+ICAgbW9kdWxlX3BhcmFtX25hbWVkKGV4cF9od19zdXBwb3J0LCBh bWRncHVfZXhwX2h3X3N1cHBvcnQsIGludCwgMDQ0NCk7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3R0bS5jCj4gaW5kZXggYmQzNzdkOC4uNTg4ZTI0MiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKPiBAQCAtMTY4LDcgKzE2OCw3IEBA IHN0YXRpYyBpbnQgYW1kZ3B1X2luaXRfbWVtX3R5cGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJk ZXYsIHVpbnQzMl90IHR5cGUsCj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgVFRNX1BMX1ZSQU06Cj4g ICAJCS8qICJPbi1jYXJkIiB2aWRlbyByYW0gKi8KPiAtCQltYW4tPmZ1bmMgPSAmdHRtX2JvX21h bmFnZXJfZnVuYzsKPiArCQltYW4tPmZ1bmMgPSAmYW1kZ3B1X3ZyYW1fbWdyX2Z1bmM7Cj4gICAJ CW1hbi0+Z3B1X29mZnNldCA9IGFkZXYtPm1jLnZyYW1fc3RhcnQ7Cj4gICAJCW1hbi0+ZmxhZ3Mg PSBUVE1fTUVNVFlQRV9GTEFHX0ZJWEVEIHwKPiAgIAkJCSAgICAgVFRNX01FTVRZUEVfRkxBR19N QVBQQUJMRTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3R0bS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCj4gaW5kZXgg OTgxMmM4MC4uZDFjMDBjMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdHRtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmgKPiBAQCAtNjYsNiArNjYsNyBAQCBzdHJ1Y3QgYW1kZ3B1X21tYW4gewo+ICAgfTsKPiAg IAo+ICAgZXh0ZXJuIGNvbnN0IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIGFtZGdw dV9ndHRfbWdyX2Z1bmM7Cj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFn ZXJfZnVuYyBhbWRncHVfdnJhbV9tZ3JfZnVuYzsKPiAgIAo+ICAgaW50IGFtZGdwdV9ndHRfbWdy X2FsbG9jKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ICAgCQkJIHN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdCAqdGJvLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV92cmFtX21nci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4x MTI1ZjdmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV92cmFtX21nci5jCj4gQEAgLTAsMCArMSwyMjIgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IDIwMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgoyMDE2IGlzIGV4cGVjdGVkLgoK UmVnYXJkcywKRGF2aWQgWmhvdQo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlSSUdIVCBIT0xERVIo UykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4gKyAq IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiArICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOiBDaHJpc3RpYW4gS8O2bmlnCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlICJhbWRncHUuaCIKPiAr Cj4gK3N0cnVjdCBhbWRncHVfdnJhbV9tZ3Igewo+ICsJc3RydWN0IGRybV9tbSBtbTsKPiArCXNw aW5sb2NrX3QgbG9jazsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfdnJhbV9tZ3JfaW5p dCAtIGluaXQgVlJBTSBtYW5hZ2VyIGFuZCBEUk0gTU0KPiArICoKPiArICogQG1hbjogVFRNIG1l bW9yeSB0eXBlIG1hbmFnZXIKPiArICogQHBfc2l6ZTogbWF4aW11bSBzaXplIG9mIFZSQU0KPiAr ICoKPiArICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIFZSQU0gbWFuYWdlci4KPiArICov Cj4gK3N0YXRpYyBpbnQgYW1kZ3B1X3ZyYW1fbWdyX2luaXQoc3RydWN0IHR0bV9tZW1fdHlwZV9t YW5hZ2VyICptYW4sCj4gKwkJCQl1bnNpZ25lZCBsb25nIHBfc2l6ZSkKPiArewo+ICsJc3RydWN0 IGFtZGdwdV92cmFtX21nciAqbWdyOwo+ICsKPiArCW1nciA9IGt6YWxsb2Moc2l6ZW9mKCptZ3Ip LCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWdyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiAr CWRybV9tbV9pbml0KCZtZ3ItPm1tLCAwLCBwX3NpemUpOwo+ICsJc3Bpbl9sb2NrX2luaXQoJm1n ci0+bG9jayk7Cj4gKwltYW4tPnByaXYgPSBtZ3I7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIGFtZGdwdV92cmFtX21ncl9maW5pIC0gZnJlZSBhbmQgZGVzdHJveSBWUkFNIG1h bmFnZXIKPiArICoKPiArICogQG1hbjogVFRNIG1lbW9yeSB0eXBlIG1hbmFnZXIKPiArICoKPiAr ICogRGVzdHJveSBhbmQgZnJlZSB0aGUgVlJBTSBtYW5hZ2VyLCByZXR1cm5zIC1FQlVTWSBpZiBy YW5nZXMgYXJlIHN0aWxsCj4gKyAqIGFsbG9jYXRlZCBpbnNpZGUgaXQuCj4gKyAqLwo+ICtzdGF0 aWMgaW50IGFtZGdwdV92cmFtX21ncl9maW5pKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAq bWFuKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X3ZyYW1fbWdyICptZ3IgPSBtYW4tPnByaXY7Cj4g Kwo+ICsJc3Bpbl9sb2NrKCZtZ3ItPmxvY2spOwo+ICsJaWYgKCFkcm1fbW1fY2xlYW4oJm1nci0+ bW0pKSB7Cj4gKwkJc3Bpbl91bmxvY2soJm1nci0+bG9jayk7Cj4gKwkJcmV0dXJuIC1FQlVTWTsK PiArCX0KPiArCj4gKwlkcm1fbW1fdGFrZWRvd24oJm1nci0+bW0pOwo+ICsJc3Bpbl91bmxvY2so Jm1nci0+bG9jayk7Cj4gKwlrZnJlZShtZ3IpOwo+ICsJbWFuLT5wcml2ID0gTlVMTDsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYW1kZ3B1X3ZyYW1fbWdyX25ldyAtIGFsbG9j YXRlIG5ldyByYW5nZXMKPiArICoKPiArICogQG1hbjogVFRNIG1lbW9yeSB0eXBlIG1hbmFnZXIK PiArICogQHRibzogVFRNIEJPIHdlIG5lZWQgdGhpcyByYW5nZSBmb3IKPiArICogQHBsYWNlOiBw bGFjZW1lbnQgZmxhZ3MgYW5kIHJlc3RyaWN0aW9ucwo+ICsgKiBAbWVtOiB0aGUgcmVzdWx0aW5n IG1lbSBvYmplY3QKPiArICoKPiArICogQWxsb2NhdGUgVlJBTSBmb3IgdGhlIGdpdmVuIEJPLgo+ ICsgKi8KPiArc3RhdGljIGludCBhbWRncHVfdnJhbV9tZ3JfbmV3KHN0cnVjdCB0dG1fbWVtX3R5 cGVfbWFuYWdlciAqbWFuLAo+ICsJCQkgICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0 Ym8sCj4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwKPiArCQkJICAg ICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2JvICpi byA9IGNvbnRhaW5lcl9vZih0Ym8sIHN0cnVjdCBhbWRncHVfYm8sIHRibyk7Cj4gKwlzdHJ1Y3Qg YW1kZ3B1X3ZyYW1fbWdyICptZ3IgPSBtYW4tPnByaXY7Cj4gKwlzdHJ1Y3QgZHJtX21tICptbSA9 ICZtZ3ItPm1tOwo+ICsJc3RydWN0IGRybV9tbV9ub2RlICpub2RlczsKPiArCWVudW0gZHJtX21t X3NlYXJjaF9mbGFncyBzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQ7Cj4gKwllbnVtIGRy bV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdzID0gRFJNX01NX0NSRUFURV9ERUZBVUxUOwo+ICsJ dW5zaWduZWQgbG9uZyBscGZuLCBudW1fbm9kZXMsIHBhZ2VzX3Blcl9ub2RlLCBwYWdlc19sZWZ0 Owo+ICsJdW5zaWduZWQgaTsKPiArCWludCByOwo+ICsKPiArCWxwZm4gPSBwbGFjZS0+bHBmbjsK PiArCWlmICghbHBmbikKPiArCQlscGZuID0gbWFuLT5zaXplOwo+ICsKPiArCWlmIChiby0+Zmxh Z3MgJiBBTURHUFVfR0VNX0NSRUFURV9WUkFNX0NPTlRJR1VPVVMgfHwKPiArCSAgICBhbWRncHVf dnJhbV9wYWdlX3NwbGl0ID09IC0xKSB7Cj4gKwkJcGFnZXNfcGVyX25vZGUgPSB+MHVsOwo+ICsJ CW51bV9ub2RlcyA9IDE7Cj4gKwl9IGVsc2Ugewo+ICsJCXBhZ2VzX3Blcl9ub2RlID0gbWF4KCh1 aW50MzJfdClhbWRncHVfdnJhbV9wYWdlX3NwbGl0LAo+ICsJCQkJICAgICBtZW0tPnBhZ2VfYWxp Z25tZW50KTsKPiArCQludW1fbm9kZXMgPSBESVZfUk9VTkRfVVAobWVtLT5udW1fcGFnZXMsIHBh Z2VzX3Blcl9ub2RlKTsKPiArCX0KPiArCj4gKwlub2RlcyA9IGtjYWxsb2MobnVtX25vZGVzLCBz aXplb2YoKm5vZGVzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW5vZGVzKQo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCWlmIChwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dOKSB7 Cj4gKwkJc2ZsYWdzID0gRFJNX01NX1NFQVJDSF9CRUxPVzsKPiArCQlhZmxhZ3MgPSBEUk1fTU1f Q1JFQVRFX1RPUDsKPiArCX0KPiArCj4gKwlwYWdlc19sZWZ0ID0gbWVtLT5udW1fcGFnZXM7Cj4g Kwo+ICsJc3Bpbl9sb2NrKCZtZ3ItPmxvY2spOwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9ub2Rl czsgKytpKSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBwYWdlcyA9IG1pbihwYWdlc19sZWZ0LCBwYWdl c19wZXJfbm9kZSk7Cj4gKwkJdWludDMyX3QgYWxpZ25tZW50ID0gbWVtLT5wYWdlX2FsaWdubWVu dDsKPiArCj4gKwkJaWYgKHBhZ2VzID09IHBhZ2VzX3Blcl9ub2RlKQo+ICsJCQlhbGlnbm1lbnQg PSBwYWdlc19wZXJfbm9kZTsKPiArCQllbHNlCj4gKwkJCXNmbGFncyB8PSBEUk1fTU1fU0VBUkNI X0JFU1Q7Cj4gKwo+ICsJCXIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyht bSwgJm5vZGVzW2ldLCBwYWdlcywKPiArCQkJCQkJCWFsaWdubWVudCwgMCwKPiArCQkJCQkJCXBs YWNlLT5mcGZuLCBscGZuLAo+ICsJCQkJCQkJc2ZsYWdzLCBhZmxhZ3MpOwo+ICsJCWlmICh1bmxp a2VseShyKSkKPiArCQkJZ290byBlcnJvcjsKPiArCj4gKwkJcGFnZXNfbGVmdCAtPSBwYWdlczsK PiArCX0KPiArCXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2spOwo+ICsKPiArCW1lbS0+c3RhcnQgPSBu dW1fbm9kZXMgPT0gMSA/IG5vZGVzWzBdLnN0YXJ0IDogQU1ER1BVX0JPX0lOVkFMSURfT0ZGU0VU Owo+ICsJbWVtLT5tbV9ub2RlID0gbm9kZXM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJv cjoKPiArCXdoaWxlIChpLS0pCj4gKwkJZHJtX21tX3JlbW92ZV9ub2RlKCZub2Rlc1tpXSk7Cj4g KwlzcGluX3VubG9jaygmbWdyLT5sb2NrKTsKPiArCj4gKwlrZnJlZShub2Rlcyk7Cj4gKwlyZXR1 cm4gciA9PSAtRU5PU1BDID8gMCA6IHI7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfdnJh bV9tZ3JfZGVsIC0gZnJlZSByYW5nZXMKPiArICoKPiArICogQG1hbjogVFRNIG1lbW9yeSB0eXBl IG1hbmFnZXIKPiArICogQHRibzogVFRNIEJPIHdlIG5lZWQgdGhpcyByYW5nZSBmb3IKPiArICog QHBsYWNlOiBwbGFjZW1lbnQgZmxhZ3MgYW5kIHJlc3RyaWN0aW9ucwo+ICsgKiBAbWVtOiBUVE0g bWVtb3J5IG9iamVjdAo+ICsgKgo+ICsgKiBGcmVlIHRoZSBhbGxvY2F0ZWQgVlJBTSBhZ2Fpbi4K PiArICovCj4gK3N0YXRpYyB2b2lkIGFtZGdwdV92cmFtX21ncl9kZWwoc3RydWN0IHR0bV9tZW1f dHlwZV9tYW5hZ2VyICptYW4sCj4gKwkJCQlzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKPiArewo+ ICsJc3RydWN0IGFtZGdwdV92cmFtX21nciAqbWdyID0gbWFuLT5wcml2Owo+ICsJc3RydWN0IGRy bV9tbV9ub2RlICpub2RlcyA9IG1lbS0+bW1fbm9kZTsKPiArCXVuc2lnbmVkIHBhZ2VzID0gbWVt LT5udW1fcGFnZXM7Cj4gKwo+ICsJaWYgKCFtZW0tPm1tX25vZGUpCj4gKwkJcmV0dXJuOwo+ICsK PiArCXNwaW5fbG9jaygmbWdyLT5sb2NrKTsKPiArCXdoaWxlIChwYWdlcykgewo+ICsJCXBhZ2Vz IC09IG5vZGVzLT5zaXplOwo+ICsJCWRybV9tbV9yZW1vdmVfbm9kZShub2Rlcyk7Cj4gKwkJKytu b2RlczsKPiArCX0KPiArCXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2spOwo+ICsKPiArCWtmcmVlKG1l bS0+bW1fbm9kZSk7Cj4gKwltZW0tPm1tX25vZGUgPSBOVUxMOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogYW1kZ3B1X3ZyYW1fbWdyX2RlYnVnIC0gZHVtcCBWUkFNIHRhYmxlCj4gKyAqCj4gKyAqIEBt YW46IFRUTSBtZW1vcnkgdHlwZSBtYW5hZ2VyCj4gKyAqIEBwcmVmaXg6IHRleHQgcHJlZml4Cj4g KyAqCj4gKyAqIER1bXAgdGhlIHRhYmxlIGNvbnRlbnQgdXNpbmcgcHJpbnRrLgo+ICsgKi8KPiAr c3RhdGljIHZvaWQgYW1kZ3B1X3ZyYW1fbWdyX2RlYnVnKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFu YWdlciAqbWFuLAo+ICsJCQkJICBjb25zdCBjaGFyICpwcmVmaXgpCj4gK3sKPiArCXN0cnVjdCBh bWRncHVfdnJhbV9tZ3IgKm1nciA9IG1hbi0+cHJpdjsKPiArCj4gKwlzcGluX2xvY2soJm1nci0+ bG9jayk7Cj4gKwlkcm1fbW1fZGVidWdfdGFibGUoJm1nci0+bW0sIHByZWZpeCk7Cj4gKwlzcGlu X3VubG9jaygmbWdyLT5sb2NrKTsKPiArfQo+ICsKPiArY29uc3Qgc3RydWN0IHR0bV9tZW1fdHlw ZV9tYW5hZ2VyX2Z1bmMgYW1kZ3B1X3ZyYW1fbWdyX2Z1bmMgPSB7Cj4gKwlhbWRncHVfdnJhbV9t Z3JfaW5pdCwKPiArCWFtZGdwdV92cmFtX21ncl9maW5pLAo+ICsJYW1kZ3B1X3ZyYW1fbWdyX25l dywKPiArCWFtZGdwdV92cmFtX21ncl9kZWwsCj4gKwlhbWRncHVfdnJhbV9tZ3JfZGVidWcKPiAr fTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1n ZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=