From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 39/42] drm/amd/powerplay: add new pp_psm infrastructure for vega12 (v2) Date: Wed, 21 Mar 2018 08:46:36 -0500 Message-ID: <20180321134639.18782-39-alexander.deucher@amd.com> References: <20180321134639.18782-1-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180321134639.18782-1-alexander.deucher-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: Alex Deucher , Evan Quan RnJvbTogRXZhbiBRdWFuIDxldmFuLnF1YW5AYW1kLmNvbT4KCk5ldyBwc20gaW5mcmFzdHJ1Y3R1 cmUgZm9yIHZlZ2ExMi4KCnYyOiByZWJhc2UgKEFsZXgpCgpTaWduZWQtb2ZmLWJ5OiBFdmFuIFF1 YW4gPGV2YW4ucXVhbkBhbWQuY29tPgpBY2tlZC1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIu ZGV1Y2hlckBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5k ZXVjaGVyQGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv TWFrZWZpbGUgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3 bWdyL3BwX3BzbS5jICAgICAgIHwgMjQ0ICsrKy0tLS0tLS0tLS0tLS0tLS0KIC4uLi9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5jICAgIHwgMjYyICsrKysrKysrKysr KysrKysrKysrKwogLi4uL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcF9wc21fbGVnYWN5 LmggICAgfCAgNDAgKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBf cHNtX25ldy5jICAgfCAgNzYgKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9o d21nci9wcF9wc21fbmV3LmggICB8ICA0MCArKysrCiA2IGZpbGVzIGNoYW5nZWQsIDQ1MiBpbnNl cnRpb25zKCspLCAyMTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv cHBfcHNtX25ldy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvaHdtZ3IvcHBfcHNtX25ldy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxh eS9od21nci9NYWtlZmlsZQppbmRleCBmODY4Yjk1NWRhOTIuLmMxMjQ5ZTAzYzkxMiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUKQEAgLTMxLDcgKzMx LDcgQEAgSEFSRFdBUkVfTUdSID0gaHdtZ3IubyBwcm9jZXNzcHB0YWJsZXMubyBcCiAJCXNtdTdf Y2xvY2twb3dlcmdhdGluZy5vIFwKIAkJdmVnYTEwX3Byb2Nlc3NwcHRhYmxlcy5vIHZlZ2ExMF9o d21nci5vIHZlZ2ExMF9wb3dlcnR1bmUubyBcCiAJCXZlZ2ExMF90aGVybWFsLm8gc211MTBfaHdt Z3IubyBwcF9wc20ub1wKLQkJcHBfb3ZlcmRyaXZlci5vIHNtdV9oZWxwZXIubworCQlwcF9vdmVy ZHJpdmVyLm8gc211X2hlbHBlci5vIHBwX3BzbV9sZWdhY3kubyBwcF9wc21fbmV3Lm8KIAogQU1E X1BQX0hXTUdSID0gJChhZGRwcmVmaXggJChBTURfUFBfUEFUSCkvaHdtZ3IvLCQoSEFSRFdBUkVf TUdSKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv cHBfcHNtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcF9wc20uYwpp bmRleCBkMGVmOGY5YzEzNjEuLjI5NWFiOWZlZDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBfcHNtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaHdtZ3IvcHBfcHNtLmMKQEAgLTIxLDI0MyArMjEsNjUgQEAKICAqCiAgKi8K IAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0j aW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInBwX3BzbS5oIgorI2luY2x1ZGUgInBw X3BzbV9sZWdhY3kuaCIKKyNpbmNsdWRlICJwcF9wc21fbmV3LmgiCiAKIGludCBwc21faW5pdF9w b3dlcl9zdGF0ZV90YWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQogewotCWludCByZXN1bHQ7 Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IHRhYmxlX2VudHJpZXM7Ci0Jc3RydWN0 IHBwX3Bvd2VyX3N0YXRlICpzdGF0ZTsKLQlpbnQgc2l6ZTsKLQotCWlmIChod21nci0+aHdtZ3Jf ZnVuYy0+Z2V0X251bV9vZl9wcF90YWJsZV9lbnRyaWVzID09IE5VTEwpCi0JCXJldHVybiAtRUlO VkFMOwotCi0JaWYgKGh3bWdyLT5od21ncl9mdW5jLT5nZXRfcG93ZXJfc3RhdGVfc2l6ZSA9PSBO VUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWh3bWdyLT5udW1fcHMgPSB0YWJsZV9lbnRyaWVz ID0gaHdtZ3ItPmh3bWdyX2Z1bmMtPmdldF9udW1fb2ZfcHBfdGFibGVfZW50cmllcyhod21ncik7 Ci0KLQlod21nci0+cHNfc2l6ZSA9IHNpemUgPSBod21nci0+aHdtZ3JfZnVuYy0+Z2V0X3Bvd2Vy X3N0YXRlX3NpemUoaHdtZ3IpICsKLQkJCQkJICBzaXplb2Yoc3RydWN0IHBwX3Bvd2VyX3N0YXRl KTsKLQotCWh3bWdyLT5wcyA9IGt6YWxsb2Moc2l6ZSAqIHRhYmxlX2VudHJpZXMsIEdGUF9LRVJO RUwpOwotCWlmIChod21nci0+cHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlod21n ci0+cmVxdWVzdF9wcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGh3bWdyLT5y ZXF1ZXN0X3BzID09IE5VTEwpIHsKLQkJa2ZyZWUoaHdtZ3ItPnBzKTsKLQkJaHdtZ3ItPnBzID0g TlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaHdtZ3ItPmN1cnJlbnRfcHMgPSBremFs bG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChod21nci0+Y3VycmVudF9wcyA9PSBOVUxMKSB7 Ci0JCWtmcmVlKGh3bWdyLT5yZXF1ZXN0X3BzKTsKLQkJa2ZyZWUoaHdtZ3ItPnBzKTsKLQkJaHdt Z3ItPnJlcXVlc3RfcHMgPSBOVUxMOwotCQlod21nci0+cHMgPSBOVUxMOwotCQlyZXR1cm4gLUVO T01FTTsKLQl9Ci0KLQlzdGF0ZSA9IGh3bWdyLT5wczsKLQotCWZvciAoaSA9IDA7IGkgPCB0YWJs ZV9lbnRyaWVzOyBpKyspIHsKLQkJcmVzdWx0ID0gaHdtZ3ItPmh3bWdyX2Z1bmMtPmdldF9wcF90 YWJsZV9lbnRyeShod21nciwgaSwgc3RhdGUpOwotCi0JCWlmIChzdGF0ZS0+Y2xhc3NpZmljYXRp b24uZmxhZ3MgJiBQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19Cb290KSB7Ci0JCQlod21nci0+ Ym9vdF9wcyA9IHN0YXRlOwotCQkJbWVtY3B5KGh3bWdyLT5jdXJyZW50X3BzLCBzdGF0ZSwgc2l6 ZSk7Ci0JCQltZW1jcHkoaHdtZ3ItPnJlcXVlc3RfcHMsIHN0YXRlLCBzaXplKTsKLQkJfQotCi0J CXN0YXRlLT5pZCA9IGkgKyAxOyAvKiBhc3NpZ25lZCB1bmlxdWUgbnVtIGZvciBldmVyeSBwb3dl ciBzdGF0ZSBpZCAqLwotCi0JCWlmIChzdGF0ZS0+Y2xhc3NpZmljYXRpb24uZmxhZ3MgJiBQUF9T dGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19VdmQpCi0JCQlod21nci0+dXZkX3BzID0gc3RhdGU7Ci0J CXN0YXRlID0gKHN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqKSgodW5zaWduZWQgbG9uZylzdGF0ZSAr IHNpemUpOwotCX0KLQotCXJldHVybiAwOworCWlmIChod21nci0+Y2hpcF9pZCAhPSBDSElQX1ZF R0ExMikKKwkJcmV0dXJuIHBzbV9sZWdhY3lfaW5pdF9wb3dlcl9zdGF0ZV90YWJsZShod21ncik7 CisJZWxzZQorCQlyZXR1cm4gcHNtX25ld19pbml0X3Bvd2VyX3N0YXRlX3RhYmxlKGh3bWdyKTsK IH0KIAogaW50IHBzbV9maW5pX3Bvd2VyX3N0YXRlX3RhYmxlKHN0cnVjdCBwcF9od21nciAqaHdt Z3IpCiB7Ci0JaWYgKGh3bWdyID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Ja2ZyZWUo aHdtZ3ItPmN1cnJlbnRfcHMpOwotCWtmcmVlKGh3bWdyLT5yZXF1ZXN0X3BzKTsKLQlrZnJlZSho d21nci0+cHMpOwotCWh3bWdyLT5yZXF1ZXN0X3BzID0gTlVMTDsKLQlod21nci0+cHMgPSBOVUxM OwotCWh3bWdyLT5jdXJyZW50X3BzID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBwc21fZ2V0X3VpX3N0YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCi0JCQkJZW51bSBQUF9T dGF0ZVVJTGFiZWwgdWlfbGFiZWwsCi0JCQkJdW5zaWduZWQgbG9uZyAqc3RhdGVfaWQpCi17Ci0J c3RydWN0IHBwX3Bvd2VyX3N0YXRlICpzdGF0ZTsKLQlpbnQgdGFibGVfZW50cmllczsKLQlpbnQg aTsKLQotCXRhYmxlX2VudHJpZXMgPSBod21nci0+bnVtX3BzOwotCXN0YXRlID0gaHdtZ3ItPnBz OwotCi0JZm9yIChpID0gMDsgaSA8IHRhYmxlX2VudHJpZXM7IGkrKykgewotCQlpZiAoc3RhdGUt PmNsYXNzaWZpY2F0aW9uLnVpX2xhYmVsICYgdWlfbGFiZWwpIHsKLQkJCSpzdGF0ZV9pZCA9IHN0 YXRlLT5pZDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXN0YXRlID0gKHN0cnVjdCBwcF9wb3dlcl9z dGF0ZSAqKSgodW5zaWduZWQgbG9uZylzdGF0ZSArIGh3bWdyLT5wc19zaXplKTsKLQl9Ci0JcmV0 dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgcHNtX2dldF9zdGF0ZV9ieV9jbGFzc2lmaWNh dGlvbihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAotCQkJCQllbnVtIFBQX1N0YXRlQ2xhc3NpZmlj YXRpb25GbGFnIGZsYWcsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnN0YXRlX2lkKQotewotCXN0cnVj dCBwcF9wb3dlcl9zdGF0ZSAqc3RhdGU7Ci0JaW50IHRhYmxlX2VudHJpZXM7Ci0JaW50IGk7Ci0K LQl0YWJsZV9lbnRyaWVzID0gaHdtZ3ItPm51bV9wczsKLQlzdGF0ZSA9IGh3bWdyLT5wczsKLQot CWZvciAoaSA9IDA7IGkgPCB0YWJsZV9lbnRyaWVzOyBpKyspIHsKLQkJaWYgKHN0YXRlLT5jbGFz c2lmaWNhdGlvbi5mbGFncyAmIGZsYWcpIHsKLQkJCSpzdGF0ZV9pZCA9IHN0YXRlLT5pZDsKLQkJ CXJldHVybiAwOwotCQl9Ci0JCXN0YXRlID0gKHN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqKSgodW5z aWduZWQgbG9uZylzdGF0ZSArIGh3bWdyLT5wc19zaXplKTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7 Ci19Ci0KLXN0YXRpYyBpbnQgcHNtX3NldF9zdGF0ZXMoc3RydWN0IHBwX2h3bWdyICpod21nciwg dW5zaWduZWQgbG9uZyBzdGF0ZV9pZCkKLXsKLQlzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKnN0YXRl OwotCWludCB0YWJsZV9lbnRyaWVzOwotCWludCBpOwotCi0JdGFibGVfZW50cmllcyA9IGh3bWdy LT5udW1fcHM7Ci0KLQlzdGF0ZSA9IGh3bWdyLT5wczsKLQotCWZvciAoaSA9IDA7IGkgPCB0YWJs ZV9lbnRyaWVzOyBpKyspIHsKLQkJaWYgKHN0YXRlLT5pZCA9PSBzdGF0ZV9pZCkgewotCQkJbWVt Y3B5KGh3bWdyLT5yZXF1ZXN0X3BzLCBzdGF0ZSwgaHdtZ3ItPnBzX3NpemUpOwotCQkJcmV0dXJu IDA7Ci0JCX0KLQkJc3RhdGUgPSAoc3RydWN0IHBwX3Bvd2VyX3N0YXRlICopKCh1bnNpZ25lZCBs b25nKXN0YXRlICsgaHdtZ3ItPnBzX3NpemUpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAo aHdtZ3ItPmNoaXBfaWQgIT0gQ0hJUF9WRUdBMTIpCisJCXJldHVybiBwc21fbGVnYWN5X2Zpbmlf cG93ZXJfc3RhdGVfdGFibGUoaHdtZ3IpOworCWVsc2UKKwkJcmV0dXJuIHBzbV9uZXdfZmluaV9w b3dlcl9zdGF0ZV90YWJsZShod21ncik7CiB9CiAKIGludCBwc21fc2V0X2Jvb3Rfc3RhdGVzKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGF0ZV9pZDsKLQlpbnQg cmV0ID0gLUVJTlZBTDsKLQotCWlmICghcHNtX2dldF9zdGF0ZV9ieV9jbGFzc2lmaWNhdGlvbiho d21nciwgUFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfQm9vdCwKLQkJCQkJJnN0YXRlX2lkKSkK LQkJcmV0ID0gcHNtX3NldF9zdGF0ZXMoaHdtZ3IsIHN0YXRlX2lkKTsKLQotCXJldHVybiByZXQ7 CisJaWYgKGh3bWdyLT5jaGlwX2lkICE9IENISVBfVkVHQTEyKQorCQlyZXR1cm4gcHNtX2xlZ2Fj eV9zZXRfYm9vdF9zdGF0ZXMoaHdtZ3IpOworCWVsc2UKKwkJcmV0dXJuIHBzbV9uZXdfc2V0X2Jv b3Rfc3RhdGVzKGh3bWdyKTsKIH0KIAogaW50IHBzbV9zZXRfcGVyZm9ybWFuY2Vfc3RhdGVzKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGF0ZV9pZDsKLQlpbnQg cmV0ID0gLUVJTlZBTDsKLQotCWlmICghcHNtX2dldF91aV9zdGF0ZShod21nciwgUFBfU3RhdGVV SUxhYmVsX1BlcmZvcm1hbmNlLAotCQkJCQkmc3RhdGVfaWQpKQotCQlyZXQgPSBwc21fc2V0X3N0 YXRlcyhod21nciwgc3RhdGVfaWQpOwotCi0JcmV0dXJuIHJldDsKKwlpZiAoaHdtZ3ItPmNoaXBf aWQgIT0gQ0hJUF9WRUdBMTIpCisJCXJldHVybiBwc21fbGVnYWN5X3NldF9wZXJmb3JtYW5jZV9z dGF0ZXMoaHdtZ3IpOworCWVsc2UKKwkJcmV0dXJuIHBzbV9uZXdfc2V0X3BlcmZvcm1hbmNlX3N0 YXRlcyhod21ncik7CiB9CiAKIGludCBwc21fc2V0X3VzZXJfcGVyZm9ybWFuY2Vfc3RhdGUoc3Ry dWN0IHBwX2h3bWdyICpod21nciwKIAkJCQkJZW51bSBQUF9TdGF0ZVVJTGFiZWwgbGFiZWxfaWQs CiAJCQkJCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqKnN0YXRlKQogewotCWludCB0YWJsZV9lbnRy aWVzOwotCWludCBpOwotCi0JdGFibGVfZW50cmllcyA9IGh3bWdyLT5udW1fcHM7Ci0JKnN0YXRl ID0gaHdtZ3ItPnBzOwotCi1yZXN0YXJ0X3NlYXJjaDoKLQlmb3IgKGkgPSAwOyBpIDwgdGFibGVf ZW50cmllczsgaSsrKSB7Ci0JCWlmICgoKnN0YXRlKS0+Y2xhc3NpZmljYXRpb24udWlfbGFiZWwg JiBsYWJlbF9pZCkKLQkJCXJldHVybiAwOwotCQkqc3RhdGUgPSAoc3RydWN0IHBwX3Bvd2VyX3N0 YXRlICopKCh1aW50cHRyX3QpKnN0YXRlICsgaHdtZ3ItPnBzX3NpemUpOwotCX0KLQotCXN3aXRj aCAobGFiZWxfaWQpIHsKLQljYXNlIFBQX1N0YXRlVUlMYWJlbF9CYXR0ZXJ5OgotCWNhc2UgUFBf U3RhdGVVSUxhYmVsX0JhbGFuY2VkOgotCQlsYWJlbF9pZCA9IFBQX1N0YXRlVUlMYWJlbF9QZXJm b3JtYW5jZTsKLQkJZ290byByZXN0YXJ0X3NlYXJjaDsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9 Ci0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh3bWdyLT5jaGlwX2lkICE9IENISVBfVkVHQTEyKQor CQlyZXR1cm4gcHNtX2xlZ2FjeV9zZXRfdXNlcl9wZXJmb3JtYW5jZV9zdGF0ZShod21nciwKKwkJ CQlsYWJlbF9pZCwKKwkJCQlzdGF0ZSk7CisJZWxzZQorCQlyZXR1cm4gcHNtX25ld19zZXRfdXNl cl9wZXJmb3JtYW5jZV9zdGF0ZShod21nciwKKwkJCQlsYWJlbF9pZCwKKwkJCQlzdGF0ZSk7CiB9 CiAKIGludCBwc21fYWRqdXN0X3Bvd2VyX3N0YXRlX2R5bmFtaWMoc3RydWN0IHBwX2h3bWdyICpo d21nciwgYm9vbCBza2lwLAogCQkJCQkJc3RydWN0IHBwX3Bvd2VyX3N0YXRlICpuZXdfcHMpCiB7 Ci0Jc3RydWN0IHBwX3Bvd2VyX3N0YXRlICpwY3VycmVudDsKLQlzdHJ1Y3QgcHBfcG93ZXJfc3Rh dGUgKnJlcXVlc3RlZDsKLQlib29sIGVxdWFsOwotCXVpbnQzMl90IGluZGV4OwotCWxvbmcgd29y a2xvYWQ7Ci0KLQlpZiAoc2tpcCkKLQkJcmV0dXJuIDA7Ci0KLQlwaG1fZGlzcGxheV9jb25maWd1 cmF0aW9uX2NoYW5nZWQoaHdtZ3IpOwotCi0JaWYgKG5ld19wcyAhPSBOVUxMKQotCQlyZXF1ZXN0 ZWQgPSBuZXdfcHM7CisJaWYgKGh3bWdyLT5jaGlwX2lkICE9IENISVBfVkVHQTEyKQorCQlyZXR1 cm4gcHNtX2xlZ2FjeV9hZGp1c3RfcG93ZXJfc3RhdGVfZHluYW1pYyhod21nciwKKwkJCQlza2lw LAorCQkJCW5ld19wcyk7CiAJZWxzZQotCQlyZXF1ZXN0ZWQgPSBod21nci0+cmVxdWVzdF9wczsK LQotCXBjdXJyZW50ID0gaHdtZ3ItPmN1cnJlbnRfcHM7Ci0KLQlwaG1fYXBwbHlfc3RhdGVfYWRq dXN0X3J1bGVzKGh3bWdyLCByZXF1ZXN0ZWQsIHBjdXJyZW50KTsKLQlpZiAocGN1cnJlbnQgPT0g TlVMTCB8fCAoMCAhPSBwaG1fY2hlY2tfc3RhdGVzX2VxdWFsKGh3bWdyLAotCQkJJnBjdXJyZW50 LT5oYXJkd2FyZSwgJnJlcXVlc3RlZC0+aGFyZHdhcmUsICZlcXVhbCkpKQotCQllcXVhbCA9IGZh bHNlOwotCi0JaWYgKCFlcXVhbCB8fCBwaG1fY2hlY2tfc21jX3VwZGF0ZV9yZXF1aXJlZF9mb3Jf ZGlzcGxheV9jb25maWd1cmF0aW9uKGh3bWdyKSkgewotCQlwaG1fc2V0X3Bvd2VyX3N0YXRlKGh3 bWdyLCAmcGN1cnJlbnQtPmhhcmR3YXJlLCAmcmVxdWVzdGVkLT5oYXJkd2FyZSk7Ci0JCW1lbWNw eShod21nci0+Y3VycmVudF9wcywgaHdtZ3ItPnJlcXVlc3RfcHMsIGh3bWdyLT5wc19zaXplKTsK LQl9Ci0KLQlwaG1fbm90aWZ5X3NtY19kaXNwbGF5X2NvbmZpZ19hZnRlcl9wc19hZGp1c3RtZW50 KGh3bWdyKTsKLQlpZiAoIXBobV9mb3JjZV9kcG1fbGV2ZWxzKGh3bWdyLCBod21nci0+cmVxdWVz dF9kcG1fbGV2ZWwpKQotCQlod21nci0+ZHBtX2xldmVsID0gaHdtZ3ItPnJlcXVlc3RfZHBtX2xl dmVsOwotCi0JaWYgKGh3bWdyLT5kcG1fbGV2ZWwgIT0gQU1EX0RQTV9GT1JDRURfTEVWRUxfTUFO VUFMKSB7Ci0JCWluZGV4ID0gZmxzKGh3bWdyLT53b3JrbG9hZF9tYXNrKTsKLQkJaW5kZXggPSBp bmRleCA+IDAgJiYgaW5kZXggPD0gV29ya2xvYWRfUG9saWN5X01heCA/IGluZGV4IC0gMSA6IDA7 Ci0JCXdvcmtsb2FkID0gaHdtZ3ItPndvcmtsb2FkX3NldHRpbmdbaW5kZXhdOwotCi0JCWlmICho d21nci0+cG93ZXJfcHJvZmlsZV9tb2RlICE9IHdvcmtsb2FkICYmIGh3bWdyLT5od21ncl9mdW5j LT5zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKQotCQkJaHdtZ3ItPmh3bWdyX2Z1bmMtPnNldF9wb3dl cl9wcm9maWxlX21vZGUoaHdtZ3IsICZ3b3JrbG9hZCwgMCk7Ci0JfQotCi0JcmV0dXJuIDA7CisJ CXJldHVybiBwc21fbmV3X2FkanVzdF9wb3dlcl9zdGF0ZV9keW5hbWljKGh3bWdyLAorCQkJCXNr aXAsCisJCQkJbmV3X3BzKTsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uZTNhYzUyODIwNjQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5jCkBAIC0wLDAgKzEsMjYyIEBA CisvKgorICogQ29weXJpZ2h0IDIwMTcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xE RVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisg KiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAicHBf cHNtX2xlZ2FjeS5oIgorCitpbnQgcHNtX2xlZ2FjeV9pbml0X3Bvd2VyX3N0YXRlX3RhYmxlKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgaTsK Kwl1bnNpZ25lZCBpbnQgdGFibGVfZW50cmllczsKKwlzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKnN0 YXRlOworCWludCBzaXplOworCisJaWYgKGh3bWdyLT5od21ncl9mdW5jLT5nZXRfbnVtX29mX3Bw X3RhYmxlX2VudHJpZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaHdtZ3It Pmh3bWdyX2Z1bmMtPmdldF9wb3dlcl9zdGF0ZV9zaXplID09IE5VTEwpCisJCXJldHVybiAtRUlO VkFMOworCisJaHdtZ3ItPm51bV9wcyA9IHRhYmxlX2VudHJpZXMgPSBod21nci0+aHdtZ3JfZnVu Yy0+Z2V0X251bV9vZl9wcF90YWJsZV9lbnRyaWVzKGh3bWdyKTsKKworCWh3bWdyLT5wc19zaXpl ID0gc2l6ZSA9IGh3bWdyLT5od21ncl9mdW5jLT5nZXRfcG93ZXJfc3RhdGVfc2l6ZShod21ncikg KworCQkJCQkgIHNpemVvZihzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUpOworCisJaHdtZ3ItPnBzID0g a3phbGxvYyhzaXplICogdGFibGVfZW50cmllcywgR0ZQX0tFUk5FTCk7CisJaWYgKGh3bWdyLT5w cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWh3bWdyLT5yZXF1ZXN0X3BzID0ga3ph bGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoaHdtZ3ItPnJlcXVlc3RfcHMgPT0gTlVMTCkg eworCQlrZnJlZShod21nci0+cHMpOworCQlod21nci0+cHMgPSBOVUxMOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwlod21nci0+Y3VycmVudF9wcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5F TCk7CisJaWYgKGh3bWdyLT5jdXJyZW50X3BzID09IE5VTEwpIHsKKwkJa2ZyZWUoaHdtZ3ItPnJl cXVlc3RfcHMpOworCQlrZnJlZShod21nci0+cHMpOworCQlod21nci0+cmVxdWVzdF9wcyA9IE5V TEw7CisJCWh3bWdyLT5wcyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXN0YXRl ID0gaHdtZ3ItPnBzOworCisJZm9yIChpID0gMDsgaSA8IHRhYmxlX2VudHJpZXM7IGkrKykgewor CQlyZXN1bHQgPSBod21nci0+aHdtZ3JfZnVuYy0+Z2V0X3BwX3RhYmxlX2VudHJ5KGh3bWdyLCBp LCBzdGF0ZSk7CisKKwkJaWYgKHN0YXRlLT5jbGFzc2lmaWNhdGlvbi5mbGFncyAmIFBQX1N0YXRl Q2xhc3NpZmljYXRpb25GbGFnX0Jvb3QpIHsKKwkJCWh3bWdyLT5ib290X3BzID0gc3RhdGU7CisJ CQltZW1jcHkoaHdtZ3ItPmN1cnJlbnRfcHMsIHN0YXRlLCBzaXplKTsKKwkJCW1lbWNweShod21n ci0+cmVxdWVzdF9wcywgc3RhdGUsIHNpemUpOworCQl9CisKKwkJc3RhdGUtPmlkID0gaSArIDE7 IC8qIGFzc2lnbmVkIHVuaXF1ZSBudW0gZm9yIGV2ZXJ5IHBvd2VyIHN0YXRlIGlkICovCisKKwkJ aWYgKHN0YXRlLT5jbGFzc2lmaWNhdGlvbi5mbGFncyAmIFBQX1N0YXRlQ2xhc3NpZmljYXRpb25G bGFnX1V2ZCkKKwkJCWh3bWdyLT51dmRfcHMgPSBzdGF0ZTsKKwkJc3RhdGUgPSAoc3RydWN0IHBw X3Bvd2VyX3N0YXRlICopKCh1bnNpZ25lZCBsb25nKXN0YXRlICsgc2l6ZSk7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK2ludCBwc21fbGVnYWN5X2ZpbmlfcG93ZXJfc3RhdGVfdGFibGUoc3RydWN0 IHBwX2h3bWdyICpod21ncikKK3sKKwlpZiAoaHdtZ3IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlrZnJlZShod21nci0+Y3VycmVudF9wcyk7CisJa2ZyZWUoaHdtZ3ItPnJlcXVlc3Rf cHMpOworCWtmcmVlKGh3bWdyLT5wcyk7CisJaHdtZ3ItPnJlcXVlc3RfcHMgPSBOVUxMOworCWh3 bWdyLT5wcyA9IE5VTEw7CisJaHdtZ3ItPmN1cnJlbnRfcHMgPSBOVUxMOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGdldF91aV9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJ CWVudW0gUFBfU3RhdGVVSUxhYmVsIHVpX2xhYmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgKnN0YXRl X2lkKQoreworCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqc3RhdGU7CisJaW50IHRhYmxlX2VudHJp ZXM7CisJaW50IGk7CisKKwl0YWJsZV9lbnRyaWVzID0gaHdtZ3ItPm51bV9wczsKKwlzdGF0ZSA9 IGh3bWdyLT5wczsKKworCWZvciAoaSA9IDA7IGkgPCB0YWJsZV9lbnRyaWVzOyBpKyspIHsKKwkJ aWYgKHN0YXRlLT5jbGFzc2lmaWNhdGlvbi51aV9sYWJlbCAmIHVpX2xhYmVsKSB7CisJCQkqc3Rh dGVfaWQgPSBzdGF0ZS0+aWQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzdGF0ZSA9IChzdHJ1Y3Qg cHBfcG93ZXJfc3RhdGUgKikoKHVuc2lnbmVkIGxvbmcpc3RhdGUgKyBod21nci0+cHNfc2l6ZSk7 CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGdldF9zdGF0ZV9ieV9jbGFz c2lmaWNhdGlvbihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCQllbnVtIFBQX1N0YXRlQ2xh c3NpZmljYXRpb25GbGFnIGZsYWcsCisJCQkJCXVuc2lnbmVkIGxvbmcgKnN0YXRlX2lkKQorewor CXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqc3RhdGU7CisJaW50IHRhYmxlX2VudHJpZXM7CisJaW50 IGk7CisKKwl0YWJsZV9lbnRyaWVzID0gaHdtZ3ItPm51bV9wczsKKwlzdGF0ZSA9IGh3bWdyLT5w czsKKworCWZvciAoaSA9IDA7IGkgPCB0YWJsZV9lbnRyaWVzOyBpKyspIHsKKwkJaWYgKHN0YXRl LT5jbGFzc2lmaWNhdGlvbi5mbGFncyAmIGZsYWcpIHsKKwkJCSpzdGF0ZV9pZCA9IHN0YXRlLT5p ZDsKKwkJCXJldHVybiAwOworCQl9CisJCXN0YXRlID0gKHN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAq KSgodW5zaWduZWQgbG9uZylzdGF0ZSArIGh3bWdyLT5wc19zaXplKTsKKwl9CisJcmV0dXJuIC1F SU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3N0YXRlcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy LCB1bnNpZ25lZCBsb25nIHN0YXRlX2lkKQoreworCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqc3Rh dGU7CisJaW50IHRhYmxlX2VudHJpZXM7CisJaW50IGk7CisKKwl0YWJsZV9lbnRyaWVzID0gaHdt Z3ItPm51bV9wczsKKworCXN0YXRlID0gaHdtZ3ItPnBzOworCisJZm9yIChpID0gMDsgaSA8IHRh YmxlX2VudHJpZXM7IGkrKykgeworCQlpZiAoc3RhdGUtPmlkID09IHN0YXRlX2lkKSB7CisJCQlt ZW1jcHkoaHdtZ3ItPnJlcXVlc3RfcHMsIHN0YXRlLCBod21nci0+cHNfc2l6ZSk7CisJCQlyZXR1 cm4gMDsKKwkJfQorCQlzdGF0ZSA9IChzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKikoKHVuc2lnbmVk IGxvbmcpc3RhdGUgKyBod21nci0+cHNfc2l6ZSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQor CitpbnQgcHNtX2xlZ2FjeV9zZXRfYm9vdF9zdGF0ZXMoc3RydWN0IHBwX2h3bWdyICpod21ncikK K3sKKwl1bnNpZ25lZCBsb25nIHN0YXRlX2lkOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYg KCFnZXRfc3RhdGVfYnlfY2xhc3NpZmljYXRpb24oaHdtZ3IsIFBQX1N0YXRlQ2xhc3NpZmljYXRp b25GbGFnX0Jvb3QsCisJCQkJCSZzdGF0ZV9pZCkpCisJCXJldCA9IHNldF9zdGF0ZXMoaHdtZ3Is IHN0YXRlX2lkKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBwc21fbGVnYWN5X3NldF9wZXJm b3JtYW5jZV9zdGF0ZXMoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwl1bnNpZ25lZCBsb25n IHN0YXRlX2lkOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFnZXRfdWlfc3RhdGUoaHdt Z3IsIFBQX1N0YXRlVUlMYWJlbF9QZXJmb3JtYW5jZSwKKwkJCQkJJnN0YXRlX2lkKSkKKwkJcmV0 ID0gc2V0X3N0YXRlcyhod21nciwgc3RhdGVfaWQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50 IHBzbV9sZWdhY3lfc2V0X3VzZXJfcGVyZm9ybWFuY2Vfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpo d21nciwKKwkJCQkJZW51bSBQUF9TdGF0ZVVJTGFiZWwgbGFiZWxfaWQsCisJCQkJCXN0cnVjdCBw cF9wb3dlcl9zdGF0ZSAqKnN0YXRlKQoreworCWludCB0YWJsZV9lbnRyaWVzOworCWludCBpOwor CisJdGFibGVfZW50cmllcyA9IGh3bWdyLT5udW1fcHM7CisJKnN0YXRlID0gaHdtZ3ItPnBzOwor CityZXN0YXJ0X3NlYXJjaDoKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGVfZW50cmllczsgaSsrKSB7 CisJCWlmICgoKnN0YXRlKS0+Y2xhc3NpZmljYXRpb24udWlfbGFiZWwgJiBsYWJlbF9pZCkKKwkJ CXJldHVybiAwOworCQkqc3RhdGUgPSAoc3RydWN0IHBwX3Bvd2VyX3N0YXRlICopKCh1aW50cHRy X3QpKnN0YXRlICsgaHdtZ3ItPnBzX3NpemUpOworCX0KKworCXN3aXRjaCAobGFiZWxfaWQpIHsK KwljYXNlIFBQX1N0YXRlVUlMYWJlbF9CYXR0ZXJ5OgorCWNhc2UgUFBfU3RhdGVVSUxhYmVsX0Jh bGFuY2VkOgorCQlsYWJlbF9pZCA9IFBQX1N0YXRlVUlMYWJlbF9QZXJmb3JtYW5jZTsKKwkJZ290 byByZXN0YXJ0X3NlYXJjaDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5W QUw7Cit9CisKK2ludCBwc21fbGVnYWN5X2FkanVzdF9wb3dlcl9zdGF0ZV9keW5hbWljKHN0cnVj dCBwcF9od21nciAqaHdtZ3IsIGJvb2wgc2tpcCwKKwkJCQkJCXN0cnVjdCBwcF9wb3dlcl9zdGF0 ZSAqbmV3X3BzKQoreworCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqcGN1cnJlbnQ7CisJc3RydWN0 IHBwX3Bvd2VyX3N0YXRlICpyZXF1ZXN0ZWQ7CisJYm9vbCBlcXVhbDsKKwl1aW50MzJfdCBpbmRl eDsKKwlsb25nIHdvcmtsb2FkOworCisJaWYgKHNraXApCisJCXJldHVybiAwOworCisJcGhtX2Rp c3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2VkKGh3bWdyKTsKKworCWlmIChuZXdfcHMgIT0gTlVM TCkKKwkJcmVxdWVzdGVkID0gbmV3X3BzOworCWVsc2UKKwkJcmVxdWVzdGVkID0gaHdtZ3ItPnJl cXVlc3RfcHM7CisKKwlwY3VycmVudCA9IGh3bWdyLT5jdXJyZW50X3BzOworCisJcGhtX2FwcGx5 X3N0YXRlX2FkanVzdF9ydWxlcyhod21nciwgcmVxdWVzdGVkLCBwY3VycmVudCk7CisJaWYgKHBj dXJyZW50ID09IE5VTEwgfHwgKDAgIT0gcGhtX2NoZWNrX3N0YXRlc19lcXVhbChod21nciwKKwkJ CSZwY3VycmVudC0+aGFyZHdhcmUsICZyZXF1ZXN0ZWQtPmhhcmR3YXJlLCAmZXF1YWwpKSkKKwkJ ZXF1YWwgPSBmYWxzZTsKKworCWlmICghZXF1YWwgfHwgcGhtX2NoZWNrX3NtY191cGRhdGVfcmVx dWlyZWRfZm9yX2Rpc3BsYXlfY29uZmlndXJhdGlvbihod21ncikpIHsKKwkJcGhtX3NldF9wb3dl cl9zdGF0ZShod21nciwgJnBjdXJyZW50LT5oYXJkd2FyZSwgJnJlcXVlc3RlZC0+aGFyZHdhcmUp OworCQltZW1jcHkoaHdtZ3ItPmN1cnJlbnRfcHMsIGh3bWdyLT5yZXF1ZXN0X3BzLCBod21nci0+ cHNfc2l6ZSk7CisJfQorCisJcGhtX25vdGlmeV9zbWNfZGlzcGxheV9jb25maWdfYWZ0ZXJfcHNf YWRqdXN0bWVudChod21ncik7CisJaWYgKCFwaG1fZm9yY2VfZHBtX2xldmVscyhod21nciwgaHdt Z3ItPnJlcXVlc3RfZHBtX2xldmVsKSkKKwkJaHdtZ3ItPmRwbV9sZXZlbCA9IGh3bWdyLT5yZXF1 ZXN0X2RwbV9sZXZlbDsKKworCWlmIChod21nci0+ZHBtX2xldmVsICE9IEFNRF9EUE1fRk9SQ0VE X0xFVkVMX01BTlVBTCkgeworCQlpbmRleCA9IGZscyhod21nci0+d29ya2xvYWRfbWFzayk7CisJ CWluZGV4ID0gaW5kZXggPiAwICYmIGluZGV4IDw9IFdvcmtsb2FkX1BvbGljeV9NYXggPyBpbmRl eCAtIDEgOiAwOworCQl3b3JrbG9hZCA9IGh3bWdyLT53b3JrbG9hZF9zZXR0aW5nW2luZGV4XTsK KworCQlpZiAoaHdtZ3ItPnBvd2VyX3Byb2ZpbGVfbW9kZSAhPSB3b3JrbG9hZCAmJiBod21nci0+ aHdtZ3JfZnVuYy0+c2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSkKKwkJCWh3bWdyLT5od21ncl9mdW5j LT5zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKGh3bWdyLCAmd29ya2xvYWQsIDApOworCX0KKworCXJl dHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdt Z3IvcHBfcHNtX2xlZ2FjeS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv cHBfcHNtX2xlZ2FjeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u YmM5OTQxMWMxYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvaHdtZ3IvcHBfcHNtX2xlZ2FjeS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5 cmlnaHQgMjAxNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRI T1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisKKyNpZm5kZWYgUFBfUFNNX0xFR0FDWV9ICisjZGVmaW5lIFBQX1BTTV9MRUdBQ1lf SAorCisjaW5jbHVkZSAiaHdtZ3IuaCIKKworaW50IHBzbV9sZWdhY3lfaW5pdF9wb3dlcl9zdGF0 ZV90YWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKK2ludCBwc21fbGVnYWN5X2ZpbmlfcG93 ZXJfc3RhdGVfdGFibGUoc3RydWN0IHBwX2h3bWdyICpod21ncik7CitpbnQgcHNtX2xlZ2FjeV9z ZXRfYm9vdF9zdGF0ZXMoc3RydWN0IHBwX2h3bWdyICpod21ncik7CitpbnQgcHNtX2xlZ2FjeV9z ZXRfcGVyZm9ybWFuY2Vfc3RhdGVzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOworaW50IHBzbV9s ZWdhY3lfc2V0X3VzZXJfcGVyZm9ybWFuY2Vfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21nciwK KwkJCQkJZW51bSBQUF9TdGF0ZVVJTGFiZWwgbGFiZWxfaWQsCisJCQkJCXN0cnVjdCBwcF9wb3dl cl9zdGF0ZSAqKnN0YXRlKTsKK2ludCBwc21fbGVnYWN5X2FkanVzdF9wb3dlcl9zdGF0ZV9keW5h bWljKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJYm9vbCBza2lwLAorCQkJCXN0cnVjdCBw cF9wb3dlcl9zdGF0ZSAqbmV3X3BzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcF9wc21fbmV3LmMgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL3Bvd2VycGxheS9od21nci9wcF9wc21fbmV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi45ZWJhOGExZjI4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcF9wc21fbmV3LmMKQEAgLTAsMCArMSw3NiBA QAorLyoKKyAqIENvcHlyaWdodCAyMDE3IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgor ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgInBw X3BzbV9uZXcuaCIKKworaW50IHBzbV9uZXdfaW5pdF9wb3dlcl9zdGF0ZV90YWJsZShzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyKQoreworCWh3bWdyLT5wc19zaXplID0gMDsKKwlod21nci0+bnVtX3Bz ID0gMDsKKwlod21nci0+cHMgPSBOVUxMOworCWh3bWdyLT5yZXF1ZXN0X3BzID0gTlVMTDsKKwlo d21nci0+Y3VycmVudF9wcyA9IE5VTEw7CisJaHdtZ3ItPmJvb3RfcHMgPSBOVUxMOworCWh3bWdy LT51dmRfcHMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwc21fbmV3X2ZpbmlfcG93 ZXJfc3RhdGVfdGFibGUoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlyZXR1cm4gMDsKK30K KworaW50IHBzbV9uZXdfc2V0X2Jvb3Rfc3RhdGVzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7 CisJcmV0dXJuIDA7Cit9CisKK2ludCBwc21fbmV3X3NldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3Ry dWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHBzbV9uZXdfc2V0 X3VzZXJfcGVyZm9ybWFuY2Vfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJZW51 bSBQUF9TdGF0ZVVJTGFiZWwgbGFiZWxfaWQsCisJCQkJCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAq KnN0YXRlKQoreworCXJldHVybiAwOworfQorCitpbnQgcHNtX25ld19hZGp1c3RfcG93ZXJfc3Rh dGVfZHluYW1pYyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCQlib29sIHNraXAsCisJCQkJ CXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqbmV3X3BzKQoreworCWlmIChza2lwKQorCQlyZXR1cm4g MDsKKworCXBobV9kaXNwbGF5X2NvbmZpZ3VyYXRpb25fY2hhbmdlZChod21ncik7CisKKwlwaG1f bm90aWZ5X3NtY19kaXNwbGF5X2NvbmZpZ19hZnRlcl9wc19hZGp1c3RtZW50KGh3bWdyKTsKKwor CXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvcHBfcHNtX25ldy5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3Iv cHBfcHNtX25ldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWM0 ZmFiY2Q4YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBs YXkvaHdtZ3IvcHBfcHNtX25ldy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg MjAxNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICov CisKKyNpZm5kZWYgUFBfUFNNX05FV19ICisjZGVmaW5lIFBQX1BTTV9ORVdfSAorCisjaW5jbHVk ZSAiaHdtZ3IuaCIKKworaW50IHBzbV9uZXdfaW5pdF9wb3dlcl9zdGF0ZV90YWJsZShzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyKTsKK2ludCBwc21fbmV3X2ZpbmlfcG93ZXJfc3RhdGVfdGFibGUoc3Ry dWN0IHBwX2h3bWdyICpod21ncik7CitpbnQgcHNtX25ld19zZXRfYm9vdF9zdGF0ZXMoc3RydWN0 IHBwX2h3bWdyICpod21ncik7CitpbnQgcHNtX25ld19zZXRfcGVyZm9ybWFuY2Vfc3RhdGVzKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpOworaW50IHBzbV9uZXdfc2V0X3VzZXJfcGVyZm9ybWFuY2Vf c3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJZW51bSBQUF9TdGF0ZVVJTGFiZWwg bGFiZWxfaWQsCisJCQkJCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqKnN0YXRlKTsKK2ludCBwc21f bmV3X2FkanVzdF9wb3dlcl9zdGF0ZV9keW5hbWljKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJ CQkJYm9vbCBza2lwLAorCQkJCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqbmV3X3BzKTsKKworI2Vu ZGlmCi0tIAoyLjEzLjYKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=