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: Thu, 18 Oct 2018 21:52:37 +0000 Message-ID: <1539899546-32612-1-git-send-email-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 ZXRyeS4KClRvIGF2b2lkIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSwgbm8gbmVzdGVkIGxvY2tp bmcgYmV0d2VlbiBtbWFwX3NlbQphbmQgYm86OnJlc2VydmUuIFRoZSBsb2NraW5nIG9yZGVyIGlz Ogpibzo6cmVzZXJ2ZSAtPiBhbWRncHVfbW5fbG9jayhwLT5tbikKCkhNTSBzaW1wbGlmeSB0aGUg Q1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUgY2hlY2ssIHNvIHJlbW92ZQpndXB0YXNr bG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0X3BhZ2VzIGZpZWxkcyBmcm9tCmFtZGdw dV90dG1fdHQgc3RydWN0LgoKSE1NIGRvZXMgbm90IHBpbiB0aGUgcGFnZSAoaW5jcmVhc2UgcGFn ZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZApvcGVyYXRpb25zIGxpa2UgcmVsZWFzZV9w YWdlcygpLCBwdXRfcGFnZSgpLCBtYXJrX3BhZ2VfZGlydHkoKS4KCnYyOgoqIFJlbW92ZSBuZXN0 ZWQgbG9ja2luZyBiZXR3ZWVuIG1tYXBfc2VtIGFuZCBibzo6cmVzZXJ2ZQoqIENoYW5nZSBsb2Nr aW5nIG9yZGVyIHRvIGJvOjpyZXNlcnZlIC0+IGFtZGdwdV9tbl9sb2NrKCkKKiBVc2UgZHluYW1p YyBhbGxvY2F0aW9uIHRvIHJlcGxhY2UgVkxBIGluIGtlcm5lbCBzdGFjawoKQ2hhbmdlLUlkOiBJ ZmZkNWY4NTVjYzljZTQwMmNkZmNhMTY3ZjY4ZjgzZmUzOWFjNTZmOQpTaWduZWQtb2ZmLWJ5OiBQ aGlsaXAgWWFuZyA8UGhpbGlwLllhbmdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMgICB8IDEwMSArKysrKysrKy0tLQogZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyAgICAgICAgfCAgIDIgLQogZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaCAgICAgICAgfCAgIDMgKy0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jICAgICAgICAgICAgIHwgMTg4 ICsrKysrKysrKystLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2dlbS5jICAgICAgICAgICAgfCAgMTQgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9tbi5jICAgICAgICAgICAgIHwgIDM0ICsrKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9tbi5oICAgICAgICAgICAgIHwgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdHRtLmMgICAgICAgICAgICB8IDE2NCArKysrKysrLS0tLS0tLS0tLS0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCAgICAgICAgICAgIHwgICAz ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAgICAgICAgICAgICB8 ICAgMSAtCiAuLi4vZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5j ICB8ICA2NyArKysrLS0tLQogMTEgZmlsZXMgY2hhbmdlZCwgMzEyIGluc2VydGlvbnMoKyksIDI3 MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYW1ka2ZkX2dwdXZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkX2dwdXZtLmMKaW5kZXggZGYwYTA1OS4uM2ZkMDM0MCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYwpAQCAtNjE1LDggKzYxNSw3 IEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICptZW0sIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLAogCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwogCiByZWxlYXNlX291 dDoKLQlpZiAocmV0KQotCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50 dG0tPm51bV9wYWdlcyk7CisJYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50 Ym8udHRtKTsKIGZyZWVfb3V0OgogCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwogCW1lbS0+dXNl cl9wYWdlcyA9IE5VTEw7CkBAIC02NzgsNyArNjc3LDYgQEAgc3RhdGljIGludCByZXNlcnZlX2Jv X2FuZF92bShzdHJ1Y3Qga2dkX21lbSAqbWVtLAogCWN0eC0+a2ZkX2JvLnByaW9yaXR5ID0gMDsK IAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOwogCWN0eC0+a2ZkX2JvLnR2LnNoYXJlZCA9 IHRydWU7Ci0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9IE5VTEw7CiAJbGlzdF9hZGQoJmN0eC0+ a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwogCiAJYW1kZ3B1X3ZtX2dldF9wZF9ibyh2bSwg JmN0eC0+bGlzdCwgJmN0eC0+dm1fcGRbMF0pOwpAQCAtNzQyLDcgKzc0MCw2IEBAIHN0YXRpYyBp bnQgcmVzZXJ2ZV9ib19hbmRfY29uZF92bXMoc3RydWN0IGtnZF9tZW0gKm1lbSwKIAljdHgtPmtm ZF9iby5wcmlvcml0eSA9IDA7CiAJY3R4LT5rZmRfYm8udHYuYm8gPSAmYm8tPnRibzsKIAljdHgt PmtmZF9iby50di5zaGFyZWQgPSB0cnVlOwotCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxM OwogCWxpc3RfYWRkKCZjdHgtPmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsKIAogCWkgPSAw OwpAQCAtMTMxMSw5ICsxMzA4LDYgQEAgaW50IGFtZGdwdV9hbWRrZmRfZ3B1dm1fZnJlZV9tZW1v cnlfb2ZfZ3B1KAogCS8qIEZyZWUgdXNlciBwYWdlcyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAobWVt LT51c2VyX3BhZ2VzKSB7CiAJCXByX2RlYnVnKCIlczogRnJlZWluZyB1c2VyX3BhZ2VzIGFycmF5 XG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChtZW0tPnVzZXJfcGFnZXNbMF0pCi0JCQlyZWxlYXNlX3Bh Z2VzKG1lbS0+dXNlcl9wYWdlcywKLQkJCQkJbWVtLT5iby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsK IAkJa3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7CiAJfQogCkBAIC0xNzM5LDggKzE3MzMsNiBAQCBz dGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNz X2luZm8gKnByb2Nlc3NfaW5mbywKIAkJCQkgICAgICAgX19mdW5jX18pOwogCQkJCXJldHVybiAt RU5PTUVNOwogCQkJfQotCQl9IGVsc2UgaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkgewotCQkJcmVs ZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOwogCQl9 CiAKIAkJLyogR2V0IHVwZGF0ZWQgdXNlciBwYWdlcyAqLwpAQCAtMTc1NiwxMiArMTc0OCw2IEBA IHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nl c3NfaW5mbyAqcHJvY2Vzc19pbmZvLAogCQkJICogc3RhbGxlZCB1c2VyIG1vZGUgcXVldWVzLgog CQkJICovCiAJCX0KLQotCQkvKiBNYXJrIHRoZSBCTyBhcyB2YWxpZCB1bmxlc3MgaXQgd2FzIGlu dmFsaWRhdGVkCi0JCSAqIGFnYWluIGNvbmN1cnJlbnRseQotCQkgKi8KLQkJaWYgKGF0b21pY19j bXB4Y2hnKCZtZW0tPmludmFsaWQsIGludmFsaWQsIDApICE9IGludmFsaWQpCi0JCQlyZXR1cm4g LUVBR0FJTjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE4NTQsMTQgKzE4NDAsMTAgQEAgc3RhdGlj IGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2lu Zm8gKnByb2Nlc3NfaW5mbykKIAkJfQogCiAJCS8qIFZhbGlkYXRlIHN1Y2NlZWRlZCwgbm93IHRo ZSBCTyBvd25zIHRoZSBwYWdlcywgZnJlZQotCQkgKiBvdXIgY29weSBvZiB0aGUgcG9pbnRlciBh cnJheS4gUHV0IHRoaXMgQk8gYmFjayBvbgotCQkgKiB0aGUgdXNlcnB0cl92YWxpZF9saXN0LiBJ ZiB3ZSBuZWVkIHRvIHJldmFsaWRhdGUKLQkJICogaXQsIHdlIG5lZWQgdG8gc3RhcnQgZnJvbSBz Y3JhdGNoLgorCQkgKiBvdXIgY29weSBvZiB0aGUgcG9pbnRlciBhcnJheS4KIAkJICovCiAJCWt2 ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwogCQltZW0tPnVzZXJfcGFnZXMgPSBOVUxMOwotCQlsaXN0 X21vdmVfdGFpbCgmbWVtLT52YWxpZGF0ZV9saXN0LmhlYWQsCi0JCQkgICAgICAgJnByb2Nlc3Nf aW5mby0+dXNlcnB0cl92YWxpZF9saXN0KTsKIAogCQkvKiBVcGRhdGUgbWFwcGluZy4gSWYgdGhl IEJPIHdhcyBub3QgdmFsaWRhdGVkCiAJCSAqIChiZWNhdXNlIHdlIGNvdWxkbid0IGdldCB1c2Vy IHBhZ2VzKSwgdGhpcyB3aWxsCkBAIC0xOTAyLDYgKzE4ODQsNzAgQEAgc3RhdGljIGludCB2YWxp ZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nl c3NfaW5mbykKIAlyZXR1cm4gcmV0OwogfQogCisvKiB1c2VyX3BhZ2VzX2ludmFsaWRhdGVkIC0g aWYgQ1BVIHBhZ2UgdGFibGUgaXMgdXBkYXRlZCBhZnRlciBnZXR0aW5nIHVzZXIKKyAqIHBhZ2Vz CisgKgorICogSE1NIG1pcnJvciBjYWxsYmFjayBsb2NrIGFtbiBpcyBob2xkIHRvIHByZXZlbnQg dGhlIGNvbmN1cnJlbnQgQ1BVCisgKiBwYWdlIHRhYmxlIHVwZGF0ZSB3aGlsZSByZXN1bWluZyB1 c2VyIHF1ZXVlcy4KKyAqCisgKiBSZXR1cm5zOiB0cnVlIGlmIENQVSBwYWdlIHRhYmxlIGlzIHVw ZGF0ZWQsIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHVzZXJfcGFnZXNfaW52YWxp ZGF0ZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQlzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5m byAqcHJvY2Vzc19pbmZvLAorCQkJc3RydWN0IGFtZGdwdV9tbiAqKmFtbikKK3sKKwlzdHJ1Y3Qg a2dkX21lbSAqbWVtLCAqdG1wX21lbTsKKwlzdHJ1Y3QgYW1kZ3B1X2JvICpibzsKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldjsKKwlpbnQgaW52YWxpZCwgciA9IDA7CisKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUobWVtLCB0bXBfbWVtLAorCQkJCSAmcHJvY2Vzc19pbmZvLT51c2VycHRy X2ludmFsX2xpc3QsCisJCQkJIHZhbGlkYXRlX2xpc3QuaGVhZCkgeworCisJCWludmFsaWQgPSBh dG9taWNfcmVhZCgmbWVtLT5pbnZhbGlkKTsKKwkJaWYgKCFpbnZhbGlkKQorCQkJLyogQk8gaGFz bid0IGJlZW4gaW52YWxpZGF0ZWQgc2luY2UgdGhlIGxhc3QKKwkJCSAqIHJldmFsaWRhdGlvbiBh dHRlbXB0LiBLZWVwIGl0cyBCTyBsaXN0LgorCQkJICovCisJCQljb250aW51ZTsKKworCQlibyA9 IG1lbS0+Ym87CisKKwkJLyogR2V0IEhNTSBtaXJyb3IgY2FsbGJhY2sgbG9jayAqLworCQlpZiAo ISphbW4pIHsKKwkJCWFkZXYgPSBhbWRncHVfdHRtX2FkZXYoYm8tPnRiby5iZGV2KTsKKwkJCSph bW4gPSBhbWRncHVfbW5fZ2V0KG1tLCBhZGV2LCBBTURHUFVfTU5fVFlQRV9IU0EpOworCQkJaWYg KElTX0VSUigqYW1uKSkgeworCQkJCXIgPSB0cnVlOworCQkJCSphbW4gPSBOVUxMOworCQkJCWdv dG8gb3V0OworCQkJfQorCisJCQlhbWRncHVfbW5fbG9jaygqYW1uKTsKKwkJfQorCisJCXIgfD0g YW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKKworCQkvKiBQ dXQgdGhpcyBCTyBiYWNrIG9uIHRoZSB1c2VycHRyX3ZhbGlkX2xpc3QuIElmIHdlIG5lZWQgdG8K KwkJICogcmV2YWxpZGF0ZSBpdCwgd2UgbmVlZCB0byBzdGFydCBmcm9tIHNjcmF0Y2guCisJCSAq LworCQlsaXN0X21vdmVfdGFpbCgmbWVtLT52YWxpZGF0ZV9saXN0LmhlYWQsCisJCQkgICAgICAg JnByb2Nlc3NfaW5mby0+dXNlcnB0cl92YWxpZF9saXN0KTsKKworCQkvKiBNYXJrIHRoZSBCTyBh cyB2YWxpZCB1bmxlc3MgaXQgd2FzIGludmFsaWRhdGVkCisJCSAqIGFnYWluIGNvbmN1cnJlbnRs eQorCQkgKi8KKwkJaWYgKGF0b21pY19jbXB4Y2hnKCZtZW0tPmludmFsaWQsIGludmFsaWQsIDAp ICE9IGludmFsaWQpIHsKKwkJCXIgPSB0cnVlOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291 dDoKKwlyZXR1cm4gcjsKK30KKwogLyogV29ya2VyIGNhbGxiYWNrIHRvIHJlc3RvcmUgZXZpY3Rl ZCB1c2VycHRyIEJPcwogICoKICAqIFRyaWVzIHRvIHVwZGF0ZSBhbmQgdmFsaWRhdGUgYWxsIHVz ZXJwdHIgQk9zLiBJZiBzdWNjZXNzZnVsIGFuZCBubwpAQCAtMTkxNyw2ICsxOTYzLDcgQEAgc3Rh dGljIHZvaWQgYW1kZ3B1X2FtZGtmZF9yZXN0b3JlX3VzZXJwdHJfd29ya2VyKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnVzZXJ0YXNrOwogCXN0cnVjdCBt bV9zdHJ1Y3QgKm1tOwogCWludCBldmljdGVkX2JvczsKKwlzdHJ1Y3QgYW1kZ3B1X21uICphbW4g PSBOVUxMOwogCiAJZXZpY3RlZF9ib3MgPSBhdG9taWNfcmVhZCgmcHJvY2Vzc19pbmZvLT5ldmlj dGVkX2Jvcyk7CiAJaWYgKCFldmljdGVkX2JvcykKQEAgLTE5NTUsMTMgKzIwMDIsMjcgQEAgc3Rh dGljIHZvaWQgYW1kZ3B1X2FtZGtmZF9yZXN0b3JlX3VzZXJwdHJfd29ya2VyKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKIAlpZiAoYXRvbWljX2NtcHhjaGcoJnByb2Nlc3NfaW5mby0+ZXZpY3Rl ZF9ib3MsIGV2aWN0ZWRfYm9zLCAwKSAhPQogCSAgICBldmljdGVkX2JvcykKIAkJZ290byB1bmxv Y2tfb3V0OworCisJLyogSWYgQ1BVIHBhZ2UgdGFibGUgaXMgdXBkYXRlZCBhZ2FpbiBhZnRlciBn ZXR0aW5nIHVzZXIgcGFnZXMsCisJICogc2NoZWR1bGUgdG8gcmVzdGFydCB0aGUgcmVzdG9yZSBw cm9jZXNzIGFnYWluLgorCSAqCisJICogYW1uIGlzIGFsc28gbG9ja2VkIHRvIHByZXZlbnQgQ1BV IHBhZ2UgdGFibGUgdXBkYXRlIHdoaWxlIHJlc3VtaW5nCisJICogdXNlciBxdWV1ZXMuIGFtbiBp cyB1bmxvY2tlZCBhZnRlciB1c2VyIHF1ZXVlcyBhcmUgcmVzdW1lZC4KKwkgKi8KKwlpZiAodXNl cl9wYWdlc19pbnZhbGlkYXRlZChtbSwgcHJvY2Vzc19pbmZvLCAmYW1uKSkKKwkJZ290byB1bmxv Y2tfbW5fb3V0OworCiAJZXZpY3RlZF9ib3MgPSAwOworCiAJaWYgKGtnZDJrZmQtPnJlc3VtZV9t bShtbSkpIHsKIAkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHJlc3VtZSBLRkRcbiIsIF9fZnVuY19f KTsKIAkJLyogTm8gcmVjb3ZlcnkgZnJvbSB0aGlzIGZhaWx1cmUuIFByb2JhYmx5IHRoZSBDUCBp cwogCQkgKiBoYW5naW5nLiBObyBwb2ludCB0cnlpbmcgYWdhaW4uCiAJCSAqLwogCX0KKwordW5s b2NrX21uX291dDoKKwlhbWRncHVfbW5fdW5sb2NrKGFtbik7CiB1bmxvY2tfb3V0OgogCW11dGV4 X3VubG9jaygmcHJvY2Vzc19pbmZvLT5sb2NrKTsKIAltbXB1dChtbSk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYwppbmRleCAxNGQyOTgyLi4yNzE2YzI0IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmMKQEAgLTIwMSw4 ICsyMDEsNiBAQCB2b2lkIGFtZGdwdV9ib19saXN0X2dldF9saXN0KHN0cnVjdCBhbWRncHVfYm9f bGlzdCAqbGlzdCwKIAogCQlpZiAoIWJvLT5wYXJlbnQpCiAJCQlsaXN0X2FkZF90YWlsKCZlLT50 di5oZWFkLCAmYnVja2V0W3ByaW9yaXR5XSk7Ci0KLQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7CiAJ fQogCiAJLyogQ29ubmVjdCB0aGUgc29ydGVkIGJ1Y2tldHMgaW4gdGhlIG91dHB1dCBsaXN0LiAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3Qu aCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgKaW5kZXggN2M1 ZjVkMS4uNGJlYWIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2JvX2xpc3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9f bGlzdC5oCkBAIC0zNSw4ICszNSw3IEBAIHN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSB7CiAJ c3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIJdHY7CiAJc3RydWN0IGFtZGdwdV9ib192YQkJKmJv X3ZhOwogCXVpbnQzMl90CQkJcHJpb3JpdHk7Ci0Jc3RydWN0IHBhZ2UJCQkqKnVzZXJfcGFnZXM7 Ci0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7CisJYm9vbAkJCQl1c2VyX2ludmFsaWRhdGVkOwog fTsKIAogc3RydWN0IGFtZGdwdV9ib19saXN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2NzLmMKaW5kZXggODgzNjE4Ni4uNjljNmI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2NzLmMKQEAgLTUxLDcgKzUxLDYgQEAgc3RhdGljIGludCBhbWRncHVfY3NfdXNl cl9mZW5jZV9jaHVuayhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlwLT51Zl9lbnRyeS5w cmlvcml0eSA9IDA7CiAJcC0+dWZfZW50cnkudHYuYm8gPSAmYm8tPnRibzsKIAlwLT51Zl9lbnRy eS50di5zaGFyZWQgPSB0cnVlOwotCXAtPnVmX2VudHJ5LnVzZXJfcGFnZXMgPSBOVUxMOwogCiAJ ZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdvYmopOwogCkBAIC01MzEsMjQgKzUzMCwxOSBA QCBzdGF0aWMgaW50IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHN0cnVjdCBhbWRncHVfY3NfcGFy c2VyICpwLAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCB2YWxpZGF0ZWQsIHR2LmhlYWQp IHsKIAkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGxvYmotPnR2LmJv KTsKLQkJYm9vbCBiaW5kaW5nX3VzZXJwdHIgPSBmYWxzZTsKIAkJc3RydWN0IG1tX3N0cnVjdCAq dXNlcm1tOwogCiAJCXVzZXJtbSA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJtbShiby0+dGJvLnR0 bSk7CiAJCWlmICh1c2VybW0gJiYgdXNlcm1tICE9IGN1cnJlbnQtPm1tKQogCQkJcmV0dXJuIC1F UEVSTTsKIAotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIHVzZXIgcGFnZXMgYW5kIG5vYm9keSBib3Vu ZCB0aGUgQk8gYWxyZWFkeSAqLwotCQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3Bh Z2VzKGJvLT50Ym8udHRtKSAmJgotCQkgICAgbG9iai0+dXNlcl9wYWdlcykgeworCQlpZiAoYW1k Z3B1X3R0bV90dF9pc191c2VycHRyKGJvLT50Ym8udHRtKSAmJgorCQkgICAgbG9iai0+dXNlcl9p bnZhbGlkYXRlZCkgewogCQkJYW1kZ3B1X2JvX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywKIAkJ CQkJCQlBTURHUFVfR0VNX0RPTUFJTl9DUFUpOwogCQkJciA9IHR0bV9ib192YWxpZGF0ZSgmYm8t PnRibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwogCQkJaWYgKHIpCiAJCQkJcmV0dXJuIHI7Ci0J CQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLAotCQkJCQkJICAgICBs b2JqLT51c2VyX3BhZ2VzKTsKLQkJCWJpbmRpbmdfdXNlcnB0ciA9IHRydWU7CiAJCX0KIAogCQlp ZiAocC0+ZXZpY3RhYmxlID09IGxvYmopCkBAIC01NTcsMTEgKzU1MSw2IEBAIHN0YXRpYyBpbnQg YW1kZ3B1X2NzX2xpc3RfdmFsaWRhdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJCXIg PSBhbWRncHVfY3NfdmFsaWRhdGUocCwgYm8pOwogCQlpZiAocikKIAkJCXJldHVybiByOwotCi0J CWlmIChiaW5kaW5nX3VzZXJwdHIpIHsKLQkJCWt2ZnJlZShsb2JqLT51c2VyX3BhZ2VzKTsKLQkJ CWxvYmotPnVzZXJfcGFnZXMgPSBOVUxMOwotCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTc2 LDcgKzU2NSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdw dV9jc19wYXJzZXIgKnAsCiAJc3RydWN0IGFtZGdwdV9ibyAqZ2RzOwogCXN0cnVjdCBhbWRncHVf Ym8gKmd3czsKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpvYTsKLQl1bnNpZ25lZCB0cmllcyA9IDEwOwor CXN0cnVjdCBsaXN0X2hlYWQgdXNlcnBhZ2VfbGlzdDsKIAlpbnQgcjsKIAogCUlOSVRfTElTVF9I RUFEKCZwLT52YWxpZGF0ZWQpOwpAQCAtNTg1LDcgKzU3NCw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1 X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJaWYgKGNzLT5pbi5i b19saXN0X2hhbmRsZSkgewogCQlpZiAocC0+Ym9fbGlzdCkKIAkJCXJldHVybiAtRUlOVkFMOwot CiAJCXIgPSBhbWRncHVfYm9fbGlzdF9nZXQoZnByaXYsIGNzLT5pbi5ib19saXN0X2hhbmRsZSwK IAkJCQkgICAgICAgJnAtPmJvX2xpc3QpOwogCQlpZiAocikKQEAgLTYwMCw3ICs1ODgsOCBAQCBz dGF0aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpw LAogCiAJYW1kZ3B1X2JvX2xpc3RfZ2V0X2xpc3QocC0+Ym9fbGlzdCwgJnAtPnZhbGlkYXRlZCk7 CiAJaWYgKHAtPmJvX2xpc3QtPmZpcnN0X3VzZXJwdHIgIT0gcC0+Ym9fbGlzdC0+bnVtX2VudHJp ZXMpCi0JCXAtPm1uID0gYW1kZ3B1X21uX2dldChwLT5hZGV2LCBBTURHUFVfTU5fVFlQRV9HRlgp OworCQlwLT5tbiA9IGFtZGdwdV9tbl9nZXQoY3VycmVudC0+bW0sIHAtPmFkZXYsCisJCQkJCUFN REdQVV9NTl9UWVBFX0dGWCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmZHVwbGljYXRlcyk7CiAJYW1k Z3B1X3ZtX2dldF9wZF9ibygmZnByaXYtPnZtLCAmcC0+dmFsaWRhdGVkLCAmcC0+dm1fcGQpOwpA QCAtNjA4LDc5ICs1OTcsNzIgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1 Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlpZiAocC0+dWZfZW50cnkudHYuYm8gJiYgIXR0bV90 b19hbWRncHVfYm8ocC0+dWZfZW50cnkudHYuYm8pLT5wYXJlbnQpCiAJCWxpc3RfYWRkKCZwLT51 Zl9lbnRyeS50di5oZWFkLCAmcC0+dmFsaWRhdGVkKTsKIAotCXdoaWxlICgxKSB7Ci0JCXN0cnVj dCBsaXN0X2hlYWQgbmVlZF9wYWdlczsKKwlyID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmcC0+ dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0cnVlLAorCQkJCSAgICZkdXBsaWNhdGVzKTsKKwlpZiAo dW5saWtlbHkociAhPSAwKSkgeworCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCisJCQlEUk1fRVJS T1IoInR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0K IAotCQlyID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVk LCB0cnVlLAotCQkJCQkgICAmZHVwbGljYXRlcyk7Ci0JCWlmICh1bmxpa2VseShyICE9IDApKSB7 Ci0JCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCi0JCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2 ZV9idWZmZXJzIGZhaWxlZC5cbiIpOwotCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwotCQl9CisJ SU5JVF9MSVNUX0hFQUQoJnVzZXJwYWdlX2xpc3QpOworCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNo X3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkgeworCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9 IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOwogCi0JCUlOSVRfTElTVF9IRUFEKCZuZWVkX3Bh Z2VzKTsKLQkJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19s aXN0KSB7Ci0JCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYu Ym8pOworCQlsaXN0X2RlbCgmZS0+dHYuaGVhZCk7CisJCWxpc3RfYWRkKCZlLT50di5oZWFkLCAm dXNlcnBhZ2VfbGlzdCk7CisJCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOworCX0KIAotCQkJaWYg KGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChiby0+dGJvLnR0bSwKLQkJCQkgJmUt PnVzZXJfaW52YWxpZGF0ZWQpICYmIGUtPnVzZXJfcGFnZXMpIHsKKwkvKiBHZXQgdXNlcnB0ciBi YWNraW5nIHBhZ2VzLiBJZiBwYWdlcyBhcmUgdXBkYXRlZCBhZnRlciByZWdpc3RlcmVkCisJICog aW4gYW1kZ3B1X2dlbV91c2VycHRyX2lvY3RsKCksIGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKCkg d2lsbCBkbworCSAqIGFtZGdwdV90dG1fYmFja2VuZF9iaW5kKCkgdG8gZmx1c2ggYW5kIGludmFs aWRhdGUgbmV3IHBhZ2VzCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZ1c2VycGFnZV9saXN0KSkg eworCQkvKiBVbnJlc2VydmUgZXZlcnl0aGluZyBhZ2FpbiwgdG8gYXZvaWQgY2lyY3VsYXIgbG9j a2luZyBjYXNlCisJCSAqIGJvOjpyZXNlcnZlIC0+IG1tYXAtPnNlbQorCQkgKi8KKwkJdHRtX2V1 X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7CiAKLQkJCQkv KiBXZSBhY3F1aXJlZCBhIHBhZ2UgYXJyYXksIGJ1dCBzb21lYm9keQotCQkJCSAqIGludmFsaWRh dGVkIGl0LiBGcmVlIGl0IGFuZCB0cnkgYWdhaW4KLQkJCQkgKi8KLQkJCQlyZWxlYXNlX3BhZ2Vz KGUtPnVzZXJfcGFnZXMsCi0JCQkJCSAgICAgIGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOwotCQkJ CWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsKLQkJCQllLT51c2VyX3BhZ2VzID0gTlVMTDsKKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShlLCAmdXNlcnBhZ2VfbGlzdCwgdHYuaGVhZCkgeworCQkJc3RydWN0 IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsKKwkJCWJvb2wgdXNl cnBhZ2VfaW52YWxpZGF0ZWQgPSBmYWxzZTsKKwkJCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJCQlp bnQgaTsKKworCQkJcGFnZXMgPSBrdm1hbGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2Vz LAorCQkJCQkJc2l6ZW9mKCpwYWdlcyksCisJCQkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7 CisJCQlpZiAoIXBhZ2VzKSB7CisJCQkJRFJNX0VSUk9SKCJjYWxsb2MgZmFpbHVyZVxuIik7CisJ CQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAKLQkJCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJf bmVlZHNfcGFnZXMoYm8tPnRiby50dG0pICYmCi0JCQkgICAgIWUtPnVzZXJfcGFnZXMpIHsKLQkJ CQlsaXN0X2RlbCgmZS0+dHYuaGVhZCk7Ci0JCQkJbGlzdF9hZGQoJmUtPnR2LmhlYWQsICZuZWVk X3BhZ2VzKTsKLQotCQkJCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOworCQkJciA9IGFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sIHBhZ2VzKTsKKwkJCWlmIChyKSB7CisJ CQkJa3ZmcmVlKHBhZ2VzKTsKKwkJCQlyZXR1cm4gcjsKIAkJCX0KLQkJfQogCi0JCWlmIChsaXN0 X2VtcHR5KCZuZWVkX3BhZ2VzKSkKLQkJCWJyZWFrOwotCi0JCS8qIFVucmVzZXJ2ZSBldmVyeXRo aW5nIGFnYWluLiAqLwotCQl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAm cC0+dmFsaWRhdGVkKTsKLQotCQkvKiBXZSB0cmllZCB0b28gbWFueSB0aW1lcywganVzdCBhYm9y dCAqLwotCQlpZiAoIS0tdHJpZXMpIHsKLQkJCXIgPSAtRURFQURMSzsKLQkJCURSTV9FUlJPUigi ZGVhZGxvY2sgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJCWdvdG8gZXJyb3JfZnJlZV9wYWdlczsK KwkJCWZvciAoaSA9IDA7IGkgPCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzOyBpKyspIHsKKwkJCQlp ZiAoYm8tPnRiby50dG0tPnBhZ2VzW2ldICE9IHBhZ2VzW2ldKSB7CisJCQkJCWJvLT50Ym8udHRt LT5wYWdlc1tpXSA9IHBhZ2VzW2ldOworCQkJCQl1c2VycGFnZV9pbnZhbGlkYXRlZCA9IHRydWU7 CisJCQkJfQorCQkJfQorCQkJZS0+dXNlcl9pbnZhbGlkYXRlZCA9IHVzZXJwYWdlX2ludmFsaWRh dGVkOworCQkJa3ZmcmVlKHBhZ2VzKTsKIAkJfQogCi0JCS8qIEZpbGwgdGhlIHBhZ2UgYXJyYXlz IGZvciBhbGwgdXNlcnB0cnMuICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm5lZWRfcGFn ZXMsIHR2LmhlYWQpIHsKLQkJCXN0cnVjdCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07Ci0K LQkJCWUtPnVzZXJfcGFnZXMgPSBrdm1hbGxvY19hcnJheSh0dG0tPm51bV9wYWdlcywKLQkJCQkJ CQkgc2l6ZW9mKHN0cnVjdCBwYWdlKiksCi0JCQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJP KTsKLQkJCWlmICghZS0+dXNlcl9wYWdlcykgewotCQkJCXIgPSAtRU5PTUVNOwotCQkJCURSTV9F UlJPUigiY2FsbG9jIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJCQlnb3RvIGVycm9y X2ZyZWVfcGFnZXM7Ci0JCQl9CisJCWxpc3Rfc3BsaWNlKCZ1c2VycGFnZV9saXN0LCAmcC0+dmFs aWRhdGVkKTsKIAotCQkJciA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXModHRtLCBlLT51 c2VyX3BhZ2VzKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJhbWRncHVfdHRtX3R0X2dl dF91c2VyX3BhZ2VzIGZhaWxlZC5cbiIpOwotCQkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsKLQkJ CQllLT51c2VyX3BhZ2VzID0gTlVMTDsKLQkJCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7Ci0JCQl9 CisJCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQs IHRydWUsCisJCQkJCSAgICZkdXBsaWNhdGVzKTsKKwkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsK KwkJCWlmIChyICE9IC1FUkVTVEFSVFNZUykKKwkJCQlEUk1fRVJST1IoInR0bV9ldV9yZXNlcnZl X2J1ZmZlcnMgZmFpbGVkLlxuIik7CisJCQlnb3RvIG91dDsKIAkJfQotCi0JCS8qIEFuZCB0cnkg YWdhaW4uICovCi0JCWxpc3Rfc3BsaWNlKCZuZWVkX3BhZ2VzLCAmcC0+dmFsaWRhdGVkKTsKIAl9 CiAKIAlhbWRncHVfY3NfZ2V0X3RocmVzaG9sZF9mb3JfbW92ZXMocC0+YWRldiwgJnAtPmJ5dGVz X21vdmVkX3RocmVzaG9sZCwKQEAgLTc0MywxNyArNzI1LDcgQEAgc3RhdGljIGludCBhbWRncHVf Y3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIGVycm9yX3ZhbGlkYXRl OgogCWlmIChyKQogCQl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+ dmFsaWRhdGVkKTsKLQotZXJyb3JfZnJlZV9wYWdlczoKLQotCWFtZGdwdV9ib19saXN0X2Zvcl9l YWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewotCQlpZiAoIWUtPnVzZXJfcGFnZXMp Ci0JCQljb250aW51ZTsKLQotCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2LmJv LT50dG0tPm51bV9wYWdlcyk7Ci0JCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsKLQl9Ci0KK291dDoK IAlyZXR1cm4gcjsKIH0KIApAQCAtMTIwNiw4ICsxMTc4LDcgQEAgc3RhdGljIGludCBhbWRncHVf Y3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCXN0cnVjdCBhbWRncHVfYm9f bGlzdF9lbnRyeSAqZTsKIAlzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iOwogCXVpbnQ2NF90IHNlcTsK LQotCWludCByOworCWludCByID0gMDsKIAogCWpvYiA9IHAtPmpvYjsKIAlwLT5qb2IgPSBOVUxM OwpAQCAtMTIxNiwxNSArMTE4NywyMSBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3Ry dWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJaWYgKHIpCiAJCWdvdG8gZXJyb3JfdW5sb2NrOwog Ci0JLyogTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgYWxsb3dlZCB3aGlsZSBob2xkaW5nIHRoZSBt biBsb2NrICovCisJLyogTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgYWxsb3dlZCB3aGlsZSBob2xk aW5nIHRoZSBtbiBsb2NrLgorCSAqIHAtPm1uIGlzIGhvbGQgdW50aWwgYW1kZ3B1X2NzX3N1Ym1p dCBpcyBmaW5pc2hlZCBhbmQgZmVuY2UgaXMgYWRkZWQKKwkgKiB0byBCT3MuCisJICovCiAJYW1k Z3B1X21uX2xvY2socC0+bW4pOworCisJLyogSWYgdXNlcnB0ciBhcmUgdXBkYXRlZCBhZnRlciBh bWRncHVfY3NfcGFyc2VyX2JvcygpLCByZXN0YXJ0IGNzICovCiAJYW1kZ3B1X2JvX2xpc3RfZm9y X2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19saXN0KSB7CiAJCXN0cnVjdCBhbWRncHVfYm8g KmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5ibyk7CiAKLQkJaWYgKGFtZGdwdV90dG1fdHRf dXNlcnB0cl9uZWVkc19wYWdlcyhiby0+dGJvLnR0bSkpIHsKLQkJCXIgPSAtRVJFU1RBUlRTWVM7 Ci0JCQlnb3RvIGVycm9yX2Fib3J0OwotCQl9CisJCXIgfD0gYW1kZ3B1X3R0bV90dF9nZXRfdXNl cl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKKwl9CisJaWYgKHIpIHsKKwkJciA9IC1FUkVTVEFS VFNZUzsKKwkJZ290byBlcnJvcl9hYm9ydDsKIAl9CiAKIAlqb2ItPm93bmVyID0gcC0+ZmlscDsK QEAgLTEyNzIsMTQgKzEyNDksMjAgQEAgc3RhdGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVj dCBhbWRncHVfY3NfcGFyc2VyICpwLAogaW50IGFtZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApCiB7CiAJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuaW9uIGRybV9hbWRn cHVfY3MgKmNzID0gZGF0YTsKLQlzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciBwYXJzZXIgPSB7fTsK LQlib29sIHJlc2VydmVkX2J1ZmZlcnMgPSBmYWxzZTsKKwl1bmlvbiBkcm1fYW1kZ3B1X2NzICpj czsKKwlzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciBwYXJzZXI7CisJYm9vbCByZXNlcnZlZF9idWZm ZXJzOworCWludCB0cmllcyA9IDEwOwogCWludCBpLCByOwogCiAJaWYgKCFhZGV2LT5hY2NlbF93 b3JraW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCityZXN0YXJ0OgorCW1lbXNldCgmcGFyc2VyLCAw LCBzaXplb2YocGFyc2VyKSk7CisJY3MgPSBkYXRhOworCXJlc2VydmVkX2J1ZmZlcnMgPSBmYWxz ZTsKKwogCXBhcnNlci5hZGV2ID0gYWRldjsKIAlwYXJzZXIuZmlscCA9IGZpbHA7CiAKQEAgLTEz MjEsNiArMTMwNCwxNSBAQCBpbnQgYW1kZ3B1X2NzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCkKIAogb3V0OgogCWFtZGdwdV9j c19wYXJzZXJfZmluaSgmcGFyc2VyLCByLCByZXNlcnZlZF9idWZmZXJzKTsKKworCWlmIChyID09 IC1FUkVTVEFSVFNZUykgeworCQlpZiAoIS0tdHJpZXMpIHsKKwkJCURSTV9FUlJPUigiUG9zc2li bGUgZGVhZGxvY2s/IFJldHJ5IHRvbyBtYW55IHRpbWVzXG4iKTsKKwkJCXJldHVybiAtRURFQURM SzsKKwkJfQorCQlnb3RvIHJlc3RhcnQ7CisJfQorCiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwppbmRleCA3YjNkMWViLi5mZjlhOGZkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCkBAIC0zMzYsMjYgKzMzNiwyNCBA QCBpbnQgYW1kZ3B1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCiAKIAkJciA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCB0cnVlKTsKIAkJaWYgKHIp Ci0JCQlnb3RvIGZyZWVfcGFnZXM7CisJCQlnb3RvIHVzZXJfcGFnZXNfZG9uZTsKIAogCQlhbWRn cHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBBTURHUFVfR0VNX0RPTUFJTl9HVFQpOwog CQlyID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7CiAJ CWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwogCQlpZiAocikKLQkJCWdvdG8gZnJlZV9wYWdlczsK KwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCX0KIAogCXIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVh dGUoZmlscCwgZ29iaiwgJmhhbmRsZSk7Ci0JLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0 ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cgKi8KLQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo Z29iaik7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIHVzZXJfcGFnZXNfZG9uZTsKIAog CWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKLQlyZXR1cm4gMDsKIAotZnJlZV9wYWdlczoKLQlyZWxl YXNlX3BhZ2VzKGJvLT50Ym8udHRtLT5wYWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7Cit1 c2VyX3BhZ2VzX2RvbmU6CisJaWYgKGFyZ3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX1ZB TElEQVRFKQorCQlhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0p OwogCiByZWxlYXNlX29iamVjdDoKIAlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ29iaik7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCmluZGV4IDU2NTk1YjMuLjZiNmJl Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCkBAIC0yMjksOCArMjI5 LDYgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1 X21uX25vZGUgKm5vZGUsCiAJCQl0cnVlLCBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwog CQlpZiAociA8PSAwKQogCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNl ciBib1xuIiwgcik7Ci0KLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50 dG0pOwogCX0KIH0KIApAQCAtMzU1LDE1ICszNTMsMTYgQEAgc3RhdGljIHN0cnVjdCBobW1fbWly cm9yX29wcyBhbWRncHVfaG1tX21pcnJvcl9vcHNbXSA9IHsKIC8qKgogICogYW1kZ3B1X21uX2dl dCAtIGNyZWF0ZSBITU0gbWlycm9yIGNvbnRleHQKICAqCisgKiBAbW06IHRoZSBtbSBzdHJ1Y3QK ICAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKICAqIEB0eXBlOiB0eXBlIG9mIE1NVSBu b3RpZmllciBjb250ZXh0CiAgKgotICogQ3JlYXRlcyBhIEhNTSBtaXJyb3IgY29udGV4dCBmb3Ig Y3VycmVudC0+bW0uCisgKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBtbS4KICAq Lwotc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKK3N0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IG1tX3N0cnVjdCAq bW0sCisJCQkJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJZW51bSBhbWRncHVfbW5f dHlwZSB0eXBlKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJc3Ry dWN0IGFtZGdwdV9tbiAqYW1uOwogCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BVX01OX0tFWSht bSwgdHlwZSk7CiAJaW50IHI7CkBAIC00MzMsNyArNDMyLDcgQEAgaW50IGFtZGdwdV9tbl9yZWdp c3RlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRyKQogCXN0cnVjdCBs aXN0X2hlYWQgYm9zOwogCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0OwogCi0JYW1uID0g YW1kZ3B1X21uX2dldChhZGV2LCB0eXBlKTsKKwlhbW4gPSBhbWRncHVfbW5fZ2V0KGN1cnJlbnQt Pm1tLCBhZGV2LCB0eXBlKTsKIAlpZiAoSVNfRVJSKGFtbikpCiAJCXJldHVybiBQVFJfRVJSKGFt bik7CiAKQEAgLTUxNSwzICs1MTQsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3RlcihzdHJ1 Y3QgYW1kZ3B1X2JvICpibykKIAltdXRleF91bmxvY2soJmFkZXYtPm1uX2xvY2spOwogfQogCisv KiBmbGFncyB1c2VkIGJ5IEhNTSBpbnRlcm5hbCwgbm90IHJlbGF0ZWQgdG8gQ1BVL0dQVSBQVEUg ZmxhZ3MgKi8KK3N0YXRpYyBjb25zdCB1aW50NjRfdCBobW1fcmFuZ2VfZmxhZ3NbSE1NX1BGTl9G TEFHX01BWF0gPSB7CisJCSgxIDw8IDApLCAvKiBITU1fUEZOX1ZBTElEICovCisJCSgxIDw8IDEp LCAvKiBITU1fUEZOX1dSSVRFICovCisJCTAgLyogSE1NX1BGTl9ERVZJQ0VfUFJJVkFURSAqLwor fTsKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV92YWx1ZXNbSE1NX1BGTl9WQUxV RV9NQVhdID0geworCQkweGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLwor CQkwLCAvKiBITU1fUEZOX05PTkUgKi8KKwkJMHhmZmZmZmZmZmZmZmZmZmZjVUwgLyogSE1NX1BG Tl9TUEVDSUFMICovCit9OworCit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShzdHJ1Y3QgaG1t X3JhbmdlICpyYW5nZSkKK3sKKwlpZiAocmFuZ2UpIHsKKwkJcmFuZ2UtPmZsYWdzID0gaG1tX3Jh bmdlX2ZsYWdzOworCQlyYW5nZS0+dmFsdWVzID0gaG1tX3JhbmdlX3ZhbHVlczsKKwkJcmFuZ2Ut PnBmbl9zaGlmdCA9IFBBR0VfU0hJRlQ7CisJCXJhbmdlLT5wZm5zID0gTlVMTDsKKwkJSU5JVF9M SVNUX0hFQUQoJnJhbmdlLT5saXN0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9tbi5oCmluZGV4IDBlMjc1MjYuLjU5ZWEzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9tbi5oCkBAIC0yNSw5ICsyNSwxMCBAQAogI2RlZmluZSBfX0FNREdQVV9NTl9I X18KIAogLyoKLSAqIE1NVSBOb3RpZmllcgorICogSE1NIG1pcnJvcgogICovCiBzdHJ1Y3QgYW1k Z3B1X21uOworc3RydWN0IGhtbV9yYW5nZTsKIAogZW51bSBhbWRncHVfbW5fdHlwZSB7CiAJQU1E R1BVX01OX1RZUEVfR0ZYLApAQCAtMzcsMTAgKzM4LDEyIEBAIGVudW0gYW1kZ3B1X21uX3R5cGUg ewogI2lmIGRlZmluZWQoQ09ORklHX0hNTSkKIHZvaWQgYW1kZ3B1X21uX2xvY2soc3RydWN0IGFt ZGdwdV9tbiAqbW4pOwogdm9pZCBhbWRncHVfbW5fdW5sb2NrKHN0cnVjdCBhbWRncHVfbW4gKm1u KTsKLXN0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCitzdHJ1Y3QgYW1kZ3B1X21uICphbWRncHVfbW5fZ2V0KHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLAorCQkJCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkJCWVudW0gYW1kZ3B1X21u X3R5cGUgdHlwZSk7CiBpbnQgYW1kZ3B1X21uX3JlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJv LCB1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCBhbWRncHVfbW5fdW5yZWdpc3RlcihzdHJ1Y3Qg YW1kZ3B1X2JvICpibyk7Cit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShzdHJ1Y3QgaG1tX3Jh bmdlICpyYW5nZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9tbl9sb2NrKHN0 cnVjdCBhbWRncHVfbW4gKm1uKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9tbl91bmxv Y2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdHRtLmMKaW5kZXggM2E2ODAyOC4uYjA1MzdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2Vt YXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUu aD4KKyNpbmNsdWRlIDxsaW51eC9obW0uaD4KICNpbmNsdWRlICJhbWRncHUuaCIKICNpbmNsdWRl ICJhbWRncHVfb2JqZWN0LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X3RyYWNlLmgiCkBAIC03OTksMTEg KzgwMCw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFtZGdwdV90dG1faW9fbWVtX3BmbihzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogLyoKICAqIFRUTSBiYWNrZW5kIGZ1bmN0aW9ucy4K ICAqLwotc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCB7Ci0Jc3RydWN0IGxpc3RfaGVh ZAlsaXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLX07Ci0KIHN0cnVjdCBhbWRncHVf dHRtX3R0IHsKIAlzdHJ1Y3QgdHRtX2RtYV90dAl0dG07CiAJdTY0CQkJb2Zmc2V0OwpAQCAtODEy LDg1ICs4MDgsOTEgQEAgc3RydWN0IGFtZGdwdV90dG1fdHQgewogCXVpbnQzMl90CQl1c2VyZmxh Z3M7CiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgZ3VwdGFza2xvY2s7CiAJc3RydWN0IGxpc3Rf aGVhZCAgICAgICAgZ3VwdGFza3M7Ci0JYXRvbWljX3QJCW1tdV9pbnZhbGlkYXRpb25zOwotCXVp bnQzMl90CQlsYXN0X3NldF9wYWdlczsKKwlzdHJ1Y3QgaG1tX3JhbmdlCXJhbmdlOwogfTsKIAog LyoqCi0gKiBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIC0gUGluIHBhZ2VzIG9mIG1lbW9y eSBwb2ludGVkIHRvIGJ5IGEgVVNFUlBUUgotICogcG9pbnRlciB0byBtZW1vcnkKKyAqIGFtZGdw dV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgLSBnZXQgZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMgdGhh dCBiYWNrIHVzZXIKKyAqIG1lbW9yeSBhbmQgc3RhcnQgSE1NIHRyYWNraW5nIENQVSBwYWdlIHRh YmxlIHVwZGF0ZQogICoKLSAqIENhbGxlZCBieSBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwoKSBh bmQgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKS4KLSAqIFRoaXMgcHJvdmlkZXMgYSB3cmFwcGVyIGFy b3VuZCB0aGUgZ2V0X3VzZXJfcGFnZXMoKSBjYWxsIHRvIHByb3ZpZGUKLSAqIGRldmljZSBhY2Nl c3NpYmxlIHBhZ2VzIHRoYXQgYmFjayB1c2VyIG1lbW9yeS4KKyAqIENhbGxpbmcgZnVuY3Rpb24g bXVzdCBjYWxsIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5nZV9kb25lKCkgb25jZSBhbmQgb25s eQorICogb25jZSBhZnRlcndhcmRzIHRvIHN0b3AgSE1NIHRyYWNraW5nCiAgKi8KIGludCBhbWRn cHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2Ug KipwYWdlcykKIHsKIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CiAJ c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBndHQtPnVzZXJ0YXNrLT5tbTsKLQl1bnNpZ25lZCBpbnQg ZmxhZ3MgPSAwOwotCXVuc2lnbmVkIHBpbm5lZCA9IDA7Ci0JaW50IHI7CisJdW5zaWduZWQgbG9u ZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsKKwlzdHJ1 Y3QgaG1tX3JhbmdlICpyYW5nZSA9ICZndHQtPnJhbmdlOworCWludCByLCBpOwogCiAJaWYgKCFt bSkgLyogSGFwcGVucyBkdXJpbmcgcHJvY2VzcyBzaHV0ZG93biAqLwogCQlyZXR1cm4gLUVTUkNI OwogCi0JaWYgKCEoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfUkVBRE9OTFkp KQotCQlmbGFncyB8PSBGT0xMX1dSSVRFOworCWFtZGdwdV9obW1faW5pdF9yYW5nZShyYW5nZSk7 CiAKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAKLQlpZiAoZ3R0LT51c2VyZmxhZ3MgJiBB TURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkpIHsKLQkJLyoKLQkJICogY2hlY2sgdGhhdCB3ZSBv bmx5IHVzZSBhbm9ueW1vdXMgbWVtb3J5IHRvIHByZXZlbnQgcHJvYmxlbXMKLQkJICogd2l0aCB3 cml0ZWJhY2sKLQkJICovCi0JCXVuc2lnbmVkIGxvbmcgZW5kID0gZ3R0LT51c2VycHRyICsgdHRt LT5udW1fcGFnZXMgKiBQQUdFX1NJWkU7Ci0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwor CXJhbmdlLT52bWEgPSBmaW5kX3ZtYShtbSwgZ3R0LT51c2VycHRyKTsKKwlpZiAoIXJhbmdlLT52 bWEgfHwgcmFuZ2UtPnZtYS0+dm1fZmlsZSB8fCByYW5nZS0+dm1hLT52bV9lbmQgPCBlbmQpIHsK KwkJciA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCXJhbmdlLT5wZm5zID0ga3ZtYWxsb2Nf YXJyYXkodHRtLT5udW1fcGFnZXMsIHNpemVvZih1aW50NjRfdCksCisJCQkJR0ZQX0tFUk5FTCB8 IF9fR0ZQX1pFUk8pOworCWlmIChyYW5nZS0+cGZucyA9PSBOVUxMKSB7CisJCXIgPSAtRU5PTUVN OworCQlnb3RvIG91dDsKKwl9CisJcmFuZ2UtPnN0YXJ0ID0gZ3R0LT51c2VycHRyOworCXJhbmdl LT5lbmQgPSBlbmQ7CiAKLQkJdm1hID0gZmluZF92bWEobW0sIGd0dC0+dXNlcnB0cik7Ci0JCWlm ICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX2VuZCA8IGVuZCkgewotCQkJdXBfcmVh ZCgmbW0tPm1tYXBfc2VtKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KKwlmb3IgKGkgPSAwOyBp IDwgdHRtLT5udW1fcGFnZXM7IGkrKykgeworCQlyYW5nZS0+cGZuc1tpXSA9IHJhbmdlLT5mbGFn c1tITU1fUEZOX1ZBTElEXTsKKwkJcmFuZ2UtPnBmbnNbaV0gfD0gYW1kZ3B1X3R0bV90dF9pc19y ZWFkb25seSh0dG0pID8KKwkJCQkJMCA6IHJhbmdlLT5mbGFnc1tITU1fUEZOX1dSSVRFXTsKIAl9 CiAKLQkvKiBsb29wIGVub3VnaCB0aW1lcyB1c2luZyBjb250aWd1b3VzIHBhZ2VzIG9mIG1lbW9y eSAqLwotCWRvIHsKLQkJdW5zaWduZWQgbnVtX3BhZ2VzID0gdHRtLT5udW1fcGFnZXMgLSBwaW5u ZWQ7Ci0JCXVpbnQ2NF90IHVzZXJwdHIgPSBndHQtPnVzZXJwdHIgKyBwaW5uZWQgKiBQQUdFX1NJ WkU7Ci0JCXN0cnVjdCBwYWdlICoqcCA9IHBhZ2VzICsgcGlubmVkOwotCQlzdHJ1Y3QgYW1kZ3B1 X3R0bV9ndXBfdGFza19saXN0IGd1cHRhc2s7CisJLyogVGhpcyBtYXkgdHJpZ2dsZXMgcGFnZSB0 YWJsZSB1cGRhdGUgKi8KKwlyID0gaG1tX3ZtYV9mYXVsdChyYW5nZSwgdHJ1ZSk7CisJaWYgKHIp CisJCWdvdG8gb3V0X2ZyZWVfcGZuczsKIAotCQlndXB0YXNrLnRhc2sgPSBjdXJyZW50OwotCQlz cGluX2xvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCQlsaXN0X2FkZCgmZ3VwdGFzay5saXN0LCAm Z3R0LT5ndXB0YXNrcyk7Ci0JCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKKwlmb3Ig KGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykKKwkJcGFnZXNbaV0gPSBobW1fcGZuX3Rv X3BhZ2UocmFuZ2UsIHJhbmdlLT5wZm5zW2ldKTsKIAotCQlpZiAobW0gPT0gY3VycmVudC0+bW0p Ci0JCQlyID0gZ2V0X3VzZXJfcGFnZXModXNlcnB0ciwgbnVtX3BhZ2VzLCBmbGFncywgcCwgTlVM TCk7Ci0JCWVsc2UKLQkJCXIgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUoZ3R0LT51c2VydGFzaywK LQkJCQkJbW0sIHVzZXJwdHIsIG51bV9wYWdlcywKLQkJCQkJZmxhZ3MsIHAsIE5VTEwsIE5VTEwp OworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIDA7CiAKLQkJc3Bpbl9sb2NrKCZn dHQtPmd1cHRhc2tsb2NrKTsKLQkJbGlzdF9kZWwoJmd1cHRhc2subGlzdCk7Ci0JCXNwaW5fdW5s b2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKK291dF9mcmVlX3BmbnM6CisJa3ZmcmVlKHJhbmdlLT5w Zm5zKTsKKwlyYW5nZS0+cGZucyA9IE5VTEw7CitvdXQ6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2Vt KTsKKwlyZXR1cm4gcjsKK30KIAotCQlpZiAociA8IDApCi0JCQlnb3RvIHJlbGVhc2VfcGFnZXM7 CisvKioKKyAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5nZV9kb25lIC0gc3RvcCBITU0gdHJh Y2sgdGhlIENQVSBwYWdlIHRhYmxlIGNoYW5nZQorICogQ2hlY2sgaWYgdGhlIHBhZ2VzIGJhY2tp bmcgdGhpcyB0dG0gcmFuZ2UgaGF2ZSBiZWVuIGludmFsaWRhdGVkCisgKgorICogUmV0dXJuczog dHJ1ZSBpZiBwYWdlcyBhcmUgaW52YWxpZGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGV5J3Zl IGJlZW4gc2V0CisgKi8KK2Jvb2wgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0 cnVjdCB0dG1fdHQgKnR0bSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQg Kil0dG07CisJaW50IHI7CiAKLQkJcGlubmVkICs9IHI7CisJaWYgKGd0dCA9PSBOVUxMIHx8ICFn dHQtPnVzZXJwdHIpCisJCXJldHVybiBmYWxzZTsKIAotCX0gd2hpbGUgKHBpbm5lZCA8IHR0bS0+ bnVtX3BhZ2VzKTsKKwlyID0gIWhtbV92bWFfcmFuZ2VfZG9uZSgmZ3R0LT5yYW5nZSk7CiAKLQl1 cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOworCWlmIChndHQtPnJhbmdlLnBmbnMp IHsKKwkJa3ZmcmVlKGd0dC0+cmFuZ2UucGZucyk7CisJCWd0dC0+cmFuZ2UucGZucyA9IE5VTEw7 CisJfQogCi1yZWxlYXNlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMocGFnZXMsIHBpbm5lZCk7Ci0J dXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtOTAzLDE2ICs5MDUs MTAgQEAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRt LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogICovCiB2b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJf cGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewotCXN0cnVj dCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKIAl1bnNpZ25lZCBpOwogCi0JZ3R0 LT5sYXN0X3NldF9wYWdlcyA9IGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsK LQlmb3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7ICsraSkgewotCQlpZiAodHRtLT5wYWdl c1tpXSkKLQkJCXB1dF9wYWdlKHR0bS0+cGFnZXNbaV0pOwotCisJZm9yIChpID0gMDsgaSA8IHR0 bS0+bnVtX3BhZ2VzOyArK2kpCiAJCXR0bS0+cGFnZXNbaV0gPSBwYWdlcyA/IHBhZ2VzW2ldIDog TlVMTDsKLQl9CiB9CiAKIC8qKgpAQCAtOTk3LDkgKzk5Myw2IEBAIHN0YXRpYyB2b2lkIGFtZGdw dV90dG1fdHRfdW5waW5fdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiAJLyogdW5tYXAgdGhl IHBhZ2VzIG1hcHBlZCB0byB0aGUgZGV2aWNlICovCiAJZG1hX3VubWFwX3NnKGFkZXYtPmRldiwg dHRtLT5zZy0+c2dsLCB0dG0tPnNnLT5uZW50cywgZGlyZWN0aW9uKTsKIAotCS8qIG1hcmsgdGhl IHBhZ2VzIGFzIGRpcnR5ICovCi0JYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXModHRtKTsK LQogCXNnX2ZyZWVfdGFibGUodHRtLT5zZyk7CiB9CiAKQEAgLTEzNTIsOCArMTM0NSw2IEBAIGlu dCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0X3Qg YWRkciwKIAogCXNwaW5fbG9ja19pbml0KCZndHQtPmd1cHRhc2tsb2NrKTsKIAlJTklUX0xJU1Rf SEVBRCgmZ3R0LT5ndXB0YXNrcyk7Ci0JYXRvbWljX3NldCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9u cywgMCk7Ci0JZ3R0LT5sYXN0X3NldF9wYWdlcyA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEz ODMsNyArMTM3NCw2IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3Qg dHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJICB1bnNpZ25lZCBsb25nIGVu ZCkKIHsKIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07Ci0Jc3RydWN0 IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBzaXplOwog CiAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpCkBAIC0xMzk2LDQ4ICsxMzg2LDIw IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0s IHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJaWYgKGd0dC0+dXNlcnB0ciA+IGVuZCB8fCBndHQtPnVz ZXJwdHIgKyBzaXplIDw9IHN0YXJ0KQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBTZWFyY2ggdGhl IGxpc3RzIG9mIHRhc2tzIHRoYXQgaG9sZCB0aGlzIG1hcHBpbmcgYW5kIHNlZQotCSAqIGlmIGN1 cnJlbnQgaXMgb25lIG9mIHRoZW0uICBJZiBpdCBpcyByZXR1cm4gZmFsc2UuCi0JICovCi0Jc3Bp bl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAm Z3R0LT5ndXB0YXNrcywgbGlzdCkgewotCQlpZiAoZW50cnktPnRhc2sgPT0gY3VycmVudCkgewot CQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0JfQotCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsKLQotCWF0b21pY19pbmMoJmd0 dC0+bW11X2ludmFsaWRhdGlvbnMpOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgotICogYW1k Z3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRhdGVkIC0gSGFzIHRoZSB0dG1fdHQgb2JqZWN0IGJl ZW4gaW52YWxpZGF0ZWQ/CisgKiBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIgLSBIYXZlIHRoZSBw YWdlcyBiYWNraW5nIGJ5IHVzZXJwdHI/CiAgKi8KLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRy X2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwKLQkJCQkgICAgICAgaW50ICpsYXN0X2lu dmFsaWRhdGVkKQotewotCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsK LQlpbnQgcHJldl9pbnZhbGlkYXRlZCA9ICpsYXN0X2ludmFsaWRhdGVkOwotCi0JKmxhc3RfaW52 YWxpZGF0ZWQgPSBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7Ci0JcmV0dXJu IHByZXZfaW52YWxpZGF0ZWQgIT0gKmxhc3RfaW52YWxpZGF0ZWQ7Ci19Ci0KLS8qKgotICogYW1k Z3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzIC0gSGF2ZSB0aGUgcGFnZXMgYmFja2luZyB0 aGlzIHR0bV90dCBvYmplY3QKLSAqIGJlZW4gaW52YWxpZGF0ZWQgc2luY2UgdGhlIGxhc3QgdGlt ZSB0aGV5J3ZlIGJlZW4gc2V0PwotICovCi1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVk c19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pCitib29sIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0 cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiB7CiAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2 b2lkICopdHRtOwogCiAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpCiAJCXJldHVy biBmYWxzZTsKIAotCXJldHVybiBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucykg IT0gZ3R0LT5sYXN0X3NldF9wYWdlczsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmggYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgKaW5kZXggZmU4ZjI3Ni4uYWVlZWE3NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaApAQCAtMTA0LDYgKzEwNCw3IEBA IGludCBhbWRncHVfdHRtX2FsbG9jX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7 CiBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0 Ym8pOwogCiBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0 dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpOworYm9vbCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3Bh Z2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKTsKIHZvaWQgYW1kZ3B1X3R0bV90dF9zZXRfdXNl cl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpOwogdm9pZCBh bWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogaW50IGFt ZGdwdV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1aW50NjRfdCBhZGRy LApAQCAtMTE0LDcgKzExNSw3IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihz dHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJICB1bnNpZ25lZCBs b25nIGVuZCk7CiBib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3Qg dHRtX3R0ICp0dG0sCiAJCQkJICAgICAgIGludCAqbGFzdF9pbnZhbGlkYXRlZCk7Ci1ib29sIGFt ZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOworYm9v bCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKTsKIGJvb2wgYW1k Z3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogdWludDY0X3QgYW1k Z3B1X3R0bV90dF9wZGVfZmxhZ3Moc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgdHRtX21lbV9y ZWcgKm1lbSk7CiB1aW50NjRfdCBhbWRncHVfdHRtX3R0X3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwgc3RydWN0IHR0bV90dCAqdHRtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdm0uYwppbmRleCA2OTA0ZDc5Li5mYTViZjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdm0uYwpAQCAtNjE3LDcgKzYxNyw2IEBAIHZvaWQgYW1kZ3B1X3ZtX2dl dF9wZF9ibyhzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKIAllbnRyeS0+cHJpb3JpdHkgPSAwOwogCWVu dHJ5LT50di5ibyA9ICZ2bS0+cm9vdC5iYXNlLmJvLT50Ym87CiAJZW50cnktPnR2LnNoYXJlZCA9 IHRydWU7Ci0JZW50cnktPnVzZXJfcGFnZXMgPSBOVUxMOwogCWxpc3RfYWRkKCZlbnRyeS0+dHYu aGVhZCwgdmFsaWRhdGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuYwppbmRleCBhM2I5MzM5Li44NWJlNzYyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21h bmFnZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVl X21hbmFnZXIuYwpAQCAtMTE2NCw2ICsxMTY0LDMzIEBAIHN0YXRpYyBpbnQgY3JlYXRlX3F1ZXVl X2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLCBzdHJ1Y3QgcXVldWUgKnEs CiAKIAlyZXR2YWwgPSAwOwogCisJLyogRG8gaW5pdF9tcWQgYmVmb3JlIGRxbV9sb2NrKGRxbSkg dG8gYXZvaWQgY2lyY3VsYXIgbG9ja2luZyBvcmRlcjoKKwkgKiBsb2NrKGRxbSkgLT4gYm86OnJl c2VydmUKKwkgKi8KKwltcWRfbWdyID0gZHFtLT5vcHMuZ2V0X21xZF9tYW5hZ2VyKGRxbSwKKwkJ CWdldF9tcWRfdHlwZV9mcm9tX3F1ZXVlX3R5cGUocS0+cHJvcGVydGllcy50eXBlKSk7CisKKwlp ZiAoIW1xZF9tZ3IpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJ LyoKKwkgKiBFdmljdGlvbiBzdGF0ZSBsb2dpYzogd2Ugb25seSBtYXJrIGFjdGl2ZSBxdWV1ZXMg YXMgZXZpY3RlZAorCSAqIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiByZXN0b3JpbmcgaW5hY3Rp dmUgcXVldWVzIGxhdGVyCisJICovCisJaWYgKHFwZC0+ZXZpY3RlZCkKKwkJcS0+cHJvcGVydGll cy5pc19ldmljdGVkID0gKHEtPnByb3BlcnRpZXMucXVldWVfc2l6ZSA+IDAgJiYKKwkJCQkJICAg IHEtPnByb3BlcnRpZXMucXVldWVfcGVyY2VudCA+IDAgJiYKKwkJCQkJICAgIHEtPnByb3BlcnRp ZXMucXVldWVfYWRkcmVzcyAhPSAwKTsKKwlkcW0tPmFzaWNfb3BzLmluaXRfc2RtYV92bShkcW0s IHEsIHFwZCk7CisJcS0+cHJvcGVydGllcy50YmFfYWRkciA9IHFwZC0+dGJhX2FkZHI7CisJcS0+ cHJvcGVydGllcy50bWFfYWRkciA9IHFwZC0+dG1hX2FkZHI7CisJcmV0dmFsID0gbXFkX21nci0+ aW5pdF9tcWQobXFkX21nciwgJnEtPm1xZCwgJnEtPm1xZF9tZW1fb2JqLAorCQkJCSZxLT5nYXJ0 X21xZF9hZGRyLCAmcS0+cHJvcGVydGllcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisK IAlkcW1fbG9jayhkcW0pOwogCiAJaWYgKGRxbS0+dG90YWxfcXVldWVfY291bnQgPj0gbWF4X251 bV9vZl9xdWV1ZXNfcGVyX2RldmljZSkgewpAQCAtMTE4NywzMCArMTIxNCw2IEBAIHN0YXRpYyBp bnQgY3JlYXRlX3F1ZXVlX2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLCBz dHJ1Y3QgcXVldWUgKnEsCiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXRfZGVhbGxvY2F0ZV9zZG1h X3F1ZXVlOwogCi0JbXFkX21nciA9IGRxbS0+b3BzLmdldF9tcWRfbWFuYWdlcihkcW0sCi0JCQln ZXRfbXFkX3R5cGVfZnJvbV9xdWV1ZV90eXBlKHEtPnByb3BlcnRpZXMudHlwZSkpOwotCi0JaWYg KCFtcWRfbWdyKSB7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2RlYWxsb2NhdGVf ZG9vcmJlbGw7Ci0JfQotCS8qCi0JICogRXZpY3Rpb24gc3RhdGUgbG9naWM6IHdlIG9ubHkgbWFy ayBhY3RpdmUgcXVldWVzIGFzIGV2aWN0ZWQKLQkgKiB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2Yg cmVzdG9yaW5nIGluYWN0aXZlIHF1ZXVlcyBsYXRlcgotCSAqLwotCWlmIChxcGQtPmV2aWN0ZWQp Ci0JCXEtPnByb3BlcnRpZXMuaXNfZXZpY3RlZCA9IChxLT5wcm9wZXJ0aWVzLnF1ZXVlX3NpemUg PiAwICYmCi0JCQkJCSAgICBxLT5wcm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPiAwICYmCi0JCQkJ CSAgICBxLT5wcm9wZXJ0aWVzLnF1ZXVlX2FkZHJlc3MgIT0gMCk7Ci0KLQlkcW0tPmFzaWNfb3Bz LmluaXRfc2RtYV92bShkcW0sIHEsIHFwZCk7Ci0KLQlxLT5wcm9wZXJ0aWVzLnRiYV9hZGRyID0g cXBkLT50YmFfYWRkcjsKLQlxLT5wcm9wZXJ0aWVzLnRtYV9hZGRyID0gcXBkLT50bWFfYWRkcjsK LQlyZXR2YWwgPSBtcWRfbWdyLT5pbml0X21xZChtcWRfbWdyLCAmcS0+bXFkLCAmcS0+bXFkX21l bV9vYmosCi0JCQkJJnEtPmdhcnRfbXFkX2FkZHIsICZxLT5wcm9wZXJ0aWVzKTsKLQlpZiAocmV0 dmFsKQotCQlnb3RvIG91dF9kZWFsbG9jYXRlX2Rvb3JiZWxsOwogCiAJbGlzdF9hZGQoJnEtPmxp c3QsICZxcGQtPnF1ZXVlc19saXN0KTsKIAlxcGQtPnF1ZXVlX2NvdW50Kys7CkBAIC0xMjM0LDE0 ICsxMjM3LDEyIEBAIHN0YXRpYyBpbnQgY3JlYXRlX3F1ZXVlX2Nwc2NoKHN0cnVjdCBkZXZpY2Vf cXVldWVfbWFuYWdlciAqZHFtLCBzdHJ1Y3QgcXVldWUgKnEsCiAJZHFtX3VubG9jayhkcW0pOwog CXJldHVybiByZXR2YWw7CiAKLW91dF9kZWFsbG9jYXRlX2Rvb3JiZWxsOgotCWRlYWxsb2NhdGVf ZG9vcmJlbGwocXBkLCBxKTsKIG91dF9kZWFsbG9jYXRlX3NkbWFfcXVldWU6CiAJaWYgKHEtPnBy b3BlcnRpZXMudHlwZSA9PSBLRkRfUVVFVUVfVFlQRV9TRE1BKQogCQlkZWFsbG9jYXRlX3NkbWFf cXVldWUoZHFtLCBxLT5zZG1hX2lkKTsKIG91dF91bmxvY2s6CiAJZHFtX3VubG9jayhkcW0pOwot CitvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTQwNCw4ICsxNDA1LDYgQEAgc3RhdGlj IGludCBkZXN0cm95X3F1ZXVlX2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFt LAogCQkJcXBkLT5yZXNldF93YXZlZnJvbnRzID0gdHJ1ZTsKIAl9CiAKLQltcWRfbWdyLT51bmlu aXRfbXFkKG1xZF9tZ3IsIHEtPm1xZCwgcS0+bXFkX21lbV9vYmopOwotCiAJLyoKIAkgKiBVbmNv bmRpdGlvbmFsbHkgZGVjcmVtZW50IHRoaXMgY291bnRlciwgcmVnYXJkbGVzcyBvZiB0aGUgcXVl dWUncwogCSAqIHR5cGUKQEAgLTE0MTYsNiArMTQxNSw5IEBAIHN0YXRpYyBpbnQgZGVzdHJveV9x dWV1ZV9jcHNjaChzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwKIAogCWRxbV91bmxv Y2soZHFtKTsKIAorCS8qIERvIHVuaW5pdF9tcWQgYWZ0ZXIgZHFtX3VubG9jayhkcW0pIHRvIGF2 b2lkIGNpcmN1bGFyIGxvY2tpbmcgKi8KKwltcWRfbWdyLT51bmluaXRfbXFkKG1xZF9tZ3IsIHEt Pm1xZCwgcS0+bXFkX21lbV9vYmopOworCiAJcmV0dXJuIHJldHZhbDsKIAogZmFpbGVkOgpAQCAt MTYzNyw3ICsxNjM5LDExIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc190ZXJtaW5hdGlvbl9jcHNjaChz dHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwKIAkJcXBkLT5yZXNldF93YXZlZnJvbnRz ID0gZmFsc2U7CiAJfQogCi0JLyogbGFzdGx5LCBmcmVlIG1xZCByZXNvdXJjZXMgKi8KKwlkcW1f dW5sb2NrKGRxbSk7CisKKwkvKiBMYXN0bHksIGZyZWUgbXFkIHJlc291cmNlcy4KKwkgKiBEbyB1 bmluaXRfbXFkKCkgYWZ0ZXIgZHFtX3VubG9jayB0byBhdm9pZCBjaXJjdWxhciBsb2NraW5nLgor CSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxLCBuZXh0LCAmcXBkLT5xdWV1ZXNfbGlz dCwgbGlzdCkgewogCQltcWRfbWdyID0gZHFtLT5vcHMuZ2V0X21xZF9tYW5hZ2VyKGRxbSwKIAkJ CWdldF9tcWRfdHlwZV9mcm9tX3F1ZXVlX3R5cGUocS0+cHJvcGVydGllcy50eXBlKSk7CkBAIC0x NjUxLDcgKzE2NTcsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfdGVybWluYXRpb25fY3BzY2goc3Ry dWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sCiAJfQogCiBvdXQ6Ci0JZHFtX3VubG9jayhk cW0pOwogCXJldHVybiByZXR2YWw7CiB9CiAKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngK