From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: [PATCH 2/2] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v2 Date: Mon, 3 Dec 2018 20:19:08 +0000 Message-ID: <20181203201840.25059-2-Philip.Yang@amd.com> References: <20181203201840.25059-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: <20181203201840.25059-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 ZXRyeS4KClRvIGF2b2lkIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSwgbm8gbmVzdGVkIGxvY2tp bmcgYmV0d2VlbiBtbWFwX3NlbQphbmQgYm86OnJlc2VydmUuIFRoZSBsb2NraW5nIG9yZGVyIGlz Ogpibzo6cmVzZXJ2ZSAtPiBhbWRncHVfbW5fbG9jayhwLT5tbikKCkhNTSBzaW1wbGlmeSB0aGUg Q1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUgY2hlY2ssIHNvIHJlbW92ZQpndXB0YXNr bG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0X3BhZ2VzIGZpZWxkcyBmcm9tCmFtZGdw dV90dG1fdHQgc3RydWN0LgoKSE1NIGRvZXMgbm90IHBpbiB0aGUgcGFnZSAoaW5jcmVhc2UgcGFn ZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZApvcGVyYXRpb25zIGxpa2UgcmVsZWFzZV9w YWdlcygpLCBwdXRfcGFnZSgpLCBtYXJrX3BhZ2VfZGlydHkoKS4KCnYyOgoqIFJlbW92ZSBuZXN0 ZWQgbG9ja2luZyBiZXR3ZWVuIG1tYXBfc2VtIGFuZCBibzo6cmVzZXJ2ZQoqIENoYW5nZSBsb2Nr aW5nIG9yZGVyIHRvIGJvOjpyZXNlcnZlIC0+IGFtZGdwdV9tbl9sb2NrKCkKKiBVc2UgZHluYW1p YyBhbGxvY2F0aW9uIHRvIHJlcGxhY2UgVkxBIGluIGtlcm5lbCBzdGFjawoKQ2hhbmdlLUlkOiBJ ZmZkNWY4NTVjYzljZTQwMmNkZmNhMTY3ZjY4ZjgzZmUzOWFjNTZmOQpTaWduZWQtb2ZmLWJ5OiBQ aGlsaXAgWWFuZyA8UGhpbGlwLllhbmdAYW1kLmNvbT4KLS0tCiAuLi4vZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyAgfCAxMDEgKysrKysrKystLQogZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyAgIHwgICAyIC0KIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgICAgICAgIHwgMTg4ICsrKysrKysrKy0tLS0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jICAgICAgIHwgIDE0ICstCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyAgICAgICAgfCAgMzQgKysrLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmggICAgICAgIHwgICA3ICstCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgICAgICAgfCAxNjQgKysrKysr LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmggICAgICAg fCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jICAgICAgICB8 ICAgMSAtCiAuLi4vZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMgfCAg NjcgKysrKy0tLQogMTEgZmlsZXMgY2hhbmdlZCwgMzEyIGluc2VydGlvbnMoKyksIDI3MiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkX2dwdXZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2Zk X2dwdXZtLmMKaW5kZXggZjMxMjliOTEyNzE0Li41Y2U2YmEyNGZjNzIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMKQEAgLTYxNCw4ICs2 MTQsNyBAQCBzdGF0aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBz dHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlhbWRncHVfYm9fdW5yZXNlcnZlKGJvKTsKIAogcmVsZWFz ZV9vdXQ6Ci0JaWYgKHJldCkKLQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50 Ym8udHRtLT5udW1fcGFnZXMpOworCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShi by0+dGJvLnR0bSk7CiBmcmVlX291dDoKIAlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsKIAltZW0t PnVzZXJfcGFnZXMgPSBOVUxMOwpAQCAtNjc3LDcgKzY3Niw2IEBAIHN0YXRpYyBpbnQgcmVzZXJ2 ZV9ib19hbmRfdm0oc3RydWN0IGtnZF9tZW0gKm1lbSwKIAljdHgtPmtmZF9iby5wcmlvcml0eSA9 IDA7CiAJY3R4LT5rZmRfYm8udHYuYm8gPSAmYm8tPnRibzsKIAljdHgtPmtmZF9iby50di5zaGFy ZWQgPSB0cnVlOwotCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOwogCWxpc3RfYWRkKCZj dHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsKIAogCWFtZGdwdV92bV9nZXRfcGRfYm8o dm0sICZjdHgtPmxpc3QsICZjdHgtPnZtX3BkWzBdKTsKQEAgLTc0MSw3ICs3MzksNiBAQCBzdGF0 aWMgaW50IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKHN0cnVjdCBrZ2RfbWVtICptZW0sCiAJY3R4 LT5rZmRfYm8ucHJpb3JpdHkgPSAwOwogCWN0eC0+a2ZkX2JvLnR2LmJvID0gJmJvLT50Ym87CiAJ Y3R4LT5rZmRfYm8udHYuc2hhcmVkID0gdHJ1ZTsKLQljdHgtPmtmZF9iby51c2VyX3BhZ2VzID0g TlVMTDsKIAlsaXN0X2FkZCgmY3R4LT5rZmRfYm8udHYuaGVhZCwgJmN0eC0+bGlzdCk7CiAKIAlp ID0gMDsKQEAgLTEzMzIsOSArMTMyOSw2IEBAIGludCBhbWRncHVfYW1ka2ZkX2dwdXZtX2ZyZWVf bWVtb3J5X29mX2dwdSgKIAkvKiBGcmVlIHVzZXIgcGFnZXMgaWYgbmVjZXNzYXJ5ICovCiAJaWYg KG1lbS0+dXNlcl9wYWdlcykgewogCQlwcl9kZWJ1ZygiJXM6IEZyZWVpbmcgdXNlcl9wYWdlcyBh cnJheVxuIiwgX19mdW5jX18pOwotCQlpZiAobWVtLT51c2VyX3BhZ2VzWzBdKQotCQkJcmVsZWFz ZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsCi0JCQkJCW1lbS0+Ym8tPnRiby50dG0tPm51bV9wYWdl cyk7CiAJCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwogCX0KIApAQCAtMTc2MSw4ICsxNzU1LDYg QEAgc3RhdGljIGludCB1cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJv Y2Vzc19pbmZvICpwcm9jZXNzX2luZm8sCiAJCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCQlyZXR1 cm4gLUVOT01FTTsKIAkJCX0KLQkJfSBlbHNlIGlmIChtZW0tPnVzZXJfcGFnZXNbMF0pIHsKLQkJ CXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsK IAkJfQogCiAJCS8qIEdldCB1cGRhdGVkIHVzZXIgcGFnZXMgKi8KQEAgLTE3NzgsMTIgKzE3NzAs NiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9w cm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKIAkJCSAqIHN0YWxsZWQgdXNlciBtb2RlIHF1ZXVl cy4KIAkJCSAqLwogCQl9Ci0KLQkJLyogTWFyayB0aGUgQk8gYXMgdmFsaWQgdW5sZXNzIGl0IHdh cyBpbnZhbGlkYXRlZAotCQkgKiBhZ2FpbiBjb25jdXJyZW50bHkKLQkJICovCi0JCWlmIChhdG9t aWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlkLCAwKSAhPSBpbnZhbGlkKQotCQkJcmV0 dXJuIC1FQUdBSU47CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODc2LDE0ICsxODYyLDEwIEBAIHN0 YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vz c19pbmZvICpwcm9jZXNzX2luZm8pCiAJCX0KIAogCQkvKiBWYWxpZGF0ZSBzdWNjZWVkZWQsIG5v dyB0aGUgQk8gb3ducyB0aGUgcGFnZXMsIGZyZWUKLQkJICogb3VyIGNvcHkgb2YgdGhlIHBvaW50 ZXIgYXJyYXkuIFB1dCB0aGlzIEJPIGJhY2sgb24KLQkJICogdGhlIHVzZXJwdHJfdmFsaWRfbGlz dC4gSWYgd2UgbmVlZCB0byByZXZhbGlkYXRlCi0JCSAqIGl0LCB3ZSBuZWVkIHRvIHN0YXJ0IGZy b20gc2NyYXRjaC4KKwkJICogb3VyIGNvcHkgb2YgdGhlIHBvaW50ZXIgYXJyYXkuCiAJCSAqLwog CQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsKIAkJbWVtLT51c2VyX3BhZ2VzID0gTlVMTDsKLQkJ bGlzdF9tb3ZlX3RhaWwoJm1lbS0+dmFsaWRhdGVfbGlzdC5oZWFkLAotCQkJICAgICAgICZwcm9j ZXNzX2luZm8tPnVzZXJwdHJfdmFsaWRfbGlzdCk7CiAKIAkJLyogVXBkYXRlIG1hcHBpbmcuIElm IHRoZSBCTyB3YXMgbm90IHZhbGlkYXRlZAogCQkgKiAoYmVjYXVzZSB3ZSBjb3VsZG4ndCBnZXQg dXNlciBwYWdlcyksIHRoaXMgd2lsbApAQCAtMTkyNCw2ICsxOTA2LDcwIEBAIHN0YXRpYyBpbnQg dmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpw cm9jZXNzX2luZm8pCiAJcmV0dXJuIHJldDsKIH0KIAorLyogdXNlcl9wYWdlc19pbnZhbGlkYXRl ZCAtIGlmIENQVSBwYWdlIHRhYmxlIGlzIHVwZGF0ZWQgYWZ0ZXIgZ2V0dGluZyB1c2VyCisgKiBw YWdlcworICoKKyAqIEhNTSBtaXJyb3IgY2FsbGJhY2sgbG9jayBhbW4gaXMgaG9sZCB0byBwcmV2 ZW50IHRoZSBjb25jdXJyZW50IENQVQorICogcGFnZSB0YWJsZSB1cGRhdGUgd2hpbGUgcmVzdW1p bmcgdXNlciBxdWV1ZXMuCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiBDUFUgcGFnZSB0YWJsZSBp cyB1cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB1c2VyX3BhZ2VzX2lu dmFsaWRhdGVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJc3RydWN0IGFtZGtmZF9wcm9jZXNz X2luZm8gKnByb2Nlc3NfaW5mbywKKwkJCXN0cnVjdCBhbWRncHVfbW4gKiphbW4pCit7CisJc3Ry dWN0IGtnZF9tZW0gKm1lbSwgKnRtcF9tZW07CisJc3RydWN0IGFtZGdwdV9ibyAqYm87CisJc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXY7CisJaW50IGludmFsaWQsIHIgPSAwOworCisJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKG1lbSwgdG1wX21lbSwKKwkJCQkgJnByb2Nlc3NfaW5mby0+dXNl cnB0cl9pbnZhbF9saXN0LAorCQkJCSB2YWxpZGF0ZV9saXN0LmhlYWQpIHsKKworCQlpbnZhbGlk ID0gYXRvbWljX3JlYWQoJm1lbS0+aW52YWxpZCk7CisJCWlmICghaW52YWxpZCkKKwkJCS8qIEJP IGhhc24ndCBiZWVuIGludmFsaWRhdGVkIHNpbmNlIHRoZSBsYXN0CisJCQkgKiByZXZhbGlkYXRp b24gYXR0ZW1wdC4gS2VlcCBpdHMgQk8gbGlzdC4KKwkJCSAqLworCQkJY29udGludWU7CisKKwkJ Ym8gPSBtZW0tPmJvOworCisJCS8qIEdldCBITU0gbWlycm9yIGNhbGxiYWNrIGxvY2sgKi8KKwkJ aWYgKCEqYW1uKSB7CisJCQlhZGV2ID0gYW1kZ3B1X3R0bV9hZGV2KGJvLT50Ym8uYmRldik7CisJ CQkqYW1uID0gYW1kZ3B1X21uX2dldChtbSwgYWRldiwgQU1ER1BVX01OX1RZUEVfSFNBKTsKKwkJ CWlmIChJU19FUlIoKmFtbikpIHsKKwkJCQlyID0gdHJ1ZTsKKwkJCQkqYW1uID0gTlVMTDsKKwkJ CQlnb3RvIG91dDsKKwkJCX0KKworCQkJYW1kZ3B1X21uX2xvY2soKmFtbik7CisJCX0KKworCQly IHw9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CisKKwkJ LyogUHV0IHRoaXMgQk8gYmFjayBvbiB0aGUgdXNlcnB0cl92YWxpZF9saXN0LiBJZiB3ZSBuZWVk IHRvCisJCSAqIHJldmFsaWRhdGUgaXQsIHdlIG5lZWQgdG8gc3RhcnQgZnJvbSBzY3JhdGNoLgor CQkgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJm1lbS0+dmFsaWRhdGVfbGlzdC5oZWFkLAorCQkJICAg ICAgICZwcm9jZXNzX2luZm8tPnVzZXJwdHJfdmFsaWRfbGlzdCk7CisKKwkJLyogTWFyayB0aGUg Qk8gYXMgdmFsaWQgdW5sZXNzIGl0IHdhcyBpbnZhbGlkYXRlZAorCQkgKiBhZ2FpbiBjb25jdXJy ZW50bHkKKwkJICovCisJCWlmIChhdG9taWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlk LCAwKSAhPSBpbnZhbGlkKSB7CisJCQlyID0gdHJ1ZTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQor CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKIC8qIFdvcmtlciBjYWxsYmFjayB0byByZXN0b3JlIGV2 aWN0ZWQgdXNlcnB0ciBCT3MKICAqCiAgKiBUcmllcyB0byB1cGRhdGUgYW5kIHZhbGlkYXRlIGFs bCB1c2VycHRyIEJPcy4gSWYgc3VjY2Vzc2Z1bCBhbmQgbm8KQEAgLTE5MzksNiArMTk4NSw3IEBA IHN0YXRpYyB2b2lkIGFtZGdwdV9hbWRrZmRfcmVzdG9yZV91c2VycHRyX3dvcmtlcihzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHRhc2tfc3RydWN0ICp1c2VydGFzazsKIAlzdHJ1 Y3QgbW1fc3RydWN0ICptbTsKIAlpbnQgZXZpY3RlZF9ib3M7CisJc3RydWN0IGFtZGdwdV9tbiAq YW1uID0gTlVMTDsKIAogCWV2aWN0ZWRfYm9zID0gYXRvbWljX3JlYWQoJnByb2Nlc3NfaW5mby0+ ZXZpY3RlZF9ib3MpOwogCWlmICghZXZpY3RlZF9ib3MpCkBAIC0xOTc3LDEzICsyMDI0LDI3IEBA IHN0YXRpYyB2b2lkIGFtZGdwdV9hbWRrZmRfcmVzdG9yZV91c2VycHRyX3dvcmtlcihzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCiAJaWYgKGF0b21pY19jbXB4Y2hnKCZwcm9jZXNzX2luZm8tPmV2 aWN0ZWRfYm9zLCBldmljdGVkX2JvcywgMCkgIT0KIAkgICAgZXZpY3RlZF9ib3MpCiAJCWdvdG8g dW5sb2NrX291dDsKKworCS8qIElmIENQVSBwYWdlIHRhYmxlIGlzIHVwZGF0ZWQgYWdhaW4gYWZ0 ZXIgZ2V0dGluZyB1c2VyIHBhZ2VzLAorCSAqIHNjaGVkdWxlIHRvIHJlc3RhcnQgdGhlIHJlc3Rv cmUgcHJvY2VzcyBhZ2Fpbi4KKwkgKgorCSAqIGFtbiBpcyBhbHNvIGxvY2tlZCB0byBwcmV2ZW50 IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSB3aGlsZSByZXN1bWluZworCSAqIHVzZXIgcXVldWVzLiBh bW4gaXMgdW5sb2NrZWQgYWZ0ZXIgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQuCisJICovCisJaWYg KHVzZXJfcGFnZXNfaW52YWxpZGF0ZWQobW0sIHByb2Nlc3NfaW5mbywgJmFtbikpCisJCWdvdG8g dW5sb2NrX21uX291dDsKKwogCWV2aWN0ZWRfYm9zID0gMDsKKwogCWlmIChrZ2Qya2ZkLT5yZXN1 bWVfbW0obW0pKSB7CiAJCXByX2VycigiJXM6IEZhaWxlZCB0byByZXN1bWUgS0ZEXG4iLCBfX2Z1 bmNfXyk7CiAJCS8qIE5vIHJlY292ZXJ5IGZyb20gdGhpcyBmYWlsdXJlLiBQcm9iYWJseSB0aGUg Q1AgaXMKIAkJICogaGFuZ2luZy4gTm8gcG9pbnQgdHJ5aW5nIGFnYWluLgogCQkgKi8KIAl9CisK K3VubG9ja19tbl9vdXQ6CisJYW1kZ3B1X21uX3VubG9jayhhbW4pOwogdW5sb2NrX291dDoKIAlt dXRleF91bmxvY2soJnByb2Nlc3NfaW5mby0+bG9jayk7CiAJbW1wdXQobW0pOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMKaW5kZXggMTRkMjk4MmE0N2NjLi4y NzE2YzI0MWY1N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9ib19saXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xp c3QuYwpAQCAtMjAxLDggKzIwMSw2IEBAIHZvaWQgYW1kZ3B1X2JvX2xpc3RfZ2V0X2xpc3Qoc3Ry dWN0IGFtZGdwdV9ib19saXN0ICpsaXN0LAogCiAJCWlmICghYm8tPnBhcmVudCkKIAkJCWxpc3Rf YWRkX3RhaWwoJmUtPnR2LmhlYWQsICZidWNrZXRbcHJpb3JpdHldKTsKLQotCQllLT51c2VyX3Bh Z2VzID0gTlVMTDsKIAl9CiAKIAkvKiBDb25uZWN0IHRoZSBzb3J0ZWQgYnVja2V0cyBpbiB0aGUg b3V0cHV0IGxpc3QuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYm9fbGlzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xp c3QuaAppbmRleCA3YzVmNWQxNjAxZTYuLjRiZWFiMmRlMDliMyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCkBAIC0zNSw4ICszNSw3IEBAIHN0cnVjdCBh bWRncHVfYm9fbGlzdF9lbnRyeSB7CiAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIJdHY7CiAJ c3RydWN0IGFtZGdwdV9ib192YQkJKmJvX3ZhOwogCXVpbnQzMl90CQkJcHJpb3JpdHk7Ci0Jc3Ry dWN0IHBhZ2UJCQkqKnVzZXJfcGFnZXM7Ci0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7CisJYm9v bAkJCQl1c2VyX2ludmFsaWRhdGVkOwogfTsKIAogc3RydWN0IGFtZGdwdV9ib19saXN0IHsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKaW5kZXggMDI0ZGZiZDg3ZjExLi5jZWU3 ZDM5ODkxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9j cy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCkBAIC01MSw3 ICs1MSw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3VzZXJfZmVuY2VfY2h1bmsoc3RydWN0IGFt ZGdwdV9jc19wYXJzZXIgKnAsCiAJcC0+dWZfZW50cnkucHJpb3JpdHkgPSAwOwogCXAtPnVmX2Vu dHJ5LnR2LmJvID0gJmJvLT50Ym87CiAJcC0+dWZfZW50cnkudHYuc2hhcmVkID0gdHJ1ZTsKLQlw LT51Zl9lbnRyeS51c2VyX3BhZ2VzID0gTlVMTDsKIAogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxv Y2tlZChnb2JqKTsKIApAQCAtNTMxLDI0ICs1MzAsMTkgQEAgc3RhdGljIGludCBhbWRncHVfY3Nf bGlzdF92YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAogCWxpc3RfZm9yX2Vh Y2hfZW50cnkobG9iaiwgdmFsaWRhdGVkLCB0di5oZWFkKSB7CiAJCXN0cnVjdCBhbWRncHVfYm8g KmJvID0gdHRtX3RvX2FtZGdwdV9ibyhsb2JqLT50di5ibyk7Ci0JCWJvb2wgYmluZGluZ191c2Vy cHRyID0gZmFsc2U7CiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKnVzZXJtbTsKIAogCQl1c2VybW0gPSBh bWRncHVfdHRtX3R0X2dldF91c2VybW0oYm8tPnRiby50dG0pOwogCQlpZiAodXNlcm1tICYmIHVz ZXJtbSAhPSBjdXJyZW50LT5tbSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJLyogQ2hlY2sgaWYg d2UgaGF2ZSB1c2VyIHBhZ2VzIGFuZCBub2JvZHkgYm91bmQgdGhlIEJPIGFscmVhZHkgKi8KLQkJ aWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhiby0+dGJvLnR0bSkgJiYKLQkJ ICAgIGxvYmotPnVzZXJfcGFnZXMpIHsKKwkJaWYgKGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihi by0+dGJvLnR0bSkgJiYKKwkJICAgIGxvYmotPnVzZXJfaW52YWxpZGF0ZWQpIHsKIAkJCWFtZGdw dV9ib19wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sCiAJCQkJCQkJQU1ER1BVX0dFTV9ET01BSU5f Q1BVKTsKIAkJCXIgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAm Y3R4KTsKIAkJCWlmIChyKQogCQkJCXJldHVybiByOwotCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNl cl9wYWdlcyhiby0+dGJvLnR0bSwKLQkJCQkJCSAgICAgbG9iai0+dXNlcl9wYWdlcyk7Ci0JCQli aW5kaW5nX3VzZXJwdHIgPSB0cnVlOwogCQl9CiAKIAkJaWYgKHAtPmV2aWN0YWJsZSA9PSBsb2Jq KQpAQCAtNTU3LDExICs1NTEsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRl KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCQlyID0gYW1kZ3B1X2NzX3ZhbGlkYXRlKHAs IGJvKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKLQotCQlpZiAoYmluZGluZ191c2VycHRyKSB7 Ci0JCQlrdmZyZWUobG9iai0+dXNlcl9wYWdlcyk7Ci0JCQlsb2JqLT51c2VyX3BhZ2VzID0gTlVM TDsKLQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU3Niw3ICs1NjUsNyBAQCBzdGF0aWMgaW50 IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCXN0cnVj dCBhbWRncHVfYm8gKmdkczsKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpnd3M7CiAJc3RydWN0IGFtZGdw dV9ibyAqb2E7Ci0JdW5zaWduZWQgdHJpZXMgPSAxMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJw YWdlX2xpc3Q7CiAJaW50IHI7CiAKIAlJTklUX0xJU1RfSEVBRCgmcC0+dmFsaWRhdGVkKTsKQEAg LTU4NSw3ICs1NzQsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBh bWRncHVfY3NfcGFyc2VyICpwLAogCWlmIChjcy0+aW4uYm9fbGlzdF9oYW5kbGUpIHsKIAkJaWYg KHAtPmJvX2xpc3QpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQlyID0gYW1kZ3B1X2JvX2xpc3Rf Z2V0KGZwcml2LCBjcy0+aW4uYm9fbGlzdF9oYW5kbGUsCiAJCQkJICAgICAgICZwLT5ib19saXN0 KTsKIAkJaWYgKHIpCkBAIC02MDAsNyArNTg4LDggQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFy c2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAogCWFtZGdwdV9ib19saXN0X2dl dF9saXN0KHAtPmJvX2xpc3QsICZwLT52YWxpZGF0ZWQpOwogCWlmIChwLT5ib19saXN0LT5maXJz dF91c2VycHRyICE9IHAtPmJvX2xpc3QtPm51bV9lbnRyaWVzKQotCQlwLT5tbiA9IGFtZGdwdV9t bl9nZXQocC0+YWRldiwgQU1ER1BVX01OX1RZUEVfR0ZYKTsKKwkJcC0+bW4gPSBhbWRncHVfbW5f Z2V0KGN1cnJlbnQtPm1tLCBwLT5hZGV2LAorCQkJCQlBTURHUFVfTU5fVFlQRV9HRlgpOwogCiAJ SU5JVF9MSVNUX0hFQUQoJmR1cGxpY2F0ZXMpOwogCWFtZGdwdV92bV9nZXRfcGRfYm8oJmZwcml2 LT52bSwgJnAtPnZhbGlkYXRlZCwgJnAtPnZtX3BkKTsKQEAgLTYwOCw3OSArNTk3LDcyIEBAIHN0 YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAs CiAJaWYgKHAtPnVmX2VudHJ5LnR2LmJvICYmICF0dG1fdG9fYW1kZ3B1X2JvKHAtPnVmX2VudHJ5 LnR2LmJvKS0+cGFyZW50KQogCQlsaXN0X2FkZCgmcC0+dWZfZW50cnkudHYuaGVhZCwgJnAtPnZh bGlkYXRlZCk7CiAKLQl3aGlsZSAoMSkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfcGFnZXM7 CisJciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwg dHJ1ZSwKKwkJCQkgICAmZHVwbGljYXRlcyk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJ aWYgKHIgIT0gLUVSRVNUQVJUU1lTKQorCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZm ZXJzIGZhaWxlZC5cbiIpOworCQlnb3RvIG91dDsKKwl9CiAKLQkJciA9IHR0bV9ldV9yZXNlcnZl X2J1ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgdHJ1ZSwKLQkJCQkJICAgJmR1cGxp Y2F0ZXMpOwotCQlpZiAodW5saWtlbHkociAhPSAwKSkgewotCQkJaWYgKHIgIT0gLUVSRVNUQVJU U1lTKQotCQkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWlsZWQuXG4iKTsK LQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsKLQkJfQorCUlOSVRfTElTVF9IRUFEKCZ1c2VycGFn ZV9saXN0KTsKKwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJv X2xpc3QpIHsKKwkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2 LmJvKTsKIAotCQlJTklUX0xJU1RfSEVBRCgmbmVlZF9wYWdlcyk7Ci0JCWFtZGdwdV9ib19saXN0 X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewotCQkJc3RydWN0IGFtZGdw dV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsKKwkJbGlzdF9kZWwoJmUtPnR2 LmhlYWQpOworCQlsaXN0X2FkZCgmZS0+dHYuaGVhZCwgJnVzZXJwYWdlX2xpc3QpOworCQlhbWRn cHVfYm9fdW5yZXNlcnZlKGJvKTsKKwl9CiAKLQkJCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJf aW52YWxpZGF0ZWQoYm8tPnRiby50dG0sCi0JCQkJICZlLT51c2VyX2ludmFsaWRhdGVkKSAmJiBl LT51c2VyX3BhZ2VzKSB7CisJLyogR2V0IHVzZXJwdHIgYmFja2luZyBwYWdlcy4gSWYgcGFnZXMg YXJlIHVwZGF0ZWQgYWZ0ZXIgcmVnaXN0ZXJlZAorCSAqIGluIGFtZGdwdV9nZW1fdXNlcnB0cl9p b2N0bCgpLCBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZSgpIHdpbGwgZG8KKwkgKiBhbWRncHVfdHRt X2JhY2tlbmRfYmluZCgpIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIG5ldyBwYWdlcworCSAqLwor CWlmICghbGlzdF9lbXB0eSgmdXNlcnBhZ2VfbGlzdCkpIHsKKwkJLyogVW5yZXNlcnZlIGV2ZXJ5 dGhpbmcgYWdhaW4sIHRvIGF2b2lkIGNpcmN1bGFyIGxvY2tpbmcgY2FzZQorCQkgKiBibzo6cmVz ZXJ2ZSAtPiBtbWFwLT5zZW0KKwkJICovCisJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZw LT50aWNrZXQsICZwLT52YWxpZGF0ZWQpOwogCi0JCQkJLyogV2UgYWNxdWlyZWQgYSBwYWdlIGFy cmF5LCBidXQgc29tZWJvZHkKLQkJCQkgKiBpbnZhbGlkYXRlZCBpdC4gRnJlZSBpdCBhbmQgdHJ5 IGFnYWluCi0JCQkJICovCi0JCQkJcmVsZWFzZV9wYWdlcyhlLT51c2VyX3BhZ2VzLAotCQkJCQkg ICAgICBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKLQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7 Ci0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnVz ZXJwYWdlX2xpc3QsIHR2LmhlYWQpIHsKKwkJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3Rv X2FtZGdwdV9ibyhlLT50di5ibyk7CisJCQlib29sIHVzZXJwYWdlX2ludmFsaWRhdGVkID0gZmFs c2U7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCQkJaW50IGk7CisKKwkJCXBhZ2VzID0ga3Zt YWxsb2NfYXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywKKwkJCQkJCXNpemVvZigqcGFnZXMp LAorCQkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCQkJaWYgKCFwYWdlcykgeworCQkJ CURSTV9FUlJPUigiY2FsbG9jIGZhaWx1cmVcbiIpOworCQkJCXJldHVybiAtRU5PTUVNOwogCQkJ fQogCi0JCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRt KSAmJgotCQkJICAgICFlLT51c2VyX3BhZ2VzKSB7Ci0JCQkJbGlzdF9kZWwoJmUtPnR2LmhlYWQp OwotCQkJCWxpc3RfYWRkKCZlLT50di5oZWFkLCAmbmVlZF9wYWdlcyk7Ci0KLQkJCQlhbWRncHVf Ym9fdW5yZXNlcnZlKGJvKTsKKwkJCXIgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJv LT50Ym8udHRtLCBwYWdlcyk7CisJCQlpZiAocikgeworCQkJCWt2ZnJlZShwYWdlcyk7CisJCQkJ cmV0dXJuIHI7CiAJCQl9Ci0JCX0KIAotCQlpZiAobGlzdF9lbXB0eSgmbmVlZF9wYWdlcykpCi0J CQlicmVhazsKLQotCQkvKiBVbnJlc2VydmUgZXZlcnl0aGluZyBhZ2Fpbi4gKi8KLQkJdHRtX2V1 X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7Ci0KLQkJLyog V2UgdHJpZWQgdG9vIG1hbnkgdGltZXMsIGp1c3QgYWJvcnQgKi8KLQkJaWYgKCEtLXRyaWVzKSB7 Ci0JCQlyID0gLUVERUFETEs7Ci0JCQlEUk1fRVJST1IoImRlYWRsb2NrIGluICVzXG4iLCBfX2Z1 bmNfXyk7Ci0JCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgYm8t PnRiby50dG0tPm51bV9wYWdlczsgaSsrKSB7CisJCQkJaWYgKGJvLT50Ym8udHRtLT5wYWdlc1tp XSAhPSBwYWdlc1tpXSkgeworCQkJCQliby0+dGJvLnR0bS0+cGFnZXNbaV0gPSBwYWdlc1tpXTsK KwkJCQkJdXNlcnBhZ2VfaW52YWxpZGF0ZWQgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWUtPnVz ZXJfaW52YWxpZGF0ZWQgPSB1c2VycGFnZV9pbnZhbGlkYXRlZDsKKwkJCWt2ZnJlZShwYWdlcyk7 CiAJCX0KIAotCQkvKiBGaWxsIHRoZSBwYWdlIGFycmF5cyBmb3IgYWxsIHVzZXJwdHJzLiAqLwot CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZuZWVkX3BhZ2VzLCB0di5oZWFkKSB7Ci0JCQlzdHJ1 Y3QgdHRtX3R0ICp0dG0gPSBlLT50di5iby0+dHRtOwotCi0JCQllLT51c2VyX3BhZ2VzID0ga3Zt YWxsb2NfYXJyYXkodHRtLT5udW1fcGFnZXMsCi0JCQkJCQkJIHNpemVvZihzdHJ1Y3QgcGFnZSop LAotCQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JCQlpZiAoIWUtPnVzZXJfcGFn ZXMpIHsKLQkJCQlyID0gLUVOT01FTTsKLQkJCQlEUk1fRVJST1IoImNhbGxvYyBmYWlsdXJlIGlu ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwotCQkJfQorCQls aXN0X3NwbGljZSgmdXNlcnBhZ2VfbGlzdCwgJnAtPnZhbGlkYXRlZCk7CiAKLQkJCXIgPSBhbWRn cHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHR0bSwgZS0+dXNlcl9wYWdlcyk7Ci0JCQlpZiAocikg ewotCQkJCURSTV9FUlJPUigiYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyBmYWlsZWQuXG4i KTsKLQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7Ci0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7 Ci0JCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwotCQkJfQorCQlyID0gdHRtX2V1X3Jlc2VydmVf YnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0cnVlLAorCQkJCQkgICAmZHVwbGlj YXRlcyk7CisJCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCQlpZiAociAhPSAtRVJFU1RBUlRT WVMpCisJCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOwor CQkJZ290byBvdXQ7CiAJCX0KLQotCQkvKiBBbmQgdHJ5IGFnYWluLiAqLwotCQlsaXN0X3NwbGlj ZSgmbmVlZF9wYWdlcywgJnAtPnZhbGlkYXRlZCk7CiAJfQogCiAJYW1kZ3B1X2NzX2dldF90aHJl c2hvbGRfZm9yX21vdmVzKHAtPmFkZXYsICZwLT5ieXRlc19tb3ZlZF90aHJlc2hvbGQsCkBAIC03 NDMsMTcgKzcyNSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFt ZGdwdV9jc19wYXJzZXIgKnAsCiBlcnJvcl92YWxpZGF0ZToKIAlpZiAocikKIAkJdHRtX2V1X2Jh Y2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7Ci0KLWVycm9yX2Zy ZWVfcGFnZXM6Ci0KLQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAt PmJvX2xpc3QpIHsKLQkJaWYgKCFlLT51c2VyX3BhZ2VzKQotCQkJY29udGludWU7Ci0KLQkJcmVs ZWFzZV9wYWdlcyhlLT51c2VyX3BhZ2VzLCBlLT50di5iby0+dHRtLT5udW1fcGFnZXMpOwotCQlr dmZyZWUoZS0+dXNlcl9wYWdlcyk7Ci0JfQotCitvdXQ6CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEy MDYsOCArMTE3OCw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1 X2NzX3BhcnNlciAqcCwKIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7CiAJc3RydWN0 IGFtZGdwdV9qb2IgKmpvYjsKIAl1aW50NjRfdCBzZXE7Ci0KLQlpbnQgcjsKKwlpbnQgciA9IDA7 CiAKIAlqb2IgPSBwLT5qb2I7CiAJcC0+am9iID0gTlVMTDsKQEAgLTEyMTYsMTUgKzExODcsMjEg QEAgc3RhdGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpw LAogCWlmIChyKQogCQlnb3RvIGVycm9yX3VubG9jazsKIAotCS8qIE5vIG1lbW9yeSBhbGxvY2F0 aW9uIGlzIGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jayAqLworCS8qIE5vIG1lbW9y eSBhbGxvY2F0aW9uIGlzIGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jay4KKwkgKiBw LT5tbiBpcyBob2xkIHVudGlsIGFtZGdwdV9jc19zdWJtaXQgaXMgZmluaXNoZWQgYW5kIGZlbmNl IGlzIGFkZGVkCisJICogdG8gQk9zLgorCSAqLwogCWFtZGdwdV9tbl9sb2NrKHAtPm1uKTsKKwor CS8qIElmIHVzZXJwdHIgYXJlIHVwZGF0ZWQgYWZ0ZXIgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKSwg cmVzdGFydCBjcyAqLwogCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwg cC0+Ym9fbGlzdCkgewogCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8o ZS0+dHYuYm8pOwogCi0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8t PnRiby50dG0pKSB7Ci0JCQlyID0gLUVSRVNUQVJUU1lTOwotCQkJZ290byBlcnJvcl9hYm9ydDsK LQkJfQorCQlyIHw9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0 bSk7CisJfQorCWlmIChyKSB7CisJCXIgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXJyb3JfYWJv cnQ7CiAJfQogCiAJam9iLT5vd25lciA9IHAtPmZpbHA7CkBAIC0xMjcxLDE0ICsxMjQ4LDIwIEBA IHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwK IGludCBhbWRncHVfY3NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwg c3RydWN0IGRybV9maWxlICpmaWxwKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bmlvbiBkcm1fYW1kZ3B1X2NzICpjcyA9IGRhdGE7Ci0Jc3Ry dWN0IGFtZGdwdV9jc19wYXJzZXIgcGFyc2VyID0ge307Ci0JYm9vbCByZXNlcnZlZF9idWZmZXJz ID0gZmFsc2U7CisJdW5pb24gZHJtX2FtZGdwdV9jcyAqY3M7CisJc3RydWN0IGFtZGdwdV9jc19w YXJzZXIgcGFyc2VyOworCWJvb2wgcmVzZXJ2ZWRfYnVmZmVyczsKKwlpbnQgdHJpZXMgPSAxMDsK IAlpbnQgaSwgcjsKIAogCWlmICghYWRldi0+YWNjZWxfd29ya2luZykKIAkJcmV0dXJuIC1FQlVT WTsKIAorcmVzdGFydDoKKwltZW1zZXQoJnBhcnNlciwgMCwgc2l6ZW9mKHBhcnNlcikpOworCWNz ID0gZGF0YTsKKwlyZXNlcnZlZF9idWZmZXJzID0gZmFsc2U7CisKIAlwYXJzZXIuYWRldiA9IGFk ZXY7CiAJcGFyc2VyLmZpbHAgPSBmaWxwOwogCkBAIC0xMzIwLDYgKzEzMDMsMTUgQEAgaW50IGFt ZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbHApCiAKIG91dDoKIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwg ciwgcmVzZXJ2ZWRfYnVmZmVycyk7CisKKwlpZiAociA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJaWYg KCEtLXRyaWVzKSB7CisJCQlEUk1fRVJST1IoIlBvc3NpYmxlIGRlYWRsb2NrPyBSZXRyeSB0b28g bWFueSB0aW1lc1xuIik7CisJCQlyZXR1cm4gLUVERUFETEs7CisJCX0KKwkJZ290byByZXN0YXJ0 OworCX0KKwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf Z2VtLmMKaW5kZXggN2IzZDFlYmRhOWRmLi5mZjlhOGZkYWIyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTMzNiwyNiArMzM2LDI0IEBAIGludCBhbWRncHVf Z2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAog CQlyID0gYW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOwogCQlpZiAocikKLQkJCWdvdG8gZnJl ZV9wYWdlczsKKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJCWFtZGdwdV9ib19wbGFjZW1l bnRfZnJvbV9kb21haW4oYm8sIEFNREdQVV9HRU1fRE9NQUlOX0dUVCk7CiAJCXIgPSB0dG1fYm9f dmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKIAkJYW1kZ3B1X2JvX3Vu cmVzZXJ2ZShibyk7CiAJCWlmIChyKQotCQkJZ290byBmcmVlX3BhZ2VzOworCQkJZ290byB1c2Vy X3BhZ2VzX2RvbmU7CiAJfQogCiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxwLCBnb2Jq LCAmaGFuZGxlKTsKLQkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhv bGRzIGl0IG5vdyAqLwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKIAlpZiAo cikKLQkJcmV0dXJuIHI7CisJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJYXJncy0+aGFuZGxl ID0gaGFuZGxlOwotCXJldHVybiAwOwogCi1mcmVlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMoYm8t PnRiby50dG0tPnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKK3VzZXJfcGFnZXNfZG9u ZToKKwlpZiAoYXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfVkFMSURBVEUpCisJCWFt ZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CiAKIHJlbGVhc2Vf b2JqZWN0OgogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X21uLmMKaW5kZXggNTY1OTViM2Q5MGQyLi42YjZiZWNkYjcyNWIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCkBAIC0yMjksOCArMjI5LDYg QEAgc3RhdGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21u X25vZGUgKm5vZGUsCiAJCQl0cnVlLCBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCQlp ZiAociA8PSAwKQogCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBi b1xuIiwgcik7Ci0KLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50dG0p OwogCX0KIH0KIApAQCAtMzU1LDE1ICszNTMsMTYgQEAgc3RhdGljIHN0cnVjdCBobW1fbWlycm9y X29wcyBhbWRncHVfaG1tX21pcnJvcl9vcHNbXSA9IHsKIC8qKgogICogYW1kZ3B1X21uX2dldCAt IGNyZWF0ZSBITU0gbWlycm9yIGNvbnRleHQKICAqCisgKiBAbW06IHRoZSBtbSBzdHJ1Y3QKICAq IEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKICAqIEB0eXBlOiB0eXBlIG9mIE1NVSBub3Rp ZmllciBjb250ZXh0CiAgKgotICogQ3JlYXRlcyBhIEhNTSBtaXJyb3IgY29udGV4dCBmb3IgY3Vy cmVudC0+bW0uCisgKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBtbS4KICAqLwot c3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwKK3N0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0s CisJCQkJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJZW51bSBhbWRncHVfbW5fdHlw ZSB0eXBlKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJc3RydWN0 IGFtZGdwdV9tbiAqYW1uOwogCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BVX01OX0tFWShtbSwg dHlwZSk7CiAJaW50IHI7CkBAIC00MzMsNyArNDMyLDcgQEAgaW50IGFtZGdwdV9tbl9yZWdpc3Rl cihzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRyKQogCXN0cnVjdCBsaXN0 X2hlYWQgYm9zOwogCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0OwogCi0JYW1uID0gYW1k Z3B1X21uX2dldChhZGV2LCB0eXBlKTsKKwlhbW4gPSBhbWRncHVfbW5fZ2V0KGN1cnJlbnQtPm1t LCBhZGV2LCB0eXBlKTsKIAlpZiAoSVNfRVJSKGFtbikpCiAJCXJldHVybiBQVFJfRVJSKGFtbik7 CiAKQEAgLTUxNSwzICs1MTQsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3RlcihzdHJ1Y3Qg YW1kZ3B1X2JvICpibykKIAltdXRleF91bmxvY2soJmFkZXYtPm1uX2xvY2spOwogfQogCisvKiBm bGFncyB1c2VkIGJ5IEhNTSBpbnRlcm5hbCwgbm90IHJlbGF0ZWQgdG8gQ1BVL0dQVSBQVEUgZmxh Z3MgKi8KK3N0YXRpYyBjb25zdCB1aW50NjRfdCBobW1fcmFuZ2VfZmxhZ3NbSE1NX1BGTl9GTEFH X01BWF0gPSB7CisJCSgxIDw8IDApLCAvKiBITU1fUEZOX1ZBTElEICovCisJCSgxIDw8IDEpLCAv KiBITU1fUEZOX1dSSVRFICovCisJCTAgLyogSE1NX1BGTl9ERVZJQ0VfUFJJVkFURSAqLworfTsK Kworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV92YWx1ZXNbSE1NX1BGTl9WQUxVRV9N QVhdID0geworCQkweGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLworCQkw LCAvKiBITU1fUEZOX05PTkUgKi8KKwkJMHhmZmZmZmZmZmZmZmZmZmZjVUwgLyogSE1NX1BGTl9T UEVDSUFMICovCit9OworCit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShzdHJ1Y3QgaG1tX3Jh bmdlICpyYW5nZSkKK3sKKwlpZiAocmFuZ2UpIHsKKwkJcmFuZ2UtPmZsYWdzID0gaG1tX3Jhbmdl X2ZsYWdzOworCQlyYW5nZS0+dmFsdWVzID0gaG1tX3JhbmdlX3ZhbHVlczsKKwkJcmFuZ2UtPnBm bl9zaGlmdCA9IFBBR0VfU0hJRlQ7CisJCXJhbmdlLT5wZm5zID0gTlVMTDsKKwkJSU5JVF9MSVNU X0hFQUQoJnJhbmdlLT5saXN0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9tbi5oCmluZGV4IDBlMjc1MjY0NmU2Zi4uNTllYTMwZTE0OWJkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfbW4uaApAQCAtMjUsOSArMjUsMTAgQEAKICNkZWZpbmUgX19BTURH UFVfTU5fSF9fCiAKIC8qCi0gKiBNTVUgTm90aWZpZXIKKyAqIEhNTSBtaXJyb3IKICAqLwogc3Ry dWN0IGFtZGdwdV9tbjsKK3N0cnVjdCBobW1fcmFuZ2U7CiAKIGVudW0gYW1kZ3B1X21uX3R5cGUg ewogCUFNREdQVV9NTl9UWVBFX0dGWCwKQEAgLTM3LDEwICszOCwxMiBAQCBlbnVtIGFtZGdwdV9t bl90eXBlIHsKICNpZiBkZWZpbmVkKENPTkZJR19ITU0pCiB2b2lkIGFtZGdwdV9tbl9sb2NrKHN0 cnVjdCBhbWRncHVfbW4gKm1uKTsKIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3QgYW1kZ3B1 X21uICptbik7Ci1zdHJ1Y3QgYW1kZ3B1X21uICphbWRncHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAorc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgbW1f c3RydWN0ICptbSwKKwkJCQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJCQllbnVtIGFt ZGdwdV9tbl90eXBlIHR5cGUpOwogaW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1 X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRyKTsKIHZvaWQgYW1kZ3B1X21uX3VucmVnaXN0ZXIo c3RydWN0IGFtZGdwdV9ibyAqYm8pOwordm9pZCBhbWRncHVfaG1tX2luaXRfcmFuZ2Uoc3RydWN0 IGhtbV9yYW5nZSAqcmFuZ2UpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRncHVfbW5f bG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRncHVf bW5fdW5sb2NrKHN0cnVjdCBhbWRncHVfbW4gKm1uKSB7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3R0bS5jCmluZGV4IGM5MWVjMzEwMWQwMC4uNGExY2I0ZDE1ZGZiIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j bHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNs dWRlIDxsaW51eC9pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L2htbS5oPgogI2luY2x1ZGUgImFt ZGdwdS5oIgogI2luY2x1ZGUgImFtZGdwdV9vYmplY3QuaCIKICNpbmNsdWRlICJhbWRncHVfdHJh Y2UuaCIKQEAgLTcwNSwxMSArNzA2LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYW1kZ3B1X3R0 bV9pb19tZW1fcGZuKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAvKgogICogVFRNIGJh Y2tlbmQgZnVuY3Rpb25zLgogICovCi1zdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFza19saXN0IHsK LQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwotfTsK LQogc3RydWN0IGFtZGdwdV90dG1fdHQgewogCXN0cnVjdCB0dG1fZG1hX3R0CXR0bTsKIAl1NjQJ CQlvZmZzZXQ7CkBAIC03MTgsODUgKzcxNCw5MSBAQCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7CiAJ dWludDMyX3QJCXVzZXJmbGFnczsKIAlzcGlubG9ja190ICAgICAgICAgICAgICBndXB0YXNrbG9j azsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsKLQlhdG9taWNfdAkJbW11X2lu dmFsaWRhdGlvbnM7Ci0JdWludDMyX3QJCWxhc3Rfc2V0X3BhZ2VzOworCXN0cnVjdCBobW1fcmFu Z2UJcmFuZ2U7CiB9OwogCiAvKioKLSAqIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgLSBQ aW4gcGFnZXMgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYSBVU0VSUFRSCi0gKiBwb2ludGVyIHRv IG1lbW9yeQorICogYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyAtIGdldCBkZXZpY2UgYWNj ZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlcgorICogbWVtb3J5IGFuZCBzdGFydCBITU0gdHJh Y2tpbmcgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlCiAgKgotICogQ2FsbGVkIGJ5IGFtZGdwdV9nZW1f dXNlcnB0cl9pb2N0bCgpIGFuZCBhbWRncHVfY3NfcGFyc2VyX2JvcygpLgotICogVGhpcyBwcm92 aWRlcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBnZXRfdXNlcl9wYWdlcygpIGNhbGwgdG8gcHJvdmlk ZQotICogZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMgdGhhdCBiYWNrIHVzZXIgbWVtb3J5LgorICog Q2FsbGluZyBmdW5jdGlvbiBtdXN0IGNhbGwgYW1kZ3B1X3R0bV90dF91c2VycHRyX3JhbmdlX2Rv bmUoKSBvbmNlIGFuZCBvbmx5CisgKiBvbmNlIGFmdGVyd2FyZHMgdG8gc3RvcCBITU0gdHJhY2tp bmcKICAqLwogaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAq dHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQg PSAodm9pZCAqKXR0bTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGd0dC0+dXNlcnRhc2stPm1t OwotCXVuc2lnbmVkIGludCBmbGFncyA9IDA7Ci0JdW5zaWduZWQgcGlubmVkID0gMDsKLQlpbnQg cjsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGd0dC0+dXNlcnB0ciArIHR0bS0+bnVtX3BhZ2VzICog UEFHRV9TSVpFOworCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gJmd0dC0+cmFuZ2U7CisJaW50 IHIsIGk7CiAKIAlpZiAoIW1tKSAvKiBIYXBwZW5zIGR1cmluZyBwcm9jZXNzIHNodXRkb3duICov CiAJCXJldHVybiAtRVNSQ0g7CiAKLQlpZiAoIShndHQtPnVzZXJmbGFncyAmIEFNREdQVV9HRU1f VVNFUlBUUl9SRUFET05MWSkpCi0JCWZsYWdzIHw9IEZPTExfV1JJVEU7CisJYW1kZ3B1X2htbV9p bml0X3JhbmdlKHJhbmdlKTsKIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAotCWlmIChn dHQtPnVzZXJmbGFncyAmIEFNREdQVV9HRU1fVVNFUlBUUl9BTk9OT05MWSkgewotCQkvKgotCQkg KiBjaGVjayB0aGF0IHdlIG9ubHkgdXNlIGFub255bW91cyBtZW1vcnkgdG8gcHJldmVudCBwcm9i bGVtcwotCQkgKiB3aXRoIHdyaXRlYmFjawotCQkgKi8KLQkJdW5zaWduZWQgbG9uZyBlbmQgPSBn dHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsKLQkJc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWE7CisJcmFuZ2UtPnZtYSA9IGZpbmRfdm1hKG1tLCBndHQtPnVzZXJwdHIp OworCWlmICghcmFuZ2UtPnZtYSB8fCByYW5nZS0+dm1hLT52bV9maWxlIHx8IHJhbmdlLT52bWEt PnZtX2VuZCA8IGVuZCkgeworCQlyID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisJcmFuZ2Ut PnBmbnMgPSBrdm1hbGxvY19hcnJheSh0dG0tPm51bV9wYWdlcywgc2l6ZW9mKHVpbnQ2NF90KSwK KwkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKHJhbmdlLT5wZm5zID09IE5VTEwp IHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlyYW5nZS0+c3RhcnQgPSBndHQt PnVzZXJwdHI7CisJcmFuZ2UtPmVuZCA9IGVuZDsKIAotCQl2bWEgPSBmaW5kX3ZtYShtbSwgZ3R0 LT51c2VycHRyKTsKLQkJaWYgKCF2bWEgfHwgdm1hLT52bV9maWxlIHx8IHZtYS0+dm1fZW5kIDwg ZW5kKSB7Ci0JCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJ fQorCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKSB7CisJCXJhbmdlLT5wZm5z W2ldID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFMSURdOworCQlyYW5nZS0+cGZuc1tpXSB8PSBh bWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHR0bSkgPworCQkJCQkwIDogcmFuZ2UtPmZsYWdzW0hN TV9QRk5fV1JJVEVdOwogCX0KIAotCS8qIGxvb3AgZW5vdWdoIHRpbWVzIHVzaW5nIGNvbnRpZ3Vv dXMgcGFnZXMgb2YgbWVtb3J5ICovCi0JZG8gewotCQl1bnNpZ25lZCBudW1fcGFnZXMgPSB0dG0t Pm51bV9wYWdlcyAtIHBpbm5lZDsKLQkJdWludDY0X3QgdXNlcnB0ciA9IGd0dC0+dXNlcnB0ciAr IHBpbm5lZCAqIFBBR0VfU0laRTsKLQkJc3RydWN0IHBhZ2UgKipwID0gcGFnZXMgKyBwaW5uZWQ7 Ci0JCXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3QgZ3VwdGFzazsKKwkvKiBUaGlzIG1h eSB0cmlnZ2xlcyBwYWdlIHRhYmxlIHVwZGF0ZSAqLworCXIgPSBobW1fdm1hX2ZhdWx0KHJhbmdl LCB0cnVlKTsKKwlpZiAocikKKwkJZ290byBvdXRfZnJlZV9wZm5zOwogCi0JCWd1cHRhc2sudGFz ayA9IGN1cnJlbnQ7Ci0JCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JCWxpc3RfYWRk KCZndXB0YXNrLmxpc3QsICZndHQtPmd1cHRhc2tzKTsKLQkJc3Bpbl91bmxvY2soJmd0dC0+Z3Vw dGFza2xvY2spOworCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKQorCQlwYWdl c1tpXSA9IGhtbV9wZm5fdG9fcGFnZShyYW5nZSwgcmFuZ2UtPnBmbnNbaV0pOwogCi0JCWlmICht bSA9PSBjdXJyZW50LT5tbSkKLQkJCXIgPSBnZXRfdXNlcl9wYWdlcyh1c2VycHRyLCBudW1fcGFn ZXMsIGZsYWdzLCBwLCBOVUxMKTsKLQkJZWxzZQotCQkJciA9IGdldF91c2VyX3BhZ2VzX3JlbW90 ZShndHQtPnVzZXJ0YXNrLAotCQkJCQltbSwgdXNlcnB0ciwgbnVtX3BhZ2VzLAotCQkJCQlmbGFn cywgcCwgTlVMTCwgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gMDsK IAotCQlzcGluX2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCQlsaXN0X2RlbCgmZ3VwdGFzay5s aXN0KTsKLQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOworb3V0X2ZyZWVfcGZuczoK KwlrdmZyZWUocmFuZ2UtPnBmbnMpOworCXJhbmdlLT5wZm5zID0gTlVMTDsKK291dDoKKwl1cF9y ZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiByOworfQogCi0JCWlmIChyIDwgMCkKLQkJCWdv dG8gcmVsZWFzZV9wYWdlczsKKy8qKgorICogYW1kZ3B1X3R0bV90dF91c2VycHRyX3JhbmdlX2Rv bmUgLSBzdG9wIEhNTSB0cmFjayB0aGUgQ1BVIHBhZ2UgdGFibGUgY2hhbmdlCisgKiBDaGVjayBp ZiB0aGUgcGFnZXMgYmFja2luZyB0aGlzIHR0bSByYW5nZSBoYXZlIGJlZW4gaW52YWxpZGF0ZWQK KyAqCisgKiBSZXR1cm5zOiB0cnVlIGlmIHBhZ2VzIGFyZSBpbnZhbGlkYXRlZCBzaW5jZSB0aGUg bGFzdCB0aW1lIHRoZXkndmUgYmVlbiBzZXQKKyAqLworYm9vbCBhbWRncHVfdHRtX3R0X2dldF91 c2VyX3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKQoreworCXN0cnVjdCBhbWRncHVfdHRt X3R0ICpndHQgPSAodm9pZCAqKXR0bTsKKwlpbnQgcjsKIAotCQlwaW5uZWQgKz0gcjsKKwlpZiAo Z3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKKwkJcmV0dXJuIGZhbHNlOwogCi0JfSB3aGls ZSAocGlubmVkIDwgdHRtLT5udW1fcGFnZXMpOworCXIgPSAhaG1tX3ZtYV9yYW5nZV9kb25lKCZn dHQtPnJhbmdlKTsKIAotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7CisJaWYg KGd0dC0+cmFuZ2UucGZucykgeworCQlrdmZyZWUoZ3R0LT5yYW5nZS5wZm5zKTsKKwkJZ3R0LT5y YW5nZS5wZm5zID0gTlVMTDsKKwl9CiAKLXJlbGVhc2VfcGFnZXM6Ci0JcmVsZWFzZV9wYWdlcyhw YWdlcywgcGlubmVkKTsKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiByOwogfQog CkBAIC04MDksMTYgKzgxMSwxMCBAQCBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhz dHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpCiAgKi8KIHZvaWQgYW1kZ3B1 X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoq cGFnZXMpCiB7Ci0Jc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwogCXVu c2lnbmVkIGk7CiAKLQlndHQtPmxhc3Rfc2V0X3BhZ2VzID0gYXRvbWljX3JlYWQoJmd0dC0+bW11 X2ludmFsaWRhdGlvbnMpOwotCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgKytpKSB7 Ci0JCWlmICh0dG0tPnBhZ2VzW2ldKQotCQkJcHV0X3BhZ2UodHRtLT5wYWdlc1tpXSk7Ci0KKwlm b3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7ICsraSkKIAkJdHRtLT5wYWdlc1tpXSA9IHBh Z2VzID8gcGFnZXNbaV0gOiBOVUxMOwotCX0KIH0KIAogLyoqCkBAIC05MDMsOSArODk5LDYgQEAg c3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBpbl91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0 bSkKIAkvKiB1bm1hcCB0aGUgcGFnZXMgbWFwcGVkIHRvIHRoZSBkZXZpY2UgKi8KIAlkbWFfdW5t YXBfc2coYWRldi0+ZGV2LCB0dG0tPnNnLT5zZ2wsIHR0bS0+c2ctPm5lbnRzLCBkaXJlY3Rpb24p OwogCi0JLyogbWFyayB0aGUgcGFnZXMgYXMgZGlydHkgKi8KLQlhbWRncHVfdHRtX3R0X21hcmtf dXNlcl9wYWdlcyh0dG0pOwotCiAJc2dfZnJlZV90YWJsZSh0dG0tPnNnKTsKIH0KIApAQCAtMTI1 OCw4ICsxMjUxLDYgQEAgaW50IGFtZGdwdV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90 dCAqdHRtLCB1aW50NjRfdCBhZGRyLAogCiAJc3Bpbl9sb2NrX2luaXQoJmd0dC0+Z3VwdGFza2xv Y2spOwogCUlOSVRfTElTVF9IRUFEKCZndHQtPmd1cHRhc2tzKTsKLQlhdG9taWNfc2V0KCZndHQt Pm1tdV9pbnZhbGlkYXRpb25zLCAwKTsKLQlndHQtPmxhc3Rfc2V0X3BhZ2VzID0gMDsKIAogCXJl dHVybiAwOwogfQpAQCAtMTI4OSw3ICsxMjgwLDYgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVj dF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkg IHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9p ZCAqKXR0bTsKLQlzdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFza19saXN0ICplbnRyeTsKIAl1bnNp Z25lZCBsb25nIHNpemU7CiAKIAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKQEAg LTEzMDIsNDggKzEyOTIsMjAgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0 cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAlpZiAoZ3R0LT51c2VycHRy ID4gZW5kIHx8IGd0dC0+dXNlcnB0ciArIHNpemUgPD0gc3RhcnQpCiAJCXJldHVybiBmYWxzZTsK IAotCS8qIFNlYXJjaCB0aGUgbGlzdHMgb2YgdGFza3MgdGhhdCBob2xkIHRoaXMgbWFwcGluZyBh bmQgc2VlCi0JICogaWYgY3VycmVudCBpcyBvbmUgb2YgdGhlbS4gIElmIGl0IGlzIHJldHVybiBm YWxzZS4KLQkgKi8KLQlzcGluX2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZW50cnksICZndHQtPmd1cHRhc2tzLCBsaXN0KSB7Ci0JCWlmIChlbnRyeS0+dGFz ayA9PSBjdXJyZW50KSB7Ci0JCQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JCQly ZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwot Ci0JYXRvbWljX2luYygmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7Ci0KIAlyZXR1cm4gdHJ1ZTsK IH0KIAogLyoqCi0gKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhl IHR0bV90dCBvYmplY3QgYmVlbiBpbnZhbGlkYXRlZD8KKyAqIGFtZGdwdV90dG1fdHRfaXNfdXNl cnB0ciAtIEhhdmUgdGhlIHBhZ2VzIGJhY2tpbmcgYnkgdXNlcnB0cj8KICAqLwotYm9vbCBhbWRn cHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0bV90dCAqdHRtLAotCQkJCSAg ICAgICBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpCi17Ci0Jc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0 dCA9ICh2b2lkICopdHRtOwotCWludCBwcmV2X2ludmFsaWRhdGVkID0gKmxhc3RfaW52YWxpZGF0 ZWQ7Ci0KLQkqbGFzdF9pbnZhbGlkYXRlZCA9IGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlk YXRpb25zKTsKLQlyZXR1cm4gcHJldl9pbnZhbGlkYXRlZCAhPSAqbGFzdF9pbnZhbGlkYXRlZDsK LX0KLQotLyoqCi0gKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMgLSBIYXZlIHRo ZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtX3R0IG9iamVjdAotICogYmVlbiBpbnZhbGlkYXRlZCBz aW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUgYmVlbiBzZXQ/Ci0gKi8KLWJvb2wgYW1kZ3B1X3R0 bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSkKK2Jvb2wgYW1kZ3B1 X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSkKIHsKIAlzdHJ1Y3QgYW1kZ3B1 X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CiAKIAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+ dXNlcnB0cikKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIGF0b21pY19yZWFkKCZndHQtPm1t dV9pbnZhbGlkYXRpb25zKSAhPSBndHQtPmxhc3Rfc2V0X3BhZ2VzOworCXJldHVybiB0cnVlOwog fQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90 dG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaAppbmRleCBiNWIy ZDEwMWY3ZGIuLjg5ODhjODdmZmY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3R0bS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV90dG0uaApAQCAtMTAyLDYgKzEwMiw3IEBAIGludCBhbWRncHVfdHRtX2FsbG9jX2dhcnQoc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQo c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pOwogCiBpbnQgYW1kZ3B1X3R0bV90dF9nZXRf dXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpOworYm9v bCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKTsK IHZvaWQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0 cnVjdCBwYWdlICoqcGFnZXMpOwogdm9pZCBhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhz dHJ1Y3QgdHRtX3R0ICp0dG0pOwogaW50IGFtZGdwdV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0 IHR0bV90dCAqdHRtLCB1aW50NjRfdCBhZGRyLApAQCAtMTEyLDcgKzExMyw3IEBAIGJvb2wgYW1k Z3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxv bmcgc3RhcnQsCiAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCk7CiBib29sIGFtZGdwdV90dG1fdHRf dXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCiAJCQkJICAgICAgIGludCAq bGFzdF9pbnZhbGlkYXRlZCk7Ci1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdl cyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOworYm9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3Ry dWN0IHR0bV90dCAqdHRtKTsKIGJvb2wgYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3Qg dHRtX3R0ICp0dG0pOwogdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wZGVfZmxhZ3Moc3RydWN0IHR0 bV90dCAqdHRtLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSk7CiB1aW50NjRfdCBhbWRncHVfdHRt X3R0X3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IHR0bV90dCAq dHRtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwppbmRleCAyYWNiOTgzODkx M2UuLjRhNjdhODhhY2VhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMK QEAgLTYxOCw3ICs2MTgsNiBAQCB2b2lkIGFtZGdwdV92bV9nZXRfcGRfYm8oc3RydWN0IGFtZGdw dV92bSAqdm0sCiAJZW50cnktPnByaW9yaXR5ID0gMDsKIAllbnRyeS0+dHYuYm8gPSAmdm0tPnJv b3QuYmFzZS5iby0+dGJvOwogCWVudHJ5LT50di5zaGFyZWQgPSB0cnVlOwotCWVudHJ5LT51c2Vy X3BhZ2VzID0gTlVMTDsKIAlsaXN0X2FkZCgmZW50cnktPnR2LmhlYWQsIHZhbGlkYXRlZCk7CiB9 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVl dWVfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1 ZV9tYW5hZ2VyLmMKaW5kZXggODM3MjU1NmI1MmViLi5mZTEyMGNjMDkzMGMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5j CkBAIC0xMTU4LDYgKzExNTgsMzMgQEAgc3RhdGljIGludCBjcmVhdGVfcXVldWVfY3BzY2goc3Ry dWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sIHN0cnVjdCBxdWV1ZSAqcSwKIAogCXJldHZh bCA9IDA7CiAKKwkvKiBEbyBpbml0X21xZCBiZWZvcmUgZHFtX2xvY2soZHFtKSB0byBhdm9pZCBj aXJjdWxhciBsb2NraW5nIG9yZGVyOgorCSAqIGxvY2soZHFtKSAtPiBibzo6cmVzZXJ2ZQorCSAq LworCW1xZF9tZ3IgPSBkcW0tPm9wcy5nZXRfbXFkX21hbmFnZXIoZHFtLAorCQkJZ2V0X21xZF90 eXBlX2Zyb21fcXVldWVfdHlwZShxLT5wcm9wZXJ0aWVzLnR5cGUpKTsKKworCWlmICghbXFkX21n cikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEV2 aWN0aW9uIHN0YXRlIGxvZ2ljOiB3ZSBvbmx5IG1hcmsgYWN0aXZlIHF1ZXVlcyBhcyBldmljdGVk CisJICogdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHJlc3RvcmluZyBpbmFjdGl2ZSBxdWV1ZXMg bGF0ZXIKKwkgKi8KKwlpZiAocXBkLT5ldmljdGVkKQorCQlxLT5wcm9wZXJ0aWVzLmlzX2V2aWN0 ZWQgPSAocS0+cHJvcGVydGllcy5xdWV1ZV9zaXplID4gMCAmJgorCQkJCQkgICAgcS0+cHJvcGVy dGllcy5xdWV1ZV9wZXJjZW50ID4gMCAmJgorCQkJCQkgICAgcS0+cHJvcGVydGllcy5xdWV1ZV9h ZGRyZXNzICE9IDApOworCWRxbS0+YXNpY19vcHMuaW5pdF9zZG1hX3ZtKGRxbSwgcSwgcXBkKTsK KwlxLT5wcm9wZXJ0aWVzLnRiYV9hZGRyID0gcXBkLT50YmFfYWRkcjsKKwlxLT5wcm9wZXJ0aWVz LnRtYV9hZGRyID0gcXBkLT50bWFfYWRkcjsKKwlyZXR2YWwgPSBtcWRfbWdyLT5pbml0X21xZCht cWRfbWdyLCAmcS0+bXFkLCAmcS0+bXFkX21lbV9vYmosCisJCQkJJnEtPmdhcnRfbXFkX2FkZHIs ICZxLT5wcm9wZXJ0aWVzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKwogCWRxbV9sb2Nr KGRxbSk7CiAKIAlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVl c19wZXJfZGV2aWNlKSB7CkBAIC0xMTgxLDMwICsxMjA4LDYgQEAgc3RhdGljIGludCBjcmVhdGVf cXVldWVfY3BzY2goc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sIHN0cnVjdCBxdWV1 ZSAqcSwKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF9kZWFsbG9jYXRlX3NkbWFfcXVldWU7CiAK LQltcWRfbWdyID0gZHFtLT5vcHMuZ2V0X21xZF9tYW5hZ2VyKGRxbSwKLQkJCWdldF9tcWRfdHlw ZV9mcm9tX3F1ZXVlX3R5cGUocS0+cHJvcGVydGllcy50eXBlKSk7Ci0KLQlpZiAoIW1xZF9tZ3Ip IHsKLQkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byBvdXRfZGVhbGxvY2F0ZV9kb29yYmVsbDsK LQl9Ci0JLyoKLQkgKiBFdmljdGlvbiBzdGF0ZSBsb2dpYzogd2Ugb25seSBtYXJrIGFjdGl2ZSBx dWV1ZXMgYXMgZXZpY3RlZAotCSAqIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiByZXN0b3Jpbmcg aW5hY3RpdmUgcXVldWVzIGxhdGVyCi0JICovCi0JaWYgKHFwZC0+ZXZpY3RlZCkKLQkJcS0+cHJv cGVydGllcy5pc19ldmljdGVkID0gKHEtPnByb3BlcnRpZXMucXVldWVfc2l6ZSA+IDAgJiYKLQkJ CQkJICAgIHEtPnByb3BlcnRpZXMucXVldWVfcGVyY2VudCA+IDAgJiYKLQkJCQkJICAgIHEtPnBy b3BlcnRpZXMucXVldWVfYWRkcmVzcyAhPSAwKTsKLQotCWRxbS0+YXNpY19vcHMuaW5pdF9zZG1h X3ZtKGRxbSwgcSwgcXBkKTsKLQotCXEtPnByb3BlcnRpZXMudGJhX2FkZHIgPSBxcGQtPnRiYV9h ZGRyOwotCXEtPnByb3BlcnRpZXMudG1hX2FkZHIgPSBxcGQtPnRtYV9hZGRyOwotCXJldHZhbCA9 IG1xZF9tZ3ItPmluaXRfbXFkKG1xZF9tZ3IsICZxLT5tcWQsICZxLT5tcWRfbWVtX29iaiwKLQkJ CQkmcS0+Z2FydF9tcWRfYWRkciwgJnEtPnByb3BlcnRpZXMpOwotCWlmIChyZXR2YWwpCi0JCWdv dG8gb3V0X2RlYWxsb2NhdGVfZG9vcmJlbGw7CiAKIAlsaXN0X2FkZCgmcS0+bGlzdCwgJnFwZC0+ cXVldWVzX2xpc3QpOwogCXFwZC0+cXVldWVfY291bnQrKzsKQEAgLTEyMjgsMTQgKzEyMzEsMTIg QEAgc3RhdGljIGludCBjcmVhdGVfcXVldWVfY3BzY2goc3RydWN0IGRldmljZV9xdWV1ZV9tYW5h Z2VyICpkcW0sIHN0cnVjdCBxdWV1ZSAqcSwKIAlkcW1fdW5sb2NrKGRxbSk7CiAJcmV0dXJuIHJl dHZhbDsKIAotb3V0X2RlYWxsb2NhdGVfZG9vcmJlbGw6Ci0JZGVhbGxvY2F0ZV9kb29yYmVsbChx cGQsIHEpOwogb3V0X2RlYWxsb2NhdGVfc2RtYV9xdWV1ZToKIAlpZiAocS0+cHJvcGVydGllcy50 eXBlID09IEtGRF9RVUVVRV9UWVBFX1NETUEpCiAJCWRlYWxsb2NhdGVfc2RtYV9xdWV1ZShkcW0s IHEtPnNkbWFfaWQpOwogb3V0X3VubG9jazoKIAlkcW1fdW5sb2NrKGRxbSk7Ci0KK291dDoKIAly ZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMzk4LDggKzEzOTksNiBAQCBzdGF0aWMgaW50IGRlc3Ry b3lfcXVldWVfY3BzY2goc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sCiAJCQlxcGQt PnJlc2V0X3dhdmVmcm9udHMgPSB0cnVlOwogCX0KIAotCW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFk X21nciwgcS0+bXFkLCBxLT5tcWRfbWVtX29iaik7Ci0KIAkvKgogCSAqIFVuY29uZGl0aW9uYWxs eSBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCiAJICog dHlwZQpAQCAtMTQxMCw2ICsxNDA5LDkgQEAgc3RhdGljIGludCBkZXN0cm95X3F1ZXVlX2Nwc2No KHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLAogCiAJZHFtX3VubG9jayhkcW0pOwog CisJLyogRG8gdW5pbml0X21xZCBhZnRlciBkcW1fdW5sb2NrKGRxbSkgdG8gYXZvaWQgY2lyY3Vs YXIgbG9ja2luZyAqLworCW1xZF9tZ3ItPnVuaW5pdF9tcWQobXFkX21nciwgcS0+bXFkLCBxLT5t cWRfbWVtX29iaik7CisKIAlyZXR1cm4gcmV0dmFsOwogCiBmYWlsZWQ6CkBAIC0xNjMxLDcgKzE2 MzMsMTEgQEAgc3RhdGljIGludCBwcm9jZXNzX3Rlcm1pbmF0aW9uX2Nwc2NoKHN0cnVjdCBkZXZp Y2VfcXVldWVfbWFuYWdlciAqZHFtLAogCQlxcGQtPnJlc2V0X3dhdmVmcm9udHMgPSBmYWxzZTsK IAl9CiAKLQkvKiBsYXN0bHksIGZyZWUgbXFkIHJlc291cmNlcyAqLworCWRxbV91bmxvY2soZHFt KTsKKworCS8qIExhc3RseSwgZnJlZSBtcWQgcmVzb3VyY2VzLgorCSAqIERvIHVuaW5pdF9tcWQo KSBhZnRlciBkcW1fdW5sb2NrIHRvIGF2b2lkIGNpcmN1bGFyIGxvY2tpbmcuCisJICovCiAJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKHEsIG5leHQsICZxcGQtPnF1ZXVlc19saXN0LCBsaXN0KSB7 CiAJCW1xZF9tZ3IgPSBkcW0tPm9wcy5nZXRfbXFkX21hbmFnZXIoZHFtLAogCQkJZ2V0X21xZF90 eXBlX2Zyb21fcXVldWVfdHlwZShxLT5wcm9wZXJ0aWVzLnR5cGUpKTsKQEAgLTE2NDUsNyArMTY1 MSw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc190ZXJtaW5hdGlvbl9jcHNjaChzdHJ1Y3QgZGV2aWNl X3F1ZXVlX21hbmFnZXIgKmRxbSwKIAl9CiAKIG91dDoKLQlkcW1fdW5sb2NrKGRxbSk7CiAJcmV0 dXJuIHJldHZhbDsKIH0KIAotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2FtZC1nZngK