From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felix Kuehling Subject: Re: [PATCH 6/6] drm/amdgpu: add a custom GTT memory manager v2 Date: Mon, 12 Sep 2016 17:25:54 -0400 Message-ID: <888e178e-291d-3877-8cf6-fad0299d57ec@amd.com> References: <1473691152-1693-1-git-send-email-deathsimple@vodafone.de> <1473691152-1693-6-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1473691152-1693-6-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: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org VGhlIGNvbW1lbnQgaGVhZGVyIG9uIHRvcCBvZiBhbWRncHVfZ3R0X21nci5jIHNob3VsZCBzYXkg IkNvcHlyaWdodAoyMDE2IiAod3JvbmcgeWVhcikuIFdpdGggdGhhdCBmaXhlZCwgdGhpcyBwYXRj aCBpcyBSZXZpZXdlZC1ieTogRmVsaXgKS3VlaGxpbmcgPEZlbGl4Lkt1ZWhsaW5nQGFtZC5jb20+ LgoKUmVnYXJkcywKICBGZWxpeAoKCk9uIDE2LTA5LTEyIDEwOjM5IEFNLCBDaHJpc3RpYW4gS8O2 bmlnIHdyb3RlOgo+IEZyb206IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1k LmNvbT4KPgo+IE9ubHkgYWxsb2NhdGUgYWRkcmVzcyBzcGFjZSB3aGVuIHdlIHJlYWxseSBuZWVk IGl0Lgo+Cj4gdjI6IGZpeCBhIHR5cG8sIGFkZCBjb3JyZWN0IGZ1bmN0aW9uIGRlc2NyaXB0aW9u LAo+ICAgICBzdG9wIGxlYWtpbmcgdGhlIG5vZGUgaW4gdGhlIGVycm9yIGNhc2UuCj4KPiBTaWdu ZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgICAgICAgfCAgIDMg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgICAgICB8ICAgNCAr LQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ3R0X21nci5jIHwgMjM4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X29iamVjdC5jICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdHRtLmMgICAgIHwgIDIwICsrLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdHRtLmggICAgIHwgICA5ICstCj4gIDYgZmlsZXMgY2hhbmdlZCwgMjY1IGluc2VydGlv bnMoKyksIDExIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2d0dF9tZ3IuYwo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv TWFrZWZpbGUKPiBpbmRleCBmN2Q4NGFjLi5mMmI5N2NiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvTWFrZWZpbGUKPiBAQCAtMjksNyArMjksOCBAQCBhbWRncHUteSArPSBhbWRncHVfZGV2 aWNlLm8gYW1kZ3B1X2ttcy5vIFwKPiAgCWFtZGdwdV9wbS5vIGF0b21iaW9zX2RwLm8gYW1kZ3B1 X2FmbXQubyBhbWRncHVfdHJhY2VfcG9pbnRzLm8gXAo+ICAJYXRvbWJpb3NfZW5jb2RlcnMubyBh bWRncHVfc2EubyBhdG9tYmlvc19pMmMubyBcCj4gIAlhbWRncHVfcHJpbWUubyBhbWRncHVfdm0u byBhbWRncHVfaWIubyBhbWRncHVfcGxsLm8gXAo+IC0JYW1kZ3B1X3Vjb2RlLm8gYW1kZ3B1X2Jv X2xpc3QubyBhbWRncHVfY3R4Lm8gYW1kZ3B1X3N5bmMubwo+ICsJYW1kZ3B1X3Vjb2RlLm8gYW1k Z3B1X2JvX2xpc3QubyBhbWRncHVfY3R4Lm8gYW1kZ3B1X3N5bmMubyBcCj4gKwlhbWRncHVfZ3R0 X21nci5vCj4gIAo+ICAjIGFkZCBhc2ljIHNwZWNpZmljIGJsb2NrCj4gIGFtZGdwdS0kKENPTkZJ R19EUk1fQU1ER1BVX0NJSykrPSBjaWsubyBjaWtfaWgubyBrdl9zbWMubyBrdl9kcG0ubyBcCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKPiBpbmRleCBjYTgxZjE1Li5kOWMw MDZmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKPiBAQCAtNjQ5 LDcgKzY0OSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdw dV9jc19wYXJzZXIgKnAsCj4gIAlpZiAoIXIgJiYgcC0+dWZfZW50cnkucm9iaikgewo+ICAJCXN0 cnVjdCBhbWRncHVfYm8gKnVmID0gcC0+dWZfZW50cnkucm9iajsKPiAgCj4gLQkJciA9IGFtZGdw dV90dG1fYmluZCh1Zi0+dGJvLnR0bSwgJnVmLT50Ym8ubWVtKTsKPiArCQlyID0gYW1kZ3B1X3R0 bV9iaW5kKCZ1Zi0+dGJvLCAmdWYtPnRiby5tZW0pOwo+ICAJCXAtPmpvYi0+dWZfYWRkciArPSBh bWRncHVfYm9fZ3B1X29mZnNldCh1Zik7Cj4gIAl9Cj4gIAo+IEBAIC0xMTkzLDcgKzExOTMsNyBA QCBpbnQgYW1kZ3B1X2NzX3N5c3ZtX2FjY2Vzc19yZXF1aXJlZChzdHJ1Y3QgYW1kZ3B1X2NzX3Bh cnNlciAqcGFyc2VyKQo+ICAJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+Ym9fbGlzdC0+bnVtX2Vu dHJpZXM7IGkrKykgewo+ICAJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gcGFyc2VyLT5ib19saXN0 LT5hcnJheVtpXS5yb2JqOwo+ICAKPiAtCQlyID0gYW1kZ3B1X3R0bV9iaW5kKGJvLT50Ym8udHRt LCAmYm8tPnRiby5tZW0pOwo+ICsJCXIgPSBhbWRncHVfdHRtX2JpbmQoJmJvLT50Ym8sICZiby0+ dGJvLm1lbSk7Cj4gIAkJaWYgKHVubGlrZWx5KHIpKQo+ICAJCQlyZXR1cm4gcjsKPiAgCX0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2d0dF9tZ3IuYyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjZkODQyOTgKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2d0dF9tZ3IuYwo+IEBAIC0wLDAg KzEsMjM4IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu Cj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl Lgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KPiArICoKPiArICogQXV0aG9yczogQ2hyaXN0aWFuIEvDtm5pZwo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gKwo+ICtzdHJ1Y3Qg YW1kZ3B1X2d0dF9tZ3Igewo+ICsJc3RydWN0IGRybV9tbSBtbTsKPiArCXNwaW5sb2NrX3QgbG9j azsKPiArCXVpbnQ2NF90IGF2YWlsYWJsZTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBhbWRncHVf Z3R0X21ncl9pbml0IC0gaW5pdCBHVFQgbWFuYWdlciBhbmQgRFJNIE1NCj4gKyAqCj4gKyAqIEBt YW46IFRUTSBtZW1vcnkgdHlwZSBtYW5hZ2VyCj4gKyAqIEBwX3NpemU6IG1heGltdW0gc2l6ZSBv ZiBHVFQKPiArICoKPiArICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIEdUVCBtYW5hZ2Vy Lgo+ICsgKi8KPiArc3RhdGljIGludCBhbWRncHVfZ3R0X21ncl9pbml0KHN0cnVjdCB0dG1fbWVt X3R5cGVfbWFuYWdlciAqbWFuLAo+ICsJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwX3NpemUpCj4g K3sKPiArCXN0cnVjdCBhbWRncHVfZ3R0X21nciAqbWdyOwo+ICsKPiArCW1nciA9IGt6YWxsb2Mo c2l6ZW9mKCptZ3IpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWdyKQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCWRybV9tbV9pbml0KCZtZ3ItPm1tLCAwLCBwX3NpemUpOwo+ICsJc3Bpbl9s b2NrX2luaXQoJm1nci0+bG9jayk7Cj4gKwltZ3ItPmF2YWlsYWJsZSA9IHBfc2l6ZTsKPiArCW1h bi0+cHJpdiA9IG1ncjsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYW1kZ3B1 X2d0dF9tZ3JfZmluaSAtIGZyZWUgYW5kIGRlc3Ryb3kgR1RUIG1hbmFnZXIKPiArICoKPiArICog QG1hbjogVFRNIG1lbW9yeSB0eXBlIG1hbmFnZXIKPiArICoKPiArICogRGVzdHJveSBhbmQgZnJl ZSB0aGUgR1RUIG1hbmFnZXIsIHJldHVybnMgLUVCVVNZIGlmIHJhbmdlcyBhcmUgc3RpbGwKPiAr ICogYWxsb2NhdGVkIGluc2lkZSBpdC4KPiArICovCj4gK3N0YXRpYyBpbnQgYW1kZ3B1X2d0dF9t Z3JfZmluaShzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKPiArewo+ICsJc3RydWN0 IGFtZGdwdV9ndHRfbWdyICptZ3IgPSBtYW4tPnByaXY7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZtZ3It PmxvY2spOwo+ICsJaWYgKCFkcm1fbW1fY2xlYW4oJm1nci0+bW0pKSB7Cj4gKwkJc3Bpbl91bmxv Y2soJm1nci0+bG9jayk7Cj4gKwkJcmV0dXJuIC1FQlVTWTsKPiArCX0KPiArCj4gKwlkcm1fbW1f dGFrZWRvd24oJm1nci0+bW0pOwo+ICsJc3Bpbl91bmxvY2soJm1nci0+bG9jayk7Cj4gKwlrZnJl ZShtZ3IpOwo+ICsJbWFuLT5wcml2ID0gTlVMTDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICogYW1kZ3B1X2d0dF9tZ3JfYWxsb2MgLSBhbGxvY2F0ZSBuZXcgcmFuZ2VzCj4gKyAq Cj4gKyAqIEBtYW46IFRUTSBtZW1vcnkgdHlwZSBtYW5hZ2VyCj4gKyAqIEB0Ym86IFRUTSBCTyB3 ZSBuZWVkIHRoaXMgcmFuZ2UgZm9yCj4gKyAqIEBwbGFjZTogcGxhY2VtZW50IGZsYWdzIGFuZCBy ZXN0cmljdGlvbnMKPiArICogQG1lbTogdGhlIHJlc3VsdGluZyBtZW0gb2JqZWN0Cj4gKyAqCj4g KyAqIEFsbG9jYXRlIHRoZSBhZGRyZXNzIHNwYWNlIGZvciBhIG5vZGUuCj4gKyAqLwo+ICtpbnQg YW1kZ3B1X2d0dF9tZ3JfYWxsb2Moc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4g KwkJCSBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibywKPiArCQkJIGNvbnN0IHN0cnVjdCB0 dG1fcGxhY2UgKnBsYWNlLAo+ICsJCQkgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCj4gK3sKPiAr CXN0cnVjdCBhbWRncHVfZ3R0X21nciAqbWdyID0gbWFuLT5wcml2Owo+ICsJc3RydWN0IGRybV9t bV9ub2RlICpub2RlID0gbWVtLT5tbV9ub2RlOwo+ICsJZW51bSBkcm1fbW1fc2VhcmNoX2ZsYWdz IHNmbGFncyA9IERSTV9NTV9TRUFSQ0hfQkVTVDsKPiArCWVudW0gZHJtX21tX2FsbG9jYXRvcl9m bGFncyBhZmxhZ3MgPSBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZw Zm4sIGxwZm47Cj4gKwlpbnQgcjsKPiArCj4gKwlpZiAobm9kZS0+c3RhcnQgIT0gQU1ER1BVX0JP X0lOVkFMSURfT0ZGU0VUKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChwbGFjZSkKPiArCQlm cGZuID0gcGxhY2UtPmZwZm47Cj4gKwllbHNlCj4gKwkJZnBmbiA9IDA7Cj4gKwo+ICsJaWYgKHBs YWNlICYmIHBsYWNlLT5scGZuKQo+ICsJCWxwZm4gPSBwbGFjZS0+bHBmbjsKPiArCWVsc2UKPiAr CQlscGZuID0gbWFuLT5zaXplOwo+ICsKPiArCWlmIChwbGFjZSAmJiBwbGFjZS0+ZmxhZ3MgJiBU VE1fUExfRkxBR19UT1BET1dOKSB7Cj4gKwkJc2ZsYWdzID0gRFJNX01NX1NFQVJDSF9CRUxPVzsK PiArCQlhZmxhZ3MgPSBEUk1fTU1fQ1JFQVRFX1RPUDsKPiArCX0KPiArCj4gKwlzcGluX2xvY2so Jm1nci0+bG9jayk7Cj4gKwlyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMo Jm1nci0+bW0sIG5vZGUsIG1lbS0+bnVtX3BhZ2VzLAo+ICsJCQkJCQltZW0tPnBhZ2VfYWxpZ25t ZW50LCAwLAo+ICsJCQkJCQlmcGZuLCBscGZuLCBzZmxhZ3MsIGFmbGFncyk7Cj4gKwlzcGluX3Vu bG9jaygmbWdyLT5sb2NrKTsKPiArCj4gKwlpZiAoIXIpIHsKPiArCQltZW0tPnN0YXJ0ID0gbm9k ZS0+c3RhcnQ7Cj4gKwkJdGJvLT5vZmZzZXQgPSAodGJvLT5tZW0uc3RhcnQgPDwgUEFHRV9TSElG VCkgKwo+ICsJCSAgICB0Ym8tPmJkZXYtPm1hblt0Ym8tPm1lbS5tZW1fdHlwZV0uZ3B1X29mZnNl dDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV9n dHRfbWdyX25ldyAtIGFsbG9jYXRlIGEgbmV3IG5vZGUKPiArICoKPiArICogQG1hbjogVFRNIG1l bW9yeSB0eXBlIG1hbmFnZXIKPiArICogQHRibzogVFRNIEJPIHdlIG5lZWQgdGhpcyByYW5nZSBm b3IKPiArICogQHBsYWNlOiBwbGFjZW1lbnQgZmxhZ3MgYW5kIHJlc3RyaWN0aW9ucwo+ICsgKiBA bWVtOiB0aGUgcmVzdWx0aW5nIG1lbSBvYmplY3QKPiArICoKPiArICogRHVtbXksIGFsbG9jYXRl IHRoZSBub2RlIGJ1dCBubyBzcGFjZSBmb3IgaXQgeWV0Lgo+ICsgKi8KPiArc3RhdGljIGludCBh bWRncHVfZ3R0X21ncl9uZXcoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4gKwkJ CSAgICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvLAo+ICsJCQkgICAgICBjb25zdCBz dHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwKPiArCQkJICAgICAgc3RydWN0IHR0bV9tZW1fcmVnICpt ZW0pCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfZ3R0X21nciAqbWdyID0gbWFuLT5wcml2Owo+ICsJ c3RydWN0IGRybV9tbV9ub2RlICpub2RlOwo+ICsJaW50IHI7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZt Z3ItPmxvY2spOwo+ICsJaWYgKG1nci0+YXZhaWxhYmxlIDwgbWVtLT5udW1fcGFnZXMpIHsKPiAr CQlzcGluX3VubG9jaygmbWdyLT5sb2NrKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCW1nci0+ YXZhaWxhYmxlIC09IG1lbS0+bnVtX3BhZ2VzOwo+ICsJc3Bpbl91bmxvY2soJm1nci0+bG9jayk7 Cj4gKwo+ICsJbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIW5vZGUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbm9kZS0+c3RhcnQgPSBBTURH UFVfQk9fSU5WQUxJRF9PRkZTRVQ7Cj4gKwltZW0tPm1tX25vZGUgPSBub2RlOwo+ICsKPiArCWlm IChwbGFjZS0+ZnBmbiB8fCBwbGFjZS0+bHBmbiB8fCBwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxB R19UT1BET1dOKSB7Cj4gKwkJciA9IGFtZGdwdV9ndHRfbWdyX2FsbG9jKG1hbiwgdGJvLCBwbGFj ZSwgbWVtKTsKPiArCQlpZiAodW5saWtlbHkocikpIHsKPiArCQkJa2ZyZWUobm9kZSk7Cj4gKwkJ CW1lbS0+bW1fbm9kZSA9IE5VTEw7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQltZW0tPnN0YXJ0 ID0gbm9kZS0+c3RhcnQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBhbWRncHVfZ3R0X21ncl9kZWwgLSBmcmVlIHJhbmdlcwo+ICsgKgo+ICsgKiBAbWFuOiBU VE0gbWVtb3J5IHR5cGUgbWFuYWdlcgo+ICsgKiBAdGJvOiBUVE0gQk8gd2UgbmVlZCB0aGlzIHJh bmdlIGZvcgo+ICsgKiBAcGxhY2U6IHBsYWNlbWVudCBmbGFncyBhbmQgcmVzdHJpY3Rpb25zCj4g KyAqIEBtZW06IFRUTSBtZW1vcnkgb2JqZWN0Cj4gKyAqCj4gKyAqIEZyZWUgdGhlIGFsbG9jYXRl ZCBHVFQgYWdhaW4uCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVfZ3R0X21ncl9kZWwoc3Ry dWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4gKwkJCSAgICAgICBzdHJ1Y3QgdHRtX21l bV9yZWcgKm1lbSkKPiArewo+ICsJc3RydWN0IGFtZGdwdV9ndHRfbWdyICptZ3IgPSBtYW4tPnBy aXY7Cj4gKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUgPSBtZW0tPm1tX25vZGU7Cj4gKwo+ICsJ aWYgKCFub2RlKQo+ICsJCXJldHVybjsKPiArCj4gKwlzcGluX2xvY2soJm1nci0+bG9jayk7Cj4g KwlpZiAobm9kZS0+c3RhcnQgIT0gQU1ER1BVX0JPX0lOVkFMSURfT0ZGU0VUKQo+ICsJCWRybV9t bV9yZW1vdmVfbm9kZShub2RlKTsKPiArCW1nci0+YXZhaWxhYmxlICs9IG1lbS0+bnVtX3BhZ2Vz Owo+ICsJc3Bpbl91bmxvY2soJm1nci0+bG9jayk7Cj4gKwo+ICsJa2ZyZWUobm9kZSk7Cj4gKwlt ZW0tPm1tX25vZGUgPSBOVUxMOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYW1kZ3B1X2d0dF9tZ3Jf ZGVidWcgLSBkdW1wIFZSQU0gdGFibGUKPiArICoKPiArICogQG1hbjogVFRNIG1lbW9yeSB0eXBl IG1hbmFnZXIKPiArICogQHByZWZpeDogdGV4dCBwcmVmaXgKPiArICoKPiArICogRHVtcCB0aGUg dGFibGUgY29udGVudCB1c2luZyBwcmludGsuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVf Z3R0X21ncl9kZWJ1ZyhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiArCQkJCSAg Y29uc3QgY2hhciAqcHJlZml4KQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2d0dF9tZ3IgKm1nciA9 IG1hbi0+cHJpdjsKPiArCj4gKwlzcGluX2xvY2soJm1nci0+bG9jayk7Cj4gKwlkcm1fbW1fZGVi dWdfdGFibGUoJm1nci0+bW0sIHByZWZpeCk7Cj4gKwlzcGluX3VubG9jaygmbWdyLT5sb2NrKTsK PiArfQo+ICsKPiArY29uc3Qgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyX2Z1bmMgYW1kZ3B1 X2d0dF9tZ3JfZnVuYyA9IHsKPiArCWFtZGdwdV9ndHRfbWdyX2luaXQsCj4gKwlhbWRncHVfZ3R0 X21ncl9maW5pLAo+ICsJYW1kZ3B1X2d0dF9tZ3JfbmV3LAo+ICsJYW1kZ3B1X2d0dF9tZ3JfZGVs LAo+ICsJYW1kZ3B1X2d0dF9tZ3JfZGVidWcKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X29iamVjdC5jCj4gaW5kZXggMTUxYTcwNi4uNjkxNzA3YiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPiBAQCAtNjc1LDcgKzY3 NSw3IEBAIGludCBhbWRncHVfYm9fcGluX3Jlc3RyaWN0ZWQoc3RydWN0IGFtZGdwdV9ibyAqYm8s IHUzMiBkb21haW4sCj4gIAkJZGV2X2Vycihiby0+YWRldi0+ZGV2LCAiJXAgcGluIGZhaWxlZFxu IiwgYm8pOwo+ICAJCWdvdG8gZXJyb3I7Cj4gIAl9Cj4gLQlyID0gYW1kZ3B1X3R0bV9iaW5kKGJv LT50Ym8udHRtLCAmYm8tPnRiby5tZW0pOwo+ICsJciA9IGFtZGdwdV90dG1fYmluZCgmYm8tPnRi bywgJmJvLT50Ym8ubWVtKTsKPiAgCWlmICh1bmxpa2VseShyKSkgewo+ICAJCWRldl9lcnIoYm8t PmFkZXYtPmRldiwgIiVwIGJpbmQgZmFpbGVkXG4iLCBibyk7Cj4gIAkJZ290byBlcnJvcjsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCj4gaW5kZXggOGUyNDdhYy4uYTkx OGYyOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRt LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKPiBAQCAt MTYwLDcgKzE2MCw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2luaXRfbWVtX3R5cGUoc3RydWN0IHR0 bV9ib19kZXZpY2UgKmJkZXYsIHVpbnQzMl90IHR5cGUsCj4gIAkJbWFuLT5kZWZhdWx0X2NhY2hp bmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIFRUTV9QTF9UVDoK PiAtCQltYW4tPmZ1bmMgPSAmdHRtX2JvX21hbmFnZXJfZnVuYzsKPiArCQltYW4tPmZ1bmMgPSAm YW1kZ3B1X2d0dF9tZ3JfZnVuYzsKPiAgCQltYW4tPmdwdV9vZmZzZXQgPSBhZGV2LT5tYy5ndHRf c3RhcnQ7Cj4gIAkJbWFuLT5hdmFpbGFibGVfY2FjaGluZyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkc7 Cj4gIAkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7Cj4gQEAgLTI3 Nyw3ICsyNzcsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV9tb3ZlX2JsaXQoc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0ICpibywKPiAgCj4gIAlzd2l0Y2ggKG9sZF9tZW0tPm1lbV90eXBlKSB7Cj4gIAlj YXNlIFRUTV9QTF9UVDoKPiAtCQlyID0gYW1kZ3B1X3R0bV9iaW5kKGJvLT50dG0sIG9sZF9tZW0p Owo+ICsJCXIgPSBhbWRncHVfdHRtX2JpbmQoYm8sIG9sZF9tZW0pOwo+ICAJCWlmIChyKQo+ICAJ CQlyZXR1cm4gcjsKPiAgCj4gQEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV9t b3ZlX2JsaXQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiAgCX0KPiAgCXN3aXRjaCAo bmV3X21lbS0+bWVtX3R5cGUpIHsKPiAgCWNhc2UgVFRNX1BMX1RUOgo+IC0JCXIgPSBhbWRncHVf dHRtX2JpbmQoYm8tPnR0bSwgbmV3X21lbSk7Cj4gKwkJciA9IGFtZGdwdV90dG1fYmluZChibywg bmV3X21lbSk7Cj4gIAkJaWYgKHIpCj4gIAkJCXJldHVybiByOwo+ICAKPiBAQCAtNjc2LDcgKzY3 Niw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3R0bV9iYWNrZW5kX2JpbmQoc3RydWN0IHR0bV90dCAq dHRtLAo+ICAJCQlyZXR1cm4gcjsKPiAgCQl9Cj4gIAl9Cj4gLQlndHQtPm9mZnNldCA9ICh1NjQp Ym9fbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUOwo+ICAJaWYgKCF0dG0tPm51bV9wYWdlcykgewo+ ICAJCVdBUk4oMSwgIm5vdGhpbmcgdG8gYmluZCAlbHUgcGFnZXMgZm9yIG1yZWcgJXAgYmFjayAl cCFcbiIsCj4gIAkJICAgICB0dG0tPm51bV9wYWdlcywgYm9fbWVtLCB0dG0pOwo+IEBAIC02OTcs MTYgKzY5NiwyNSBAQCBib29sIGFtZGdwdV90dG1faXNfYm91bmQoc3RydWN0IHR0bV90dCAqdHRt KQo+ICAJcmV0dXJuIGd0dCAmJiAhbGlzdF9lbXB0eSgmZ3R0LT5saXN0KTsKPiAgfQo+ICAKPiAt aW50IGFtZGdwdV90dG1fYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCB0dG1fbWVtX3Jl ZyAqYm9fbWVtKQo+ICtpbnQgYW1kZ3B1X3R0bV9iaW5kKHN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCAqYm8sIHN0cnVjdCB0dG1fbWVtX3JlZyAqYm9fbWVtKQo+ICB7Cj4gLQlzdHJ1Y3QgYW1kZ3B1 X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07Cj4gKwlzdHJ1Y3QgdHRtX3R0ICp0dG0gPSBiby0+ dHRtOwo+ICsJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopYm8tPnR0bTsKPiAg CXVpbnQzMl90IGZsYWdzOwo+ICAJaW50IHI7Cj4gIAo+ICAJaWYgKCF0dG0gfHwgYW1kZ3B1X3R0 bV9pc19ib3VuZCh0dG0pKQo+ICAJCXJldHVybiAwOwo+ICAKPiArCXIgPSBhbWRncHVfZ3R0X21n cl9hbGxvYygmYm8tPmJkZXYtPm1hbltUVE1fUExfVFRdLCBibywKPiArCQkJCSBOVUxMLCBib19t ZW0pOwo+ICsJaWYgKHIpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBHVFQg YWRkcmVzcyBzcGFjZSAoJWQpXG4iLCByKTsKPiArCQlyZXR1cm4gcjsKPiArCX0KPiArCj4gIAlm bGFncyA9IGFtZGdwdV90dG1fdHRfcHRlX2ZsYWdzKGd0dC0+YWRldiwgdHRtLCBib19tZW0pOwo+ ICsJZ3R0LT5vZmZzZXQgPSAodTY0KWJvX21lbS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKPiAgCXIg PSBhbWRncHVfZ2FydF9iaW5kKGd0dC0+YWRldiwgZ3R0LT5vZmZzZXQsIHR0bS0+bnVtX3BhZ2Vz LAo+ICAJCXR0bS0+cGFnZXMsIGd0dC0+dHRtLmRtYV9hZGRyZXNzLCBmbGFncyk7Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmggYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgKPiBpbmRleCAzZWU4MjVmLi45ODEy YzgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0u aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaAo+IEBAIC02 NSw2ICs2NSwxMyBAQCBzdHJ1Y3QgYW1kZ3B1X21tYW4gewo+ICAJc3RydWN0IGFtZGdwdV9tbWFu X2xydQkJCWd1YXJkOwo+ICB9Owo+ICAKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCB0dG1fbWVtX3R5 cGVfbWFuYWdlcl9mdW5jIGFtZGdwdV9ndHRfbWdyX2Z1bmM7Cj4gKwo+ICtpbnQgYW1kZ3B1X2d0 dF9tZ3JfYWxsb2Moc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4gKwkJCSBzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibywKPiArCQkJIGNvbnN0IHN0cnVjdCB0dG1fcGxhY2Ug KnBsYWNlLAo+ICsJCQkgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pOwo+ICsKPiAgaW50IGFtZGdw dV9jb3B5X2J1ZmZlcihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCj4gIAkJICAgICAgIHVpbnQ2 NF90IHNyY19vZmZzZXQsCj4gIAkJICAgICAgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCj4gQEAgLTc4 LDYgKzg1LDYgQEAgaW50IGFtZGdwdV9maWxsX2J1ZmZlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibywK PiAgCj4gIGludCBhbWRncHVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpOwo+ICBib29sIGFtZGdwdV90dG1faXNfYm91bmQoc3RydWN0IHR0bV90dCAq dHRtKTsKPiAtaW50IGFtZGdwdV90dG1fYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCB0 dG1fbWVtX3JlZyAqYm9fbWVtKTsKPiAraW50IGFtZGdwdV90dG1fYmluZChzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKmJvX21lbSk7Cj4gIAo+ICAjZW5k aWYKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1n ZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=