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 v4 Date: Thu, 13 Dec 2018 21:01:31 +0000 Message-ID: <20181213210115.6843-1-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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 LS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMgICB8ICAgMiAt CiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oICAgfCAgIDMgKy0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jICAgICAgICB8IDE4NSArKysr KysrKystLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAg ICAgICB8ICAxNCArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMgICAg ICAgIHwgIDI3ICsrLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmggICAg ICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgICAg ICAgfCAxNjYgKysrKysrLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3R0bS5oICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdm0uYyAgICAgICAgfCAgIDEgLQogMTEgZmlsZXMgY2hhbmdlZCwgMjA4IGluc2VydGlvbnMo KyksIDI5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfYW1ka2ZkLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkLmgKaW5kZXggNzA0MjlmN2FhOWE4Li43MTc3OTFkNGZhNDUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgKQEAgLTYyLDcgKzYyLDYgQEAgc3RydWN0 IGtnZF9tZW0gewogCiAJYXRvbWljX3QgaW52YWxpZDsKIAlzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3Nf aW5mbyAqcHJvY2Vzc19pbmZvOwotCXN0cnVjdCBwYWdlICoqdXNlcl9wYWdlczsKIAogCXN0cnVj dCBhbWRncHVfc3luYyBzeW5jOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYW1ka2ZkX2dwdXZtLmMKaW5kZXggYmUxYWI0MzQ3M2M2Li4yODk3NzkzNjAwZjcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMK QEAgLTU4MiwyOCArNTgyLDEyIEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBr Z2RfbWVtICptZW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQlnb3RvIG91dDsKIAl9CiAKLQkv KiBJZiBubyByZXN0b3JlIHdvcmtlciBpcyBydW5uaW5nIGNvbmN1cnJlbnRseSwgdXNlcl9wYWdl cwotCSAqIHNob3VsZCBub3QgYmUgYWxsb2NhdGVkCi0JICovCi0JV0FSTihtZW0tPnVzZXJfcGFn ZXMsICJMZWFraW5nIHVzZXJfcGFnZXMgYXJyYXkiKTsKLQotCW1lbS0+dXNlcl9wYWdlcyA9IGt2 bWFsbG9jX2FycmF5KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsCi0JCQkJCSAgIHNpemVvZihzdHJ1 Y3QgcGFnZSAqKSwKLQkJCQkJICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCWlmICghbWVt LT51c2VyX3BhZ2VzKSB7Ci0JCXByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlcyBh cnJheVxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIHVucmVnaXN0ZXJf b3V0OwotCX0KLQotCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRiby50 dG0sIG1lbS0+dXNlcl9wYWdlcyk7CisJcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdl cyhiby0+dGJvLnR0bSwgYm8tPnRiby50dG0tPnBhZ2VzKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vy cigiJXM6IEZhaWxlZCB0byBnZXQgdXNlciBwYWdlczogJWRcbiIsIF9fZnVuY19fLCByZXQpOwot CQlnb3RvIGZyZWVfb3V0OworCQlnb3RvIHVucmVnaXN0ZXJfb3V0OwogCX0KIAotCWFtZGdwdV90 dG1fdHRfc2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sIG1lbS0+dXNlcl9wYWdlcyk7Ci0KIAly ZXQgPSBhbWRncHVfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIo IiVzOiBGYWlsZWQgdG8gcmVzZXJ2ZSBCT1xuIiwgX19mdW5jX18pOwpAQCAtNjE2LDExICs2MDAs NyBAQCBzdGF0aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBzdHJ1 Y3QgbW1fc3RydWN0ICptbSwKIAlhbWRncHVfYm9fdW5yZXNlcnZlKGJvKTsKIAogcmVsZWFzZV9v dXQ6Ci0JaWYgKHJldCkKLQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50Ym8u dHRtLT5udW1fcGFnZXMpOwotZnJlZV9vdXQ6Ci0Ja3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7Ci0J bWVtLT51c2VyX3BhZ2VzID0gTlVMTDsKKwlhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2Rv bmUoYm8tPnRiby50dG0pOwogdW5yZWdpc3Rlcl9vdXQ6CiAJaWYgKHJldCkKIAkJYW1kZ3B1X21u X3VucmVnaXN0ZXIoYm8pOwpAQCAtNjc5LDcgKzY1OSw2IEBAIHN0YXRpYyBpbnQgcmVzZXJ2ZV9i b19hbmRfdm0oc3RydWN0IGtnZF9tZW0gKm1lbSwKIAljdHgtPmtmZF9iby5wcmlvcml0eSA9IDA7 CiAJY3R4LT5rZmRfYm8udHYuYm8gPSAmYm8tPnRibzsKIAljdHgtPmtmZF9iby50di5udW1fc2hh cmVkID0gMTsKLQljdHgtPmtmZF9iby51c2VyX3BhZ2VzID0gTlVMTDsKIAlsaXN0X2FkZCgmY3R4 LT5rZmRfYm8udHYuaGVhZCwgJmN0eC0+bGlzdCk7CiAKIAlhbWRncHVfdm1fZ2V0X3BkX2JvKHZt LCAmY3R4LT5saXN0LCAmY3R4LT52bV9wZFswXSk7CkBAIC03NDMsNyArNzIyLDYgQEAgc3RhdGlj IGludCByZXNlcnZlX2JvX2FuZF9jb25kX3ZtcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLAogCWN0eC0+ a2ZkX2JvLnByaW9yaXR5ID0gMDsKIAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOwogCWN0 eC0+a2ZkX2JvLnR2Lm51bV9zaGFyZWQgPSAxOwotCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBO VUxMOwogCWxpc3RfYWRkKCZjdHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsKIAogCWkg PSAwOwpAQCAtMTM3MSwxNSArMTM0OSw2IEBAIGludCBhbWRncHVfYW1ka2ZkX2dwdXZtX2ZyZWVf bWVtb3J5X29mX2dwdSgKIAlsaXN0X2RlbCgmYm9fbGlzdF9lbnRyeS0+aGVhZCk7CiAJbXV0ZXhf dW5sb2NrKCZwcm9jZXNzX2luZm8tPmxvY2spOwogCi0JLyogRnJlZSB1c2VyIHBhZ2VzIGlmIG5l Y2Vzc2FyeSAqLwotCWlmIChtZW0tPnVzZXJfcGFnZXMpIHsKLQkJcHJfZGVidWcoIiVzOiBGcmVl aW5nIHVzZXJfcGFnZXMgYXJyYXlcbiIsIF9fZnVuY19fKTsKLQkJaWYgKG1lbS0+dXNlcl9wYWdl c1swXSkKLQkJCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLAotCQkJCQltZW0tPmJvLT50 Ym8udHRtLT5udW1fcGFnZXMpOwotCQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsKLQl9Ci0KIAly ZXQgPSByZXNlcnZlX2JvX2FuZF9jb25kX3ZtcyhtZW0sIE5VTEwsIEJPX1ZNX0FMTCwgJmN0eCk7 CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CkBAIC0xODU1LDI1ICsxODI0LDEx IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3By b2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvLAogCiAJCWJvID0gbWVtLT5ibzsKIAotCQlpZiAoIW1l bS0+dXNlcl9wYWdlcykgewotCQkJbWVtLT51c2VyX3BhZ2VzID0KLQkJCQlrdm1hbGxvY19hcnJh eShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLAotCQkJCQkJIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwK LQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JCQlpZiAoIW1lbS0+dXNlcl9wYWdl cykgewotCQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlcyBhcnJheVxuIiwK LQkJCQkgICAgICAgX19mdW5jX18pOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQl9IGVs c2UgaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkgewotCQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJf cGFnZXMsIGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOwotCQl9Ci0KIAkJLyogR2V0IHVwZGF0ZWQg dXNlciBwYWdlcyAqLwogCQlyZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50 Ym8udHRtLAotCQkJCQkJICAgbWVtLT51c2VyX3BhZ2VzKTsKKwkJCQkJCSAgIGJvLT50Ym8udHRt LT5wYWdlcyk7CiAJCWlmIChyZXQpIHsKLQkJCW1lbS0+dXNlcl9wYWdlc1swXSA9IE5VTEw7CisJ CQliby0+dGJvLnR0bS0+cGFnZXNbMF0gPSBOVUxMOwogCQkJcHJfaW5mbygiJXM6IEZhaWxlZCB0 byBnZXQgdXNlciBwYWdlczogJWRcbiIsCiAJCQkJX19mdW5jX18sIHJldCk7CiAJCQkvKiBQcmV0 ZW5kIGl0IHN1Y2NlZWRlZC4gSXQgd2lsbCBmYWlsIGxhdGVyCkBAIC0xODgyLDEyICsxODM3LDYg QEAgc3RhdGljIGludCB1cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJv Y2Vzc19pbmZvICpwcm9jZXNzX2luZm8sCiAJCQkgKiBzdGFsbGVkIHVzZXIgbW9kZSBxdWV1ZXMu CiAJCQkgKi8KIAkJfQotCi0JCS8qIE1hcmsgdGhlIEJPIGFzIHZhbGlkIHVubGVzcyBpdCB3YXMg aW52YWxpZGF0ZWQKLQkJICogYWdhaW4gY29uY3VycmVudGx5Ci0JCSAqLwotCQlpZiAoYXRvbWlj X2NtcHhjaGcoJm1lbS0+aW52YWxpZCwgaW52YWxpZCwgMCkgIT0gaW52YWxpZCkKLQkJCXJldHVy biAtRUFHQUlOOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTkxNyw3ICsxODY2LDggQEAgc3RhdGlj IGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2lu Zm8gKnByb2Nlc3NfaW5mbykKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmICghcGRfYm9fbGlz dF9lbnRyaWVzKSB7CiAJCXByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBQRCBCTyBsaXN0 IGVudHJpZXNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9N RU07CisJCWdvdG8gb3V0X25vX21lbTsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmcmVzdl9saXN0 KTsKQEAgLTE5NDEsNyArMTg5MSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2Vy X3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pCiAJcmV0ID0g dHRtX2V1X3Jlc2VydmVfYnVmZmVycygmdGlja2V0LCAmcmVzdl9saXN0LCBmYWxzZSwgJmR1cGxp Y2F0ZXMpOwogCVdBUk4oIWxpc3RfZW1wdHkoJmR1cGxpY2F0ZXMpLCAiRHVwbGljYXRlcyBzaG91 bGQgYmUgZW1wdHkiKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZTsK IAogCWFtZGdwdV9zeW5jX2NyZWF0ZSgmc3luYyk7CiAKQEAgLTE5NjcsMTAgKzE5MTcsOCBAQCBz dGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nl c3NfaW5mbyAqcHJvY2Vzc19pbmZvKQogCiAJCWJvID0gbWVtLT5ibzsKIAotCQkvKiBDb3B5IHBh Z2VzIGFycmF5IGFuZCB2YWxpZGF0ZSB0aGUgQk8gaWYgd2UgZ290IHVzZXIgcGFnZXMgKi8KLQkJ aWYgKG1lbS0+dXNlcl9wYWdlc1swXSkgewotCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdl cyhiby0+dGJvLnR0bSwKLQkJCQkJCSAgICAgbWVtLT51c2VyX3BhZ2VzKTsKKwkJLyogVmFsaWRh dGUgdGhlIEJPIGlmIHdlIGdvdCB1c2VyIHBhZ2VzICovCisJCWlmIChiby0+dGJvLnR0bS0+cGFn ZXNbMF0pIHsKIAkJCWFtZGdwdV9ib19wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sIG1lbS0+ZG9t YWluKTsKIAkJCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQs ICZjdHgpOwogCQkJaWYgKHJldCkgewpAQCAtMTk3OSwxNiArMTkyNywxNiBAQCBzdGF0aWMgaW50 IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAq cHJvY2Vzc19pbmZvKQogCQkJfQogCQl9CiAKLQkJLyogVmFsaWRhdGUgc3VjY2VlZGVkLCBub3cg dGhlIEJPIG93bnMgdGhlIHBhZ2VzLCBmcmVlCi0JCSAqIG91ciBjb3B5IG9mIHRoZSBwb2ludGVy IGFycmF5LiBQdXQgdGhpcyBCTyBiYWNrIG9uCi0JCSAqIHRoZSB1c2VycHRyX3ZhbGlkX2xpc3Qu IElmIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZQotCQkgKiBpdCwgd2UgbmVlZCB0byBzdGFydCBmcm9t IHNjcmF0Y2guCi0JCSAqLwotCQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsKLQkJbWVtLT51c2Vy X3BhZ2VzID0gTlVMTDsKIAkJbGlzdF9tb3ZlX3RhaWwoJm1lbS0+dmFsaWRhdGVfbGlzdC5oZWFk LAogCQkJICAgICAgICZwcm9jZXNzX2luZm8tPnVzZXJwdHJfdmFsaWRfbGlzdCk7CiAKKwkJLyog U3RvcCBITU0gdHJhY2sgdGhlIHVzZXJwdHIgdXBkYXRlLiBXZSBkb250IGNoZWNrIHRoZSByZXR1 cm4KKwkJICogdmFsdWUgZm9yIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlIGJlY2F1 c2Ugd2Ugd2lsbAorCQkgKiByZXNjaGVkdWxlIHRoZSByZXN0b3JlIHdvcmtlciBpZiBwcm9jZXNz X2luZm8tPmV2aWN0ZWRfYm9zCisJCSAqIGlzIHVwZGF0ZWQuCisJCSAqLworCQlhbWRncHVfdHRt X3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOworCiAJCS8qIFVwZGF0ZSBtYXBw aW5nLiBJZiB0aGUgQk8gd2FzIG5vdCB2YWxpZGF0ZWQKIAkJICogKGJlY2F1c2Ugd2UgY291bGRu J3QgZ2V0IHVzZXIgcGFnZXMpLCB0aGlzIHdpbGwKIAkJICogY2xlYXIgdGhlIHBhZ2UgdGFibGUg ZW50cmllcywgd2hpY2ggd2lsbCByZXN1bHQgaW4KQEAgLTIwMjIsOCArMTk3MCwxNSBAQCBzdGF0 aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3Nf aW5mbyAqcHJvY2Vzc19pbmZvKQogCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0aWNrZXQs ICZyZXN2X2xpc3QpOwogCWFtZGdwdV9zeW5jX3dhaXQoJnN5bmMsIGZhbHNlKTsKIAlhbWRncHVf c3luY19mcmVlKCZzeW5jKTsKLW91dDoKK291dF9mcmVlOgogCWtmcmVlKHBkX2JvX2xpc3RfZW50 cmllcyk7CitvdXRfbm9fbWVtOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtZW0sIHRtcF9t ZW0sCisJCQkJICZwcm9jZXNzX2luZm8tPnVzZXJwdHJfaW52YWxfbGlzdCwKKwkJCQkgdmFsaWRh dGVfbGlzdC5oZWFkKSB7CisJCWJvID0gbWVtLT5ibzsKKwkJYW1kZ3B1X3R0bV90dF9nZXRfdXNl cl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMKaW5kZXggNWM3OWRhOGUxMTUw Li4zODQyMTgzOTcwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9ib19saXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Jv X2xpc3QuYwpAQCAtMjAwLDggKzIwMCw2IEBAIHZvaWQgYW1kZ3B1X2JvX2xpc3RfZ2V0X2xpc3Qo c3RydWN0IGFtZGdwdV9ib19saXN0ICpsaXN0LAogCiAJCWlmICghYm8tPnBhcmVudCkKIAkJCWxp c3RfYWRkX3RhaWwoJmUtPnR2LmhlYWQsICZidWNrZXRbcHJpb3JpdHldKTsKLQotCQllLT51c2Vy X3BhZ2VzID0gTlVMTDsKIAl9CiAKIAkvKiBDb25uZWN0IHRoZSBzb3J0ZWQgYnVja2V0cyBpbiB0 aGUgb3V0cHV0IGxpc3QuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYm9fbGlzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Jv X2xpc3QuaAppbmRleCA3YzVmNWQxNjAxZTYuLjRiZWFiMmRlMDliMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCkBAIC0zNSw4ICszNSw3IEBAIHN0cnVj dCBhbWRncHVfYm9fbGlzdF9lbnRyeSB7CiAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIJdHY7 CiAJc3RydWN0IGFtZGdwdV9ib192YQkJKmJvX3ZhOwogCXVpbnQzMl90CQkJcHJpb3JpdHk7Ci0J c3RydWN0IHBhZ2UJCQkqKnVzZXJfcGFnZXM7Ci0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7CisJ Ym9vbAkJCQl1c2VyX2ludmFsaWRhdGVkOwogfTsKIAogc3RydWN0IGFtZGdwdV9ib19saXN0IHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKaW5kZXggMWM0OWI4MjY2ZDY5Li5l MzBlMzlmYjcyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCkBAIC01 Miw3ICs1Miw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3VzZXJfZmVuY2VfY2h1bmsoc3RydWN0 IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJcC0+dWZfZW50cnkudHYuYm8gPSAmYm8tPnRibzsKIAkv KiBPbmUgZm9yIFRUTSBhbmQgb25lIGZvciB0aGUgQ1Mgam9iICovCiAJcC0+dWZfZW50cnkudHYu bnVtX3NoYXJlZCA9IDI7Ci0JcC0+dWZfZW50cnkudXNlcl9wYWdlcyA9IE5VTEw7CiAKIAlkcm1f Z2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ29iaik7CiAKQEAgLTUzMiwyNCArNTMxLDE5IEBAIHN0 YXRpYyBpbnQgYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIg KnAsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIHZhbGlkYXRlZCwgdHYuaGVhZCkgewog CQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8obG9iai0+dHYuYm8pOwot CQlib29sIGJpbmRpbmdfdXNlcnB0ciA9IGZhbHNlOwogCQlzdHJ1Y3QgbW1fc3RydWN0ICp1c2Vy bW07CiAKIAkJdXNlcm1tID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcm1tKGJvLT50Ym8udHRtKTsK IAkJaWYgKHVzZXJtbSAmJiB1c2VybW0gIT0gY3VycmVudC0+bW0pCiAJCQlyZXR1cm4gLUVQRVJN OwogCi0JCS8qIENoZWNrIGlmIHdlIGhhdmUgdXNlciBwYWdlcyBhbmQgbm9ib2R5IGJvdW5kIHRo ZSBCTyBhbHJlYWR5ICovCi0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMo Ym8tPnRiby50dG0pICYmCi0JCSAgICBsb2JqLT51c2VyX3BhZ2VzKSB7CisJCWlmIChhbWRncHVf dHRtX3R0X2lzX3VzZXJwdHIoYm8tPnRiby50dG0pICYmCisJCSAgICBsb2JqLT51c2VyX2ludmFs aWRhdGVkKSB7CiAJCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLAogCQkJCQkJ CUFNREdQVV9HRU1fRE9NQUlOX0NQVSk7CiAJCQlyID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJv LCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7CiAJCQlpZiAocikKIAkJCQlyZXR1cm4gcjsKLQkJCWFt ZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sCi0JCQkJCQkgICAgIGxvYmot PnVzZXJfcGFnZXMpOwotCQkJYmluZGluZ191c2VycHRyID0gdHJ1ZTsKIAkJfQogCiAJCWlmIChw LT5ldmljdGFibGUgPT0gbG9iaikKQEAgLTU1OCwxMSArNTUyLDYgQEAgc3RhdGljIGludCBhbWRn cHVfY3NfbGlzdF92YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAkJciA9IGFt ZGdwdV9jc192YWxpZGF0ZShwLCBibyk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7Ci0KLQkJaWYg KGJpbmRpbmdfdXNlcnB0cikgewotCQkJa3ZmcmVlKGxvYmotPnVzZXJfcGFnZXMpOwotCQkJbG9i ai0+dXNlcl9wYWdlcyA9IE5VTEw7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01NzcsNyAr NTY2LDcgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2Nz X3BhcnNlciAqcCwKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpnZHM7CiAJc3RydWN0IGFtZGdwdV9ibyAq Z3dzOwogCXN0cnVjdCBhbWRncHVfYm8gKm9hOwotCXVuc2lnbmVkIHRyaWVzID0gMTA7CisJc3Ry dWN0IGxpc3RfaGVhZCB1c2VycGFnZV9saXN0OwogCWludCByOwogCiAJSU5JVF9MSVNUX0hFQUQo JnAtPnZhbGlkYXRlZCk7CkBAIC01ODYsNyArNTc1LDYgQEAgc3RhdGljIGludCBhbWRncHVfY3Nf cGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlpZiAoY3MtPmluLmJvX2xp c3RfaGFuZGxlKSB7CiAJCWlmIChwLT5ib19saXN0KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJ ciA9IGFtZGdwdV9ib19saXN0X2dldChmcHJpdiwgY3MtPmluLmJvX2xpc3RfaGFuZGxlLAogCQkJ CSAgICAgICAmcC0+Ym9fbGlzdCk7CiAJCWlmIChyKQpAQCAtNjEzLDc5ICs2MDEsNzIgQEAgc3Rh dGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwK IAlpZiAocC0+dWZfZW50cnkudHYuYm8gJiYgIXR0bV90b19hbWRncHVfYm8ocC0+dWZfZW50cnku dHYuYm8pLT5wYXJlbnQpCiAJCWxpc3RfYWRkKCZwLT51Zl9lbnRyeS50di5oZWFkLCAmcC0+dmFs aWRhdGVkKTsKIAotCXdoaWxlICgxKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgbmVlZF9wYWdlczsK KwlyID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0 cnVlLAorCQkJCSAgICZkdXBsaWNhdGVzKTsKKwlpZiAodW5saWtlbHkociAhPSAwKSkgeworCQlp ZiAociAhPSAtRVJFU1RBUlRTWVMpCisJCQlEUk1fRVJST1IoInR0bV9ldV9yZXNlcnZlX2J1ZmZl cnMgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KIAotCQlyID0gdHRtX2V1X3Jlc2VydmVf YnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0cnVlLAotCQkJCQkgICAmZHVwbGlj YXRlcyk7Ci0JCWlmICh1bmxpa2VseShyICE9IDApKSB7Ci0JCQlpZiAociAhPSAtRVJFU1RBUlRT WVMpCi0JCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOwot CQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwotCQl9CisJSU5JVF9MSVNUX0hFQUQoJnVzZXJwYWdl X2xpc3QpOworCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9f bGlzdCkgeworCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYu Ym8pOwogCi0JCUlOSVRfTElTVF9IRUFEKCZuZWVkX3BhZ2VzKTsKLQkJYW1kZ3B1X2JvX2xpc3Rf Zm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19saXN0KSB7Ci0JCQlzdHJ1Y3QgYW1kZ3B1 X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOworCQlsaXN0X2RlbCgmZS0+dHYu aGVhZCk7CisJCWxpc3RfYWRkKCZlLT50di5oZWFkLCAmdXNlcnBhZ2VfbGlzdCk7CisJCWFtZGdw dV9ib191bnJlc2VydmUoYm8pOworCX0KIAotCQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9p bnZhbGlkYXRlZChiby0+dGJvLnR0bSwKLQkJCQkgJmUtPnVzZXJfaW52YWxpZGF0ZWQpICYmIGUt PnVzZXJfcGFnZXMpIHsKKwkvKiBHZXQgdXNlcnB0ciBiYWNraW5nIHBhZ2VzLiBJZiBwYWdlcyBh cmUgdXBkYXRlZCBhZnRlciByZWdpc3RlcmVkCisJICogaW4gYW1kZ3B1X2dlbV91c2VycHRyX2lv Y3RsKCksIGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKCkgd2lsbCBkbworCSAqIGFtZGdwdV90dG1f YmFja2VuZF9iaW5kKCkgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgbmV3IHBhZ2VzCisJICovCisJ aWYgKCFsaXN0X2VtcHR5KCZ1c2VycGFnZV9saXN0KSkgeworCQkvKiBVbnJlc2VydmUgZXZlcnl0 aGluZyBhZ2FpbiwgdG8gYXZvaWQgY2lyY3VsYXIgbG9ja2luZyBjYXNlCisJCSAqIGJvOjpyZXNl cnZlIC0+IG1tYXAtPnNlbQorCQkgKi8KKwkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAt PnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7CiAKLQkJCQkvKiBXZSBhY3F1aXJlZCBhIHBhZ2UgYXJy YXksIGJ1dCBzb21lYm9keQotCQkJCSAqIGludmFsaWRhdGVkIGl0LiBGcmVlIGl0IGFuZCB0cnkg YWdhaW4KLQkJCQkgKi8KLQkJCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsCi0JCQkJCSAg ICAgIGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOwotCQkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsK LQkJCQllLT51c2VyX3BhZ2VzID0gTlVMTDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmdXNl cnBhZ2VfbGlzdCwgdHYuaGVhZCkgeworCQkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9f YW1kZ3B1X2JvKGUtPnR2LmJvKTsKKwkJCWJvb2wgdXNlcnBhZ2VfaW52YWxpZGF0ZWQgPSBmYWxz ZTsKKwkJCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJCQlpbnQgaTsKKworCQkJcGFnZXMgPSBrdm1h bGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLAorCQkJCQkJc2l6ZW9mKCpwYWdlcyks CisJCQkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCQlpZiAoIXBhZ2VzKSB7CisJCQkJ RFJNX0VSUk9SKCJjYWxsb2MgZmFpbHVyZVxuIik7CisJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9 CiAKLQkJCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50dG0p ICYmCi0JCQkgICAgIWUtPnVzZXJfcGFnZXMpIHsKLQkJCQlsaXN0X2RlbCgmZS0+dHYuaGVhZCk7 Ci0JCQkJbGlzdF9hZGQoJmUtPnR2LmhlYWQsICZuZWVkX3BhZ2VzKTsKLQotCQkJCWFtZGdwdV9i b191bnJlc2VydmUoYm8pOworCQkJciA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8t PnRiby50dG0sIHBhZ2VzKTsKKwkJCWlmIChyKSB7CisJCQkJa3ZmcmVlKHBhZ2VzKTsKKwkJCQly ZXR1cm4gcjsKIAkJCX0KLQkJfQogCi0JCWlmIChsaXN0X2VtcHR5KCZuZWVkX3BhZ2VzKSkKLQkJ CWJyZWFrOwotCi0JCS8qIFVucmVzZXJ2ZSBldmVyeXRoaW5nIGFnYWluLiAqLwotCQl0dG1fZXVf YmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkKTsKLQotCQkvKiBX ZSB0cmllZCB0b28gbWFueSB0aW1lcywganVzdCBhYm9ydCAqLwotCQlpZiAoIS0tdHJpZXMpIHsK LQkJCXIgPSAtRURFQURMSzsKLQkJCURSTV9FUlJPUigiZGVhZGxvY2sgaW4gJXNcbiIsIF9fZnVu Y19fKTsKLQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBiby0+ dGJvLnR0bS0+bnVtX3BhZ2VzOyBpKyspIHsKKwkJCQlpZiAoYm8tPnRiby50dG0tPnBhZ2VzW2ld ICE9IHBhZ2VzW2ldKSB7CisJCQkJCWJvLT50Ym8udHRtLT5wYWdlc1tpXSA9IHBhZ2VzW2ldOwor CQkJCQl1c2VycGFnZV9pbnZhbGlkYXRlZCA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZS0+dXNl cl9pbnZhbGlkYXRlZCA9IHVzZXJwYWdlX2ludmFsaWRhdGVkOworCQkJa3ZmcmVlKHBhZ2VzKTsK IAkJfQogCi0JCS8qIEZpbGwgdGhlIHBhZ2UgYXJyYXlzIGZvciBhbGwgdXNlcnB0cnMuICovCi0J CWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm5lZWRfcGFnZXMsIHR2LmhlYWQpIHsKLQkJCXN0cnVj dCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07Ci0KLQkJCWUtPnVzZXJfcGFnZXMgPSBrdm1h bGxvY19hcnJheSh0dG0tPm51bV9wYWdlcywKLQkJCQkJCQkgc2l6ZW9mKHN0cnVjdCBwYWdlKiks Ci0JCQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQkJCWlmICghZS0+dXNlcl9wYWdl cykgewotCQkJCXIgPSAtRU5PTUVNOwotCQkJCURSTV9FUlJPUigiY2FsbG9jIGZhaWx1cmUgaW4g JXNcbiIsIF9fZnVuY19fKTsKLQkJCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7Ci0JCQl9CisJCWxp c3Rfc3BsaWNlKCZ1c2VycGFnZV9saXN0LCAmcC0+dmFsaWRhdGVkKTsKIAotCQkJciA9IGFtZGdw dV90dG1fdHRfZ2V0X3VzZXJfcGFnZXModHRtLCBlLT51c2VyX3BhZ2VzKTsKLQkJCWlmIChyKSB7 Ci0JCQkJRFJNX0VSUk9SKCJhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIGZhaWxlZC5cbiIp OwotCQkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsKLQkJCQllLT51c2VyX3BhZ2VzID0gTlVMTDsK LQkJCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7Ci0JCQl9CisJCXIgPSB0dG1fZXVfcmVzZXJ2ZV9i dWZmZXJzKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQsIHRydWUsCisJCQkJCSAgICZkdXBsaWNh dGVzKTsKKwkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJCWlmIChyICE9IC1FUkVTVEFSVFNZ UykKKwkJCQlEUk1fRVJST1IoInR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMgZmFpbGVkLlxuIik7CisJ CQlnb3RvIG91dDsKIAkJfQotCi0JCS8qIEFuZCB0cnkgYWdhaW4uICovCi0JCWxpc3Rfc3BsaWNl KCZuZWVkX3BhZ2VzLCAmcC0+dmFsaWRhdGVkKTsKIAl9CiAKIAlhbWRncHVfY3NfZ2V0X3RocmVz aG9sZF9mb3JfbW92ZXMocC0+YWRldiwgJnAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCwKQEAgLTc1 NCwxNyArNzM1LDcgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1k Z3B1X2NzX3BhcnNlciAqcCwKIGVycm9yX3ZhbGlkYXRlOgogCWlmIChyKQogCQl0dG1fZXVfYmFj a29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkKTsKLQotZXJyb3JfZnJl ZV9wYWdlczoKLQotCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+ Ym9fbGlzdCkgewotCQlpZiAoIWUtPnVzZXJfcGFnZXMpCi0JCQljb250aW51ZTsKLQotCQlyZWxl YXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2LmJvLT50dG0tPm51bV9wYWdlcyk7Ci0JCWt2 ZnJlZShlLT51c2VyX3BhZ2VzKTsKLQl9Ci0KK291dDoKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTIx Myw4ICsxMTg0LDcgQEAgc3RhdGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVf Y3NfcGFyc2VyICpwLAogCXN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSAqZTsKIAlzdHJ1Y3Qg YW1kZ3B1X2pvYiAqam9iOwogCXVpbnQ2NF90IHNlcTsKLQotCWludCByOworCWludCByID0gMDsK IAogCWpvYiA9IHAtPmpvYjsKIAlwLT5qb2IgPSBOVUxMOwpAQCAtMTIyMywxNSArMTE5MywyMSBA QCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAs CiAJaWYgKHIpCiAJCWdvdG8gZXJyb3JfdW5sb2NrOwogCi0JLyogTm8gbWVtb3J5IGFsbG9jYXRp b24gaXMgYWxsb3dlZCB3aGlsZSBob2xkaW5nIHRoZSBtbiBsb2NrICovCisJLyogTm8gbWVtb3J5 IGFsbG9jYXRpb24gaXMgYWxsb3dlZCB3aGlsZSBob2xkaW5nIHRoZSBtbiBsb2NrLgorCSAqIHAt Pm1uIGlzIGhvbGQgdW50aWwgYW1kZ3B1X2NzX3N1Ym1pdCBpcyBmaW5pc2hlZCBhbmQgZmVuY2Ug aXMgYWRkZWQKKwkgKiB0byBCT3MuCisJICovCiAJYW1kZ3B1X21uX2xvY2socC0+bW4pOworCisJ LyogSWYgdXNlcnB0ciBhcmUgdXBkYXRlZCBhZnRlciBhbWRncHVfY3NfcGFyc2VyX2JvcygpLCBy ZXN0YXJ0IGNzICovCiAJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBw LT5ib19saXN0KSB7CiAJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhl LT50di5ibyk7CiAKLQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhiby0+ dGJvLnR0bSkpIHsKLQkJCXIgPSAtRVJFU1RBUlRTWVM7Ci0JCQlnb3RvIGVycm9yX2Fib3J0Owot CQl9CisJCXIgfD0gIWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0 bSk7CisJfQorCWlmIChyKSB7CisJCXIgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXJyb3JfYWJv cnQ7CiAJfQogCiAJam9iLT5vd25lciA9IHAtPmZpbHA7CkBAIC0xMjc4LDE0ICsxMjU0LDIwIEBA IHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwK IGludCBhbWRncHVfY3NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwg c3RydWN0IGRybV9maWxlICpmaWxwKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bmlvbiBkcm1fYW1kZ3B1X2NzICpjcyA9IGRhdGE7Ci0Jc3Ry dWN0IGFtZGdwdV9jc19wYXJzZXIgcGFyc2VyID0ge307Ci0JYm9vbCByZXNlcnZlZF9idWZmZXJz ID0gZmFsc2U7CisJdW5pb24gZHJtX2FtZGdwdV9jcyAqY3M7CisJc3RydWN0IGFtZGdwdV9jc19w YXJzZXIgcGFyc2VyOworCWJvb2wgcmVzZXJ2ZWRfYnVmZmVyczsKKwlpbnQgdHJpZXMgPSAxMDsK IAlpbnQgaSwgcjsKIAogCWlmICghYWRldi0+YWNjZWxfd29ya2luZykKIAkJcmV0dXJuIC1FQlVT WTsKIAorcmVzdGFydDoKKwltZW1zZXQoJnBhcnNlciwgMCwgc2l6ZW9mKHBhcnNlcikpOworCWNz ID0gZGF0YTsKKwlyZXNlcnZlZF9idWZmZXJzID0gZmFsc2U7CisKIAlwYXJzZXIuYWRldiA9IGFk ZXY7CiAJcGFyc2VyLmZpbHAgPSBmaWxwOwogCkBAIC0xMzI3LDYgKzEzMDksMTUgQEAgaW50IGFt ZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbHApCiAKIG91dDoKIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwg ciwgcmVzZXJ2ZWRfYnVmZmVycyk7CisKKwlpZiAociA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJaWYg KCEtLXRyaWVzKSB7CisJCQlEUk1fRVJST1IoIlBvc3NpYmxlIGRlYWRsb2NrPyBSZXRyeSB0b28g bWFueSB0aW1lc1xuIik7CisJCQlyZXR1cm4gLUVERUFETEs7CisJCX0KKwkJZ290byByZXN0YXJ0 OworCX0KKwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf Z2VtLmMKaW5kZXggZjRmMDAyMTc1NDZlLi45MjAyNTk5M2JmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTMzNiwyNiArMzM2LDI0IEBAIGludCBhbWRncHVf Z2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAog CQlyID0gYW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOwogCQlpZiAocikKLQkJCWdvdG8gZnJl ZV9wYWdlczsKKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJCWFtZGdwdV9ib19wbGFjZW1l bnRfZnJvbV9kb21haW4oYm8sIEFNREdQVV9HRU1fRE9NQUlOX0dUVCk7CiAJCXIgPSB0dG1fYm9f dmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKIAkJYW1kZ3B1X2JvX3Vu cmVzZXJ2ZShibyk7CiAJCWlmIChyKQotCQkJZ290byBmcmVlX3BhZ2VzOworCQkJZ290byB1c2Vy X3BhZ2VzX2RvbmU7CiAJfQogCiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxwLCBnb2Jq LCAmaGFuZGxlKTsKLQkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhv bGRzIGl0IG5vdyAqLwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKIAlpZiAo cikKLQkJcmV0dXJuIHI7CisJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJYXJncy0+aGFuZGxl ID0gaGFuZGxlOwotCXJldHVybiAwOwogCi1mcmVlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMoYm8t PnRiby50dG0tPnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKK3VzZXJfcGFnZXNfZG9u ZToKKwlpZiAoYXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfVkFMSURBVEUpCisJCWFt ZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CiAKIHJlbGVhc2Vf b2JqZWN0OgogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X21uLmMKaW5kZXggNWQ1MThkMmJiOWJlLi41YzI0ZmIyNzA0ODAg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCkBAIC0yMjksOCArMjI5LDYg QEAgc3RhdGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21u X25vZGUgKm5vZGUsCiAJCQl0cnVlLCBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCQlp ZiAociA8PSAwKQogCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBi b1xuIiwgcik7Ci0KLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50dG0p OwogCX0KIH0KIApAQCAtMzU2LDcgKzM1NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaG1tX21pcnJvcl9v cHMgYW1kZ3B1X2htbV9taXJyb3Jfb3BzW10gPSB7CiAgKiBAYWRldjogYW1kZ3B1IGRldmljZSBw b2ludGVyCiAgKiBAdHlwZTogdHlwZSBvZiBNTVUgbm90aWZpZXIgY29udGV4dAogICoKLSAqIENy ZWF0ZXMgYSBITU0gbWlycm9yIGNvbnRleHQgZm9yIGN1cnJlbnQtPm1tLgorICogQ3JlYXRlcyBh IEhNTSBtaXJyb3IgY29udGV4dCBmb3IgbW0uCiAgKi8KIHN0cnVjdCBhbWRncHVfbW4gKmFtZGdw dV9tbl9nZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJZW51bSBhbWRncHVfbW5f dHlwZSB0eXBlKQpAQCAtNTEzLDMgKzUxMSwyNiBAQCB2b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVy KHN0cnVjdCBhbWRncHVfYm8gKmJvKQogCW11dGV4X3VubG9jaygmYWRldi0+bW5fbG9jayk7CiB9 CiAKKy8qIGZsYWdzIHVzZWQgYnkgSE1NIGludGVybmFsLCBub3QgcmVsYXRlZCB0byBDUFUvR1BV IFBURSBmbGFncyAqLworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV9mbGFnc1tITU1f UEZOX0ZMQUdfTUFYXSA9IHsKKwkJKDEgPDwgMCksIC8qIEhNTV9QRk5fVkFMSUQgKi8KKwkJKDEg PDwgMSksIC8qIEhNTV9QRk5fV1JJVEUgKi8KKwkJMCAvKiBITU1fUEZOX0RFVklDRV9QUklWQVRF ICovCit9OworCitzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3JhbmdlX3ZhbHVlc1tITU1fUEZO X1ZBTFVFX01BWF0gPSB7CisJCTB4ZmZmZmZmZmZmZmZmZmZmZVVMLCAvKiBITU1fUEZOX0VSUk9S ICovCisJCTAsIC8qIEhNTV9QRk5fTk9ORSAqLworCQkweGZmZmZmZmZmZmZmZmZmZmNVTCAvKiBI TU1fUEZOX1NQRUNJQUwgKi8KK307CisKK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0cnVj dCBobW1fcmFuZ2UgKnJhbmdlKQoreworCWlmIChyYW5nZSkgeworCQlyYW5nZS0+ZmxhZ3MgPSBo bW1fcmFuZ2VfZmxhZ3M7CisJCXJhbmdlLT52YWx1ZXMgPSBobW1fcmFuZ2VfdmFsdWVzOworCQly YW5nZS0+cGZuX3NoaWZ0ID0gUEFHRV9TSElGVDsKKwkJcmFuZ2UtPnBmbnMgPSBOVUxMOworCQlJ TklUX0xJU1RfSEVBRCgmcmFuZ2UtPmxpc3QpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X21uLmgKaW5kZXggMGE1MWZkMDAwMjFjLi40ODAzZTIxNmUxNzQgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oCkBAIC0yNSw5ICsyNSwxMCBAQAogI2RlZmlu ZSBfX0FNREdQVV9NTl9IX18KIAogLyoKLSAqIE1NVSBOb3RpZmllcgorICogSE1NIG1pcnJvcgog ICovCiBzdHJ1Y3QgYW1kZ3B1X21uOworc3RydWN0IGhtbV9yYW5nZTsKIAogZW51bSBhbWRncHVf bW5fdHlwZSB7CiAJQU1ER1BVX01OX1RZUEVfR0ZYLApAQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3Qg YW1kZ3B1X21uICphbWRncHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkJ CWVudW0gYW1kZ3B1X21uX3R5cGUgdHlwZSk7CiBpbnQgYW1kZ3B1X21uX3JlZ2lzdGVyKHN0cnVj dCBhbWRncHVfYm8gKmJvLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCBhbWRncHVfbW5fdW5y ZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibyk7Cit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5n ZShzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFt ZGdwdV9tbl9sb2NrKHN0cnVjdCBhbWRncHVfbW4gKm1uKSB7fQogc3RhdGljIGlubGluZSB2b2lk IGFtZGdwdV9tbl91bmxvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKaW5kZXggYzkxZWMzMTAxZDAwLi42MGU3ZmY0YTkwNmQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKQEAgLTQzLDYgKzQzLDcg QEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5o PgogI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvaG1tLmg+CiAjaW5j bHVkZSAiYW1kZ3B1LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X29iamVjdC5oIgogI2luY2x1ZGUgImFt ZGdwdV90cmFjZS5oIgpAQCAtNzA1LDExICs3MDYsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBh bWRncHVfdHRtX2lvX21lbV9wZm4oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIC8qCiAg KiBUVE0gYmFja2VuZCBmdW5jdGlvbnMuCiAgKi8KLXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNr X2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRh c2s7Ci19OwotCiBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7CiAJc3RydWN0IHR0bV9kbWFfdHQJdHRt OwogCXU2NAkJCW9mZnNldDsKQEAgLTcxOCwxMDcgKzcxNCw5NyBAQCBzdHJ1Y3QgYW1kZ3B1X3R0 bV90dCB7CiAJdWludDMyX3QJCXVzZXJmbGFnczsKIAlzcGlubG9ja190ICAgICAgICAgICAgICBn dXB0YXNrbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsKLQlhdG9taWNf 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 dGFzazsKLQotCQlndXB0YXNrLnRhc2sgPSBjdXJyZW50OwotCQlzcGluX2xvY2soJmd0dC0+Z3Vw dGFza2xvY2spOwotCQlsaXN0X2FkZCgmZ3VwdGFzay5saXN0LCAmZ3R0LT5ndXB0YXNrcyk7Ci0J CXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKLQotCQlpZiAobW0gPT0gY3VycmVudC0+ bW0pCi0JCQlyID0gZ2V0X3VzZXJfcGFnZXModXNlcnB0ciwgbnVtX3BhZ2VzLCBmbGFncywgcCwg TlVMTCk7Ci0JCWVsc2UKLQkJCXIgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUoZ3R0LT51c2VydGFz aywKLQkJCQkJbW0sIHVzZXJwdHIsIG51bV9wYWdlcywKLQkJCQkJZmxhZ3MsIHAsIE5VTEwsIE5V TEwpOworCXJhbmdlLT5wZm5zWzBdID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFMSURdOworCXJh bmdlLT5wZm5zWzBdIHw9IGFtZGdwdV90dG1fdHRfaXNfcmVhZG9ubHkodHRtKSA/CisJCQkJMCA6 IHJhbmdlLT5mbGFnc1tITU1fUEZOX1dSSVRFXTsKKwlmb3IgKGkgPSAxOyBpIDwgdHRtLT5udW1f cGFnZXM7IGkrKykKKwkJcmFuZ2UtPnBmbnNbaV0gPSByYW5nZS0+cGZuc1swXTsKIAotCQlzcGlu X2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCQlsaXN0X2RlbCgmZ3VwdGFzay5saXN0KTsKLQkJ c3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCi0JCWlmIChyIDwgMCkKLQkJCWdvdG8g cmVsZWFzZV9wYWdlczsKKwkvKiBUaGlzIG1heSB0cmlnZ2VyIHBhZ2UgdGFibGUgdXBkYXRlICov CisJciA9IGhtbV92bWFfZmF1bHQocmFuZ2UsIHRydWUpOworCWlmIChyKQorCQlnb3RvIG91dF9m cmVlX3BmbnM7CiAKLQkJcGlubmVkICs9IHI7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAot CX0gd2hpbGUgKHBpbm5lZCA8IHR0bS0+bnVtX3BhZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHRt LT5udW1fcGFnZXM7IGkrKykKKwkJcGFnZXNbaV0gPSBobW1fcGZuX3RvX3BhZ2UocmFuZ2UsIHJh bmdlLT5wZm5zW2ldKTsKIAotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIDA7CiAK LXJlbGVhc2VfcGFnZXM6Ci0JcmVsZWFzZV9wYWdlcyhwYWdlcywgcGlubmVkKTsKK291dF9mcmVl X3BmbnM6CisJa3ZmcmVlKHJhbmdlLT5wZm5zKTsKKwlyYW5nZS0+cGZucyA9IE5VTEw7CitvdXQ6 CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gcjsKIH0KIAogLyoqCi0gKiBhbWRn cHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzIC0gQ29weSBwYWdlcyBpbiwgcHV0dGluZyBvbGQgcGFn ZXMgYXMgbmVjZXNzYXJ5LgorICogYW1kZ3B1X3R0bV90dF91c2VycHRyX3JhbmdlX2RvbmUgLSBz dG9wIEhNTSB0cmFjayB0aGUgQ1BVIHBhZ2UgdGFibGUgY2hhbmdlCisgKiBDaGVjayBpZiB0aGUg cGFnZXMgYmFja2luZyB0aGlzIHR0bSByYW5nZSBoYXZlIGJlZW4gaW52YWxpZGF0ZWQKICAqCi0g KiBDYWxsZWQgYnkgYW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoKS4gVGhpcyBjcmVhdGVzIHRoZSBw YWdlIGxpc3QKLSAqIHRoYXQgYmFja3MgdXNlciBtZW1vcnkgYW5kIHdpbGwgdWx0aW1hdGVseSBi ZSBtYXBwZWQgaW50byB0aGUgZGV2aWNlCi0gKiBhZGRyZXNzIHNwYWNlLgorICogUmV0dXJuczog dHJ1ZSBpZiBwYWdlcyBhcmUgc3RpbGwgdmFsaWQKICAqLwotdm9pZCBhbWRncHVfdHRtX3R0X3Nl dF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykKK2Jv b2wgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSkK IHsKIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07Ci0JdW5zaWduZWQg aTsKKwlib29sIHI7CiAKLQlndHQtPmxhc3Rfc2V0X3BhZ2VzID0gYXRvbWljX3JlYWQoJmd0dC0+ bW11X2ludmFsaWRhdGlvbnMpOwotCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgKytp KSB7Ci0JCWlmICh0dG0tPnBhZ2VzW2ldKQotCQkJcHV0X3BhZ2UodHRtLT5wYWdlc1tpXSk7CisJ aWYgKCFndHQgfHwgIWd0dC0+dXNlcnB0cikKKwkJcmV0dXJuIGZhbHNlOworCisJciA9IGhtbV92 bWFfcmFuZ2VfZG9uZSgmZ3R0LT5yYW5nZSk7CiAKLQkJdHRtLT5wYWdlc1tpXSA9IHBhZ2VzID8g cGFnZXNbaV0gOiBOVUxMOworCWlmIChndHQtPnJhbmdlLnBmbnMpIHsKKwkJa3ZmcmVlKGd0dC0+ cmFuZ2UucGZucyk7CisJCWd0dC0+cmFuZ2UucGZucyA9IE5VTEw7CiAJfQorCisJcmV0dXJuIHI7 CiB9CiAKIC8qKgpAQCAtOTAzLDkgKzg4OSw2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRf dW5waW5fdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiAJLyogdW5tYXAgdGhlIHBhZ2VzIG1h cHBlZCB0byB0aGUgZGV2aWNlICovCiAJZG1hX3VubWFwX3NnKGFkZXYtPmRldiwgdHRtLT5zZy0+ c2dsLCB0dG0tPnNnLT5uZW50cywgZGlyZWN0aW9uKTsKIAotCS8qIG1hcmsgdGhlIHBhZ2VzIGFz IGRpcnR5ICovCi0JYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXModHRtKTsKLQogCXNnX2Zy ZWVfdGFibGUodHRtLT5zZyk7CiB9CiAKQEAgLTEyMDcsNyArMTE5MCw3IEBAIHN0YXRpYyB2b2lk IGFtZGdwdV90dG1fdHRfdW5wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0pCiAJYm9vbCBzbGF2 ZSA9ICEhKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfU0cpOwogCiAJaWYgKGd0dCAm JiBndHQtPnVzZXJwdHIpIHsKLQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyh0dG0sIE5V TEwpOworCQltZW1zZXQodHRtLT5wYWdlcywgMCwgdHRtLT5udW1fcGFnZXMgKiBzaXplb2Yoc3Ry dWN0IHBhZ2UgKikpOwogCQlrZnJlZSh0dG0tPnNnKTsKIAkJdHRtLT5wYWdlX2ZsYWdzICY9IH5U VE1fUEFHRV9GTEFHX1NHOwogCQlyZXR1cm47CkBAIC0xMjU4LDggKzEyNDEsNiBAQCBpbnQgYW1k Z3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVpbnQ2NF90IGFkZHIs CiAKIAlzcGluX2xvY2tfaW5pdCgmZ3R0LT5ndXB0YXNrbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQo Jmd0dC0+Z3VwdGFza3MpOwotCWF0b21pY19zZXQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMsIDAp OwotCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjg5LDcg KzEyNzAsNiBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90 dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpCiB7 CiAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwotCXN0cnVjdCBhbWRn cHVfdHRtX2d1cF90YXNrX2xpc3QgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAogCWlm IChndHQgPT0gTlVMTCB8fCAhZ3R0LT51c2VycHRyKQpAQCAtMTMwMiw0OCArMTI4MiwyMCBAQCBi b29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNp Z25lZCBsb25nIHN0YXJ0LAogCWlmIChndHQtPnVzZXJwdHIgPiBlbmQgfHwgZ3R0LT51c2VycHRy ICsgc2l6ZSA8PSBzdGFydCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogU2VhcmNoIHRoZSBsaXN0 cyBvZiB0YXNrcyB0aGF0IGhvbGQgdGhpcyBtYXBwaW5nIGFuZCBzZWUKLQkgKiBpZiBjdXJyZW50 IGlzIG9uZSBvZiB0aGVtLiAgSWYgaXQgaXMgcmV0dXJuIGZhbHNlLgotCSAqLwotCXNwaW5fbG9j aygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmd0dC0+ Z3VwdGFza3MsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT50YXNrID09IGN1cnJlbnQpIHsKLQkJCXNw aW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0K LQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0KLQlhdG9taWNfaW5jKCZndHQtPm1t dV9pbnZhbGlkYXRpb25zKTsKLQogCXJldHVybiB0cnVlOwogfQogCiAvKioKLSAqIGFtZGdwdV90 dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZCAtIEhhcyB0aGUgdHRtX3R0IG9iamVjdCBiZWVuIGlu dmFsaWRhdGVkPworICogYW1kZ3B1X3R0bV90dF9pc191c2VycHRyIC0gSGF2ZSB0aGUgcGFnZXMg YmFja2luZyBieSB1c2VycHRyPwogICovCi1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZh bGlkYXRlZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCi0JCQkJICAgICAgIGludCAqbGFzdF9pbnZhbGlk YXRlZCkKLXsKLQlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07Ci0JaW50 IHByZXZfaW52YWxpZGF0ZWQgPSAqbGFzdF9pbnZhbGlkYXRlZDsKLQotCSpsYXN0X2ludmFsaWRh dGVkID0gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpOwotCXJldHVybiBwcmV2 X2ludmFsaWRhdGVkICE9ICpsYXN0X2ludmFsaWRhdGVkOwotfQotCi0vKioKLSAqIGFtZGdwdV90 dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyAtIEhhdmUgdGhlIHBhZ2VzIGJhY2tpbmcgdGhpcyB0 dG1fdHQgb2JqZWN0Ci0gKiBiZWVuIGludmFsaWRhdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhl eSd2ZSBiZWVuIHNldD8KLSAqLwotYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFn ZXMoc3RydWN0IHR0bV90dCAqdHRtKQorYm9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3Ry dWN0IHR0bV90dCAqdHRtKQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAq KXR0bTsKIAogCWlmIChndHQgPT0gTlVMTCB8fCAhZ3R0LT51c2VycHRyKQogCQlyZXR1cm4gZmFs c2U7CiAKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpICE9IGd0 dC0+bGFzdF9zZXRfcGFnZXM7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCmluZGV4IGI1YjJkMTAxZjdkYi4uYzVhMWU3OGEwOWIx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCkBAIC0xMDIsNyArMTAy LDcgQEAgaW50IGFtZGdwdV90dG1fYWxsb2NfZ2FydChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KmJvKTsKIGludCBhbWRncHVfdHRtX3JlY292ZXJfZ2FydChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKnRibyk7CiAKIGludCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1f dHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7Ci12b2lkIGFtZGdwdV90dG1fdHRfc2V0X3Vz ZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKK2Jvb2wg YW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSk7CiB2 b2lkIGFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSk7CiBp bnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVpbnQ2NF90 IGFkZHIsCiAJCQkJICAgICB1aW50MzJfdCBmbGFncyk7CkBAIC0xMTIsNyArMTEyLDcgQEAgYm9v bCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWdu ZWQgbG9uZyBzdGFydCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGJvb2wgYW1kZ3B1X3R0 bV90dF91c2VycHRyX2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwKIAkJCQkgICAgICAg aW50ICpsYXN0X2ludmFsaWRhdGVkKTsKLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRz X3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSk7Citib29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0 cihzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogYm9vbCBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHN0 cnVjdCB0dG1fdHQgKnR0bSk7CiB1aW50NjRfdCBhbWRncHVfdHRtX3R0X3BkZV9mbGFncyhzdHJ1 Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKTsKIHVpbnQ2NF90IGFtZGdw dV90dG1fdHRfcHRlX2ZsYWdzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgdHRt X3R0ICp0dG0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCmluZGV4IGU3M2Qx NTI2NTlhMi4uMWY4YWIxYTRmYWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dm0uYwpAQCAtNjE5LDcgKzYxOSw2IEBAIHZvaWQgYW1kZ3B1X3ZtX2dldF9wZF9ibyhzdHJ1Y3Qg YW1kZ3B1X3ZtICp2bSwKIAllbnRyeS0+dHYuYm8gPSAmdm0tPnJvb3QuYmFzZS5iby0+dGJvOwog CS8qIE9uZSBmb3IgdGhlIFZNIHVwZGF0ZXMsIG9uZSBmb3IgVFRNIGFuZCBvbmUgZm9yIHRoZSBD UyBqb2IgKi8KIAllbnRyeS0+dHYubnVtX3NoYXJlZCA9IDM7Ci0JZW50cnktPnVzZXJfcGFnZXMg PSBOVUxMOwogCWxpc3RfYWRkKCZlbnRyeS0+dHYuaGVhZCwgdmFsaWRhdGVkKTsKIH0KIAotLSAK Mi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwph bWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK