From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felix Kuehling Subject: [PATCH 16/25] drm/amdkfd: Implement KFD process eviction/restore Date: Fri, 26 Jan 2018 20:09:32 -0500 Message-ID: <1517015381-1080-17-git-send-email-Felix.Kuehling@amd.com> References: <1517015381-1080-1-git-send-email-Felix.Kuehling@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1517015381-1080-1-git-send-email-Felix.Kuehling-5C7GfCeVMHo@public.gmane.org> 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, oded.gabbay-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Cc: Felix Kuehling , Harish Kasiviswanathan V2hlbiB0aGUgVFRNIG1lbW9yeSBtYW5hZ2VyIGluIEtHRCBldmljdHMgQk9zLCBhbGwgdXNlciBt b2RlIHF1ZXVlcwpwb3RlbnRpYWxseSBhY2Nlc3NpbmcgdGhlc2UgQk9zIG11c3QgYmUgZXZpY3Rl ZCB0ZW1wb3JhcmlseS4gT25jZQp1c2VyIG1vZGUgcXVldWVzIGFyZSBldmljdGVkLCB0aGUgZXZp Y3Rpb24gZmVuY2UgaXMgc2lnbmFsZWQsCmFsbG93aW5nIHRoZSBtaWdyYXRpb24gb2YgdGhlIEJP IHRvIHByb2NlZWQuCgpBIGRlbGF5ZWQgd29ya2VyIGlzIHNjaGVkdWxlZCB0byByZXN0b3JlIGFs bCB0aGUgQk9zIGJlbG9uZ2luZyB0bwp0aGUgZXZpY3RlZCBwcm9jZXNzIGFuZCByZXN0YXJ0IGl0 cyBxdWV1ZXMuCgpEdXJpbmcgc3VzcGVuZC9yZXN1bWUgb2YgdGhlIEdQVSB3ZSBhbHNvIGV2aWN0 IGFsbCBwcm9jZXNzZXMgdG8gYWxsb3cKS0dEIHRvIHNhdmUgQk9zIGluIHN5c3RlbSBtZW1vcnks IHNpbmNlIFZSQU0gd2lsbCBiZSBsb3N0LgoKU2lnbmVkLW9mZi1ieTogSGFyaXNoIEthc2l2aXN3 YW5hdGhhbiA8SGFyaXNoLkthc2l2aXN3YW5hdGhhbkBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBG ZWxpeCBLdWVobGluZyA8RmVsaXguS3VlaGxpbmdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMgICAgICAgICAgICB8ICA2NSArKysrKy0KIC4uLi9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMgIHwgMjE5ICsrKysr KysrKysrKysrKysrKysrLQogLi4uL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVl X21hbmFnZXIuaCAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21vZHVs ZS5jICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3By aXYuaCAgICAgICAgICAgICAgfCAgMzIgKystCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9r ZmRfcHJvY2Vzcy5jICAgICAgICAgICB8IDIxMyArKysrKysrKysrKysrKysrKysrKwogNiBmaWxl cyBjaGFuZ2VkLCA1MzcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMKaW5kZXggNjEyYWZhZi4uOTI5OWE5MSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYwpAQCAtMzIsNiArMzIsNyBAQAogI2lu Y2x1ZGUgImN3c3JfdHJhcF9oYW5kbGVyX2dmeDguYXNtIgogCiAjZGVmaW5lIE1RRF9TSVpFX0FM SUdORUQgNzY4CitzdGF0aWMgYXRvbWljX3Qga2ZkX2RldmljZV9zdXNwZW5kZWQgPSBBVE9NSUNf SU5JVCgwKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVV9WMl9NT0RVTEUpIHx8IGRl ZmluZWQoQ09ORklHX0FNRF9JT01NVV9WMikKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2Rldmlj ZV9pbmZvIGthdmVyaV9kZXZpY2VfaW5mbyA9IHsKQEAgLTU0NSw2ICs1NDYsMTAgQEAgdm9pZCBr Z2Qya2ZkX3N1c3BlbmQoc3RydWN0IGtmZF9kZXYgKmtmZCkKIAlpZiAoIWtmZC0+aW5pdF9jb21w bGV0ZSkKIAkJcmV0dXJuOwogCisJLyogRm9yIGZpcnN0IEtGRCBkZXZpY2Ugc3VzcGVuZCBhbGwg dGhlIEtGRCBwcm9jZXNzZXMgKi8KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmtmZF9kZXZpY2Vf c3VzcGVuZGVkKSA9PSAxKQorCQlrZmRfc3VzcGVuZF9hbGxfcHJvY2Vzc2VzKCk7CisKIAlrZmQt PmRxbS0+b3BzLnN0b3Aoa2ZkLT5kcW0pOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQU1EX0lPTU1V X1YyX01PRFVMRSkgfHwgZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VX1YyKQpAQCAtNTYxLDExICs1 NjYsMjEgQEAgdm9pZCBrZ2Qya2ZkX3N1c3BlbmQoc3RydWN0IGtmZF9kZXYgKmtmZCkKIAogaW50 IGtnZDJrZmRfcmVzdW1lKHN0cnVjdCBrZmRfZGV2ICprZmQpCiB7CisJaW50IHJldCwgY291bnQ7 CisKIAlpZiAoIWtmZC0+aW5pdF9jb21wbGV0ZSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4ga2Zk X3Jlc3VtZShrZmQpOworCXJldCA9IGtmZF9yZXN1bWUoa2ZkKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJY291bnQgPSBhdG9taWNfZGVjX3JldHVybigma2ZkX2RldmljZV9zdXNwZW5k ZWQpOworCVdBUk5fT05DRShjb3VudCA8IDAsICJLRkQgc3VzcGVuZCAvIHJlc3VtZSByZWYuIGVy cm9yIik7CisJaWYgKGNvdW50ID09IDApCisJCXJldCA9IGtmZF9yZXN1bWVfYWxsX3Byb2Nlc3Nl cygpOwogCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBrZmRfcmVzdW1lKHN0cnVjdCBr ZmRfZGV2ICprZmQpCkBAIC02MjUsNiArNjQwLDU0IEBAIHZvaWQga2dkMmtmZF9pbnRlcnJ1cHQo c3RydWN0IGtmZF9kZXYgKmtmZCwgY29uc3Qgdm9pZCAqaWhfcmluZ19lbnRyeSkKIAlzcGluX3Vu bG9jaygma2ZkLT5pbnRlcnJ1cHRfbG9jayk7CiB9CiAKKy8qKiBrZ2Qya2ZkX3NjaGVkdWxlX2V2 aWN0X2FuZF9yZXN0b3JlX3Byb2Nlc3MgLSBTY2hlZHVsZXMgd29yayBxdWV1ZSB0aGF0IHdpbGwK KyAqICAgcHJlcGFyZSBmb3Igc2FmZSBldmljdGlvbiBvZiBLRkQgQk9zIHRoYXQgYmVsb25nIHRv IHRoZSBzcGVjaWZpZWQKKyAqICAgcHJvY2Vzcy4KKyAqCisgKiBAbW06IG1tX3N0cnVjdCB0aGF0 IGlkZW50aWZpZXMgdGhlIHNwZWNpZmllZCBLRkQgcHJvY2VzcworICogQGZlbmNlOiBldmljdGlv biBmZW5jZSBhdHRhY2hlZCB0byBLRkQgcHJvY2VzcyBCT3MKKyAqCisgKi8KK2ludCBrZ2Qya2Zk X3NjaGVkdWxlX2V2aWN0X2FuZF9yZXN0b3JlX3Byb2Nlc3Moc3RydWN0IG1tX3N0cnVjdCAqbW0s CisJCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3Qga2ZkX3By b2Nlc3MgKnA7CisJdW5zaWduZWQgbG9uZyBhY3RpdmVfdGltZTsKKwl1bnNpZ25lZCBsb25nIGRl bGF5X2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKFBST0NFU1NfQUNUSVZFX1RJTUVfTVMpOwor CisJaWYgKCFmZW5jZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG1hX2ZlbmNlX2lzX3Np Z25hbGVkKGZlbmNlKSkKKwkJcmV0dXJuIDA7CisKKwlwID0ga2ZkX2xvb2t1cF9wcm9jZXNzX2J5 X21tKG1tKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGZlbmNlLT5zZXFu byA9PSBwLT5sYXN0X2V2aWN0aW9uX3NlcW5vKQorCQlnb3RvIG91dDsKKworCXAtPmxhc3RfZXZp Y3Rpb25fc2Vxbm8gPSBmZW5jZS0+c2Vxbm87CisKKwkvKiBBdm9pZCBLRkQgcHJvY2VzcyBzdGFy dmF0aW9uLiBXYWl0IGZvciBhdCBsZWFzdAorCSAqIFBST0NFU1NfQUNUSVZFX1RJTUVfTVMgYmVm b3JlIGV2aWN0aW5nIHRoZSBwcm9jZXNzIGFnYWluCisJICovCisJYWN0aXZlX3RpbWUgPSBnZXRf amlmZmllc182NCgpIC0gcC0+bGFzdF9yZXN0b3JlX3RpbWVzdGFtcDsKKwlpZiAoZGVsYXlfamlm ZmllcyA+IGFjdGl2ZV90aW1lKQorCQlkZWxheV9qaWZmaWVzIC09IGFjdGl2ZV90aW1lOworCWVs c2UKKwkJZGVsYXlfamlmZmllcyA9IDA7CisKKwkvKiBEdXJpbmcgcHJvY2VzcyBpbml0aWFsaXph dGlvbiBldmljdGlvbl93b3JrLmR3b3JrIGlzIGluaXRpYWxpemVkCisJICogdG8ga2ZkX2V2aWN0 X2JvX3dvcmtlcgorCSAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcC0+ZXZpY3Rpb25fd29y aywgZGVsYXlfamlmZmllcyk7CitvdXQ6CisJa2ZkX3VucmVmX3Byb2Nlc3MocCk7CisJcmV0dXJu IDA7Cit9CisKIHN0YXRpYyBpbnQga2ZkX2d0dF9zYV9pbml0KHN0cnVjdCBrZmRfZGV2ICprZmQs IHVuc2lnbmVkIGludCBidWZfc2l6ZSwKIAkJCQl1bnNpZ25lZCBpbnQgY2h1bmtfc2l6ZSkKIHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVf bWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9t YW5hZ2VyLmMKaW5kZXggYjdkMDYzOS4uYjNiNmRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMKQEAgLTIxLDEwICsy MSwxMSBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CisjaW5jbHVk ZSA8bGludXgvcHJpbnRrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxp bnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3By aW50ay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVk Lmg+CiAjaW5jbHVkZSAia2ZkX3ByaXYuaCIKQEAgLTE4MCw2ICsxODEsMTQgQEAgc3RhdGljIGlu dCBjcmVhdGVfcXVldWVfbm9jcHNjaChzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwK IAkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJcS0+cHJvcGVydGllcy52bWlkID0gcXBkLT52bWlk OworCS8qCisJICogRXZpY3Rpb24gc3RhdGUgbG9naWM6IHdlIG9ubHkgbWFyayBhY3RpdmUgcXVl dWVzIGFzIGV2aWN0ZWQKKwkgKiB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgcmVzdG9yaW5nIGlu YWN0aXZlIHF1ZXVlcyBsYXRlcgorCSAqLworCWlmIChxcGQtPmV2aWN0ZWQpCisJCXEtPnByb3Bl cnRpZXMuaXNfZXZpY3RlZCA9IChxLT5wcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPiAwICYmCisJCQkJ CSAgICBxLT5wcm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPiAwICYmCisJCQkJCSAgICBxLT5wcm9w ZXJ0aWVzLnF1ZXVlX2FkZHJlc3MgIT0gMCk7CiAKIAlxLT5wcm9wZXJ0aWVzLnRiYV9hZGRyID0g cXBkLT50YmFfYWRkcjsKIAlxLT5wcm9wZXJ0aWVzLnRtYV9hZGRyID0gcXBkLT50bWFfYWRkcjsK QEAgLTM3NywxNSArMzg2LDI5IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3F1ZXVlKHN0cnVjdCBkZXZp Y2VfcXVldWVfbWFuYWdlciAqZHFtLCBzdHJ1Y3QgcXVldWUgKnEpCiB7CiAJaW50IHJldHZhbDsK IAlzdHJ1Y3QgbXFkX21hbmFnZXIgKm1xZDsKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpw ZGQ7CiAJYm9vbCBwcmV2X2FjdGl2ZSA9IGZhbHNlOwogCiAJbXV0ZXhfbG9jaygmZHFtLT5sb2Nr KTsKKwlwZGQgPSBrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEocS0+ZGV2aWNlLCBxLT5wcm9j ZXNzKTsKKwlpZiAoIXBkZCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF91bmxv Y2s7CisJfQogCW1xZCA9IGRxbS0+b3BzLmdldF9tcWRfbWFuYWdlcihkcW0sCiAJCQlnZXRfbXFk X3R5cGVfZnJvbV9xdWV1ZV90eXBlKHEtPnByb3BlcnRpZXMudHlwZSkpOwogCWlmICghbXFkKSB7 CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CisJLyoKKwkgKiBF dmljdGlvbiBzdGF0ZSBsb2dpYzogd2Ugb25seSBtYXJrIGFjdGl2ZSBxdWV1ZXMgYXMgZXZpY3Rl ZAorCSAqIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiByZXN0b3JpbmcgaW5hY3RpdmUgcXVldWVz IGxhdGVyCisJICovCisJaWYgKHBkZC0+cXBkLmV2aWN0ZWQpCisJCXEtPnByb3BlcnRpZXMuaXNf ZXZpY3RlZCA9IChxLT5wcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPiAwICYmCisJCQkJCSAgICBxLT5w cm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPiAwICYmCisJCQkJCSAgICBxLT5wcm9wZXJ0aWVzLnF1 ZXVlX2FkZHJlc3MgIT0gMCk7CiAKIAkvKiBTYXZlIHByZXZpb3VzIGFjdGl2aXR5IHN0YXRlIGZv ciBjb3VudGVycyAqLwogCXByZXZfYWN0aXZlID0gcS0+cHJvcGVydGllcy5pc19hY3RpdmU7CkBA IC00NTcsNiArNDgwLDE4NyBAQCBzdGF0aWMgc3RydWN0IG1xZF9tYW5hZ2VyICpnZXRfbXFkX21h bmFnZXIoCiAJcmV0dXJuIG1xZDsKIH0KIAorc3RhdGljIGludCBldmljdF9wcm9jZXNzX3F1ZXVl c19ub2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLAorCQkJCQlzdHJ1Y3Qg cWNtX3Byb2Nlc3NfZGV2aWNlICpxcGQpCit7CisJc3RydWN0IHF1ZXVlICpxOworCXN0cnVjdCBt cWRfbWFuYWdlciAqbXFkOworCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsKKwlpbnQg cmV0dmFsID0gMDsKKworCW11dGV4X2xvY2soJmRxbS0+bG9jayk7CisJaWYgKHFwZC0+ZXZpY3Rl ZCsrID4gMCkgLyogYWxyZWFkeSBldmljdGVkLCBkbyBub3RoaW5nICovCisJCWdvdG8gb3V0Owor CisJcGRkID0gcXBkX3RvX3BkZChxcGQpOworCXByX2luZm9fcmF0ZWxpbWl0ZWQoIkV2aWN0aW5n IFBBU0lEICV1IHF1ZXVlc1xuIiwKKwkJCSAgICBwZGQtPnByb2Nlc3MtPnBhc2lkKTsKKworCS8q IHVuYWN0aXZhdGUgYWxsIGFjdGl2ZSBxdWV1ZXMgb24gdGhlIHFwZCAqLworCWxpc3RfZm9yX2Vh Y2hfZW50cnkocSwgJnFwZC0+cXVldWVzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFxLT5wcm9wZXJ0 aWVzLmlzX2FjdGl2ZSkKKwkJCWNvbnRpbnVlOworCQltcWQgPSBkcW0tPm9wcy5nZXRfbXFkX21h bmFnZXIoZHFtLAorCQkJZ2V0X21xZF90eXBlX2Zyb21fcXVldWVfdHlwZShxLT5wcm9wZXJ0aWVz LnR5cGUpKTsKKwkJaWYgKCFtcWQpIHsgLyogc2hvdWxkIG5vdCBiZSBoZXJlICovCisJCQlwcl9l cnIoIkNhbm5vdCBldmljdCBxdWV1ZSwgbXFkIG1nciBpcyBOVUxMXG4iKTsKKwkJCXJldHZhbCA9 IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlxLT5wcm9wZXJ0aWVzLmlzX2V2aWN0ZWQg PSB0cnVlOworCQlxLT5wcm9wZXJ0aWVzLmlzX2FjdGl2ZSA9IGZhbHNlOworCQlyZXR2YWwgPSBt cWQtPmRlc3Ryb3lfbXFkKG1xZCwgcS0+bXFkLAorCQkJCUtGRF9QUkVFTVBUX1RZUEVfV0FWRUZS T05UX0RSQUlOLAorCQkJCUtGRF9VTk1BUF9MQVRFTkNZX01TLCBxLT5waXBlLCBxLT5xdWV1ZSk7 CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJZHFtLT5xdWV1ZV9jb3VudC0tOworCX0K Kworb3V0OgorCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQor CitzdGF0aWMgaW50IGV2aWN0X3Byb2Nlc3NfcXVldWVzX2Nwc2NoKHN0cnVjdCBkZXZpY2VfcXVl dWVfbWFuYWdlciAqZHFtLAorCQkJCSAgICAgIHN0cnVjdCBxY21fcHJvY2Vzc19kZXZpY2UgKnFw ZCkKK3sKKwlzdHJ1Y3QgcXVldWUgKnE7CisJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRk OworCWludCByZXR2YWwgPSAwOworCisJbXV0ZXhfbG9jaygmZHFtLT5sb2NrKTsKKwlpZiAocXBk LT5ldmljdGVkKysgPiAwKSAvKiBhbHJlYWR5IGV2aWN0ZWQsIGRvIG5vdGhpbmcgKi8KKwkJZ290 byBvdXQ7CisKKwlwZGQgPSBxcGRfdG9fcGRkKHFwZCk7CisJcHJfaW5mb19yYXRlbGltaXRlZCgi RXZpY3RpbmcgUEFTSUQgJXUgcXVldWVzXG4iLAorCQkJICAgIHBkZC0+cHJvY2Vzcy0+cGFzaWQp OworCisJLyogdW5hY3RpdmF0ZSBhbGwgYWN0aXZlIHF1ZXVlcyBvbiB0aGUgcXBkICovCisJbGlz dF9mb3JfZWFjaF9lbnRyeShxLCAmcXBkLT5xdWV1ZXNfbGlzdCwgbGlzdCkgeworCQlpZiAoIXEt PnByb3BlcnRpZXMuaXNfYWN0aXZlKQorCQkJY29udGludWU7CisJCXEtPnByb3BlcnRpZXMuaXNf ZXZpY3RlZCA9IHRydWU7CisJCXEtPnByb3BlcnRpZXMuaXNfYWN0aXZlID0gZmFsc2U7CisJCWRx bS0+cXVldWVfY291bnQtLTsKKwl9CisJcmV0dmFsID0gZXhlY3V0ZV9xdWV1ZXNfY3BzY2goZHFt LAorCQkJCXFwZC0+aXNfZGVidWcgPworCQkJCUtGRF9VTk1BUF9RVUVVRVNfRklMVEVSX0FMTF9R VUVVRVMgOgorCQkJCUtGRF9VTk1BUF9RVUVVRVNfRklMVEVSX0RZTkFNSUNfUVVFVUVTLCAwKTsK Kworb3V0OgorCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQor CitzdGF0aWMgaW50IHJlc3RvcmVfcHJvY2Vzc19xdWV1ZXNfbm9jcHNjaChzdHJ1Y3QgZGV2aWNl X3F1ZXVlX21hbmFnZXIgKmRxbSwKKwkJCQkJICBzdHJ1Y3QgcWNtX3Byb2Nlc3NfZGV2aWNlICpx cGQpCit7CisJc3RydWN0IHF1ZXVlICpxOworCXN0cnVjdCBtcWRfbWFuYWdlciAqbXFkOworCXN0 cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsKKwl1aW50MzJfdCBwZF9iYXNlOworCWludCBy ZXR2YWwgPSAwOworCisJcGRkID0gcXBkX3RvX3BkZChxcGQpOworCS8qIFJldHJpZXZlIFBEIGJh c2UgKi8KKwlwZF9iYXNlID0gZHFtLT5kZXYtPmtmZDJrZ2QtPmdldF9wcm9jZXNzX3BhZ2VfZGly KHBkZC0+dm0pOworCisJbXV0ZXhfbG9jaygmZHFtLT5sb2NrKTsKKwlpZiAoV0FSTl9PTl9PTkNF KCFxcGQtPmV2aWN0ZWQpKSAvKiBhbHJlYWR5IHJlc3RvcmVkLCBkbyBub3RoaW5nICovCisJCWdv dG8gb3V0OworCWlmIChxcGQtPmV2aWN0ZWQgPiAxKSB7IC8qIHJlZiBjb3VudCBzdGlsbCA+IDAs IGRlY3JlbWVudCAmIHF1aXQgKi8KKwkJcXBkLT5ldmljdGVkLS07CisJCWdvdG8gb3V0OworCX0K KworCXByX2luZm9fcmF0ZWxpbWl0ZWQoIlJlc3RvcmluZyBQQVNJRCAldSBxdWV1ZXNcbiIsCisJ CQkgICAgcGRkLT5wcm9jZXNzLT5wYXNpZCk7CisKKwkvKiBVcGRhdGUgUEQgQmFzZSBpbiBRUEQg Ki8KKwlxcGQtPnBhZ2VfdGFibGVfYmFzZSA9IHBkX2Jhc2U7CisJcHJfZGVidWcoIlVwZGF0ZWQg UEQgYWRkcmVzcyB0byAweCUwOHhcbiIsIHBkX2Jhc2UpOworCisJaWYgKCFsaXN0X2VtcHR5KCZx cGQtPnF1ZXVlc19saXN0KSkgeworCQlkcW0tPmRldi0+a2ZkMmtnZC0+c2V0X3ZtX2NvbnRleHRf cGFnZV90YWJsZV9iYXNlKAorCQkJCWRxbS0+ZGV2LT5rZ2QsCisJCQkJcXBkLT52bWlkLAorCQkJ CXFwZC0+cGFnZV90YWJsZV9iYXNlKTsKKwkJa2ZkX2ZsdXNoX3RsYihwZGQpOworCX0KKworCS8q IGFjdGl2YXRlIGFsbCBhY3RpdmUgcXVldWVzIG9uIHRoZSBxcGQgKi8KKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KHEsICZxcGQtPnF1ZXVlc19saXN0LCBsaXN0KSB7CisJCWlmICghcS0+cHJvcGVydGll cy5pc19ldmljdGVkKQorCQkJY29udGludWU7CisJCW1xZCA9IGRxbS0+b3BzLmdldF9tcWRfbWFu YWdlcihkcW0sCisJCQlnZXRfbXFkX3R5cGVfZnJvbV9xdWV1ZV90eXBlKHEtPnByb3BlcnRpZXMu dHlwZSkpOworCQlpZiAoIW1xZCkgeyAvKiBzaG91bGQgbm90IGJlIGhlcmUgKi8KKwkJCXByX2Vy cigiQ2Fubm90IHJlc3RvcmUgcXVldWUsIG1xZCBtZ3IgaXMgTlVMTFxuIik7CisJCQlyZXR2YWwg PSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJcS0+cHJvcGVydGllcy5pc19ldmljdGVk ID0gZmFsc2U7CisJCXEtPnByb3BlcnRpZXMuaXNfYWN0aXZlID0gdHJ1ZTsKKwkJcmV0dmFsID0g bXFkLT5sb2FkX21xZChtcWQsIHEtPm1xZCwgcS0+cGlwZSwKKwkJCQkgICAgICAgcS0+cXVldWUs ICZxLT5wcm9wZXJ0aWVzLAorCQkJCSAgICAgICBxLT5wcm9jZXNzLT5tbSk7CisJCWlmIChyZXR2 YWwpCisJCQlnb3RvIG91dDsKKwkJZHFtLT5xdWV1ZV9jb3VudCsrOworCX0KKwlxcGQtPmV2aWN0 ZWQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFs OworfQorCitzdGF0aWMgaW50IHJlc3RvcmVfcHJvY2Vzc19xdWV1ZXNfY3BzY2goc3RydWN0IGRl dmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sCisJCQkJCXN0cnVjdCBxY21fcHJvY2Vzc19kZXZpY2Ug KnFwZCkKK3sKKwlzdHJ1Y3QgcXVldWUgKnE7CisJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAq cGRkOworCXVpbnQzMl90IHBkX2Jhc2U7CisJaW50IHJldHZhbCA9IDA7CisKKwlwZGQgPSBxcGRf dG9fcGRkKHFwZCk7CisJLyogUmV0cmlldmUgUEQgYmFzZSAqLworCXBkX2Jhc2UgPSBkcW0tPmRl di0+a2ZkMmtnZC0+Z2V0X3Byb2Nlc3NfcGFnZV9kaXIocGRkLT52bSk7CisKKwltdXRleF9sb2Nr KCZkcW0tPmxvY2spOworCWlmIChXQVJOX09OX09OQ0UoIXFwZC0+ZXZpY3RlZCkpIC8qIGFscmVh ZHkgcmVzdG9yZWQsIGRvIG5vdGhpbmcgKi8KKwkJZ290byBvdXQ7CisJaWYgKHFwZC0+ZXZpY3Rl ZCA+IDEpIHsgLyogcmVmIGNvdW50IHN0aWxsID4gMCwgZGVjcmVtZW50ICYgcXVpdCAqLworCQlx cGQtPmV2aWN0ZWQtLTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJfaW5mb19yYXRlbGltaXRlZCgi UmVzdG9yaW5nIFBBU0lEICV1IHF1ZXVlc1xuIiwKKwkJCSAgICBwZGQtPnByb2Nlc3MtPnBhc2lk KTsKKworCS8qIFVwZGF0ZSBQRCBCYXNlIGluIFFQRCAqLworCXFwZC0+cGFnZV90YWJsZV9iYXNl ID0gcGRfYmFzZTsKKwlwcl9kZWJ1ZygiVXBkYXRlZCBQRCBhZGRyZXNzIHRvIDB4JTA4eFxuIiwg cGRfYmFzZSk7CisKKwkvKiBhY3RpdmF0ZSBhbGwgYWN0aXZlIHF1ZXVlcyBvbiB0aGUgcXBkICov CisJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmcXBkLT5xdWV1ZXNfbGlzdCwgbGlzdCkgeworCQlp ZiAoIXEtPnByb3BlcnRpZXMuaXNfZXZpY3RlZCkKKwkJCWNvbnRpbnVlOworCQlxLT5wcm9wZXJ0 aWVzLmlzX2V2aWN0ZWQgPSBmYWxzZTsKKwkJcS0+cHJvcGVydGllcy5pc19hY3RpdmUgPSB0cnVl OworCQlkcW0tPnF1ZXVlX2NvdW50Kys7CisJfQorCXJldHZhbCA9IGV4ZWN1dGVfcXVldWVzX2Nw c2NoKGRxbSwKKwkJCQlLRkRfVU5NQVBfUVVFVUVTX0ZJTFRFUl9EWU5BTUlDX1FVRVVFUywgMCk7 CisJaWYgKCFyZXR2YWwpCisJCXFwZC0+ZXZpY3RlZCA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2Nr KCZkcW0tPmxvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKIHN0YXRpYyBpbnQgcmVnaXN0ZXJf cHJvY2VzcyhzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21hbmFnZXIgKmRxbSwKIAkJCQkJc3RydWN0IHFj bV9wcm9jZXNzX2RldmljZSAqcXBkKQogewpAQCAtODUzLDYgKzEwNTcsMTQgQEAgc3RhdGljIGlu dCBjcmVhdGVfcXVldWVfY3BzY2goc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0sIHN0 cnVjdCBxdWV1ZSAqcSwKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQorCS8q CisJICogRXZpY3Rpb24gc3RhdGUgbG9naWM6IHdlIG9ubHkgbWFyayBhY3RpdmUgcXVldWVzIGFz IGV2aWN0ZWQKKwkgKiB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgcmVzdG9yaW5nIGluYWN0aXZl IHF1ZXVlcyBsYXRlcgorCSAqLworCWlmIChxcGQtPmV2aWN0ZWQpCisJCXEtPnByb3BlcnRpZXMu aXNfZXZpY3RlZCA9IChxLT5wcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPiAwICYmCisJCQkJCSAgICBx LT5wcm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPiAwICYmCisJCQkJCSAgICBxLT5wcm9wZXJ0aWVz LnF1ZXVlX2FkZHJlc3MgIT0gMCk7CiAKIAlkcW0tPmFzaWNfb3BzLmluaXRfc2RtYV92bShkcW0s IHEsIHFwZCk7CiAKQEAgLTEyOTEsNiArMTUwMyw4IEBAIHN0cnVjdCBkZXZpY2VfcXVldWVfbWFu YWdlciAqZGV2aWNlX3F1ZXVlX21hbmFnZXJfaW5pdChzdHJ1Y3Qga2ZkX2RldiAqZGV2KQogCQlk cW0tPm9wcy5zZXRfY2FjaGVfbWVtb3J5X3BvbGljeSA9IHNldF9jYWNoZV9tZW1vcnlfcG9saWN5 OwogCQlkcW0tPm9wcy5zZXRfdHJhcF9oYW5kbGVyID0gc2V0X3RyYXBfaGFuZGxlcjsKIAkJZHFt LT5vcHMucHJvY2Vzc190ZXJtaW5hdGlvbiA9IHByb2Nlc3NfdGVybWluYXRpb25fY3BzY2g7CisJ CWRxbS0+b3BzLmV2aWN0X3Byb2Nlc3NfcXVldWVzID0gZXZpY3RfcHJvY2Vzc19xdWV1ZXNfY3Bz Y2g7CisJCWRxbS0+b3BzLnJlc3RvcmVfcHJvY2Vzc19xdWV1ZXMgPSByZXN0b3JlX3Byb2Nlc3Nf cXVldWVzX2Nwc2NoOwogCQlicmVhazsKIAljYXNlIEtGRF9TQ0hFRF9QT0xJQ1lfTk9fSFdTOgog CQkvKiBpbml0aWFsaXplIGRxbSBmb3Igbm8gY3Agc2NoZWR1bGluZyAqLwpAQCAtMTMwNyw2ICsx NTIxLDkgQEAgc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkZXZpY2VfcXVldWVfbWFuYWdl cl9pbml0KHN0cnVjdCBrZmRfZGV2ICpkZXYpCiAJCWRxbS0+b3BzLnNldF9jYWNoZV9tZW1vcnlf cG9saWN5ID0gc2V0X2NhY2hlX21lbW9yeV9wb2xpY3k7CiAJCWRxbS0+b3BzLnNldF90cmFwX2hh bmRsZXIgPSBzZXRfdHJhcF9oYW5kbGVyOwogCQlkcW0tPm9wcy5wcm9jZXNzX3Rlcm1pbmF0aW9u ID0gcHJvY2Vzc190ZXJtaW5hdGlvbl9ub2Nwc2NoOworCQlkcW0tPm9wcy5ldmljdF9wcm9jZXNz X3F1ZXVlcyA9IGV2aWN0X3Byb2Nlc3NfcXVldWVzX25vY3BzY2g7CisJCWRxbS0+b3BzLnJlc3Rv cmVfcHJvY2Vzc19xdWV1ZXMgPQorCQkJcmVzdG9yZV9wcm9jZXNzX3F1ZXVlc19ub2Nwc2NoOwog CQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9lcnIoIkludmFsaWQgc2NoZWR1bGluZyBwb2xpY3kg JWRcbiIsIGRxbS0+c2NoZWRfcG9saWN5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5oIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgKaW5kZXggNjhiZTBhYS4uNDEyYmVm ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1 ZV9tYW5hZ2VyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9x dWV1ZV9tYW5hZ2VyLmgKQEAgLTc5LDYgKzc5LDEwIEBAIHN0cnVjdCBkZXZpY2VfcHJvY2Vzc19u b2RlIHsKICAqCiAgKiBAcHJvY2Vzc190ZXJtaW5hdGlvbjogQ2xlYXJzIGFsbCBwcm9jZXNzIHF1 ZXVlcyBiZWxvbmdzIHRvIHRoYXQgZGV2aWNlLgogICoKKyAqIEBldmljdF9wcm9jZXNzX3F1ZXVl czogRXZpY3QgYWxsIGFjdGl2ZSBxdWV1ZXMgb2YgYSBwcm9jZXNzCisgKgorICogQHJlc3RvcmVf cHJvY2Vzc19xdWV1ZXM6IFJlc3RvcmUgYWxsIGV2aWN0ZWQgcXVldWVzIHF1ZXVlcyBvZiBhIHBy b2Nlc3MKKyAqCiAgKi8KIAogc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyX29wcyB7CkBAIC0x MjksNiArMTMzLDExIEBAIHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlcl9vcHMgewogCiAJaW50 ICgqcHJvY2Vzc190ZXJtaW5hdGlvbikoc3RydWN0IGRldmljZV9xdWV1ZV9tYW5hZ2VyICpkcW0s CiAJCQlzdHJ1Y3QgcWNtX3Byb2Nlc3NfZGV2aWNlICpxcGQpOworCisJaW50ICgqZXZpY3RfcHJv Y2Vzc19xdWV1ZXMpKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLAorCQkJCSAgICBz dHJ1Y3QgcWNtX3Byb2Nlc3NfZGV2aWNlICpxcGQpOworCWludCAoKnJlc3RvcmVfcHJvY2Vzc19x dWV1ZXMpKHN0cnVjdCBkZXZpY2VfcXVldWVfbWFuYWdlciAqZHFtLAorCQkJCSAgICAgIHN0cnVj dCBxY21fcHJvY2Vzc19kZXZpY2UgKnFwZCk7CiB9OwogCiBzdHJ1Y3QgZGV2aWNlX3F1ZXVlX21h bmFnZXJfYXNpY19vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv a2ZkX21vZHVsZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21vZHVsZS5jCmlu ZGV4IDNhYzcyYmUuLjY1NTc0YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k a2ZkL2tmZF9tb2R1bGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbW9k dWxlLmMKQEAgLTQzLDYgKzQzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZ2Qya2ZkX2NhbGxz IGtnZDJrZmQgPSB7CiAJLmludGVycnVwdAk9IGtnZDJrZmRfaW50ZXJydXB0LAogCS5zdXNwZW5k CT0ga2dkMmtmZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0ga2dkMmtmZF9yZXN1bWUsCisJLnNjaGVk dWxlX2V2aWN0X2FuZF9yZXN0b3JlX3Byb2Nlc3MgPQorCQkJICBrZ2Qya2ZkX3NjaGVkdWxlX2V2 aWN0X2FuZF9yZXN0b3JlX3Byb2Nlc3MsCiB9OwogCiBpbnQgc2NoZWRfcG9saWN5ID0gS0ZEX1ND SEVEX1BPTElDWV9IV1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9r ZmRfcHJpdi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaAppbmRleCAw Njg3MTYxLi43ODUxNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9r ZmRfcHJpdi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcml2LmgKQEAg LTMzNSw3ICszMzUsMTEgQEAgZW51bSBrZmRfcXVldWVfZm9ybWF0IHsKICAqIEBpc19pbnRlcm9w OiBEZWZpbmVzIGlmIHRoaXMgaXMgYSBpbnRlcm9wIHF1ZXVlLiBJbnRlcm9wIHF1ZXVlIG1lYW5z IHRoYXQKICAqIHRoZSBxdWV1ZSBjYW4gYWNjZXNzIGJvdGggZ3JhcGhpY3MgYW5kIGNvbXB1dGUg cmVzb3VyY2VzLgogICoKLSAqIEBpc19hY3RpdmU6IERlZmluZXMgaWYgdGhlIHF1ZXVlIGlzIGFj dGl2ZSBvciBub3QuCisgKiBAaXNfZXZpY3RlZDogRGVmaW5lcyBpZiB0aGUgcXVldWUgaXMgZXZp Y3RlZC4gT25seSBhY3RpdmUgcXVldWVzCisgKiBhcmUgZXZpY3RlZCwgcmVuZGVyaW5nIHRoZW0g aW5hY3RpdmUuCisgKgorICogQGlzX2FjdGl2ZTogRGVmaW5lcyBpZiB0aGUgcXVldWUgaXMgYWN0 aXZlIG9yIG5vdC4gQGlzX2FjdGl2ZSBhbmQKKyAqIEBpc19ldmljdGVkIGFyZSBwcm90ZWN0ZWQg YnkgdGhlIERRTSBsb2NrLgogICoKICAqIEB2bWlkOiBJZiB0aGUgc2NoZWR1bGluZyBtb2RlIGlz IG5vIGNwIHNjaGVkdWxpbmcgdGhlIGZpZWxkIGRlZmluZXMgdGhlIHZtaWQKICAqIG9mIHRoZSBx dWV1ZS4KQEAgLTM1Nyw2ICszNjEsNyBAQCBzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyB7CiAJdWlu dDMyX3QgX19pb21lbSAqZG9vcmJlbGxfcHRyOwogCXVpbnQzMl90IGRvb3JiZWxsX29mZjsKIAli b29sIGlzX2ludGVyb3A7CisJYm9vbCBpc19ldmljdGVkOwogCWJvb2wgaXNfYWN0aXZlOwogCS8q IE5vdCByZWxldmFudCBmb3IgdXNlciBtb2RlIHF1ZXVlcyBpbiBjcCBzY2hlZHVsaW5nICovCiAJ dW5zaWduZWQgaW50IHZtaWQ7CkBAIC00NjAsNiArNDY1LDcgQEAgc3RydWN0IHFjbV9wcm9jZXNz X2RldmljZSB7CiAJdW5zaWduZWQgaW50IHF1ZXVlX2NvdW50OwogCXVuc2lnbmVkIGludCB2bWlk OwogCWJvb2wgaXNfZGVidWc7CisJdW5zaWduZWQgaW50IGV2aWN0ZWQ7IC8qIGV2aWN0aW9uIGNv dW50ZXIsIDA9YWN0aXZlICovCiAKIAkvKiBUaGlzIGZsYWcgdGVsbHMgaWYgd2Ugc2hvdWxkIHJl c2V0IGFsbCB3YXZlZnJvbnRzIG9uCiAJICogcHJvY2VzcyB0ZXJtaW5hdGlvbgpAQCAtNDg2LDYg KzQ5MiwxNyBAQCBzdHJ1Y3QgcWNtX3Byb2Nlc3NfZGV2aWNlIHsKIAl1aW50NjRfdCB0bWFfYWRk cjsKIH07CiAKKy8qIEtGRCBNZW1vcnkgRXZpY3Rpb24gKi8KKworLyogQXBwcm94LiB3YWl0IHRp bWUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSBldmljdGVkIEJPcyAqLworI2RlZmluZSBQ Uk9DRVNTX1JFU1RPUkVfVElNRV9NUyAxMDAKKy8qIEFwcHJveC4gYmFjayBvZmYgdGltZSBpZiBy ZXN0b3JlIGZhaWxzIGR1ZSB0byBsYWNrIG9mIG1lbW9yeSAqLworI2RlZmluZSBQUk9DRVNTX0JB Q0tfT0ZGX1RJTUVfTVMgMTAwCisvKiBBcHByb3guIHRpbWUgYmVmb3JlIGV2aWN0aW5nIHRoZSBw cm9jZXNzIGFnYWluICovCisjZGVmaW5lIFBST0NFU1NfQUNUSVZFX1RJTUVfTVMgMTAKKworaW50 IGtnZDJrZmRfc2NoZWR1bGVfZXZpY3RfYW5kX3Jlc3RvcmVfcHJvY2VzcyhzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwKKwkJCQkJICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKIAogZW51bSBr ZmRfcGRkX2JvdW5kIHsKIAlQRERfVU5CT1VORCA9IDAsCkBAIC02MDAsNiArNjE3LDE2IEBAIHN0 cnVjdCBrZmRfcHJvY2VzcyB7CiAJICogZHVyaW5nIHJlc3RvcmUKIAkgKi8KIAlzdHJ1Y3QgZG1h X2ZlbmNlICplZjsKKworCS8qIFdvcmsgaXRlbXMgZm9yIGV2aWN0aW5nIGFuZCByZXN0b3Jpbmcg Qk9zICovCisJc3RydWN0IGRlbGF5ZWRfd29yayBldmljdGlvbl93b3JrOworCXN0cnVjdCBkZWxh eWVkX3dvcmsgcmVzdG9yZV93b3JrOworCS8qIHNlcW5vIG9mIHRoZSBsYXN0IHNjaGVkdWxlZCBl dmljdGlvbiAqLworCXVuc2lnbmVkIGludCBsYXN0X2V2aWN0aW9uX3NlcW5vOworCS8qIEFwcHJv eC4gdGhlIGxhc3QgdGltZXN0YW1wIChpbiBqaWZmaWVzKSB3aGVuIHRoZSBwcm9jZXNzIHdhcwor CSAqIHJlc3RvcmVkIGFmdGVyIGFuIGV2aWN0aW9uCisJICovCisJdW5zaWduZWQgbG9uZyBsYXN0 X3Jlc3RvcmVfdGltZXN0YW1wOwogfTsKIAogLyoqCkBAIC02MjUsNyArNjUyLDEwIEBAIHZvaWQg a2ZkX3Byb2Nlc3NfZGVzdHJveV93cSh2b2lkKTsKIHN0cnVjdCBrZmRfcHJvY2VzcyAqa2ZkX2Ny ZWF0ZV9wcm9jZXNzKHN0cnVjdCBmaWxlICpmaWxlcCk7CiBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKmtm ZF9nZXRfcHJvY2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBzdHJ1Y3Qga2ZkX3By b2Nlc3MgKmtmZF9sb29rdXBfcHJvY2Vzc19ieV9wYXNpZCh1bnNpZ25lZCBpbnQgcGFzaWQpOwor c3RydWN0IGtmZF9wcm9jZXNzICprZmRfbG9va3VwX3Byb2Nlc3NfYnlfbW0oY29uc3Qgc3RydWN0 IG1tX3N0cnVjdCAqbW0pOwogdm9pZCBrZmRfdW5yZWZfcHJvY2VzcyhzdHJ1Y3Qga2ZkX3Byb2Nl c3MgKnApOwordm9pZCBrZmRfc3VzcGVuZF9hbGxfcHJvY2Vzc2VzKHZvaWQpOworaW50IGtmZF9y ZXN1bWVfYWxsX3Byb2Nlc3Nlcyh2b2lkKTsKIAogc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAq a2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2Uoc3RydWN0IGtmZF9kZXYgKmRldiwKIAkJCQkJCXN0 cnVjdCBrZmRfcHJvY2VzcyAqcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGtmZC9rZmRfcHJvY2Vzcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nl c3MuYwppbmRleCBlODJmNGFjLi43ZWVhZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9rZmRfcHJvY2Vzcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2Zk L2tmZF9wcm9jZXNzLmMKQEAgLTU1LDYgKzU1LDkgQEAgc3RhdGljIHN0cnVjdCBrZmRfcHJvY2Vz cyAqY3JlYXRlX3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQsCiAJCQkJ CXN0cnVjdCBmaWxlICpmaWxlcCk7CiBzdGF0aWMgaW50IGtmZF9wcm9jZXNzX2luaXRfY3dzcihz dHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHN0cnVjdCBmaWxlICpmaWxlcCk7CiAKK3N0YXRpYyB2b2lk IGV2aWN0X3Byb2Nlc3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMg dm9pZCByZXN0b3JlX3Byb2Nlc3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisK IAogdm9pZCBrZmRfcHJvY2Vzc19jcmVhdGVfd3Eodm9pZCkKIHsKQEAgLTIzOSw2ICsyNDIsOSBA QCBzdGF0aWMgdm9pZCBrZmRfcHJvY2Vzc19ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbXVfbm90 aWZpZXIgKm1uLAogCW11dGV4X3VubG9jaygma2ZkX3Byb2Nlc3Nlc19tdXRleCk7CiAJc3luY2hy b25pemVfc3JjdSgma2ZkX3Byb2Nlc3Nlc19zcmN1KTsKIAorCWNhbmNlbF9kZWxheWVkX3dvcmtf c3luYygmcC0+ZXZpY3Rpb25fd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwLT5y ZXN0b3JlX3dvcmspOworCiAJbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwogCiAJLyogSXRlcmF0ZSBv dmVyIGFsbCBwcm9jZXNzIGRldmljZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGlmIHRoZQpAQCAtMzYw LDYgKzM2NiwxMCBAQCBzdGF0aWMgc3RydWN0IGtmZF9wcm9jZXNzICpjcmVhdGVfcHJvY2Vzcyhj b25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZCwKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8g ZXJyX2luaXRfYXBlcnR1cmVzOwogCisJSU5JVF9ERUxBWUVEX1dPUksoJnByb2Nlc3MtPmV2aWN0 aW9uX3dvcmssIGV2aWN0X3Byb2Nlc3Nfd29ya2VyKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJv Y2Vzcy0+cmVzdG9yZV93b3JrLCByZXN0b3JlX3Byb2Nlc3Nfd29ya2VyKTsKKwlwcm9jZXNzLT5s YXN0X3Jlc3RvcmVfdGltZXN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTsKKwogCWVyciA9IGtmZF9w cm9jZXNzX2luaXRfY3dzcihwcm9jZXNzLCBmaWxlcCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJf aW5pdF9jd3NyOwpAQCAtNDExLDYgKzQyMSw3IEBAIHN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2Ug KmtmZF9jcmVhdGVfcHJvY2Vzc19kZXZpY2VfZGF0YShzdHJ1Y3Qga2ZkX2RldiAqZGV2LAogCUlO SVRfTElTVF9IRUFEKCZwZGQtPnFwZC5wcml2X3F1ZXVlX2xpc3QpOwogCXBkZC0+cXBkLmRxbSA9 IGRldi0+ZHFtOwogCXBkZC0+cXBkLnBxbSA9ICZwLT5wcW07CisJcGRkLT5xcGQuZXZpY3RlZCA9 IDA7CiAJcGRkLT5wcm9jZXNzID0gcDsKIAlwZGQtPmJvdW5kID0gUEREX1VOQk9VTkQ7CiAJcGRk LT5hbHJlYWR5X2RlcXVldWVkID0gZmFsc2U7CkBAIC02MjUsNiArNjM2LDIwOCBAQCBzdHJ1Y3Qg a2ZkX3Byb2Nlc3MgKmtmZF9sb29rdXBfcHJvY2Vzc19ieV9wYXNpZCh1bnNpZ25lZCBpbnQgcGFz aWQpCiAJcmV0dXJuIHJldF9wOwogfQogCisvKiBUaGlzIGluY3JlbWVudHMgdGhlIHByb2Nlc3Mt PnJlZiBjb3VudGVyLiAqLworc3RydWN0IGtmZF9wcm9jZXNzICprZmRfbG9va3VwX3Byb2Nlc3Nf YnlfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IGtmZF9wcm9jZXNz ICpwOworCisJaW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrZmRfcHJvY2Vzc2VzX3NyY3UpOwor CisJcCA9IGZpbmRfcHJvY2Vzc19ieV9tbShtbSk7CisJaWYgKHApCisJCWtyZWZfZ2V0KCZwLT5y ZWYpOworCisJc3JjdV9yZWFkX3VubG9jaygma2ZkX3Byb2Nlc3Nlc19zcmN1LCBpZHgpOworCisJ cmV0dXJuIHA7Cit9CisKKy8qIHByb2Nlc3NfZXZpY3RfcXVldWVzIC0gRXZpY3QgYWxsIHVzZXIg cXVldWVzIG9mIGEgcHJvY2VzcworICoKKyAqIEV2aWN0aW9uIGlzIHJlZmVyZW5jZS1jb3VudGVk IHBlciBwcm9jZXNzLWRldmljZS4gVGhpcyBtZWFucyBtdWx0aXBsZQorICogZXZpY3Rpb25zIGZy b20gZGlmZmVyZW50IHNvdXJjZXMgY2FuIGJlIG5lc3RlZCBzYWZlbHkuCisgKi8KK3N0YXRpYyBp bnQgcHJvY2Vzc19ldmljdF9xdWV1ZXMoc3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCXN0cnVj dCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsKKwlpbnQgciA9IDA7CisJdW5zaWduZWQgaW50IG5f ZXZpY3RlZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZCwgJnAtPnBlcl9kZXZpY2Vf ZGF0YSwgcGVyX2RldmljZV9saXN0KSB7CisJCXIgPSBwZGQtPmRldi0+ZHFtLT5vcHMuZXZpY3Rf cHJvY2Vzc19xdWV1ZXMocGRkLT5kZXYtPmRxbSwKKwkJCQkJCQkgICAgJnBkZC0+cXBkKTsKKwkJ aWYgKHIpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIGV2aWN0IHByb2Nlc3MgcXVldWVzXG4iKTsK KwkJCWdvdG8gZmFpbDsKKwkJfQorCQluX2V2aWN0ZWQrKzsKKwl9CisKKwlyZXR1cm4gcjsKKwor ZmFpbDoKKwkvKiBUbyBrZWVwIHN0YXRlIGNvbnNpc3RlbnQsIHJvbGwgYmFjayBwYXJ0aWFsIGV2 aWN0aW9uIGJ5CisJICogcmVzdG9yaW5nIHF1ZXVlcworCSAqLworCWxpc3RfZm9yX2VhY2hfZW50 cnkocGRkLCAmcC0+cGVyX2RldmljZV9kYXRhLCBwZXJfZGV2aWNlX2xpc3QpIHsKKwkJaWYgKG5f ZXZpY3RlZCA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChwZGQtPmRldi0+ZHFtLT5vcHMucmVzdG9y ZV9wcm9jZXNzX3F1ZXVlcyhwZGQtPmRldi0+ZHFtLAorCQkJCQkJCSAgICAgICZwZGQtPnFwZCkp CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZXN0b3JlIHF1ZXVlc1xuIik7CisKKwkJbl9ldmljdGVk LS07CisJfQorCisJcmV0dXJuIHI7Cit9CisKKy8qIHByb2Nlc3NfcmVzdG9yZV9xdWV1ZXMgLSBS ZXN0b3JlIGFsbCB1c2VyIHF1ZXVlcyBvZiBhIHByb2Nlc3MgKi8KK3N0YXRpYyAgaW50IHByb2Nl c3NfcmVzdG9yZV9xdWV1ZXMoc3RydWN0IGtmZF9wcm9jZXNzICpwKQoreworCXN0cnVjdCBrZmRf cHJvY2Vzc19kZXZpY2UgKnBkZDsKKwlpbnQgciwgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hf ZW50cnkocGRkLCAmcC0+cGVyX2RldmljZV9kYXRhLCBwZXJfZGV2aWNlX2xpc3QpIHsKKwkJciA9 IHBkZC0+ZGV2LT5kcW0tPm9wcy5yZXN0b3JlX3Byb2Nlc3NfcXVldWVzKHBkZC0+ZGV2LT5kcW0s CisJCQkJCQkJICAgICAgJnBkZC0+cXBkKTsKKwkJaWYgKHIpIHsKKwkJCXByX2VycigiRmFpbGVk IHRvIHJlc3RvcmUgcHJvY2VzcyBxdWV1ZXNcbiIpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0g cjsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGV2aWN0X3Byb2Nl c3Nfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgcmV0OworCXN0cnVj dCBrZmRfcHJvY2VzcyAqcDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yazsKKworCWR3b3Jr ID0gdG9fZGVsYXllZF93b3JrKHdvcmspOworCisJLyogUHJvY2VzcyB0ZXJtaW5hdGlvbiBkZXN0 cm95cyB0aGlzIHdvcmtlciB0aHJlYWQuIFNvIGR1cmluZyB0aGUKKwkgKiBsaWZldGltZSBvZiB0 aGlzIHRocmVhZCwga2ZkX3Byb2Nlc3MgcCB3aWxsIGJlIHZhbGlkCisJICovCisJcCA9IGNvbnRh aW5lcl9vZihkd29yaywgc3RydWN0IGtmZF9wcm9jZXNzLCBldmljdGlvbl93b3JrKTsKKwlXQVJO X09OQ0UocC0+bGFzdF9ldmljdGlvbl9zZXFubyAhPSBwLT5lZi0+c2Vxbm8sCisJCSAgIkV2aWN0 aW9uIGZlbmNlIG1pc21hdGNoXG4iKTsKKworCS8qIE5hcnJvdyB3aW5kb3cgb2Ygb3ZlcmxhcCBi ZXR3ZWVuIHJlc3RvcmUgYW5kIGV2aWN0IHdvcmsKKwkgKiBpdGVtIGlzIHBvc3NpYmxlLiBPbmNl IGFtZGdwdV9hbWRrZmRfZ3B1dm1fcmVzdG9yZV9wcm9jZXNzX2JvcworCSAqIHVucmVzZXJ2ZXMg S0ZEIEJPcywgaXQgaXMgcG9zc2libGUgdG8gZXZpY3RlZCBhZ2Fpbi4gQnV0CisJICogcmVzdG9y ZSBoYXMgZmV3IG1vcmUgc3RlcHMgb2YgZmluaXNoLiBTbyBsZXRzIHdhaXQgZm9yIGFueQorCSAq IHByZXZpb3VzIHJlc3RvcmUgd29yayB0byBjb21wbGV0ZQorCSAqLworCWZsdXNoX2RlbGF5ZWRf d29yaygmcC0+cmVzdG9yZV93b3JrKTsKKworCXByX2RlYnVnKCJTdGFydGVkIGV2aWN0aW5nIHBh c2lkICVkXG4iLCBwLT5wYXNpZCk7CisJcmV0ID0gcHJvY2Vzc19ldmljdF9xdWV1ZXMocCk7CisJ aWYgKCFyZXQpIHsKKwkJZG1hX2ZlbmNlX3NpZ25hbChwLT5lZik7CisJCWRtYV9mZW5jZV9wdXQo cC0+ZWYpOworCQlwLT5lZiA9IE5VTEw7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcC0+cmVz dG9yZV93b3JrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoUFJPQ0VTU19SRVNUT1JFX1RJTUVfTVMp KTsKKworCQlwcl9kZWJ1ZygiRmluaXNoZWQgZXZpY3RpbmcgcGFzaWQgJWRcbiIsIHAtPnBhc2lk KTsKKwl9IGVsc2UKKwkJcHJfZXJyKCJGYWlsZWQgdG8gZXZpY3QgcXVldWVzIG9mIHBhc2lkICVk XG4iLCBwLT5wYXNpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfcHJvY2Vzc193b3JrZXIo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3Jr OworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpw ZGQ7CisJaW50IHJldCA9IDA7CisKKwlkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKKwor CS8qIFByb2Nlc3MgdGVybWluYXRpb24gZGVzdHJveXMgdGhpcyB3b3JrZXIgdGhyZWFkLiBTbyBk dXJpbmcgdGhlCisJICogbGlmZXRpbWUgb2YgdGhpcyB0aHJlYWQsIGtmZF9wcm9jZXNzIHAgd2ls bCBiZSB2YWxpZAorCSAqLworCXAgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCBrZmRfcHJv Y2VzcywgcmVzdG9yZV93b3JrKTsKKworCS8qIENhbGwgcmVzdG9yZV9wcm9jZXNzX2JvcyBvbiB0 aGUgZmlyc3QgS0dEIGRldmljZS4gVGhpcyBmdW5jdGlvbgorCSAqIHRha2VzIGNhcmUgb2YgcmVz dG9yaW5nIHRoZSB3aG9sZSBwcm9jZXNzIGluY2x1ZGluZyBvdGhlciBkZXZpY2VzLgorCSAqIFJl c3RvcmUgY2FuIGZhaWwgaWYgZW5vdWdoIG1lbW9yeSBpcyBub3QgYXZhaWxhYmxlLiBJZiBzbywK KwkgKiByZXNjaGVkdWxlIGFnYWluLgorCSAqLworCXBkZCA9IGxpc3RfZmlyc3RfZW50cnkoJnAt PnBlcl9kZXZpY2VfZGF0YSwKKwkJCSAgICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlLAor CQkJICAgICAgIHBlcl9kZXZpY2VfbGlzdCk7CisKKwlwcl9kZWJ1ZygiU3RhcnRlZCByZXN0b3Jp bmcgcGFzaWQgJWRcbiIsIHAtPnBhc2lkKTsKKworCS8qIFNldHRpbmcgbGFzdF9yZXN0b3JlX3Rp bWVzdGFtcCBiZWZvcmUgc3VjY2Vzc2Z1bCByZXN0b3JhdGlvbi4KKwkgKiBPdGhlcndpc2UgdGhp cyB3b3VsZCBoYXZlIHRvIGJlIHNldCBieSBLR0QgKHJlc3RvcmVfcHJvY2Vzc19ib3MpCisJICog YmVmb3JlIEtGRCBCT3MgYXJlIHVucmVzZXJ2ZWQuIElmIG5vdCwgdGhlIHByb2Nlc3MgY2FuIGJl IGV2aWN0ZWQKKwkgKiBhZ2FpbiBiZWZvcmUgdGhlIHRpbWVzdGFtcCBpcyBzZXQuCisJICogSWYg cmVzdG9yZSBmYWlscywgdGhlIHRpbWVzdGFtcCB3aWxsIGJlIHNldCBhZ2FpbiBpbiB0aGUgbmV4 dAorCSAqIGF0dGVtcHQuIFRoaXMgd291bGQgbWVhbiB0aGF0IHRoZSBtaW5pbXVtIEdQVSBxdWFu dGEgd291bGQgYmUKKwkgKiBQUk9DRVNTX0FDVElWRV9USU1FX01TIC0gKHRpbWUgdG8gZXhlY3V0 ZSB0aGUgZm9sbG93aW5nIHR3bworCSAqIGZ1bmN0aW9ucykKKwkgKi8KKworCXAtPmxhc3RfcmVz dG9yZV90aW1lc3RhbXAgPSBnZXRfamlmZmllc182NCgpOworCXJldCA9IHBkZC0+ZGV2LT5rZmQy a2dkLT5yZXN0b3JlX3Byb2Nlc3NfYm9zKHAtPmtnZF9wcm9jZXNzX2luZm8sCisJCQkJCQkgICAg ICZwLT5lZik7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHJlc3RvcmUgQk9z IG9mIHBhc2lkICVkLCByZXRyeSBhZnRlciAlZCBtc1xuIiwKKwkJCSBwLT5wYXNpZCwgUFJPQ0VT U19CQUNLX09GRl9USU1FX01TKTsKKwkJcmV0ID0gc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwLT5y ZXN0b3JlX3dvcmssCisJCQkJbXNlY3NfdG9famlmZmllcyhQUk9DRVNTX0JBQ0tfT0ZGX1RJTUVf TVMpKTsKKwkJV0FSTighcmV0LCAicmVzY2hlZHVsZSByZXN0b3JlIHdvcmsgZmFpbGVkXG4iKTsK KwkJcmV0dXJuOworCX0KKworCXJldCA9IHByb2Nlc3NfcmVzdG9yZV9xdWV1ZXMocCk7CisJaWYg KCFyZXQpCisJCXByX2RlYnVnKCJGaW5pc2hlZCByZXN0b3JpbmcgcGFzaWQgJWRcbiIsIHAtPnBh c2lkKTsKKwllbHNlCisJCXByX2VycigiRmFpbGVkIHRvIHJlc3RvcmUgcXVldWVzIG9mIHBhc2lk ICVkXG4iLCBwLT5wYXNpZCk7Cit9CisKK3ZvaWQga2ZkX3N1c3BlbmRfYWxsX3Byb2Nlc3Nlcyh2 b2lkKQoreworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwlp bnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soJmtmZF9wcm9jZXNzZXNfc3JjdSk7CisKKwloYXNoX2Zv cl9lYWNoX3JjdShrZmRfcHJvY2Vzc2VzX3RhYmxlLCB0ZW1wLCBwLCBrZmRfcHJvY2Vzc2VzKSB7 CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcC0+ZXZpY3Rpb25fd29yayk7CisJCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmcC0+cmVzdG9yZV93b3JrKTsKKworCQlpZiAocHJvY2Vzc19l dmljdF9xdWV1ZXMocCkpCisJCQlwcl9lcnIoIkZhaWxlZCB0byBzdXNwZW5kIHByb2Nlc3MgJWRc biIsIHAtPnBhc2lkKTsKKwkJZG1hX2ZlbmNlX3NpZ25hbChwLT5lZik7CisJCWRtYV9mZW5jZV9w dXQocC0+ZWYpOworCQlwLT5lZiA9IE5VTEw7CisJfQorCXNyY3VfcmVhZF91bmxvY2soJmtmZF9w cm9jZXNzZXNfc3JjdSwgaWR4KTsKK30KKworaW50IGtmZF9yZXN1bWVfYWxsX3Byb2Nlc3Nlcyh2 b2lkKQoreworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwlp bnQgcmV0ID0gMCwgaWR4ID0gc3JjdV9yZWFkX2xvY2soJmtmZF9wcm9jZXNzZXNfc3JjdSk7CisK KwloYXNoX2Zvcl9lYWNoX3JjdShrZmRfcHJvY2Vzc2VzX3RhYmxlLCB0ZW1wLCBwLCBrZmRfcHJv Y2Vzc2VzKSB7CisJCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwLT5yZXN0b3JlX3dvcmss IDApKSB7CisJCQlwcl9lcnIoIlJlc3RvcmUgcHJvY2VzcyAlZCBmYWlsZWQgZHVyaW5nIHJlc3Vt ZVxuIiwKKwkJCSAgICAgICBwLT5wYXNpZCk7CisJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJfQor CXNyY3VfcmVhZF91bmxvY2soJmtmZF9wcm9jZXNzZXNfc3JjdSwgaWR4KTsKKwlyZXR1cm4gcmV0 OworfQorCiBpbnQga2ZkX3Jlc2VydmVkX21lbV9tbWFwKHN0cnVjdCBrZmRfcHJvY2VzcyAqcHJv Y2VzcywKIAkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0tIAoyLjcuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==