From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH i-g-t 01/12] i915: Add gem_vm_create Date: Wed, 22 May 2019 12:37:01 +0100 Message-ID: <20190522113712.23512-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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 Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RXhlcmNpc2UgYmFzaWMgY3JlYXRpb24gYW5kIHN3YXBwaW5nIGJldHdlZW4gbmV3IGFkZHJlc3Mg c3BhY2VzLgoKdjI6IENoZWNrIGlzb2xhdGlvbiB0aGF0IHRoZSBzYW1lIHZtX2lkIG9uIGRpZmZl cmVudCBmZCBhcmUgaW5kZWVkCmRpZmZlcmVudCBWTS4KdjM6IENyb3NzLW92ZXIgY2hlY2sgd2l0 aCBDUkVBVEVfRVhUX1NFVFBBUkFNCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+ClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgotLS0KIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgIHwgICAyICsKIGxpYi9pOTE1 L2dlbV92bS5jICAgICAgICAgIHwgMTMwICsrKysrKysrKysrKwogbGliL2k5MTUvZ2VtX3ZtLmgg ICAgICAgICAgfCAgMzggKysrKwogbGliL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgIDEgKwog dGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgfCAgIDEgKwogdGVzdHMvaTkxNS9nZW1fdm1fY3Jl YXRlLmMgfCA0MTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMv bWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA1ODUgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2dlbV92bS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2k5MTUvZ2VtX3ZtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1 L2dlbV92bV9jcmVhdGUuYwoKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGli L01ha2VmaWxlLnNvdXJjZXMKaW5kZXggOTc2ODU4MjM4Li44OTFmNjViOTYgMTAwNjQ0Ci0tLSBh L2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xMyw2 ICsxMyw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCWk5MTUvZ2VtX3JpbmcuYwlcCiAJaTkx NS9nZW1fbW1hbi5jCVwKIAlpOTE1L2dlbV9tbWFuLmgJXAorCWk5MTUvZ2VtX3ZtLmMJXAorCWk5 MTUvZ2VtX3ZtLmgJXAogCWk5MTVfM2QuaAkJXAogCWk5MTVfcmVnLmgJCVwKIAlpOTE1X3BjaWlk cy5oCQlcCmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fdm0uYyBiL2xpYi9pOTE1L2dlbV92bS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uOWEwMjJhNTZjCi0tLSAvZGV2 L251bGwKKysrIGIvbGliL2k5MTUvZ2VtX3ZtLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs dWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCisjaW5jbHVkZSAi ZHJtdGVzdC5oIgorCisjaW5jbHVkZSAiaTkxNS9nZW1fdm0uaCIKKworLyoqCisgKiBTRUNUSU9O OmdlbV92bQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGgg YWRkcmVzcyBzcGFjZXMgKHZtL0dUVCkKKyAqIEB0aXRsZTogR0VNIFZpcnR1YWwgTWVtb3J5Cisg KgorICogVGhpcyBoZWxwZXIgbGlicmFyeSBjb250YWlucyBmdW5jdGlvbnMgdXNlZCBmb3IgaGFu ZGxpbmcgZ2VtIGFkZHJlc3MKKyAqIHNwYWNlcy4KKyAqLworCisvKioKKyAqIGdlbV9oYXNfdm06 CisgKiBAaTkxNTogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqCisgKiBSZXR1cm5z OiB3aGV0aGVyIFZNIGNyZWF0aW9uIGlzIHN1cHBvcnRlZCBvciBub3QuCisgKi8KK2Jvb2wgZ2Vt X2hhc192bShpbnQgaTkxNSkKK3sKKwl1aW50MzJfdCB2bV9pZCA9IDA7CisKKwlfX2dlbV92bV9j cmVhdGUoaTkxNSwgJnZtX2lkKTsKKwlpZiAodm1faWQpCisJCWdlbV92bV9kZXN0cm95KGk5MTUs IHZtX2lkKTsKKworCXJldHVybiB2bV9pZDsKK30KKworLyoqCisgKiBnZW1fcmVxdWlyZV92bToK KyAqIEBpOTE1OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICoKKyAqIFRoaXMgaGVs cGVyIHdpbGwgYXV0b21hdGljYWxseSBza2lwIHRoZSB0ZXN0IG9uIHBsYXRmb3JtcyB3aGVyZSBh ZGRyZXNzCisgKiBzcGFjZSBjcmVhdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICovCit2b2lkIGdl bV9yZXF1aXJlX3ZtKGludCBpOTE1KQoreworCWlndF9yZXF1aXJlKGdlbV9oYXNfdm0oaTkxNSkp OworfQorCitpbnQgX19nZW1fdm1fY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCAqdm1faWQpCit7 CisgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sIGN0bCA9IHt9OworICAgICAg IGludCBlcnIgPSAwOworCisgICAgICAgaWYgKGlndF9pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkx NV9HRU1fVk1fQ1JFQVRFLCAmY3RsKSA9PSAwKSB7CisgICAgICAgICAgICAgICAqdm1faWQgPSBj dGwudm1faWQ7CisgICAgICAgfSBlbHNlIHsKKwkgICAgICAgZXJyID0gLWVycm5vOworCSAgICAg ICBpZ3RfYXNzdW1lKGVyciAhPSAwKTsKKyAgICAgICB9CisKKyAgICAgICBlcnJubyA9IDA7Cisg ICAgICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBnZW1fdm1fY3JlYXRlOgorICogQGk5MTU6 IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKgorICogVGhpcyB3cmFwcyB0aGUgVk1f Q1JFQVRFIGlvY3RsLCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3CisgKiBhZGRyZXNz IHNwYWNlIGZvciB1c2Ugd2l0aCBHRU0gY29udGV4dHMuCisgKgorICogUmV0dXJuczogVGhlIGlk IG9mIHRoZSBhbGxvY2F0ZWQgYWRkcmVzcyBzcGFjZS4KKyAqLwordWludDMyX3QgZ2VtX3ZtX2Ny ZWF0ZShpbnQgaTkxNSkKK3sKKwl1aW50MzJfdCB2bV9pZDsKKworCWlndF9hc3NlcnRfZXEoX19n ZW1fdm1fY3JlYXRlKGk5MTUsICZ2bV9pZCksIDApOworCWlndF9hc3NlcnQodm1faWQgIT0gMCk7 CisKKwlyZXR1cm4gdm1faWQ7Cit9CisKK2ludCBfX2dlbV92bV9kZXN0cm95KGludCBpOTE1LCB1 aW50MzJfdCB2bV9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0g eyAudm1faWQgPSB2bV9pZCB9OworCWludCBlcnIgPSAwOworCisJaWYgKGlndF9pb2N0bChpOTE1 LCBEUk1fSU9DVExfSTkxNV9HRU1fVk1fREVTVFJPWSwgJmN0bCkpIHsKKwkJZXJyID0gLWVycm5v OworCQlpZ3RfYXNzdW1lKGVycik7CisJfQorCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9 CisKKy8qKgorICogZ2VtX3ZtX2Rlc3Ryb3k6CisgKiBAaTkxNTogb3BlbiBpOTE1IGRybSBmaWxl IGRlc2NyaXB0b3IKKyAqIEB2bV9pZDogaTkxNSBWTSBpZAorICoKKyAqIFRoaXMgd3JhcHMgdGhl IFZNX0RFU1RST1kgaW9jdGwsIHdoaWNoIGlzIHVzZWQgdG8gZnJlZSBhbiBhZGRyZXNzIHNwYWNl CisgKiBoYW5kbGUuCisgKi8KK3ZvaWQgZ2VtX3ZtX2Rlc3Ryb3koaW50IGk5MTUsIHVpbnQzMl90 IHZtX2lkKQoreworCWlndF9hc3NlcnRfZXEoX19nZW1fdm1fZGVzdHJveShpOTE1LCB2bV9pZCks IDApOworfQpkaWZmIC0tZ2l0IGEvbGliL2k5MTUvZ2VtX3ZtLmggYi9saWIvaTkxNS9nZW1fdm0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjI3YWY4OTlkNAotLS0gL2Rl di9udWxsCisrKyBiL2xpYi9pOTE1L2dlbV92bS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEdFTV9WTV9ICisjZGVmaW5l IEdFTV9WTV9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworYm9vbCBnZW1faGFzX3ZtKGludCBp OTE1KTsKK3ZvaWQgZ2VtX3JlcXVpcmVfdm0oaW50IGk5MTUpOworCit1aW50MzJfdCBnZW1fdm1f Y3JlYXRlKGludCBpOTE1KTsKK2ludCBfX2dlbV92bV9jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90 ICp2bV9pZCk7CisKK3ZvaWQgZ2VtX3ZtX2Rlc3Ryb3koaW50IGk5MTUsIHVpbnQzMl90IHZtX2lk KTsKK2ludCBfX2dlbV92bV9kZXN0cm95KGludCBpOTE1LCB1aW50MzJfdCB2bV9pZCk7CisKKyNl bmRpZiAvKiBHRU1fVk1fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21l c29uLmJ1aWxkCmluZGV4IDgwNzM2ODY4Ni4uMjk4OWUxMWIzIDEwMDY0NAotLS0gYS9saWIvbWVz b24uYnVpbGQKKysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC01LDYgKzUsNyBAQCBsaWJfc291cmNl cyA9IFsKIAknaTkxNS9nZW1fc3VibWlzc2lvbi5jJywKIAknaTkxNS9nZW1fcmluZy5jJywKIAkn aTkxNS9nZW1fbW1hbi5jJywKKwknaTkxNS9nZW1fdm0uYycsCiAJJ2lndF9jb2xvcl9lbmNvZGlu Zy5jJywKIAknaWd0X2RlYnVnZnMuYycsCiAJJ2lndF9kZXZpY2UuYycsCmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCAyZDVj OTI5ZTMuLmNiZDRiNTI4OSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yMSw2ICsyMSw3IEBAIFRFU1RTX3Byb2dzID0g XAogCWRybV9pbXBvcnRfZXhwb3J0IFwKIAlkcm1fbW0gXAogCWRybV9yZWFkIFwKKwlpOTE1L2dl bV92bV9jcmVhdGUgXAogCWttc18zZCBcCiAJa21zX2FkZGZiX2Jhc2ljIFwKIAlrbXNfYXRvbWlj IFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3ZtX2NyZWF0ZS5jIGIvdGVzdHMvaTkxNS9n ZW1fdm1fY3JlYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5jYmQy NzNkOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pOTE1L2dlbV92bV9jcmVhdGUuYwpAQCAt MCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNp bmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSAiaTkx NS9nZW1fdm0uaCIKKworc3RhdGljIGludCB2bV9jcmVhdGVfaW9jdGwoaW50IGk5MTUsIHN0cnVj dCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCAqY3RsKQoreworCWludCBlcnIgPSAwOworCWlmIChp Z3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX1ZNX0NSRUFURSwgY3RsKSkgeworCQll cnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsKKwl9CisJZXJybm8gPSAwOworCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdm1fZGVzdHJveV9pb2N0bChpbnQgaTkxNSwgc3RydWN0 IGRybV9pOTE1X2dlbV92bV9jb250cm9sICpjdGwpCit7CisJaW50IGVyciA9IDA7CisJaWYgKGln dF9pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkxNV9HRU1fVk1fREVTVFJPWSwgY3RsKSkgeworCQll cnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsKKwl9CisJZXJybm8gPSAwOworCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3R4X2NyZWF0ZV9pb2N0bChpbnQgaTkxNSwKKwkJCSAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dCAqYXJnKQoreworCWludCBl cnIgPSAwOworCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRf Q1JFQVRFX0VYVCwgYXJnKSkgeworCQllcnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsK Kwl9CisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIGhhc192bShp bnQgaTkxNSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0ge307CisJ aW50IGVycjsKKworCWVyciA9IHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKTsKKwlzd2l0Y2gg KGVycikgeworCWNhc2UgLUVJTlZBTDogLyogdW5rbm93biBpb2N0bCAqLworCWNhc2UgLUVOT0RF VjogLyogIWZ1bGwtcHBndHQgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJY2FzZSAwOgorCQlnZW1f dm1fZGVzdHJveShpOTE1LCBjdGwudm1faWQpOworCQlyZXR1cm4gdHJ1ZTsKKworCWRlZmF1bHQ6 CisJCWlndF9mYWlsX29uX2YoZXJyLCAiVW5rbm93biByZXNwb25zZSBmcm9tIFZNX0NSRUFURVxu Iik7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRfY3JlYXRl KGludCBpOTE1KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCBjdGwgPSB7fTsK KwlzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBleHQgPSB7IC5uYW1lID0gLTEgfTsKKworCWln dF9hc3NlcnRfZXEodm1fY3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKwlnZW1fdm1fZGVz dHJveShpOTE1LCBjdGwudm1faWQpOworCisJY3RsLnZtX2lkID0gMHhkZWFkYmVlZjsKKwlpZ3Rf YXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7CisJZ2VtX3ZtX2Rlc3Ry b3koaTkxNSwgY3RsLnZtX2lkKTsKKwljdGwudm1faWQgPSAwOworCisJY3RsLmZsYWdzID0gLTE7 CisJaWd0X2Fzc2VydF9lcSh2bV9jcmVhdGVfaW9jdGwoaTkxNSwgJmN0bCksIC1FSU5WQUwpOwor CWN0bC5mbGFncyA9IDA7CisKKwljdGwuZXh0ZW5zaW9ucyA9IC0xOworCWlndF9hc3NlcnRfZXEo dm1fY3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAtRUZBVUxUKTsKKwljdGwuZXh0ZW5zaW9ucyA9 IHRvX3VzZXJfcG9pbnRlcigmZXh0KTsKKwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChp OTE1LCAmY3RsKSwgLUVJTlZBTCk7CisJY3RsLmV4dGVuc2lvbnMgPSAwOworfQorCitzdGF0aWMg dm9pZCBpbnZhbGlkX2Rlc3Ryb3koaW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV92 bV9jb250cm9sIGN0bCA9IHt9OworCisJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5 MTUsICZjdGwpLCAtRU5PRU5UKTsKKworCWlndF9hc3NlcnRfZXEodm1fY3JlYXRlX2lvY3RsKGk5 MTUsICZjdGwpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHZtX2Rlc3Ryb3lfaW9jdGwoaTkxNSwgJmN0 bCksIDApOworCWlndF9hc3NlcnRfZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgLUVO T0VOVCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7 CisJY3RsLnZtX2lkID0gY3RsLnZtX2lkICsgMTsgLyogYXNzdW1lcyBubyBvbmUgZWxzZSBhbGxv Y2F0ZWQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHZtX2Rlc3Ryb3lfaW9jdGwoaTkxNSwgJmN0bCksIC1F Tk9FTlQpOworCWN0bC52bV9pZCA9IGN0bC52bV9pZCAtIDE7CisJaWd0X2Fzc2VydF9lcSh2bV9k ZXN0cm95X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKworCWlndF9hc3NlcnRfZXEodm1fY3JlYXRl X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKwljdGwuZmxhZ3MgPSAtMTsKKwlpZ3RfYXNzZXJ0X2Vx KHZtX2Rlc3Ryb3lfaW9jdGwoaTkxNSwgJmN0bCksIC1FSU5WQUwpOworCWN0bC5mbGFncyA9IDA7 CisJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKworCWln dF9hc3NlcnRfZXEodm1fY3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKwljdGwuZXh0ZW5z aW9ucyA9IC0xOworCWlndF9hc3NlcnRfZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwg LUVJTlZBTCk7CisJY3RsLmV4dGVuc2lvbnMgPSAwOworCWlndF9hc3NlcnRfZXEodm1fZGVzdHJv eV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBfX2JhdGNoX2Ny ZWF0ZShpbnQgaTkxNSwgdWludDMyX3Qgb2Zmc2V0KQoreworCWNvbnN0IHVpbnQzMl90IGJiZSA9 IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJdWludDMyX3QgaGFuZGxlOworCisJaGFuZGxlID0gZ2Vt X2NyZWF0ZShpOTE1LCBBTElHTihvZmZzZXQgKyA0LCA0MDk2KSk7CisJZ2VtX3dyaXRlKGk5MTUs IGhhbmRsZSwgb2Zmc2V0LCAmYmJlLCBzaXplb2YoYmJlKSk7CisKKwlyZXR1cm4gaGFuZGxlOwor fQorCitzdGF0aWMgdWludDMyX3QgYmF0Y2hfY3JlYXRlKGludCBpOTE1KQoreworCXJldHVybiBf X2JhdGNoX2NyZWF0ZShpOTE1LCAwKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfc2FtZV92bShp bnQgaTkxNSwgdWludDMyX3QgY3R4X2EsIHVpbnQzMl90IGN0eF9iKQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0geworCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRl KGk5MTUpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKKwkJ LmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCisJCS5idWZmZXJfY291bnQg PSAxLAorCX07CisKKwkvKiBGaXJzdCB2ZXJpZnkgdGhhdCB3ZSB0cnkgdG8gdXNlICJzb2Z0cGlu bmluZyIgYnkgZGVmYXVsdCAqLworCWJhdGNoLm9mZnNldCA9IDQ4IDw8IDIwOworCWViLnJzdmQx ID0gY3R4X2E7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKKwlpZ3RfYXNzZXJ0X2VxX3U2NChi YXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsKKworCS8qIEFuIGFscmVhZHkgYWN0aXZlIFZNQSB3aWxs IHRyeSB0byBrZWVwIGl0cyBvZmZzZXQgKi8KKwliYXRjaC5vZmZzZXQgPSAwOworCWViLnJzdmQx ID0gY3R4X2I7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKKwlpZ3RfYXNzZXJ0X2VxX3U2NChi YXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsKKworCWdlbV9zeW5jKGk5MTUsIGJhdGNoLmhhbmRsZSk7 CisJZ2VtX2Nsb3NlKGk5MTUsIGJhdGNoLmhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0 ZV9leHQoaW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9l eHRfc2V0cGFyYW0gZXh0ID0geworCQl7IC5uYW1lID0gSTkxNV9DT05URVhUX0NSRUFURV9FWFRf U0VUUEFSQU0gfSwKKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0gfQorCX07CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgY3JlYXRlID0geworCQkuZmxh Z3MgPSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1VTRV9FWFRFTlNJT05TCisJfTsKKwl1aW50 MzJfdCBjdHhbMl07CisKKwlpZ3RfcmVxdWlyZShjdHhfY3JlYXRlX2lvY3RsKGk5MTUsICZjcmVh dGUpID09IDApOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3JlYXRlLmN0eF9pZCk7CisK KwljcmVhdGUuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcigmZXh0KTsKKworCWV4dC5wYXJh bS52YWx1ZSA9IGdlbV92bV9jcmVhdGUoaTkxNSk7CisKKwlpZ3RfYXNzZXJ0X2VxKGN0eF9jcmVh dGVfaW9jdGwoaTkxNSwgJmNyZWF0ZSksIDApOworCWN0eFswXSA9IGNyZWF0ZS5jdHhfaWQ7CisK KwlpZ3RfYXNzZXJ0X2VxKGN0eF9jcmVhdGVfaW9jdGwoaTkxNSwgJmNyZWF0ZSksIDApOworCWN0 eFsxXSA9IGNyZWF0ZS5jdHhfaWQ7CisKKwlnZW1fdm1fZGVzdHJveShpOTE1LCBleHQucGFyYW0u dmFsdWUpOworCisJY2hlY2tfc2FtZV92bShpOTE1LCBjdHhbMF0sIGN0eFsxXSk7CisKKwlnZW1f Y29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFsxXSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1 LCBjdHhbMF0pOworfQorCitzdGF0aWMgdm9pZCBleGVjYnVmKGludCBpOTE1KQoreworCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0geworCQkuaGFuZGxlID0gYmF0Y2hf Y3JlYXRlKGk5MTUpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9 IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCisJCS5idWZmZXJf Y291bnQgPSAxLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9 IHsKKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAorCX07CisKKwkvKiBGaXJzdCB2 ZXJpZnkgdGhhdCB3ZSB0cnkgdG8gdXNlICJzb2Z0cGlubmluZyIgYnkgZGVmYXVsdCAqLworCWJh dGNoLm9mZnNldCA9IDQ4IDw8IDIwOworCWdlbV9leGVjYnVmKGk5MTUsICZlYik7CisJaWd0X2Fz c2VydF9lcV91NjQoYmF0Y2gub2Zmc2V0LCA0OCA8PCAyMCk7CisKKwlhcmcudmFsdWUgPSBnZW1f dm1fY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKKwln ZW1fZXhlY2J1ZihpOTE1LCAmZWIpOworCWlndF9hc3NlcnRfZXFfdTY0KGJhdGNoLm9mZnNldCwg NDggPDwgMjApOworCWdlbV92bV9kZXN0cm95KGk5MTUsIGFyZy52YWx1ZSk7CisKKwlhcmcudmFs dWUgPSBnZW1fdm1fY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAm YXJnKTsKKwliYXRjaC5vZmZzZXQgPSAwOworCWdlbV9leGVjYnVmKGk5MTUsICZlYik7CisJaWd0 X2Fzc2VydF9lcV91NjQoYmF0Y2gub2Zmc2V0LCAwKTsKKwlnZW1fdm1fZGVzdHJveShpOTE1LCBh cmcudmFsdWUpOworCisJZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFuZGxlKTsKKwlnZW1fY2xvc2Uo aTkxNSwgYmF0Y2guaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRlX3RvX2FkZHJlc3Mo aW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IHZhbHVlKQorewor CWNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0geworCQkuaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgNDA5NikKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZWIgPSB7CisJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmYmF0Y2gpLAorCQkuYnVm ZmVyX2NvdW50ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCX07CisJdWludDMyX3QgY3NbMTZdOwor CWludCBpOworCisJaSA9IDA7CisJY3NbaV0gPSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwg NiA/IDEgPDwgMjIgOiAwKTsKKwlpZiAoZ2VuID49IDgpIHsKKwkJY3NbKytpXSA9IGFkZHI7CisJ CWNzWysraV0gPSBhZGRyID4+IDMyOworCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJY3NbKytp XSA9IDA7CisJCWNzWysraV0gPSBhZGRyOworCX0gZWxzZSB7CisJCWNzW2ldLS07CisJCWNzWysr aV0gPSBhZGRyOworCX0KKwljc1srK2ldID0gdmFsdWU7CisJY3NbKytpXSA9IE1JX0JBVENIX0JV RkZFUl9FTkQ7CisJZ2VtX3dyaXRlKGZkLCBiYXRjaC5oYW5kbGUsIDAsIGNzLCBzaXplb2YoY3Mp KTsKKworCWdlbV9leGVjYnVmKGZkLCAmZWIpOworCWlndF9hc3NlcnQoYmF0Y2gub2Zmc2V0ICE9 IGFkZHIpOworCisJZ2VtX3N5bmMoZmQsIGJhdGNoLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBi YXRjaC5oYW5kbGUpOworfQorCitzdGF0aWMgdm9pZCBpc29sYXRpb24oaW50IGk5MTUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdID0geworCQl7CisJCQkuaGFu ZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJCS5vZmZzZXQgPSAxIDw8IDIwCisJCX0s CisJCXsgLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwgfQorCX07CisJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKG9iaiksCisJCS5idWZmZXJfY291bnQgPSAyLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X3BhcmFtIGFyZyA9IHsKKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZN LAorCX07CisJaW50IG90aGVyID0gZ2VtX3Jlb3Blbl9kcml2ZXIoaTkxNSk7CisJdWludDMyX3Qg Y3R4WzJdLCB2bVsyXSwgcmVzdWx0OworCWludCBsb29wcyA9IDQwOTY7CisKKwkvKiBBbiB2bV9p ZCBvbiBvbmUgZmQgaXMgbm90IHRoZSBzYW1lIG9uIGFub3RoZXIgZmQgKi8KKwlpZ3RfYXNzZXJ0 X25lcShpOTE1LCBvdGhlcik7CisKKwljdHhbMF0gPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7 CisJY3R4WzFdID0gZ2VtX2NvbnRleHRfY3JlYXRlKG90aGVyKTsKKworCXZtWzBdID0gZ2VtX3Zt X2NyZWF0ZShpOTE1KTsKKwlkbyB7CisJCXZtWzFdID0gZ2VtX3ZtX2NyZWF0ZShvdGhlcik7CisJ fSB3aGlsZSAodm1bMV0gIT0gdm1bMF0gJiYgbG9vcHMtLSA+IDApOworCWlndF9hc3NlcnQobG9v cHMpOworCisJYXJnLmN0eF9pZCA9IGN0eFswXTsKKwlhcmcudmFsdWUgPSB2bVswXTsKKwlnZW1f Y29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJmFyZyk7CisKKwlhcmcuY3R4X2lkID0gY3R4WzFdOwor CWFyZy52YWx1ZSA9IHZtWzFdOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShvdGhlciwgJmFyZyk7 CisKKwllYi5yc3ZkMSA9IGN0eFswXTsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZWIpOyAvKiBiaW5k IG9iamVjdCBpbnRvIHZtWzBdICovCisKKwkvKiBWZXJpZnkgdGhlIHRyaWNrIHdpdGggdGhlIGFz c3VtZWQgdGFyZ2V0IGFkZHJlc3Mgd29ya3MgKi8KKwl3cml0ZV90b19hZGRyZXNzKGk5MTUsIGN0 eFswXSwgb2JqWzBdLm9mZnNldCwgMSk7CisJZ2VtX3JlYWQoaTkxNSwgb2JqWzBdLmhhbmRsZSwg MCwgJnJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpOworCWlndF9hc3NlcnRfZXEocmVzdWx0LCAxKTsK KworCS8qIE5vdyBjaGVjayB0aGF0IHdlIGNhbid0IHdyaXRlIHRvIHZtWzBdIGZyb20gc2Vjb25k IGZkL3ZtICovCisJd3JpdGVfdG9fYWRkcmVzcyhvdGhlciwgY3R4WzFdLCBvYmpbMF0ub2Zmc2V0 LCAyKTsKKwlnZW1fcmVhZChpOTE1LCBvYmpbMF0uaGFuZGxlLCAwLCAmcmVzdWx0LCBzaXplb2Yo cmVzdWx0KSk7CisJaWd0X2Fzc2VydF9lcShyZXN1bHQsIDEpOworCisJY2xvc2Uob3RoZXIpOwor CisJZ2VtX2Nsb3NlKGk5MTUsIG9ialsxXS5oYW5kbGUpOworCWdlbV9jbG9zZShpOTE1LCBvYmpb MF0uaGFuZGxlKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4WzBdKTsKKwlnZW1f dm1fZGVzdHJveShpOTE1LCB2bVswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGFzeW5jX2Rlc3Ryb3ko aW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9IHsK KwkJLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KSwKKwkJLnZhbHVlID0gZ2VtX3Zt X2NyZWF0ZShpOTE1KSwKKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAorCX07CisJ aWd0X3NwaW5fdCAqc3BpblsyXTsKKworCXNwaW5bMF0gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwKKwkJ CSAgICAgICAuY3R4ID0gYXJnLmN0eF9pZCwKKwkJCSAgICAgICAuZmxhZ3MgPSBJR1RfU1BJTl9Q T0xMX1JVTik7CisJaWd0X3NwaW5fYnVzeXdhaXRfdW50aWxfc3RhcnRlZChzcGluWzBdKTsKKwor CWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKKwlzcGluWzFdID0gX19pZ3Rfc3Bp bl9uZXcoaTkxNSwgLmN0eCA9IGFyZy5jdHhfaWQpOworCisJaWd0X3NwaW5fZW5kKHNwaW5bMF0p OworCWdlbV9zeW5jKGk5MTUsIHNwaW5bMF0tPmhhbmRsZSk7CisKKwlnZW1fdm1fZGVzdHJveShp OTE1LCBhcmcudmFsdWUpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgYXJnLmN0eF9pZCk7 CisKKwlpZ3Rfc3Bpbl9lbmQoc3BpblsxXSk7CisJZ2VtX3N5bmMoaTkxNSwgc3BpblsxXS0+aGFu ZGxlKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGluKTsgaSsrKQorCQlp Z3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5baV0pOworfQorCitpZ3RfbWFpbgoreworCWludCBpOTE1 ID0gLTE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCQlpZ3RfcmVxdWlyZShoYXNfdm0o aTkxNSkpOworCX0KKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLWNyZWF0ZSIpCisJCWludmFsaWRf Y3JlYXRlKGk5MTUpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtZGVzdHJveSIpCisJCWludmFs aWRfZGVzdHJveShpOTE1KTsKKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1cmUg eworCQkJZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpOTE1LCBJOTE1X0NPTlRFWFRfUEFSQU1f Vk0pOworCQl9CisKKwkJaWd0X3N1YnRlc3QoImV4ZWNidWYiKQorCQkJZXhlY2J1ZihpOTE1KTsK KworCQlpZ3Rfc3VidGVzdCgiaXNvbGF0aW9uIikKKwkJCWlzb2xhdGlvbihpOTE1KTsKKworCQlp Z3Rfc3VidGVzdCgiY3JlYXRlLWV4dCIpCisJCQljcmVhdGVfZXh0KGk5MTUpOworCisJCWlndF9z dWJ0ZXN0KCJhc3luYy1kZXN0cm95IikKKwkJCWFzeW5jX2Rlc3Ryb3koaTkxNSk7CisJfQorCisJ aWd0X2ZpeHR1cmUgeworCQljbG9zZShpOTE1KTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9t ZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDY0MDAxOGFlOC4uYjk2YTliYTgy IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApA QCAtMjE1LDYgKzIxNSw3IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2dlbV91bmZlbmNlX2FjdGl2ZV9i dWZmZXJzJywKIAknZ2VtX3VucmVmX2FjdGl2ZV9idWZmZXJzJywKIAknZ2VtX3VzZXJwdHJfYmxp dHMnLAorCSdnZW1fdm1fY3JlYXRlJywKIAknZ2VtX3dhaXQnLAogCSdnZW1fd29ya2Fyb3VuZHMn LAogCSdnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCcsCi0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Wed, 22 May 2019 12:37:01 +0100 Message-Id: <20190522113712.23512-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t 01/12] i915: Add gem_vm_create List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: RXhlcmNpc2UgYmFzaWMgY3JlYXRpb24gYW5kIHN3YXBwaW5nIGJldHdlZW4gbmV3IGFkZHJlc3Mg c3BhY2VzLgoKdjI6IENoZWNrIGlzb2xhdGlvbiB0aGF0IHRoZSBzYW1lIHZtX2lkIG9uIGRpZmZl cmVudCBmZCBhcmUgaW5kZWVkCmRpZmZlcmVudCBWTS4KdjM6IENyb3NzLW92ZXIgY2hlY2sgd2l0 aCBDUkVBVEVfRVhUX1NFVFBBUkFNCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+ClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50 ZWwuY29tPgotLS0KIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgIHwgICAyICsKIGxpYi9pOTE1 L2dlbV92bS5jICAgICAgICAgIHwgMTMwICsrKysrKysrKysrKwogbGliL2k5MTUvZ2VtX3ZtLmgg ICAgICAgICAgfCAgMzggKysrKwogbGliL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgIDEgKwog dGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgfCAgIDEgKwogdGVzdHMvaTkxNS9nZW1fdm1fY3Jl YXRlLmMgfCA0MTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMv bWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA1ODUgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2dlbV92bS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2k5MTUvZ2VtX3ZtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1 L2dlbV92bV9jcmVhdGUuYwoKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGli L01ha2VmaWxlLnNvdXJjZXMKaW5kZXggOTc2ODU4MjM4Li44OTFmNjViOTYgMTAwNjQ0Ci0tLSBh L2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xMyw2 ICsxMyw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCWk5MTUvZ2VtX3JpbmcuYwlcCiAJaTkx NS9nZW1fbW1hbi5jCVwKIAlpOTE1L2dlbV9tbWFuLmgJXAorCWk5MTUvZ2VtX3ZtLmMJXAorCWk5 MTUvZ2VtX3ZtLmgJXAogCWk5MTVfM2QuaAkJXAogCWk5MTVfcmVnLmgJCVwKIAlpOTE1X3BjaWlk cy5oCQlcCmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fdm0uYyBiL2xpYi9pOTE1L2dlbV92bS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uOWEwMjJhNTZjCi0tLSAvZGV2 L251bGwKKysrIGIvbGliL2k5MTUvZ2VtX3ZtLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs dWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCisjaW5jbHVkZSAi ZHJtdGVzdC5oIgorCisjaW5jbHVkZSAiaTkxNS9nZW1fdm0uaCIKKworLyoqCisgKiBTRUNUSU9O OmdlbV92bQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGgg YWRkcmVzcyBzcGFjZXMgKHZtL0dUVCkKKyAqIEB0aXRsZTogR0VNIFZpcnR1YWwgTWVtb3J5Cisg KgorICogVGhpcyBoZWxwZXIgbGlicmFyeSBjb250YWlucyBmdW5jdGlvbnMgdXNlZCBmb3IgaGFu ZGxpbmcgZ2VtIGFkZHJlc3MKKyAqIHNwYWNlcy4KKyAqLworCisvKioKKyAqIGdlbV9oYXNfdm06 CisgKiBAaTkxNTogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqCisgKiBSZXR1cm5z OiB3aGV0aGVyIFZNIGNyZWF0aW9uIGlzIHN1cHBvcnRlZCBvciBub3QuCisgKi8KK2Jvb2wgZ2Vt X2hhc192bShpbnQgaTkxNSkKK3sKKwl1aW50MzJfdCB2bV9pZCA9IDA7CisKKwlfX2dlbV92bV9j cmVhdGUoaTkxNSwgJnZtX2lkKTsKKwlpZiAodm1faWQpCisJCWdlbV92bV9kZXN0cm95KGk5MTUs IHZtX2lkKTsKKworCXJldHVybiB2bV9pZDsKK30KKworLyoqCisgKiBnZW1fcmVxdWlyZV92bToK KyAqIEBpOTE1OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICoKKyAqIFRoaXMgaGVs cGVyIHdpbGwgYXV0b21hdGljYWxseSBza2lwIHRoZSB0ZXN0IG9uIHBsYXRmb3JtcyB3aGVyZSBh ZGRyZXNzCisgKiBzcGFjZSBjcmVhdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICovCit2b2lkIGdl bV9yZXF1aXJlX3ZtKGludCBpOTE1KQoreworCWlndF9yZXF1aXJlKGdlbV9oYXNfdm0oaTkxNSkp OworfQorCitpbnQgX19nZW1fdm1fY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCAqdm1faWQpCit7 CisgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sIGN0bCA9IHt9OworICAgICAg IGludCBlcnIgPSAwOworCisgICAgICAgaWYgKGlndF9pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkx NV9HRU1fVk1fQ1JFQVRFLCAmY3RsKSA9PSAwKSB7CisgICAgICAgICAgICAgICAqdm1faWQgPSBj dGwudm1faWQ7CisgICAgICAgfSBlbHNlIHsKKwkgICAgICAgZXJyID0gLWVycm5vOworCSAgICAg ICBpZ3RfYXNzdW1lKGVyciAhPSAwKTsKKyAgICAgICB9CisKKyAgICAgICBlcnJubyA9IDA7Cisg ICAgICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBnZW1fdm1fY3JlYXRlOgorICogQGk5MTU6 IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKgorICogVGhpcyB3cmFwcyB0aGUgVk1f Q1JFQVRFIGlvY3RsLCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3CisgKiBhZGRyZXNz IHNwYWNlIGZvciB1c2Ugd2l0aCBHRU0gY29udGV4dHMuCisgKgorICogUmV0dXJuczogVGhlIGlk IG9mIHRoZSBhbGxvY2F0ZWQgYWRkcmVzcyBzcGFjZS4KKyAqLwordWludDMyX3QgZ2VtX3ZtX2Ny ZWF0ZShpbnQgaTkxNSkKK3sKKwl1aW50MzJfdCB2bV9pZDsKKworCWlndF9hc3NlcnRfZXEoX19n ZW1fdm1fY3JlYXRlKGk5MTUsICZ2bV9pZCksIDApOworCWlndF9hc3NlcnQodm1faWQgIT0gMCk7 CisKKwlyZXR1cm4gdm1faWQ7Cit9CisKK2ludCBfX2dlbV92bV9kZXN0cm95KGludCBpOTE1LCB1 aW50MzJfdCB2bV9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0g eyAudm1faWQgPSB2bV9pZCB9OworCWludCBlcnIgPSAwOworCisJaWYgKGlndF9pb2N0bChpOTE1 LCBEUk1fSU9DVExfSTkxNV9HRU1fVk1fREVTVFJPWSwgJmN0bCkpIHsKKwkJZXJyID0gLWVycm5v OworCQlpZ3RfYXNzdW1lKGVycik7CisJfQorCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9 CisKKy8qKgorICogZ2VtX3ZtX2Rlc3Ryb3k6CisgKiBAaTkxNTogb3BlbiBpOTE1IGRybSBmaWxl IGRlc2NyaXB0b3IKKyAqIEB2bV9pZDogaTkxNSBWTSBpZAorICoKKyAqIFRoaXMgd3JhcHMgdGhl IFZNX0RFU1RST1kgaW9jdGwsIHdoaWNoIGlzIHVzZWQgdG8gZnJlZSBhbiBhZGRyZXNzIHNwYWNl CisgKiBoYW5kbGUuCisgKi8KK3ZvaWQgZ2VtX3ZtX2Rlc3Ryb3koaW50IGk5MTUsIHVpbnQzMl90 IHZtX2lkKQoreworCWlndF9hc3NlcnRfZXEoX19nZW1fdm1fZGVzdHJveShpOTE1LCB2bV9pZCks IDApOworfQpkaWZmIC0tZ2l0IGEvbGliL2k5MTUvZ2VtX3ZtLmggYi9saWIvaTkxNS9nZW1fdm0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjI3YWY4OTlkNAotLS0gL2Rl di9udWxsCisrKyBiL2xpYi9pOTE1L2dlbV92bS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEdFTV9WTV9ICisjZGVmaW5l IEdFTV9WTV9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworYm9vbCBnZW1faGFzX3ZtKGludCBp OTE1KTsKK3ZvaWQgZ2VtX3JlcXVpcmVfdm0oaW50IGk5MTUpOworCit1aW50MzJfdCBnZW1fdm1f Y3JlYXRlKGludCBpOTE1KTsKK2ludCBfX2dlbV92bV9jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90 ICp2bV9pZCk7CisKK3ZvaWQgZ2VtX3ZtX2Rlc3Ryb3koaW50IGk5MTUsIHVpbnQzMl90IHZtX2lk KTsKK2ludCBfX2dlbV92bV9kZXN0cm95KGludCBpOTE1LCB1aW50MzJfdCB2bV9pZCk7CisKKyNl bmRpZiAvKiBHRU1fVk1fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21l c29uLmJ1aWxkCmluZGV4IDgwNzM2ODY4Ni4uMjk4OWUxMWIzIDEwMDY0NAotLS0gYS9saWIvbWVz b24uYnVpbGQKKysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC01LDYgKzUsNyBAQCBsaWJfc291cmNl cyA9IFsKIAknaTkxNS9nZW1fc3VibWlzc2lvbi5jJywKIAknaTkxNS9nZW1fcmluZy5jJywKIAkn aTkxNS9nZW1fbW1hbi5jJywKKwknaTkxNS9nZW1fdm0uYycsCiAJJ2lndF9jb2xvcl9lbmNvZGlu Zy5jJywKIAknaWd0X2RlYnVnZnMuYycsCiAJJ2lndF9kZXZpY2UuYycsCmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCAyZDVj OTI5ZTMuLmNiZDRiNTI4OSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yMSw2ICsyMSw3IEBAIFRFU1RTX3Byb2dzID0g XAogCWRybV9pbXBvcnRfZXhwb3J0IFwKIAlkcm1fbW0gXAogCWRybV9yZWFkIFwKKwlpOTE1L2dl bV92bV9jcmVhdGUgXAogCWttc18zZCBcCiAJa21zX2FkZGZiX2Jhc2ljIFwKIAlrbXNfYXRvbWlj IFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3ZtX2NyZWF0ZS5jIGIvdGVzdHMvaTkxNS9n ZW1fdm1fY3JlYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5jYmQy NzNkOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pOTE1L2dlbV92bV9jcmVhdGUuYwpAQCAt MCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNp bmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSAiaTkx NS9nZW1fdm0uaCIKKworc3RhdGljIGludCB2bV9jcmVhdGVfaW9jdGwoaW50IGk5MTUsIHN0cnVj dCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCAqY3RsKQoreworCWludCBlcnIgPSAwOworCWlmIChp Z3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX1ZNX0NSRUFURSwgY3RsKSkgeworCQll cnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsKKwl9CisJZXJybm8gPSAwOworCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdm1fZGVzdHJveV9pb2N0bChpbnQgaTkxNSwgc3RydWN0 IGRybV9pOTE1X2dlbV92bV9jb250cm9sICpjdGwpCit7CisJaW50IGVyciA9IDA7CisJaWYgKGln dF9pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkxNV9HRU1fVk1fREVTVFJPWSwgY3RsKSkgeworCQll cnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsKKwl9CisJZXJybm8gPSAwOworCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3R4X2NyZWF0ZV9pb2N0bChpbnQgaTkxNSwKKwkJCSAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dCAqYXJnKQoreworCWludCBl cnIgPSAwOworCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRf Q1JFQVRFX0VYVCwgYXJnKSkgeworCQllcnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsK Kwl9CisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIGhhc192bShp bnQgaTkxNSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgY3RsID0ge307CisJ aW50IGVycjsKKworCWVyciA9IHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKTsKKwlzd2l0Y2gg KGVycikgeworCWNhc2UgLUVJTlZBTDogLyogdW5rbm93biBpb2N0bCAqLworCWNhc2UgLUVOT0RF VjogLyogIWZ1bGwtcHBndHQgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJY2FzZSAwOgorCQlnZW1f dm1fZGVzdHJveShpOTE1LCBjdGwudm1faWQpOworCQlyZXR1cm4gdHJ1ZTsKKworCWRlZmF1bHQ6 CisJCWlndF9mYWlsX29uX2YoZXJyLCAiVW5rbm93biByZXNwb25zZSBmcm9tIFZNX0NSRUFURVxu Iik7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRfY3JlYXRl KGludCBpOTE1KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fdm1fY29udHJvbCBjdGwgPSB7fTsK KwlzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBleHQgPSB7IC5uYW1lID0gLTEgfTsKKworCWln dF9hc3NlcnRfZXEodm1fY3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKwlnZW1fdm1fZGVz dHJveShpOTE1LCBjdGwudm1faWQpOworCisJY3RsLnZtX2lkID0gMHhkZWFkYmVlZjsKKwlpZ3Rf YXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7CisJZ2VtX3ZtX2Rlc3Ry b3koaTkxNSwgY3RsLnZtX2lkKTsKKwljdGwudm1faWQgPSAwOworCisJY3RsLmZsYWdzID0gLTE7 CisJaWd0X2Fzc2VydF9lcSh2bV9jcmVhdGVfaW9jdGwoaTkxNSwgJmN0bCksIC1FSU5WQUwpOwor CWN0bC5mbGFncyA9IDA7CisKKwljdGwuZXh0ZW5zaW9ucyA9IC0xOworCWlndF9hc3NlcnRfZXEo dm1fY3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAtRUZBVUxUKTsKKwljdGwuZXh0ZW5zaW9ucyA9 IHRvX3VzZXJfcG9pbnRlcigmZXh0KTsKKwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChp OTE1LCAmY3RsKSwgLUVJTlZBTCk7CisJY3RsLmV4dGVuc2lvbnMgPSAwOworfQorCitzdGF0aWMg dm9pZCBpbnZhbGlkX2Rlc3Ryb3koaW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV92 bV9jb250cm9sIGN0bCA9IHt9OworCisJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5 MTUsICZjdGwpLCAtRU5PRU5UKTsKKworCWlndF9hc3NlcnRfZXEodm1fY3JlYXRlX2lvY3RsKGk5 MTUsICZjdGwpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHZtX2Rlc3Ryb3lfaW9jdGwoaTkxNSwgJmN0 bCksIDApOworCWlndF9hc3NlcnRfZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwgLUVO T0VOVCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHZtX2NyZWF0ZV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7 CisJY3RsLnZtX2lkID0gY3RsLnZtX2lkICsgMTsgLyogYXNzdW1lcyBubyBvbmUgZWxzZSBhbGxv Y2F0ZWQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHZtX2Rlc3Ryb3lfaW9jdGwoaTkxNSwgJmN0bCksIC1F Tk9FTlQpOworCWN0bC52bV9pZCA9IGN0bC52bV9pZCAtIDE7CisJaWd0X2Fzc2VydF9lcSh2bV9k ZXN0cm95X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKworCWlndF9hc3NlcnRfZXEodm1fY3JlYXRl X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKwljdGwuZmxhZ3MgPSAtMTsKKwlpZ3RfYXNzZXJ0X2Vx KHZtX2Rlc3Ryb3lfaW9jdGwoaTkxNSwgJmN0bCksIC1FSU5WQUwpOworCWN0bC5mbGFncyA9IDA7 CisJaWd0X2Fzc2VydF9lcSh2bV9kZXN0cm95X2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKworCWln dF9hc3NlcnRfZXEodm1fY3JlYXRlX2lvY3RsKGk5MTUsICZjdGwpLCAwKTsKKwljdGwuZXh0ZW5z aW9ucyA9IC0xOworCWlndF9hc3NlcnRfZXEodm1fZGVzdHJveV9pb2N0bChpOTE1LCAmY3RsKSwg LUVJTlZBTCk7CisJY3RsLmV4dGVuc2lvbnMgPSAwOworCWlndF9hc3NlcnRfZXEodm1fZGVzdHJv eV9pb2N0bChpOTE1LCAmY3RsKSwgMCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBfX2JhdGNoX2Ny ZWF0ZShpbnQgaTkxNSwgdWludDMyX3Qgb2Zmc2V0KQoreworCWNvbnN0IHVpbnQzMl90IGJiZSA9 IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJdWludDMyX3QgaGFuZGxlOworCisJaGFuZGxlID0gZ2Vt X2NyZWF0ZShpOTE1LCBBTElHTihvZmZzZXQgKyA0LCA0MDk2KSk7CisJZ2VtX3dyaXRlKGk5MTUs IGhhbmRsZSwgb2Zmc2V0LCAmYmJlLCBzaXplb2YoYmJlKSk7CisKKwlyZXR1cm4gaGFuZGxlOwor fQorCitzdGF0aWMgdWludDMyX3QgYmF0Y2hfY3JlYXRlKGludCBpOTE1KQoreworCXJldHVybiBf X2JhdGNoX2NyZWF0ZShpOTE1LCAwKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfc2FtZV92bShp bnQgaTkxNSwgdWludDMyX3QgY3R4X2EsIHVpbnQzMl90IGN0eF9iKQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0geworCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRl KGk5MTUpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKKwkJ LmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCisJCS5idWZmZXJfY291bnQg PSAxLAorCX07CisKKwkvKiBGaXJzdCB2ZXJpZnkgdGhhdCB3ZSB0cnkgdG8gdXNlICJzb2Z0cGlu bmluZyIgYnkgZGVmYXVsdCAqLworCWJhdGNoLm9mZnNldCA9IDQ4IDw8IDIwOworCWViLnJzdmQx ID0gY3R4X2E7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKKwlpZ3RfYXNzZXJ0X2VxX3U2NChi YXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsKKworCS8qIEFuIGFscmVhZHkgYWN0aXZlIFZNQSB3aWxs IHRyeSB0byBrZWVwIGl0cyBvZmZzZXQgKi8KKwliYXRjaC5vZmZzZXQgPSAwOworCWViLnJzdmQx ID0gY3R4X2I7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKKwlpZ3RfYXNzZXJ0X2VxX3U2NChi YXRjaC5vZmZzZXQsIDQ4IDw8IDIwKTsKKworCWdlbV9zeW5jKGk5MTUsIGJhdGNoLmhhbmRsZSk7 CisJZ2VtX2Nsb3NlKGk5MTUsIGJhdGNoLmhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0 ZV9leHQoaW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9l eHRfc2V0cGFyYW0gZXh0ID0geworCQl7IC5uYW1lID0gSTkxNV9DT05URVhUX0NSRUFURV9FWFRf U0VUUEFSQU0gfSwKKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0gfQorCX07CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgY3JlYXRlID0geworCQkuZmxh Z3MgPSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1VTRV9FWFRFTlNJT05TCisJfTsKKwl1aW50 MzJfdCBjdHhbMl07CisKKwlpZ3RfcmVxdWlyZShjdHhfY3JlYXRlX2lvY3RsKGk5MTUsICZjcmVh dGUpID09IDApOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3JlYXRlLmN0eF9pZCk7CisK KwljcmVhdGUuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcigmZXh0KTsKKworCWV4dC5wYXJh bS52YWx1ZSA9IGdlbV92bV9jcmVhdGUoaTkxNSk7CisKKwlpZ3RfYXNzZXJ0X2VxKGN0eF9jcmVh dGVfaW9jdGwoaTkxNSwgJmNyZWF0ZSksIDApOworCWN0eFswXSA9IGNyZWF0ZS5jdHhfaWQ7CisK KwlpZ3RfYXNzZXJ0X2VxKGN0eF9jcmVhdGVfaW9jdGwoaTkxNSwgJmNyZWF0ZSksIDApOworCWN0 eFsxXSA9IGNyZWF0ZS5jdHhfaWQ7CisKKwlnZW1fdm1fZGVzdHJveShpOTE1LCBleHQucGFyYW0u dmFsdWUpOworCisJY2hlY2tfc2FtZV92bShpOTE1LCBjdHhbMF0sIGN0eFsxXSk7CisKKwlnZW1f Y29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFsxXSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1 LCBjdHhbMF0pOworfQorCitzdGF0aWMgdm9pZCBleGVjYnVmKGludCBpOTE1KQoreworCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0geworCQkuaGFuZGxlID0gYmF0Y2hf Y3JlYXRlKGk5MTUpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9 IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZiYXRjaCksCisJCS5idWZmZXJf Y291bnQgPSAxLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9 IHsKKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAorCX07CisKKwkvKiBGaXJzdCB2 ZXJpZnkgdGhhdCB3ZSB0cnkgdG8gdXNlICJzb2Z0cGlubmluZyIgYnkgZGVmYXVsdCAqLworCWJh dGNoLm9mZnNldCA9IDQ4IDw8IDIwOworCWdlbV9leGVjYnVmKGk5MTUsICZlYik7CisJaWd0X2Fz c2VydF9lcV91NjQoYmF0Y2gub2Zmc2V0LCA0OCA8PCAyMCk7CisKKwlhcmcudmFsdWUgPSBnZW1f dm1fY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKKwln ZW1fZXhlY2J1ZihpOTE1LCAmZWIpOworCWlndF9hc3NlcnRfZXFfdTY0KGJhdGNoLm9mZnNldCwg NDggPDwgMjApOworCWdlbV92bV9kZXN0cm95KGk5MTUsIGFyZy52YWx1ZSk7CisKKwlhcmcudmFs dWUgPSBnZW1fdm1fY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAm YXJnKTsKKwliYXRjaC5vZmZzZXQgPSAwOworCWdlbV9leGVjYnVmKGk5MTUsICZlYik7CisJaWd0 X2Fzc2VydF9lcV91NjQoYmF0Y2gub2Zmc2V0LCAwKTsKKwlnZW1fdm1fZGVzdHJveShpOTE1LCBh cmcudmFsdWUpOworCisJZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFuZGxlKTsKKwlnZW1fY2xvc2Uo aTkxNSwgYmF0Y2guaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQKK3dyaXRlX3RvX2FkZHJlc3Mo aW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IHZhbHVlKQorewor CWNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGJhdGNoID0geworCQkuaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgNDA5NikKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZWIgPSB7CisJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmYmF0Y2gpLAorCQkuYnVm ZmVyX2NvdW50ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCX07CisJdWludDMyX3QgY3NbMTZdOwor CWludCBpOworCisJaSA9IDA7CisJY3NbaV0gPSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwg NiA/IDEgPDwgMjIgOiAwKTsKKwlpZiAoZ2VuID49IDgpIHsKKwkJY3NbKytpXSA9IGFkZHI7CisJ CWNzWysraV0gPSBhZGRyID4+IDMyOworCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJY3NbKytp XSA9IDA7CisJCWNzWysraV0gPSBhZGRyOworCX0gZWxzZSB7CisJCWNzW2ldLS07CisJCWNzWysr aV0gPSBhZGRyOworCX0KKwljc1srK2ldID0gdmFsdWU7CisJY3NbKytpXSA9IE1JX0JBVENIX0JV RkZFUl9FTkQ7CisJZ2VtX3dyaXRlKGZkLCBiYXRjaC5oYW5kbGUsIDAsIGNzLCBzaXplb2YoY3Mp KTsKKworCWdlbV9leGVjYnVmKGZkLCAmZWIpOworCWlndF9hc3NlcnQoYmF0Y2gub2Zmc2V0ICE9 IGFkZHIpOworCisJZ2VtX3N5bmMoZmQsIGJhdGNoLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBi YXRjaC5oYW5kbGUpOworfQorCitzdGF0aWMgdm9pZCBpc29sYXRpb24oaW50IGk5MTUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdID0geworCQl7CisJCQkuaGFu ZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJCS5vZmZzZXQgPSAxIDw8IDIwCisJCX0s CisJCXsgLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwgfQorCX07CisJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKG9iaiksCisJCS5idWZmZXJfY291bnQgPSAyLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X3BhcmFtIGFyZyA9IHsKKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZN LAorCX07CisJaW50IG90aGVyID0gZ2VtX3Jlb3Blbl9kcml2ZXIoaTkxNSk7CisJdWludDMyX3Qg Y3R4WzJdLCB2bVsyXSwgcmVzdWx0OworCWludCBsb29wcyA9IDQwOTY7CisKKwkvKiBBbiB2bV9p ZCBvbiBvbmUgZmQgaXMgbm90IHRoZSBzYW1lIG9uIGFub3RoZXIgZmQgKi8KKwlpZ3RfYXNzZXJ0 X25lcShpOTE1LCBvdGhlcik7CisKKwljdHhbMF0gPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7 CisJY3R4WzFdID0gZ2VtX2NvbnRleHRfY3JlYXRlKG90aGVyKTsKKworCXZtWzBdID0gZ2VtX3Zt X2NyZWF0ZShpOTE1KTsKKwlkbyB7CisJCXZtWzFdID0gZ2VtX3ZtX2NyZWF0ZShvdGhlcik7CisJ fSB3aGlsZSAodm1bMV0gIT0gdm1bMF0gJiYgbG9vcHMtLSA+IDApOworCWlndF9hc3NlcnQobG9v cHMpOworCisJYXJnLmN0eF9pZCA9IGN0eFswXTsKKwlhcmcudmFsdWUgPSB2bVswXTsKKwlnZW1f Y29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJmFyZyk7CisKKwlhcmcuY3R4X2lkID0gY3R4WzFdOwor CWFyZy52YWx1ZSA9IHZtWzFdOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShvdGhlciwgJmFyZyk7 CisKKwllYi5yc3ZkMSA9IGN0eFswXTsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZWIpOyAvKiBiaW5k IG9iamVjdCBpbnRvIHZtWzBdICovCisKKwkvKiBWZXJpZnkgdGhlIHRyaWNrIHdpdGggdGhlIGFz c3VtZWQgdGFyZ2V0IGFkZHJlc3Mgd29ya3MgKi8KKwl3cml0ZV90b19hZGRyZXNzKGk5MTUsIGN0 eFswXSwgb2JqWzBdLm9mZnNldCwgMSk7CisJZ2VtX3JlYWQoaTkxNSwgb2JqWzBdLmhhbmRsZSwg MCwgJnJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpOworCWlndF9hc3NlcnRfZXEocmVzdWx0LCAxKTsK KworCS8qIE5vdyBjaGVjayB0aGF0IHdlIGNhbid0IHdyaXRlIHRvIHZtWzBdIGZyb20gc2Vjb25k IGZkL3ZtICovCisJd3JpdGVfdG9fYWRkcmVzcyhvdGhlciwgY3R4WzFdLCBvYmpbMF0ub2Zmc2V0 LCAyKTsKKwlnZW1fcmVhZChpOTE1LCBvYmpbMF0uaGFuZGxlLCAwLCAmcmVzdWx0LCBzaXplb2Yo cmVzdWx0KSk7CisJaWd0X2Fzc2VydF9lcShyZXN1bHQsIDEpOworCisJY2xvc2Uob3RoZXIpOwor CisJZ2VtX2Nsb3NlKGk5MTUsIG9ialsxXS5oYW5kbGUpOworCWdlbV9jbG9zZShpOTE1LCBvYmpb MF0uaGFuZGxlKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4WzBdKTsKKwlnZW1f dm1fZGVzdHJveShpOTE1LCB2bVswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGFzeW5jX2Rlc3Ryb3ko aW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9IHsK KwkJLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KSwKKwkJLnZhbHVlID0gZ2VtX3Zt X2NyZWF0ZShpOTE1KSwKKwkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAorCX07CisJ aWd0X3NwaW5fdCAqc3BpblsyXTsKKworCXNwaW5bMF0gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwKKwkJ CSAgICAgICAuY3R4ID0gYXJnLmN0eF9pZCwKKwkJCSAgICAgICAuZmxhZ3MgPSBJR1RfU1BJTl9Q T0xMX1JVTik7CisJaWd0X3NwaW5fYnVzeXdhaXRfdW50aWxfc3RhcnRlZChzcGluWzBdKTsKKwor CWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmYXJnKTsKKwlzcGluWzFdID0gX19pZ3Rfc3Bp bl9uZXcoaTkxNSwgLmN0eCA9IGFyZy5jdHhfaWQpOworCisJaWd0X3NwaW5fZW5kKHNwaW5bMF0p OworCWdlbV9zeW5jKGk5MTUsIHNwaW5bMF0tPmhhbmRsZSk7CisKKwlnZW1fdm1fZGVzdHJveShp OTE1LCBhcmcudmFsdWUpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgYXJnLmN0eF9pZCk7 CisKKwlpZ3Rfc3Bpbl9lbmQoc3BpblsxXSk7CisJZ2VtX3N5bmMoaTkxNSwgc3BpblsxXS0+aGFu ZGxlKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGluKTsgaSsrKQorCQlp Z3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5baV0pOworfQorCitpZ3RfbWFpbgoreworCWludCBpOTE1 ID0gLTE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCQlpZ3RfcmVxdWlyZShoYXNfdm0o aTkxNSkpOworCX0KKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLWNyZWF0ZSIpCisJCWludmFsaWRf Y3JlYXRlKGk5MTUpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtZGVzdHJveSIpCisJCWludmFs aWRfZGVzdHJveShpOTE1KTsKKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1cmUg eworCQkJZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpOTE1LCBJOTE1X0NPTlRFWFRfUEFSQU1f Vk0pOworCQl9CisKKwkJaWd0X3N1YnRlc3QoImV4ZWNidWYiKQorCQkJZXhlY2J1ZihpOTE1KTsK KworCQlpZ3Rfc3VidGVzdCgiaXNvbGF0aW9uIikKKwkJCWlzb2xhdGlvbihpOTE1KTsKKworCQlp Z3Rfc3VidGVzdCgiY3JlYXRlLWV4dCIpCisJCQljcmVhdGVfZXh0KGk5MTUpOworCisJCWlndF9z dWJ0ZXN0KCJhc3luYy1kZXN0cm95IikKKwkJCWFzeW5jX2Rlc3Ryb3koaTkxNSk7CisJfQorCisJ aWd0X2ZpeHR1cmUgeworCQljbG9zZShpOTE1KTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9t ZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDY0MDAxOGFlOC4uYjk2YTliYTgy IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApA QCAtMjE1LDYgKzIxNSw3IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2dlbV91bmZlbmNlX2FjdGl2ZV9i dWZmZXJzJywKIAknZ2VtX3VucmVmX2FjdGl2ZV9idWZmZXJzJywKIAknZ2VtX3VzZXJwdHJfYmxp dHMnLAorCSdnZW1fdm1fY3JlYXRlJywKIAknZ2VtX3dhaXQnLAogCSdnZW1fd29ya2Fyb3VuZHMn LAogCSdnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCcsCi0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==