From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v6 Date: Mon, 4 Feb 2019 15:06:58 +0000 Message-ID: <20190204150613.5837-4-Philip.Yang@amd.com> References: <20190204150613.5837-1-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190204150613.5837-1-Philip.Yang-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Yang, Philip" VXNlIEhNTSBoZWxwZXIgZnVuY3Rpb24gaG1tX3ZtYV9mYXVsdCgpIHRvIGdldCBwaHlzaWNhbCBw YWdlcyBiYWNraW5nCnVzZXJwdHIgYW5kIHN0YXJ0IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSB0cmFj ayBvZiB0aG9zZSBwYWdlcy4gVGhlbiB1c2UKaG1tX3ZtYV9yYW5nZV9kb25lKCkgdG8gY2hlY2sg aWYgdGhvc2UgcGFnZXMgYXJlIHVwZGF0ZWQgYmVmb3JlCmFtZGdwdV9jc19zdWJtaXQgZm9yIGdm eCBvciBiZWZvcmUgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQgZm9yIGtmZC4KCklmIHVzZXJwdHIg cGFnZXMgYXJlIHVwZGF0ZWQsIGZvciBnZngsIGFtZGdwdV9jc19pb2N0bCB3aWxsIHJlc3RhcnQK ZnJvbSBzY3JhdGNoLCBmb3Iga2ZkLCByZXN0b3JlIHdvcmtlciBpcyByZXNjaGVkdWxlZCB0byBy ZXRyeS4KCkhNTSBzaW1wbGlmeSB0aGUgQ1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUg Y2hlY2ssIHNvIHJlbW92ZQpndXB0YXNrbG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0 X3BhZ2VzIGZpZWxkcyBmcm9tCmFtZGdwdV90dG1fdHQgc3RydWN0LgoKSE1NIGRvZXMgbm90IHBp biB0aGUgcGFnZSAoaW5jcmVhc2UgcGFnZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZApv cGVyYXRpb25zIGxpa2UgcmVsZWFzZV9wYWdlcygpLCBwdXRfcGFnZSgpLCBtYXJrX3BhZ2VfZGly dHkoKS4KCkNoYW5nZS1JZDogSTJlOGMwYzZmMGQ4YzIxZTU1OTZhMzJkN2ZjOTE3NjI3NzhiYzll NjcKU2lnbmVkLW9mZi1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oICAgIHwgICAxIC0KIC4u Li9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jICB8ICA5NSArKystLS0t LS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oICAgfCAgIDIg Ky0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jICAgICAgICB8IDE1OCAr KysrKysrLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMg ICAgICAgfCAgMTQgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAg ICAgICB8ICAyNSArKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oICAg ICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jICAg ICAgIHwgMTczICsrKysrKysrLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3R0bS5oICAgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDE5OCBpbnNlcnRp b25zKCspLCAyNzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2FtZGtmZC5oCmluZGV4IDBiMzFhMTg1OTAyMy4uMGUxNzExYTc1YjY4IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oCkBAIC02MSw3ICs2MSw2IEBAIHN0 cnVjdCBrZ2RfbWVtIHsKIAogCWF0b21pY190IGludmFsaWQ7CiAJc3RydWN0IGFtZGtmZF9wcm9j ZXNzX2luZm8gKnByb2Nlc3NfaW5mbzsKLQlzdHJ1Y3QgcGFnZSAqKnVzZXJfcGFnZXM7CiAKIAlz dHJ1Y3QgYW1kZ3B1X3N5bmMgc3luYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jCmluZGV4IGQ3YjEwZDc5ZjFkZS4uYWUyZDgzOGQzMWVh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dw dXZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2 bS5jCkBAIC01ODIsMjggKzU4MiwxMiBAQCBzdGF0aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1 Y3Qga2dkX21lbSAqbWVtLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJZ290byBvdXQ7CiAJfQog Ci0JLyogSWYgbm8gcmVzdG9yZSB3b3JrZXIgaXMgcnVubmluZyBjb25jdXJyZW50bHksIHVzZXJf cGFnZXMKLQkgKiBzaG91bGQgbm90IGJlIGFsbG9jYXRlZAotCSAqLwotCVdBUk4obWVtLT51c2Vy X3BhZ2VzLCAiTGVha2luZyB1c2VyX3BhZ2VzIGFycmF5Iik7Ci0KLQltZW0tPnVzZXJfcGFnZXMg PSBrdm1hbGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLAotCQkJCQkgICBzaXplb2Yo c3RydWN0IHBhZ2UgKiksCi0JCQkJCSAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQlpZiAo IW1lbS0+dXNlcl9wYWdlcykgewotCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFn ZXMgYXJyYXlcbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byB1bnJlZ2lz dGVyX291dDsKLQl9Ci0KLQlyZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50 Ym8udHRtLCBtZW0tPnVzZXJfcGFnZXMpOworCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJf cGFnZXMoYm8tPnRiby50dG0sIGJvLT50Ym8udHRtLT5wYWdlcyk7CiAJaWYgKHJldCkgewogCQlw cl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4iLCBfX2Z1bmNfXywgcmV0 KTsKLQkJZ290byBmcmVlX291dDsKKwkJZ290byB1bnJlZ2lzdGVyX291dDsKIAl9CiAKLQlhbWRn cHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBtZW0tPnVzZXJfcGFnZXMpOwot CiAJcmV0ID0gYW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOwogCWlmIChyZXQpIHsKIAkJcHJf ZXJyKCIlczogRmFpbGVkIHRvIHJlc2VydmUgQk9cbiIsIF9fZnVuY19fKTsKQEAgLTYxNiwxMSAr NjAwLDcgQEAgc3RhdGljIGludCBpbml0X3VzZXJfcGFnZXMoc3RydWN0IGtnZF9tZW0gKm1lbSwg c3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7CiAKIHJlbGVh c2Vfb3V0OgotCWlmIChyZXQpCi0JCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLCBiby0+ dGJvLnR0bS0+bnVtX3BhZ2VzKTsKLWZyZWVfb3V0OgotCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMp OwotCW1lbS0+dXNlcl9wYWdlcyA9IE5VTEw7CisJYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdl c19kb25lKGJvLT50Ym8udHRtKTsKIHVucmVnaXN0ZXJfb3V0OgogCWlmIChyZXQpCiAJCWFtZGdw dV9tbl91bnJlZ2lzdGVyKGJvKTsKQEAgLTY3OSw3ICs2NTksNiBAQCBzdGF0aWMgaW50IHJlc2Vy dmVfYm9fYW5kX3ZtKHN0cnVjdCBrZ2RfbWVtICptZW0sCiAJY3R4LT5rZmRfYm8ucHJpb3JpdHkg PSAwOwogCWN0eC0+a2ZkX2JvLnR2LmJvID0gJmJvLT50Ym87CiAJY3R4LT5rZmRfYm8udHYubnVt X3NoYXJlZCA9IDE7Ci0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9IE5VTEw7CiAJbGlzdF9hZGQo JmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwogCiAJYW1kZ3B1X3ZtX2dldF9wZF9i byh2bSwgJmN0eC0+bGlzdCwgJmN0eC0+dm1fcGRbMF0pOwpAQCAtNzQzLDcgKzcyMiw2IEBAIHN0 YXRpYyBpbnQgcmVzZXJ2ZV9ib19hbmRfY29uZF92bXMoc3RydWN0IGtnZF9tZW0gKm1lbSwKIAlj dHgtPmtmZF9iby5wcmlvcml0eSA9IDA7CiAJY3R4LT5rZmRfYm8udHYuYm8gPSAmYm8tPnRibzsK IAljdHgtPmtmZF9iby50di5udW1fc2hhcmVkID0gMTsKLQljdHgtPmtmZF9iby51c2VyX3BhZ2Vz ID0gTlVMTDsKIAlsaXN0X2FkZCgmY3R4LT5rZmRfYm8udHYuaGVhZCwgJmN0eC0+bGlzdCk7CiAK IAlpID0gMDsKQEAgLTEzNzEsMTUgKzEzNDksNiBAQCBpbnQgYW1kZ3B1X2FtZGtmZF9ncHV2bV9m cmVlX21lbW9yeV9vZl9ncHUoCiAJbGlzdF9kZWwoJmJvX2xpc3RfZW50cnktPmhlYWQpOwogCW11 dGV4X3VubG9jaygmcHJvY2Vzc19pbmZvLT5sb2NrKTsKIAotCS8qIEZyZWUgdXNlciBwYWdlcyBp ZiBuZWNlc3NhcnkgKi8KLQlpZiAobWVtLT51c2VyX3BhZ2VzKSB7Ci0JCXByX2RlYnVnKCIlczog RnJlZWluZyB1c2VyX3BhZ2VzIGFycmF5XG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChtZW0tPnVzZXJf cGFnZXNbMF0pCi0JCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywKLQkJCQkJbWVtLT5i by0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKLQkJa3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7Ci0JfQot CiAJcmV0ID0gcmVzZXJ2ZV9ib19hbmRfY29uZF92bXMobWVtLCBOVUxMLCBCT19WTV9BTEwsICZj dHgpOwogCWlmICh1bmxpa2VseShyZXQpKQogCQlyZXR1cm4gcmV0OwpAQCAtMTg1NSwyNSArMTgy NCwxMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtm ZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKIAogCQlibyA9IG1lbS0+Ym87CiAKLQkJaWYg KCFtZW0tPnVzZXJfcGFnZXMpIHsKLQkJCW1lbS0+dXNlcl9wYWdlcyA9Ci0JCQkJa3ZtYWxsb2Nf YXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywKLQkJCQkJCSBzaXplb2Yoc3RydWN0IHBhZ2Ug KiksCi0JCQkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCQkJaWYgKCFtZW0tPnVzZXJf cGFnZXMpIHsKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgYXJyYXlc biIsCi0JCQkJICAgICAgIF9fZnVuY19fKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJ fSBlbHNlIGlmIChtZW0tPnVzZXJfcGFnZXNbMF0pIHsKLQkJCXJlbGVhc2VfcGFnZXMobWVtLT51 c2VyX3BhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKLQkJfQotCiAJCS8qIEdldCB1cGRh dGVkIHVzZXIgcGFnZXMgKi8KIAkJcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhi by0+dGJvLnR0bSwKLQkJCQkJCSAgIG1lbS0+dXNlcl9wYWdlcyk7CisJCQkJCQkgICBiby0+dGJv LnR0bS0+cGFnZXMpOwogCQlpZiAocmV0KSB7Ci0JCQltZW0tPnVzZXJfcGFnZXNbMF0gPSBOVUxM OworCQkJYm8tPnRiby50dG0tPnBhZ2VzWzBdID0gTlVMTDsKIAkJCXByX2luZm8oIiVzOiBGYWls ZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4iLAogCQkJCV9fZnVuY19fLCByZXQpOwogCQkJLyog UHJldGVuZCBpdCBzdWNjZWVkZWQuIEl0IHdpbGwgZmFpbCBsYXRlcgpAQCAtMTg4MiwxMiArMTgz Nyw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2Zk X3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvLAogCQkJICogc3RhbGxlZCB1c2VyIG1vZGUgcXVl dWVzLgogCQkJICovCiAJCX0KLQotCQkvKiBNYXJrIHRoZSBCTyBhcyB2YWxpZCB1bmxlc3MgaXQg d2FzIGludmFsaWRhdGVkCi0JCSAqIGFnYWluIGNvbmN1cnJlbnRseQotCQkgKi8KLQkJaWYgKGF0 b21pY19jbXB4Y2hnKCZtZW0tPmludmFsaWQsIGludmFsaWQsIDApICE9IGludmFsaWQpCi0JCQly ZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE5MTcsNyArMTg2Niw4IEBAIHN0 YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vz c19pbmZvICpwcm9jZXNzX2luZm8pCiAJCQkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXBkX2Jv X2xpc3RfZW50cmllcykgewogCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgUEQgQk8g bGlzdCBlbnRyaWVzXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAt RU5PTUVNOworCQlnb3RvIG91dF9ub19tZW07CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJnJlc3Zf bGlzdCk7CkBAIC0xOTQxLDcgKzE4OTEsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRf dXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQogCXJl dCA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnRpY2tldCwgJnJlc3ZfbGlzdCwgZmFsc2UsICZk dXBsaWNhdGVzKTsKIAlXQVJOKCFsaXN0X2VtcHR5KCZkdXBsaWNhdGVzKSwgIkR1cGxpY2F0ZXMg c2hvdWxkIGJlIGVtcHR5Iik7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2Zy ZWU7CiAKIAlhbWRncHVfc3luY19jcmVhdGUoJnN5bmMpOwogCkBAIC0xOTY3LDEwICsxOTE3LDgg QEAgc3RhdGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9w cm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbykKIAogCQlibyA9IG1lbS0+Ym87CiAKLQkJLyogQ29w eSBwYWdlcyBhcnJheSBhbmQgdmFsaWRhdGUgdGhlIEJPIGlmIHdlIGdvdCB1c2VyIHBhZ2VzICov Ci0JCWlmIChtZW0tPnVzZXJfcGFnZXNbMF0pIHsKLQkJCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJf cGFnZXMoYm8tPnRiby50dG0sCi0JCQkJCQkgICAgIG1lbS0+dXNlcl9wYWdlcyk7CisJCS8qIFZh bGlkYXRlIHRoZSBCTyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLworCQlpZiAoYm8tPnRiby50dG0t PnBhZ2VzWzBdKSB7CiAJCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBtZW0t PmRvbWFpbik7CiAJCQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2Vt ZW50LCAmY3R4KTsKIAkJCWlmIChyZXQpIHsKQEAgLTE5NzksMTYgKzE5MjcsMTYgQEAgc3RhdGlj IGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2lu Zm8gKnByb2Nlc3NfaW5mbykKIAkJCX0KIAkJfQogCi0JCS8qIFZhbGlkYXRlIHN1Y2NlZWRlZCwg bm93IHRoZSBCTyBvd25zIHRoZSBwYWdlcywgZnJlZQotCQkgKiBvdXIgY29weSBvZiB0aGUgcG9p bnRlciBhcnJheS4gUHV0IHRoaXMgQk8gYmFjayBvbgotCQkgKiB0aGUgdXNlcnB0cl92YWxpZF9s aXN0LiBJZiB3ZSBuZWVkIHRvIHJldmFsaWRhdGUKLQkJICogaXQsIHdlIG5lZWQgdG8gc3RhcnQg ZnJvbSBzY3JhdGNoLgotCQkgKi8KLQkJa3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7Ci0JCW1lbS0+ dXNlcl9wYWdlcyA9IE5VTEw7CiAJCWxpc3RfbW92ZV90YWlsKCZtZW0tPnZhbGlkYXRlX2xpc3Qu aGVhZCwKIAkJCSAgICAgICAmcHJvY2Vzc19pbmZvLT51c2VycHRyX3ZhbGlkX2xpc3QpOwogCisJ CS8qIFN0b3AgSE1NIHRyYWNrIHRoZSB1c2VycHRyIHVwZGF0ZS4gV2UgZG9udCBjaGVjayB0aGUg cmV0dXJuCisJCSAqIHZhbHVlIGZvciBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSBi ZWNhdXNlIHdlIHdpbGwKKwkJICogcmVzY2hlZHVsZSB0aGUgcmVzdG9yZSB3b3JrZXIgaWYgcHJv Y2Vzc19pbmZvLT5ldmljdGVkX2JvcworCQkgKiBpcyB1cGRhdGVkLgorCQkgKi8KKwkJYW1kZ3B1 X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKKwogCQkvKiBVcGRhdGUg bWFwcGluZy4gSWYgdGhlIEJPIHdhcyBub3QgdmFsaWRhdGVkCiAJCSAqIChiZWNhdXNlIHdlIGNv dWxkbid0IGdldCB1c2VyIHBhZ2VzKSwgdGhpcyB3aWxsCiAJCSAqIGNsZWFyIHRoZSBwYWdlIHRh YmxlIGVudHJpZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluCkBAIC0yMDIyLDggKzE5NzAsMTUgQEAg c3RhdGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9j ZXNzX2luZm8gKnByb2Nlc3NfaW5mbykKIAl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmdGlj a2V0LCAmcmVzdl9saXN0KTsKIAlhbWRncHVfc3luY193YWl0KCZzeW5jLCBmYWxzZSk7CiAJYW1k Z3B1X3N5bmNfZnJlZSgmc3luYyk7Ci1vdXQ6CitvdXRfZnJlZToKIAlrZnJlZShwZF9ib19saXN0 X2VudHJpZXMpOworb3V0X25vX21lbToKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWVtLCB0 bXBfbWVtLAorCQkJCSAmcHJvY2Vzc19pbmZvLT51c2VycHRyX2ludmFsX2xpc3QsCisJCQkJIHZh bGlkYXRlX2xpc3QuaGVhZCkgeworCQlibyA9IG1lbS0+Ym87CisJCWFtZGdwdV90dG1fdHRfZ2V0 X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCmluZGV4IDdjNWY1ZDE2 MDFlNi4uYTEzMGU3NjZjYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYm9fbGlzdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9ib19saXN0LmgKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0IGFtZGdwdV9ib19saXN0X2VudHJ5 IHsKIAlzdHJ1Y3QgYW1kZ3B1X2JvX3ZhCQkqYm9fdmE7CiAJdWludDMyX3QJCQlwcmlvcml0eTsK IAlzdHJ1Y3QgcGFnZQkJCSoqdXNlcl9wYWdlczsKLQlpbnQJCQkJdXNlcl9pbnZhbGlkYXRlZDsK Kwlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7CiB9OwogCiBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3Qg ewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwppbmRleCAxYzQ5YjgyNjZkNjku LjQ1MWExZmFiMTdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKQEAg LTUyLDcgKzUyLDYgQEAgc3RhdGljIGludCBhbWRncHVfY3NfdXNlcl9mZW5jZV9jaHVuayhzdHJ1 Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlwLT51Zl9lbnRyeS50di5ibyA9ICZiby0+dGJvOwog CS8qIE9uZSBmb3IgVFRNIGFuZCBvbmUgZm9yIHRoZSBDUyBqb2IgKi8KIAlwLT51Zl9lbnRyeS50 di5udW1fc2hhcmVkID0gMjsKLQlwLT51Zl9lbnRyeS51c2VyX3BhZ2VzID0gTlVMTDsKIAogCWRy bV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKIApAQCAtNTM5LDE0ICs1MzgsMTQgQEAg c3RhdGljIGludCBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNl ciAqcCwKIAkJaWYgKHVzZXJtbSAmJiB1c2VybW0gIT0gY3VycmVudC0+bW0pCiAJCQlyZXR1cm4g LUVQRVJNOwogCi0JCS8qIENoZWNrIGlmIHdlIGhhdmUgdXNlciBwYWdlcyBhbmQgbm9ib2R5IGJv dW5kIHRoZSBCTyBhbHJlYWR5ICovCi0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNf cGFnZXMoYm8tPnRiby50dG0pICYmCi0JCSAgICBsb2JqLT51c2VyX3BhZ2VzKSB7CisJCWlmIChh bWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoYm8tPnRiby50dG0pICYmCisJCSAgICBsb2JqLT51c2Vy X2ludmFsaWRhdGVkICYmIGxvYmotPnVzZXJfcGFnZXMpIHsKIAkJCWFtZGdwdV9ib19wbGFjZW1l bnRfZnJvbV9kb21haW4oYm8sCiAJCQkJCQkJQU1ER1BVX0dFTV9ET01BSU5fQ1BVKTsKIAkJCXIg PSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKIAkJCWlm IChyKQogCQkJCXJldHVybiByOworCiAJCQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKGJv LT50Ym8udHRtLAogCQkJCQkJICAgICBsb2JqLT51c2VyX3BhZ2VzKTsKIAkJCWJpbmRpbmdfdXNl cnB0ciA9IHRydWU7CkBAIC01NzcsNyArNTc2LDYgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFy c2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpn ZHM7CiAJc3RydWN0IGFtZGdwdV9ibyAqZ3dzOwogCXN0cnVjdCBhbWRncHVfYm8gKm9hOwotCXVu c2lnbmVkIHRyaWVzID0gMTA7CiAJaW50IHI7CiAKIAlJTklUX0xJU1RfSEVBRCgmcC0+dmFsaWRh dGVkKTsKQEAgLTYxMyw3OSArNjExLDQ1IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9i b3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJaWYgKHAtPnVmX2VudHJ5LnR2LmJvICYm ICF0dG1fdG9fYW1kZ3B1X2JvKHAtPnVmX2VudHJ5LnR2LmJvKS0+cGFyZW50KQogCQlsaXN0X2Fk ZCgmcC0+dWZfZW50cnkudHYuaGVhZCwgJnAtPnZhbGlkYXRlZCk7CiAKLQl3aGlsZSAoMSkgewot CQlzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfcGFnZXM7Ci0KLQkJciA9IHR0bV9ldV9yZXNlcnZlX2J1 ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgdHJ1ZSwKLQkJCQkJICAgJmR1cGxpY2F0 ZXMpOwotCQlpZiAodW5saWtlbHkociAhPSAwKSkgewotCQkJaWYgKHIgIT0gLUVSRVNUQVJUU1lT KQotCQkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWlsZWQuXG4iKTsKLQkJ CWdvdG8gZXJyb3JfZnJlZV9wYWdlczsKLQkJfQotCi0JCUlOSVRfTElTVF9IRUFEKCZuZWVkX3Bh Z2VzKTsKLQkJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19s aXN0KSB7Ci0JCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYu Ym8pOwotCi0JCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRhdGVkKGJvLT50Ym8u dHRtLAotCQkJCSAmZS0+dXNlcl9pbnZhbGlkYXRlZCkgJiYgZS0+dXNlcl9wYWdlcykgewotCi0J CQkJLyogV2UgYWNxdWlyZWQgYSBwYWdlIGFycmF5LCBidXQgc29tZWJvZHkKLQkJCQkgKiBpbnZh bGlkYXRlZCBpdC4gRnJlZSBpdCBhbmQgdHJ5IGFnYWluCi0JCQkJICovCi0JCQkJcmVsZWFzZV9w YWdlcyhlLT51c2VyX3BhZ2VzLAotCQkJCQkgICAgICBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsK LQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7Ci0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7Ci0J CQl9Ci0KLQkJCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50 dG0pICYmCi0JCQkgICAgIWUtPnVzZXJfcGFnZXMpIHsKLQkJCQlsaXN0X2RlbCgmZS0+dHYuaGVh ZCk7Ci0JCQkJbGlzdF9hZGQoJmUtPnR2LmhlYWQsICZuZWVkX3BhZ2VzKTsKLQotCQkJCWFtZGdw dV9ib191bnJlc2VydmUoYm8pOwotCQkJfQorCS8qIEdldCB1c2VycHRyIGJhY2tpbmcgcGFnZXMu IElmIHBhZ2VzIGFyZSB1cGRhdGVkIGFmdGVyIHJlZ2lzdGVyZWQKKwkgKiBpbiBhbWRncHVfZ2Vt X3VzZXJwdHJfaW9jdGwoKSwgYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoKSB3aWxsIGRvCisJICog YW1kZ3B1X3R0bV9iYWNrZW5kX2JpbmQoKSB0byBmbHVzaCBhbmQgaW52YWxpZGF0ZSBuZXcgcGFn ZXMKKwkgKi8KKwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJv X2xpc3QpIHsKKwkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2 LmJvKTsKKwkJYm9vbCB1c2VycGFnZV9pbnZhbGlkYXRlZCA9IGZhbHNlOworCQlpbnQgaTsKKwor CQllLT51c2VyX3BhZ2VzID0ga3ZtYWxsb2NfYXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywK KwkJCQkJc2l6ZW9mKHN0cnVjdCBwYWdlICopLAorCQkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVS Tyk7CisJCWlmICghZS0+dXNlcl9wYWdlcykgeworCQkJRFJNX0VSUk9SKCJjYWxsb2MgZmFpbHVy ZVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWlmIChsaXN0X2VtcHR5KCZuZWVk X3BhZ2VzKSkKLQkJCWJyZWFrOwotCi0JCS8qIFVucmVzZXJ2ZSBldmVyeXRoaW5nIGFnYWluLiAq LwotCQl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVk KTsKLQotCQkvKiBXZSB0cmllZCB0b28gbWFueSB0aW1lcywganVzdCBhYm9ydCAqLwotCQlpZiAo IS0tdHJpZXMpIHsKLQkJCXIgPSAtRURFQURMSzsKLQkJCURSTV9FUlJPUigiZGVhZGxvY2sgaW4g JXNcbiIsIF9fZnVuY19fKTsKLQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsKKwkJciA9IGFtZGdw dV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sIGUtPnVzZXJfcGFnZXMpOworCQlp ZiAocikgeworCQkJa3ZmcmVlKGUtPnVzZXJfcGFnZXMpOworCQkJZS0+dXNlcl9wYWdlcyA9IE5V TEw7CisJCQlyZXR1cm4gcjsKIAkJfQogCi0JCS8qIEZpbGwgdGhlIHBhZ2UgYXJyYXlzIGZvciBh bGwgdXNlcnB0cnMuICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm5lZWRfcGFnZXMsIHR2 LmhlYWQpIHsKLQkJCXN0cnVjdCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07Ci0KLQkJCWUt PnVzZXJfcGFnZXMgPSBrdm1hbGxvY19hcnJheSh0dG0tPm51bV9wYWdlcywKLQkJCQkJCQkgc2l6 ZW9mKHN0cnVjdCBwYWdlKiksCi0JCQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQkJ CWlmICghZS0+dXNlcl9wYWdlcykgewotCQkJCXIgPSAtRU5PTUVNOwotCQkJCURSTV9FUlJPUigi Y2FsbG9jIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJCQlnb3RvIGVycm9yX2ZyZWVf cGFnZXM7Ci0JCQl9Ci0KLQkJCXIgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHR0bSwg ZS0+dXNlcl9wYWdlcyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiYW1kZ3B1X3R0bV90 dF9nZXRfdXNlcl9wYWdlcyBmYWlsZWQuXG4iKTsKLQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7 Ci0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7Ci0JCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwor CQlmb3IgKGkgPSAwOyBpIDwgYm8tPnRiby50dG0tPm51bV9wYWdlczsgaSsrKSB7CisJCQlpZiAo Ym8tPnRiby50dG0tPnBhZ2VzW2ldICE9IGUtPnVzZXJfcGFnZXNbaV0pIHsKKwkJCQl1c2VycGFn ZV9pbnZhbGlkYXRlZCA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJZS0+dXNlcl9p bnZhbGlkYXRlZCA9IHVzZXJwYWdlX2ludmFsaWRhdGVkOworCX0KIAotCQkvKiBBbmQgdHJ5IGFn YWluLiAqLwotCQlsaXN0X3NwbGljZSgmbmVlZF9wYWdlcywgJnAtPnZhbGlkYXRlZCk7CisJciA9 IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgdHJ1ZSwK KwkJCQkgICAmZHVwbGljYXRlcyk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJaWYgKHIg IT0gLUVSRVNUQVJUU1lTKQorCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZh aWxlZC5cbiIpOworCQlnb3RvIG91dDsKIAl9CiAKIAlhbWRncHVfY3NfZ2V0X3RocmVzaG9sZF9m b3JfbW92ZXMocC0+YWRldiwgJnAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCwKQEAgLTc1NCwxNyAr NzE4LDcgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2Nz X3BhcnNlciAqcCwKIGVycm9yX3ZhbGlkYXRlOgogCWlmIChyKQogCQl0dG1fZXVfYmFja29mZl9y ZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkKTsKLQotZXJyb3JfZnJlZV9wYWdl czoKLQotCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlz dCkgewotCQlpZiAoIWUtPnVzZXJfcGFnZXMpCi0JCQljb250aW51ZTsKLQotCQlyZWxlYXNlX3Bh Z2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2LmJvLT50dG0tPm51bV9wYWdlcyk7Ci0JCWt2ZnJlZShl LT51c2VyX3BhZ2VzKTsKLQl9Ci0KK291dDoKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTIxMyw4ICsx MTY3LDcgQEAgc3RhdGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFy c2VyICpwLAogCXN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSAqZTsKIAlzdHJ1Y3QgYW1kZ3B1 X2pvYiAqam9iOwogCXVpbnQ2NF90IHNlcTsKLQotCWludCByOworCWludCByID0gMDsKIAogCWpv YiA9IHAtPmpvYjsKIAlwLT5qb2IgPSBOVUxMOwpAQCAtMTIyMywxNSArMTE3NiwyMSBAQCBzdGF0 aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJaWYg KHIpCiAJCWdvdG8gZXJyb3JfdW5sb2NrOwogCi0JLyogTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMg YWxsb3dlZCB3aGlsZSBob2xkaW5nIHRoZSBtbiBsb2NrICovCisJLyogTm8gbWVtb3J5IGFsbG9j YXRpb24gaXMgYWxsb3dlZCB3aGlsZSBob2xkaW5nIHRoZSBtbiBsb2NrLgorCSAqIHAtPm1uIGlz IGhvbGQgdW50aWwgYW1kZ3B1X2NzX3N1Ym1pdCBpcyBmaW5pc2hlZCBhbmQgZmVuY2UgaXMgYWRk ZWQKKwkgKiB0byBCT3MuCisJICovCiAJYW1kZ3B1X21uX2xvY2socC0+bW4pOworCisJLyogSWYg dXNlcnB0ciBhcmUgdXBkYXRlZCBhZnRlciBhbWRncHVfY3NfcGFyc2VyX2JvcygpLCByZXN0YXJ0 IGNzICovCiAJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19s aXN0KSB7CiAJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5i byk7CiAKLQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhiby0+dGJvLnR0 bSkpIHsKLQkJCXIgPSAtRVJFU1RBUlRTWVM7Ci0JCQlnb3RvIGVycm9yX2Fib3J0OwotCQl9CisJ CXIgfD0gIWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CisJ fQorCWlmIChyKSB7CisJCXIgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXJyb3JfYWJvcnQ7CiAJ fQogCiAJam9iLT5vd25lciA9IHAtPmZpbHA7CkBAIC0xMjc4LDE0ICsxMjM3LDIwIEBAIHN0YXRp YyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIGludCBh bWRncHVfY3NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0 IGRybV9maWxlICpmaWxwKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQl1bmlvbiBkcm1fYW1kZ3B1X2NzICpjcyA9IGRhdGE7Ci0Jc3RydWN0IGFt ZGdwdV9jc19wYXJzZXIgcGFyc2VyID0ge307Ci0JYm9vbCByZXNlcnZlZF9idWZmZXJzID0gZmFs c2U7CisJdW5pb24gZHJtX2FtZGdwdV9jcyAqY3M7CisJc3RydWN0IGFtZGdwdV9jc19wYXJzZXIg cGFyc2VyOworCWJvb2wgcmVzZXJ2ZWRfYnVmZmVyczsKKwlpbnQgdHJpZXMgPSAxMDsKIAlpbnQg aSwgcjsKIAogCWlmICghYWRldi0+YWNjZWxfd29ya2luZykKIAkJcmV0dXJuIC1FQlVTWTsKIAor cmVzdGFydDoKKwltZW1zZXQoJnBhcnNlciwgMCwgc2l6ZW9mKHBhcnNlcikpOworCWNzID0gZGF0 YTsKKwlyZXNlcnZlZF9idWZmZXJzID0gZmFsc2U7CisKIAlwYXJzZXIuYWRldiA9IGFkZXY7CiAJ cGFyc2VyLmZpbHAgPSBmaWxwOwogCkBAIC0xMzI3LDYgKzEyOTIsMTUgQEAgaW50IGFtZGdwdV9j c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbHApCiAKIG91dDoKIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgcmVz ZXJ2ZWRfYnVmZmVycyk7CisKKwlpZiAociA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJaWYgKCEtLXRy aWVzKSB7CisJCQlEUk1fRVJST1IoIlBvc3NpYmxlIGRlYWRsb2NrPyBSZXRyeSB0b28gbWFueSB0 aW1lc1xuIik7CisJCQlyZXR1cm4gLUVERUFETEs7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0K KwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMK aW5kZXggZDIxZGQyZjM2OWRhLi41NTUyODVlMzI5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTMyOSwyNiArMzI5LDI0IEBAIGludCBhbWRncHVfZ2VtX3Vz ZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAogCQlyID0g YW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOwogCQlpZiAocikKLQkJCWdvdG8gZnJlZV9wYWdl czsKKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJCWFtZGdwdV9ib19wbGFjZW1lbnRfZnJv bV9kb21haW4oYm8sIEFNREdQVV9HRU1fRE9NQUlOX0dUVCk7CiAJCXIgPSB0dG1fYm9fdmFsaWRh dGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKIAkJYW1kZ3B1X2JvX3VucmVzZXJ2 ZShibyk7CiAJCWlmIChyKQotCQkJZ290byBmcmVlX3BhZ2VzOworCQkJZ290byB1c2VyX3BhZ2Vz X2RvbmU7CiAJfQogCiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxwLCBnb2JqLCAmaGFu ZGxlKTsKLQkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0 IG5vdyAqLwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKIAlpZiAocikKLQkJ cmV0dXJuIHI7CisJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJYXJncy0+aGFuZGxlID0gaGFu ZGxlOwotCXJldHVybiAwOwogCi1mcmVlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMoYm8tPnRiby50 dG0tPnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKK3VzZXJfcGFnZXNfZG9uZToKKwlp ZiAoYXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfVkFMSURBVEUpCisJCWFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CiAKIHJlbGVhc2Vfb2JqZWN0 OgogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X21uLmMKaW5kZXggNWQ1MThkMmJiOWJlLi45ZDQwZjMwMDFmM2MgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCkBAIC0yMjksOCArMjI5LDYgQEAgc3Rh dGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25vZGUg Km5vZGUsCiAJCQl0cnVlLCBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCQlpZiAociA8 PSAwKQogCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBib1xuIiwg cik7Ci0KLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50dG0pOwogCX0K IH0KIApAQCAtNTEzLDMgKzUxMSwyNiBAQCB2b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVyKHN0cnVj dCBhbWRncHVfYm8gKmJvKQogCW11dGV4X3VubG9jaygmYWRldi0+bW5fbG9jayk7CiB9CiAKKy8q IGZsYWdzIHVzZWQgYnkgSE1NIGludGVybmFsLCBub3QgcmVsYXRlZCB0byBDUFUvR1BVIFBURSBm bGFncyAqLworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV9mbGFnc1tITU1fUEZOX0ZM QUdfTUFYXSA9IHsKKwkJKDEgPDwgMCksIC8qIEhNTV9QRk5fVkFMSUQgKi8KKwkJKDEgPDwgMSks IC8qIEhNTV9QRk5fV1JJVEUgKi8KKwkJMCAvKiBITU1fUEZOX0RFVklDRV9QUklWQVRFICovCit9 OworCitzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3JhbmdlX3ZhbHVlc1tITU1fUEZOX1ZBTFVF X01BWF0gPSB7CisJCTB4ZmZmZmZmZmZmZmZmZmZmZVVMLCAvKiBITU1fUEZOX0VSUk9SICovCisJ CTAsIC8qIEhNTV9QRk5fTk9ORSAqLworCQkweGZmZmZmZmZmZmZmZmZmZmNVTCAvKiBITU1fUEZO X1NQRUNJQUwgKi8KK307CisKK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0cnVjdCBobW1f cmFuZ2UgKnJhbmdlKQoreworCWlmIChyYW5nZSkgeworCQlyYW5nZS0+ZmxhZ3MgPSBobW1fcmFu Z2VfZmxhZ3M7CisJCXJhbmdlLT52YWx1ZXMgPSBobW1fcmFuZ2VfdmFsdWVzOworCQlyYW5nZS0+ cGZuX3NoaWZ0ID0gUEFHRV9TSElGVDsKKwkJcmFuZ2UtPnBmbnMgPSBOVUxMOworCQlJTklUX0xJ U1RfSEVBRCgmcmFuZ2UtPmxpc3QpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X21uLmgKaW5kZXggMGE1MWZkMDAwMjFjLi40ODAzZTIxNmUxNzQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oCkBAIC0yNSw5ICsyNSwxMCBAQAogI2RlZmluZSBfX0FN REdQVV9NTl9IX18KIAogLyoKLSAqIE1NVSBOb3RpZmllcgorICogSE1NIG1pcnJvcgogICovCiBz dHJ1Y3QgYW1kZ3B1X21uOworc3RydWN0IGhtbV9yYW5nZTsKIAogZW51bSBhbWRncHVfbW5fdHlw ZSB7CiAJQU1ER1BVX01OX1RZUEVfR0ZYLApAQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3QgYW1kZ3B1 X21uICphbWRncHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkJCWVudW0g YW1kZ3B1X21uX3R5cGUgdHlwZSk7CiBpbnQgYW1kZ3B1X21uX3JlZ2lzdGVyKHN0cnVjdCBhbWRn cHVfYm8gKmJvLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCBhbWRncHVfbW5fdW5yZWdpc3Rl cihzdHJ1Y3QgYW1kZ3B1X2JvICpibyk7Cit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShzdHJ1 Y3QgaG1tX3JhbmdlICpyYW5nZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9t bl9sb2NrKHN0cnVjdCBhbWRncHVfbW4gKm1uKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGFtZGdw dV9tbl91bmxvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdHRtLmMKaW5kZXggNzNlNzFlNjFkYzk5Li4zZmQ3ODUxZGEwYzAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNp bmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2lu Y2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvaG1tLmg+CiAjaW5jbHVkZSAi YW1kZ3B1LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X29iamVjdC5oIgogI2luY2x1ZGUgImFtZGdwdV90 cmFjZS5oIgpAQCAtNzA1LDExICs3MDYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWRncHVf dHRtX2lvX21lbV9wZm4oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIC8qCiAgKiBUVE0g YmFja2VuZCBmdW5jdGlvbnMuCiAgKi8KLXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3Qg ewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7Ci19 OwotCiBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7CiAJc3RydWN0IHR0bV9kbWFfdHQJdHRtOwogCXU2 NAkJCW9mZnNldDsKQEAgLTcxOCw4NSArNzE0LDk2IEBAIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsK IAl1aW50MzJfdAkJdXNlcmZsYWdzOwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGd1cHRhc2ts b2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGd1cHRhc2tzOwotCWF0b21pY190CQltbXVf aW52YWxpZGF0aW9uczsKLQl1aW50MzJfdAkJbGFzdF9zZXRfcGFnZXM7CisJc3RydWN0IGhtbV9y YW5nZQlyYW5nZTsKIH07CiAKIC8qKgotICogYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyAt IFBpbiBwYWdlcyBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBhIFVTRVJQVFIKLSAqIHBvaW50ZXIg dG8gbWVtb3J5CisgKiBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIC0gZ2V0IGRldmljZSBh Y2Nlc3NpYmxlIHBhZ2VzIHRoYXQgYmFjayB1c2VyCisgKiBtZW1vcnkgYW5kIHN0YXJ0IEhNTSB0 cmFja2luZyBDUFUgcGFnZSB0YWJsZSB1cGRhdGUKICAqCi0gKiBDYWxsZWQgYnkgYW1kZ3B1X2dl bV91c2VycHRyX2lvY3RsKCkgYW5kIGFtZGdwdV9jc19wYXJzZXJfYm9zKCkuCi0gKiBUaGlzIHBy b3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgdGhlIGdldF91c2VyX3BhZ2VzKCkgY2FsbCB0byBwcm92 aWRlCi0gKiBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlciBtZW1vcnkuCisg KiBDYWxsaW5nIGZ1bmN0aW9uIG11c3QgY2FsbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFuZ2Vf ZG9uZSgpIG9uY2UgYW5kIG9ubHkKKyAqIG9uY2UgYWZ0ZXJ3YXJkcyB0byBzdG9wIEhNTSB0cmFj a2luZwogICovCiBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0 ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0 dCA9ICh2b2lkICopdHRtOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ3R0LT51c2VydGFzay0+ bW07Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQl1bnNpZ25lZCBwaW5uZWQgPSAwOwotCWlu dCByOworCXVuc2lnbmVkIGxvbmcgZW5kID0gZ3R0LT51c2VycHRyICsgdHRtLT5udW1fcGFnZXMg KiBQQUdFX1NJWkU7CisJc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UgPSAmZ3R0LT5yYW5nZTsKKwlp bnQgciA9IDAsIGk7CiAKIAlpZiAoIW1tKSAvKiBIYXBwZW5zIGR1cmluZyBwcm9jZXNzIHNodXRk b3duICovCiAJCXJldHVybiAtRVNSQ0g7CiAKLQlpZiAoIShndHQtPnVzZXJmbGFncyAmIEFNREdQ VV9HRU1fVVNFUlBUUl9SRUFET05MWSkpCi0JCWZsYWdzIHw9IEZPTExfV1JJVEU7CisJYW1kZ3B1 X2htbV9pbml0X3JhbmdlKHJhbmdlKTsKIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAot CWlmIChndHQtPnVzZXJmbGFncyAmIEFNREdQVV9HRU1fVVNFUlBUUl9BTk9OT05MWSkgewotCQkv KgotCQkgKiBjaGVjayB0aGF0IHdlIG9ubHkgdXNlIGFub255bW91cyBtZW1vcnkgdG8gcHJldmVu dCBwcm9ibGVtcwotCQkgKiB3aXRoIHdyaXRlYmFjawotCQkgKi8KLQkJdW5zaWduZWQgbG9uZyBl bmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsKLQkJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJcmFuZ2UtPnZtYSA9IGZpbmRfdm1hKG1tLCBndHQtPnVz ZXJwdHIpOworCWlmICghcmFuZ2VfaW5fdm1hKHJhbmdlLT52bWEsIGd0dC0+dXNlcnB0ciwgZW5k KSkKKwkJciA9IC1FRkFVTFQ7CisJZWxzZSBpZiAoKGd0dC0+dXNlcmZsYWdzICYgQU1ER1BVX0dF TV9VU0VSUFRSX0FOT05PTkxZKSAmJgorCQlyYW5nZS0+dm1hLT52bV9maWxlKQorCQlyID0gLUVQ RVJNOworCWlmIChyKQorCQlnb3RvIG91dDsKIAotCQl2bWEgPSBmaW5kX3ZtYShtbSwgZ3R0LT51 c2VycHRyKTsKLQkJaWYgKCF2bWEgfHwgdm1hLT52bV9maWxlIHx8IHZtYS0+dm1fZW5kIDwgZW5k KSB7Ci0JCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQor CXJhbmdlLT5wZm5zID0ga3ZtYWxsb2NfYXJyYXkodHRtLT5udW1fcGFnZXMsIHNpemVvZih1aW50 NjRfdCksCisJCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAocmFuZ2UtPnBmbnMgPT0gTlVMTCkg eworCQlyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQorCXJhbmdlLT5zdGFydCA9IGd0dC0+ dXNlcnB0cjsKKwlyYW5nZS0+ZW5kID0gZW5kOwogCi0JLyogbG9vcCBlbm91Z2ggdGltZXMgdXNp bmcgY29udGlndW91cyBwYWdlcyBvZiBtZW1vcnkgKi8KLQlkbyB7Ci0JCXVuc2lnbmVkIG51bV9w YWdlcyA9IHR0bS0+bnVtX3BhZ2VzIC0gcGlubmVkOwotCQl1aW50NjRfdCB1c2VycHRyID0gZ3R0 LT51c2VycHRyICsgcGlubmVkICogUEFHRV9TSVpFOwotCQlzdHJ1Y3QgcGFnZSAqKnAgPSBwYWdl cyArIHBpbm5lZDsKLQkJc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCBndXB0YXNrOwor CXJhbmdlLT5wZm5zWzBdID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFMSURdOworCXJhbmdlLT5w Zm5zWzBdIHw9IGFtZGdwdV90dG1fdHRfaXNfcmVhZG9ubHkodHRtKSA/CisJCQkJMCA6IHJhbmdl LT5mbGFnc1tITU1fUEZOX1dSSVRFXTsKKwlmb3IgKGkgPSAxOyBpIDwgdHRtLT5udW1fcGFnZXM7 IGkrKykKKwkJcmFuZ2UtPnBmbnNbaV0gPSByYW5nZS0+cGZuc1swXTsKIAotCQlndXB0YXNrLnRh c2sgPSBjdXJyZW50OwotCQlzcGluX2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCQlsaXN0X2Fk ZCgmZ3VwdGFzay5saXN0LCAmZ3R0LT5ndXB0YXNrcyk7Ci0JCXNwaW5fdW5sb2NrKCZndHQtPmd1 cHRhc2tsb2NrKTsKKwkvKiBUaGlzIG1heSB0cmlnZ2VyIHBhZ2UgdGFibGUgdXBkYXRlICovCisJ ciA9IGhtbV92bWFfZmF1bHQocmFuZ2UsIHRydWUpOworCWlmIChyKQorCQlnb3RvIG91dF9mcmVl X3BmbnM7CiAKLQkJaWYgKG1tID09IGN1cnJlbnQtPm1tKQotCQkJciA9IGdldF91c2VyX3BhZ2Vz KHVzZXJwdHIsIG51bV9wYWdlcywgZmxhZ3MsIHAsIE5VTEwpOwotCQllbHNlCi0JCQlyID0gZ2V0 X3VzZXJfcGFnZXNfcmVtb3RlKGd0dC0+dXNlcnRhc2ssCi0JCQkJCW1tLCB1c2VycHRyLCBudW1f cGFnZXMsCi0JCQkJCWZsYWdzLCBwLCBOVUxMLCBOVUxMKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9z ZW0pOwogCi0JCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JCWxpc3RfZGVsKCZndXB0 YXNrLmxpc3QpOwotCQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7CisJZm9yIChpID0g MDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyBpKyspCisJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdl KHJhbmdlLCByYW5nZS0+cGZuc1tpXSk7CiAKLQkJaWYgKHIgPCAwKQotCQkJZ290byByZWxlYXNl X3BhZ2VzOworCXJldHVybiAwOwogCi0JCXBpbm5lZCArPSByOworb3V0X2ZyZWVfcGZuczoKKwlr dmZyZWUocmFuZ2UtPnBmbnMpOworCXJhbmdlLT5wZm5zID0gTlVMTDsKK291dDoKKwl1cF9yZWFk KCZtbS0+bW1hcF9zZW0pOworCXJldHVybiByOworfQogCi0JfSB3aGlsZSAocGlubmVkIDwgdHRt LT5udW1fcGFnZXMpOworLyoqCisgKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFuZ2VfZG9uZSAt IHN0b3AgSE1NIHRyYWNrIHRoZSBDUFUgcGFnZSB0YWJsZSBjaGFuZ2UKKyAqIENoZWNrIGlmIHRo ZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtIHJhbmdlIGhhdmUgYmVlbiBpbnZhbGlkYXRlZAorICoK KyAqIFJldHVybnM6IHRydWUgaWYgcGFnZXMgYXJlIHN0aWxsIHZhbGlkCisgKi8KK2Jvb2wgYW1k Z3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSkKK3sKKwlz dHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CisJYm9vbCByID0gZmFsc2U7 CiAKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOworCWlmICghZ3R0IHx8ICFn dHQtPnVzZXJwdHIpCisJCXJldHVybiBmYWxzZTsKKworCVdBUk5fT05DRSghZ3R0LT5yYW5nZS5w Zm5zLCAiTm8gdXNlciBwYWdlcyB0byBjaGVja1xuIik7CisJaWYgKGd0dC0+cmFuZ2UucGZucykg eworCQlyID0gaG1tX3ZtYV9yYW5nZV9kb25lKCZndHQtPnJhbmdlKTsKKwkJa3ZmcmVlKGd0dC0+ cmFuZ2UucGZucyk7CisJCWd0dC0+cmFuZ2UucGZucyA9IE5VTEw7CisJfQogCi1yZWxlYXNlX3Bh Z2VzOgotCXJlbGVhc2VfcGFnZXMocGFnZXMsIHBpbm5lZCk7Ci0JdXBfcmVhZCgmbW0tPm1tYXBf c2VtKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtODA5LDE2ICs4MTYsMTAgQEAgaW50IGFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBh Z2VzKQogICovCiB2b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90 dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewotCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpn dHQgPSAodm9pZCAqKXR0bTsKIAl1bnNpZ25lZCBpOwogCi0JZ3R0LT5sYXN0X3NldF9wYWdlcyA9 IGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsKLQlmb3IgKGkgPSAwOyBpIDwg dHRtLT5udW1fcGFnZXM7ICsraSkgewotCQlpZiAodHRtLT5wYWdlc1tpXSkKLQkJCXB1dF9wYWdl KHR0bS0+cGFnZXNbaV0pOwotCisJZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kp CiAJCXR0bS0+cGFnZXNbaV0gPSBwYWdlcyA/IHBhZ2VzW2ldIDogTlVMTDsKLQl9CiB9CiAKIC8q KgpAQCAtOTAzLDEwICs5MDQsMTEgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBpbl91 c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSkKIAkvKiB1bm1hcCB0aGUgcGFnZXMgbWFwcGVkIHRv IHRoZSBkZXZpY2UgKi8KIAlkbWFfdW5tYXBfc2coYWRldi0+ZGV2LCB0dG0tPnNnLT5zZ2wsIHR0 bS0+c2ctPm5lbnRzLCBkaXJlY3Rpb24pOwogCi0JLyogbWFyayB0aGUgcGFnZXMgYXMgZGlydHkg Ki8KLQlhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyh0dG0pOwotCiAJc2dfZnJlZV90YWJs ZSh0dG0tPnNnKTsKKworCWlmIChndHQtPnJhbmdlLnBmbnMgJiYKKwkgICAgdHRtLT5wYWdlc1sw XSA9PSBobW1fcGZuX3RvX3BhZ2UoJmd0dC0+cmFuZ2UsIGd0dC0+cmFuZ2UucGZuc1swXSkpCisJ CVdBUk5fT05DRSgxLCAiTWlzc2luZyBnZXRfdXNlcl9wYWdlX2RvbmVcbiIpOwogfQogCiBpbnQg YW1kZ3B1X3R0bV9nYXJ0X2JpbmQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCkBAIC0xMjU4 LDggKzEyNjAsNiBAQCBpbnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0 ICp0dG0sIHVpbnQ2NF90IGFkZHIsCiAKIAlzcGluX2xvY2tfaW5pdCgmZ3R0LT5ndXB0YXNrbG9j ayk7CiAJSU5JVF9MSVNUX0hFQUQoJmd0dC0+Z3VwdGFza3MpOwotCWF0b21pY19zZXQoJmd0dC0+ bW11X2ludmFsaWRhdGlvbnMsIDApOwotCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSAwOwogCiAJcmV0 dXJuIDA7CiB9CkBAIC0xMjg5LDcgKzEyODksNiBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0 X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAg dW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lk ICopdHRtOwotCXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3QgKmVudHJ5OwogCXVuc2ln bmVkIGxvbmcgc2l6ZTsKIAogCWlmIChndHQgPT0gTlVMTCB8fCAhZ3R0LT51c2VycHRyKQpAQCAt MTMwMiw0OCArMTMwMSwyMCBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3Ry dWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCWlmIChndHQtPnVzZXJwdHIg PiBlbmQgfHwgZ3R0LT51c2VycHRyICsgc2l6ZSA8PSBzdGFydCkKIAkJcmV0dXJuIGZhbHNlOwog Ci0JLyogU2VhcmNoIHRoZSBsaXN0cyBvZiB0YXNrcyB0aGF0IGhvbGQgdGhpcyBtYXBwaW5nIGFu ZCBzZWUKLQkgKiBpZiBjdXJyZW50IGlzIG9uZSBvZiB0aGVtLiAgSWYgaXQgaXMgcmV0dXJuIGZh bHNlLgotCSAqLwotCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JbGlzdF9mb3JfZWFj aF9lbnRyeShlbnRyeSwgJmd0dC0+Z3VwdGFza3MsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT50YXNr ID09IGN1cnJlbnQpIHsKLQkJCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKLQkJCXJl dHVybiBmYWxzZTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0K LQlhdG9taWNfaW5jKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsKLQogCXJldHVybiB0cnVlOwog fQogCiAvKioKLSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZCAtIEhhcyB0aGUg dHRtX3R0IG9iamVjdCBiZWVuIGludmFsaWRhdGVkPwotICovCi1ib29sIGFtZGdwdV90dG1fdHRf dXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCi0JCQkJICAgICAgIGludCAq bGFzdF9pbnZhbGlkYXRlZCkKLXsKLQlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQg Kil0dG07Ci0JaW50IHByZXZfaW52YWxpZGF0ZWQgPSAqbGFzdF9pbnZhbGlkYXRlZDsKLQotCSps YXN0X2ludmFsaWRhdGVkID0gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOwot CXJldHVybiBwcmV2X2ludmFsaWRhdGVkICE9ICpsYXN0X2ludmFsaWRhdGVkOwotfQotCi0vKioK LSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyAtIEhhdmUgdGhlIHBhZ2VzIGJh Y2tpbmcgdGhpcyB0dG1fdHQgb2JqZWN0Ci0gKiBiZWVuIGludmFsaWRhdGVkIHNpbmNlIHRoZSBs YXN0IHRpbWUgdGhleSd2ZSBiZWVuIHNldD8KKyAqIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0ciAt IEhhdmUgdGhlIHBhZ2VzIGJhY2tpbmcgYnkgdXNlcnB0cj8KICAqLwotYm9vbCBhbWRncHVfdHRt X3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQorYm9vbCBhbWRncHVf dHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQogewogCXN0cnVjdCBhbWRncHVf dHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKIAogCWlmIChndHQgPT0gTlVMTCB8fCAhZ3R0LT51 c2VycHRyKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmd0dC0+bW11 X2ludmFsaWRhdGlvbnMpICE9IGd0dC0+bGFzdF9zZXRfcGFnZXM7CisJcmV0dXJuIHRydWU7CiB9 CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0 bS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCmluZGV4IGI1YjJk MTAxZjdkYi4uODk4OGM4N2ZmZjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdHRtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3R0bS5oCkBAIC0xMDIsNiArMTAyLDcgQEAgaW50IGFtZGdwdV90dG1fYWxsb2NfZ2FydChzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKIGludCBhbWRncHVfdHRtX3JlY292ZXJfZ2FydChz dHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibyk7CiAKIGludCBhbWRncHVfdHRtX3R0X2dldF91 c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7Citib29s IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0pOwog dm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3Ry dWN0IHBhZ2UgKipwYWdlcyk7CiB2b2lkIGFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHN0 cnVjdCB0dG1fdHQgKnR0bSk7CiBpbnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3Qg dHRtX3R0ICp0dG0sIHVpbnQ2NF90IGFkZHIsCkBAIC0xMTIsNyArMTEzLDcgQEAgYm9vbCBhbWRn cHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9u ZyBzdGFydCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGJvb2wgYW1kZ3B1X3R0bV90dF91 c2VycHRyX2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwKIAkJCQkgICAgICAgaW50ICps YXN0X2ludmFsaWRhdGVkKTsKLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2Vz KHN0cnVjdCB0dG1fdHQgKnR0bSk7Citib29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihzdHJ1 Y3QgdHRtX3R0ICp0dG0pOwogYm9vbCBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHN0cnVjdCB0 dG1fdHQgKnR0bSk7CiB1aW50NjRfdCBhbWRncHVfdHRtX3R0X3BkZV9mbGFncyhzdHJ1Y3QgdHRt X3R0ICp0dG0sIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKTsKIHVpbnQ2NF90IGFtZGdwdV90dG1f dHRfcHRlX2ZsYWdzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgdHRtX3R0ICp0 dG0sCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=