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 v8 Date: Wed, 6 Feb 2019 16:26:16 +0000 Message-ID: <20190206162556.11512-4-Philip.Yang@amd.com> References: <20190206162556.11512-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: <20190206162556.11512-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 Ky0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jICAgICAgICB8IDEzOCAr KysrKy0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jICAg ICAgIHwgIDE0ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyAgICAg ICAgfCAgMjUgKystCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaCAgICAg ICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyAgICAg ICB8IDE3OCArKysrKysrLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV90dG0uaCAgICAgICB8ICAgMyArLQogOSBmaWxlcyBjaGFuZ2VkLCAxODIgaW5zZXJ0aW9u cygrKSwgMjc4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9hbWRrZmQuaAppbmRleCAwYjMxYTE4NTkwMjMuLjBlMTcxMWE3NWI2OCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaApAQCAtNjEsNyArNjEsNiBAQCBzdHJ1 Y3Qga2dkX21lbSB7CiAKIAlhdG9taWNfdCBpbnZhbGlkOwogCXN0cnVjdCBhbWRrZmRfcHJvY2Vz c19pbmZvICpwcm9jZXNzX2luZm87Ci0Jc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOwogCiAJc3Ry dWN0IGFtZGdwdV9zeW5jIHN5bmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYwppbmRleCBkN2IxMGQ3OWYxZGUuLmFlMmQ4MzhkMzFlYSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2 bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0u YwpAQCAtNTgyLDI4ICs1ODIsMTIgQEAgc3RhdGljIGludCBpbml0X3VzZXJfcGFnZXMoc3RydWN0 IGtnZF9tZW0gKm1lbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCWdvdG8gb3V0OwogCX0KIAot CS8qIElmIG5vIHJlc3RvcmUgd29ya2VyIGlzIHJ1bm5pbmcgY29uY3VycmVudGx5LCB1c2VyX3Bh Z2VzCi0JICogc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQKLQkgKi8KLQlXQVJOKG1lbS0+dXNlcl9w YWdlcywgIkxlYWtpbmcgdXNlcl9wYWdlcyBhcnJheSIpOwotCi0JbWVtLT51c2VyX3BhZ2VzID0g a3ZtYWxsb2NfYXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywKLQkJCQkJICAgc2l6ZW9mKHN0 cnVjdCBwYWdlICopLAotCQkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JaWYgKCFt ZW0tPnVzZXJfcGFnZXMpIHsKLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2Vz IGFycmF5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gdW5yZWdpc3Rl cl9vdXQ7Ci0JfQotCi0JcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJv LnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsKKwlyZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3Bh Z2VzKGJvLT50Ym8udHRtLCBiby0+dGJvLnR0bS0+cGFnZXMpOwogCWlmIChyZXQpIHsKIAkJcHJf ZXJyKCIlczogRmFpbGVkIHRvIGdldCB1c2VyIHBhZ2VzOiAlZFxuIiwgX19mdW5jX18sIHJldCk7 Ci0JCWdvdG8gZnJlZV9vdXQ7CisJCWdvdG8gdW5yZWdpc3Rlcl9vdXQ7CiAJfQogCi0JYW1kZ3B1 X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsKLQog CXJldCA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCB0cnVlKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vy cigiJXM6IEZhaWxlZCB0byByZXNlcnZlIEJPXG4iLCBfX2Z1bmNfXyk7CkBAIC02MTYsMTEgKzYw MCw3IEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICptZW0sIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwogCiByZWxlYXNl X291dDoKLQlpZiAocmV0KQotCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRi by50dG0tPm51bV9wYWdlcyk7Ci1mcmVlX291dDoKLQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsK LQltZW0tPnVzZXJfcGFnZXMgPSBOVUxMOworCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNf ZG9uZShiby0+dGJvLnR0bSk7CiB1bnJlZ2lzdGVyX291dDoKIAlpZiAocmV0KQogCQlhbWRncHVf bW5fdW5yZWdpc3Rlcihibyk7CkBAIC02NzksNyArNjU5LDYgQEAgc3RhdGljIGludCByZXNlcnZl X2JvX2FuZF92bShzdHJ1Y3Qga2dkX21lbSAqbWVtLAogCWN0eC0+a2ZkX2JvLnByaW9yaXR5ID0g MDsKIAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOwogCWN0eC0+a2ZkX2JvLnR2Lm51bV9z aGFyZWQgPSAxOwotCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOwogCWxpc3RfYWRkKCZj dHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsKIAogCWFtZGdwdV92bV9nZXRfcGRfYm8o dm0sICZjdHgtPmxpc3QsICZjdHgtPnZtX3BkWzBdKTsKQEAgLTc0Myw3ICs3MjIsNiBAQCBzdGF0 aWMgaW50IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKHN0cnVjdCBrZ2RfbWVtICptZW0sCiAJY3R4 LT5rZmRfYm8ucHJpb3JpdHkgPSAwOwogCWN0eC0+a2ZkX2JvLnR2LmJvID0gJmJvLT50Ym87CiAJ Y3R4LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7Ci0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9 IE5VTEw7CiAJbGlzdF9hZGQoJmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwogCiAJ aSA9IDA7CkBAIC0xMzcxLDE1ICsxMzQ5LDYgQEAgaW50IGFtZGdwdV9hbWRrZmRfZ3B1dm1fZnJl ZV9tZW1vcnlfb2ZfZ3B1KAogCWxpc3RfZGVsKCZib19saXN0X2VudHJ5LT5oZWFkKTsKIAltdXRl eF91bmxvY2soJnByb2Nlc3NfaW5mby0+bG9jayk7CiAKLQkvKiBGcmVlIHVzZXIgcGFnZXMgaWYg bmVjZXNzYXJ5ICovCi0JaWYgKG1lbS0+dXNlcl9wYWdlcykgewotCQlwcl9kZWJ1ZygiJXM6IEZy ZWVpbmcgdXNlcl9wYWdlcyBhcnJheVxuIiwgX19mdW5jX18pOwotCQlpZiAobWVtLT51c2VyX3Bh Z2VzWzBdKQotCQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsCi0JCQkJCW1lbS0+Ym8t PnRiby50dG0tPm51bV9wYWdlcyk7Ci0JCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwotCX0KLQog CXJldCA9IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKG1lbSwgTlVMTCwgQk9fVk1fQUxMLCAmY3R4 KTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKQEAgLTE4NTUsMjUgKzE4MjQs MTEgQEAgc3RhdGljIGludCB1cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRf cHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8sCiAKIAkJYm8gPSBtZW0tPmJvOwogCi0JCWlmICgh bWVtLT51c2VyX3BhZ2VzKSB7Ci0JCQltZW0tPnVzZXJfcGFnZXMgPQotCQkJCWt2bWFsbG9jX2Fy cmF5KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsCi0JCQkJCQkgc2l6ZW9mKHN0cnVjdCBwYWdlICop LAotCQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQkJCWlmICghbWVtLT51c2VyX3Bh Z2VzKSB7Ci0JCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2VzIGFycmF5XG4i LAotCQkJCSAgICAgICBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCX0g ZWxzZSBpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7Ci0JCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNl cl9wYWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7Ci0JCX0KLQogCQkvKiBHZXQgdXBkYXRl ZCB1c2VyIHBhZ2VzICovCiAJCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8t PnRiby50dG0sCi0JCQkJCQkgICBtZW0tPnVzZXJfcGFnZXMpOworCQkJCQkJICAgYm8tPnRiby50 dG0tPnBhZ2VzKTsKIAkJaWYgKHJldCkgewotCQkJbWVtLT51c2VyX3BhZ2VzWzBdID0gTlVMTDsK KwkJCWJvLT50Ym8udHRtLT5wYWdlc1swXSA9IE5VTEw7CiAJCQlwcl9pbmZvKCIlczogRmFpbGVk IHRvIGdldCB1c2VyIHBhZ2VzOiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmV0KTsKIAkJCS8qIFBy ZXRlbmQgaXQgc3VjY2VlZGVkLiBJdCB3aWxsIGZhaWwgbGF0ZXIKQEAgLTE4ODIsMTIgKzE4Mzcs NiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9w cm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKIAkJCSAqIHN0YWxsZWQgdXNlciBtb2RlIHF1ZXVl cy4KIAkJCSAqLwogCQl9Ci0KLQkJLyogTWFyayB0aGUgQk8gYXMgdmFsaWQgdW5sZXNzIGl0IHdh cyBpbnZhbGlkYXRlZAotCQkgKiBhZ2FpbiBjb25jdXJyZW50bHkKLQkJICovCi0JCWlmIChhdG9t aWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlkLCAwKSAhPSBpbnZhbGlkKQotCQkJcmV0 dXJuIC1FQUdBSU47CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xOTE3LDcgKzE4NjYsOCBAQCBzdGF0 aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3Nf aW5mbyAqcHJvY2Vzc19pbmZvKQogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZF9ib19s aXN0X2VudHJpZXMpIHsKIAkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIFBEIEJPIGxp c3QgZW50cmllc1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVO T01FTTsKKwkJZ290byBvdXRfbm9fbWVtOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZyZXN2X2xp c3QpOwpAQCAtMTk0MSw3ICsxODkxLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3Vz ZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbykKIAlyZXQg PSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZyZXN2X2xpc3QsIGZhbHNlLCAmZHVw bGljYXRlcyk7CiAJV0FSTighbGlzdF9lbXB0eSgmZHVwbGljYXRlcyksICJEdXBsaWNhdGVzIHNo b3VsZCBiZSBlbXB0eSIpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVl OwogCiAJYW1kZ3B1X3N5bmNfY3JlYXRlKCZzeW5jKTsKIApAQCAtMTk2NywxMCArMTkxNyw4IEBA IHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJv Y2Vzc19pbmZvICpwcm9jZXNzX2luZm8pCiAKIAkJYm8gPSBtZW0tPmJvOwogCi0JCS8qIENvcHkg cGFnZXMgYXJyYXkgYW5kIHZhbGlkYXRlIHRoZSBCTyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLwot CQlpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7Ci0JCQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3Bh Z2VzKGJvLT50Ym8udHRtLAotCQkJCQkJICAgICBtZW0tPnVzZXJfcGFnZXMpOworCQkvKiBWYWxp ZGF0ZSB0aGUgQk8gaWYgd2UgZ290IHVzZXIgcGFnZXMgKi8KKwkJaWYgKGJvLT50Ym8udHRtLT5w YWdlc1swXSkgewogCQkJYW1kZ3B1X2JvX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgbWVtLT5k b21haW4pOwogCQkJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8tPnBsYWNlbWVu dCwgJmN0eCk7CiAJCQlpZiAocmV0KSB7CkBAIC0xOTc5LDE2ICsxOTI3LDE2IEBAIHN0YXRpYyBp bnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZv ICpwcm9jZXNzX2luZm8pCiAJCQl9CiAJCX0KIAotCQkvKiBWYWxpZGF0ZSBzdWNjZWVkZWQsIG5v dyB0aGUgQk8gb3ducyB0aGUgcGFnZXMsIGZyZWUKLQkJICogb3VyIGNvcHkgb2YgdGhlIHBvaW50 ZXIgYXJyYXkuIFB1dCB0aGlzIEJPIGJhY2sgb24KLQkJICogdGhlIHVzZXJwdHJfdmFsaWRfbGlz dC4gSWYgd2UgbmVlZCB0byByZXZhbGlkYXRlCi0JCSAqIGl0LCB3ZSBuZWVkIHRvIHN0YXJ0IGZy b20gc2NyYXRjaC4KLQkJICovCi0JCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwotCQltZW0tPnVz ZXJfcGFnZXMgPSBOVUxMOwogCQlsaXN0X21vdmVfdGFpbCgmbWVtLT52YWxpZGF0ZV9saXN0Lmhl YWQsCiAJCQkgICAgICAgJnByb2Nlc3NfaW5mby0+dXNlcnB0cl92YWxpZF9saXN0KTsKIAorCQkv KiBTdG9wIEhNTSB0cmFjayB0aGUgdXNlcnB0ciB1cGRhdGUuIFdlIGRvbnQgY2hlY2sgdGhlIHJl dHVybgorCQkgKiB2YWx1ZSBmb3IgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUgYmVj YXVzZSB3ZSB3aWxsCisJCSAqIHJlc2NoZWR1bGUgdGhlIHJlc3RvcmUgd29ya2VyIGlmIHByb2Nl c3NfaW5mby0+ZXZpY3RlZF9ib3MKKwkJICogaXMgdXBkYXRlZC4KKwkJICovCisJCWFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CisKIAkJLyogVXBkYXRlIG1h cHBpbmcuIElmIHRoZSBCTyB3YXMgbm90IHZhbGlkYXRlZAogCQkgKiAoYmVjYXVzZSB3ZSBjb3Vs ZG4ndCBnZXQgdXNlciBwYWdlcyksIHRoaXMgd2lsbAogCQkgKiBjbGVhciB0aGUgcGFnZSB0YWJs ZSBlbnRyaWVzLCB3aGljaCB3aWxsIHJlc3VsdCBpbgpAQCAtMjAyMiw4ICsxOTcwLDE1IEBAIHN0 YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vz c19pbmZvICpwcm9jZXNzX2luZm8pCiAJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnRpY2tl dCwgJnJlc3ZfbGlzdCk7CiAJYW1kZ3B1X3N5bmNfd2FpdCgmc3luYywgZmFsc2UpOwogCWFtZGdw dV9zeW5jX2ZyZWUoJnN5bmMpOwotb3V0Ogorb3V0X2ZyZWU6CiAJa2ZyZWUocGRfYm9fbGlzdF9l bnRyaWVzKTsKK291dF9ub19tZW06CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1lbSwgdG1w X21lbSwKKwkJCQkgJnByb2Nlc3NfaW5mby0+dXNlcnB0cl9pbnZhbF9saXN0LAorCQkJCSB2YWxp ZGF0ZV9saXN0LmhlYWQpIHsKKwkJYm8gPSBtZW0tPmJvOworCQlhbWRncHVfdHRtX3R0X2dldF91 c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOworCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaAppbmRleCA3YzVmNWQxNjAx ZTYuLmExMzBlNzY2Y2JkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2JvX2xpc3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf Ym9fbGlzdC5oCkBAIC0zNiw3ICszNiw3IEBAIHN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSB7 CiAJc3RydWN0IGFtZGdwdV9ib192YQkJKmJvX3ZhOwogCXVpbnQzMl90CQkJcHJpb3JpdHk7CiAJ c3RydWN0IHBhZ2UJCQkqKnVzZXJfcGFnZXM7Ci0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7CisJ Ym9vbAkJCQl1c2VyX2ludmFsaWRhdGVkOwogfTsKIAogc3RydWN0IGFtZGdwdV9ib19saXN0IHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKaW5kZXggNTJhNWU0ZmRjOTViLi41 NDUzMDJkMDk1NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCkBAIC01 Miw3ICs1Miw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3VzZXJfZmVuY2VfY2h1bmsoc3RydWN0 IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJcC0+dWZfZW50cnkudHYuYm8gPSAmYm8tPnRibzsKIAkv KiBPbmUgZm9yIFRUTSBhbmQgb25lIGZvciB0aGUgQ1Mgam9iICovCiAJcC0+dWZfZW50cnkudHYu bnVtX3NoYXJlZCA9IDI7Ci0JcC0+dWZfZW50cnkudXNlcl9wYWdlcyA9IE5VTEw7CiAKIAlkcm1f Z2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ29iaik7CiAKQEAgLTU0MCwxNCArNTM5LDE0IEBAIHN0 YXRpYyBpbnQgYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIg KnAsCiAJCWlmICh1c2VybW0gJiYgdXNlcm1tICE9IGN1cnJlbnQtPm1tKQogCQkJcmV0dXJuIC1F UEVSTTsKIAotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIHVzZXIgcGFnZXMgYW5kIG5vYm9keSBib3Vu ZCB0aGUgQk8gYWxyZWFkeSAqLwotCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3Bh Z2VzKGJvLT50Ym8udHRtKSAmJgotCQkgICAgbG9iai0+dXNlcl9wYWdlcykgeworCQlpZiAoYW1k Z3B1X3R0bV90dF9pc191c2VycHRyKGJvLT50Ym8udHRtKSAmJgorCQkgICAgbG9iai0+dXNlcl9p bnZhbGlkYXRlZCAmJiBsb2JqLT51c2VyX3BhZ2VzKSB7CiAJCQlhbWRncHVfYm9fcGxhY2VtZW50 X2Zyb21fZG9tYWluKGJvLAogCQkJCQkJCUFNREdQVV9HRU1fRE9NQUlOX0NQVSk7CiAJCQlyID0g dHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7CiAJCQlpZiAo cikKIAkJCQlyZXR1cm4gcjsKKwogCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhiby0+ dGJvLnR0bSwKIAkJCQkJCSAgICAgbG9iai0+dXNlcl9wYWdlcyk7CiAJCQliaW5kaW5nX3VzZXJw dHIgPSB0cnVlOwpAQCAtNTc4LDcgKzU3Nyw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNl cl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJc3RydWN0IGFtZGdwdV9ibyAqZ2Rz OwogCXN0cnVjdCBhbWRncHVfYm8gKmd3czsKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpvYTsKLQl1bnNp Z25lZCB0cmllcyA9IDEwOwogCWludCByOwogCiAJSU5JVF9MSVNUX0hFQUQoJnAtPnZhbGlkYXRl ZCk7CkBAIC02MTQsNzkgKzYxMiw0NSBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9z KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCWlmIChwLT51Zl9lbnRyeS50di5ibyAmJiAh dHRtX3RvX2FtZGdwdV9ibyhwLT51Zl9lbnRyeS50di5ibyktPnBhcmVudCkKIAkJbGlzdF9hZGQo JnAtPnVmX2VudHJ5LnR2LmhlYWQsICZwLT52YWxpZGF0ZWQpOwogCi0Jd2hpbGUgKDEpIHsKLQkJ c3RydWN0IGxpc3RfaGVhZCBuZWVkX3BhZ2VzOwotCi0JCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZm ZXJzKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQsIHRydWUsCi0JCQkJCSAgICZkdXBsaWNhdGVz KTsKLQkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKLQkJCWlmIChyICE9IC1FUkVTVEFSVFNZUykK LQkJCQlEUk1fRVJST1IoInR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMgZmFpbGVkLlxuIik7Ci0JCQln b3RvIGVycm9yX2ZyZWVfcGFnZXM7Ci0JCX0KLQotCQlJTklUX0xJU1RfSEVBRCgmbmVlZF9wYWdl cyk7Ci0JCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlz dCkgewotCQkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJv KTsKLQotCQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChiby0+dGJvLnR0 bSwKLQkJCQkgJmUtPnVzZXJfaW52YWxpZGF0ZWQpICYmIGUtPnVzZXJfcGFnZXMpIHsKLQotCQkJ CS8qIFdlIGFjcXVpcmVkIGEgcGFnZSBhcnJheSwgYnV0IHNvbWVib2R5Ci0JCQkJICogaW52YWxp ZGF0ZWQgaXQuIEZyZWUgaXQgYW5kIHRyeSBhZ2FpbgotCQkJCSAqLwotCQkJCXJlbGVhc2VfcGFn ZXMoZS0+dXNlcl9wYWdlcywKLQkJCQkJICAgICAgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7Ci0J CQkJa3ZmcmVlKGUtPnVzZXJfcGFnZXMpOwotCQkJCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwotCQkJ fQotCi0JCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRt KSAmJgotCQkJICAgICFlLT51c2VyX3BhZ2VzKSB7Ci0JCQkJbGlzdF9kZWwoJmUtPnR2LmhlYWQp OwotCQkJCWxpc3RfYWRkKCZlLT50di5oZWFkLCAmbmVlZF9wYWdlcyk7Ci0KLQkJCQlhbWRncHVf Ym9fdW5yZXNlcnZlKGJvKTsKLQkJCX0KKwkvKiBHZXQgdXNlcnB0ciBiYWNraW5nIHBhZ2VzLiBJ ZiBwYWdlcyBhcmUgdXBkYXRlZCBhZnRlciByZWdpc3RlcmVkCisJICogaW4gYW1kZ3B1X2dlbV91 c2VycHRyX2lvY3RsKCksIGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKCkgd2lsbCBkbworCSAqIGFt ZGdwdV90dG1fYmFja2VuZF9iaW5kKCkgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgbmV3IHBhZ2Vz CisJICovCisJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19s aXN0KSB7CisJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5i byk7CisJCWJvb2wgdXNlcnBhZ2VfaW52YWxpZGF0ZWQgPSBmYWxzZTsKKwkJaW50IGk7CisKKwkJ ZS0+dXNlcl9wYWdlcyA9IGt2bWFsbG9jX2FycmF5KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsCisJ CQkJCXNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8p OworCQlpZiAoIWUtPnVzZXJfcGFnZXMpIHsKKwkJCURSTV9FUlJPUigiY2FsbG9jIGZhaWx1cmVc biIpOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlpZiAobGlzdF9lbXB0eSgmbmVlZF9w YWdlcykpCi0JCQlicmVhazsKLQotCQkvKiBVbnJlc2VydmUgZXZlcnl0aGluZyBhZ2Fpbi4gKi8K LQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7 Ci0KLQkJLyogV2UgdHJpZWQgdG9vIG1hbnkgdGltZXMsIGp1c3QgYWJvcnQgKi8KLQkJaWYgKCEt LXRyaWVzKSB7Ci0JCQlyID0gLUVERUFETEs7Ci0JCQlEUk1fRVJST1IoImRlYWRsb2NrIGluICVz XG4iLCBfX2Z1bmNfXyk7Ci0JCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7CisJCXIgPSBhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBlLT51c2VyX3BhZ2VzKTsKKwkJaWYg KHIpIHsKKwkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsKKwkJCWUtPnVzZXJfcGFnZXMgPSBOVUxM OworCQkJcmV0dXJuIHI7CiAJCX0KIAotCQkvKiBGaWxsIHRoZSBwYWdlIGFycmF5cyBmb3IgYWxs IHVzZXJwdHJzLiAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZuZWVkX3BhZ2VzLCB0di5o ZWFkKSB7Ci0JCQlzdHJ1Y3QgdHRtX3R0ICp0dG0gPSBlLT50di5iby0+dHRtOwotCi0JCQllLT51 c2VyX3BhZ2VzID0ga3ZtYWxsb2NfYXJyYXkodHRtLT5udW1fcGFnZXMsCi0JCQkJCQkJIHNpemVv ZihzdHJ1Y3QgcGFnZSopLAotCQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JCQlp ZiAoIWUtPnVzZXJfcGFnZXMpIHsKLQkJCQlyID0gLUVOT01FTTsKLQkJCQlEUk1fRVJST1IoImNh bGxvYyBmYWlsdXJlIGluICVzXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJZ290byBlcnJvcl9mcmVlX3Bh Z2VzOwotCQkJfQotCi0JCQlyID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyh0dG0sIGUt PnVzZXJfcGFnZXMpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoImFtZGdwdV90dG1fdHRf Z2V0X3VzZXJfcGFnZXMgZmFpbGVkLlxuIik7Ci0JCQkJa3ZmcmVlKGUtPnVzZXJfcGFnZXMpOwot CQkJCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwotCQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsKKwkJ Zm9yIChpID0gMDsgaSA8IGJvLT50Ym8udHRtLT5udW1fcGFnZXM7IGkrKykgeworCQkJaWYgKGJv LT50Ym8udHRtLT5wYWdlc1tpXSAhPSBlLT51c2VyX3BhZ2VzW2ldKSB7CisJCQkJdXNlcnBhZ2Vf aW52YWxpZGF0ZWQgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCWUtPnVzZXJfaW52 YWxpZGF0ZWQgPSB1c2VycGFnZV9pbnZhbGlkYXRlZDsKKwl9CiAKLQkJLyogQW5kIHRyeSBhZ2Fp bi4gKi8KLQkJbGlzdF9zcGxpY2UoJm5lZWRfcGFnZXMsICZwLT52YWxpZGF0ZWQpOworCXIgPSB0 dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQsIHRydWUsCisJ CQkJICAgJmR1cGxpY2F0ZXMpOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCWlmIChyICE9 IC1FUkVTVEFSVFNZUykKKwkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWls ZWQuXG4iKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJYW1kZ3B1X2NzX2dldF90aHJlc2hvbGRfZm9y X21vdmVzKHAtPmFkZXYsICZwLT5ieXRlc19tb3ZlZF90aHJlc2hvbGQsCkBAIC03NTUsMTcgKzcx OSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19w YXJzZXIgKnAsCiBlcnJvcl92YWxpZGF0ZToKIAlpZiAocikKIAkJdHRtX2V1X2JhY2tvZmZfcmVz ZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7Ci0KLWVycm9yX2ZyZWVfcGFnZXM6 Ci0KLQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3Qp IHsKLQkJaWYgKCFlLT51c2VyX3BhZ2VzKQotCQkJY29udGludWU7Ci0KLQkJcmVsZWFzZV9wYWdl cyhlLT51c2VyX3BhZ2VzLCBlLT50di5iby0+dHRtLT5udW1fcGFnZXMpOwotCQlrdmZyZWUoZS0+ dXNlcl9wYWdlcyk7Ci0JfQotCitvdXQ6CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEyMjQsNyArMTE3 OCw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNl ciAqcCwKIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7CiAJc3RydWN0IGFtZGdwdV9q b2IgKmpvYjsKIAl1aW50NjRfdCBzZXE7Ci0KIAlpbnQgcjsKIAogCWpvYiA9IHAtPmpvYjsKQEAg LTEyMzQsMTUgKzExODcsMjMgQEAgc3RhdGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVjdCBh bWRncHVfY3NfcGFyc2VyICpwLAogCWlmIChyKQogCQlnb3RvIGVycm9yX3VubG9jazsKIAotCS8q IE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9j ayAqLworCS8qIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0 aGUgbW4gbG9jay4KKwkgKiBwLT5tbiBpcyBob2xkIHVudGlsIGFtZGdwdV9jc19zdWJtaXQgaXMg ZmluaXNoZWQgYW5kIGZlbmNlIGlzIGFkZGVkCisJICogdG8gQk9zLgorCSAqLwogCWFtZGdwdV9t bl9sb2NrKHAtPm1uKTsKKworCS8qIElmIHVzZXJwdHIgYXJlIGludmFsaWRhdGVkIGFmdGVyIGFt ZGdwdV9jc19wYXJzZXJfYm9zKCksIHJldHVybgorCSAqIC1FQUdBSU4sIGRybUlvY3RsIGluIGxp YmRybSB3aWxsIHJlc3RhcnQgdGhlIGFtZGdwdV9jc19pb2N0bC4KKwkgKi8KIAlhbWRncHVfYm9f bGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsKIAkJc3RydWN0IGFt ZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsKIAotCQlpZiAoYW1kZ3B1 X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRtKSkgewotCQkJciA9IC1FUkVT VEFSVFNZUzsKLQkJCWdvdG8gZXJyb3JfYWJvcnQ7Ci0JCX0KKwkJciB8PSAhYW1kZ3B1X3R0bV90 dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKKwl9CisJaWYgKHIpIHsKKwkJciA9 IC1FQUdBSU47CisJCWdvdG8gZXJyb3JfYWJvcnQ7CiAJfQogCiAJam9iLT5vd25lciA9IHAtPmZp bHA7CkBAIC0xMzM4LDYgKzEyOTksNyBAQCBpbnQgYW1kZ3B1X2NzX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCkKIAogb3V0Ogog CWFtZGdwdV9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByLCByZXNlcnZlZF9idWZmZXJzKTsKKwog CXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKaW5k ZXggZDIxZGQyZjM2OWRhLi41NTUyODVlMzI5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMKQEAgLTMyOSwyNiArMzI5LDI0IEBAIGludCBhbWRncHVfZ2VtX3VzZXJw dHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAogCQlyID0gYW1k Z3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOwogCQlpZiAocikKLQkJCWdvdG8gZnJlZV9wYWdlczsK KwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJCWFtZGdwdV9ib19wbGFjZW1lbnRfZnJvbV9k b21haW4oYm8sIEFNREdQVV9HRU1fRE9NQUlOX0dUVCk7CiAJCXIgPSB0dG1fYm9fdmFsaWRhdGUo JmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKIAkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShi byk7CiAJCWlmIChyKQotCQkJZ290byBmcmVlX3BhZ2VzOworCQkJZ290byB1c2VyX3BhZ2VzX2Rv bmU7CiAJfQogCiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxwLCBnb2JqLCAmaGFuZGxl KTsKLQkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5v dyAqLwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKIAlpZiAocikKLQkJcmV0 dXJuIHI7CisJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJYXJncy0+aGFuZGxlID0gaGFuZGxl OwotCXJldHVybiAwOwogCi1mcmVlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMoYm8tPnRiby50dG0t PnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKK3VzZXJfcGFnZXNfZG9uZToKKwlpZiAo YXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfVkFMSURBVEUpCisJCWFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CiAKIHJlbGVhc2Vfb2JqZWN0Ogog CWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X21uLmMKaW5kZXggZTM1Njg2N2QyMzA4Li5mYTI1MTYwMTZjNDMgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCkBAIC0yMjIsOCArMjIyLDYgQEAgc3RhdGlj IHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25vZGUgKm5v ZGUsCiAJCQl0cnVlLCBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCQlpZiAociA8PSAw KQogCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBib1xuIiwgcik7 Ci0KLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50dG0pOwogCX0KIH0K IApAQCAtNTA0LDMgKzUwMiwyNiBAQCB2b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVyKHN0cnVjdCBh bWRncHVfYm8gKmJvKQogCW11dGV4X3VubG9jaygmYWRldi0+bW5fbG9jayk7CiB9CiAKKy8qIGZs YWdzIHVzZWQgYnkgSE1NIGludGVybmFsLCBub3QgcmVsYXRlZCB0byBDUFUvR1BVIFBURSBmbGFn cyAqLworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV9mbGFnc1tITU1fUEZOX0ZMQUdf TUFYXSA9IHsKKwkJKDEgPDwgMCksIC8qIEhNTV9QRk5fVkFMSUQgKi8KKwkJKDEgPDwgMSksIC8q IEhNTV9QRk5fV1JJVEUgKi8KKwkJMCAvKiBITU1fUEZOX0RFVklDRV9QUklWQVRFICovCit9Owor CitzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3JhbmdlX3ZhbHVlc1tITU1fUEZOX1ZBTFVFX01B WF0gPSB7CisJCTB4ZmZmZmZmZmZmZmZmZmZmZVVMLCAvKiBITU1fUEZOX0VSUk9SICovCisJCTAs IC8qIEhNTV9QRk5fTk9ORSAqLworCQkweGZmZmZmZmZmZmZmZmZmZmNVTCAvKiBITU1fUEZOX1NQ RUNJQUwgKi8KK307CisKK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0cnVjdCBobW1fcmFu Z2UgKnJhbmdlKQoreworCWlmIChyYW5nZSkgeworCQlyYW5nZS0+ZmxhZ3MgPSBobW1fcmFuZ2Vf ZmxhZ3M7CisJCXJhbmdlLT52YWx1ZXMgPSBobW1fcmFuZ2VfdmFsdWVzOworCQlyYW5nZS0+cGZu X3NoaWZ0ID0gUEFHRV9TSElGVDsKKwkJcmFuZ2UtPnBmbnMgPSBOVUxMOworCQlJTklUX0xJU1Rf SEVBRCgmcmFuZ2UtPmxpc3QpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9tbi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X21uLmgKaW5kZXggMGE1MWZkMDAwMjFjLi40ODAzZTIxNmUxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9tbi5oCkBAIC0yNSw5ICsyNSwxMCBAQAogI2RlZmluZSBfX0FNREdQ VV9NTl9IX18KIAogLyoKLSAqIE1NVSBOb3RpZmllcgorICogSE1NIG1pcnJvcgogICovCiBzdHJ1 Y3QgYW1kZ3B1X21uOworc3RydWN0IGhtbV9yYW5nZTsKIAogZW51bSBhbWRncHVfbW5fdHlwZSB7 CiAJQU1ER1BVX01OX1RZUEVfR0ZYLApAQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3QgYW1kZ3B1X21u ICphbWRncHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkJCWVudW0gYW1k Z3B1X21uX3R5cGUgdHlwZSk7CiBpbnQgYW1kZ3B1X21uX3JlZ2lzdGVyKHN0cnVjdCBhbWRncHVf Ym8gKmJvLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCBhbWRncHVfbW5fdW5yZWdpc3Rlcihz dHJ1Y3QgYW1kZ3B1X2JvICpibyk7Cit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShzdHJ1Y3Qg aG1tX3JhbmdlICpyYW5nZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9tbl9s b2NrKHN0cnVjdCBhbWRncHVfbW4gKm1uKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9t bl91bmxvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdHRtLmMKaW5kZXggNzNlNzFlNjFkYzk5Li4xZTY3NTA0OGY3OTAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNs dWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1 ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvaG1tLmg+CiAjaW5jbHVkZSAiYW1k Z3B1LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X29iamVjdC5oIgogI2luY2x1ZGUgImFtZGdwdV90cmFj ZS5oIgpAQCAtNzA1LDk4ICs3MDYsMTAyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFtZGdwdV90 dG1faW9fbWVtX3BmbihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogLyoKICAqIFRUTSBi YWNrZW5kIGZ1bmN0aW9ucy4KICAqLwotc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCB7 Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLX07 Ci0KIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsKIAlzdHJ1Y3QgdHRtX2RtYV90dAl0dG07CiAJdTY0 CQkJb2Zmc2V0OwogCXVpbnQ2NF90CQl1c2VycHRyOwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdXNl cnRhc2s7CiAJdWludDMyX3QJCXVzZXJmbGFnczsKLQlzcGlubG9ja190ICAgICAgICAgICAgICBn dXB0YXNrbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsKLQlhdG9taWNf dAkJbW11X2ludmFsaWRhdGlvbnM7Ci0JdWludDMyX3QJCWxhc3Rfc2V0X3BhZ2VzOworCXN0cnVj dCBobW1fcmFuZ2UJcmFuZ2U7CiB9OwogCiAvKioKLSAqIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJf cGFnZXMgLSBQaW4gcGFnZXMgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYSBVU0VSUFRSCi0gKiBw b2ludGVyIHRvIG1lbW9yeQorICogYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyAtIGdldCBk ZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlcgorICogbWVtb3J5IGFuZCBzdGFy dCBITU0gdHJhY2tpbmcgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlCiAgKgotICogQ2FsbGVkIGJ5IGFt ZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgpIGFuZCBhbWRncHVfY3NfcGFyc2VyX2JvcygpLgotICog VGhpcyBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBnZXRfdXNlcl9wYWdlcygpIGNhbGwg dG8gcHJvdmlkZQotICogZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMgdGhhdCBiYWNrIHVzZXIgbWVt b3J5LgorICogQ2FsbGluZyBmdW5jdGlvbiBtdXN0IGNhbGwgYW1kZ3B1X3R0bV90dF91c2VycHRy X3JhbmdlX2RvbmUoKSBvbmNlIGFuZCBvbmx5CisgKiBvbmNlIGFmdGVyd2FyZHMgdG8gc3RvcCBI TU0gdHJhY2tpbmcKICAqLwogaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0 IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXN0cnVjdCBhbWRncHVfdHRt X3R0ICpndHQgPSAodm9pZCAqKXR0bTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGd0dC0+dXNl cnRhc2stPm1tOwotCXVuc2lnbmVkIGludCBmbGFncyA9IDA7Ci0JdW5zaWduZWQgcGlubmVkID0g MDsKLQlpbnQgcjsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGd0dC0+dXNlcnB0ciArIHR0bS0+bnVt X3BhZ2VzICogUEFHRV9TSVpFOworCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gJmd0dC0+cmFu Z2U7CisJaW50IHIgPSAwLCBpOwogCiAJaWYgKCFtbSkgLyogSGFwcGVucyBkdXJpbmcgcHJvY2Vz cyBzaHV0ZG93biAqLwogCQlyZXR1cm4gLUVTUkNIOwogCi0JaWYgKCEoZ3R0LT51c2VyZmxhZ3Mg JiBBTURHUFVfR0VNX1VTRVJQVFJfUkVBRE9OTFkpKQotCQlmbGFncyB8PSBGT0xMX1dSSVRFOwor CWFtZGdwdV9obW1faW5pdF9yYW5nZShyYW5nZSk7CiAKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3Nl bSk7CiAKLQlpZiAoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkp IHsKLQkJLyoKLQkJICogY2hlY2sgdGhhdCB3ZSBvbmx5IHVzZSBhbm9ueW1vdXMgbWVtb3J5IHRv IHByZXZlbnQgcHJvYmxlbXMKLQkJICogd2l0aCB3cml0ZWJhY2sKLQkJICovCi0JCXVuc2lnbmVk IGxvbmcgZW5kID0gZ3R0LT51c2VycHRyICsgdHRtLT5udW1fcGFnZXMgKiBQQUdFX1NJWkU7Ci0J CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXJhbmdlLT52bWEgPSBmaW5kX3ZtYShtbSwg Z3R0LT51c2VycHRyKTsKKwlpZiAoIXJhbmdlX2luX3ZtYShyYW5nZS0+dm1hLCBndHQtPnVzZXJw dHIsIGVuZCkpCisJCXIgPSAtRUZBVUxUOworCWVsc2UgaWYgKChndHQtPnVzZXJmbGFncyAmIEFN REdQVV9HRU1fVVNFUlBUUl9BTk9OT05MWSkgJiYKKwkJcmFuZ2UtPnZtYS0+dm1fZmlsZSkKKwkJ ciA9IC1FUEVSTTsKKwlpZiAocikKKwkJZ290byBvdXQ7CiAKLQkJdm1hID0gZmluZF92bWEobW0s IGd0dC0+dXNlcnB0cik7Ci0JCWlmICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX2Vu ZCA8IGVuZCkgewotCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJCXJldHVybiAtRVBFUk07 Ci0JCX0KKwlyYW5nZS0+cGZucyA9IGt2bWFsbG9jX2FycmF5KHR0bS0+bnVtX3BhZ2VzLCBzaXpl b2YodWludDY0X3QpLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHJhbmdlLT5wZm5zID09 IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KKwlyYW5nZS0+c3RhcnQg PSBndHQtPnVzZXJwdHI7CisJcmFuZ2UtPmVuZCA9IGVuZDsKIAotCS8qIGxvb3AgZW5vdWdoIHRp bWVzIHVzaW5nIGNvbnRpZ3VvdXMgcGFnZXMgb2YgbWVtb3J5ICovCi0JZG8gewotCQl1bnNpZ25l ZCBudW1fcGFnZXMgPSB0dG0tPm51bV9wYWdlcyAtIHBpbm5lZDsKLQkJdWludDY0X3QgdXNlcnB0 ciA9IGd0dC0+dXNlcnB0ciArIHBpbm5lZCAqIFBBR0VfU0laRTsKLQkJc3RydWN0IHBhZ2UgKipw ID0gcGFnZXMgKyBwaW5uZWQ7Ci0JCXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3QgZ3Vw dGFzazsKKwlyYW5nZS0+cGZuc1swXSA9IHJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsKKwly YW5nZS0+cGZuc1swXSB8PSBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHR0bSkgPworCQkJCTAg OiByYW5nZS0+ZmxhZ3NbSE1NX1BGTl9XUklURV07CisJZm9yIChpID0gMTsgaSA8IHR0bS0+bnVt X3BhZ2VzOyBpKyspCisJCXJhbmdlLT5wZm5zW2ldID0gcmFuZ2UtPnBmbnNbMF07CiAKLQkJZ3Vw dGFzay50YXNrID0gY3VycmVudDsKLQkJc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKLQkJ bGlzdF9hZGQoJmd1cHRhc2subGlzdCwgJmd0dC0+Z3VwdGFza3MpOwotCQlzcGluX3VubG9jaygm Z3R0LT5ndXB0YXNrbG9jayk7CisJLyogVGhpcyBtYXkgdHJpZ2dlciBwYWdlIHRhYmxlIHVwZGF0 ZSAqLworCXIgPSBobW1fdm1hX2ZhdWx0KHJhbmdlLCB0cnVlKTsKKwlpZiAocikKKwkJZ290byBv dXRfZnJlZV9wZm5zOwogCi0JCWlmIChtbSA9PSBjdXJyZW50LT5tbSkKLQkJCXIgPSBnZXRfdXNl cl9wYWdlcyh1c2VycHRyLCBudW1fcGFnZXMsIGZsYWdzLCBwLCBOVUxMKTsKLQkJZWxzZQotCQkJ ciA9IGdldF91c2VyX3BhZ2VzX3JlbW90ZShndHQtPnVzZXJ0YXNrLAotCQkJCQltbSwgdXNlcnB0 ciwgbnVtX3BhZ2VzLAotCQkJCQlmbGFncywgcCwgTlVMTCwgTlVMTCk7CisJdXBfcmVhZCgmbW0t Pm1tYXBfc2VtKTsKIAotCQlzcGluX2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCQlsaXN0X2Rl bCgmZ3VwdGFzay5saXN0KTsKLQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOworCWZv ciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKQorCQlwYWdlc1tpXSA9IGhtbV9wZm5f dG9fcGFnZShyYW5nZSwgcmFuZ2UtPnBmbnNbaV0pOwogCi0JCWlmIChyIDwgMCkKLQkJCWdvdG8g cmVsZWFzZV9wYWdlczsKKwlyZXR1cm4gMDsKIAotCQlwaW5uZWQgKz0gcjsKK291dF9mcmVlX3Bm bnM6CisJa3ZmcmVlKHJhbmdlLT5wZm5zKTsKKwlyYW5nZS0+cGZucyA9IE5VTEw7CitvdXQ6CisJ dXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gcjsKK30KIAotCX0gd2hpbGUgKHBpbm5l ZCA8IHR0bS0+bnVtX3BhZ2VzKTsKKy8qKgorICogYW1kZ3B1X3R0bV90dF91c2VycHRyX3Jhbmdl X2RvbmUgLSBzdG9wIEhNTSB0cmFjayB0aGUgQ1BVIHBhZ2UgdGFibGUgY2hhbmdlCisgKiBDaGVj ayBpZiB0aGUgcGFnZXMgYmFja2luZyB0aGlzIHR0bSByYW5nZSBoYXZlIGJlZW4gaW52YWxpZGF0 ZWQKKyAqCisgKiBSZXR1cm5zOiB0cnVlIGlmIHBhZ2VzIGFyZSBzdGlsbCB2YWxpZAorICovCiti b29sIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0p Cit7CisJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOworCWJvb2wgciA9 IGZhbHNlOwogCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKKwlpZiAoIWd0 dCB8fCAhZ3R0LT51c2VycHRyKQorCQlyZXR1cm4gZmFsc2U7CisKKwlXQVJOX09OQ0UoIWd0dC0+ cmFuZ2UucGZucywgIk5vIHVzZXIgcGFnZXMgdG8gY2hlY2tcbiIpOworCWlmIChndHQtPnJhbmdl LnBmbnMpIHsKKwkJciA9IGhtbV92bWFfcmFuZ2VfZG9uZSgmZ3R0LT5yYW5nZSk7CisJCWt2ZnJl ZShndHQtPnJhbmdlLnBmbnMpOworCQlndHQtPnJhbmdlLnBmbnMgPSBOVUxMOworCX0KIAotcmVs ZWFzZV9wYWdlczoKLQlyZWxlYXNlX3BhZ2VzKHBhZ2VzLCBwaW5uZWQpOwotCXVwX3JlYWQoJm1t LT5tbWFwX3NlbSk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTgwOSwxNiArODE0LDEwIEBAIGludCBh bWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBh Z2UgKipwYWdlcykKICAqLwogdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0cnVj dCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykKIHsKLQlzdHJ1Y3QgYW1kZ3B1X3R0 bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CiAJdW5zaWduZWQgaTsKIAotCWd0dC0+bGFzdF9zZXRf cGFnZXMgPSBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7Ci0JZm9yIChpID0g MDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kpIHsKLQkJaWYgKHR0bS0+cGFnZXNbaV0pCi0JCQlw dXRfcGFnZSh0dG0tPnBhZ2VzW2ldKTsKLQorCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdl czsgKytpKQogCQl0dG0tPnBhZ2VzW2ldID0gcGFnZXMgPyBwYWdlc1tpXSA6IE5VTEw7Ci0JfQog fQogCiAvKioKQEAgLTkwMywxMCArOTAyLDExIEBAIHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRf dW5waW5fdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiAJLyogdW5tYXAgdGhlIHBhZ2VzIG1h cHBlZCB0byB0aGUgZGV2aWNlICovCiAJZG1hX3VubWFwX3NnKGFkZXYtPmRldiwgdHRtLT5zZy0+ c2dsLCB0dG0tPnNnLT5uZW50cywgZGlyZWN0aW9uKTsKIAotCS8qIG1hcmsgdGhlIHBhZ2VzIGFz IGRpcnR5ICovCi0JYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXModHRtKTsKLQogCXNnX2Zy ZWVfdGFibGUodHRtLT5zZyk7CisKKwlpZiAoZ3R0LT5yYW5nZS5wZm5zICYmCisJICAgIHR0bS0+ cGFnZXNbMF0gPT0gaG1tX3Bmbl90b19wYWdlKCZndHQtPnJhbmdlLCBndHQtPnJhbmdlLnBmbnNb MF0pKQorCQlXQVJOX09OQ0UoMSwgIk1pc3NpbmcgZ2V0X3VzZXJfcGFnZV9kb25lXG4iKTsKIH0K IAogaW50IGFtZGdwdV90dG1fZ2FydF9iaW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LApA QCAtMTI1NiwxMSArMTI1Niw2IEBAIGludCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRyKHN0cnVj dCB0dG1fdHQgKnR0bSwgdWludDY0X3QgYWRkciwKIAlndHQtPnVzZXJ0YXNrID0gY3VycmVudC0+ Z3JvdXBfbGVhZGVyOwogCWdldF90YXNrX3N0cnVjdChndHQtPnVzZXJ0YXNrKTsKIAotCXNwaW5f bG9ja19pbml0KCZndHQtPmd1cHRhc2tsb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmZ3R0LT5ndXB0 YXNrcyk7Ci0JYXRvbWljX3NldCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucywgMCk7Ci0JZ3R0LT5s YXN0X3NldF9wYWdlcyA9IDA7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI4OSw3ICsxMjg0LDYg QEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwg dW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVj dCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKLQlzdHJ1Y3QgYW1kZ3B1X3R0bV9n dXBfdGFza19saXN0ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAKIAlpZiAoZ3R0ID09 IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKQEAgLTEzMDIsNDggKzEyOTYsMjAgQEAgYm9vbCBhbWRn cHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9u ZyBzdGFydCwKIAlpZiAoZ3R0LT51c2VycHRyID4gZW5kIHx8IGd0dC0+dXNlcnB0ciArIHNpemUg PD0gc3RhcnQpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIFNlYXJjaCB0aGUgbGlzdHMgb2YgdGFz a3MgdGhhdCBob2xkIHRoaXMgbWFwcGluZyBhbmQgc2VlCi0JICogaWYgY3VycmVudCBpcyBvbmUg b2YgdGhlbS4gIElmIGl0IGlzIHJldHVybiBmYWxzZS4KLQkgKi8KLQlzcGluX2xvY2soJmd0dC0+ Z3VwdGFza2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZndHQtPmd1cHRhc2tz LCBsaXN0KSB7Ci0JCWlmIChlbnRyeS0+dGFzayA9PSBjdXJyZW50KSB7Ci0JCQlzcGluX3VubG9j aygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0Jc3Bpbl91 bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCi0JYXRvbWljX2luYygmZ3R0LT5tbXVfaW52YWxp ZGF0aW9ucyk7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCi0gKiBhbWRncHVfdHRtX3R0X3Vz ZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhlIHR0bV90dCBvYmplY3QgYmVlbiBpbnZhbGlkYXRl ZD8KKyAqIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0ciAtIEhhdmUgdGhlIHBhZ2VzIGJhY2tpbmcg YnkgdXNlcnB0cj8KICAqLwotYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQo c3RydWN0IHR0bV90dCAqdHRtLAotCQkJCSAgICAgICBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpCi17 Ci0Jc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwotCWludCBwcmV2X2lu dmFsaWRhdGVkID0gKmxhc3RfaW52YWxpZGF0ZWQ7Ci0KLQkqbGFzdF9pbnZhbGlkYXRlZCA9IGF0 b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsKLQlyZXR1cm4gcHJldl9pbnZhbGlk YXRlZCAhPSAqbGFzdF9pbnZhbGlkYXRlZDsKLX0KLQotLyoqCi0gKiBhbWRncHVfdHRtX3R0X3Vz ZXJwdHJfbmVlZHNfcGFnZXMgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtX3R0IG9i amVjdAotICogYmVlbiBpbnZhbGlkYXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUgYmVl biBzZXQ/Ci0gKi8KLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKHN0cnVj dCB0dG1fdHQgKnR0bSkKK2Jvb2wgYW1kZ3B1X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1f dHQgKnR0bSkKIHsKIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CiAK IAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKIAkJcmV0dXJuIGZhbHNlOwogCi0J cmV0dXJuIGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKSAhPSBndHQtPmxhc3Rf c2V0X3BhZ2VzOworCXJldHVybiB0cnVlOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uaAppbmRleCBiNWIyZDEwMWY3ZGIuLjg5ODhjODdmZmY5ZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaApAQCAtMTAyLDYgKzEwMiw3IEBAIGlu dCBhbWRncHVfdHRtX2FsbG9jX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiBp bnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8p OwogCiBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0s IHN0cnVjdCBwYWdlICoqcGFnZXMpOworYm9vbCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2Vz X2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKTsKIHZvaWQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9w YWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpOwogdm9pZCBhbWRn cHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogaW50IGFtZGdw dV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1aW50NjRfdCBhZGRyLApA QCAtMTEyLDcgKzExMyw3IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1 Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJICB1bnNpZ25lZCBsb25n IGVuZCk7CiBib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3QgdHRt X3R0ICp0dG0sCiAJCQkJICAgICAgIGludCAqbGFzdF9pbnZhbGlkYXRlZCk7Ci1ib29sIGFtZGdw dV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOworYm9vbCBh bWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKTsKIGJvb2wgYW1kZ3B1 X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogdWludDY0X3QgYW1kZ3B1 X3R0bV90dF9wZGVfZmxhZ3Moc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgdHRtX21lbV9yZWcg Km1lbSk7CiB1aW50NjRfdCBhbWRncHVfdHRtX3R0X3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgc3RydWN0IHR0bV90dCAqdHRtLAotLSAKMi4xNy4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAph bWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK