From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 65E596E366 for ; Tue, 19 Nov 2019 16:02:45 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Tue, 19 Nov 2019 17:02:21 +0100 Message-Id: <20191119160223.25283-3-zbigniew.kempczynski@intel.com> In-Reply-To: <20191119160223.25283-1-zbigniew.kempczynski@intel.com> References: <20191119160223.25283-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 2/4] lib/i915/intel_memory_region: Add lib to manage memory regions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: RnJvbTogTHVrYXN6IEthbGFtYXJ6IDxsdWthc3oua2FsYW1hcnpAaW50ZWwuY29tPgoKTE1FTSBz ZXJpZXMgaW50cm9kdWNlZCBjb25jZXB0IG9mIG1lbW9yeV9yZWdpb25zLiBUaGlzIHBhdGNoIGlt cGxlbWVudApoZWxwZXIgZnVuY3Rpb25zIHRoYXQgYWxsb3cgdXNlciB0byBtYW5hZ2UgdGhlbSBp biBtb3JlIGNvbnZlbmllbnQgd2F5LgoKU2lnbmVkLW9mZi1ieTogTHVrYXN6IEthbGFtYXJ6IDxs dWthc3oua2FsYW1hcnpAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1wY3p5 xYRza2kgPGx1a2Fzei5rYWxhbWFyekBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVu QGxpbnV4LmludGVsLmNvbT4KLS0tCiBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgfCAg IDIgKwogbGliL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIHwgMjk1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogbGliL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIHwgMTM5 ICsrKysrKysrKysrKysrKysKIGxpYi9pb2N0bF93cmFwcGVycy5oICAgICAgICAgICB8ICAgMSAr CiBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2Vk LCA0MzggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2ludGVsX21l bW9yeV9yZWdpb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2ludGVsX21lbW9yeV9y ZWdpb24uaAoKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxl LnNvdXJjZXMKaW5kZXggNjMzMzkyM2UuLmRlMmFkNzNhIDEwMDY0NAotLS0gYS9saWIvTWFrZWZp bGUuc291cmNlcworKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAtMTcsNiArMTcsOCBAQCBs aWJfc291cmNlX2xpc3QgPQkgCVwKIAlpOTE1L2dlbV9tbWFuLmgJXAogCWk5MTUvZ2VtX3ZtLmMJ XAogCWk5MTUvZ2VtX3ZtLmgJXAorCWk5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCVwKKwlpOTE1 L2ludGVsX21lbW9yeV9yZWdpb24uaAlcCiAJaTkxNV8zZC5oCQlcCiAJaTkxNV9yZWcuaAkJXAog CWk5MTVfcGNpaWRzLmgJCVwKZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2ludGVsX21lbW9yeV9yZWdp b24uYyBiL2xpYi9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uMzc2ODIxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaTkxNS9p bnRlbF9tZW1vcnlfcmVnaW9uLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lz L2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp bmNsdWRlIDxhbGxvY2EuaD4KKworI2luY2x1ZGUgImludGVsX3JlZy5oIgorI2luY2x1ZGUgImRy bXRlc3QuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2luY2x1ZGUgImlndF9kdW1t eWxvYWQuaCIKKyNpbmNsdWRlICJpZ3RfZ3QuaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0Lmgi CisKKyNpbmNsdWRlICJpOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaCIKKworI2RlZmluZSBTWl80 SyAoNDA5NikKKyNkZWZpbmUgU1pfNjRLICg2NTUzNikKKworI2RlZmluZSBpOTE1X3F1ZXJ5X2l0 ZW1zKGZkLCBpdGVtcywgbl9pdGVtcykgZG8geyBcCisJCWlndF9hc3NlcnRfZXEoX19pOTE1X3F1 ZXJ5X2l0ZW1zKGZkLCBpdGVtcywgbl9pdGVtcyksIDApOyBcCisJCWVycm5vID0gMDsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIGk5MTVfcXVlcnlfaXRlbXNfZXJyKGZkLCBpdGVtcywgbl9pdGVt cywgZXJyKSBkbyB7IFwKKwkJaWd0X2Fzc2VydF9lcShfX2k5MTVfcXVlcnlfaXRlbXMoZmQsIGl0 ZW1zLCBuX2l0ZW1zKSwgLWVycik7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50CitfX2k5 MTVfcXVlcnkoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnkgKnEpCit7CisJaWYgKGlndF9p b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfUVVFUlksIHEpKQorCQlyZXR1cm4gLWVycm5vOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50CitfX2k5MTVfcXVlcnlfaXRlbXMoaW50IGZkLCBzdHJ1 Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSAqaXRlbXMsIHVpbnQzMl90IG5faXRlbXMpCit7CisJc3Ry dWN0IGRybV9pOTE1X3F1ZXJ5IHEgPSB7CisJCS5udW1faXRlbXMgPSBuX2l0ZW1zLAorCQkuaXRl bXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKGl0ZW1zKSwKKwl9OworCXJldHVybiBfX2k5MTVfcXVl cnkoZmQsICZxKTsKK30KKworYm9vbCBnZW1faGFzX3F1ZXJ5X3N1cHBvcnQoaW50IGZkKQorewor CXN0cnVjdCBkcm1faTkxNV9xdWVyeSBxdWVyeSA9IHt9OworCisJcmV0dXJuIF9faTkxNV9xdWVy eShmZCwgJnF1ZXJ5KSA9PSAwOworfQorCitjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lv biBpbnRlbF9tZW1vcnlfcmVnaW9uc1tdID0geworCXsgIlNNRU0iLCBMT0NBTF9JOTE1X1NZU1RF TV9NRU1PUlksIDAgfSwKKwl7ICJMTUVNIiwgTE9DQUxfSTkxNV9ERVZJQ0VfTUVNT1JZLCAwIH0s CisJeyBOVUxMLCAwLCAwfQorfTsKKworLyoqCisgKiAgZ2VtX2dldF9iYXRjaF9zaXplOgorICog IEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqICBAcmVnaW9uOiByZWdpb24g aW4gd2hpY2ggd2Ugd2FudCB0byBjcmVhdGUgYSBiYXRjaAorICoKKyAqICBGSVhNRTogQ3VycmVu dGx5IGZ1bmN0aW9uIGFzc3VtZXMgd2UgaGF2ZSA2NEsgb24gREVWSUNFIGFuZCA0SworICogIG9u IFNZU1RFTSBtZW1vcnkuIEkga25vdyBDaHJpcyBpcyBnb2luZyB0byBraWxsIG1lIGZvciB0aGF0 CisgKiAgYnV0IEknbGwgZml4IHRoaXMgd2hlbiBwYXRjaCB3aXRoIG1lbW9yeSByZWdpb24gcGFn ZSBzaXplIGRldGVjdGlvbgorICogIHdpbGwgYmUgbWVyZ2VkLgorICovCit1aW50MzJfdCBnZW1f Z2V0X2JhdGNoX3NpemUoaW50IGZkLCB1aW50MzJfdCByZWdpb24pCit7CisJcmV0dXJuIElTX0RF VklDRV9NRU1PUllfUkVHSU9OKHJlZ2lvbikgPyBTWl82NEsgOiBTWl80SzsKK30KKworLyoqCisg KiBnZW1fZ2V0X3F1ZXJ5X21lbW9yeV9yZWdpb25zOgorICogQGZkOiBvcGVuIGk5MTUgZHJtIGZp bGUgZGVzY3JpcHRvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd3JhcHMgcXVlcnkgbWVjaGFuaXNt IGZvciBtZW1vcnkgcmVnaW9ucy4KKyAqCisgKiBSZXR1cm5zOiBGaWxsZWQgc3RydWN0IHdpdGgg YXZhaWxhYmxlIG1lbW9yeSByZWdpb25zLgorICovCitzdHJ1Y3QgbG9jYWxfaTkxNV9xdWVyeV9t ZW1vcnlfcmVnaW9uX2luZm8gKmdlbV9xdWVyeV9tZW1vcnlfcmVnaW9ucyhpbnQgZmQpCit7CisJ c3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9xdWVy eV9tZW1vcnlfcmVnaW9uX2luZm8gKnF1ZXJ5X2luZm87CisKKwltZW1zZXQoJml0ZW0sIDAsIHNp emVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IExPQ0FMX0k5MTVfUVVFUllfTUVNUkVHSU9O X0lORk87CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCisJcXVlcnlfaW5mbyA9 IGNhbGxvYygxLCBpdGVtLmxlbmd0aCk7CisKKwlpdGVtLmRhdGFfcHRyID0gdG9fdXNlcl9wb2lu dGVyKHF1ZXJ5X2luZm8pOworCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKKworCXJl dHVybiBxdWVyeV9pbmZvOworfQorCisvKioKKyAqIGdlbV9nZXRfbG1lbV9yZWdpb25fY291bnQ6 CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKgorICogSGVscGVyIGZ1 bmN0aW9uIHRvIGNoZWNrIGhvdyBtYW55IGxtZW0gcmVnaW9ucyBhcmUgYXZhaWxhYmxlIG9uIGRl dmljZS4KKyAqCisgKiBSZXR1cm5zOiBOdW1iZXIgb2YgZm91bmQgbG1lbSByZWdpb25zLgorICov Cit1aW50OF90IGdlbV9nZXRfbG1lbV9yZWdpb25fY291bnQoaW50IGZkKQoreworCXN0cnVjdCBs b2NhbF9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25faW5mbyAqcXVlcnlfaW5mbzsKKwl1aW50OF90 IG51bV9yZWdpb25zOworCXVpbnQ4X3QgbG1lbV9yZWdpb25zID0gMDsKKworCXF1ZXJ5X2luZm8g PSBnZW1fcXVlcnlfbWVtb3J5X3JlZ2lvbnMoZmQpOworCW51bV9yZWdpb25zID0gcXVlcnlfaW5m by0+bnVtX3JlZ2lvbnM7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWdpb25zOyBpKysp IHsKKwkJaWYgKElTX0RFVklDRV9NRU1PUllfUkVHSU9OKHF1ZXJ5X2luZm8tPnJlZ2lvbnNbaV0u aWQpKQorCQkJbG1lbV9yZWdpb25zICs9IDE7CisJfQorCWZyZWUocXVlcnlfaW5mbyk7CisKKwly ZXR1cm4gbG1lbV9yZWdpb25zOworfQorCisvKioKKyAqIGdlbV9oYXNfbG1lbToKKyAqIEBmZDog b3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8g Y2hlY2sgaWYgbG1lbSBpcyBhdmFpbGFibGUgb24gZGV2aWNlLgorICoKKyAqIFJldHVybnM6IFRy dWUgaWYgYXQgbGVhc3Qgb25lIGxtZW0gcmVnaW9uIHdhcyBmb3VuZC4KKyAqLworYm9vbCBnZW1f aGFzX2xtZW0oaW50IGZkKQoreworCXJldHVybiBnZW1fZ2V0X2xtZW1fcmVnaW9uX2NvdW50KGZk KSA+IDA7Cit9CisKKy8qKgorICogZ2VtX3F1ZXJ5X2hhc19tZW1vcnlfcmVnaW9uOgorICogQHF1 ZXJ5X2luZm86IHF1ZXJ5IHJlc3VsdCBvZiBtZW1vcnkgcmVnaW9ucworICogQHJlZ2lvbjogcmVn aW9uIGV4aXN0YW5jZSB0byBjaGVjayBpbnNpZGUgQHF1ZXJ5X2luZm8gcmVnaW9ucworICoKKyAq IFRoaXMgZnVuY3Rpb24gY2hlY2sgZXhpc3RlbmNlIG9mIHJlZ2lvbiBpbiBAcXVlcnlfaW5mbwor ICoKKyAqIFJldHVybnM6IHRydWUgaWYgbWVtb3J5IHJlZ2lvbiB3YXMgZm91bmQuIE90aGVyd2lz ZSBmYWxzZS4KKyAqLworYm9vbCBnZW1fcXVlcnlfaGFzX21lbW9yeV9yZWdpb24oc3RydWN0IGxv Y2FsX2k5MTVfcXVlcnlfbWVtb3J5X3JlZ2lvbl9pbmZvICpxdWVyeV9pbmZvLAorCQkJICAgdWlu dDMyX3QgcmVnaW9uKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgcXVlcnlfaW5mby0+bnVtX3Jl Z2lvbnM7IGkrKykKKwkJaWYgKHF1ZXJ5X2luZm8tPnJlZ2lvbnNbaV0uaWQgPT0gcmVnaW9uKQor CQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogZ2VtX3F1ZXJ5 X3JlcXVpcmVfcmVnaW9uOgorICogQHF1ZXJ5X2luZm86IHF1ZXJ5IHJlc3VsdCBvZiBtZW1vcnkg cmVnaW9ucworICogQHJlZ2lvbjogcmVnaW9uIHRvIGNoZWNrIGluc2lkZSBxdWVyeQorICoKKyAq IEZ1bmN0aW9uIGxlYWQgdG8gc2tpcHBpbmcgdGVzdCBpZiBAcmVnaW9uIGRvZXNuJ3QgZXhpc3Rz IGluIEBxdWVyeV9pbmZvLgorICovCit2b2lkIGdlbV9xdWVyeV9yZXF1aXJlX3JlZ2lvbihzdHJ1 Y3QgbG9jYWxfaTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9uX2luZm8gKnF1ZXJ5X2luZm8sCisJCQkg ICAgICB1aW50MzJfdCByZWdpb24pCit7CisJaWd0X3JlcXVpcmUoZ2VtX3F1ZXJ5X2hhc19tZW1v cnlfcmVnaW9uKHF1ZXJ5X2luZm8sIHJlZ2lvbikpOworfQorCisvKioKKyAqIF9fZ2VtX21pZ3Jh dGVfdG9fbWVtb3J5X3JlZ2lvbnM6CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlw dG9yCisgKiBAaGFuZGxlOiBidWZmZXIgb2JqZWN0IGhhbmRsZQorICogQG1lbV9yZWdpb25zOiBt ZW1vcnkgcmVnaW9ucyBpZCBhcnJheQorICogQHNpemU6IG1lbW9yeSByZWdpb25zIGFycmF5IHNp emUKKyAqCisgKiBXcmFwcGVyIGZ1bmN0aW9uIG9uIElPQ1RMX0k5MTVfR0VNX09CSkVDVF9TRVRQ QVJBTS4gSXQgc2V0cyBvYmplY3QgdG8gYmUKKyAqIG1pZ3JhdGVkIGludG8gb25lIG9mIG1lbW9y eSByZWdpb24gc3BlY2lmaWVkIGluIHRoZSBhcnJheS4gQXJyYXkgY29udGFpbnMKKyAqIG1lbW9y eSByZWdpb25zIGluIHJlcXVlc3RlZCBwcmlvcml0eSBvcmRlciAtIGlmIG5vIG1pZ3JhdGlvbiB0 byBmaXJzdAorICogbWVtb3J5IHJlZ2lvbiBpcyBwb3NzaWJsZSBuZXh0IG9uZSBpcyBzZWxlY3Rl ZCBhbmQgc28gb24uCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworc3RhdGljIGludCBfX2dl bV9taWdyYXRlX3RvX21lbW9yeV9yZWdpb25zKGludCBmZCwgaW50IGhhbmRsZSwKKwkJCQkJICAg dWludDMyX3QgKm1lbV9yZWdpb25zLAorCQkJCQkgICB1aW50MzJfdCBzaXplKQoreworCXN0cnVj dCBsb2NhbF9pOTE1X2dlbV9vYmplY3RfcGFyYW0gb2JqOworCWludCBlcnIgPSAwOworCisJbWVt c2V0KCZvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmouaGFuZGxlID0gaGFuZGxlOworCW9iai5z aXplID0gc2l6ZTsKKwlvYmoucGFyYW0gPSBJOTE1X1BBUkFNX01FTU9SWV9SRUdJT04gfCBJOTE1 X09CSkVDVF9QQVJBTTsKKwlvYmouZGF0YSA9IHRvX3VzZXJfcG9pbnRlcihtZW1fcmVnaW9ucyk7 CisKKwlpZiAoaWd0X2lvY3RsKGZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9PQkpFQ1RfU0VUUEFS QU0sICZvYmopKSB7CisJCWVyciA9IC1lcnJubzsKKwkJZXJybm8gPSAwOworCX0KKworCXJldHVy biBlcnI7Cit9CisKKy8qKgorICogZ2VtX21pZ3JhdGVfdG9fbWVtb3J5X3JlZ2lvbjoKKyAqIEBm ZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGU6IGhhbmRsZSB0byBH RU0gYm8KKyAqIEB0eXBlOiBtZW1vcnkgcmVnaW9uIHR5cGUKKyAqIEBpbnN0YW5jZTogbWVtb3J5 IHJlZ2lvbiBpbnN0YW5jZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd3JhcHMgR0VNX09CSkVDVF9T RVRQQVJBTSBpbnRvIHVzZXIgZnJpZW5kbHkgdmVyc2lvbi4gT2JqZWN0CisgKiB3aGljaCB1c2Vy IHBhc3MgQGhhbmRsZSB3aWxsIGJlIG1pZ3JhdGVkIHRvIG1lbW9yeSByZWdpb24sIHNwZWNpZmll ZAorICogYnkgQHR5cGUgYW5kIEBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zOiBlcnJubyBpZiBl cnJvciBvY2N1cnJlZC4KKyAqLworaW50IGdlbV9taWdyYXRlX3RvX21lbW9yeV9yZWdpb24oaW50 IGZkLCBpbnQgaGFuZGxlLCB1aW50MzJfdCByZWdpb24pCit7CisJcmV0dXJuIF9fZ2VtX21pZ3Jh dGVfdG9fbWVtb3J5X3JlZ2lvbnMoZmQsIGhhbmRsZSwgJnJlZ2lvbiwgMSk7Cit9CisKKy8qKgor ICogZ2VtX21pZ3JhdGVfdG9fbG1lbToKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2Ny aXB0b3IKKyAqIEBoYW5kbGU6IGhhbmRsZSB0byBvYmplY3QgdGhhdCB1c2VyIHdhbnQgdG8gbWln cmF0ZSB0byBMTUVNCisgKgorICogVGhpcyBmdW5jdGlvbiB3cmFwcyBHRU1fT0JKRUNUX1NFVFBB UkFNIGludG8gdXNlciBmcmllbmRseSB2ZXJzaW9uLiBPYmplY3QKKyAqIHdoaWNoIHVzZXIgcGFz cyBAaGFuZGxlIHdpbGwgYmUgbWlncmF0ZWQgdG8gTE1FTS4KKyAqCisgKiBSZXR1cm5zOiBlcnJu byBpZiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IGdlbV9taWdyYXRlX3RvX2xtZW0oaW50IGZk LCBpbnQgaGFuZGxlKQoreworCXJldHVybiBnZW1fbWlncmF0ZV90b19tZW1vcnlfcmVnaW9uKGZk LCBoYW5kbGUsIFJFR0lPTl9ERVZJQ0VfTUVNT1JZKDApKTsKK30KKworLyoqCisgKiBnZW1fbWln cmF0ZV90b19zbWVtOgorICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICog QGhhZGxlOiBoYW5kbGUgdG8gb2JqZWN0IHRoYXQgdXNlciB3YW50IHRvIG1pZ3JhdGUgdG8gU01F TQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd3JhcHMgR0VNX09CSkVDVF9TRVRQQVJBTSBpbnRvIHVz ZXIgZnJpZW5kbHkgdmVyc2lvbi4gT2JqZWN0CisgKiBvbnRvIHdoaWNoIHVzZXIgcGFzcyBAaGFu ZGxlIHdpbGwgYmUgbWlncmF0ZWQgdG8gU01FTS4KKyAqCisgKiBSZXR1cm5zOiBlcnJubyBpZiBl cnJvciBvY2N1cnJlZC4KKyAqLworaW50IGdlbV9taWdyYXRlX3RvX3NtZW0oaW50IGZkLCBpbnQg aGFuZGxlKQoreworCXJldHVybiBnZW1fbWlncmF0ZV90b19tZW1vcnlfcmVnaW9uKGZkLCBoYW5k bGUsIFJFR0lPTl9TWVNURU1fTUVNT1JZKDApKTsKK30KKworLyogZ2VtX2NyZWF0ZV9pbl9tZW1v cnlfcmVnaW9uX2xpc3Q6CisgKiBAZmQ6IG9wZW5lZCBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IK KyAqIEBzaXplOiByZXF1ZXN0ZWQgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBAbWVtX3JlZ2lvbnM6 IG1lbW9yeSByZWdpb25zIGFycmF5IChwcmlvcml0eSBsaXN0KQorICogQG51bV9yZWdpb25zOiBA bWVtX3JlZ2lvbnMgbGVuZ3RoCisgKi8KK3VpbnQzMl90IGdlbV9jcmVhdGVfaW5fbWVtb3J5X3Jl Z2lvbl9saXN0KGludCBmZCwgdWludDY0X3Qgc2l6ZSwKKwkJCQkJICB1aW50MzJfdCAqbWVtX3Jl Z2lvbnMsCisJCQkJCSAgaW50IG51bV9yZWdpb25zKQoreworCXVpbnQzMl90IGhhbmRsZSA9IGdl bV9jcmVhdGUoZmQsIHNpemUpOworCisJaWYgKGdlbV9oYXNfbG1lbShmZCkpIHsKKwkJaW50IHJl dCA9IF9fZ2VtX21pZ3JhdGVfdG9fbWVtb3J5X3JlZ2lvbnMoZmQsIGhhbmRsZSwKKwkJCQkJCQkg IG1lbV9yZWdpb25zLAorCQkJCQkJCSAgbnVtX3JlZ2lvbnMpOworCQlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisJfQorCisJcmV0dXJuIGhhbmRsZTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2lu dGVsX21lbW9yeV9yZWdpb24uaCBiL2xpYi9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNjhmZDEzYTkKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPHN0ZGludC5oPgor I2luY2x1ZGUgImJlbmNobWFya3MvaWxvZzIuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorCisj aWZuZGVmIElOVEVMX01FTU9SWV9SRUdJT05fSAorI2RlZmluZSBJTlRFTF9NRU1PUllfUkVHSU9O X0gKKworI2RlZmluZSBJTlRFTF9NRU1PUllfVFlQRV9TSElGVCAxNgorCisjZGVmaW5lIElOVEVM X01FTU9SWV9SRUdJT05fSUQodHlwZSwgaW5zdGFuY2UpIFwKKwkJCSgoQklUKCh0eXBlKSArIElO VEVMX01FTU9SWV9UWVBFX1NISUZUKSkgfCBCSVQoaW5zdGFuY2UpKQorI2RlZmluZSBNRU1PUllf VFlQRV9GUk9NX1JFR0lPTihyKSAoaWxvZzIociA+PiBJTlRFTF9NRU1PUllfVFlQRV9TSElGVCkp CisjZGVmaW5lIE1FTU9SWV9JTlNUQU5DRV9GUk9NX1JFR0lPTihyKSAoaWxvZzIociAmIDB4ZmZm ZikpCisKKyNkZWZpbmUgSVNfREVWSUNFX01FTU9SWV9SRUdJT04ocmVnaW9uKSBcCisJKE1FTU9S WV9UWVBFX0ZST01fUkVHSU9OKHJlZ2lvbikgPT0gTE9DQUxfSTkxNV9ERVZJQ0VfTUVNT1JZKQor I2RlZmluZSBJU19TWVNURU1fTUVNT1JZX1JFR0lPTihyZWdpb24pIFwKKwkoTUVNT1JZX1RZUEVf RlJPTV9SRUdJT04ocmVnaW9uKSA9PSBMT0NBTF9JOTE1X1NZU1RFTV9NRU1PUlkpCisKKy8qIFJl Z2lvbiBtYWNyb3MgZm9yIG1pZ3JhdGlvbiAqLworI2RlZmluZSBSRUdJT05fU1lTVEVNX01FTU9S WShuKSBJTlRFTF9NRU1PUllfUkVHSU9OX0lEKExPQ0FMX0k5MTVfU1lTVEVNX01FTU9SWSwgbikK KyNkZWZpbmUgUkVHSU9OX0RFVklDRV9NRU1PUlkobikgSU5URUxfTUVNT1JZX1JFR0lPTl9JRChM T0NBTF9JOTE1X0RFVklDRV9NRU1PUlksIG4pCisKKyNkZWZpbmUgTE9DQUxfSTkxNV9RVUVSWV9N RU1SRUdJT05fSU5GTyAgIDQKK3N0cnVjdCBsb2NhbF9pOTE1X21lbW9yeV9yZWdpb25faW5mbyB7 CisKKwkvKiogQmFzZSB0eXBlIG9mIGEgcmVnaW9uICovCisjZGVmaW5lIExPQ0FMX0k5MTVfU1lT VEVNX01FTU9SWSAgICAgICAgIDAKKyNkZWZpbmUgTE9DQUxfSTkxNV9ERVZJQ0VfTUVNT1JZICAg ICAgICAgMQorCisJLyoqIFRoZSByZWdpb24gaWQgaXMgZW5jb2RlZCBpbiBhIGxheW91dCB3aGlj aCBtYWtlcyBpdCBwb3NzaWJsZSB0bworCSAqIHJldHJpZXZlIHRoZSBmb2xsb3dpbmcgaW5mb3Jt YXRpb246CisJICoKKwkgKiAgQmFzZSB0eXBlOiBsb2cyKElEID4+IDE2KQorCSAqLworCV9fdTMy IGlkOworCisJLyoqIFJlc2VydmVkIGZpZWxkLiBNQlogKi8KKwlfX3UzMiByc3ZkMDsKKworCS8q KiBVbnVzZWQgZm9yIG5vdy4gTUJaICovCisJX191NjQgZmxhZ3M7CisKKwlfX3U2NCBzaXplOwor CisJLyoqIFJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIGNsZWFyZWQgdG8gemVyby4gKi8KKwlfX3U2 NCByc3ZkMVs0XTsKK307CisKK3N0cnVjdCBsb2NhbF9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25f aW5mbyB7CisKKwkvKiogTnVtYmVyIG9mIHN0cnVjdCBkcm1faTkxNV9tZW1vcnlfcmVnaW9uX2lu Zm8gc3RydWN0cyAqLworCV9fdTMyIG51bV9yZWdpb25zOworCisJLyoqIE1CWiAqLworCV9fdTMy IHJzdmRbM107CisKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9tZW1vcnlfcmVnaW9uX2luZm8gcmVnaW9u c1tdOworfTsKKworc3RydWN0IGxvY2FsX2k5MTVfZ2VtX29iamVjdF9wYXJhbSB7CisJLyoqIEhh bmRsZSBmb3IgdGhlIG9iamVjdCAqLworCV9fdTMyIGhhbmRsZTsKKworCV9fdTMyIHNpemU7CisK KwkvKiogU2V0IHRoZSBtZW1vcnkgcmVnaW9uIGZvciB0aGUgb2JqZWN0IGxpc3RlZCBpbiBwcmVm ZXJlbmNlIG9yZGVyCisJICogIGFzIGFuIGFycmF5IG9mIHJlZ2lvbiBpZHMgd2l0aGluIGRhdGEu IFRvIGZvcmNlIGFuIG9iamVjdAorCSAqICB0byBhIHBhcnRpY3VsYXIgbWVtb3J5IHJlZ2lvbiwg c2V0IHRoZSByZWdpb24gYXMgdGhlIHNvbGUgZW50cnkuCisJICoKKwkgKiAgVmFsaWQgcmVnaW9u IGlkcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpZCBmaWVsZCBvZgorCSAqICBzdHJ1Y3QgZHJtX2k5 MTVfbWVtb3J5X3JlZ2lvbl9pbmZvLgorCSAqICBTZWUgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X21l bW9yeV9yZWdpb25faW5mby4KKwkgKi8KKyNkZWZpbmUgSTkxNV9PQkpFQ1RfUEFSQU0gICgxdWxs PDwzMikKKyNkZWZpbmUgSTkxNV9QQVJBTV9NRU1PUllfUkVHSU9OIDB4MQorCV9fdTY0IHBhcmFt OworCisJX191NjQgZGF0YTsKK307CisKKyNkZWZpbmUgTE9DQUxfSTkxNV9HRU1fT0JKRUNUX1NF VFBBUkFNCURSTV9JOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNCisjZGVmaW5lIExPQ0FMX0lPQ1RM X0k5MTVfR0VNX09CSkVDVF9TRVRQQVJBTQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFIFwKKwkr IExPQ0FMX0k5MTVfR0VNX09CSkVDVF9TRVRQQVJBTSwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX29i amVjdF9wYXJhbSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uIHsK Kwljb25zdCBjaGFyICpyZWdpb25fbmFtZTsKKwl1aW50OF90IG1lbW9yeV90eXBlOworCXVpbnQ4 X3QgbWVtb3J5X2luc3RhbmNlOworfSBpbnRlbF9tZW1vcnlfcmVnaW9uc1tdOworCitib29sIGdl bV9oYXNfcXVlcnlfc3VwcG9ydChpbnQgZmQpOworCit1aW50MzJfdCBnZW1fZ2V0X2JhdGNoX3Np emUoaW50IGZkLCB1aW50MzJfdCByZWdpb24pOworCitzdHJ1Y3QgbG9jYWxfaTkxNV9xdWVyeV9t ZW1vcnlfcmVnaW9uX2luZm8gKmdlbV9xdWVyeV9tZW1vcnlfcmVnaW9ucyhpbnQgZmQpOworCit1 aW50OF90IGdlbV9nZXRfbG1lbV9yZWdpb25fY291bnQoaW50IGZkKTsKKworYm9vbCBnZW1faGFz X2xtZW0oaW50IGZkKTsKK2Jvb2wgZ2VtX3F1ZXJ5X2hhc19tZW1vcnlfcmVnaW9uKHN0cnVjdCBs b2NhbF9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25faW5mbyAqcXVlcnlfaW5mbywKKwkJCQkgdWlu dDMyX3QgcmVnaW9uKTsKK3ZvaWQgZ2VtX3F1ZXJ5X3JlcXVpcmVfcmVnaW9uKHN0cnVjdCBsb2Nh bF9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25faW5mbyAqcXVlcnlfaW5mbywKKwkJCSAgICAgIHVp bnQzMl90IHJlZ2lvbik7CitpbnQgZ2VtX21pZ3JhdGVfdG9fbWVtb3J5X3JlZ2lvbihpbnQgZmQs IGludCBoYW5kbGUsIHVpbnQzMl90IHJlZ2lvbik7CitpbnQgZ2VtX21pZ3JhdGVfdG9fbG1lbShp bnQgZmQsIGludCBoYW5kbGUpOworaW50IGdlbV9taWdyYXRlX3RvX3NtZW0oaW50IGZkLCBpbnQg aGFuZGxlKTsKKwordWludDMyX3QgZ2VtX2NyZWF0ZV9pbl9tZW1vcnlfcmVnaW9uX2xpc3QoaW50 IGZkLCB1aW50NjRfdCBzaXplLAorCQkJCQkgIHVpbnQzMl90ICptZW1fcmVnaW9ucywKKwkJCQkJ ICBpbnQgbnVtX3JlZ2lvbnMpOworI2RlZmluZSBnZW1fY3JlYXRlX2luX21lbW9yeV9yZWdpb25z KGZkLCBzaXplLCByZWdpb25zLi4uKSAoeyBcCisJdW5zaWduZWQgaW50IGFycl9fW10gPSB7IHJl Z2lvbnMgfTsgXAorCWdlbV9jcmVhdGVfaW5fbWVtb3J5X3JlZ2lvbl9saXN0KGZkLCBzaXplLCBh cnJfXywgQVJSQVlfU0laRShhcnJfXykpOyBcCit9KQorCisjZW5kaWYgLyogSU5URUxfTUVNT1JZ X1JFR0lPTl9IICovCmRpZmYgLS1naXQgYS9saWIvaW9jdGxfd3JhcHBlcnMuaCBiL2xpYi9pb2N0 bF93cmFwcGVycy5oCmluZGV4IGYyNDEyZDc4Li44ODVjYmIwNiAxMDA2NDQKLS0tIGEvbGliL2lv Y3RsX3dyYXBwZXJzLmgKKysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmgKQEAgLTM4LDYgKzM4LDcg QEAKIAogI2luY2x1ZGUgImk5MTUvZ2VtX2NvbnRleHQuaCIKICNpbmNsdWRlICJpOTE1L2dlbV9z Y2hlZHVsZXIuaCIKKyNpbmNsdWRlICJpOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaCIKIAogLyoq CiAgKiBpZ3RfaW9jdGw6CmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24u YnVpbGQKaW5kZXggNzNjMDdiMGYuLmYyNWJkM2UyIDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVp bGQKKysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC03LDYgKzcsNyBAQCBsaWJfc291cmNlcyA9IFsK IAknaTkxNS9nZW1fcmluZy5jJywKIAknaTkxNS9nZW1fbW1hbi5jJywKIAknaTkxNS9nZW1fdm0u YycsCisJJ2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jJywKIAknaWd0X2NvbG9yX2VuY29kaW5n LmMnLAogCSdpZ3RfZGVidWdmcy5jJywKIAknaWd0X2RldmljZS5jJywKLS0gCjIuMjMuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2