From: Rex Zhu Subject: [PATCH 2/4] drm/amd/powerplay: refine powerplay code for CZ/ST Date: Tue, 5 Sep 2017 09:29:26 +0800 Message-ID: <1504574968-23945-2-git-send-email-Rex.Zhu@amd.com> References: <1504574968-23945-1-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1504574968-23945-1-git-send-email-Rex.Zhu-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: Rex Zhu MS4gYWRkIGZ1bmN0aW9uIHBvaW50cyBpbnN0YW5kIG9mIGNyZWF0IGZ1bmN0aW9uIHRhYmxlcwoy LiBpbXBsZW1lbnQgc3RvcCBkcG0gdGFza3MgZm9yIENaL1NUCgpDaGFuZ2UtSWQ6IEliZTZmYzky Yjk4OWJhMTI1ZGEzNDg1N2NlOGIwNTZlOGI2OTliNDFiClNpZ25lZC1vZmYtYnk6IFJleCBaaHUg PFJleC5aaHVAYW1kLmNvbT4KLS0tCiAuLi4vZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvY3pfY2xv Y2twb3dlcmdhdGluZy5jICB8ICAzMCAtLQogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvY3pfaHdtZ3IuYyAgICAgfCAzNzcgKysrKysrKysrLS0tLS0tLS0tLS0tCiAyIGZpbGVz IGNoYW5nZWQsIDE1OSBpbnNlcnRpb25zKCspLCAyNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvY3pfY2xvY2twb3dlcmdhdGlu Zy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvY3pfY2xvY2twb3dlcmdh dGluZy5jCmluZGV4IGIzMzkzNWYuLjViYWYxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6X2Nsb2NrcG93ZXJnYXRpbmcuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9jbG9ja3Bvd2VyZ2F0aW5nLmMKQEAgLTEw MywxNiArMTAzLDYgQEAgaW50IGN6X3BobV91bmdhdGVfYWxsX2Rpc3BsYXlfcGh5cyhzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN6X3RmX3V2ZF9w b3dlcl9nYXRpbmdfaW5pdGlhbGl6ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICpwSW5w dXQsIHZvaWQgKnBPdXRwdXQsIHZvaWQgKnBTdG9yYWdlLCBpbnQgUmVzdWx0KQotewotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGN6X3RmX3ZjZV9wb3dlcl9nYXRpbmdfaW5pdGlhbGl6ZShz dHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICpwSW5wdXQsIHZvaWQgKnBPdXRwdXQsIHZvaWQg KnBTdG9yYWdlLCBpbnQgUmVzdWx0KQotewotCXJldHVybiAwOwotfQotCiBpbnQgY3pfZW5hYmxl X2Rpc2FibGVfdXZkX2RwbShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBib29sIGVuYWJsZSkKIHsK IAlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+ YmFja2VuZCk7CkBAIC0yMjEsMjMgKzIxMSwzIEBAIGludCBjel9kcG1fcG93ZXJnYXRlX3ZjZShz dHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBib29sIGJnYXRlKQogCXJldHVybiAwOwogfQogCi0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtIGN6X2VuYWJsZV9jbG9ja19w b3dlcl9nYXRpbmdzX2xpc3RbXSA9IHsKLQkvKndlIGRvbid0IG5lZWQgYW4gZXhpdCB0YWJsZSBo ZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgRDMgY29sZCBvbiBLdiovCi0JewotCSAgLmlzRnVu Y3Rpb25OZWVkZWRJblJ1bnRpbWVUYWJsZSA9IHBobV9jZl93YW50X3V2ZF9wb3dlcl9nYXRpbmcs Ci0JICAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3V2ZF9wb3dlcl9nYXRpbmdfaW5pdGlhbGl6ZQot CX0sCi0JewotCSAgLmlzRnVuY3Rpb25OZWVkZWRJblJ1bnRpbWVUYWJsZSA9IHBobV9jZl93YW50 X3ZjZV9wb3dlcl9nYXRpbmcsCi0JICAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3ZjZV9wb3dlcl9n YXRpbmdfaW5pdGlhbGl6ZQotCX0sCi0JLyogdG8gZG8geyBOVUxMLCBjel90Zl94ZG1hX3Bvd2Vy X2dhdGluZ19lbmFibGUgfSwgKi8KLQl7IH0KLX07Ci0KLWNvbnN0IHN0cnVjdCBwaG1fbWFzdGVy X3RhYmxlX2hlYWRlciBjel9waG1fZW5hYmxlX2Nsb2NrX3Bvd2VyX2dhdGluZ3NfbWFzdGVyID0g ewotCTAsCi0JUEhNX01hc3RlclRhYmxlRmxhZ19Ob25lLAotCWN6X2VuYWJsZV9jbG9ja19wb3dl cl9nYXRpbmdzX2xpc3QKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9od21nci9jel9od21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdt Z3IvY3pfaHdtZ3IuYwppbmRleCA3ZjNiMjRmLi43ZWZlMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9od21nci5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6X2h3bWdyLmMKQEAgLTQ0MCwxNCArNDQwLDcgQEAg c3RhdGljIGludCBjel9jb25zdHJ1Y3RfYm9vdF9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN6X3RmX3Jlc2V0X2FjdGl2ZV9wcm9jZXNz X21hc2soc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCi0JCQkJCXZvaWQgKm91 dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBjel90Zl91cGxvYWRfcHB0YWJsZV90b19zbXUoc3RydWN0IHBwX2h3bWdyICpod21n ciwgdm9pZCAqaW5wdXQsCi0JCQkJICAgICAgIHZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwg aW50IHJlc3VsdCkKK3N0YXRpYyBpbnQgY3pfdXBsb2FkX3BwdGFibGVfdG9fc211KHN0cnVjdCBw cF9od21nciAqaHdtZ3IpCiB7CiAJc3RydWN0IFNNVThfRnVzaW9uX0Nsa1RhYmxlICpjbG9ja190 YWJsZTsKIAlpbnQgcmV0OwpAQCAtNTY2LDggKzU1OSw3IEBAIHN0YXRpYyBpbnQgY3pfdGZfdXBs b2FkX3BwdGFibGVfdG9fc211KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAog CXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY3pfdGZfaW5pdF9zY2xrX2xpbWl0KHN0cnVj dCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAotCQkJCSB2b2lkICpvdXRwdXQsIHZvaWQg KnN0b3JhZ2UsIGludCByZXN1bHQpCitzdGF0aWMgaW50IGN6X2luaXRfc2Nsa19saW1pdChzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewogCXN0cnVjdCBjel9od21nciAqY3pfaHdtZ3IgPSAoc3Ry dWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKIAlzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRh Z2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGUgPQpAQCAtNTkzLDggKzU4NSw3IEBAIHN0YXRpYyBp bnQgY3pfdGZfaW5pdF9zY2xrX2xpbWl0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlu cHV0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN6X3RmX2luaXRfdXZkX2xpbWl0KHN0 cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAotCQkJCXZvaWQgKm91dHB1dCwgdm9p ZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3N0YXRpYyBpbnQgY3pfaW5pdF91dmRfbGltaXQoc3Ry dWN0IHBwX2h3bWdyICpod21ncikKIHsKIAlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0 cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7CiAJc3RydWN0IHBobV91dmRfY2xvY2tf dm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp0YWJsZSA9CkBAIC02MjEsOCArNjEyLDcgQEAgc3Rh dGljIGludCBjel90Zl9pbml0X3V2ZF9saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lk ICppbnB1dCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjel90Zl9pbml0X3ZjZV9saW1p dChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKLQkJCQl2b2lkICpvdXRwdXQs IHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCitzdGF0aWMgaW50IGN6X2luaXRfdmNlX2xpbWl0 KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7CiAJc3RydWN0IGN6X2h3bWdyICpjel9od21nciA9 IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQpOwogCXN0cnVjdCBwaG1fdmNlX2Ns b2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGUgPQpAQCAtNjQ5LDggKzYzOSw3IEBA IHN0YXRpYyBpbnQgY3pfdGZfaW5pdF92Y2VfbGltaXQoc3RydWN0IHBwX2h3bWdyICpod21nciwg dm9pZCAqaW5wdXQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3pfdGZfaW5pdF9hY3Bf bGltaXQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCi0JCQkJdm9pZCAqb3V0 cHV0LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQorc3RhdGljIGludCBjel9pbml0X2FjcF9s aW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewogCXN0cnVjdCBjel9od21nciAqY3pfaHdt Z3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKIAlzdHJ1Y3QgcGhtX2Fj cF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KQEAgLTY3Niw4ICs2NjUs NyBAQCBzdGF0aWMgaW50IGN6X3RmX2luaXRfYWNwX2xpbWl0KHN0cnVjdCBwcF9od21nciAqaHdt Z3IsIHZvaWQgKmlucHV0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN6X3RmX2luaXRf cG93ZXJfZ2F0ZV9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKLQkJ CQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCitzdGF0aWMgdm9pZCBj el9pbml0X3Bvd2VyX2dhdGVfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21ncikKIHsKIAlzdHJ1 Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2Vu ZCk7CiAKQEAgLTY4NiwyMiArNjc0LDE2IEBAIHN0YXRpYyBpbnQgY3pfdGZfaW5pdF9wb3dlcl9n YXRlX3N0YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAogCWN6X2h3bWdy LT5zYW11X3Bvd2VyX2dhdGVkID0gZmFsc2U7CiAJY3pfaHdtZ3ItPmFjcF9wb3dlcl9nYXRlZCA9 IGZhbHNlOwogCWN6X2h3bWdyLT5wZ2FjcGluaXQgPSB0cnVlOwotCi0JcmV0dXJuIDA7CiB9CiAK LXN0YXRpYyBpbnQgY3pfdGZfaW5pdF9zY2xrX3RocmVzaG9sZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyLCB2b2lkICppbnB1dCwKLQkJCQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCBy ZXN1bHQpCitzdGF0aWMgdm9pZCBjel9pbml0X3NjbGtfdGhyZXNob2xkKHN0cnVjdCBwcF9od21n ciAqaHdtZ3IpCiB7CiAJc3RydWN0IGN6X2h3bWdyICpjel9od21nciA9IChzdHJ1Y3QgY3pfaHdt Z3IgKikoaHdtZ3ItPmJhY2tlbmQpOwogCiAJY3pfaHdtZ3ItPmxvd19zY2xrX2ludGVycnVwdF90 aHJlc2hvbGQgPSAwOwotCi0JcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IGN6X3RmX3VwZGF0ZV9z Y2xrX2xpbWl0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCi0JCQkJCXZvaWQgKmlucHV0LCB2b2lk ICpvdXRwdXQsCi0JCQkJCXZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCisKK3N0YXRpYyBpbnQg Y3pfdXBkYXRlX3NjbGtfbGltaXQoc3RydWN0IHBwX2h3bWdyICpod21ncikKIHsKIAlzdHJ1Y3Qg Y3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7 CiAJc3RydWN0IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KQEAg LTc3NCw5ICs3NTYsNyBAQCBzdGF0aWMgaW50IGN6X3RmX3VwZGF0ZV9zY2xrX2xpbWl0KHN0cnVj dCBwcF9od21nciAqaHdtZ3IsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3pfdGZfc2V0 X2RlZXBfc2xlZXBfc2Nsa190aHJlc2hvbGQoc3RydWN0IHBwX2h3bWdyICpod21nciwKLQkJCQkJ dm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKLQkJCQkJdm9pZCAqc3RvcmFnZSwgaW50IHJlc3Vs dCkKK3N0YXRpYyBpbnQgY3pfc2V0X2RlZXBfc2xlZXBfc2Nsa190aHJlc2hvbGQoc3RydWN0IHBw X2h3bWdyICpod21ncikKIHsKIAlpZiAocGhtX2NhcF9lbmFibGVkKGh3bWdyLT5wbGF0Zm9ybV9k ZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywKIAkJCQlQSE1fUGxhdGZvcm1DYXBzX1NjbGtEZWVwU2xl ZXApKSB7CkBAIC03OTQsOSArNzc0LDcgQEAgc3RhdGljIGludCBjel90Zl9zZXRfZGVlcF9zbGVl cF9zY2xrX3RocmVzaG9sZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAogCXJldHVybiAwOwogfQog Ci1zdGF0aWMgaW50IGN6X3RmX3NldF93YXRlcm1hcmtfdGhyZXNob2xkKHN0cnVjdCBwcF9od21n ciAqaHdtZ3IsCi0JCQkJCXZvaWQgKmlucHV0LCB2b2lkICpvdXRwdXQsCi0JCQkJCXZvaWQgKnN0 b3JhZ2UsIGludCByZXN1bHQpCitzdGF0aWMgaW50IGN6X3NldF93YXRlcm1hcmtfdGhyZXNob2xk KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7CiAJc3RydWN0IGN6X2h3bWdyICpjel9od21nciA9 CiAJCQkJICAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKQEAgLTgwOCw2MyAr Nzg2LDcyIEBAIHN0YXRpYyBpbnQgY3pfdGZfc2V0X3dhdGVybWFya190aHJlc2hvbGQoc3RydWN0 IHBwX2h3bWdyICpod21nciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjel90Zl9zZXRf ZW5hYmxlZF9sZXZlbHMoc3RydWN0IHBwX2h3bWdyICpod21nciwKLQkJCQkJdm9pZCAqaW5wdXQs IHZvaWQgKm91dHB1dCwKLQkJCQkJdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3N0YXRpYyBp bnQgY3pfbmJkcG1fcHN0YXRlX2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3Is IGJvb2wgZW5hYmxlLCBib29sIGxvY2spCiB7CisJc3RydWN0IGN6X2h3bWdyICpod19kYXRhID0g KHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7CisKKwlpZiAoaHdfZGF0YS0+aXNf bmJfZHBtX2VuYWJsZWQpIHsKKwkJaWYgKGVuYWJsZSkgeworCQkJUFBfREJHX0xPRygiZW5hYmxl IExvdyBNZW1vcnkgUFN0YXRlLlxuIik7CisKKwkJCXJldHVybiBzbXVtX3NlbmRfbXNnX3RvX3Nt Y193aXRoX3BhcmFtZXRlcihod21nci0+c211bWdyLAorCQkJCQkJUFBTTUNfTVNHX0VuYWJsZUxv d01lbW9yeVBzdGF0ZSwKKwkJCQkJCShsb2NrID8gMSA6IDApKTsKKwkJfSBlbHNlIHsKKwkJCVBQ X0RCR19MT0coImRpc2FibGUgTG93IE1lbW9yeSBQU3RhdGUuXG4iKTsKKworCQkJcmV0dXJuIHNt dW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3bWdyLT5zbXVtZ3IsCisJCQkJCQlQ UFNNQ19NU0dfRGlzYWJsZUxvd01lbW9yeVBzdGF0ZSwKKwkJCQkJCShsb2NrID8gMSA6IDApKTsK KwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgY3pfdGZfZW5hYmxlX25i X2RwbShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAotCQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0 cHV0LAotCQkJCQl2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQorc3RhdGljIGludCBjel9kaXNh YmxlX25iX2RwbShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewogCWludCByZXQgPSAwOwogCiAJ c3RydWN0IGN6X2h3bWdyICpjel9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJh Y2tlbmQpOwogCXVuc2lnbmVkIGxvbmcgZHBtX2ZlYXR1cmVzID0gMDsKIAotCWlmICghY3pfaHdt Z3ItPmlzX25iX2RwbV9lbmFibGVkKSB7Ci0JCVBQX0RCR19MT0coImVuYWJsaW5nIEFMTCBTTVUg ZmVhdHVyZXMuXG4iKTsKKwlpZiAoY3pfaHdtZ3ItPmlzX25iX2RwbV9lbmFibGVkKSB7CisJCWN6 X25iZHBtX3BzdGF0ZV9lbmFibGVfZGlzYWJsZShod21nciwgdHJ1ZSwgdHJ1ZSk7CiAJCWRwbV9m ZWF0dXJlcyB8PSBOQl9EUE1fTUFTSzsKIAkJcmV0ID0gc211bV9zZW5kX21zZ190b19zbWNfd2l0 aF9wYXJhbWV0ZXIoCiAJCQkJCQkJICBod21nci0+c211bWdyLAotCQkJCQkJCSAgUFBTTUNfTVNH X0VuYWJsZUFsbFNtdUZlYXR1cmVzLAorCQkJCQkJCSAgUFBTTUNfTVNHX0Rpc2FibGVBbGxTbXVG ZWF0dXJlcywKIAkJCQkJCQkgIGRwbV9mZWF0dXJlcyk7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWN6 X2h3bWdyLT5pc19uYl9kcG1fZW5hYmxlZCA9IHRydWU7CisJCQljel9od21nci0+aXNfbmJfZHBt X2VuYWJsZWQgPSBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGN6 X25iZHBtX3BzdGF0ZV9lbmFibGVfZGlzYWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBib29s IGVuYWJsZSwgYm9vbCBsb2NrKQorc3RhdGljIGludCBjel9lbmFibGVfbmJfZHBtKHN0cnVjdCBw cF9od21nciAqaHdtZ3IpCiB7Ci0Jc3RydWN0IGN6X2h3bWdyICpod19kYXRhID0gKHN0cnVjdCBj el9od21nciAqKShod21nci0+YmFja2VuZCk7Ci0KLQlpZiAoaHdfZGF0YS0+aXNfbmJfZHBtX2Vu YWJsZWQpIHsKLQkJaWYgKGVuYWJsZSkgewotCQkJUFBfREJHX0xPRygiZW5hYmxlIExvdyBNZW1v cnkgUFN0YXRlLlxuIik7CisJaW50IHJldCA9IDA7CiAKLQkJCXJldHVybiBzbXVtX3NlbmRfbXNn X3RvX3NtY193aXRoX3BhcmFtZXRlcihod21nci0+c211bWdyLAotCQkJCQkJUFBTTUNfTVNHX0Vu YWJsZUxvd01lbW9yeVBzdGF0ZSwKLQkJCQkJCShsb2NrID8gMSA6IDApKTsKLQkJfSBlbHNlIHsK LQkJCVBQX0RCR19MT0coImRpc2FibGUgTG93IE1lbW9yeSBQU3RhdGUuXG4iKTsKKwlzdHJ1Y3Qg Y3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7 CisJdW5zaWduZWQgbG9uZyBkcG1fZmVhdHVyZXMgPSAwOwogCi0JCQlyZXR1cm4gc211bV9zZW5k X21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNtdW1nciwKLQkJCQkJCVBQU01DX01T R19EaXNhYmxlTG93TWVtb3J5UHN0YXRlLAotCQkJCQkJKGxvY2sgPyAxIDogMCkpOwotCQl9CisJ aWYgKCFjel9od21nci0+aXNfbmJfZHBtX2VuYWJsZWQpIHsKKwkJUFBfREJHX0xPRygiZW5hYmxp bmcgQUxMIFNNVSBmZWF0dXJlcy5cbiIpOworCQlkcG1fZmVhdHVyZXMgfD0gTkJfRFBNX01BU0s7 CisJCXJldCA9IHNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKAorCQkJCQkJCSAg aHdtZ3ItPnNtdW1nciwKKwkJCQkJCQkgIFBQU01DX01TR19FbmFibGVBbGxTbXVGZWF0dXJlcywK KwkJCQkJCQkgIGRwbV9mZWF0dXJlcyk7CisJCWlmIChyZXQgPT0gMCkKKwkJCWN6X2h3bWdyLT5p c19uYl9kcG1fZW5hYmxlZCA9IHRydWU7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsK IH0KIAotc3RhdGljIGludCBjel90Zl91cGRhdGVfbG93X21lbV9wc3RhdGUoc3RydWN0IHBwX2h3 bWdyICpod21nciwKLQkJCQkJdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKLQkJCQkJdm9pZCAq c3RvcmFnZSwgaW50IHJlc3VsdCkKK3N0YXRpYyBpbnQgY3pfdXBkYXRlX2xvd19tZW1fcHN0YXRl KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIGNvbnN0IHZvaWQgKmlucHV0KQogewogCWJvb2wgZGlz YWJsZV9zd2l0Y2g7CiAJYm9vbCBlbmFibGVfbG93X21lbV9zdGF0ZTsKQEAgLTg4Niw2NCArODcz LDY0IEBAIHN0YXRpYyBpbnQgY3pfdGZfdXBkYXRlX2xvd19tZW1fcHN0YXRlKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGhtX21h c3Rlcl90YWJsZV9pdGVtIGN6X3NldF9wb3dlcl9zdGF0ZV9saXN0W10gPSB7Ci0JeyAudGFibGVG dW5jdGlvbiA9IGN6X3RmX3VwZGF0ZV9zY2xrX2xpbWl0IH0sCi0JeyAudGFibGVGdW5jdGlvbiA9 IGN6X3RmX3NldF9kZWVwX3NsZWVwX3NjbGtfdGhyZXNob2xkIH0sCi0JeyAudGFibGVGdW5jdGlv biA9IGN6X3RmX3NldF93YXRlcm1hcmtfdGhyZXNob2xkIH0sCi0JeyAudGFibGVGdW5jdGlvbiA9 IGN6X3RmX3NldF9lbmFibGVkX2xldmVscyB9LAotCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9l bmFibGVfbmJfZHBtIH0sCi0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3VwZGF0ZV9sb3dfbWVt X3BzdGF0ZSB9LAotCXsgfQotfTsKK3N0YXRpYyBpbnQgY3pfc2V0X3Bvd2VyX3N0YXRlX3Rhc2tz KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIGNvbnN0IHZvaWQgKmlucHV0KQoreworCWludCByZXQg PSAwOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaGVhZGVyIGN6X3Nl dF9wb3dlcl9zdGF0ZV9tYXN0ZXIgPSB7Ci0JMCwKLQlQSE1fTWFzdGVyVGFibGVGbGFnX05vbmUs Ci0JY3pfc2V0X3Bvd2VyX3N0YXRlX2xpc3QKLX07CisJY3pfdXBkYXRlX3NjbGtfbGltaXQoaHdt Z3IpOworCWN6X3NldF9kZWVwX3NsZWVwX3NjbGtfdGhyZXNob2xkKGh3bWdyKTsKKwljel9zZXRf d2F0ZXJtYXJrX3RocmVzaG9sZChod21ncik7CisJcmV0ID0gY3pfZW5hYmxlX25iX2RwbShod21n cik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljel91cGRhdGVfbG93X21lbV9wc3RhdGUo aHdtZ3IsIGlucHV0KTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2l0 ZW0gY3pfc2V0dXBfYXNpY19saXN0W10gPSB7Ci0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3Jl c2V0X2FjdGl2ZV9wcm9jZXNzX21hc2sgfSwKLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfdXBs b2FkX3BwdGFibGVfdG9fc211IH0sCi0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX2luaXRfc2Ns a19saW1pdCB9LAotCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9pbml0X3V2ZF9saW1pdCB9LAot CXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9pbml0X3ZjZV9saW1pdCB9LAotCXsgLnRhYmxlRnVu Y3Rpb24gPSBjel90Zl9pbml0X2FjcF9saW1pdCB9LAotCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90 Zl9pbml0X3Bvd2VyX2dhdGVfc3RhdGUgfSwKLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfaW5p dF9zY2xrX3RocmVzaG9sZCB9LAotCXsgfQorCXJldHVybiAwOwogfTsKIAotc3RhdGljIGNvbnN0 IHN0cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2hlYWRlciBjel9zZXR1cF9hc2ljX21hc3RlciA9IHsK LQkwLAotCVBITV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwKLQljel9zZXR1cF9hc2ljX2xpc3QKLX07 CiAKLXN0YXRpYyBpbnQgY3pfdGZfcG93ZXJfdXBfZGlzcGxheV9jbG9ja19zeXNfcGxsKHN0cnVj dCBwcF9od21nciAqaHdtZ3IsCi0JCQkJCXZvaWQgKmlucHV0LCB2b2lkICpvdXRwdXQsCi0JCQkJ CXZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCitzdGF0aWMgaW50IGN6X3NldHVwX2FzaWNfdGFz ayhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjel91cGxv YWRfcHB0YWJsZV90b19zbXUoaHdtZ3IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0 ID0gY3pfaW5pdF9zY2xrX2xpbWl0KGh3bWdyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CXJldCA9IGN6X2luaXRfdXZkX2xpbWl0KGh3bWdyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCXJldCA9IGN6X2luaXRfdmNlX2xpbWl0KGh3bWdyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCXJldCA9IGN6X2luaXRfYWNwX2xpbWl0KGh3bWdyKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJY3pfaW5pdF9wb3dlcl9nYXRlX3N0YXRlKGh3bWdyKTsKKwljel9pbml0X3Nj bGtfdGhyZXNob2xkKGh3bWdyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjel9w b3dlcl91cF9kaXNwbGF5X2Nsb2NrX3N5c19wbGwoc3RydWN0IHBwX2h3bWdyICpod21ncikKIHsK IAlzdHJ1Y3QgY3pfaHdtZ3IgKmh3X2RhdGEgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5i YWNrZW5kKTsKKwogCWh3X2RhdGEtPmRpc3BfY2xrX2J5cGFzc19wZW5kaW5nID0gZmFsc2U7CiAJ aHdfZGF0YS0+ZGlzcF9jbGtfYnlwYXNzID0gZmFsc2U7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIGludCBjel90Zl9jbGVhcl9uYl9kcG1fZmxhZyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAot CQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0LAotCQkJCQl2b2lkICpzdG9yYWdlLCBpbnQg cmVzdWx0KQorc3RhdGljIHZvaWQgY3pfY2xlYXJfbmJfZHBtX2ZsYWcoc3RydWN0IHBwX2h3bWdy ICpod21ncikKIHsKIAlzdHJ1Y3QgY3pfaHdtZ3IgKmh3X2RhdGEgPSAoc3RydWN0IGN6X2h3bWdy ICopKGh3bWdyLT5iYWNrZW5kKTsKLQlod19kYXRhLT5pc19uYl9kcG1fZW5hYmxlZCA9IGZhbHNl OwogCi0JcmV0dXJuIDA7CisJaHdfZGF0YS0+aXNfbmJfZHBtX2VuYWJsZWQgPSBmYWxzZTsKIH0K IAotc3RhdGljIGludCBjel90Zl9yZXNldF9jYzZfZGF0YShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy LAotCQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0LAotCQkJCQl2b2lkICpzdG9yYWdlLCBp bnQgcmVzdWx0KQorc3RhdGljIHZvaWQgY3pfcmVzZXRfY2M2X2RhdGEoc3RydWN0IHBwX2h3bWdy ICpod21ncikKIHsKIAlzdHJ1Y3QgY3pfaHdtZ3IgKmh3X2RhdGEgPSAoc3RydWN0IGN6X2h3bWdy ICopKGh3bWdyLT5iYWNrZW5kKTsKIApAQCAtOTUxLDUwICs5MzgsNjAgQEAgc3RhdGljIGludCBj el90Zl9yZXNldF9jYzZfZGF0YShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAogCWh3X2RhdGEtPmNj Nl9zZXR0aW5ncy5jcHVfcHN0YXRlX3NlcGFyYXRpb25fdGltZSA9IDA7CiAJaHdfZGF0YS0+Y2M2 X3NldHRpbmdzLmNwdV9jYzZfZGlzYWJsZSA9IGZhbHNlOwogCWh3X2RhdGEtPmNjNl9zZXR0aW5n cy5jcHVfcHN0YXRlX2Rpc2FibGUgPSBmYWxzZTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMg Y29uc3Qgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaXRlbSBjel9wb3dlcl9kb3duX2FzaWNfbGlz dFtdID0gewotCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9wb3dlcl91cF9kaXNwbGF5X2Nsb2Nr X3N5c19wbGwgfSwKLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfY2xlYXJfbmJfZHBtX2ZsYWcg fSwKLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfcmVzZXRfY2M2X2RhdGEgfSwKLQl7IH0KLX07 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9oZWFkZXIgY3pfcG93ZXJf ZG93bl9hc2ljX21hc3RlciA9IHsKLQkwLAotCVBITV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwKLQlj el9wb3dlcl9kb3duX2FzaWNfbGlzdAorc3RhdGljIGludCBjel9wb3dlcl9vZmZfYXNpYyhzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCWN6X3Bvd2VyX3VwX2Rpc3BsYXlfY2xvY2tfc3lzX3Bs bChod21ncik7CisJY3pfY2xlYXJfbmJfZHBtX2ZsYWcoaHdtZ3IpOworCWN6X3Jlc2V0X2NjNl9k YXRhKGh3bWdyKTsKKwlyZXR1cm4gMDsKIH07CiAKLXN0YXRpYyBpbnQgY3pfdGZfcHJvZ3JhbV92 b3RpbmdfY2xpZW50cyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKLQkJCQl2 b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCitzdGF0aWMgdm9pZCBjel9w cm9ncmFtX3ZvdGluZ19jbGllbnRzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7CiAJUEhNQ1pf V1JJVEVfU01DX1JFR0lTVEVSKGh3bWdyLT5kZXZpY2UsIENHX0ZSRVFfVFJBTl9WT1RJTkdfMCwK IAkJCQlQUENaX1ZPVElOR1JJR0hUU0NMSUVOVFNfREZMVDApOwotCXJldHVybiAwOwogfQogCi1z dGF0aWMgaW50IGN6X3RmX3N0YXJ0X2RwbShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICpp bnB1dCwgdm9pZCAqb3V0cHV0LAotCQkJICAgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3N0 YXRpYyB2b2lkIGN6X2NsZWFyX3ZvdGluZ19jbGllbnRzKHN0cnVjdCBwcF9od21nciAqaHdtZ3Ip Cit7CisJUEhNQ1pfV1JJVEVfU01DX1JFR0lTVEVSKGh3bWdyLT5kZXZpY2UsIENHX0ZSRVFfVFJB Tl9WT1RJTkdfMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY3pfc3RhcnRfZHBtKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IpCiB7Ci0JaW50IHJlcyA9IDB4ZmY7CisJaW50IHJldCA9IDA7CiAJc3RydWN0 IGN6X2h3bWdyICpjel9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQp OwogCXVuc2lnbmVkIGxvbmcgZHBtX2ZlYXR1cmVzID0gMDsKIAogCWN6X2h3bWdyLT5kcG1fZmxh Z3MgfD0gRFBNRmxhZ3NfU0NMS19FbmFibGVkOwogCWRwbV9mZWF0dXJlcyB8PSBTQ0xLX0RQTV9N QVNLOwogCi0JcmVzID0gc211bV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3It PnNtdW1nciwKKwlyZXQgPSBzbXVtX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihod21n ci0+c211bWdyLAogCQkJCVBQU01DX01TR19FbmFibGVBbGxTbXVGZWF0dXJlcywKIAkJCQlkcG1f ZmVhdHVyZXMpOwogCi0JcmV0dXJuIHJlczsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGN6X3N0b3BfZHBtKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJaW50IHJldCA9IDA7CisJ c3RydWN0IGN6X2h3bWdyICpjel9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJh Y2tlbmQpOworCXVuc2lnbmVkIGxvbmcgZHBtX2ZlYXR1cmVzID0gMDsKKworCWlmIChjel9od21n ci0+ZHBtX2ZsYWdzICYgRFBNRmxhZ3NfU0NMS19FbmFibGVkKSB7CisJCWRwbV9mZWF0dXJlcyB8 PSBTQ0xLX0RQTV9NQVNLOworCQljel9od21nci0+ZHBtX2ZsYWdzICY9IH5EUE1GbGFnc19TQ0xL X0VuYWJsZWQ7CisJCXJldCA9IHNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3 bWdyLT5zbXVtZ3IsCisJCQkJCVBQU01DX01TR19EaXNhYmxlQWxsU211RmVhdHVyZXMsCisJCQkJ CWRwbV9mZWF0dXJlcyk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY3pfdGZf cHJvZ3JhbV9ib290dXBfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQs Ci0JCQkJdm9pZCAqb3V0cHV0LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQorc3RhdGljIGlu dCBjel9wcm9ncmFtX2Jvb3R1cF9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewogCXN0 cnVjdCBjel9od21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNr ZW5kKTsKIApAQCAtMTAxNiwxMyArMTAxMywxMSBAQCBzdGF0aWMgaW50IGN6X3RmX3Byb2dyYW1f Ym9vdHVwX3N0YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAogCXJldHVy biAwOwogfQogCi1zdGF0aWMgaW50IGN6X3RmX3Jlc2V0X2FjcF9ib290X2xldmVsKHN0cnVjdCBw cF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAotCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3Rv cmFnZSwgaW50IHJlc3VsdCkKK3N0YXRpYyB2b2lkIGN6X3Jlc2V0X2FjcF9ib290X2xldmVsKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7CiAJc3RydWN0IGN6X2h3bWdyICpjel9od21nciA9IChz dHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQpOwogCiAJY3pfaHdtZ3ItPmFjcF9ib290 X2xldmVsID0gMHhmZjsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgY3pfZHBtX2NoZWNr X3NtdV9mZWF0dXJlcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLApAQCAtMTAzOCw2MCArMTAzMyw0 NSBAQCBzdGF0aWMgYm9vbCBjel9kcG1fY2hlY2tfc211X2ZlYXR1cmVzKHN0cnVjdCBwcF9od21n ciAqaHdtZ3IsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVy biBmYWxzZTsKIH0KIAotc3RhdGljIGludCBjel90Zl9jaGVja19mb3JfZHBtX2Rpc2FibGVkKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAotCQkJCXZvaWQgKm91dHB1dCwgdm9p ZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3N0YXRpYyBib29sIGN6X2NoZWNrX2Zvcl9kcG1fZW5h YmxlZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewogCWlmIChjel9kcG1fY2hlY2tfc211X2Zl YXR1cmVzKGh3bWdyLCBTTVVfRW5hYmxlZEZlYXR1cmVTY29yZWJvYXJkX1NjbGtEcG1PbikpCi0J CXJldHVybiBQUF9SZXN1bHRfVGFibGVJbW1lZGlhdGVFeGl0OwotCXJldHVybiAwOworCQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgY3pfdGZfZW5hYmxlX2Rp ZHQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCi0JCQkJdm9pZCAqb3V0cHV0 LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQorc3RhdGljIGludCBjel9kaXNhYmxlX2RwbV90 YXNrcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewotCS8qIFRPIERPICovCi0JcmV0dXJuIDA7 Ci19CisJaWYgKCFjel9jaGVja19mb3JfZHBtX2VuYWJsZWQoaHdtZ3IpKSB7CisJCXByX2luZm8o ImRwbSBoYXMgYmVlbiBkaXNhYmxlZFxuIik7CisJCXJldHVybiAwOworCX0KKwljel9kaXNhYmxl X25iX2RwbShod21ncik7CiAKLXN0YXRpYyBpbnQgY3pfdGZfY2hlY2tfZm9yX2RwbV9lbmFibGVk KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCi0JCQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0 LAotCQkJCQkJdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKLXsKLQlpZiAoIWN6X2RwbV9jaGVj a19zbXVfZmVhdHVyZXMoaHdtZ3IsCi0JCQkgICAgIFNNVV9FbmFibGVkRmVhdHVyZVNjb3JlYm9h cmRfU2Nsa0RwbU9uKSkKLQkJcmV0dXJuIFBQX1Jlc3VsdF9UYWJsZUltbWVkaWF0ZUV4aXQ7Ci0J cmV0dXJuIDA7Ci19CisJY3pfY2xlYXJfdm90aW5nX2NsaWVudHMoaHdtZ3IpOworCWlmIChjel9z dG9wX2RwbShod21ncikpCisJCXJldHVybiAtRUlOVkFMOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0 IHBobV9tYXN0ZXJfdGFibGVfaXRlbSBjel9kaXNhYmxlX2RwbV9saXN0W10gPSB7Ci0JeyAudGFi bGVGdW5jdGlvbiA9IGN6X3RmX2NoZWNrX2Zvcl9kcG1fZW5hYmxlZCB9LAotCXsgfSwKKwlyZXR1 cm4gMDsKIH07CiAKK3N0YXRpYyBpbnQgY3pfZW5hYmxlX2RwbV90YXNrcyhzdHJ1Y3QgcHBfaHdt Z3IgKmh3bWdyKQoreworCWlmIChjel9jaGVja19mb3JfZHBtX2VuYWJsZWQoaHdtZ3IpKSB7CisJ CXByX2luZm8oImRwbSBoYXMgYmVlbiBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCi1z dGF0aWMgY29uc3Qgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaGVhZGVyIGN6X2Rpc2FibGVfZHBt X21hc3RlciA9IHsKLQkwLAotCVBITV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwKLQljel9kaXNhYmxl X2RwbV9saXN0Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaXRl bSBjel9lbmFibGVfZHBtX2xpc3RbXSA9IHsKLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfY2hl Y2tfZm9yX2RwbV9kaXNhYmxlZCB9LAotCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9wcm9ncmFt X3ZvdGluZ19jbGllbnRzIH0sCi0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3N0YXJ0X2RwbSB9 LAotCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9wcm9ncmFtX2Jvb3R1cF9zdGF0ZSB9LAotCXsg LnRhYmxlRnVuY3Rpb24gPSBjel90Zl9lbmFibGVfZGlkdCB9LAotCXsgLnRhYmxlRnVuY3Rpb24g PSBjel90Zl9yZXNldF9hY3BfYm9vdF9sZXZlbCB9LAotCXsgfSwKLX07CisJY3pfcHJvZ3JhbV92 b3RpbmdfY2xpZW50cyhod21ncik7CisJaWYgKGN6X3N0YXJ0X2RwbShod21ncikpCisJCXJldHVy biAtRUlOVkFMOworCWN6X3Byb2dyYW1fYm9vdHVwX3N0YXRlKGh3bWdyKTsKKwljel9yZXNldF9h Y3BfYm9vdF9sZXZlbChod21ncik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGhtX21hc3Rlcl90 YWJsZV9oZWFkZXIgY3pfZW5hYmxlX2RwbV9tYXN0ZXIgPSB7Ci0JMCwKLQlQSE1fTWFzdGVyVGFi bGVGbGFnX05vbmUsCi0JY3pfZW5hYmxlX2RwbV9saXN0CisJcmV0dXJuIDA7CiB9OwogCiBzdGF0 aWMgaW50IGN6X2FwcGx5X3N0YXRlX2FkanVzdF9ydWxlcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy LApAQCAtMTE2Miw3ICsxMTQyLDggQEAgc3RhdGljIGludCBjel9od21ncl9iYWNrZW5kX2luaXQo c3RydWN0IHBwX2h3bWdyICpod21ncikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlod21nci0+YmFj a2VuZCA9IGRhdGE7Ci0KKwlwaG1fY2FwX3NldChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5w bGF0Zm9ybUNhcHMsCisJCQlQSE1fUGxhdGZvcm1DYXBzX1RhYmxlbGVzc0hhcmR3YXJlSW50ZXJm YWNlKTsKIAlyZXN1bHQgPSBjel9pbml0aWFsaXplX2RwbV9kZWZhdWx0cyhod21ncik7CiAJaWYg KHJlc3VsdCAhPSAwKSB7CiAJCXByX2VycigiY3pfaW5pdGlhbGl6ZV9kcG1fZGVmYXVsdHMgZmFp bGVkXG4iKTsKQEAgLTExNzcsNTggKzExNTgsMTQgQEAgc3RhdGljIGludCBjel9od21ncl9iYWNr ZW5kX2luaXQoc3RydWN0IHBwX2h3bWdyICpod21ncikKIAogCWN6X2NvbnN0cnVjdF9ib290X3N0 YXRlKGh3bWdyKTsKIAotCXJlc3VsdCA9IHBobV9jb25zdHJ1Y3RfdGFibGUoaHdtZ3IsICZjel9z ZXR1cF9hc2ljX21hc3RlciwKLQkJCQkmKGh3bWdyLT5zZXR1cF9hc2ljKSk7Ci0JaWYgKHJlc3Vs dCAhPSAwKSB7Ci0JCXByX2VycigiRmFpbCB0byBjb25zdHJ1Y3Qgc2V0dXAgQVNJQ1xuIik7Ci0J CXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcmVzdWx0ID0gcGhtX2NvbnN0cnVjdF90YWJsZShod21n ciwgJmN6X3Bvd2VyX2Rvd25fYXNpY19tYXN0ZXIsCi0JCQkJJihod21nci0+cG93ZXJfZG93bl9h c2ljKSk7Ci0JaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCXByX2VycigiRmFpbCB0byBjb25zdHJ1Y3Qg cG93ZXIgZG93biBBU0lDXG4iKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlyZXN1bHQgPSBw aG1fY29uc3RydWN0X3RhYmxlKGh3bWdyLCAmY3pfZGlzYWJsZV9kcG1fbWFzdGVyLAotCQkJCSYo aHdtZ3ItPmRpc2FibGVfZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50KSk7Ci0JaWYgKHJlc3VsdCAh PSAwKSB7Ci0JCXByX2VycigiRmFpbCB0byBkaXNhYmxlX2R5bmFtaWNfc3RhdGVcbiIpOwotCQly ZXR1cm4gcmVzdWx0OwotCX0KLQlyZXN1bHQgPSBwaG1fY29uc3RydWN0X3RhYmxlKGh3bWdyLCAm Y3pfZW5hYmxlX2RwbV9tYXN0ZXIsCi0JCQkJJihod21nci0+ZW5hYmxlX2R5bmFtaWNfc3RhdGVf bWFuYWdlbWVudCkpOwotCWlmIChyZXN1bHQgIT0gMCkgewotCQlwcl9lcnIoIkZhaWwgdG8gZW5h YmxlX2R5bmFtaWNfc3RhdGVcbiIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlyZXN1bHQgPSBw aG1fY29uc3RydWN0X3RhYmxlKGh3bWdyLCAmY3pfc2V0X3Bvd2VyX3N0YXRlX21hc3RlciwKLQkJ CQkmKGh3bWdyLT5zZXRfcG93ZXJfc3RhdGUpKTsKLQlpZiAocmVzdWx0ICE9IDApIHsKLQkJcHJf ZXJyKCJGYWlsIHRvIGNvbnN0cnVjdCBzZXRfcG93ZXJfc3RhdGVcbiIpOwotCQlyZXR1cm4gcmVz dWx0OwotCX0KIAlod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5oYXJkd2FyZUFjdGl2aXR5UGVy Zm9ybWFuY2VMZXZlbHMgPSAgQ1pfTUFYX0hBUkRXQVJFX1BPV0VSTEVWRUxTOwogCi0JcmVzdWx0 ID0gcGhtX2NvbnN0cnVjdF90YWJsZShod21nciwgJmN6X3BobV9lbmFibGVfY2xvY2tfcG93ZXJf Z2F0aW5nc19tYXN0ZXIsICYoaHdtZ3ItPmVuYWJsZV9jbG9ja19wb3dlcl9nYXRpbmdzKSk7Ci0J aWYgKHJlc3VsdCAhPSAwKSB7Ci0JCXByX2VycigiRmFpbCB0byBjb25zdHJ1Y3QgZW5hYmxlX2Ns b2NrX3Bvd2VyX2dhdGluZ3NcbiIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KIAlyZXR1cm4gcmVz dWx0OwogfQogCiBzdGF0aWMgaW50IGN6X2h3bWdyX2JhY2tlbmRfZmluaShzdHJ1Y3QgcHBfaHdt Z3IgKmh3bWdyKQogewogCWlmIChod21nciAhPSBOVUxMKSB7Ci0JCXBobV9kZXN0cm95X3RhYmxl KGh3bWdyLCAmKGh3bWdyLT5lbmFibGVfY2xvY2tfcG93ZXJfZ2F0aW5ncykpOwotCQlwaG1fZGVz dHJveV90YWJsZShod21nciwgJihod21nci0+c2V0X3Bvd2VyX3N0YXRlKSk7Ci0JCXBobV9kZXN0 cm95X3RhYmxlKGh3bWdyLCAmKGh3bWdyLT5lbmFibGVfZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50 KSk7Ci0JCXBobV9kZXN0cm95X3RhYmxlKGh3bWdyLCAmKGh3bWdyLT5kaXNhYmxlX2R5bmFtaWNf c3RhdGVfbWFuYWdlbWVudCkpOwotCQlwaG1fZGVzdHJveV90YWJsZShod21nciwgJihod21nci0+ cG93ZXJfZG93bl9hc2ljKSk7Ci0JCXBobV9kZXN0cm95X3RhYmxlKGh3bWdyLCAmKGh3bWdyLT5z ZXR1cF9hc2ljKSk7Ci0KIAkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS52ZGRjX2RlcF9vbl9kYWxf cHdybCk7CiAJCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBfb25fZGFsX3B3cmwgPSBOVUxMOwog CkBAIC0xOTM4LDcgKzE4NzUsNiBAQCBzdGF0aWMgaW50IGN6X3JlYWRfc2Vuc29yKHN0cnVjdCBw cF9od21nciAqaHdtZ3IsIGludCBpZHgsCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwX2h3bWdyX2Z1 bmMgY3pfaHdtZ3JfZnVuY3MgPSB7CiAJLmJhY2tlbmRfaW5pdCA9IGN6X2h3bWdyX2JhY2tlbmRf aW5pdCwKIAkuYmFja2VuZF9maW5pID0gY3pfaHdtZ3JfYmFja2VuZF9maW5pLAotCS5hc2ljX3Nl dHVwID0gTlVMTCwKIAkuYXBwbHlfc3RhdGVfYWRqdXN0X3J1bGVzID0gY3pfYXBwbHlfc3RhdGVf YWRqdXN0X3J1bGVzLAogCS5mb3JjZV9kcG1fbGV2ZWwgPSBjel9kcG1fZm9yY2VfZHBtX2xldmVs LAogCS5nZXRfcG93ZXJfc3RhdGVfc2l6ZSA9IGN6X2dldF9wb3dlcl9zdGF0ZV9zaXplLApAQCAt MTk2MCw2ICsxODk2LDExIEBAIHN0YXRpYyBpbnQgY3pfcmVhZF9zZW5zb3Ioc3RydWN0IHBwX2h3 bWdyICpod21nciwgaW50IGlkeCwKIAkuZ2V0X2Nsb2NrX2J5X3R5cGUgPSBjel9nZXRfY2xvY2tf YnlfdHlwZSwKIAkuZ2V0X21heF9oaWdoX2Nsb2NrcyA9IGN6X2dldF9tYXhfaGlnaF9jbG9ja3Ms CiAJLnJlYWRfc2Vuc29yID0gY3pfcmVhZF9zZW5zb3IsCisJLnBvd2VyX29mZl9hc2ljID0gY3pf cG93ZXJfb2ZmX2FzaWMsCisJLmFzaWNfc2V0dXAgPSBjel9zZXR1cF9hc2ljX3Rhc2ssCisJLmR5 bmFtaWNfc3RhdGVfbWFuYWdlbWVudF9lbmFibGUgPSBjel9lbmFibGVfZHBtX3Rhc2tzLAorCS5w b3dlcl9zdGF0ZV9zZXQgPSBjel9zZXRfcG93ZXJfc3RhdGVfdGFza3MsCisJLmR5bmFtaWNfc3Rh dGVfbWFuYWdlbWVudF9kaXNhYmxlID0gY3pfZGlzYWJsZV9kcG1fdGFza3MsCiB9OwogCiBpbnQg Y3pfaW5pdF9mdW5jdGlvbl9wb2ludGVycyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQotLSAKMS45 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1n ZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=