From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH 05/22] drm/i915: Move generic link training code to a separate file Date: Fri, 23 Oct 2015 13:01:48 +0300 Message-ID: <1445594525-7174-6-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1445594525-7174-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 16678721C4 for ; Fri, 23 Oct 2015 03:02:40 -0700 (PDT) In-Reply-To: <1445594525-7174-1-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, jim.bride@linux.intel.com, sivakumar.thulasimani@intel.com Cc: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org Tm8gZnVuY3Rpb25hbCBjaGFuZ2VzLCBqdXN0IG1vdmluZyBjb2RlIGFyb3VuZC4KCnYyOiBSZWJh c2UKClNpZ25lZC1vZmYtYnk6IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29u c2VsdmFuLmRlLm9saXZlaXJhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHAuYyAgICAgICAgICAgICAgIHwgMzIxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYyB8IDMyNyArKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAg ICAgICAgICAgIHwgIDE2ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDM1MyBpbnNlcnRpb25zKCspLCAz MTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHBfbGlua190cmFpbmluZy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA0NGQyOTBh Li4wODUxZGUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTc3LDYgKzc3LDcgQEAgaTkxNS15 ICs9IGR2b19jaDcwMTcubyBcCiAJICBkdm9fdGZwNDEwLm8gXAogCSAgaW50ZWxfY3J0Lm8gXAog CSAgaW50ZWxfZGRpLm8gXAorCSAgaW50ZWxfZHBfbGlua190cmFpbmluZy5vIFwKIAkgIGludGVs X2RwX21zdC5vIFwKIAkgIGludGVsX2RwLm8gXAogCSAgaW50ZWxfZHNpLm8gXApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RwLmMKaW5kZXggNGZmYjJlMy4uNGI4ODgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jCkBAIC0xMTg5LDcgKzExODksNyBAQCBpbnRlbF9kcF9zaW5rX3JhdGVzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsIGNvbnN0IGludCAqKnNpbmtfcmF0ZXMpCiAJcmV0dXJuIChpbnRlbF9k cF9tYXhfbGlua19idyhpbnRlbF9kcCkgPj4gMykgKyAxOwogfQogCi1zdGF0aWMgYm9vbCBpbnRl bF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorYm9vbCBp bnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewog CS8qIFdhRGlzYWJsZUhCUjI6c2tsICovCiAJaWYgKElTX1NLTF9SRVZJRChkZXYsIDAsIFNLTF9S RVZJRF9CMCkpCkBAIC0xMzY1LDggKzEzNjUsOCBAQCBpbnQgaW50ZWxfZHBfcmF0ZV9zZWxlY3Qo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHJhdGUpCiAJcmV0dXJuIHJhdGVfdG9faW5k ZXgocmF0ZSwgaW50ZWxfZHAtPnNpbmtfcmF0ZXMpOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9k cF9jb21wdXRlX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHBvcnRfY2xvY2ss Ci0JCQkJICB1aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkKK3ZvaWQgaW50 ZWxfZHBfY29tcHV0ZV9yYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBwb3J0X2Ns b2NrLAorCQkJICAgdWludDhfdCAqbGlua19idywgdWludDhfdCAqcmF0ZV9zZWxlY3QpCiB7CiAJ aWYgKGludGVsX2RwLT5udW1fc2lua19yYXRlcykgewogCQkqbGlua19idyA9IDA7CkBAIC0zMDQ2 LDcgKzMwNDYsNyBAQCBpbnRlbF9kcF9kcGNkX3JlYWRfd2FrZShzdHJ1Y3QgZHJtX2RwX2F1eCAq YXV4LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogICogRmV0Y2ggQVVYIENIIHJlZ2lzdGVycyAweDIw MiAtIDB4MjA3IHdoaWNoIGNvbnRhaW4KICAqIGxpbmsgc3RhdHVzIGluZm9ybWF0aW9uCiAgKi8K LXN0YXRpYyBib29sCitib29sCiBpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkK IHsKIAlyZXR1cm4gaW50ZWxfZHBfZHBjZF9yZWFkX3dha2UoJmludGVsX2RwLT5hdXgsCkBAIC0z MDU2LDcgKzMwNTYsNyBAQCBpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LXwogfQogCiAvKiBUaGVzZSBh cmUgc291cmNlLXNwZWNpZmljIHZhbHVlcy4gKi8KLXN0YXRpYyB1aW50OF90Cit1aW50OF90CiBp bnRlbF9kcF92b2x0YWdlX21heChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewogCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kcF90b19kZXYoaW50ZWxfZHApOwpAQCAtMzA3OSw3 ICszMDc5LDcgQEAgaW50ZWxfZHBfdm9sdGFnZV9tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKIAkJcmV0dXJuIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjsKIH0KIAotc3RhdGlj IHVpbnQ4X3QKK3VpbnQ4X3QKIGludGVsX2RwX3ByZV9lbXBoYXNpc19tYXgoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwgdWludDhfdCB2b2x0YWdlX3N3aW5nKQogewogCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBpbnRlbF9kcF90b19kZXYoaW50ZWxfZHApOwpAQCAtMzQyMSwzOCArMzQyMSw2 IEBAIHN0YXRpYyB1aW50MzJfdCBjaHZfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotaW50ZWxfZ2V0X2FkanVzdF90 cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkgICAgICAgY29uc3QgdWludDhfdCBs aW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkKLXsKLQl1aW50OF90IHYgPSAwOwotCXVp bnQ4X3QgcCA9IDA7Ci0JaW50IGxhbmU7Ci0JdWludDhfdCB2b2x0YWdlX21heDsKLQl1aW50OF90 IHByZWVtcGhfbWF4OwotCi0JZm9yIChsYW5lID0gMDsgbGFuZSA8IGludGVsX2RwLT5sYW5lX2Nv dW50OyBsYW5lKyspIHsKLQkJdWludDhfdCB0aGlzX3YgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1 ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGxhbmUpOwotCQl1aW50OF90IHRoaXNfcCA9IGRybV9k cF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKGxpbmtfc3RhdHVzLCBsYW5lKTsKLQot CQlpZiAodGhpc192ID4gdikKLQkJCXYgPSB0aGlzX3Y7Ci0JCWlmICh0aGlzX3AgPiBwKQotCQkJ cCA9IHRoaXNfcDsKLQl9Ci0KLQl2b2x0YWdlX21heCA9IGludGVsX2RwX3ZvbHRhZ2VfbWF4KGlu dGVsX2RwKTsKLQlpZiAodiA+PSB2b2x0YWdlX21heCkKLQkJdiA9IHZvbHRhZ2VfbWF4IHwgRFBf VFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7Ci0KLQlwcmVlbXBoX21heCA9IGludGVsX2RwX3ByZV9l bXBoYXNpc19tYXgoaW50ZWxfZHAsIHYpOwotCWlmIChwID49IHByZWVtcGhfbWF4KQotCQlwID0g cHJlZW1waF9tYXggfCBEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7Ci0KLQlmb3Ig KGxhbmUgPSAwOyBsYW5lIDwgNDsgbGFuZSsrKQotCQlpbnRlbF9kcC0+dHJhaW5fc2V0W2xhbmVd ID0gdiB8IHA7Ci19Ci0KIHN0YXRpYyB1aW50MzJfdAogZ2VuNF9zaWduYWxfbGV2ZWxzKHVpbnQ4 X3QgdHJhaW5fc2V0KQogewpAQCAtMzU1MCw3ICszNTE4LDcgQEAgZ2VuN19lZHBfc2lnbmFsX2xl dmVscyh1aW50OF90IHRyYWluX3NldCkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpbnRl bF9kcF9zZXRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewogCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQo aW50ZWxfZHApOwpAQCAtMzU5Nyw3ICszNTY1LDcgQEAgaW50ZWxfZHBfc2V0X3NpZ25hbF9sZXZl bHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAlQT1NUSU5HX1JFQUQoaW50ZWxfZHAtPm91 dHB1dF9yZWcpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogaW50ZWxfZHBfcHJvZ3JhbV9saW5r X3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIAkJCQkgICAgICAg dWludDhfdCBkcF90cmFpbl9wYXQpCiB7CkBAIC0zNjExLDU2ICszNTc5LDcgQEAgaW50ZWxfZHBf cHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK IAlQT1NUSU5HX1JFQUQoaW50ZWxfZHAtPm91dHB1dF9yZWcpOwogfQogCi1zdGF0aWMgYm9vbAot aW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJCXVp bnQ4X3QgZHBfdHJhaW5fcGF0KQotewotCXVpbnQ4X3QgYnVmW3NpemVvZihpbnRlbF9kcC0+dHJh aW5fc2V0KSArIDFdOwotCWludCByZXQsIGxlbjsKLQotCWludGVsX2RwX3Byb2dyYW1fbGlua190 cmFpbmluZ19wYXR0ZXJuKGludGVsX2RwLCBkcF90cmFpbl9wYXQpOwotCi0JYnVmWzBdID0gZHBf dHJhaW5fcGF0OwotCWlmICgoZHBfdHJhaW5fcGF0ICYgRFBfVFJBSU5JTkdfUEFUVEVSTl9NQVNL KSA9PQotCSAgICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpIHsKLQkJLyogZG9uJ3Qgd3Jp dGUgRFBfVFJBSU5JTkdfTEFORXhfU0VUIG9uIGRpc2FibGUgKi8KLQkJbGVuID0gMTsKLQl9IGVs c2UgewotCQkvKiBEUF9UUkFJTklOR19MQU5FeF9TRVQgZm9sbG93IERQX1RSQUlOSU5HX1BBVFRF Uk5fU0VUICovCi0JCW1lbWNweShidWYgKyAxLCBpbnRlbF9kcC0+dHJhaW5fc2V0LCBpbnRlbF9k cC0+bGFuZV9jb3VudCk7Ci0JCWxlbiA9IGludGVsX2RwLT5sYW5lX2NvdW50ICsgMTsKLQl9Ci0K LQlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFU VEVSTl9TRVQsCi0JCQkJYnVmLCBsZW4pOwotCi0JcmV0dXJuIHJldCA9PSBsZW47Ci19Ci0KLXN0 YXRpYyBib29sCi1pbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsCi0JCQl1aW50OF90IGRwX3RyYWluX3BhdCkKLXsKLQlpZiAoIWludGVsX2RwLT50cmFp bl9zZXRfdmFsaWQpCi0JCW1lbXNldChpbnRlbF9kcC0+dHJhaW5fc2V0LCAwLCBzaXplb2YoaW50 ZWxfZHAtPnRyYWluX3NldCkpOwotCWludGVsX2RwX3NldF9zaWduYWxfbGV2ZWxzKGludGVsX2Rw KTsKLQlyZXR1cm4gaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsIGRwX3RyYWluX3Bh dCk7Ci19Ci0KLXN0YXRpYyBib29sCi1pbnRlbF9kcF91cGRhdGVfbGlua190cmFpbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQotewotCWludCByZXQ7Ci0KLQlpbnRlbF9kcF9zZXRfc2lnbmFs X2xldmVscyhpbnRlbF9kcCk7Ci0KLQlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAt PmF1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULAotCQkJCWludGVsX2RwLT50cmFpbl9zZXQsIGlu dGVsX2RwLT5sYW5lX2NvdW50KTsKLQotCXJldHVybiByZXQgPT0gaW50ZWxfZHAtPmxhbmVfY291 bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2RwX3NldF9pZGxlX2xpbmtfdHJhaW4oc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKK3ZvaWQgaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewogCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwogCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKQEAgLTM2OTEsMjI4 ICszNjEwLDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCQlEUk1fRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZv ciBEUCBpZGxlIHBhdHRlcm5zXG4iKTsKIH0KIAotLyogRW5hYmxlIGNvcnJlc3BvbmRpbmcgcG9y dCBhbmQgc3RhcnQgdHJhaW5pbmcgcGF0dGVybiAxICovCi1zdGF0aWMgdm9pZAotaW50ZWxfZHBf bGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQot ewotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9k cCktPmJhc2UuYmFzZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2Owot CWludCBpOwotCXVpbnQ4X3Qgdm9sdGFnZTsKLQlpbnQgdm9sdGFnZV90cmllcywgbG9vcF90cmll czsKLQl1aW50OF90IGxpbmtfY29uZmlnWzJdOwotCXVpbnQ4X3QgbGlua19idywgcmF0ZV9zZWxl Y3Q7Ci0KLQlpZiAoSEFTX0RESShkZXYpKQotCQlpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJh aW4oZW5jb2Rlcik7Ci0KLQlpbnRlbF9kcF9jb21wdXRlX3JhdGUoaW50ZWxfZHAsIGludGVsX2Rw LT5saW5rX3JhdGUsCi0JCQkgICAgICAmbGlua19idywgJnJhdGVfc2VsZWN0KTsKLQotCS8qIFdy aXRlIHRoZSBsaW5rIGNvbmZpZ3VyYXRpb24gZGF0YSAqLwotCWxpbmtfY29uZmlnWzBdID0gbGlu a19idzsKLQlsaW5rX2NvbmZpZ1sxXSA9IGludGVsX2RwLT5sYW5lX2NvdW50OwotCWlmIChkcm1f ZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKLQkJbGlua19jb25maWdbMV0g fD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKLQlkcm1fZHBfZHBjZF93cml0ZSgm aW50ZWxfZHAtPmF1eCwgRFBfTElOS19CV19TRVQsIGxpbmtfY29uZmlnLCAyKTsKLQlpZiAoaW50 ZWxfZHAtPm51bV9zaW5rX3JhdGVzKQotCQlkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1 eCwgRFBfTElOS19SQVRFX1NFVCwKLQkJCQkgICZyYXRlX3NlbGVjdCwgMSk7Ci0KLQlsaW5rX2Nv bmZpZ1swXSA9IDA7Ci0JbGlua19jb25maWdbMV0gPSBEUF9TRVRfQU5TSV84QjEwQjsKLQlkcm1f ZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfRE9XTlNQUkVBRF9DVFJMLCBsaW5rX2Nv bmZpZywgMik7Ci0KLQlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9FTjsKLQotCS8qIGNsb2NrIHJl Y292ZXJ5ICovCi0JaWYgKCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKGludGVsX2RwLAotCQkJ CSAgICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEgfAotCQkJCSAgICAgICBEUF9MSU5LX1NDUkFN QkxJTkdfRElTQUJMRSkpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIGxpbmsgdHJh aW5pbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jdm9sdGFnZSA9IDB4ZmY7Ci0Jdm9sdGFnZV90 cmllcyA9IDA7Ci0JbG9vcF90cmllcyA9IDA7Ci0JZm9yICg7OykgewotCQl1aW50OF90IGxpbmtf c3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwotCi0JCWRybV9kcF9saW5rX3RyYWluX2Nsb2Nr X3JlY292ZXJ5X2RlbGF5KGludGVsX2RwLT5kcGNkKTsKLQkJaWYgKCFpbnRlbF9kcF9nZXRfbGlu a19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkgewotCQkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gZ2V0IGxpbmsgc3RhdHVzXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGRybV9kcF9j bG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpKSB7Ci0J CQlEUk1fREVCVUdfS01TKCJjbG9jayByZWNvdmVyeSBPS1xuIik7Ci0JCQlicmVhazsKLQkJfQot Ci0JCS8qCi0JCSAqIGlmIHdlIHVzZWQgcHJldmlvdXNseSB0cmFpbmVkIHZvbHRhZ2UgYW5kIHBy ZS1lbXBoYXNpcyB2YWx1ZXMKLQkJICogYW5kIHdlIGRvbid0IGdldCBjbG9jayByZWNvdmVyeSwg cmVzZXQgbGluayB0cmFpbmluZyB2YWx1ZXMKLQkJICovCi0JCWlmIChpbnRlbF9kcC0+dHJhaW5f c2V0X3ZhbGlkKSB7Ci0JCQlEUk1fREVCVUdfS01TKCJjbG9jayByZWNvdmVyeSBub3Qgb2ssIHJl c2V0Iik7Ci0JCQkvKiBjbGVhciB0aGUgZmxhZyBhcyB3ZSBhcmUgbm90IHJldXNpbmcgdHJhaW4g c2V0ICovCi0JCQlpbnRlbF9kcC0+dHJhaW5fc2V0X3ZhbGlkID0gZmFsc2U7Ci0JCQlpZiAoIWlu dGVsX2RwX3Jlc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCi0JCQkJCQkgICAgICAgRFBfVFJBSU5J TkdfUEFUVEVSTl8xIHwKLQkJCQkJCSAgICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkp IHsKLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgbGluayB0cmFpbmluZ1xuIik7Ci0J CQkJcmV0dXJuOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBDaGVjayB0byBzZWUg aWYgd2UndmUgdHJpZWQgdGhlIG1heCB2b2x0YWdlICovCi0JCWZvciAoaSA9IDA7IGkgPCBpbnRl bF9kcC0+bGFuZV9jb3VudDsgaSsrKQotCQkJaWYgKChpbnRlbF9kcC0+dHJhaW5fc2V0W2ldICYg RFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQpID09IDApCi0JCQkJYnJlYWs7Ci0JCWlmIChpID09 IGludGVsX2RwLT5sYW5lX2NvdW50KSB7Ci0JCQkrK2xvb3BfdHJpZXM7Ci0JCQlpZiAobG9vcF90 cmllcyA9PSA1KSB7Ci0JCQkJRFJNX0VSUk9SKCJ0b28gbWFueSBmdWxsIHJldHJpZXMsIGdpdmUg dXBcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaW50ZWxfZHBfcmVzZXRfbGlua190cmFpbihp bnRlbF9kcCwKLQkJCQkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xIHwKLQkJCQkJCSAgRFBfTElO S19TQ1JBTUJMSU5HX0RJU0FCTEUpOwotCQkJdm9sdGFnZV90cmllcyA9IDA7Ci0JCQljb250aW51 ZTsKLQkJfQotCi0JCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSd2ZSB0cmllZCB0aGUgc2FtZSB2b2x0 YWdlIDUgdGltZXMgKi8KLQkJaWYgKChpbnRlbF9kcC0+dHJhaW5fc2V0WzBdICYgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19NQVNLKSA9PSB2b2x0YWdlKSB7Ci0JCQkrK3ZvbHRhZ2VfdHJpZXM7Ci0J CQlpZiAodm9sdGFnZV90cmllcyA9PSA1KSB7Ci0JCQkJRFJNX0VSUk9SKCJ0b28gbWFueSB2b2x0 YWdlIHJldHJpZXMsIGdpdmUgdXBcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UKLQkJ CXZvbHRhZ2VfdHJpZXMgPSAwOwotCQl2b2x0YWdlID0gaW50ZWxfZHAtPnRyYWluX3NldFswXSAm IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSzsKLQotCQkvKiBVcGRhdGUgdHJhaW5pbmcgc2V0 IGFzIHJlcXVlc3RlZCBieSB0YXJnZXQgKi8KLQkJaW50ZWxfZ2V0X2FkanVzdF90cmFpbihpbnRl bF9kcCwgbGlua19zdGF0dXMpOwotCQlpZiAoIWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKGlu dGVsX2RwKSkgewotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGxpbmsgdHJhaW5pbmdc biIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnRlbF9kcF9saW5r X3RyYWluaW5nX2NoYW5uZWxfZXF1YWxpemF0aW9uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Ci17Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9y dChpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpZ19wb3J0LT5iYXNlLmJh c2UuZGV2OwotCWJvb2wgY2hhbm5lbF9lcSA9IGZhbHNlOwotCWludCB0cmllcywgY3JfdHJpZXM7 Ci0JdWludDMyX3QgdHJhaW5pbmdfcGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMjsKLQot CS8qCi0JICogVHJhaW5pbmcgUGF0dGVybiAzIGZvciBIQlIyIG9yIDEuMiBkZXZpY2VzIHRoYXQg c3VwcG9ydCBpdC4KLQkgKgotCSAqIEludGVsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgSEJSMiBh bHNvIHN1cHBvcnQgVFBTMy4gVFBTMyBzdXBwb3J0IGlzCi0JICogYWxzbyBtYW5kYXRvcnkgZm9y IGRvd25zdHJlYW0gZGV2aWNlcyB0aGF0IHN1cHBvcnQgSEJSMi4KLQkgKgotCSAqIER1ZSB0byBX YURpc2FibGVIQlIyIFNLTCA8IEIwIGlzIHRoZSBvbmx5IGV4Y2VwdGlvbiB3aGVyZSBUUFMzIGlz Ci0JICogc3VwcG9ydGVkIGJ1dCBzdGlsbCBub3QgZW5hYmxlZC4KLQkgKi8KLQlpZiAoaW50ZWxf ZHBfc291cmNlX3N1cHBvcnRzX2hicjIoZGV2KSAmJgotCSAgICBkcm1fZHBfdHBzM19zdXBwb3J0 ZWQoaW50ZWxfZHAtPmRwY2QpKQotCQl0cmFpbmluZ19wYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFU VEVSTl8zOwotCWVsc2UgaWYgKGludGVsX2RwLT5saW5rX3JhdGUgPT0gNTQwMDAwKQotCQlEUk1f RVJST1IoIjUuNCBHYnBzIGxpbmsgcmF0ZSB3aXRob3V0IEhCUjIvVFBTMyBzdXBwb3J0XG4iKTsK LQotCS8qIGNoYW5uZWwgZXF1YWxpemF0aW9uICovCi0JaWYgKCFpbnRlbF9kcF9zZXRfbGlua190 cmFpbihpbnRlbF9kcCwKLQkJCQkgICAgIHRyYWluaW5nX3BhdHRlcm4gfAotCQkJCSAgICAgRFBf TElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIHN0YXJ0 IGNoYW5uZWwgZXF1YWxpemF0aW9uXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXRyaWVzID0gMDsK LQljcl90cmllcyA9IDA7Ci0JY2hhbm5lbF9lcSA9IGZhbHNlOwotCWZvciAoOzspIHsKLQkJdWlu dDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKLQotCQlpZiAoY3JfdHJpZXMg PiA1KSB7Ci0JCQlEUk1fRVJST1IoImZhaWxlZCB0byB0cmFpbiBEUCwgYWJvcnRpbmdcbiIpOwot CQkJYnJlYWs7Ci0JCX0KLQotCQlkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGlu dGVsX2RwLT5kcGNkKTsKLQkJaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxfZHAs IGxpbmtfc3RhdHVzKSkgewotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGxpbmsgc3RhdHVz XG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogTWFrZSBzdXJlIGNsb2NrIGlzIHN0aWxsIG9r ICovCi0JCWlmICghZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLAotCQkJCQkg ICAgICBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKLQkJCWludGVsX2RwLT50cmFpbl9zZXRfdmFs aWQgPSBmYWxzZTsKLQkJCWludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3ZlcnkoaW50 ZWxfZHApOwotCQkJaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCi0JCQkJCQl0cmFp bmluZ19wYXR0ZXJuIHwKLQkJCQkJCURQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKTsKLQkJCWNy X3RyaWVzKys7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChkcm1fZHBfY2hhbm5lbF9lcV9v ayhsaW5rX3N0YXR1cywKLQkJCQkJIGludGVsX2RwLT5sYW5lX2NvdW50KSkgewotCQkJY2hhbm5l bF9lcSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIFRyeSA1IHRpbWVzLCB0aGVuIHRy eSBjbG9jayByZWNvdmVyeSBpZiB0aGF0IGZhaWxzICovCi0JCWlmICh0cmllcyA+IDUpIHsKLQkJ CWludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQgPSBmYWxzZTsKLQkJCWludGVsX2RwX2xpbmtfdHJh aW5pbmdfY2xvY2tfcmVjb3ZlcnkoaW50ZWxfZHApOwotCQkJaW50ZWxfZHBfc2V0X2xpbmtfdHJh aW4oaW50ZWxfZHAsCi0JCQkJCQl0cmFpbmluZ19wYXR0ZXJuIHwKLQkJCQkJCURQX0xJTktfU0NS QU1CTElOR19ESVNBQkxFKTsKLQkJCXRyaWVzID0gMDsKLQkJCWNyX3RyaWVzKys7Ci0JCQljb250 aW51ZTsKLQkJfQotCi0JCS8qIFVwZGF0ZSB0cmFpbmluZyBzZXQgYXMgcmVxdWVzdGVkIGJ5IHRh cmdldCAqLwotCQlpbnRlbF9nZXRfYWRqdXN0X3RyYWluKGludGVsX2RwLCBsaW5rX3N0YXR1cyk7 Ci0JCWlmICghaW50ZWxfZHBfdXBkYXRlX2xpbmtfdHJhaW4oaW50ZWxfZHApKSB7Ci0JCQlEUk1f RVJST1IoImZhaWxlZCB0byB1cGRhdGUgbGluayB0cmFpbmluZ1xuIik7Ci0JCQlicmVhazsKLQkJ fQotCQkrK3RyaWVzOwotCX0KLQotCWludGVsX2RwX3NldF9pZGxlX2xpbmtfdHJhaW4oaW50ZWxf ZHApOwotCi0JaWYgKGNoYW5uZWxfZXEpIHsKLQkJaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCA9 IHRydWU7Ci0JCURSTV9ERUJVR19LTVMoIkNoYW5uZWwgRVEgZG9uZS4gRFAgVHJhaW5pbmcgc3Vj Y2Vzc2Z1bFxuIik7Ci0JfQotfQotCi12b2lkIGludGVsX2RwX3N0b3BfbGlua190cmFpbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVs X2RwLAotCQkJCURQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Ci19Ci0KLXZvaWQKLWludGVs X2RwX3N0YXJ0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlpbnRl bF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KGludGVsX2RwKTsKLQlpbnRlbF9kcF9s aW5rX3RyYWluaW5nX2NoYW5uZWxfZXF1YWxpemF0aW9uKGludGVsX2RwKTsKLX0KLQogc3RhdGlj IHZvaWQKIGludGVsX2RwX2xpbmtfZG93bihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjljMTQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKQEAgLTAsMCArMSwz MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNs dWRlICJpbnRlbF9kcnYuaCIKKworc3RhdGljIHZvaWQKK2ludGVsX2dldF9hZGp1c3RfdHJhaW4o c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJICAgICAgIGNvbnN0IHVpbnQ4X3QgbGlua19z dGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0pCit7CisJdWludDhfdCB2ID0gMDsKKwl1aW50OF90 IHAgPSAwOworCWludCBsYW5lOworCXVpbnQ4X3Qgdm9sdGFnZV9tYXg7CisJdWludDhfdCBwcmVl bXBoX21heDsKKworCWZvciAobGFuZSA9IDA7IGxhbmUgPCBpbnRlbF9kcC0+bGFuZV9jb3VudDsg bGFuZSsrKSB7CisJCXVpbnQ4X3QgdGhpc192ID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92 b2x0YWdlKGxpbmtfc3RhdHVzLCBsYW5lKTsKKwkJdWludDhfdCB0aGlzX3AgPSBkcm1fZHBfZ2V0 X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywgbGFuZSk7CisKKwkJaWYg KHRoaXNfdiA+IHYpCisJCQl2ID0gdGhpc192OworCQlpZiAodGhpc19wID4gcCkKKwkJCXAgPSB0 aGlzX3A7CisJfQorCisJdm9sdGFnZV9tYXggPSBpbnRlbF9kcF92b2x0YWdlX21heChpbnRlbF9k cCk7CisJaWYgKHYgPj0gdm9sdGFnZV9tYXgpCisJCXYgPSB2b2x0YWdlX21heCB8IERQX1RSQUlO X01BWF9TV0lOR19SRUFDSEVEOworCisJcHJlZW1waF9tYXggPSBpbnRlbF9kcF9wcmVfZW1waGFz aXNfbWF4KGludGVsX2RwLCB2KTsKKwlpZiAocCA+PSBwcmVlbXBoX21heCkKKwkJcCA9IHByZWVt cGhfbWF4IHwgRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOworCisJZm9yIChsYW5l ID0gMDsgbGFuZSA8IDQ7IGxhbmUrKykKKwkJaW50ZWxfZHAtPnRyYWluX3NldFtsYW5lXSA9IHYg fCBwOworfQorCitzdGF0aWMgYm9vbAoraW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwKKwkJCXVpbnQ4X3QgZHBfdHJhaW5fcGF0KQoreworCXVpbnQ4X3Qg YnVmW3NpemVvZihpbnRlbF9kcC0+dHJhaW5fc2V0KSArIDFdOworCWludCByZXQsIGxlbjsKKwor CWludGVsX2RwX3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0ZXJuKGludGVsX2RwLCBkcF90cmFp bl9wYXQpOworCisJYnVmWzBdID0gZHBfdHJhaW5fcGF0OworCWlmICgoZHBfdHJhaW5fcGF0ICYg RFBfVFJBSU5JTkdfUEFUVEVSTl9NQVNLKSA9PQorCSAgICBEUF9UUkFJTklOR19QQVRURVJOX0RJ U0FCTEUpIHsKKwkJLyogZG9uJ3Qgd3JpdGUgRFBfVFJBSU5JTkdfTEFORXhfU0VUIG9uIGRpc2Fi bGUgKi8KKwkJbGVuID0gMTsKKwl9IGVsc2UgeworCQkvKiBEUF9UUkFJTklOR19MQU5FeF9TRVQg Zm9sbG93IERQX1RSQUlOSU5HX1BBVFRFUk5fU0VUICovCisJCW1lbWNweShidWYgKyAxLCBpbnRl bF9kcC0+dHJhaW5fc2V0LCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7CisJCWxlbiA9IGludGVsX2Rw LT5sYW5lX2NvdW50ICsgMTsKKwl9CisKKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxf ZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCisJCQkJYnVmLCBsZW4pOworCisJcmV0 dXJuIHJldCA9PSBsZW47Cit9CisKK3N0YXRpYyBib29sCitpbnRlbF9kcF9yZXNldF9saW5rX3Ry YWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQl1aW50OF90IGRwX3RyYWluX3BhdCkK K3sKKwlpZiAoIWludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQpCisJCW1lbXNldChpbnRlbF9kcC0+ dHJhaW5fc2V0LCAwLCBzaXplb2YoaW50ZWxfZHAtPnRyYWluX3NldCkpOworCWludGVsX2RwX3Nl dF9zaWduYWxfbGV2ZWxzKGludGVsX2RwKTsKKwlyZXR1cm4gaW50ZWxfZHBfc2V0X2xpbmtfdHJh aW4oaW50ZWxfZHAsIGRwX3RyYWluX3BhdCk7Cit9CisKK3N0YXRpYyBib29sCitpbnRlbF9kcF91 cGRhdGVfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCWludCByZXQ7 CisKKwlpbnRlbF9kcF9zZXRfc2lnbmFsX2xldmVscyhpbnRlbF9kcCk7CisKKwlyZXQgPSBkcm1f ZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULAorCQkJ CWludGVsX2RwLT50cmFpbl9zZXQsIGludGVsX2RwLT5sYW5lX2NvdW50KTsKKworCXJldHVybiBy ZXQgPT0gaW50ZWxfZHAtPmxhbmVfY291bnQ7Cit9CisKKy8qIEVuYWJsZSBjb3JyZXNwb25kaW5n IHBvcnQgYW5kIHN0YXJ0IHRyYWluaW5nIHBhdHRlcm4gMSAqLworc3RhdGljIHZvaWQKK2ludGVs X2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3Zlcnkoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlLmJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRl djsKKwlpbnQgaTsKKwl1aW50OF90IHZvbHRhZ2U7CisJaW50IHZvbHRhZ2VfdHJpZXMsIGxvb3Bf dHJpZXM7CisJdWludDhfdCBsaW5rX2NvbmZpZ1syXTsKKwl1aW50OF90IGxpbmtfYncsIHJhdGVf c2VsZWN0OworCisJaWYgKEhBU19EREkoZGV2KSkKKwkJaW50ZWxfZGRpX3ByZXBhcmVfbGlua19y ZXRyYWluKGVuY29kZXIpOworCisJaW50ZWxfZHBfY29tcHV0ZV9yYXRlKGludGVsX2RwLCBpbnRl bF9kcC0+bGlua19yYXRlLAorCQkJICAgICAgJmxpbmtfYncsICZyYXRlX3NlbGVjdCk7CisKKwkv KiBXcml0ZSB0aGUgbGluayBjb25maWd1cmF0aW9uIGRhdGEgKi8KKwlsaW5rX2NvbmZpZ1swXSA9 IGxpbmtfYnc7CisJbGlua19jb25maWdbMV0gPSBpbnRlbF9kcC0+bGFuZV9jb3VudDsKKwlpZiAo ZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCisJCWxpbmtfY29uZmln WzFdIHw9IERQX0xBTkVfQ09VTlRfRU5IQU5DRURfRlJBTUVfRU47CisJZHJtX2RwX2RwY2Rfd3Jp dGUoJmludGVsX2RwLT5hdXgsIERQX0xJTktfQldfU0VULCBsaW5rX2NvbmZpZywgMik7CisJaWYg KGludGVsX2RwLT5udW1fc2lua19yYXRlcykKKwkJZHJtX2RwX2RwY2Rfd3JpdGUoJmludGVsX2Rw LT5hdXgsIERQX0xJTktfUkFURV9TRVQsCisJCQkJICAmcmF0ZV9zZWxlY3QsIDEpOworCisJbGlu a19jb25maWdbMF0gPSAwOworCWxpbmtfY29uZmlnWzFdID0gRFBfU0VUX0FOU0lfOEIxMEI7CisJ ZHJtX2RwX2RwY2Rfd3JpdGUoJmludGVsX2RwLT5hdXgsIERQX0RPV05TUFJFQURfQ1RSTCwgbGlu a19jb25maWcsIDIpOworCisJaW50ZWxfZHAtPkRQIHw9IERQX1BPUlRfRU47CisKKwkvKiBjbG9j ayByZWNvdmVyeSAqLworCWlmICghaW50ZWxfZHBfcmVzZXRfbGlua190cmFpbihpbnRlbF9kcCwK KwkJCQkgICAgICAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xIHwKKwkJCQkgICAgICAgRFBfTElOS19T Q1JBTUJMSU5HX0RJU0FCTEUpKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBsaW5r IHRyYWluaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZvbHRhZ2UgPSAweGZmOworCXZvbHRh Z2VfdHJpZXMgPSAwOworCWxvb3BfdHJpZXMgPSAwOworCWZvciAoOzspIHsKKwkJdWludDhfdCBs aW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKKworCQlkcm1fZHBfbGlua190cmFpbl9j bG9ja19yZWNvdmVyeV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7CisJCWlmICghaW50ZWxfZHBfZ2V0 X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykpIHsKKwkJCURSTV9FUlJPUigiZmFp bGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChkcm1f ZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KSkg eworCQkJRFJNX0RFQlVHX0tNUygiY2xvY2sgcmVjb3ZlcnkgT0tcbiIpOworCQkJYnJlYWs7CisJ CX0KKworCQkvKgorCQkgKiBpZiB3ZSB1c2VkIHByZXZpb3VzbHkgdHJhaW5lZCB2b2x0YWdlIGFu ZCBwcmUtZW1waGFzaXMgdmFsdWVzCisJCSAqIGFuZCB3ZSBkb24ndCBnZXQgY2xvY2sgcmVjb3Zl cnksIHJlc2V0IGxpbmsgdHJhaW5pbmcgdmFsdWVzCisJCSAqLworCQlpZiAoaW50ZWxfZHAtPnRy YWluX3NldF92YWxpZCkgeworCQkJRFJNX0RFQlVHX0tNUygiY2xvY2sgcmVjb3Zlcnkgbm90IG9r LCByZXNldCIpOworCQkJLyogY2xlYXIgdGhlIGZsYWcgYXMgd2UgYXJlIG5vdCByZXVzaW5nIHRy YWluIHNldCAqLworCQkJaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCA9IGZhbHNlOworCQkJaWYg KCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKGludGVsX2RwLAorCQkJCQkJICAgICAgIERQX1RS QUlOSU5HX1BBVFRFUk5fMSB8CisJCQkJCQkgICAgICAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FC TEUpKSB7CisJCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIGxpbmsgdHJhaW5pbmdcbiIp OworCQkJCXJldHVybjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQ2hlY2sgdG8g c2VlIGlmIHdlJ3ZlIHRyaWVkIHRoZSBtYXggdm9sdGFnZSAqLworCQlmb3IgKGkgPSAwOyBpIDwg aW50ZWxfZHAtPmxhbmVfY291bnQ7IGkrKykKKwkJCWlmICgoaW50ZWxfZHAtPnRyYWluX3NldFtp XSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEKSA9PSAwKQorCQkJCWJyZWFrOworCQlpZiAo aSA9PSBpbnRlbF9kcC0+bGFuZV9jb3VudCkgeworCQkJKytsb29wX3RyaWVzOworCQkJaWYgKGxv b3BfdHJpZXMgPT0gNSkgeworCQkJCURSTV9FUlJPUigidG9vIG1hbnkgZnVsbCByZXRyaWVzLCBn aXZlIHVwXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWludGVsX2RwX3Jlc2V0X2xpbmtfdHJh aW4oaW50ZWxfZHAsCisJCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8CisJCQkJCQkgIERQ X0xJTktfU0NSQU1CTElOR19ESVNBQkxFKTsKKwkJCXZvbHRhZ2VfdHJpZXMgPSAwOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBDaGVjayB0byBzZWUgaWYgd2UndmUgdHJpZWQgdGhlIHNhbWUg dm9sdGFnZSA1IHRpbWVzICovCisJCWlmICgoaW50ZWxfZHAtPnRyYWluX3NldFswXSAmIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgPT0gdm9sdGFnZSkgeworCQkJKyt2b2x0YWdlX3RyaWVz OworCQkJaWYgKHZvbHRhZ2VfdHJpZXMgPT0gNSkgeworCQkJCURSTV9FUlJPUigidG9vIG1hbnkg dm9sdGFnZSByZXRyaWVzLCBnaXZlIHVwXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNl CisJCQl2b2x0YWdlX3RyaWVzID0gMDsKKwkJdm9sdGFnZSA9IGludGVsX2RwLT50cmFpbl9zZXRb MF0gJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0s7CisKKwkJLyogVXBkYXRlIHRyYWluaW5n IHNldCBhcyByZXF1ZXN0ZWQgYnkgdGFyZ2V0ICovCisJCWludGVsX2dldF9hZGp1c3RfdHJhaW4o aW50ZWxfZHAsIGxpbmtfc3RhdHVzKTsKKwkJaWYgKCFpbnRlbF9kcF91cGRhdGVfbGlua190cmFp bihpbnRlbF9kcCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHVwZGF0ZSBsaW5rIHRyYWlu aW5nXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAoraW50ZWxfZHBf bGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQoreworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkaWdfcG9ydC0+YmFz ZS5iYXNlLmRldjsKKwlib29sIGNoYW5uZWxfZXEgPSBmYWxzZTsKKwlpbnQgdHJpZXMsIGNyX3Ry aWVzOworCXVpbnQzMl90IHRyYWluaW5nX3BhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJOXzI7 CisKKwkvKgorCSAqIFRyYWluaW5nIFBhdHRlcm4gMyBmb3IgSEJSMiBvciAxLjIgZGV2aWNlcyB0 aGF0IHN1cHBvcnQgaXQuCisJICoKKwkgKiBJbnRlbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IEhC UjIgYWxzbyBzdXBwb3J0IFRQUzMuIFRQUzMgc3VwcG9ydCBpcworCSAqIGFsc28gbWFuZGF0b3J5 IGZvciBkb3duc3RyZWFtIGRldmljZXMgdGhhdCBzdXBwb3J0IEhCUjIuCisJICoKKwkgKiBEdWUg dG8gV2FEaXNhYmxlSEJSMiBTS0wgPCBCMCBpcyB0aGUgb25seSBleGNlcHRpb24gd2hlcmUgVFBT MyBpcworCSAqIHN1cHBvcnRlZCBidXQgc3RpbGwgbm90IGVuYWJsZWQuCisJICovCisJaWYgKGlu dGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKGRldikgJiYKKwkgICAgZHJtX2RwX3RwczNfc3Vw cG9ydGVkKGludGVsX2RwLT5kcGNkKSkKKwkJdHJhaW5pbmdfcGF0dGVybiA9IERQX1RSQUlOSU5H X1BBVFRFUk5fMzsKKwllbHNlIGlmIChpbnRlbF9kcC0+bGlua19yYXRlID09IDU0MDAwMCkKKwkJ RFJNX0VSUk9SKCI1LjQgR2JwcyBsaW5rIHJhdGUgd2l0aG91dCBIQlIyL1RQUzMgc3VwcG9ydFxu Iik7CisKKwkvKiBjaGFubmVsIGVxdWFsaXphdGlvbiAqLworCWlmICghaW50ZWxfZHBfc2V0X2xp bmtfdHJhaW4oaW50ZWxfZHAsCisJCQkJICAgICB0cmFpbmluZ19wYXR0ZXJuIHwKKwkJCQkgICAg IERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBz dGFydCBjaGFubmVsIGVxdWFsaXphdGlvblxuIik7CisJCXJldHVybjsKKwl9CisKKwl0cmllcyA9 IDA7CisJY3JfdHJpZXMgPSAwOworCWNoYW5uZWxfZXEgPSBmYWxzZTsKKwlmb3IgKDs7KSB7CisJ CXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07CisKKwkJaWYgKGNyX3Ry aWVzID4gNSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdHJhaW4gRFAsIGFib3J0aW5nXG4i KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxh eShpbnRlbF9kcC0+ZHBjZCk7CisJCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVs X2RwLCBsaW5rX3N0YXR1cykpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBsaW5rIHN0 YXR1c1xuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE1ha2Ugc3VyZSBjbG9jayBpcyBzdGls bCBvayAqLworCQlpZiAoIWRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywKKwkJ CQkJICAgICAgaW50ZWxfZHAtPmxhbmVfY291bnQpKSB7CisJCQlpbnRlbF9kcC0+dHJhaW5fc2V0 X3ZhbGlkID0gZmFsc2U7CisJCQlpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5 KGludGVsX2RwKTsKKwkJCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLAorCQkJCQkJ dHJhaW5pbmdfcGF0dGVybiB8CisJCQkJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7CisJ CQljcl90cmllcysrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZHJtX2RwX2NoYW5uZWxf ZXFfb2sobGlua19zdGF0dXMsCisJCQkJCSBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKKwkJCWNo YW5uZWxfZXEgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBUcnkgNSB0aW1lcywgdGhl biB0cnkgY2xvY2sgcmVjb3ZlcnkgaWYgdGhhdCBmYWlscyAqLworCQlpZiAodHJpZXMgPiA1KSB7 CisJCQlpbnRlbF9kcC0+dHJhaW5fc2V0X3ZhbGlkID0gZmFsc2U7CisJCQlpbnRlbF9kcF9saW5r X3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KGludGVsX2RwKTsKKwkJCWludGVsX2RwX3NldF9saW5r X3RyYWluKGludGVsX2RwLAorCQkJCQkJdHJhaW5pbmdfcGF0dGVybiB8CisJCQkJCQlEUF9MSU5L X1NDUkFNQkxJTkdfRElTQUJMRSk7CisJCQl0cmllcyA9IDA7CisJCQljcl90cmllcysrOworCQkJ Y29udGludWU7CisJCX0KKworCQkvKiBVcGRhdGUgdHJhaW5pbmcgc2V0IGFzIHJlcXVlc3RlZCBi eSB0YXJnZXQgKi8KKwkJaW50ZWxfZ2V0X2FkanVzdF90cmFpbihpbnRlbF9kcCwgbGlua19zdGF0 dXMpOworCQlpZiAoIWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKGludGVsX2RwKSkgeworCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGxpbmsgdHJhaW5pbmdcbiIpOworCQkJYnJlYWs7 CisJCX0KKwkJKyt0cmllczsKKwl9CisKKwlpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKGlu dGVsX2RwKTsKKworCWlmIChjaGFubmVsX2VxKSB7CisJCWludGVsX2RwLT50cmFpbl9zZXRfdmFs aWQgPSB0cnVlOworCQlEUk1fREVCVUdfS01TKCJDaGFubmVsIEVRIGRvbmUuIERQIFRyYWluaW5n IHN1Y2Nlc3NmdWxcbiIpOworCX0KK30KKwordm9pZCBpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4o c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlpbnRlbF9kcF9zZXRfbGlua190cmFpbihp bnRlbF9kcCwKKwkJCQlEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOworfQorCit2b2lkCitp bnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJ aW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShpbnRlbF9kcCk7CisJaW50ZWxf ZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihpbnRlbF9kcCk7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDY3OTAxODcuLjI1YWM1ZDIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCkBAIC0xMjM2LDYgKzEyMzYsMjIgQEAgYm9vbCBpbnRlbF9kaWdpdGFsX3Bv cnRfY29ubmVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkJIHN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKnBvcnQpOwogdm9pZCBoc3dfZHBfc2V0X2RkaV9wbGxf c2VsKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7CiAKK3ZvaWQKK2ludGVs X2RwX3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCisJCQkJICAgICAgIHVpbnQ4X3QgZHBfdHJhaW5fcGF0KTsKK3ZvaWQKK2ludGVsX2RwX3Nl dF9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9k cF9zZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwordWludDhf dAoraW50ZWxfZHBfdm9sdGFnZV9tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cit1aW50 OF90CitpbnRlbF9kcF9wcmVfZW1waGFzaXNfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs IHVpbnQ4X3Qgdm9sdGFnZV9zd2luZyk7Cit2b2lkIGludGVsX2RwX2NvbXB1dGVfcmF0ZShzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcG9ydF9jbG9jaywKKwkJCSAgIHVpbnQ4X3QgKmxp bmtfYncsIHVpbnQ4X3QgKnJhdGVfc2VsZWN0KTsKK2Jvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBv cnRzX2hicjIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Citib29sCitpbnRlbF9kcF9nZXRfbGlu a19zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tE UF9MSU5LX1NUQVRVU19TSVpFXSk7CisKIC8qIGludGVsX2RwX21zdC5jICovCiBpbnQgaW50ZWxf ZHBfbXN0X2VuY29kZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdf cG9ydCwgaW50IGNvbm5faWQpOwogdm9pZCBpbnRlbF9kcF9tc3RfZW5jb2Rlcl9jbGVhbnVwKHN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KTsKLS0gCjIuNC4zCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=