From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [RFC PATCH 03/42] drm/i915: buddy allocator Date: Thu, 14 Feb 2019 14:57:01 +0000 Message-ID: <20190214145740.14521-4-matthew.auld@intel.com> References: <20190214145740.14521-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A8596E90E for ; Thu, 14 Feb 2019 14:57:46 +0000 (UTC) In-Reply-To: <20190214145740.14521-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org UmVhbGx5IHNpbXBseSBidWRkeSBhbGxvY2F0b3IuCgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1 bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5s YWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBBYmRpZWwgSmFudWxndWUgPGFiZGllbC5qYW51 bGd1ZUBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg ICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2J1 ZGR5LmMgICAgICAgICB8IDIwNiArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fYnVkZHkuaCAgICAgICAgIHwgMTE4ICsrKysrKysrKysKIC4uLi9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2J1ZGR5LmMgICB8IDIwOSArKysrKysrKysrKysrKysr KysKIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSAr CiA1IGZpbGVzIGNoYW5nZWQsIDUzNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYnVkZHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2J1ZGR5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fYnVkZHkuYwoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKaW5kZXggMTc4N2UxMjk5YjFiLi5lNWNlODEzZDE5MzYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC02MSw2ICs2MSw3IEBAIGk5MTUteSArPSBcCiAJICBpOTE1X2FjdGl2ZS5v IFwKIAkgIGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGk5MTVfZ2VtX2JhdGNoX3Bvb2wubyBcCisJ ICBpOTE1X2dlbV9idWRkeS5vIFwKIAkgIGk5MTVfZ2VtX2NsZmx1c2gubyBcCiAJICBpOTE1X2dl bV9jb250ZXh0Lm8gXAogCSAgaTkxNV9nZW1fZG1hYnVmLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYnVkZHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2J1ZGR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40 ZGM2ODhjMDkxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9idWRkeS5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTgg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09G VFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPgorCisjaW5jbHVkZSAiaTkxNV9nZW1fYnVkZHkuaCIKKyNpbmNsdWRlICJpOTE1 X2dlbS5oIgorCitpbnQgaTkxNV9nZW1fYnVkZHlfaW5pdChzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlf bW0gKm1tLCB1NjQgc2l6ZSwgdTY0IG1pbl9zaXplKQoreworCXVuc2lnbmVkIGludCBpOworCisJ LyoKKwkgKiBYWFg6IGlmIG5vdCBhIHBvd2VyIG9mIDIsIG1heWJlIHNwbGl0IGludG8gcG93ZXIg b2YgMiBibG9ja3MsCisJICogZWZmZWN0aXZlbHkgaGF2aW5nIG11bHRpcGxlIHJvb3RzLCBzaW1p bGFyIHRvIGlmIHdlIGhhZCBhIGdsb2JhbAorCSAqIE1BWF9PUkRFUi4KKwkgKi8KKwlzaXplID0g cm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7CisJbWluX3NpemUgPSByb3VuZHVwX3Bvd19vZl90 d28obWluX3NpemUpOworCisJaWYgKHNpemUgPCBtaW5fc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAobWluX3NpemUgPCBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJbW0t Pm1heF9vcmRlciA9IGlsb2cyKHNpemUpIC0gaWxvZzIobWluX3NpemUpOworCW1tLT5taW5fc2l6 ZSA9IG1pbl9zaXplOworCisJbW0tPmZyZWVfbGlzdCA9IGttYWxsb2NfYXJyYXkobW0tPm1heF9v cmRlciArIDEsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAorCQkJCSAgICAg IEdGUF9LRVJORUwpOworCWlmICghbW0tPmZyZWVfbGlzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlmb3IgKGkgPSAwOyBpIDw9IG1tLT5tYXhfb3JkZXI7ICsraSkKKwkJSU5JVF9MSVNUX0hFQUQo Jm1tLT5mcmVlX2xpc3RbaV0pOworCisJbW0tPmJsb2NrcyA9IEtNRU1fQ0FDSEUoaTkxNV9nZW1f YnVkZHlfYmxvY2ssIFNMQUJfSFdDQUNIRV9BTElHTik7CisJaWYgKCFtbS0+YmxvY2tzKQorCQln b3RvIG91dF9mcmVlX2xpc3Q7CisKKwltbS0+cm9vdCA9IGttZW1fY2FjaGVfemFsbG9jKG1tLT5i bG9ja3MsIEdGUF9LRVJORUwpOworCWlmICghbW0tPnJvb3QpCisJCWdvdG8gb3V0X2ZyZWVfYmxv Y2tzOworCisJbW0tPnJvb3QtPmhlYWRlciA9IG1tLT5tYXhfb3JkZXI7CisKKwlsaXN0X2FkZCgm bW0tPnJvb3QtPmxpbmssICZtbS0+ZnJlZV9saXN0W21tLT5tYXhfb3JkZXJdKTsKKworCXJldHVy biAwOworCitvdXRfZnJlZV9ibG9ja3M6CisJa21lbV9jYWNoZV9kZXN0cm95KG1tLT5ibG9ja3Mp Oworb3V0X2ZyZWVfbGlzdDoKKwlrZnJlZShtbS0+ZnJlZV9saXN0KTsKKworCXJldHVybiAtRU5P TUVNOworfQorCit2b2lkIGk5MTVfZ2VtX2J1ZGR5X2Zpbmkoc3RydWN0IGk5MTVfZ2VtX2J1ZGR5 X21tICptbSkKK3sKKwlpZiAoV0FSTl9PTihpOTE1X2dlbV9idWRkeV9ibG9ja19hbGxvY2F0ZWQo bW0tPnJvb3QpKSkKKwkJcmV0dXJuOworCisJa2ZyZWUobW0tPmZyZWVfbGlzdCk7CisJa21lbV9j YWNoZV9mcmVlKG1tLT5ibG9ja3MsIG1tLT5yb290KTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobW0t PmJsb2Nrcyk7Cit9CisKKy8qCisgKiBUaGUgJ29yZGVyJyBoZXJlIG1lYW5zOgorICoKKyAqIDAg PSAyXjAgKiBtbS0+bWluX3NpemUKKyAqIDEgPSAyXjEgKiBtbS0+bWluX3NpemUKKyAqIDIgPSAy XjIgKiBtbS0+bWluX3NpemUKKyAqIC4uLgorICovCitzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxv Y2sgKgoraTkxNV9nZW1fYnVkZHlfYWxsb2Moc3RydWN0IGk5MTVfZ2VtX2J1ZGR5X21tICptbSwg dW5zaWduZWQgaW50IG9yZGVyKQoreworCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxv Y2sgPSBOVUxMOworCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqcm9vdDsKKwl1bnNpZ25l ZCBpbnQgaTsKKworCWZvciAoaSA9IG9yZGVyOyBpIDw9IG1tLT5tYXhfb3JkZXI7ICsraSkgewor CQlibG9jayA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmbW0tPmZyZWVfbGlzdFtpXSwKKwkJ CQkJCSBzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2ssCisJCQkJCQkgbGluayk7CisJCWlmIChi bG9jaykKKwkJCWJyZWFrOworCX0KKworCWlmICghYmxvY2spCisJCXJldHVybiBFUlJfUFRSKC1F Tk9TUEMpOworCisJR0VNX0JVR19PTihpOTE1X2dlbV9idWRkeV9ibG9ja19hbGxvY2F0ZWQoYmxv Y2spKTsKKworCXJvb3QgPSBibG9jazsKKworCXdoaWxlIChpICE9IG9yZGVyKSB7CisJCXU2NCBv ZmZzZXQgPSBpOTE1X2dlbV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spOworCisJCWJsb2NrLT5s ZWZ0ID0ga21lbV9jYWNoZV96YWxsb2MobW0tPmJsb2NrcywgR0ZQX0tFUk5FTCk7CisJCWlmICgh YmxvY2stPmxlZnQpCisJCQlnb3RvIG91dF9mcmVlX2Jsb2NrczsKKworCQlibG9jay0+bGVmdC0+ aGVhZGVyID0gb2Zmc2V0OworCQlibG9jay0+bGVmdC0+aGVhZGVyIHw9IEk5MTVfR0VNX0JVRERZ X0hFQURFUl9BTExPQ0FURUQ7CisJCWJsb2NrLT5sZWZ0LT5oZWFkZXIgfD0gaSAtIDE7CisJCWJs b2NrLT5sZWZ0LT5wYXJlbnQgPSBibG9jazsKKworCQlJTklUX0xJU1RfSEVBRCgmYmxvY2stPmxl ZnQtPmxpbmspOworCisJCWJsb2NrLT5yaWdodCA9IGttZW1fY2FjaGVfemFsbG9jKG1tLT5ibG9j a3MsIEdGUF9LRVJORUwpOworCQlpZiAoIWJsb2NrLT5yaWdodCkgeworCQkJa21lbV9jYWNoZV9m cmVlKG1tLT5ibG9ja3MsIGJsb2NrLT5sZWZ0KTsKKwkJCWdvdG8gb3V0X2ZyZWVfYmxvY2tzOwor CQl9CisKKwkJYmxvY2stPnJpZ2h0LT5oZWFkZXIgPSBvZmZzZXQgKyAoQklUKGkgLSAxKSAqIG1t LT5taW5fc2l6ZSk7CisJCWJsb2NrLT5yaWdodC0+aGVhZGVyIHw9IGkgLSAxOworCQlibG9jay0+ cmlnaHQtPnBhcmVudCA9IGJsb2NrOworCisJCWxpc3RfYWRkKCZibG9jay0+cmlnaHQtPmxpbmss ICZtbS0+ZnJlZV9saXN0W2kgLSAxXSk7CisKKwkJYmxvY2sgPSBibG9jay0+bGVmdDsKKwkJaS0t OworCX0KKworCXJvb3QtPmhlYWRlciB8PSBJOTE1X0dFTV9CVUREWV9IRUFERVJfQUxMT0NBVEVE OworCWxpc3RfZGVsKCZyb290LT5saW5rKTsKKworCXJldHVybiBibG9jazsKKworb3V0X2ZyZWVf YmxvY2tzOgorCXdoaWxlIChibG9jayAhPSByb290KSB7CisJCWlmIChibG9jay0+cmlnaHQpCisJ CQlsaXN0X2RlbCgmYmxvY2stPnJpZ2h0LT5saW5rKTsKKworCQlrbWVtX2NhY2hlX2ZyZWUobW0t PmJsb2NrcywgYmxvY2stPmxlZnQpOworCQlrbWVtX2NhY2hlX2ZyZWUobW0tPmJsb2NrcywgYmxv Y2stPnJpZ2h0KTsKKworCQlibG9jayA9IGJsb2NrLT5wYXJlbnQ7CisJfQorCisJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cit9CisKK3ZvaWQgaTkxNV9nZW1fYnVkZHlfZnJlZShzdHJ1Y3QgaTkx NV9nZW1fYnVkZHlfbW0gKm1tLAorCQkJIHN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxv Y2spCit7CisJR0VNX0JVR19PTighaTkxNV9nZW1fYnVkZHlfYmxvY2tfYWxsb2NhdGVkKGJsb2Nr KSk7CisKKwl3aGlsZSAoYmxvY2stPnBhcmVudCkgeworCQlzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlf YmxvY2sgKmJ1ZGR5OworCQlzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgKnBhcmVudDsKKwor CQlwYXJlbnQgPSBibG9jay0+cGFyZW50OworCisJCWlmIChwYXJlbnQtPmxlZnQgPT0gYmxvY2sp CisJCQlidWRkeSA9IHBhcmVudC0+cmlnaHQ7CisJCWVsc2UKKwkJCWJ1ZGR5ID0gcGFyZW50LT5s ZWZ0OworCisJCWlmIChpOTE1X2dlbV9idWRkeV9ibG9ja19hbGxvY2F0ZWQoYnVkZHkpKQorCQkJ YnJlYWs7CisKKwkJbGlzdF9kZWwoJmJ1ZGR5LT5saW5rKTsKKworCQlrbWVtX2NhY2hlX2ZyZWUo bW0tPmJsb2NrcywgYmxvY2spOworCQlrbWVtX2NhY2hlX2ZyZWUobW0tPmJsb2NrcywgYnVkZHkp OworCisJCWJsb2NrID0gcGFyZW50OworCX0KKworCWJsb2NrLT5oZWFkZXIgJj0gfkk5MTVfR0VN X0JVRERZX0hFQURFUl9BTExPQ0FURUQ7CisJbGlzdF9hZGQoJmJsb2NrLT5saW5rLAorCQkgJm1t LT5mcmVlX2xpc3RbaTkxNV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spXSk7Cit9CisKKyNp ZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKKyNpbmNsdWRlICJzZWxmdGVz dHMvaTkxNV9nZW1fYnVkZHkuYyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fYnVkZHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2J1 ZGR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iM2YwNmU5MDg2 YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9idWRk eS5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisKKyNpZm5kZWYgX19JOTE1X0dFTV9CVUREWV9IX18KKyNkZWZpbmUgX19JOTE1X0dF TV9CVUREWV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCitzdHJ1Y3QgbGlzdF9o ZWFkOworCitzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgeworI2RlZmluZSBJOTE1X0dFTV9C VUREWV9IRUFERVJfT0ZGU0VUICh+KEJJVCgxMikgLSAxKSkKKyNkZWZpbmUgSTkxNV9HRU1fQlVE RFlfSEVBREVSX0FMTE9DQVRFRCBCSVQoMTEpCisjZGVmaW5lIEk5MTVfR0VNX0JVRERZX0hFQURF Ul9PUkRFUiAoQklUKDExKSAtIDEpCisJdTY0IGhlYWRlcjsKKworCXN0cnVjdCBpOTE1X2dlbV9i dWRkeV9ibG9jayAqbGVmdDsKKwlzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgKnJpZ2h0Owor CXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqcGFyZW50OworCisJLyogQWx3YXlzIHNhZmUg dG8gcmV1c2Ugb25jZSB0aGUgYmxvY2sgaXMgYWxsb2NhdGVkICovCisJc3RydWN0IGxpc3RfaGVh ZCBsaW5rOworfTsKKworLyoKKyAqIEJpbmFyeSBCdWRkeSBTeXN0ZW0KKyAqCisgKiBYWFg6IElk ZWFseSB3ZSB3b3VsZCBqdXN0IHVzZSB0aGUgaW50cnVzaXZlIHZlcnNpb24gb2YgdGhlIGJ1ZGR5 IHN5c3RlbSBpLmUKKyAqIHRoZSBjbGFzc2ljYWwgdmVyc2lvbiwgd2hlcmUgd2Ugc3RvcmUgdGhl IGJsb2NrIGluZm8gaW4gdGhlIGZyZWUgYmxvY2tzLCBidXQKKyAqIGlmIHdlIGFyZSBkZWFsaW5n IHdpdGggc29tZXRoaW5nIGxpa2Ugc3RvbGVuIG1lbW9yeSwgdGhpcyB3b3VsZCB2ZXJ5IHF1aWNr bHkKKyAqIHR1cm4gaW50byBhIGR1bWJzdGVyIGZpcmUgd2l0aCBoYXZpbmcgdG8gbWVtcmVtYXAv aW9yZW1hcCBwYXJ0cyBvZiBzdG9sZW4gaW4KKyAqIHRoZSBhbGxvY2F0b3IuCisgKi8KK3N0cnVj dCBpOTE1X2dlbV9idWRkeV9tbSB7CisJdW5zaWduZWQgaW50IG1heF9vcmRlcjsKKwkvKiBNdXN0 IGJlIGF0IGxlYXN0IFBBR0VfU0laRSAqLworCXU2NCBtaW5fc2l6ZTsKKworCXN0cnVjdCBrbWVt X2NhY2hlICpibG9ja3M7CisKKwkvKiBNYWludGFpbiBhIGZyZWUgbGlzdCBmb3IgZWFjaCBvcmRl ci4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlX2xpc3Q7CisKKwkvKgorCSAqIE1haW50YWlu IGFuIGV4cGxpY2l0IGJpbmFyeSB0cmVlIHRvIHRyYWNrIHRoZSBhbGxvY2F0aW9uIG9mIHRoZQor CSAqIGFkZHJlc3Mgc3BhY2UuIFRoaXMgZ2l2ZXMgdXMgYSBzaW1wbGUgd2F5IG9mIGZpbmRpbmcg YSBidWRkeSBibG9jaworCSAqIGFuZCBwZXJmb3JtaW5nIHRoZSBwb3RlbnRpYWxseSByZWN1cnNp dmUgbWVyZ2Ugc3RlcCB3aGVuIGZyZWVpbmcgYQorCSAqIGJsb2NrLiAgTm9kZXMgYXJlIGVpdGhl ciBhbGxvY2F0ZWQgb3IgZnJlZSwgaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGwKKwkgKiBhbHNvIGV4 aXN0IG9uIHRoZSByZXNwZWN0aXZlIGZyZWUgbGlzdC4KKwkgKi8KKwlzdHJ1Y3QgaTkxNV9nZW1f YnVkZHlfYmxvY2sgKnJvb3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHU2NAoraTkxNV9nZW1fYnVk ZHlfYmxvY2tfb2Zmc2V0KHN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJ cmV0dXJuIGJsb2NrLT5oZWFkZXIgJiBJOTE1X0dFTV9CVUREWV9IRUFERVJfT0ZGU0VUOworfQor CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoraTkxNV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIo c3RydWN0IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlyZXR1cm4gYmxvY2stPmhl YWRlciAmIEk5MTVfR0VNX0JVRERZX0hFQURFUl9PUkRFUjsKK30KKworc3RhdGljIGlubGluZSBi b29sCitpOTE1X2dlbV9idWRkeV9ibG9ja19hbGxvY2F0ZWQoc3RydWN0IGk5MTVfZ2VtX2J1ZGR5 X2Jsb2NrICpibG9jaykKK3sKKwlyZXR1cm4gYmxvY2stPmhlYWRlciAmIEk5MTVfR0VNX0JVRERZ X0hFQURFUl9BTExPQ0FURUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0CitpOTE1X2dlbV9idWRk eV9ibG9ja19zaXplKHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAqbW0sCisJCSAgICAgICAgICBz dHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBCSVQoaTkxNV9n ZW1fYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spKSAqIG1tLT5taW5fc2l6ZTsKK30KKworc3RhdGlj IGlubGluZSB1NjQgaTkxNV9nZW1fYnVkZHlfc2l6ZShzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfbW0g Km1tKQoreworCXJldHVybiBpOTE1X2dlbV9idWRkeV9ibG9ja19zaXplKG1tLCBtbS0+cm9vdCk7 Cit9CisKK2ludCBpOTE1X2dlbV9idWRkeV9pbml0KHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAq bW0sCisJCQl1NjQgc2l6ZSwKKwkJCXU2NCBtaW5fc2l6ZSk7CisKK3ZvaWQgaTkxNV9nZW1fYnVk ZHlfZmluaShzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfbW0gKm1tKTsKKworc3RydWN0IGk5MTVfZ2Vt X2J1ZGR5X2Jsb2NrICoKK2k5MTVfZ2VtX2J1ZGR5X2FsbG9jKHN0cnVjdCBpOTE1X2dlbV9idWRk eV9tbSAqbW0sCisJCSAgICAgdW5zaWduZWQgaW50IG9yZGVyKTsKKwordm9pZCBpOTE1X2dlbV9i dWRkeV9mcmVlKHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAqbW0sCisJCQkgc3RydWN0IGk5MTVf Z2VtX2J1ZGR5X2Jsb2NrICpibG9jayk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2J1ZGR5LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fYnVkZHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmM2NzgyYTM5YTFlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9idWRkeS5jCkBAIC0wLDAgKzEsMjA5IEBA CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICIu Li9pOTE1X3NlbGZ0ZXN0LmgiCisKKyNkZWZpbmUgU1pfNjRHICgxVUxMIDw8IDM2KQorCitzdGF0 aWMgaW50IGlndF9idWRkeV9pbml0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fYnVk ZHlfbW0gbW07CisJdTY0IHNpemU7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKHNpemUgPSBQQUdF X1NJWkU7IHNpemUgPD0gU1pfNjRHOyBzaXplIDw8PSAxKSB7CisJCXN0cnVjdCBpOTE1X2dlbV9i dWRkeV9ibG9jayAqYmxvY2s7CisKKwkJZXJyID0gaTkxNV9nZW1fYnVkZHlfaW5pdCgmbW0sIHNp emUsIFBBR0VfU0laRSk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiYnVkZHlfaW5pdCB3aXRo IHNpemU9JWxseFxuIGZhaWxlZCglZClcbiIsCisJCQkgICAgICAgc2l6ZSwgZXJyKTsKKwkJCXJl dHVybiBlcnI7CisJCX0KKworCQlibG9jayA9IGk5MTVfZ2VtX2J1ZGR5X2FsbG9jKCZtbSwgbW0u bWF4X29yZGVyKTsKKwkJaWYgKElTX0VSUihibG9jaykpIHsKKwkJCWVyciA9IFBUUl9FUlIoYmxv Y2spOworCQkJcHJfZXJyKCJidWRkeV9hbGxvYyB3aXRoIHNpemU9JWxseFxuIGZhaWxlZCglZClc biIsCisJCQkgICAgICAgc2l6ZSwgZXJyKTsKKwkJCWdvdG8gb3V0X2J1ZGR5X2Zpbmk7CisJCX0K KworCQlpZiAoaTkxNV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spICE9IG1tLm1heF9vcmRl cikgeworCQkJcHJfZXJyKCJidWRkeV9hbGxvYyBzaXplIG1pc21hdGNoXG4iKTsKKwkJCWVyciA9 IC1FSU5WQUw7CisJCX0KKworCQlpZiAoaTkxNV9nZW1fYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2Nr KSAhPSAwKSB7CisJCQlwcl9lcnIoImJ1ZGR5X2FsbG9jIG9mZnNldCBtaXNtYXRjaFxuIik7CisJ CQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZtbS5mcmVlX2xpc3Rb bW0ubWF4X29yZGVyXSkpIHsKKwkJCXByX2VycigiYnVkZHlfYWxsb2Mgc3RhdGUgbWlzbWF0Y2gs IGJsb2NrIGlzIG9uIGZyZWUgbGlzdFxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJ aWYgKGJsb2NrICE9IG1tLnJvb3QpIHsKKwkJCXByX2VycigiYnVkZHlfYWxsb2Mgc3RhdGUgbWlz bWF0Y2gsIGJsb2NrICE9IHJvb3RcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJCWlm IChibG9jay0+bGVmdCB8fCBibG9jay0+cmlnaHQpIHsKKwkJCXByX2VycigiYnVkZHlfYWxsb2Mg c3RhdGUgbWlzbWF0Y2gsIGJsb2NrIGlzIG5vdCBsZWFmXG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7 CisJCX0KKworCQlpOTE1X2dlbV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOworCisJCWlmIChsaXN0 X2VtcHR5KCZtbS5mcmVlX2xpc3RbbW0ubWF4X29yZGVyXSkpIHsKKwkJCXByX2VycigiYnVkZHlf ZnJlZSBzdGF0ZSBtaXNtYXRjaCwgYmxvY2sgbm90IG9uIGZyZWUgbGlzdFxuIik7CisJCQllcnIg PSAtRUlOVkFMOworCQl9CisKKwkJaTkxNV9nZW1fYnVkZHlfZmluaSgmbW0pOworCisJCWlmIChl cnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworCitvdXRfYnVkZHlfZmluaToK KwlpOTE1X2dlbV9idWRkeV9maW5pKCZtbSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMg aW50IGlndF9idWRkeV9hbGxvYyh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfZ2VtX2J1ZGR5 X21tIG1tOworCXU2NCBzaXplOworCWludCBvcmRlcjsKKwlpbnQgZXJyOworCisJZXJyID0gaTkx NV9nZW1fYnVkZHlfaW5pdCgmbW0sIFNaXzY0RywgUEFHRV9TSVpFKTsKKwlpZiAoZXJyKSB7CisJ CXByX2VycigiYnVkZHlfaW5pdCB3aXRoIHNpemU9JWxseFxuIGZhaWxlZCglZClcbiIsIFNaXzY0 RywgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlmb3IgKG9yZGVyID0gbW0ubWF4X29yZGVy OyBvcmRlciA+PSAwOyBvcmRlci0tKSB7CisJCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAq YmxvY2ssICpvbjsKKwkJc3RydWN0IGxpc3RfaGVhZCBibG9ja3M7CisJCXU2NCBibG9ja19zaXpl OworCQl1NjQgb2Zmc2V0OworCQl1NjQgcHJldl9vZmZzZXQ7CisJCXU2NCBuX2Jsb2NrczsKKwor CQlzaXplID0gaTkxNV9nZW1fYnVkZHlfc2l6ZSgmbW0pOworCQlpZiAoc2l6ZSAhPSBTWl82NEcp IHsKKwkJCXByX2VycigiYnVkZHlfc2l6ZSBtaXNtYXRjaFxuIik7CisJCQllcnIgPSAtRUlOVkFM OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobGlzdF9lbXB0eSgmbW0uZnJlZV9saXN0W21tLm1h eF9vcmRlcl0pKSB7CisJCQlwcl9lcnIoInJvb3Qgbm90IG9uIHRoZSBmcmVlIGxpc3RcbiIpOwor CQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcHJfaW5mbygiZmlsbGluZyBh ZGRyZXNzIHNwYWNlKCVsbHgpIHdpdGggb3JkZXI9JWRcbiIsCisJCQlpOTE1X2dlbV9idWRkeV9z aXplKCZtbSksIG9yZGVyKTsKKworCQlwcmV2X29mZnNldCA9IDA7CisJCW5fYmxvY2tzID0gZGl2 NjRfdTY0KHNpemUsIEJJVChvcmRlcikgKiBtbS5taW5fc2l6ZSk7CisJCUlOSVRfTElTVF9IRUFE KCZibG9ja3MpOworCisJCXdoaWxlIChuX2Jsb2Nrcy0tKSB7CisJCQlibG9jayA9IGk5MTVfZ2Vt X2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOworCQkJaWYgKElTX0VSUihibG9jaykpIHsKKwkJCQll cnIgPSBQVFJfRVJSKGJsb2NrKTsKKwkJCQlpZiAoZXJyID09IC1FTk9NRU0pIHsKKwkJCQkJcHJf aW5mbygiYnVkZHlfYWxsb2MgaGl0IC1FTk9NRU0gd2l0aCBvcmRlcj0lZFxuIiwKKwkJCQkJICAg ICAgICBvcmRlcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJfZXJyKCJidWRkeV9hbGxvYyB3aXRo IG9yZGVyPSVkIGZhaWxlZCglZClcbiIsCisJCQkJCSAgICAgICBvcmRlciwgZXJyKTsKKwkJCQl9 CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbGlzdF9hZGQoJmJsb2NrLT5saW5rLCAmYmxvY2tz KTsKKworCQkJaWYgKGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX29yZGVyKGJsb2NrKSAhPSBvcmRlcikg eworCQkJCXByX2VycigiYnVkZHlfYWxsb2Mgb3JkZXIgbWlzbWF0Y2hcbiIpOworCQkJCWVyciA9 IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJsb2NrX3NpemUgPSBpOTE1X2dlbV9i dWRkeV9ibG9ja19zaXplKCZtbSwgYmxvY2spOworCQkJb2Zmc2V0ID0gaTkxNV9nZW1fYnVkZHlf YmxvY2tfb2Zmc2V0KGJsb2NrKTsKKworCQkJaWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tf c2l6ZSkpIHsKKwkJCQlwcl9lcnIoImJ1ZGR5X2FsbG9jIG9mZnNldCBtaXNhbGlnbmVkLCBvZmZz ZXQ9JWxseCwgYmxvY2tfc2l6ZT0lbGx1XG4iLAorCQkJCQlvZmZzZXQsIGJsb2NrX3NpemUpOwor CQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChvZmZzZXQgJiYg b2Zmc2V0ICE9IChwcmV2X29mZnNldCArIGJsb2NrX3NpemUpKSB7CisJCQkJcHJfZXJyKCJidWRk eV9hbGxvYyBvZmZzZXQgbWlzbWF0Y2gsIHByZXZfb2Zmc2V0PSVsbHgsIG9mZnNldD0lbGx4XG4i LAorCQkJCSAgICAgICBwcmV2X29mZnNldCwgb2Zmc2V0KTsKKwkJCQllcnIgPSAtRUlOVkFMOwor CQkJCWJyZWFrOworCQkJfQorCisJCQlwcmV2X29mZnNldCA9IG9mZnNldDsKKwkJfQorCisJCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9jaywgb24sICZibG9ja3MsIGxpbmspIHsKKwkJCWxp c3RfZGVsKCZibG9jay0+bGluayk7CisJCQlpOTE1X2dlbV9idWRkeV9mcmVlKCZtbSwgYmxvY2sp OworCQl9CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCWk5MTVfZ2VtX2J1ZGR5X2Zp bmkoJm1tKTsKKworCWlmIChlcnIgPT0gLUVOT01FTSkKKwkJZXJyID0gMDsKKworCXJldHVybiBl cnI7Cit9CisKK2ludCBpOTE1X2dlbV9idWRkeV9tb2NrX3NlbGZ0ZXN0cyh2b2lkKQoreworCXN0 YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CisJCVNVQlRFU1QoaWd0 X2J1ZGR5X2luaXQpLAorCQlTVUJURVNUKGlndF9idWRkeV9hbGxvYyksCisJfTsKKworCXJldHVy biBpOTE1X3N1YnRlc3RzKHRlc3RzLCBOVUxMKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKaW5kZXggODhlNWFiNTg2 MzM3Li45ODRlMDdlZDY1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaApAQCAtMjQsMyArMjQsNCBAQCBzZWxmdGVzdChl dmljdCwgaTkxNV9nZW1fZXZpY3RfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChndHQsIGk5MTVf Z2VtX2d0dF9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGh1Z2VwYWdlcywgaTkxNV9nZW1faHVn ZV9wYWdlX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QoY29udGV4dHMsIGk5MTVfZ2VtX2NvbnRl eHRfbW9ja19zZWxmdGVzdHMpCitzZWxmdGVzdChidWRkeSwgaTkxNV9nZW1fYnVkZHlfbW9ja19z ZWxmdGVzdHMpCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeA==