From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: [PATCH 137/138] drm/amd/powerplay: Unify smu handle task function Date: Fri, 25 Jan 2019 18:25:44 +0800 Message-ID: <1548411945-12396-138-git-send-email-ray.huang@amd.com> References: <1548411945-12396-1-git-send-email-ray.huang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1548411945-12396-1-git-send-email-ray.huang-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 Cc: Likun Gao , Kevin Wang , Chengming Gui RnJvbTogTGlrdW4gR2FvIDxMaWt1bi5HYW9AYW1kLmNvbT4KClVuaWZ5IHBvd2VyIHN0YWRlIGFk anVzdCBmdW5jdGlvbiBpbnRvIHNtdV9oYW5kbGVfdGFzayBieSB0aGUganVkZ21lbnQKb2YgdGFz a19pZC4KTW92ZSBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBubyByZWxhdGlvbnNoaXAgd2l0aCBzbXUg dmVyc2lvbiBpbnRvIHRoZSBmaWxlCm9mIGFtZGdwdV9zbXUuCk1vZGlmaWVkIHRoZSBmdW5jdGlv biBvZiBzbXVfZGlzcGxheV9jb25maWdfY2hhbmdlZCBpbnRvIHR3byBwYXJ0LgpVbmlmeSBzb21l IHNpbWlsaWFyIGZ1bmN0aW9uLgoKU2lnbmVkLW9mZi1ieTogTGlrdW4gR2FvIDxMaWt1bi5HYW9A YW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEh1YW5nIFJ1aSA8cmF5Lmh1YW5nQGFtZC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtLmMgICAgICAgICB8ICA0NiArKyst LQogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kZ3B1X3NtdS5jICAgICB8IDEyNyAr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9hbWRncHVfc211 LmggfCAgMzEgKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0LmMg ICAgIHwgMjU4ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMjUw IGluc2VydGlvbnMoKyksIDIxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9wbS5jCmluZGV4IDk3MDI3YjQuLmMzNzI2NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9wbS5jCkBAIC0yNjA4LDI4ICsyNjA4LDM4IEBAIHZvaWQgYW1kZ3B1X3Bt X2NvbXB1dGVfY2xvY2tzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJYW1kZ3B1X2Zl bmNlX3dhaXRfZW1wdHkocmluZyk7CiAJfQogCi0JaWYgKGFkZXYtPnBvd2VycGxheS5wcF9mdW5j cy0+ZGlzcGF0Y2hfdGFza3MpIHsKLQkJaWYgKCFhbWRncHVfZGV2aWNlX2hhc19kY19zdXBwb3J0 KGFkZXYpKSB7CisJaWYgKGlzX3N1cHBvcnRfc3dfc211KGFkZXYpKSB7CisJCXN0cnVjdCBzbXVf Y29udGV4dCAqc211ID0gJmFkZXYtPnNtdTsKKwkJc3RydWN0IHNtdV9kcG1fY29udGV4dCAqc211 X2RwbSA9ICZhZGV2LT5zbXUuc211X2RwbTsKKwkJbXV0ZXhfbG9jaygmKHNtdS0+bXV0ZXgpKTsK KwkJc211X2hhbmRsZV90YXNrKCZhZGV2LT5zbXUsCisJCQkJc211X2RwbS0+ZHBtX2xldmVsLAor CQkJCUFNRF9QUF9UQVNLX0RJU1BMQVlfQ09ORklHX0NIQU5HRSk7CisJCW11dGV4X3VubG9jaygm KHNtdS0+bXV0ZXgpKTsKKwl9IGVsc2UgeworCQlpZiAoYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNz LT5kaXNwYXRjaF90YXNrcykgeworCQkJaWYgKCFhbWRncHVfZGV2aWNlX2hhc19kY19zdXBwb3J0 KGFkZXYpKSB7CisJCQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOworCQkJCWFtZGdwdV9k cG1fZ2V0X2FjdGl2ZV9kaXNwbGF5cyhhZGV2KTsKKwkJCQlhZGV2LT5wbS5wbV9kaXNwbGF5X2Nm Zy5udW1fZGlzcGxheSA9IGFkZXYtPnBtLmRwbS5uZXdfYWN0aXZlX2NydGNfY291bnQ7CisJCQkJ YWRldi0+cG0ucG1fZGlzcGxheV9jZmcudnJlZnJlc2ggPSBhbWRncHVfZHBtX2dldF92cmVmcmVz aChhZGV2KTsKKwkJCQlhZGV2LT5wbS5wbV9kaXNwbGF5X2NmZy5taW5fdmJsYW5rX3RpbWUgPSBh bWRncHVfZHBtX2dldF92YmxhbmtfdGltZShhZGV2KTsKKwkJCQkvKiB3ZSBoYXZlIGlzc3VlcyB3 aXRoIG1jbGsgc3dpdGNoaW5nIHdpdGggcmVmcmVzaCByYXRlcyBvdmVyIDEyMCBoeiBvbiB0aGUg bm9uLURDIGNvZGUuICovCisJCQkJaWYgKGFkZXYtPnBtLnBtX2Rpc3BsYXlfY2ZnLnZyZWZyZXNo ID4gMTIwKQorCQkJCQlhZGV2LT5wbS5wbV9kaXNwbGF5X2NmZy5taW5fdmJsYW5rX3RpbWUgPSAw OworCQkJCWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmRpc3BsYXlfY29uZmlndXJhdGlv bl9jaGFuZ2UpCisJCQkJCWFkZXYtPnBvd2VycGxheS5wcF9mdW5jcy0+ZGlzcGxheV9jb25maWd1 cmF0aW9uX2NoYW5nZSgKKwkJCQkJCQkJCWFkZXYtPnBvd2VycGxheS5wcF9oYW5kbGUsCisJCQkJ CQkJCQkmYWRldi0+cG0ucG1fZGlzcGxheV9jZmcpOworCQkJCW11dGV4X3VubG9jaygmYWRldi0+ cG0ubXV0ZXgpOworCQkJfQorCQkJYW1kZ3B1X2RwbV9kaXNwYXRjaF90YXNrKGFkZXYsIEFNRF9Q UF9UQVNLX0RJU1BMQVlfQ09ORklHX0NIQU5HRSwgTlVMTCk7CisJCX0gZWxzZSB7CiAJCQltdXRl eF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7CiAJCQlhbWRncHVfZHBtX2dldF9hY3RpdmVfZGlzcGxh eXMoYWRldik7Ci0JCQlhZGV2LT5wbS5wbV9kaXNwbGF5X2NmZy5udW1fZGlzcGxheSA9IGFkZXYt PnBtLmRwbS5uZXdfYWN0aXZlX2NydGNfY291bnQ7Ci0JCQlhZGV2LT5wbS5wbV9kaXNwbGF5X2Nm Zy52cmVmcmVzaCA9IGFtZGdwdV9kcG1fZ2V0X3ZyZWZyZXNoKGFkZXYpOwotCQkJYWRldi0+cG0u cG1fZGlzcGxheV9jZmcubWluX3ZibGFua190aW1lID0gYW1kZ3B1X2RwbV9nZXRfdmJsYW5rX3Rp bWUoYWRldik7Ci0JCQkvKiB3ZSBoYXZlIGlzc3VlcyB3aXRoIG1jbGsgc3dpdGNoaW5nIHdpdGgg cmVmcmVzaCByYXRlcyBvdmVyIDEyMCBoeiBvbiB0aGUgbm9uLURDIGNvZGUuICovCi0JCQlpZiAo YWRldi0+cG0ucG1fZGlzcGxheV9jZmcudnJlZnJlc2ggPiAxMjApCi0JCQkJYWRldi0+cG0ucG1f ZGlzcGxheV9jZmcubWluX3ZibGFua190aW1lID0gMDsKLQkJCWlmIChhZGV2LT5wb3dlcnBsYXku cHBfZnVuY3MtPmRpc3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2UpCi0JCQkJYWRldi0+cG93ZXJw bGF5LnBwX2Z1bmNzLT5kaXNwbGF5X2NvbmZpZ3VyYXRpb25fY2hhbmdlKAotCQkJCQkJCQlhZGV2 LT5wb3dlcnBsYXkucHBfaGFuZGxlLAotCQkJCQkJCQkmYWRldi0+cG0ucG1fZGlzcGxheV9jZmcp OworCQkJYW1kZ3B1X2RwbV9jaGFuZ2VfcG93ZXJfc3RhdGVfbG9ja2VkKGFkZXYpOwogCQkJbXV0 ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7CiAJCX0KLQkJYW1kZ3B1X2RwbV9kaXNwYXRjaF90 YXNrKGFkZXYsIEFNRF9QUF9UQVNLX0RJU1BMQVlfQ09ORklHX0NIQU5HRSwgTlVMTCk7Ci0JfSBl bHNlIHsKLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwotCQlhbWRncHVfZHBtX2dldF9h Y3RpdmVfZGlzcGxheXMoYWRldik7Ci0JCWFtZGdwdV9kcG1fY2hhbmdlX3Bvd2VyX3N0YXRlX2xv Y2tlZChhZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRleCk7CiAJfQogfQogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hbWRncHVfc211LmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hbWRncHVfc211LmMKaW5kZXggYjRkYjQ5MC4u NWM5YzdlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kZ3B1 X3NtdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2FtZGdwdV9zbXUuYwpA QCAtMTA0MCw2ICsxMDQwLDEzMyBAQCBzdGF0aWMgaW50IHNtdV9lbmFibGVfdW1kX3BzdGF0ZSh2 b2lkICpoYW5kbGUsCiAJcmV0dXJuIDA7CiB9CiAKK2ludCBzbXVfdW5mb3JjZV9kcG1fbGV2ZWxz KHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gc211 X3VwbG9hZF9kcG1fbGV2ZWwoc211LCBmYWxzZSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZh aWxlZCB0byB1cGxvYWQgRFBNIEJvb3R1cCBMZXZlbHMhIik7CisJCXJldHVybiByZXQ7CisJfQor CisJcmV0ID0gc211X3VwbG9hZF9kcG1fbGV2ZWwoc211LCB0cnVlKTsKKwlpZiAocmV0KSB7CisJ CXByX2VycigiRmFpbGVkIHRvIHVwbG9hZCBEUE0gTWF4IExldmVscyEiKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc211X2FkanVzdF9wb3dlcl9zdGF0ZV9k eW5hbWljKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAorCQkJCSAgIGVudW0gYW1kX2RwbV9mb3Jj ZWRfbGV2ZWwgbGV2ZWwsCisJCQkJICAgYm9vbCBza2lwX2Rpc3BsYXlfc2V0dGluZ3MpCit7CisJ aW50IHJldCA9IDA7CisJaW50IGluZGV4ID0gMDsKKwl1aW50MzJfdCBzY2xrX21hc2ssIG1jbGtf bWFzaywgc29jX21hc2s7CisJbG9uZyB3b3JrbG9hZDsKKwlzdHJ1Y3Qgc211X2RwbV9jb250ZXh0 ICpzbXVfZHBtX2N0eCA9ICYoc211LT5zbXVfZHBtKTsKKworCWlmICghc2tpcF9kaXNwbGF5X3Nl dHRpbmdzKSB7CisJCXJldCA9IHNtdV9kaXNwbGF5X2NvbmZpZ19jaGFuZ2VkKHNtdSk7CisJCWlm IChyZXQpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIGNoYW5nZSBkaXNwbGF5IGNvbmZpZyEiKTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSBzbXVfYXBwbHlfY2xvY2tzX2FkanVz dF9ydWxlcyhzbXUpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgY2xv Y2tzIGFkanVzdCBydWxlcyEiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIXNraXBfZGlz cGxheV9zZXR0aW5ncykgeworCQlyZXQgPSBzbXVfbm90aWZ5X3NtY19kaXNwYWx5X2NvbmZpZyhz bXUpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBub3RpZnkgc21jIGRpc3Bs YXkgY29uZmlnISIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmIChzbXVfZHBtX2N0 eC0+ZHBtX2xldmVsICE9IGxldmVsKSB7CisJCXN3aXRjaCAobGV2ZWwpIHsKKwkJY2FzZSBBTURf RFBNX0ZPUkNFRF9MRVZFTF9ISUdIOgorCQkJcmV0ID0gc211X2ZvcmNlX2RwbV9saW1pdF92YWx1 ZShzbXUsIHRydWUpOworCQkJYnJlYWs7CisJCWNhc2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfTE9X OgorCQkJcmV0ID0gc211X2ZvcmNlX2RwbV9saW1pdF92YWx1ZShzbXUsIGZhbHNlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfQVVUTzoKKwkJCXJldCA9IHNtdV91 bmZvcmNlX2RwbV9sZXZlbHMoc211KTsKKwkJCWJyZWFrOworCisJCWNhc2UgQU1EX0RQTV9GT1JD RURfTEVWRUxfUFJPRklMRV9TVEFOREFSRDoKKwkJY2FzZSBBTURfRFBNX0ZPUkNFRF9MRVZFTF9Q Uk9GSUxFX01JTl9TQ0xLOgorCQljYXNlIEFNRF9EUE1fRk9SQ0VEX0xFVkVMX1BST0ZJTEVfTUlO X01DTEs6CisJCWNhc2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfUFJPRklMRV9QRUFLOgorCQkJcmV0 ID0gc211X2dldF9wcm9maWxpbmdfY2xrX21hc2soc211LCBsZXZlbCwKKwkJCQkJCQkgJnNjbGtf bWFzaywKKwkJCQkJCQkgJm1jbGtfbWFzaywKKwkJCQkJCQkgJnNvY19tYXNrKTsKKwkJCWlmIChy ZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCXNtdV9mb3JjZV9jbGtfbGV2ZWxzKHNtdSwgUFBfU0NM SywgMSA8PCBzY2xrX21hc2spOworCQkJc211X2ZvcmNlX2Nsa19sZXZlbHMoc211LCBQUF9NQ0xL LCAxIDw8IG1jbGtfbWFzayk7CisJCQlicmVhazsKKworCQljYXNlIEFNRF9EUE1fRk9SQ0VEX0xF VkVMX01BTlVBTDoKKwkJY2FzZSBBTURfRFBNX0ZPUkNFRF9MRVZFTF9QUk9GSUxFX0VYSVQ6CisJ CWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmICghcmV0KQorCQkJc211X2RwbV9jdHgt PmRwbV9sZXZlbCA9IGxldmVsOworCX0KKworCWlmIChzbXVfZHBtX2N0eC0+ZHBtX2xldmVsICE9 IEFNRF9EUE1fRk9SQ0VEX0xFVkVMX01BTlVBTCkgeworCQlpbmRleCA9IGZscyhzbXUtPndvcmts b2FkX21hc2spOworCQlpbmRleCA9IGluZGV4ID4gMCAmJiBpbmRleCA8PSBXT1JLTE9BRF9QT0xJ Q1lfTUFYID8gaW5kZXggLSAxIDogMDsKKwkJd29ya2xvYWQgPSBzbXUtPndvcmtsb2FkX3NldHRp bmdbaW5kZXhdOworCisJCWlmIChzbXUtPnBvd2VyX3Byb2ZpbGVfbW9kZSAhPSB3b3JrbG9hZCkK KwkJCXNtdV9zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKHNtdSwgJndvcmtsb2FkLCAwKTsKKwl9CisK KwlyZXR1cm4gcmV0OworfQorCitpbnQgc211X2hhbmRsZV90YXNrKHN0cnVjdCBzbXVfY29udGV4 dCAqc211LAorCQkgICAgZW51bSBhbWRfZHBtX2ZvcmNlZF9sZXZlbCBsZXZlbCwKKwkJICAgIGVu dW0gYW1kX3BwX3Rhc2sgdGFza19pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAodGFz a19pZCkgeworCWNhc2UgQU1EX1BQX1RBU0tfRElTUExBWV9DT05GSUdfQ0hBTkdFOgorCQlyZXQg PSBzbXVfcHJlX2Rpc3BsYXlfY29uZmlnX2NoYW5nZWQoc211KTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisJCXJldCA9IHNtdV9zZXRfY3B1X3Bvd2VyX3N0YXRlKHNtdSk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBzbXVfYWRqdXN0X3Bvd2VyX3N0YXRlX2R5bmFt aWMoc211LCBsZXZlbCwgZmFsc2UpOworCQlicmVhazsKKwljYXNlIEFNRF9QUF9UQVNLX0NPTVBM RVRFX0lOSVQ6CisJY2FzZSBBTURfUFBfVEFTS19SRUFESlVTVF9QT1dFUl9TVEFURToKKwkJcmV0 ID0gc211X2FkanVzdF9wb3dlcl9zdGF0ZV9keW5hbWljKHNtdSwgbGV2ZWwsIHRydWUpOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBjb25z dCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIHNtdV9pcF9mdW5jcyA9IHsKIAkubmFtZSA9ICJzbXUiLAog CS5lYXJseV9pbml0ID0gc211X2Vhcmx5X2luaXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1X3NtdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaW5jL2FtZGdwdV9zbXUuaAppbmRleCBmMWIxMzZlLi42MmU0ZWQ4IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1X3NtdS5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9hbWRncHVfc211LmgKQEAgLTQzNyw2 ICs0MzcsMTggQEAgc3RydWN0IHBwdGFibGVfZnVuY3MgewogCWludCAoKnNldF9wb3dlcl9wcm9m aWxlX21vZGUpKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCBsb25nICppbnB1dCwgdWludDMyX3Qg c2l6ZSk7CiAJZW51bSBhbWRfZHBtX2ZvcmNlZF9sZXZlbCAoKmdldF9wZXJmb3JtYW5jZV9sZXZl bCkoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpOwogCWludCAoKmZvcmNlX3BlcmZvcm1hbmNlX2xl dmVsKShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwgZW51bSBhbWRfZHBtX2ZvcmNlZF9sZXZlbCBs ZXZlbCk7CisJaW50ICgqcHJlX2Rpc3BsYXlfY29uZmlnX2NoYW5nZWQpKHN0cnVjdCBzbXVfY29u dGV4dCAqc211KTsKKwlpbnQgKCpkaXNwbGF5X2NvbmZpZ19jaGFuZ2VkKShzdHJ1Y3Qgc211X2Nv bnRleHQgKnNtdSk7CisJaW50ICgqYXBwbHlfY2xvY2tzX2FkanVzdF9ydWxlcykoc3RydWN0IHNt dV9jb250ZXh0ICpzbXUpOworCWludCAoKm5vdGlmeV9zbWNfZGlzcGFseV9jb25maWcpKHN0cnVj dCBzbXVfY29udGV4dCAqc211KTsKKwlpbnQgKCpmb3JjZV9kcG1fbGltaXRfdmFsdWUpKHN0cnVj dCBzbXVfY29udGV4dCAqc211LCBib29sIGhpZ2hlc3QpOworCWludCAoKnVwbG9hZF9kcG1fbGV2 ZWwpKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCBib29sIG1heCk7CisJaW50ICgqZ2V0X3Byb2Zp bGluZ19jbGtfbWFzaykoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJCQkJICAgICAgZW51bSBh bWRfZHBtX2ZvcmNlZF9sZXZlbCBsZXZlbCwKKwkJCQkgICAgICB1aW50MzJfdCAqc2Nsa19tYXNr LAorCQkJCSAgICAgIHVpbnQzMl90ICptY2xrX21hc2ssCisJCQkJICAgICAgdWludDMyX3QgKnNv Y19tYXNrKTsKKwlpbnQgKCpzZXRfY3B1X3Bvd2VyX3N0YXRlKShzdHJ1Y3Qgc211X2NvbnRleHQg KnNtdSk7CiB9OwogCiBzdHJ1Y3Qgc211X2Z1bmNzCkBAIC02MjgsNiArNjQwLDIyIEBAIHN0cnVj dCBzbXVfZnVuY3MKIAkoKHNtdSktPnBwdF9mdW5jcy0+Z2V0X3BlcmZvcm1hbmNlX2xldmVsID8g KHNtdSktPnBwdF9mdW5jcy0+Z2V0X3BlcmZvcm1hbmNlX2xldmVsKChzbXUpKSA6IDApCiAjZGVm aW5lIHNtdV9mb3JjZV9wZXJmb3JtYW5jZV9sZXZlbChzbXUsIGxldmVsKSBcCiAJKChzbXUpLT5w cHRfZnVuY3MtPmZvcmNlX3BlcmZvcm1hbmNlX2xldmVsID8gKHNtdSktPnBwdF9mdW5jcy0+Zm9y Y2VfcGVyZm9ybWFuY2VfbGV2ZWwoKHNtdSksIChsZXZlbCkpIDogMCkKKyNkZWZpbmUgc211X3By ZV9kaXNwbGF5X2NvbmZpZ19jaGFuZ2VkKHNtdSkgXAorCSgoc211KS0+cHB0X2Z1bmNzLT5wcmVf ZGlzcGxheV9jb25maWdfY2hhbmdlZCA/IChzbXUpLT5wcHRfZnVuY3MtPnByZV9kaXNwbGF5X2Nv bmZpZ19jaGFuZ2VkKChzbXUpKSA6IDApCisjZGVmaW5lIHNtdV9kaXNwbGF5X2NvbmZpZ19jaGFu Z2VkKHNtdSkgXAorCSgoc211KS0+cHB0X2Z1bmNzLT5kaXNwbGF5X2NvbmZpZ19jaGFuZ2VkID8g KHNtdSktPnBwdF9mdW5jcy0+ZGlzcGxheV9jb25maWdfY2hhbmdlZCgoc211KSkgOiAwKQorI2Rl ZmluZSBzbXVfYXBwbHlfY2xvY2tzX2FkanVzdF9ydWxlcyhzbXUpIFwKKwkoKHNtdSktPnBwdF9m dW5jcy0+YXBwbHlfY2xvY2tzX2FkanVzdF9ydWxlcyA/IChzbXUpLT5wcHRfZnVuY3MtPmFwcGx5 X2Nsb2Nrc19hZGp1c3RfcnVsZXMoKHNtdSkpIDogMCkKKyNkZWZpbmUgc211X25vdGlmeV9zbWNf ZGlzcGFseV9jb25maWcoc211KSBcCisJKChzbXUpLT5wcHRfZnVuY3MtPm5vdGlmeV9zbWNfZGlz cGFseV9jb25maWcgPyAoc211KS0+cHB0X2Z1bmNzLT5ub3RpZnlfc21jX2Rpc3BhbHlfY29uZmln KChzbXUpKSA6IDApCisjZGVmaW5lIHNtdV9mb3JjZV9kcG1fbGltaXRfdmFsdWUoc211LCBoaWdo ZXN0KSBcCisJKChzbXUpLT5wcHRfZnVuY3MtPmZvcmNlX2RwbV9saW1pdF92YWx1ZSA/IChzbXUp LT5wcHRfZnVuY3MtPmZvcmNlX2RwbV9saW1pdF92YWx1ZSgoc211KSwgKGhpZ2hlc3QpKSA6IDAp CisjZGVmaW5lIHNtdV91cGxvYWRfZHBtX2xldmVsKHNtdSwgbWF4KSBcCisJKChzbXUpLT5wcHRf ZnVuY3MtPnVwbG9hZF9kcG1fbGV2ZWwgPyAoc211KS0+cHB0X2Z1bmNzLT51cGxvYWRfZHBtX2xl dmVsKChzbXUpLCAobWF4KSkgOiAwKQorI2RlZmluZSBzbXVfZ2V0X3Byb2ZpbGluZ19jbGtfbWFz ayhzbXUsIGxldmVsLCBzY2xrX21hc2ssIG1jbGtfbWFzaywgc29jX21hc2spIFwKKwkoKHNtdSkt PnBwdF9mdW5jcy0+Z2V0X3Byb2ZpbGluZ19jbGtfbWFzayA/IChzbXUpLT5wcHRfZnVuY3MtPmdl dF9wcm9maWxpbmdfY2xrX21hc2soKHNtdSksIChsZXZlbCksIChzY2xrX21hc2spLCAobWNsa19t YXNrKSwgKHNvY19tYXNrKSkgOiAwKQorI2RlZmluZSBzbXVfc2V0X2NwdV9wb3dlcl9zdGF0ZShz bXUpIFwKKwkoKHNtdSktPnBwdF9mdW5jcy0+c2V0X2NwdV9wb3dlcl9zdGF0ZSA/IChzbXUpLT5w cHRfZnVuY3MtPnNldF9jcHVfcG93ZXJfc3RhdGUoKHNtdSkpIDogMCkKIAogI2RlZmluZSBzbXVf bXNnX2dldF9pbmRleChzbXUsIG1zZykgXAogCSgoc211KS0+cHB0X2Z1bmNzPyAoKHNtdSktPnBw dF9mdW5jcy0+Z2V0X3NtdV9tc2dfaW5kZXg/IChzbXUpLT5wcHRfZnVuY3MtPmdldF9zbXVfbXNn X2luZGV4KChzbXUpLCAobXNnKSkgOiAtRUlOVkFMKSA6IC1FSU5WQUwpCkBAIC02OTgsNCArNzI2 LDcgQEAgZXh0ZXJuIGludCBzbXVfZGlzcGxheV9jb25maWd1cmF0aW9uX2NoYW5nZShzdHJ1Y3Qg c211X2NvbnRleHQgKnNtdSwgY29uc3QKIGV4dGVybiBpbnQgc211X2dldF9jdXJyZW50X2Nsb2Nr cyhzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKIAkJCQkgIHN0cnVjdCBhbWRfcHBfY2xvY2tfaW5m byAqY2xvY2tzKTsKIGV4dGVybiBpbnQgc211X2RwbV9zZXRfcG93ZXJfZ2F0ZShzdHJ1Y3Qgc211 X2NvbnRleHQgKnNtdSx1aW50MzJfdCBibG9ja190eXBlLCBib29sIGdhdGUpOworZXh0ZXJuIGlu dCBzbXVfaGFuZGxlX3Rhc2soc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJCQkgICBlbnVtIGFt ZF9kcG1fZm9yY2VkX2xldmVsIGxldmVsLAorCQkJICAgZW51bSBhbWRfcHBfdGFzayB0YXNrX2lk KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvdmVn YTIwX3BwdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvdmVnYTIwX3BwdC5jCmlu ZGV4IDMyYjFmZmMuLjAyMjJlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93 ZXJwbGF5L3ZlZ2EyMF9wcHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92 ZWdhMjBfcHB0LmMKQEAgLTg3Nyw3MSArODc3LDM5IEBAIHN0YXRpYyBpbnQgdmVnYTIwX3ByaW50 X2Nsa19sZXZlbHMoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCiAJcmV0dXJuIHNpemU7CiB9CiAK LXN0YXRpYyBpbnQgdmVnYTIwX3VwbG9hZF9kcG1fbWluX2xldmVsKHN0cnVjdCBzbXVfY29udGV4 dCAqc211KQorc3RhdGljIGludCB2ZWdhMjBfdXBsb2FkX2RwbV9sZXZlbChzdHJ1Y3Qgc211X2Nv bnRleHQgKnNtdSwgYm9vbCBtYXgpCiB7CiAJc3RydWN0IHZlZ2EyMF9kcG1fdGFibGUgKmRwbV90 YWJsZTsKIAlzdHJ1Y3QgdmVnYTIwX3NpbmdsZV9kcG1fdGFibGUgKnNpbmdsZV9kcG1fdGFibGU7 Ci0JdWludDMyX3QgbWluX2ZyZXE7CisJdWludDMyX3QgZnJlcTsKIAlpbnQgcmV0ID0gMDsKIAog CWRwbV90YWJsZSA9IHNtdS0+c211X2RwbS5kcG1fY29udGV4dDsKIAogCWlmIChzbXVfZmVhdHVy ZV9pc19lbmFibGVkKHNtdSwgRkVBVFVSRV9EUE1fR0ZYQ0xLX0JJVCkpIHsKIAkJc2luZ2xlX2Rw bV90YWJsZSA9ICYoZHBtX3RhYmxlLT5nZnhfdGFibGUpOwotCQltaW5fZnJlcSA9IHNpbmdsZV9k cG1fdGFibGUtPmRwbV9zdGF0ZS5zb2Z0X21pbl9sZXZlbDsKKwkJZnJlcSA9IG1heCA/IHNpbmds ZV9kcG1fdGFibGUtPmRwbV9zdGF0ZS5zb2Z0X21heF9sZXZlbCA6CisJCQlzaW5nbGVfZHBtX3Rh YmxlLT5kcG1fc3RhdGUuc29mdF9taW5fbGV2ZWw7CiAJCXJldCA9IHNtdV9zZW5kX3NtY19tc2df d2l0aF9wYXJhbShzbXUsCi0JCQlTTVVfTVNHX1NldFNvZnRNaW5CeUZyZXEsCi0JCQkoUFBDTEtf R0ZYQ0xLIDw8IDE2KSB8IChtaW5fZnJlcSAmIDB4ZmZmZikpOworCQkJKG1heCA/IFNNVV9NU0df U2V0U29mdE1heEJ5RnJlcSA6IFNNVV9NU0dfU2V0U29mdE1pbkJ5RnJlcSksCisJCQkoUFBDTEtf R0ZYQ0xLIDw8IDE2KSB8IChmcmVxICYgMHhmZmZmKSk7CiAJCWlmIChyZXQpIHsKLQkJCXByX2Vy cigiRmFpbGVkIHRvIHNldCBzb2Z0IG1pbiBnZnhjbGsgIVxuIik7CisJCQlwcl9lcnIoIkZhaWxl ZCB0byBzZXQgc29mdCAlcyBnZnhjbGsgIVxuIiwKKwkJCQkJCW1heCA/ICJtYXgiIDogIm1pbiIp OwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAogCWlmIChzbXVfZmVhdHVyZV9pc19lbmFibGVk KHNtdSwgRkVBVFVSRV9EUE1fVUNMS19CSVQpKSB7CiAJCXNpbmdsZV9kcG1fdGFibGUgPSAmKGRw bV90YWJsZS0+bWVtX3RhYmxlKTsKLQkJbWluX2ZyZXEgPSBzaW5nbGVfZHBtX3RhYmxlLT5kcG1f c3RhdGUuc29mdF9taW5fbGV2ZWw7CisJCWZyZXEgPSBtYXggPyBzaW5nbGVfZHBtX3RhYmxlLT5k cG1fc3RhdGUuc29mdF9tYXhfbGV2ZWwgOgorCQkJc2luZ2xlX2RwbV90YWJsZS0+ZHBtX3N0YXRl LnNvZnRfbWluX2xldmVsOwogCQlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211 LAotCQkJU01VX01TR19TZXRTb2Z0TWluQnlGcmVxLAotCQkJKFBQQ0xLX1VDTEsgPDwgMTYpIHwg KG1pbl9mcmVxICYgMHhmZmZmKSk7CisJCQkobWF4ID8gU01VX01TR19TZXRTb2Z0TWF4QnlGcmVx IDogU01VX01TR19TZXRTb2Z0TWluQnlGcmVxKSwKKwkJCShQUENMS19VQ0xLIDw8IDE2KSB8IChm cmVxICYgMHhmZmZmKSk7CiAJCWlmIChyZXQpIHsKLQkJCXByX2VycigiRmFpbGVkIHRvIHNldCBz b2Z0IG1pbiBtZW1jbGsgIVxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIGludCB2ZWdhMjBfdXBsb2FkX2RwbV9tYXhfbGV2ZWwoc3RydWN0 IHNtdV9jb250ZXh0ICpzbXUpCi17Ci0Jc3RydWN0IHZlZ2EyMF9kcG1fdGFibGUgKmRwbV90YWJs ZTsKLQlzdHJ1Y3QgdmVnYTIwX3NpbmdsZV9kcG1fdGFibGUgKnNpbmdsZV9kcG1fdGFibGU7Ci0J dWludDMyX3QgbWF4X2ZyZXE7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcG1fdGFibGUgPSBzbXUtPnNt dV9kcG0uZHBtX2NvbnRleHQ7Ci0KLQlpZiAoc211X2ZlYXR1cmVfaXNfZW5hYmxlZChzbXUsIEZF QVRVUkVfRFBNX0dGWENMS19CSVQpKSB7Ci0JCXNpbmdsZV9kcG1fdGFibGUgPSAmKGRwbV90YWJs ZS0+Z2Z4X3RhYmxlKTsKLQkJbWF4X2ZyZXEgPSBzaW5nbGVfZHBtX3RhYmxlLT5kcG1fc3RhdGUu c29mdF9tYXhfbGV2ZWw7Ci0JCXJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUs Ci0JCQlTTVVfTVNHX1NldFNvZnRNYXhCeUZyZXEsCi0JCQkoUFBDTEtfR0ZYQ0xLIDw8IDE2KSB8 IChtYXhfZnJlcSAmIDB4ZmZmZikpOwotCQlpZiAocmV0KSB7Ci0JCQlwcl9lcnIoIkZhaWxlZCB0 byBzZXQgc29mdCBtYXggZ2Z4Y2xrICFcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQot CWlmIChzbXVfZmVhdHVyZV9pc19lbmFibGVkKHNtdSwgRkVBVFVSRV9EUE1fVUNMS19CSVQpKSB7 Ci0JCXNpbmdsZV9kcG1fdGFibGUgPSAmKGRwbV90YWJsZS0+bWVtX3RhYmxlKTsKLQkJbWF4X2Zy ZXEgPSBzaW5nbGVfZHBtX3RhYmxlLT5kcG1fc3RhdGUuc29mdF9tYXhfbGV2ZWw7Ci0JCXJldCA9 IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsCi0JCQlTTVVfTVNHX1NldFNvZnRNYXhC eUZyZXEsCi0JCQkoUFBDTEtfVUNMSyA8PCAxNikgfCAobWF4X2ZyZXEgJiAweGZmZmYpKTsKLQkJ aWYgKHJldCkgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0IHNvZnQgbWF4IG1lbWNsayAhXG4i KTsKKwkJCXByX2VycigiRmFpbGVkIHRvIHNldCBzb2Z0ICVzIG1lbWNsayAhXG4iLAorCQkJCQkJ bWF4ID8gIm1heCIgOiAibWluIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtOTg2LDEz ICs5NTQsMTMgQEAgc3RhdGljIGludCB2ZWdhMjBfZm9yY2VfY2xrX2xldmVscyhzdHJ1Y3Qgc211 X2NvbnRleHQgKnNtdSwKIAkJc2luZ2xlX2RwbV90YWJsZS0+ZHBtX3N0YXRlLnNvZnRfbWF4X2xl dmVsID0KIAkJCXNpbmdsZV9kcG1fdGFibGUtPmRwbV9sZXZlbHNbc29mdF9tYXhfbGV2ZWxdLnZh bHVlOwogCi0JCXJldCA9IHZlZ2EyMF91cGxvYWRfZHBtX21pbl9sZXZlbChzbXUpOworCQlyZXQg PSB2ZWdhMjBfdXBsb2FkX2RwbV9sZXZlbChzbXUsIGZhbHNlKTsKIAkJaWYgKHJldCkgewogCQkJ cHJfZXJyKCJGYWlsZWQgdG8gdXBsb2FkIGJvb3QgbGV2ZWwgdG8gbG93ZXN0IVxuIik7CiAJCQli cmVhazsKIAkJfQogCi0JCXJldCA9IHZlZ2EyMF91cGxvYWRfZHBtX21heF9sZXZlbChzbXUpOwor CQlyZXQgPSB2ZWdhMjBfdXBsb2FkX2RwbV9sZXZlbChzbXUsIHRydWUpOwogCQlpZiAocmV0KQog CQkJcHJfZXJyKCJGYWlsZWQgdG8gdXBsb2FkIGRwbSBtYXggbGV2ZWwgdG8gaGlnaGVzdCFcbiIp OwogCkBAIC0xMDEzLDEzICs5ODEsMTMgQEAgc3RhdGljIGludCB2ZWdhMjBfZm9yY2VfY2xrX2xl dmVscyhzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKIAkJc2luZ2xlX2RwbV90YWJsZS0+ZHBtX3N0 YXRlLnNvZnRfbWF4X2xldmVsID0KIAkJCXNpbmdsZV9kcG1fdGFibGUtPmRwbV9sZXZlbHNbc29m dF9tYXhfbGV2ZWxdLnZhbHVlOwogCi0JCXJldCA9IHZlZ2EyMF91cGxvYWRfZHBtX21pbl9sZXZl bChzbXUpOworCQlyZXQgPSB2ZWdhMjBfdXBsb2FkX2RwbV9sZXZlbChzbXUsIGZhbHNlKTsKIAkJ aWYgKHJldCkgewogCQkJcHJfZXJyKCJGYWlsZWQgdG8gdXBsb2FkIGJvb3QgbGV2ZWwgdG8gbG93 ZXN0IVxuIik7CiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IHZlZ2EyMF91cGxvYWRfZHBtX21h eF9sZXZlbChzbXUpOworCQlyZXQgPSB2ZWdhMjBfdXBsb2FkX2RwbV9sZXZlbChzbXUsIHRydWUp OwogCQlpZiAocmV0KQogCQkJcHJfZXJyKCJGYWlsZWQgdG8gdXBsb2FkIGRwbSBtYXggbGV2ZWwg dG8gaGlnaGVzdCFcbiIpOwogCkBAIC0xMzg5LDExICsxMzU3LDI2IEBAIHZlZ2EyMF9zZXRfdWNs a190b19oaWdoZXN0X2RwbV9sZXZlbChzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKIAlyZXR1cm4g cmV0OwogfQogCi1zdGF0aWMgaW50IHZlZ2EyMF9kaXNwbGF5X2NvbmZpZ19jaGFuZ2VkKHN0cnVj dCBzbXVfY29udGV4dCAqc211KQorc3RhdGljIGludCB2ZWdhMjBfcHJlX2Rpc3BsYXlfY29uZmln X2NoYW5nZWQoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCiB7CiAJaW50IHJldCA9IDA7CiAJc3Ry dWN0IHZlZ2EyMF9kcG1fdGFibGUgKmRwbV90YWJsZSA9IHNtdS0+c211X2RwbS5kcG1fY29udGV4 dDsKIAorCWlmICghc211LT5zbXVfZHBtLmRwbV9jb250ZXh0KQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfTnVtT2ZEaXNwbGF5 cywgMCk7CisJcmV0ID0gdmVnYTIwX3NldF91Y2xrX3RvX2hpZ2hlc3RfZHBtX2xldmVsKHNtdSwK KwkJCQkJCSAgICZkcG1fdGFibGUtPm1lbV90YWJsZSk7CisJaWYgKHJldCkKKwkJcHJfZXJyKCJG YWlsZWQgdG8gc2V0IHVjbGsgdG8gaGlnaGVzdCBkcG0gbGV2ZWwiKTsKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IHZlZ2EyMF9kaXNwbGF5X2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCBzbXVf Y29udGV4dCAqc211KQoreworCWludCByZXQgPSAwOworCiAJaWYgKCFzbXUtPmZ1bmNzKQogCQly ZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQwMiwxNCArMTM4NSw2IEBAIHN0YXRpYyBpbnQgdmVnYTIw X2Rpc3BsYXlfY29uZmlnX2NoYW5nZWQoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCiAJICAgICFz bXUtPnNtdV90YWJsZS50YWJsZXNbVEFCTEVfV0FURVJNQVJLU10uY3B1X2FkZHIpCiAJCXJldHVy biAtRUlOVkFMOwogCi0Jc211X3NlbmRfc21jX21zZ193aXRoX3BhcmFtKHNtdSwgU01VX01TR19O dW1PZkRpc3BsYXlzLCAwKTsKLQlyZXQgPSB2ZWdhMjBfc2V0X3VjbGtfdG9faGlnaGVzdF9kcG1f bGV2ZWwoc211LAotCQkJCQkJICAgJmRwbV90YWJsZS0+bWVtX3RhYmxlKTsKLQlpZiAocmV0KSB7 Ci0JCXByX2VycigiRmFpbGVkIHRvIHNldCB1Y2xrIHRvIGhpZ2hlc3QgZHBtIGxldmVsIik7Ci0J CXJldHVybiByZXQ7Ci0JfQotCiAJaWYgKChzbXUtPndhdGVybWFya3NfYml0bWFwICYgV0FURVJN QVJLU19FWElTVCkgJiYKIAkgICAgIShzbXUtPndhdGVybWFya3NfYml0bWFwICYgV0FURVJNQVJL U19MT0FERUQpKSB7CiAJCXJldCA9IHNtdS0+ZnVuY3MtPndyaXRlX3dhdGVybWFya3NfdGFibGUo c211KTsKQEAgLTE2NzIsODUgKzE2NDcsNDIgQEAgc3RhdGljIHVpbnQzMl90IHZlZ2EyMF9maW5k X2xvd2VzdF9kcG1fbGV2ZWwoc3RydWN0IHZlZ2EyMF9zaW5nbGVfZHBtX3RhYmxlICp0YWIKIAly ZXR1cm4gaTsKIH0KIAotc3RhdGljIGludCB2ZWdhMjBfZm9yY2VfZHBtX2hpZ2hlc3Qoc3RydWN0 IHNtdV9jb250ZXh0ICpzbXUpCitzdGF0aWMgaW50IHZlZ2EyMF9mb3JjZV9kcG1fbGltaXRfdmFs dWUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIGJvb2wgaGlnaGVzdCkKIHsKIAl1aW50MzJfdCBz b2Z0X2xldmVsOwogCWludCByZXQgPSAwOwotCXN0cnVjdCB2ZWdhMjBfZHBtX3RhYmxlICpkcG1f dGFibGUgPSAoc3RydWN0IHZlZ2EyMF9kcG1fdGFibGUgKilzbXUtPnNtdV9kcG0uZHBtX2NvbnRl eHQ7CisJc3RydWN0IHZlZ2EyMF9kcG1fdGFibGUgKmRwbV90YWJsZSA9CisJCShzdHJ1Y3QgdmVn YTIwX2RwbV90YWJsZSAqKXNtdS0+c211X2RwbS5kcG1fY29udGV4dDsKIAotCXNvZnRfbGV2ZWwg PSB2ZWdhMjBfZmluZF9oaWdoZXN0X2RwbV9sZXZlbCgmKGRwbV90YWJsZS0+Z2Z4X3RhYmxlKSk7 CisJaWYgKGhpZ2hlc3QpCisJCXNvZnRfbGV2ZWwgPSB2ZWdhMjBfZmluZF9oaWdoZXN0X2RwbV9s ZXZlbCgmKGRwbV90YWJsZS0+Z2Z4X3RhYmxlKSk7CisJZWxzZQorCQlzb2Z0X2xldmVsID0gdmVn YTIwX2ZpbmRfbG93ZXN0X2RwbV9sZXZlbCgmKGRwbV90YWJsZS0+Z2Z4X3RhYmxlKSk7CiAKIAlk cG1fdGFibGUtPmdmeF90YWJsZS5kcG1fc3RhdGUuc29mdF9taW5fbGV2ZWwgPQogCQlkcG1fdGFi bGUtPmdmeF90YWJsZS5kcG1fc3RhdGUuc29mdF9tYXhfbGV2ZWwgPQogCQlkcG1fdGFibGUtPmdm eF90YWJsZS5kcG1fbGV2ZWxzW3NvZnRfbGV2ZWxdLnZhbHVlOwogCi0Jc29mdF9sZXZlbCA9IHZl Z2EyMF9maW5kX2hpZ2hlc3RfZHBtX2xldmVsKCYoZHBtX3RhYmxlLT5tZW1fdGFibGUpKTsKKwlp ZiAoaGlnaGVzdCkKKwkJc29mdF9sZXZlbCA9IHZlZ2EyMF9maW5kX2hpZ2hlc3RfZHBtX2xldmVs KCYoZHBtX3RhYmxlLT5tZW1fdGFibGUpKTsKKwllbHNlCisJCXNvZnRfbGV2ZWwgPSB2ZWdhMjBf ZmluZF9sb3dlc3RfZHBtX2xldmVsKCYoZHBtX3RhYmxlLT5tZW1fdGFibGUpKTsKIAogCWRwbV90 YWJsZS0+bWVtX3RhYmxlLmRwbV9zdGF0ZS5zb2Z0X21pbl9sZXZlbCA9CiAJCWRwbV90YWJsZS0+ bWVtX3RhYmxlLmRwbV9zdGF0ZS5zb2Z0X21heF9sZXZlbCA9CiAJCWRwbV90YWJsZS0+bWVtX3Rh YmxlLmRwbV9sZXZlbHNbc29mdF9sZXZlbF0udmFsdWU7CiAKLQlyZXQgPSB2ZWdhMjBfdXBsb2Fk X2RwbV9taW5fbGV2ZWwoc211KTsKKwlyZXQgPSB2ZWdhMjBfdXBsb2FkX2RwbV9sZXZlbChzbXUs IGZhbHNlKTsKIAlpZiAocmV0KSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHVwbG9hZCBib290IGxl dmVsIHRvIGhpZ2hlc3QhIik7CisJCXByX2VycigiRmFpbGVkIHRvIHVwbG9hZCBib290IGxldmVs IHRvICVzIVxuIiwKKwkJCQloaWdoZXN0ID8gImhpZ2hlc3QiIDogImxvd2VzdCIpOwogCQlyZXR1 cm4gcmV0OwogCX0KIAotCXJldCA9IHZlZ2EyMF91cGxvYWRfZHBtX21heF9sZXZlbChzbXUpOwor CXJldCA9IHZlZ2EyMF91cGxvYWRfZHBtX2xldmVsKHNtdSwgZmFsc2UpOwogCWlmIChyZXQpIHsK LQkJcHJfZXJyKCJGYWlsZWQgdG8gdXBsb2FkIGRwbSBtYXggbGV2ZWwgdG8gaGlnaGVzdCEiKTsK LQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHZlZ2Ey MF9mb3JjZV9kcG1fbG93ZXN0KHN0cnVjdCBzbXVfY29udGV4dCAqc211KQotewotCXVpbnQzMl90 IHNvZnRfbGV2ZWw7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHZlZ2EyMF9kcG1fdGFibGUgKmRw bV90YWJsZSA9IChzdHJ1Y3QgdmVnYTIwX2RwbV90YWJsZSAqKXNtdS0+c211X2RwbS5kcG1fY29u dGV4dDsKLQotCXNvZnRfbGV2ZWwgPSB2ZWdhMjBfZmluZF9sb3dlc3RfZHBtX2xldmVsKCYoZHBt X3RhYmxlLT5nZnhfdGFibGUpKTsKLQotCWRwbV90YWJsZS0+Z2Z4X3RhYmxlLmRwbV9zdGF0ZS5z b2Z0X21pbl9sZXZlbCA9Ci0JCWRwbV90YWJsZS0+Z2Z4X3RhYmxlLmRwbV9zdGF0ZS5zb2Z0X21h eF9sZXZlbCA9Ci0JCWRwbV90YWJsZS0+Z2Z4X3RhYmxlLmRwbV9sZXZlbHNbc29mdF9sZXZlbF0u dmFsdWU7Ci0KLQlzb2Z0X2xldmVsID0gdmVnYTIwX2ZpbmRfbG93ZXN0X2RwbV9sZXZlbCgmKGRw bV90YWJsZS0+bWVtX3RhYmxlKSk7Ci0KLQlkcG1fdGFibGUtPm1lbV90YWJsZS5kcG1fc3RhdGUu c29mdF9taW5fbGV2ZWwgPQotCQlkcG1fdGFibGUtPm1lbV90YWJsZS5kcG1fc3RhdGUuc29mdF9t YXhfbGV2ZWwgPQotCQlkcG1fdGFibGUtPm1lbV90YWJsZS5kcG1fbGV2ZWxzW3NvZnRfbGV2ZWxd LnZhbHVlOwotCi0JcmV0ID0gdmVnYTIwX3VwbG9hZF9kcG1fbWluX2xldmVsKHNtdSk7Ci0JaWYg KHJldCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byB1cGxvYWQgYm9vdCBsZXZlbCB0byBsb3dlc3Qh Iik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gdmVnYTIwX3VwbG9hZF9kcG1fbWF4X2xl dmVsKHNtdSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byB1cGxvYWQgZHBtIG1h eCBsZXZlbCB0byBsb3dlc3QhIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIGludCB2ZWdhMjBfdW5mb3JjZV9kcG1fbGV2ZWxzKHN0cnVjdCBzbXVfY29u dGV4dCAqc211KQotewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gdmVnYTIwX3VwbG9hZF9kcG1f bWluX2xldmVsKHNtdSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byB1cGxvYWQg RFBNIEJvb3R1cCBMZXZlbHMhIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gdmVnYTIw X3VwbG9hZF9kcG1fbWF4X2xldmVsKHNtdSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIkZhaWxl ZCB0byB1cGxvYWQgRFBNIE1heCBMZXZlbHMhIik7CisJCXByX2VycigiRmFpbGVkIHRvIHVwbG9h ZCBkcG0gbWF4IGxldmVsIHRvICVzIVxuISIsCisJCQkJaGlnaGVzdCA/ICJoaWdoZXN0IiA6ICJs b3dlc3QiKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE3NzEsNzggKzE3MDMsNiBAQCBzdGF0 aWMgZW51bSBhbWRfZHBtX2ZvcmNlZF9sZXZlbCB2ZWdhMjBfZ2V0X3BlcmZvcm1hbmNlX2xldmVs KHN0cnVjdCBzbXVfY29udGV4dAogCXJldHVybiBzbXVfZHBtX2N0eC0+ZHBtX2xldmVsOwogfQog Ci1zdGF0aWMgaW50IHZlZ2EyMF9hZGp1c3RfcG93ZXJfc3RhdGVfZHluYW1pYyhzdHJ1Y3Qgc211 X2NvbnRleHQgKnNtdSwKLQkJCQkJICAgICBlbnVtIGFtZF9kcG1fZm9yY2VkX2xldmVsIGxldmVs KQotewotCWludCByZXQgPSAwOwotCWludCBpbmRleCA9IDA7Ci0JdWludDMyX3Qgc2Nsa19tYXNr LCBtY2xrX21hc2ssIHNvY19tYXNrOwotCWxvbmcgd29ya2xvYWQ7Ci0Jc3RydWN0IHNtdV9kcG1f Y29udGV4dCAqc211X2RwbV9jdHggPSAmKHNtdS0+c211X2RwbSk7Ci0KLQlyZXQgPSB2ZWdhMjBf ZGlzcGxheV9jb25maWdfY2hhbmdlZChzbXUpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJGYWls ZWQgdG8gY2hhbmdlIGRpc3BsYXkgY29uZmlnISIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQg PSB2ZWdhMjBfYXBwbHlfY2xvY2tzX2FkanVzdF9ydWxlcyhzbXUpOwotCWlmIChyZXQpIHsKLQkJ cHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgY2xvY2tzIGFkanVzdCBydWxlcyEiKTsKLQkJcmV0dXJu IHJldDsKLQl9Ci0JcmV0ID0gdmVnYTIwX25vdGlmeV9zbWNfZGlzcGFseV9jb25maWcoc211KTsK LQlpZiAocmV0KSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIG5vdGlmeSBzbWMgZGlzcGxheSBjb25m aWchIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgQU1E X0RQTV9GT1JDRURfTEVWRUxfSElHSDoKLQkJcmV0ID0gdmVnYTIwX2ZvcmNlX2RwbV9oaWdoZXN0 KHNtdSk7Ci0JCWJyZWFrOwotCWNhc2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfTE9XOgotCQlyZXQg PSB2ZWdhMjBfZm9yY2VfZHBtX2xvd2VzdChzbXUpOwotCQlicmVhazsKLQotCWNhc2UgQU1EX0RQ TV9GT1JDRURfTEVWRUxfQVVUTzoKLQkJcmV0ID0gdmVnYTIwX3VuZm9yY2VfZHBtX2xldmVscyhz bXUpOwotCQlicmVhazsKLQotCWNhc2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfUFJPRklMRV9TVEFO REFSRDoKLQljYXNlIEFNRF9EUE1fRk9SQ0VEX0xFVkVMX1BST0ZJTEVfTUlOX1NDTEs6Ci0JY2Fz ZSBBTURfRFBNX0ZPUkNFRF9MRVZFTF9QUk9GSUxFX01JTl9NQ0xLOgotCWNhc2UgQU1EX0RQTV9G T1JDRURfTEVWRUxfUFJPRklMRV9QRUFLOgotCQlyZXQgPSB2ZWdhMjBfZ2V0X3Byb2ZpbGluZ19j bGtfbWFzayhzbXUsIGxldmVsLAotCQkJCQkJICAgICZzY2xrX21hc2ssCi0JCQkJCQkgICAgJm1j bGtfbWFzaywKLQkJCQkJCSAgICAmc29jX21hc2spOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJl dDsKLQkJdmVnYTIwX2ZvcmNlX2Nsa19sZXZlbHMoc211LCBQUF9TQ0xLLCAxIDw8IHNjbGtfbWFz ayk7Ci0JCXZlZ2EyMF9mb3JjZV9jbGtfbGV2ZWxzKHNtdSwgUFBfTUNMSywgMSA8PCBtY2xrX21h c2spOwotCQlicmVhazsKLQotCWNhc2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfTUFOVUFMOgotCWNh c2UgQU1EX0RQTV9GT1JDRURfTEVWRUxfUFJPRklMRV9FWElUOgotCWRlZmF1bHQ6Ci0JCWJyZWFr OwotCX0KLQotCWlmICghcmV0KQotCQlzbXVfZHBtX2N0eC0+ZHBtX2xldmVsID0gbGV2ZWw7Ci0K LQlpZiAoc211X2RwbV9jdHgtPmRwbV9sZXZlbCAhPSBBTURfRFBNX0ZPUkNFRF9MRVZFTF9NQU5V QUwpIHsKLQkJaW5kZXggPSBmbHMoc211LT53b3JrbG9hZF9tYXNrKTsKLQkJaW5kZXggPSBpbmRl eCA+IDAgJiYgaW5kZXggPD0gV09SS0xPQURfUE9MSUNZX01BWCA/IGluZGV4IC0gMSA6IDA7Ci0J CXdvcmtsb2FkID0gc211LT53b3JrbG9hZF9zZXR0aW5nW2luZGV4XTsKLQotCQlpZiAoc211LT5w b3dlcl9wcm9maWxlX21vZGUgIT0gd29ya2xvYWQpCi0JCQlzbXUtPmZ1bmNzLT5zZXRfcG93ZXJf cHJvZmlsZV9tb2RlKHNtdSwgJndvcmtsb2FkLCAwKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQot CiBzdGF0aWMgaW50CiB2ZWdhMjBfZm9yY2VfcGVyZm9ybWFuY2VfbGV2ZWwoc3RydWN0IHNtdV9j b250ZXh0ICpzbXUsIGVudW0gYW1kX2RwbV9mb3JjZWRfbGV2ZWwgbGV2ZWwpCiB7CkBAIC0xODYx LDcgKzE3MjEsOCBAQCB2ZWdhMjBfZm9yY2VfcGVyZm9ybWFuY2VfbGV2ZWwoc3RydWN0IHNtdV9j b250ZXh0ICpzbXUsIGVudW0gYW1kX2RwbV9mb3JjZWRfbGV2ZQogCW11dGV4X2xvY2soJnNtdS0+ bXV0ZXgpOwogCiAJc211LT5hZGV2LT5pcF9ibG9ja3NbaV0udmVyc2lvbi0+ZnVuY3MtPmVuYWJs ZV91bWRfcHN0YXRlKHNtdSwgJmxldmVsKTsKLQlyZXQgPSB2ZWdhMjBfYWRqdXN0X3Bvd2VyX3N0 YXRlX2R5bmFtaWMoc211LCBsZXZlbCk7CisJcmV0ID0gc211X2hhbmRsZV90YXNrKHNtdSwgbGV2 ZWwsCisJCQkgICAgICBBTURfUFBfVEFTS19SRUFESlVTVF9QT1dFUl9TVEFURSk7CiAKIAltdXRl eF91bmxvY2soJnNtdS0+bXV0ZXgpOwogCkBAIC0yMDA5LDcgKzE4NzAsOCBAQCBzdGF0aWMgaW50 IHZlZ2EyMF9zZXRfb2RfcGVyY2VudGFnZShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKIAkJc2lu Z2xlX2RwbV90YWJsZS0+ZHBtX2xldmVsc1swXS52YWx1ZSA9IHNtdS0+c211X3RhYmxlLmJvb3Rf dmFsdWVzLmdmeGNsayAvIDEwMDsKIAl9CiAKLQlyZXQgPSB2ZWdhMjBfYWRqdXN0X3Bvd2VyX3N0 YXRlX2R5bmFtaWMoc211LCBzbXVfZHBtLT5kcG1fbGV2ZWwpOworCXJldCA9IHNtdV9oYW5kbGVf dGFzayhzbXUsIHNtdV9kcG0tPmRwbV9sZXZlbCwKKwkJCSAgICAgIEFNRF9QUF9UQVNLX1JFQURK VVNUX1BPV0VSX1NUQVRFKTsKIAogc2V0X29kX2ZhaWxlZDoKIAltdXRleF91bmxvY2soJihzbXUt Pm11dGV4KSk7CkBAIC0yMjM5LDcgKzIxMDEsOCBAQCBzdGF0aWMgaW50IHZlZ2EyMF9vZG5fZWRp dF9kcG1fdGFibGUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCiAKIAlpZiAodHlwZSA9PSBQUF9P RF9DT01NSVRfRFBNX1RBQkxFKSB7CiAJCW11dGV4X2xvY2soJihzbXUtPm11dGV4KSk7Ci0JCXJl dCA9IHZlZ2EyMF9hZGp1c3RfcG93ZXJfc3RhdGVfZHluYW1pYyhzbXUsIHNtdV9kcG0tPmRwbV9s ZXZlbCk7CisJCXJldCA9IHNtdV9oYW5kbGVfdGFzayhzbXUsIHNtdV9kcG0tPmRwbV9sZXZlbCwK KwkJCQkgICAgICBBTURfUFBfVEFTS19SRUFESlVTVF9QT1dFUl9TVEFURSk7CiAJCW11dGV4X3Vu bG9jaygmKHNtdS0+bXV0ZXgpKTsKIAl9CiAKQEAgLTIyNjgsNiArMjEzMSwxMyBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IHBwdGFibGVfZnVuY3MgdmVnYTIwX3BwdF9mdW5jcyA9IHsKIAkudXBkYXRl X3NwZWNpZmllZF9vZDhfdmFsdWUgPSB2ZWdhMjBfdXBkYXRlX3NwZWNpZmllZF9vZDhfdmFsdWUs CiAJLnNldF9vZF9wZXJjZW50YWdlID0gdmVnYTIwX3NldF9vZF9wZXJjZW50YWdlLAogCS5vZF9l ZGl0X2RwbV90YWJsZSA9IHZlZ2EyMF9vZG5fZWRpdF9kcG1fdGFibGUsCisJLnByZV9kaXNwbGF5 X2NvbmZpZ19jaGFuZ2VkID0gdmVnYTIwX3ByZV9kaXNwbGF5X2NvbmZpZ19jaGFuZ2VkLAorCS5k aXNwbGF5X2NvbmZpZ19jaGFuZ2VkID0gdmVnYTIwX2Rpc3BsYXlfY29uZmlnX2NoYW5nZWQsCisJ LmFwcGx5X2Nsb2Nrc19hZGp1c3RfcnVsZXMgPSB2ZWdhMjBfYXBwbHlfY2xvY2tzX2FkanVzdF9y dWxlcywKKwkubm90aWZ5X3NtY19kaXNwYWx5X2NvbmZpZyA9IHZlZ2EyMF9ub3RpZnlfc21jX2Rp c3BhbHlfY29uZmlnLAorCS5mb3JjZV9kcG1fbGltaXRfdmFsdWUgPSB2ZWdhMjBfZm9yY2VfZHBt X2xpbWl0X3ZhbHVlLAorCS51cGxvYWRfZHBtX2xldmVsID0gdmVnYTIwX3VwbG9hZF9kcG1fbGV2 ZWwsCisJLmdldF9wcm9maWxpbmdfY2xrX21hc2sgPSB2ZWdhMjBfZ2V0X3Byb2ZpbGluZ19jbGtf bWFzaywKIH07CiAKIHZvaWQgdmVnYTIwX3NldF9wcHRfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0 ICpzbXUpCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4 Cg==