From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 5/5] drm/amdgpu: add VRAM manager Date: Mon, 29 Aug 2016 11:20:24 +0200 Message-ID: <1472462424-3052-6-git-send-email-deathsimple@vodafone.de> References: <1472462424-3052-1-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: <1472462424-3052-1-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 RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKU3BsaXQg VlJBTSBhbGxvY2F0aW9ucyBpbnRvIDRNQiBibG9ja3MuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3Rp YW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdS5oICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9kcnYuYyAgICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9vYmplY3QuYyAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9vYmplY3QuaCAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV90dG0uYyAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmggICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJh bV9tZ3IuYyB8IDIyMCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDkgZmlsZXMgY2hhbmdl ZCwgMjM5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZyYW1fbWdyLmMKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L01ha2VmaWxlCmluZGV4IGM4ZDRkN2MuLmJhMTJkM2MgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L01ha2VmaWxlCkBAIC0yOSw3ICsyOSw4IEBAIGFtZGdwdS15ICs9IGFtZGdwdV9k ZXZpY2UubyBhbWRncHVfa21zLm8gXAogCWFtZGdwdV9wbS5vIGF0b21iaW9zX2RwLm8gYW1kZ3B1 X2FmbXQubyBhbWRncHVfdHJhY2VfcG9pbnRzLm8gXAogCWF0b21iaW9zX2VuY29kZXJzLm8gYW1k Z3B1X3NhLm8gYXRvbWJpb3NfaTJjLm8gXAogCWFtZGdwdV9wcmltZS5vIGFtZGdwdV92bS5vIGFt ZGdwdV9pYi5vIGFtZGdwdV9wbGwubyBcCi0JYW1kZ3B1X3Vjb2RlLm8gYW1kZ3B1X2JvX2xpc3Qu byBhbWRncHVfY3R4Lm8gYW1kZ3B1X3N5bmMubworCWFtZGdwdV91Y29kZS5vIGFtZGdwdV9ib19s aXN0Lm8gYW1kZ3B1X2N0eC5vIGFtZGdwdV9zeW5jLm8gXAorCWFtZGdwdV92cmFtX21nci5vCiAK ICMgYWRkIGFzaWMgc3BlY2lmaWMgYmxvY2sKIGFtZGdwdS0kKENPTkZJR19EUk1fQU1ER1BVX0NJ SykrPSBjaWsubyBjaWtfaWgubyBrdl9zbWMubyBrdl9kcG0ubyBcCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdS5oCmluZGV4IGIyZDk1YTkuLjdlM2QzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdS5oCkBAIC05Niw2ICs5Niw3IEBAIGV4dGVybiB1bnNpZ25lZCBhbWRncHVfY2df bWFzazsKIGV4dGVybiB1bnNpZ25lZCBhbWRncHVfcGdfbWFzazsKIGV4dGVybiBpbnQgYW1kZ3B1 X3NjbGtfZGVlcF9zbGVlcF9lbjsKIGV4dGVybiBjaGFyICphbWRncHVfdmlydHVhbF9kaXNwbGF5 OworZXh0ZXJuIGludCBhbWRncHVfdnJhbV9wYWdlX3NwbGl0OwogCiAjZGVmaW5lIEFNREdQVV9X QUlUX0lETEVfVElNRU9VVF9JTl9NUwkgICAgICAgIDMwMDAKICNkZWZpbmUgQU1ER1BVX01BWF9V U0VDX1RJTUVPVVQJCQkxMDAwMDAJLyogMTAwIG1zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGV2aWNlLmMKaW5kZXggMzhmNTMxNS4uYjJkY2MxMSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwpAQCAtMTAwNCw2ICsxMDA0LDEyIEBA IHN0YXRpYyB2b2lkIGFtZGdwdV9jaGVja19hcmd1bWVudHMoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCiAJCQkgYW1kZ3B1X3ZtX2Jsb2NrX3NpemUpOwogCQlhbWRncHVfdm1fYmxvY2tfc2l6 ZSA9IDk7CiAJfQorCisJaWYgKGFtZGdwdV92cmFtX3BhZ2Vfc3BsaXQgIT0gLTEgJiYgYW1kZ3B1 X3ZyYW1fcGFnZV9zcGxpdCA8IDE2KSB7CisJCWRldl93YXJuKGFkZXYtPmRldiwgImludmFsaWQg VlJBTSBwYWdlIHNwbGl0ICglZClcbiIsCisJCQkgYW1kZ3B1X3ZyYW1fcGFnZV9zcGxpdCk7CisJ CWFtZGdwdV92cmFtX3BhZ2Vfc3BsaXQgPSAxMDI0OworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMKaW5kZXggNTZjODVlNi4uZGNlZjBiNCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYwpAQCAtODIsNiArODIsNyBAQCBpbnQg YW1kZ3B1X3ZtX3NpemUgPSA2NDsKIGludCBhbWRncHVfdm1fYmxvY2tfc2l6ZSA9IC0xOwogaW50 IGFtZGdwdV92bV9mYXVsdF9zdG9wID0gMDsKIGludCBhbWRncHVfdm1fZGVidWcgPSAwOworaW50 IGFtZGdwdV92cmFtX3BhZ2Vfc3BsaXQgPSAxMDI0OwogaW50IGFtZGdwdV9leHBfaHdfc3VwcG9y dCA9IDA7CiBpbnQgYW1kZ3B1X2RhbCA9IC0xOwogaW50IGFtZGdwdV9zY2hlZF9qb2JzID0gMzI7 CkBAIC0xNjEsNiArMTYyLDkgQEAgbW9kdWxlX3BhcmFtX25hbWVkKHZtX2ZhdWx0X3N0b3AsIGFt ZGdwdV92bV9mYXVsdF9zdG9wLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2bV9kZWJ1 ZywgIkRlYnVnIFZNIGhhbmRsaW5nICgwID0gZGlzYWJsZWQgKGRlZmF1bHQpLCAxID0gZW5hYmxl ZCkiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh2bV9kZWJ1ZywgYW1kZ3B1X3ZtX2RlYnVnLCBpbnQs IDA2NDQpOwogCitNT0RVTEVfUEFSTV9ERVNDKHZyYW1fcGFnZV9zcGxpdCwgIk51bWJlciBvZiBw YWdlcyBhZnRlciB3ZSBzcGxpdCBWUkFNIGFsbG9jYXRpb25zIChkZWZhdWx0IDEwMjQpIik7Citt b2R1bGVfcGFyYW1fbmFtZWQodnJhbV9wYWdlX3NwbGl0LCBhbWRncHVfdnJhbV9wYWdlX3NwbGl0 LCBpbnQsIDA0NDQpOworCiBNT0RVTEVfUEFSTV9ERVNDKGV4cF9od19zdXBwb3J0LCAiZXhwZXJp bWVudGFsIGh3IHN1cHBvcnQgKDEgPSBlbmFibGUsIDAgPSBkaXNhYmxlIChkZWZhdWx0KSkiKTsK IG1vZHVsZV9wYXJhbV9uYW1lZChleHBfaHdfc3VwcG9ydCwgYW1kZ3B1X2V4cF9od19zdXBwb3J0 LCBpbnQsIDA0NDQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0 LmMKaW5kZXggNzlmNjQxMy4uZDJkYWIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9vYmplY3QuYwpAQCAtOTMzLDYgKzkzMyw3IEBAIHU2NCBhbWRncHVfYm9fZ3B1X29m ZnNldChzdHJ1Y3QgYW1kZ3B1X2JvICpibykKIAkJICAgICAhYm8tPnBpbl9jb3VudCk7CiAJV0FS Tl9PTl9PTkNFKGJvLT50Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9WUkFNICYmCiAJCSAgICAg IShiby0+ZmxhZ3MgJiBBTURHUFVfR0VNX0NSRUFURV9WUkFNX0xJTkVBUikpOworCVdBUk5fT05f T05DRShiby0+dGJvLm1lbS5zdGFydCA9PSBBTURHUFVfQk9fSU5WQUxJRF9PRkZTRVQpOwogCiAJ cmV0dXJuIGJvLT50Ym8ub2Zmc2V0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X29iamVjdC5oCmluZGV4IGI2YTI3MzkuLmU0OTg0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmgKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxk cm0vYW1kZ3B1X2RybS5oPgogI2luY2x1ZGUgImFtZGdwdS5oIgogCisjZGVmaW5lIEFNREdQVV9C T19JTlZBTElEX09GRlNFVAlMT05HX01BWAorCiAvKioKICAqIGFtZGdwdV9tZW1fdHlwZV90b19k b21haW4gLSByZXR1cm4gZG9tYWluIGNvcnJlc3BvbmRpbmcgdG8gbWVtX3R5cGUKICAqIEBtZW1f dHlwZToJdHRtIG1lbW9yeSB0eXBlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRt LmMKaW5kZXggZGI4NjM4Yi4uOTk5MDk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV90dG0uYwpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2luaXRfbWVt X3R5cGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIHVpbnQzMl90IHR5cGUsCiAJCWJyZWFr OwogCWNhc2UgVFRNX1BMX1ZSQU06CiAJCS8qICJPbi1jYXJkIiB2aWRlbyByYW0gKi8KLQkJbWFu LT5mdW5jID0gJnR0bV9ib19tYW5hZ2VyX2Z1bmM7CisJCW1hbi0+ZnVuYyA9ICZhbWRncHVfdnJh bV9tZ3JfZnVuYzsKIAkJbWFuLT5ncHVfb2Zmc2V0ID0gYWRldi0+bWMudnJhbV9zdGFydDsKIAkJ bWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfRklYRUQgfAogCQkJICAgICBUVE1fTUVNVFlQ RV9GTEFHX01BUFBBQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3R0bS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCmlu ZGV4IDcyZjZiZmMuLjM2NWNlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmgKQEAgLTY1LDYgKzY1LDggQEAgc3RydWN0IGFtZGdwdV9tbWFuIHsKIAlzdHJ1Y3QgYW1k Z3B1X21tYW5fbHJ1CQkJZ3VhcmQ7CiB9OwogCitleHRlcm4gY29uc3Qgc3RydWN0IHR0bV9tZW1f dHlwZV9tYW5hZ2VyX2Z1bmMgYW1kZ3B1X3ZyYW1fbWdyX2Z1bmM7CisKIGludCBhbWRncHVfY29w eV9idWZmZXIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAogCQkgICAgICAgdWludDY0X3Qgc3Jj X29mZnNldCwKIAkJICAgICAgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV92cmFtX21nci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjZjNWYzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHly aWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOiBDaHJpc3RpYW4gS8O2bmlnCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1Q Lmg+CisjaW5jbHVkZSAiYW1kZ3B1LmgiCisKK3N0cnVjdCBhbWRncHVfdnJhbV9tZ3IgeworCXN0 cnVjdCBkcm1fbW0gbW07CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworLyoqCisgKiBhbWRncHVf dnJhbV9tZ3JfaW5pdCAtIGluaXQgVlJBTSBtYW5hZ2VyIGFuZCBEUk0gTU0KKyAqCisgKiBAbWFu OiBUVE0gbWVtb3J5IHR5cGUgbWFuYWdlcgorICogQHBfc2l6ZTogbWF4aW11bSBzaXplIG9mIFZS QU0KKyAqCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgVlJBTSBtYW5hZ2VyLgorICov CitzdGF0aWMgaW50IGFtZGdwdV92cmFtX21ncl9pbml0KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFu YWdlciAqbWFuLAorCQkJCXVuc2lnbmVkIGxvbmcgcF9zaXplKQoreworCXN0cnVjdCBhbWRncHVf dnJhbV9tZ3IgKm1ncjsKKworCW1nciA9IGt6YWxsb2Moc2l6ZW9mKCptZ3IpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIW1ncikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fbW1faW5pdCgmbWdyLT5t bSwgMCwgcF9zaXplKTsKKwlzcGluX2xvY2tfaW5pdCgmbWdyLT5sb2NrKTsKKwltYW4tPnByaXYg PSBtZ3I7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYW1kZ3B1X3ZyYW1fbWdyX2ZpbmkgLSBm cmVlIGFuZCBkZXN0cm95IFZSQU0gbWFuYWdlcgorICoKKyAqIEBtYW46IFRUTSBtZW1vcnkgdHlw ZSBtYW5hZ2VyCisgKgorICogRGVzdG9yeSBhbmQgZnJlZSB0aGUgVlJBTSBtYW5hZ2VyLCByZXR1 cm5zIC1FQlVTWSBpZiByYW5nZXMgYXJlIHN0aWxsCisgKiBhbGxvY2F0ZWQgaW5zaWRlIGl0Lgor ICovCitzdGF0aWMgaW50IGFtZGdwdV92cmFtX21ncl9maW5pKHN0cnVjdCB0dG1fbWVtX3R5cGVf bWFuYWdlciAqbWFuKQoreworCXN0cnVjdCBhbWRncHVfdnJhbV9tZ3IgKm1nciA9IG1hbi0+cHJp djsKKworCXNwaW5fbG9jaygmbWdyLT5sb2NrKTsKKwlpZiAoZHJtX21tX2NsZWFuKCZtZ3ItPm1t KSkgeworCQlkcm1fbW1fdGFrZWRvd24oJm1nci0+bW0pOworCQlzcGluX3VubG9jaygmbWdyLT5s b2NrKTsKKwkJa2ZyZWUobWdyKTsKKwkJbWFuLT5wcml2ID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJ fQorCXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2spOworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qKgor ICogYW1kZ3B1X3ZyYW1fbWdyX25ldyAtIGFsbG9jYXRlIG5ldyByYW5nZXMKKyAqCisgKiBAbWFu OiBUVE0gbWVtb3J5IHR5cGUgbWFuYWdlcgorICogQHRibzogVFRNIEJPIHdlIG5lZWQgdGhpcyBy YW5nZSBmb3IKKyAqIEBwbGFjZTogcGxhY2VtZW50IGZsYWdzIGFuZCByZXN0cmljdGlvbnMKKyAq IEBtZW06IHRoZSByZXN1bHRpbmcgbWVtIG9iamVjdAorICoKKyAqIEFsbG9jYXRlIFZSQU0gZm9y IHRoZSBnaXZlbiBCTy4KKyAqLworc3RhdGljIGludCBhbWRncHVfdnJhbV9tZ3JfbmV3KHN0cnVj dCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAorCQkJICAgICAgIHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqdGJvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0dG1fcGxhY2UgKnBsYWNlLAor CQkJICAgICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQoreworCXN0cnVjdCBhbWRncHVfYm8g KmJvID0gY29udGFpbmVyX29mKHRibywgc3RydWN0IGFtZGdwdV9ibywgdGJvKTsKKwlzdHJ1Y3Qg YW1kZ3B1X3ZyYW1fbWdyICptZ3IgPSBtYW4tPnByaXY7CisJc3RydWN0IGRybV9tbSAqbW0gPSAm bWdyLT5tbTsKKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGVzOworCWVudW0gZHJtX21tX3NlYXJj aF9mbGFncyBzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQ7CisJZW51bSBkcm1fbW1fYWxs b2NhdG9yX2ZsYWdzIGFmbGFncyA9IERSTV9NTV9DUkVBVEVfREVGQVVMVDsKKwl1bnNpZ25lZCBs b25nIGxwZm4sIG51bV9ub2RlcywgcGFnZXNfcGVyX25vZGUsIHBhZ2VzX2xlZnQ7CisJdW5zaWdu ZWQgaTsKKwlpbnQgcjsKKworCWxwZm4gPSBwbGFjZS0+bHBmbjsKKwlpZiAoIWxwZm4pCisJCWxw Zm4gPSBtYW4tPnNpemU7CisKKwlpZiAoYm8tPmZsYWdzICYgQU1ER1BVX0dFTV9DUkVBVEVfVlJB TV9MSU5FQVIgfHwKKwkgICAgYW1kZ3B1X3ZyYW1fcGFnZV9zcGxpdCA9PSAtMSkgeworCQlwYWdl c19wZXJfbm9kZSA9IH4wdWw7CisJCW51bV9ub2RlcyA9IDE7CisJfSBlbHNlIHsKKwkJcGFnZXNf cGVyX25vZGUgPSBtYXgoKHVpbnQzMl90KWFtZGdwdV92cmFtX3BhZ2Vfc3BsaXQsCisJCQkJICAg ICBtZW0tPnBhZ2VfYWxpZ25tZW50KTsKKwkJbnVtX25vZGVzID0gRElWX1JPVU5EX1VQKG1lbS0+ bnVtX3BhZ2VzLCBwYWdlc19wZXJfbm9kZSk7CisJfQorCisJbm9kZXMgPSBrY2FsbG9jKG51bV9u b2Rlcywgc2l6ZW9mKCpub2RlcyksIEdGUF9LRVJORUwpOworCWlmICghbm9kZXMpCisJCXJldHVy biAtRU5PTUVNOworCisJaWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pIHsK KwkJc2ZsYWdzID0gRFJNX01NX1NFQVJDSF9CRUxPVzsKKwkJYWZsYWdzID0gRFJNX01NX0NSRUFU RV9UT1A7CisJfQorCisJcGFnZXNfbGVmdCA9IG1lbS0+bnVtX3BhZ2VzOworCisJc3Bpbl9sb2Nr KCZtZ3ItPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBudW1fbm9kZXM7ICsraSkgeworCQl1bnNp Z25lZCBsb25nIHBhZ2VzID0gbWluKHBhZ2VzX2xlZnQsIHBhZ2VzX3Blcl9ub2RlKTsKKwkJdWlu dDMyX3QgYWxpZ25tZW50ID0gbWVtLT5wYWdlX2FsaWdubWVudDsKKworCQlpZiAocGFnZXMgPT0g cGFnZXNfcGVyX25vZGUpCisJCQlhbGlnbm1lbnQgPSBwYWdlc19wZXJfbm9kZTsKKwkJZWxzZQor CQkJc2ZsYWdzIHw9IERSTV9NTV9TRUFSQ0hfQkVTVDsKKworCQlyID0gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlX2dlbmVyaWMobW0sICZub2Rlc1tpXSwgcGFnZXMsCisJCQkJCQkJYWxpZ25t ZW50LCAwLAorCQkJCQkJCXBsYWNlLT5mcGZuLCBscGZuLAorCQkJCQkJCXNmbGFncywgYWZsYWdz KTsKKwkJaWYgKHVubGlrZWx5KHIpKQorCQkJZ290byBlcnJvcjsKKworCQlwYWdlc19sZWZ0IC09 IHBhZ2VzOworCX0KKwlzcGluX3VubG9jaygmbWdyLT5sb2NrKTsKKworCW1lbS0+c3RhcnQgPSBu dW1fbm9kZXMgPT0gMSA/IG5vZGVzWzBdLnN0YXJ0IDogQU1ER1BVX0JPX0lOVkFMSURfT0ZGU0VU OworCW1lbS0+bW1fbm9kZSA9IG5vZGVzOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXdoaWxl IChpLS0pCisJCWRybV9tbV9yZW1vdmVfbm9kZSgmbm9kZXNbaV0pOworCXNwaW5fdW5sb2NrKCZt Z3ItPmxvY2spOworCisJa2ZyZWUobm9kZXMpOworCXJldHVybiByID09IC1FTk9TUEMgPyAwIDog cjsKK30KKworLyoqCisgKiBhbWRncHVfdnJhbV9tZ3JfZGVsIC0gZnJlZSByYW5nZXMKKyAqCisg KiBAbWFuOiBUVE0gbWVtb3J5IHR5cGUgbWFuYWdlcgorICogQHRibzogVFRNIEJPIHdlIG5lZWQg dGhpcyByYW5nZSBmb3IKKyAqIEBwbGFjZTogcGxhY2VtZW50IGZsYWdzIGFuZCByZXN0cmljdGlv bnMKKyAqIEBtZW06IFRUTSBtZW1vcnkgb2JqZWN0CisgKgorICogRnJlZSB0aGUgYWxsb2NhdGVk IFZSQU0gYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIGFtZGdwdV92cmFtX21ncl9kZWwoc3RydWN0 IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkJc3RydWN0IHR0bV9tZW1fcmVnICptZW0p Cit7CisJc3RydWN0IGFtZGdwdV92cmFtX21nciAqbWdyID0gbWFuLT5wcml2OworCXN0cnVjdCBk cm1fbW1fbm9kZSAqbm9kZXMgPSBtZW0tPm1tX25vZGU7CisJdW5zaWduZWQgaSwgcGFnZXMgPSBt ZW0tPm51bV9wYWdlczsKKworCWlmICghbWVtLT5tbV9ub2RlKQorCQlyZXR1cm47CisKKwlzcGlu X2xvY2soJm1nci0+bG9jayk7CisJZm9yIChpID0gMDsgcGFnZXM7ICsraSkgeworCQlwYWdlcyAt PSBub2Rlc1tpXS5zaXplOworCQlkcm1fbW1fcmVtb3ZlX25vZGUoJm5vZGVzW2ldKTsKKwl9CisJ c3Bpbl91bmxvY2soJm1nci0+bG9jayk7CisKKwlrZnJlZShtZW0tPm1tX25vZGUpOworCW1lbS0+ bW1fbm9kZSA9IE5VTEw7Cit9CisKKy8qKgorICogYW1kZ3B1X3ZyYW1fbWdyX2RlYnVnIC0gZHVt cCBWUkFNIHRhYmxlCisgKgorICogQG1hbjogVFRNIG1lbW9yeSB0eXBlIG1hbmFnZXIKKyAqIEBw cmVmaXg6IHRleHQgcHJlZml4CisgKgorICogRHVtcCB0aGUgdGFibGUgY29udGVudCB1c2luZyBw cmludGsuCisgKi8KK3N0YXRpYyB2b2lkIGFtZGdwdV92cmFtX21ncl9kZWJ1ZyhzdHJ1Y3QgdHRt X21lbV90eXBlX21hbmFnZXIgKm1hbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlz dHJ1Y3QgYW1kZ3B1X3ZyYW1fbWdyICptZ3IgPSBtYW4tPnByaXY7CisKKwlzcGluX2xvY2soJm1n ci0+bG9jayk7CisJZHJtX21tX2RlYnVnX3RhYmxlKCZtZ3ItPm1tLCBwcmVmaXgpOworCXNwaW5f dW5sb2NrKCZtZ3ItPmxvY2spOworfQorCitjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFn ZXJfZnVuYyBhbWRncHVfdnJhbV9tZ3JfZnVuYyA9IHsKKwlhbWRncHVfdnJhbV9tZ3JfaW5pdCwK KwlhbWRncHVfdnJhbV9tZ3JfZmluaSwKKwlhbWRncHVfdnJhbV9tZ3JfbmV3LAorCWFtZGdwdV92 cmFtX21ncl9kZWwsCisJYW1kZ3B1X3ZyYW1fbWdyX2RlYnVnCit9OwotLSAKMi41LjAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGlu ZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=