From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: [DPU PATCH 11/11] drm/msm: Remove dpu input fences Date: Wed, 28 Feb 2018 14:19:06 -0500 Message-ID: <20180228191906.185417-12-seanpaul@chromium.org> References: <20180228191906.185417-1-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180228191906.185417-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Sean Paul , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org VGhlc2UgYXJlIGFscmVhZHkgcHJvdmlkZWQgYnkgZHJtIGF0b21pYyBjb3JlLgoKSW4gY29uanVu Y3Rpb24gd2l0aCB0aGUgb3V0cHV0IGZlbmNlcyByZW1vdmVkIGVhcmxpZXIsIHRoaXMgb2Jzb2xl dGVzCmRwdV9mZW5jZSwgYW5kIGl0IGNhbiBiZSBlbnRpcmVseSByZW1vdmVkIGFzIHdlbGwuCgpD aGFuZ2UtSWQ6IElkYTQ5MjRhMDljNDU1ZDdhODRiZmVlNTY5YmQwZDJmYjQzNjQxOGRlClNpZ25l ZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgIHwgIDg0IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfZmVuY2UuYyB8IDQwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZmVuY2UuaCB8IDE5MCAtLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyB8IDEwNCAtLS0tLS0K IGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgIHwgICA0ICstCiA2IGZp bGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA3ODYgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ZlbmNlLmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZmVuY2UuaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlCmluZGV4IDJmYjliYTExZGYxOS4uYjQ3ZWY1MjY3ZTE5IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vTWFrZWZpbGUKQEAgLTU1LDcgKzU1LDYgQEAgbXNtLXkgOj0gXAogCWRpc3AvZHB1MS9kcHVf ZW5jb2Rlci5vIFwKIAlkaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQubyBcCiAJZGlzcC9k cHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLm8gXAotCWRpc3AvZHB1MS9kcHVfZmVuY2UubyBcCiAJ ZGlzcC9kcHUxL2RwdV9mb3JtYXRzLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfYWQ0Lm8gXAogCWRp c3AvZHB1MS9kcHVfaHdfYmxrLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmMKaW5kZXggMmQ0NDk4OWFkZTdhLi44ZGQ5ODZlNDc2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwpAQCAtNjQsMTYgKzY0LDYgQEAgc3RhdGljIHN0cnVj dCBkcHVfY3J0Y19jdXN0b21fZXZlbnRzIGN1c3RvbV9ldmVudHNbXSA9IHsKIAl7RFJNX0VWRU5U X0lETEVfTk9USUZZLCBkcHVfY3J0Y19pZGxlX2ludGVycnVwdF9oYW5kbGVyfQogfTsKIAotLyog ZGVmYXVsdCBpbnB1dCBmZW5jZSB0aW1lb3V0LCBpbiBtcyAqLwotI2RlZmluZSBEUFVfQ1JUQ19J TlBVVF9GRU5DRV9USU1FT1VUICAgIDEwMDAwCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnB1dCBm ZW5jZSB0aW1lb3V0IGlzIDIgc2Vjb25kcyB3aGlsZSBtYXggYWxsb3dlZAotICogcmFuZ2UgaXMg MTAgc2Vjb25kcy4gQW55IHZhbHVlIGFib3ZlIDEwIHNlY29uZHMgYWRkcyBnbGl0Y2hlcyBiZXlv bmQKLSAqIHRvbGVyYW5jZSBsaW1pdC4KLSAqLwotI2RlZmluZSBEUFVfQ1JUQ19NQVhfSU5QVVRf RkVOQ0VfVElNRU9VVCAxMDAwMAotCiAvKiBsYXllciBtaXhlciBpbmRleCBvbiBkcHVfY3J0YyAq LwogI2RlZmluZSBMRUZUX01JWEVSIDAKICNkZWZpbmUgUklHSFRfTUlYRVIgMQpAQCAtMTk0Niwy MSArMTkzNiw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXRfaWRsZV90aW1lb3V0KHN0cnVj dCBkcm1fY3J0YyAqY3J0YywgdTY0IHZhbCkKIAl9CiB9CiAKLS8qKgotICogX2RwdV9jcnRjX3Nl dF9pbnB1dF9mZW5jZV90aW1lb3V0IC0gdXBkYXRlIG5zIHZlcnNpb24gb2YgaW4gZmVuY2UgdGlt ZW91dAotICogQGNzdGF0ZTogUG9pbnRlciB0byBkcHUgY3J0YyBzdGF0ZQotICovCi1zdGF0aWMg dm9pZCBfZHB1X2NydGNfc2V0X2lucHV0X2ZlbmNlX3RpbWVvdXQoc3RydWN0IGRwdV9jcnRjX3N0 YXRlICpjc3RhdGUpCi17Ci0JaWYgKCFjc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNz dGF0ZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY3N0YXRlLT5pbnB1dF9mZW5jZV90aW1lb3V0X25z ID0KLQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGNzdGF0ZSwgQ1JUQ19QUk9QX0lOUFVUX0ZFTkNF X1RJTUVPVVQpOwotCWNzdGF0ZS0+aW5wdXRfZmVuY2VfdGltZW91dF9ucyAqPSBOU0VDX1BFUl9N U0VDOwotfQotCiAvKioKICAqIF9kcHVfY3J0Y19zZXRfZGltX2xheWVyX3YxIC0gY29weSBkaW0g bGF5ZXIgc2V0dGluZ3MgZnJvbSB1c2Vyc3BhY2UKICAqIEBjc3RhdGU6ICAgICAgUG9pbnRlciB0 byBkcHUgY3J0YyBzdGF0ZQpAQCAtMjM4NSw1MyArMjM2MCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9j cnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCXJldHVy biByZXQ7CiB9CiAKLS8qKgotICogX2RwdV9jcnRjX3dhaXRfZm9yX2ZlbmNlcyAtIHdhaXQgZm9y IGluY29taW5nIGZyYW1lYnVmZmVyIHN5bmMgZmVuY2VzCi0gKiBAY3J0YzogUG9pbnRlciB0byBD UlRDIG9iamVjdAotICovCi1zdGF0aWMgdm9pZCBfZHB1X2NydGNfd2FpdF9mb3JfZmVuY2VzKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IE5VTEw7 Ci0JdWludDMyX3Qgd2FpdF9tcyA9IDE7Ci0Ja3RpbWVfdCBrdF9lbmQsIGt0X3dhaXQ7Ci0JaW50 IHJjID0gMDsKLQotCURQVV9ERUJVRygiXG4iKTsKLQotCWlmICghY3J0YyB8fCAhY3J0Yy0+c3Rh dGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGMvc3RhdGUgJXBLXG4iLCBjcnRjKTsKLQkJ cmV0dXJuOwotCX0KLQotCS8qIHVzZSBtb25vdG9uaWMgdGltZXIgdG8gbGltaXQgdG90YWwgZmVu Y2Ugd2FpdCB0aW1lICovCi0Ja3RfZW5kID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldCgpLAotCQl0 b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSktPmlucHV0X2ZlbmNlX3RpbWVvdXRfbnMpOwot Ci0JLyoKLQkgKiBXYWl0IGZvciBmZW5jZXMgc2VxdWVudGlhbGx5LCBhcyBhbGwgb2YgdGhlbSBu ZWVkIHRvIGJlIHNpZ25hbGxlZAotCSAqIGJlZm9yZSB3ZSBjYW4gcHJvY2VlZC4KLQkgKgotCSAq IExpbWl0IHRvdGFsIHdhaXQgdGltZSB0byBJTlBVVF9GRU5DRV9USU1FT1VULCBidXQgc3RpbGwg Y2FsbAotCSAqIGRwdV9wbGFuZV93YWl0X2lucHV0X2ZlbmNlIHdpdGggd2FpdF9tcyA9PSAwIGFm dGVyIHRoZSB0aW1lb3V0IHNvCi0JICogdGhhdCBlYWNoIHBsYW5lIGNhbiBjaGVjayBpdHMgZmVu Y2Ugc3RhdHVzIGFuZCByZWFjdCBhcHByb3ByaWF0ZWx5Ci0JICogaWYgaXRzIGZlbmNlIGhhcyB0 aW1lZCBvdXQuIENhbGwgaW5wdXQgZmVuY2Ugd2FpdCBtdWx0aXBsZSB0aW1lcyBpZgotCSAqIGZl bmNlIHdhaXQgaXMgaW50ZXJydXB0ZWQgZHVlIHRvIGludGVycnVwdCBjYWxsLgotCSAqLwotCURQ VV9BVFJBQ0VfQkVHSU4oInBsYW5lX3dhaXRfaW5wdXRfZmVuY2UiKTsKLQlkcm1fYXRvbWljX2Ny dGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKLQkJZG8gewotCQkJa3Rfd2FpdCA9IGt0 aW1lX3N1YihrdF9lbmQsIGt0aW1lX2dldCgpKTsKLQkJCWlmIChrdGltZV9jb21wYXJlKGt0X3dh aXQsIGt0aW1lX3NldCgwLCAwKSkgPj0gMCkKLQkJCQl3YWl0X21zID0ga3RpbWVfdG9fbXMoa3Rf d2FpdCk7Ci0JCQllbHNlCi0JCQkJd2FpdF9tcyA9IDA7Ci0KLQkJCXJjID0gZHB1X3BsYW5lX3dh aXRfaW5wdXRfZmVuY2UocGxhbmUsIHdhaXRfbXMpOwotCQl9IHdoaWxlICh3YWl0X21zICYmIHJj ID09IC1FUkVTVEFSVFNZUyk7Ci0JfQotCURQVV9BVFJBQ0VfRU5EKCJwbGFuZV93YWl0X2lucHV0 X2ZlbmNlIik7Ci19Ci0KIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9taXhlcl9mb3JfZW5j b2RlcigKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu YykKQEAgLTI3MTYsOSArMjY0NCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2F0b21pY19mbHVz aChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5l KHBsYW5lLCBjcnRjKQogCQlkcHVfcGxhbmVfcmVzdG9yZShwbGFuZSk7CiAKLQkvKiB3YWl0IGZv ciBhY3F1aXJlIGZlbmNlcyBiZWZvcmUgYW55dGhpbmcgZWxzZSBpcyBkb25lICovCi0JX2RwdV9j cnRjX3dhaXRfZm9yX2ZlbmNlcyhjcnRjKTsKLQogCWlmICghY3N0YXRlLT5yc2NfdXBkYXRlKSB7 CiAJCWRybV9mb3JfZWFjaF9lbmNvZGVyKGVuY29kZXIsIGRldikgewogCQkJaWYgKGVuY29kZXIt PmNydGMgIT0gY3J0YykKQEAgLTMxNzgsOCArMzEwMyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRj X3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRl LAogCQkJY3N0YXRlLT5wcm9wZXJ0eV92YWx1ZXMpOwogCi0JX2RwdV9jcnRjX3NldF9pbnB1dF9m ZW5jZV90aW1lb3V0KGNzdGF0ZSk7Ci0KIAlfZHB1X2NydGNfcnBfcmVzZXQoJmNzdGF0ZS0+cnAs ICZkcHVfY3J0Yy0+cnBfbG9jaywKIAkJCSZkcHVfY3J0Yy0+cnBfaGVhZCk7CiAKQEAgLTM5Mjks MTAgKzM4NTIsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAogCX0KIAogCS8qIHJhbmdlIHByb3BlcnRpZXMgKi8KLQltc21f cHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCSJpbnB1 dF9mZW5jZV90aW1lb3V0IiwgMHgwLCAwLCBEUFVfQ1JUQ19NQVhfSU5QVVRfRkVOQ0VfVElNRU9V VCwKLQkJRFBVX0NSVENfSU5QVVRfRkVOQ0VfVElNRU9VVCwgQ1JUQ19QUk9QX0lOUFVUX0ZFTkNF X1RJTUVPVVQpOwotCiAJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvLAogCQkJImNvcmVfY2xrIiwgMHgwLCAwLCBVNjRfTUFYLAogCQkJZHB1X2ttcy0+ cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSwKQEAgLTQxMjEsOSArNDA0MCw2IEBAIHN0YXRpYyBpbnQg ZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQlp ZHggPSBtc21fcHJvcGVydHlfaW5kZXgoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAogCQkJCQlw cm9wZXJ0eSk7CiAJCQlzd2l0Y2ggKGlkeCkgewotCQkJY2FzZSBDUlRDX1BST1BfSU5QVVRfRkVO Q0VfVElNRU9VVDoKLQkJCQlfZHB1X2NydGNfc2V0X2lucHV0X2ZlbmNlX3RpbWVvdXQoY3N0YXRl KTsKLQkJCQlicmVhazsKIAkJCWNhc2UgQ1JUQ19QUk9QX0RJTV9MQVlFUl9WMToKIAkJCQlfZHB1 X2NydGNfc2V0X2RpbV9sYXllcl92MShjc3RhdGUsCiAJCQkJCQkJKHZvaWQgX191c2VyICopdmFs KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9mZW5jZS5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ZlbmNlLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZmZkNzEzOGViYS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9mZW5jZS5jCisrKyAvZGV2L251bGwKQEAgLTEs NDA0ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxs aW51eC9zeW5jX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KLSNpbmNsdWRl ICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotI2luY2x1ZGUgImRwdV9mZW5jZS5o IgotCi0jZGVmaW5lIFRJTUVMSU5FX1ZBTF9MRU5HVEgJCTEyOAotCi12b2lkICpkcHVfc3luY19n ZXQodWludDY0X3QgZmQpCi17Ci0JLyogZm9yY2Ugc2lnbmVkIGNvbXBhcmUsIGZkZ2V0IGFjY2Vw dHMgYW4gaW50IGFyZ3VtZW50ICovCi0JcmV0dXJuIChzaWduZWQgaW50KWZkID49IDAgPyBzeW5j X2ZpbGVfZ2V0X2ZlbmNlKGZkKSA6IE5VTEw7Ci19Ci0KLXZvaWQgZHB1X3N5bmNfcHV0KHZvaWQg KmZlbmNlKQotewotCWlmIChmZW5jZSkKLQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Ci19Ci0KLXNp Z25lZCBsb25nIGRwdV9zeW5jX3dhaXQodm9pZCAqZm5jLCBsb25nIHRpbWVvdXRfbXMpCi17Ci0J c3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBmbmM7Ci0JaW50IHJjOwotCWNoYXIgdGltZWxpbmVf c3RyW1RJTUVMSU5FX1ZBTF9MRU5HVEhdOwotCi0JaWYgKCFmZW5jZSkKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JZWxzZSBpZiAoZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKLQkJcmV0dXJuIHRp bWVvdXRfbXMgPyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpIDogMTsKLQotCXJjID0gZG1h X2ZlbmNlX3dhaXRfdGltZW91dChmZW5jZSwgdHJ1ZSwKLQkJCQltc2Vjc190b19qaWZmaWVzKHRp bWVvdXRfbXMpKTsKLQlpZiAoIXJjIHx8IChyYyA9PSAtRUlOVkFMKSkgewotCQlpZiAoZmVuY2Ut Pm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKQotCQkJZmVuY2UtPm9wcy0+dGltZWxpbmVfdmFsdWVf c3RyKGZlbmNlLAotCQkJCQl0aW1lbGluZV9zdHIsIFRJTUVMSU5FX1ZBTF9MRU5HVEgpOwotCi0J CURQVV9FUlJPUigKLQkJCSJmZW5jZSBkcml2ZXIgbmFtZTolcyB0aW1lbGluZSBuYW1lOiVzIHNl cW5vOjB4JXggdGltZWxpbmU6JXMgc2lnbmFsZWQ6MHgleFxuIiwKLQkJCWZlbmNlLT5vcHMtPmdl dF9kcml2ZXJfbmFtZShmZW5jZSksCi0JCQlmZW5jZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShm ZW5jZSksCi0JCQlmZW5jZS0+c2Vxbm8sIHRpbWVsaW5lX3N0ciwKLQkJCWZlbmNlLT5vcHMtPnNp Z25hbGVkID8KLQkJCQlmZW5jZS0+b3BzLT5zaWduYWxlZChmZW5jZSkgOiAweGZmZmZmZmZmKTsK LQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXVpbnQzMl90IGRwdV9zeW5jX2dldF9uYW1lX3ByZWZp eCh2b2lkICpmZW5jZSkKLXsKLQljb25zdCBjaGFyICpuYW1lOwotCXVpbnQzMl90IGksIHByZWZp eDsKLQlzdHJ1Y3QgZG1hX2ZlbmNlICpmID0gZmVuY2U7Ci0KLQlpZiAoIWZlbmNlKQotCQlyZXR1 cm4gMDsKLQotCW5hbWUgPSBmLT5vcHMtPmdldF9kcml2ZXJfbmFtZShmKTsKLQlpZiAoIW5hbWUp Ci0JCXJldHVybiAwOwotCi0JcHJlZml4ID0gMHgwOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yo dWludDMyX3QpICYmIG5hbWVbaV07ICsraSkKLQkJcHJlZml4ID0gKHByZWZpeCA8PCBDSEFSX0JJ VCkgfCBuYW1lW2ldOwotCi0JcmV0dXJuIHByZWZpeDsKLX0KLQotLyoqCi0gKiBzdHJ1Y3QgZHB1 X2ZlbmNlIC0gcmVsZWFzZS9yZXRpcmUgZmVuY2Ugc3RydWN0dXJlCi0gKiBAZmVuY2U6IGJhc2Ug ZmVuY2Ugc3RydWN0dXJlCi0gKiBAbmFtZTogbmFtZSBvZiBlYWNoIGZlbmNlLSBpdCBpcyBmZW5j ZSB0aW1lbGluZSArIGNvbW1pdF9jb3VudAotICogQGZlbmNlX2xpc3Q6IGxpc3QgdG8gYXNzb2Np YXRlZCB0aGlzIGZlbmNlIG9uIHRpbWVsaW5lL2NvbnRleHQKLSAqIEBmZDogZmQgYXR0YWNoZWQg dG8gdGhpcyBmZW5jZSAtIGRlYnVnZ2luZyBwdXJwb3NlLgotICovCi1zdHJ1Y3QgZHB1X2ZlbmNl IHsKLQlzdHJ1Y3QgZG1hX2ZlbmNlIGJhc2U7Ci0Jc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpj dHg7Ci0JY2hhciBuYW1lW0RQVV9GRU5DRV9OQU1FX1NJWkVdOwotCXN0cnVjdCBsaXN0X2hlYWQJ ZmVuY2VfbGlzdDsKLQlpbnQgZmQ7Ci19OwotCi1zdGF0aWMgdm9pZCBkcHVfZmVuY2VfZGVzdHJv eShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHB1X2Zl bmNlICp0b19kcHVfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCi17Ci0JcmV0dXJuIGNv bnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IGRwdV9mZW5jZSwgYmFzZSk7Ci19Ci0KLXN0YXRpYyBj b25zdCBjaGFyICpkcHVfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlKQotewotCXN0cnVjdCBkcHVfZmVuY2UgKmYgPSB0b19kcHVfZmVuY2UoZmVuY2UpOwotCi0J cmV0dXJuIGYtPm5hbWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkcHVfZmVuY2VfZ2V0X3Rp bWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCi17Ci0Jc3RydWN0IGRwdV9mZW5j ZSAqZiA9IHRvX2RwdV9mZW5jZShmZW5jZSk7Ci0KLQlyZXR1cm4gZi0+Y3R4LT5uYW1lOwotfQot Ci1zdGF0aWMgYm9vbCBkcHVfZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSkKLXsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZHB1X2ZlbmNlX3Np Z25hbGVkKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBkcHVfZmVuY2UgKmYg PSB0b19kcHVfZmVuY2UoZmVuY2UpOwotCWJvb2wgc3RhdHVzOwotCi0Jc3RhdHVzID0gKGludCko ZmVuY2UtPnNlcW5vIC0gZi0+Y3R4LT5kb25lX2NvdW50KSA8PSAwID8gdHJ1ZSA6IGZhbHNlOwot CURQVV9ERUJVRygic3RhdHVzOiVkIGZlbmNlIHNlcTolZCBhbmQgdGltZWxpbmU6JWRcbiIsCi0J CQlzdGF0dXMsIGZlbmNlLT5zZXFubywgZi0+Y3R4LT5kb25lX2NvdW50KTsKLQlyZXR1cm4gc3Rh dHVzOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSkKLXsKLQlzdHJ1Y3QgZHB1X2ZlbmNlICpmOwotCi0JaWYgKGZlbmNlKSB7Ci0JCWYg PSB0b19kcHVfZmVuY2UoZmVuY2UpOwotCQlrZnJlZShmKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IGRwdV9mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsIGNoYXIgKnN0ciwg aW50IHNpemUpCi17Ci0JaWYgKCFmZW5jZSB8fCAhc3RyKQotCQlyZXR1cm47Ci0KLQlzbnByaW50 ZihzdHIsIHNpemUsICIlZCIsIGZlbmNlLT5zZXFubyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9m ZW5jZV90aW1lbGluZV92YWx1ZV9zdHIoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsIGNoYXIgKnN0 ciwKLQkJaW50IHNpemUpCi17Ci0Jc3RydWN0IGRwdV9mZW5jZSAqZiA9IHRvX2RwdV9mZW5jZShm ZW5jZSk7Ci0KLQlpZiAoIWZlbmNlIHx8ICFmLT5jdHggfHwgIXN0cikKLQkJcmV0dXJuOwotCi0J c25wcmludGYoc3RyLCBzaXplLCAiJWQiLCBmLT5jdHgtPmRvbmVfY291bnQpOwotfQotCi1zdGF0 aWMgc3RydWN0IGRtYV9mZW5jZV9vcHMgZHB1X2ZlbmNlX29wcyA9IHsKLQkuZ2V0X2RyaXZlcl9u YW1lID0gZHB1X2ZlbmNlX2dldF9kcml2ZXJfbmFtZSwKLQkuZ2V0X3RpbWVsaW5lX25hbWUgPSBk cHVfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCi0JLmVuYWJsZV9zaWduYWxpbmcgPSBkcHVfZmVu Y2VfZW5hYmxlX3NpZ25hbGluZywKLQkuc2lnbmFsZWQgPSBkcHVfZmVuY2Vfc2lnbmFsZWQsCi0J LndhaXQgPSBkbWFfZmVuY2VfZGVmYXVsdF93YWl0LAotCS5yZWxlYXNlID0gZHB1X2ZlbmNlX3Jl bGVhc2UsCi0JLmZlbmNlX3ZhbHVlX3N0ciA9IGRwdV9mZW5jZV92YWx1ZV9zdHIsCi0JLnRpbWVs aW5lX3ZhbHVlX3N0ciA9IGRwdV9mZW5jZV90aW1lbGluZV92YWx1ZV9zdHIsCi19OwotCi0vKioK LSAqIF9kcHVfZmVuY2VfY3JlYXRlX2ZkIC0gY3JlYXRlIGZlbmNlIG9iamVjdCBhbmQgcmV0dXJu IGFuIGZkIGZvciBpdAotICogVGhpcyBmdW5jdGlvbiBpcyBOT1QgdGhyZWFkLXNhZmUuCi0gKiBA dGltZWxpbmU6IFRpbWVsaW5lIHRvIGFzc29jaWF0ZSB3aXRoIGZlbmNlCi0gKiBAdmFsOiBUaW1l bGluZSB2YWx1ZSBhdCB3aGljaCB0byBzaWduYWwgdGhlIGZlbmNlCi0gKiBSZXR1cm46IEZpbGUg ZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG9uIGVycm9yCi0gKi8KLXN0YXRp YyBpbnQgX2RwdV9mZW5jZV9jcmVhdGVfZmQodm9pZCAqZmVuY2VfY3R4LCB1aW50MzJfdCB2YWwp Ci17Ci0Jc3RydWN0IGRwdV9mZW5jZSAqZHB1X2ZlbmNlOwotCXN0cnVjdCBzeW5jX2ZpbGUgKnN5 bmNfZmlsZTsKLQlzaWduZWQgaW50IGZkID0gLUVJTlZBTDsKLQlzdHJ1Y3QgZHB1X2ZlbmNlX2Nv bnRleHQgKmN0eCA9IGZlbmNlX2N0eDsKLQotCWlmICghY3R4KSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBjb250ZXh0XG4iKTsKLQkJZ290byBleGl0OwotCX0KLQotCWRwdV9mZW5jZSA9IGt6YWxs b2Moc2l6ZW9mKCpkcHVfZmVuY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRwdV9mZW5jZSkKLQkJ cmV0dXJuIC1FTk9NRU07Ci0KLQlkcHVfZmVuY2UtPmN0eCA9IGZlbmNlX2N0eDsKLQlzbnByaW50 ZihkcHVfZmVuY2UtPm5hbWUsIERQVV9GRU5DRV9OQU1FX1NJWkUsICJkcHVfZmVuY2U6JXM6JXUi LAotCQkJCQkJZHB1X2ZlbmNlLT5jdHgtPm5hbWUsIHZhbCk7Ci0JZG1hX2ZlbmNlX2luaXQoJmRw dV9mZW5jZS0+YmFzZSwgJmRwdV9mZW5jZV9vcHMsICZjdHgtPmxvY2ssCi0JCWN0eC0+Y29udGV4 dCwgdmFsKTsKLQotCS8qIGNyZWF0ZSBmZCAqLwotCWZkID0gZ2V0X3VudXNlZF9mZF9mbGFncygw KTsKLQlpZiAoZmQgPCAwKSB7Ci0JCWRtYV9mZW5jZV9wdXQoJmRwdV9mZW5jZS0+YmFzZSk7Ci0J CURQVV9FUlJPUigiZmFpbGVkIHRvIGdldF91bnVzZWRfZmRfZmxhZ3MoKSwgJXNcbiIsCi0JCQkJ CQkJZHB1X2ZlbmNlLT5uYW1lKTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIGNyZWF0ZSBmZW5j ZSAqLwotCXN5bmNfZmlsZSA9IHN5bmNfZmlsZV9jcmVhdGUoJmRwdV9mZW5jZS0+YmFzZSk7Ci0J aWYgKHN5bmNfZmlsZSA9PSBOVUxMKSB7Ci0JCXB1dF91bnVzZWRfZmQoZmQpOwotCQlmZCA9IC1F SU5WQUw7Ci0JCWRtYV9mZW5jZV9wdXQoJmRwdV9mZW5jZS0+YmFzZSk7Ci0JCURQVV9FUlJPUigi Y291bGRuJ3QgY3JlYXRlIGZlbmNlLCAlc1xuIiwgZHB1X2ZlbmNlLT5uYW1lKTsKLQkJZ290byBl eGl0OwotCX0KLQotCWZkX2luc3RhbGwoZmQsIHN5bmNfZmlsZS0+ZmlsZSk7Ci0JZHB1X2ZlbmNl LT5mZCA9IGZkOwotCWtyZWZfZ2V0KCZjdHgtPmtyZWYpOwotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxp c3RfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmZHB1X2ZlbmNlLT5mZW5jZV9saXN0LCAmY3R4LT5m ZW5jZV9saXN0X2hlYWQpOwotCXNwaW5fdW5sb2NrKCZjdHgtPmxpc3RfbG9jayk7Ci0KLWV4aXQ6 Ci0JcmV0dXJuIGZkOwotfQotCi1pbnQgZHB1X2ZlbmNlX2luaXQoc3RydWN0IGRwdV9mZW5jZV9j b250ZXh0ICpjdHgsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90IGRybV9pZCkKLXsKLQlp ZiAoIWN0eCB8fCAhbmFtZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsK LQotCXN0cmxjcHkoY3R4LT5uYW1lLCBuYW1lLCBBUlJBWV9TSVpFKGN0eC0+bmFtZSkpOwotCWN0 eC0+ZHJtX2lkID0gZHJtX2lkOwotCWtyZWZfaW5pdCgmY3R4LT5rcmVmKTsKLQljdHgtPmNvbnRl eHQgPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTsKLQotCXNwaW5fbG9ja19pbml0KCZjdHgt PmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZjdHgtPmxpc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hF QUQoJmN0eC0+ZmVuY2VfbGlzdF9oZWFkKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGRwdV9m ZW5jZV9kZWluaXQoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpjdHgpCi17Ci0JaWYgKCFjdHgp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGZlbmNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWty ZWZfcHV0KCZjdHgtPmtyZWYsIGRwdV9mZW5jZV9kZXN0cm95KTsKLX0KLQotdm9pZCBkcHVfZmVu Y2VfcHJlcGFyZShzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCkKLXsKLQl1bnNpZ25lZCBs b25nIGZsYWdzOwotCi0JaWYgKCFjdHgpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50 KHMpLCBmZW5jZSAlcEtcbiIsIGN0eCk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUo JmN0eC0+bG9jaywgZmxhZ3MpOwotCQkrK2N0eC0+Y29tbWl0X2NvdW50OwotCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9k cHVfZmVuY2VfdHJpZ2dlcihzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCwga3RpbWVfdCB0 cykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkcHVfZmVuY2UgKmZjLCAqbmV4 dDsKLQlib29sIGlzX3NpZ25hbGVkID0gZmFsc2U7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsb2NhbF9s aXN0X2hlYWQ7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbG9jYWxfbGlzdF9oZWFkKTsKLQotCXNwaW5f bG9jaygmY3R4LT5saXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZjdHgtPmZlbmNlX2xpc3Rf aGVhZCkpIHsKLQkJRFBVX0RFQlVHKCJub3RoaW5nIHRvIHRyaWdnZXIhXG4iKTsKLQkJc3Bpbl91 bmxvY2soJmN0eC0+bGlzdF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShmYywgbmV4dCwgJmN0eC0+ZmVuY2VfbGlzdF9oZWFkLCBmZW5jZV9saXN0KQot CQlsaXN0X21vdmUoJmZjLT5mZW5jZV9saXN0LCAmbG9jYWxfbGlzdF9oZWFkKTsKLQlzcGluX3Vu bG9jaygmY3R4LT5saXN0X2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjLCBu ZXh0LCAmbG9jYWxfbGlzdF9oZWFkLCBmZW5jZV9saXN0KSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZl KCZjdHgtPmxvY2ssIGZsYWdzKTsKLQkJZmMtPmJhc2UudGltZXN0YW1wID0gdHM7Ci0JCWlzX3Np Z25hbGVkID0gZG1hX2ZlbmNlX2lzX3NpZ25hbGVkX2xvY2tlZCgmZmMtPmJhc2UpOwotCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQotCQlpZiAoaXNfc2lnbmFs ZWQpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmZjLT5mZW5jZV9saXN0KTsKLQkJCWRtYV9mZW5jZV9w dXQoJmZjLT5iYXNlKTsKLQkJCWtyZWZfcHV0KCZjdHgtPmtyZWYsIGRwdV9mZW5jZV9kZXN0cm95 KTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9jaygmY3R4LT5saXN0X2xvY2spOwotCQkJbGlzdF9t b3ZlKCZmYy0+ZmVuY2VfbGlzdCwgJmN0eC0+ZmVuY2VfbGlzdF9oZWFkKTsKLQkJCXNwaW5fdW5s b2NrKCZjdHgtPmxpc3RfbG9jayk7Ci0JCX0KLQl9Ci19Ci0KLWludCBkcHVfZmVuY2VfY3JlYXRl KHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqY3R4LCB1aW50NjRfdCAqdmFsLAotCQkJCQkJCXVp bnQzMl90IG9mZnNldCkKLXsKLQl1aW50MzJfdCB0cmlnZ2VyX3ZhbHVlOwotCWludCBmZCwgcmMg PSAtRUlOVkFMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWN0eCB8fCAhdmFsKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgZmVuY2UgJWQsIHB2YWwgJWRcbiIs Ci0JCQkJY3R4ICE9IE5VTEwsIHZhbCAhPSBOVUxMKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8q Ci0JICogQWxsb3cgY3JlYXRlZCBmZW5jZXMgdG8gaGF2ZSBhIGNvbnN0YW50IG9mZnNldCB3aXRo IHJlc3BlY3QKLQkgKiB0byB0aGUgdGltZWxpbmUuIFRoaXMgYWxsb3dzIHVzIHRvIGRlbGF5IHRo ZSBmZW5jZSBzaWduYWxsaW5nCi0JICogdy5yLnQuIHRoZSBjb21taXQgY29tcGxldGlvbiAoZS5n LiwgYW4gb2Zmc2V0IG9mICsxIHdvdWxkCi0JICogY2F1c2UgZmVuY2VzIHJldHVybmVkIGR1cmlu ZyBhIHBhcnRpY3VsYXIgY29tbWl0IHRvIHNpZ25hbAotCSAqIGFmdGVyIGFuIGFkZGl0aW9uYWwg ZGVsYXkgb2Ygb25lIGNvbW1pdCwgcmF0aGVyIHRoYW4gYXQgdGhlCi0JICogZW5kIG9mIHRoZSBj dXJyZW50IG9uZS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7 Ci0JdHJpZ2dlcl92YWx1ZSA9IGN0eC0+Y29tbWl0X2NvdW50ICsgb2Zmc2V0OwotCi0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0KLQlmZCA9IF9kcHVfZmVuY2Vf Y3JlYXRlX2ZkKGN0eCwgdHJpZ2dlcl92YWx1ZSk7Ci0JKnZhbCA9IGZkOwotCURQVV9ERUJVRygi ZmVuY2VfY3JlYXRlOjpmZDolZCB0cmlnZ2VyOiVkIGNvbW1pdDolZCBvZmZzZXQ6JWRcbiIsCi0J CQkJZmQsIHRyaWdnZXJfdmFsdWUsIGN0eC0+Y29tbWl0X2NvdW50LCBvZmZzZXQpOwotCi0JRFBV X0VWVDMyKGN0eC0+ZHJtX2lkLCB0cmlnZ2VyX3ZhbHVlLCBmZCk7Ci0KLQlpZiAoZmQgPj0gMCkg ewotCQlyYyA9IDA7Ci0JCV9kcHVfZmVuY2VfdHJpZ2dlcihjdHgsIGt0aW1lX2dldCgpKTsKLQl9 IGVsc2UgewotCQlyYyA9IGZkOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBkcHVfZmVu Y2Vfc2lnbmFsKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqY3R4LCBrdGltZV90IHRzLAotCQkJ CQkJCWJvb2wgcmVzZXRfdGltZWxpbmUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlm ICghY3R4KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjdHgsICVwS1xuIiwgY3R4KTsKLQkJcmV0 dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQlpZiAo cmVzZXRfdGltZWxpbmUpIHsKLQkJaWYgKChpbnQpKGN0eC0+ZG9uZV9jb3VudCAtIGN0eC0+Y29t bWl0X2NvdW50KSA8IDApIHsKLQkJCURQVV9FUlJPUigKLQkJCQkidGltZWxpbmUgcmVzZXQgYXR0 ZW1wdCEgZG9uZSBjb3VudDolZCBjb21taXQ6JWRcbiIsCi0JCQkJY3R4LT5kb25lX2NvdW50LCBj dHgtPmNvbW1pdF9jb3VudCk7Ci0JCQljdHgtPmRvbmVfY291bnQgPSBjdHgtPmNvbW1pdF9jb3Vu dDsKLQkJCURQVV9FVlQzMihjdHgtPmRybV9pZCwgY3R4LT5kb25lX2NvdW50LAotCQkJCWN0eC0+ Y29tbWl0X2NvdW50LCBrdGltZV90b191cyh0cyksCi0JCQkJcmVzZXRfdGltZWxpbmUsIERQVV9F VlRMT0dfRkFUQUwpOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4 LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UgaWYgKChpbnQpKGN0eC0+ ZG9uZV9jb3VudCAtIGN0eC0+Y29tbWl0X2NvdW50KSA8IDApIHsKLQkJKytjdHgtPmRvbmVfY291 bnQ7Ci0JCURQVV9ERUJVRygiZmVuY2Vfc2lnbmFsOmRvbmUgY291bnQ6JWQgY29tbWl0IGNvdW50 OiVkXG4iLAotCQkJCQljdHgtPmRvbmVfY291bnQsIGN0eC0+Y29tbWl0X2NvdW50KTsKLQl9IGVs c2UgewotCQlEUFVfRVJST1IoImV4dHJhIHNpZ25hbCBhdHRlbXB0ISBkb25lIGNvdW50OiVkIGNv bW1pdDolZFxuIiwKLQkJCQkJY3R4LT5kb25lX2NvdW50LCBjdHgtPmNvbW1pdF9jb3VudCk7Ci0J CURQVV9FVlQzMihjdHgtPmRybV9pZCwgY3R4LT5kb25lX2NvdW50LCBjdHgtPmNvbW1pdF9jb3Vu dCwKLQkJCWt0aW1lX3RvX3VzKHRzKSwgcmVzZXRfdGltZWxpbmUsIERQVV9FVlRMT0dfRkFUQUwp OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJu OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQotCURQ VV9FVlQzMihjdHgtPmRybV9pZCwgY3R4LT5kb25lX2NvdW50LCBjdHgtPmNvbW1pdF9jb3VudCwK LQkJCWt0aW1lX3RvX3VzKHRzKSk7Ci0KLQlfZHB1X2ZlbmNlX3RyaWdnZXIoY3R4LCB0cyk7Ci19 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZmVuY2UuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9mZW5jZS5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBmOTQzMDQ2ZDk2YjguLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZmVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5 MCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EUFVf RkVOQ0VfSF8KLSNkZWZpbmUgX0RQVV9GRU5DRV9IXwotCi0jaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgot Ci0jaWZuZGVmIENIQVJfQklUCi0jZGVmaW5lIENIQVJfQklUIDggLyogZGVmaW5lIHRoaXMgaWYg bGltaXRzLmggbm90IGF2YWlsYWJsZSAqLwotI2VuZGlmCi0KLSNkZWZpbmUgRFBVX0ZFTkNFX05B TUVfU0laRQkyNAotCi0vKioKLSAqIHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAtIHJlbGVhc2Uv cmV0aXJlIGZlbmNlIGNvbnRleHQvdGltZWxpbmUgc3RydWN0dXJlCi0gKiBAY29tbWl0X2NvdW50 OiBOdW1iZXIgb2YgZGV0ZWN0ZWQgY29tbWl0cyBzaW5jZSBib290dXAKLSAqIEBkb25lX2NvdW50 OiBOdW1iZXIgb2YgY29tcGxldGVkIGNvbW1pdHMgc2luY2UgYm9vdHVwCi0gKiBAZHJtX2lkOiBJ RCBudW1iZXIgb2Ygb3duaW5nIERSTSBPYmplY3QKLSAqIEByZWY6IGtyZWYgY291bnRlciBvbiB0 aW1lbGluZQotICogQGxvY2s6IHNwaW5sb2NrIGZvciBmZW5jZSBjb3VudGVyIHByb3RlY3Rpb24K LSAqIEBsaXN0X2xvY2s6IHNwaW5sb2NrIGZvciB0aW1lbGluZSBwcm90ZWN0aW9uCi0gKiBAY29u dGV4dDogZmVuY2UgY29udGV4dAotICogQGxpc3RfaGVhZDogZmVuY2UgbGlzdCB0byBob2xkIGFs bCB0aGUgZmVuY2UgY3JlYXRlZCBvbiB0aGlzIGNvbnRleHQKLSAqIEBuYW1lOiBuYW1lIG9mIGZl bmNlIGNvbnRleHQvdGltZWxpbmUKLSAqLwotc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0IHsKLQl1 bnNpZ25lZCBpbnQgY29tbWl0X2NvdW50OwotCXVuc2lnbmVkIGludCBkb25lX2NvdW50OwotCXVp bnQzMl90IGRybV9pZDsKLQlzdHJ1Y3Qga3JlZiBrcmVmOwotCXNwaW5sb2NrX3QgbG9jazsKLQlz cGlubG9ja190IGxpc3RfbG9jazsKLQl1NjQgY29udGV4dDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZl bmNlX2xpc3RfaGVhZDsKLQljaGFyIG5hbWVbRFBVX0ZFTkNFX05BTUVfU0laRV07Ci19OwotCi0j aWYgSVNfRU5BQkxFRChDT05GSUdfU1lOQ19GSUxFKQotLyoqCi0gKiBkcHVfc3luY19nZXQgLSBR dWVyeSBzeW5jIGZlbmNlIG9iamVjdCBmcm9tIGEgZmlsZSBoYW5kbGUKLSAqCi0gKiBPbiBzdWNj ZXNzLCB0aGlzIGZ1bmN0aW9uIGFsc28gaW5jcmVtZW50cyB0aGUgcmVmY291bnQgb2YgdGhlIHN5 bmMgZmVuY2UKLSAqCi0gKiBAZmQ6IEludGVnZXIgc3luYyBmZW5jZSBoYW5kbGUKLSAqCi0gKiBS ZXR1cm46IFBvaW50ZXIgdG8gc3luYyBmZW5jZSBvYmplY3QsIG9yIE5VTEwKLSAqLwotdm9pZCAq ZHB1X3N5bmNfZ2V0KHVpbnQ2NF90IGZkKTsKLQotLyoqCi0gKiBkcHVfc3luY19wdXQgLSBSZWxl YXNlcyBhIHN5bmMgZmVuY2Ugb2JqZWN0IGFjcXVpcmVkIGJ5IEBkcHVfc3luY19nZXQKLSAqCi0g KiBUaGlzIGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIHN5bmMgZmVuY2UncyByZWZlcmVuY2UgY291 bnQ7IHRoZSBvYmplY3Qgd2lsbAotICogYmUgcmVsZWFzZWQgaWYgdGhlIHJlZmVyZW5jZSBjb3Vu dCBnb2VzIHRvIHplcm8uCi0gKgotICogQGZlbmNlOiBQb2ludGVyIHRvIHN5bmMgZmVuY2UKLSAq Lwotdm9pZCBkcHVfc3luY19wdXQodm9pZCAqZmVuY2UpOwotCi0vKioKLSAqIGRwdV9zeW5jX3dh aXQgLSBRdWVyeSBzeW5jIGZlbmNlIG9iamVjdCBmcm9tIGEgZmlsZSBoYW5kbGUKLSAqCi0gKiBA ZmVuY2U6IFBvaW50ZXIgdG8gc3luYyBmZW5jZQotICogQHRpbWVvdXRfbXM6IFRpbWUgdG8gd2Fp dCwgaW4gbWlsbGlzZWNvbmRzLiBXYWl0cyBmb3JldmVyIGlmIHRpbWVvdXRfbXMgPCAwCi0gKgot ICogUmV0dXJuOgotICogWmVybyBpZiB0aW1lZCBvdXQKLSAqIC1FUkVTVEFSVFNZUyBpZiB3YWl0 IGludGVycnVwdGVkCi0gKiByZW1haW5pbmcgamlmZmllcyBpbiBhbGwgb3RoZXIgc3VjY2VzcyBj YXNlcy4KLSAqLwotc2lnbmVkIGxvbmcgZHB1X3N5bmNfd2FpdCh2b2lkICpmZW5jZSwgbG9uZyB0 aW1lb3V0X21zKTsKLQotLyoqCi0gKiBkcHVfc3luY19nZXRfbmFtZV9wcmVmaXggLSBnZXQgaW50 ZWdlciByZXByZXNlbnRhdGlvbiBvZiBmZW5jZSBuYW1lIHByZWZpeAotICogQGZlbmNlOiBQb2lu dGVyIHRvIG9wYXF1ZSBmZW5jZSBzdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1cm46IDMyLWJpdCBpbnRl Z2VyIGNvbnRhaW5pbmcgZmlyc3QgNCBjaGFyYWN0ZXJzIG9mIGZlbmNlIG5hbWUsCi0gKiAgICAg ICAgIGJpZy1lbmRpYW4gbm90YXRpb24KLSAqLwotdWludDMyX3QgZHB1X3N5bmNfZ2V0X25hbWVf cHJlZml4KHZvaWQgKmZlbmNlKTsKLQotLyoqCi0gKiBkcHVfZmVuY2VfaW5pdCAtIGluaXRpYWxp emUgZmVuY2Ugb2JqZWN0Ci0gKiBAZmVuY2U6IFBvaW50ZXIgdG8gY3J0YyBmZW5jZSBvYmplY3QK LSAqIEBkcm1faWQ6IElEIG51bWJlciBvZiBvd25pbmcgRFJNIE9iamVjdAotICogQG5hbWU6IFRp bWVsaW5lIG5hbWUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Zl bmNlX2luaXQoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpmZW5jZSwKLQkJY29uc3QgY2hhciAq bmFtZSwKLQkJdWludDMyX3QgZHJtX2lkKTsKLQotLyoqCi0gKiBkcHVfZmVuY2VfZGVpbml0IC0g ZGVpbml0IGZlbmNlIGNvbnRhaW5lcgotICogQGZlbmNlOiBQb2ludGVyIGZlbmNlIGNvbnRhaW5l cgotICovCi12b2lkIGRwdV9mZW5jZV9kZWluaXQoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpm ZW5jZSk7Ci0KLS8qKgotICogZHB1X2ZlbmNlX3ByZXBhcmUgLSBwcmVwYXJlIHRvIHJldHVybiBm ZW5jZXMgZm9yIGN1cnJlbnQgY29tbWl0Ci0gKiBAZmVuY2U6IFBvaW50ZXIgZmVuY2UgY29udGFp bmVyCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotdm9pZCBkcHVfZmVuY2VfcHJl cGFyZShzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmZlbmNlKTsKLS8qKgotICogZHB1X2ZlbmNl X2NyZWF0ZSAtIGNyZWF0ZSBvdXRwdXQgZmVuY2Ugb2JqZWN0Ci0gKiBAZmVuY2U6IFBvaW50ZXIg ZmVuY2UgY29udGFpbmVyCi0gKiBAdmFsOiBQb2ludGVyIHRvIG91dHB1dCB2YWx1ZSB2YXJpYWJs ZSwgZmVuY2UgZmQgd2lsbCBiZSBwbGFjZWQgaGVyZQotICogQG9mZnNldDogRmVuY2Ugc2lnbmFs IGNvbW1pdCBvZmZzZXQsIGUuZy4sICsxIHRvIHNpZ25hbCBvbiBuZXh0IGNvbW1pdAotICogUmV0 dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfZmVuY2VfY3JlYXRlKHN0cnVjdCBk cHVfZmVuY2VfY29udGV4dCAqZmVuY2UsIHVpbnQ2NF90ICp2YWwsCi0JCQkJCQkJdWludDMyX3Qg b2Zmc2V0KTsKLQotLyoqCi0gKiBkcHVfZmVuY2Vfc2lnbmFsIC0gYWR2YW5jZSBmZW5jZSB0aW1l bGluZSB0byBzaWduYWwgb3V0c3RhbmRpbmcgZmVuY2VzCi0gKiBAZmVuY2U6IFBvaW50ZXIgZmVu Y2UgY29udGFpbmVyCi0gKiBAdHM6IGZlbmNlIHRpbWVzdGFtcAotICogQHJlc2V0X3RpbWVsaW5l OiByZXNldCB0aGUgZmVuY2UgdGltZWxpbmUgdG8gZG9uZSBjb3VudCBlcXVhbCB0byBjb21taXQg Y291bnQKLSAqLwotdm9pZCBkcHVfZmVuY2Vfc2lnbmFsKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4 dCAqZmVuY2UsIGt0aW1lX3QgdHMsCi0JCWJvb2wgcmVzZXRfdGltZWxpbmUpOwotI2Vsc2UKLXN0 YXRpYyBpbmxpbmUgdm9pZCAqZHB1X3N5bmNfZ2V0KHVpbnQ2NF90IGZkKQotewotCXJldHVybiBO VUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHB1X3N5bmNfcHV0KHZvaWQgKmZlbmNlKQot ewotfQotCi1zdGF0aWMgaW5saW5lIHNpZ25lZCBsb25nIGRwdV9zeW5jX3dhaXQodm9pZCAqZmVu Y2UsIGxvbmcgdGltZW91dF9tcykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB1 aW50MzJfdCBkcHVfc3luY19nZXRfbmFtZV9wcmVmaXgodm9pZCAqZmVuY2UpCi17Ci0JcmV0dXJu IDB4MDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGRwdV9mZW5jZV9pbml0KHN0cnVjdCBkcHVfZmVu Y2VfY29udGV4dCAqZmVuY2UsCi0JCWNvbnN0IGNoYXIgKm5hbWUsCi0JCXVpbnQzMl90IGRybV9p ZCkKLXsKLQkvKiBkbyBub3RoaW5nICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dm9pZCBkcHVfZmVuY2VfZGVpbml0KHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UpCi17 Ci0JLyogZG8gbm90aGluZyAqLwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcHVfZmVuY2VfZ2V0 KHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UsIHVpbnQ2NF90ICp2YWwpCi17Ci0JcmV0 dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcHVfZmVuY2Vfc2lnbmFsKHN0 cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UsCi0JCQkJCQlrdGltZV90IHRzLCBib29sIHJl c2V0X3RpbWVsaW5lKQotewotCS8qIGRvIG5vdGhpbmcgKi8KLX0KLQotc3RhdGljIGlubGluZSB2 b2lkIGRwdV9mZW5jZV9wcmVwYXJlKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UpCi17 Ci0JLyogZG8gbm90aGluZyAqLwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcHVfZmVuY2VfY3Jl YXRlKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UsCi0JCQkJCQl1aW50NjRfdCAqdmFs LCB1aW50MzJfdCBvZmZzZXQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogSVNfRU5BQkxF RChDT05GSUdfU1dfU1lOQykgKi8KLQotI2VuZGlmIC8qIF9EUFVfRkVOQ0VfSF8gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKaW5kZXggMjllNzJiMzlmZDcyLi42 MTBlNjE2ZjJlNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5j CkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAibXNtX2Rydi5oIgogCiAjaW5jbHVkZSAiZHB1 X2ttcy5oIgotI2luY2x1ZGUgImRwdV9mZW5jZS5oIgogI2luY2x1ZGUgImRwdV9mb3JtYXRzLmgi CiAjaW5jbHVkZSAiZHB1X2h3X3NzcHAuaCIKICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZ19mb3Jt YXQuaCIKQEAgLTY3NiwyNiArNjc1LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfdHNf cHJlZmlsbChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCXBzdGF0ZS0+bXVsdGlyZWN0X2lu ZGV4KTsKIH0KIAotLyogaGVscGVyIHRvIHVwZGF0ZSBhIHN0YXRlJ3MgaW5wdXQgZmVuY2UgcG9p bnRlciBmcm9tIHRoZSBwcm9wZXJ0eSAqLwotc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfaW5w dXRfZmVuY2Uoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9wbGFuZV9zdGF0 ZSAqcHN0YXRlLCB1aW50NjRfdCBmZCkKLXsKLQlpZiAoIXBkcHUgfHwgIXBzdGF0ZSkgewotCQlE UFVfRVJST1IoImludmFsaWQgYXJnKHMpLCBwbGFuZSAlZCBzdGF0ZSAlZFxuIiwKLQkJCQlwZHB1 ICE9IDAsIHBzdGF0ZSAhPSAwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNsZWFyIHByZXZpb3Vz IHJlZmVyZW5jZSAqLwotCWlmIChwc3RhdGUtPmlucHV0X2ZlbmNlKQotCQlkcHVfc3luY19wdXQo cHN0YXRlLT5pbnB1dF9mZW5jZSk7Ci0KLQkvKiBnZXQgZmVuY2UgcG9pbnRlciBmb3IgbGF0ZXIg Ki8KLQlwc3RhdGUtPmlucHV0X2ZlbmNlID0gZHB1X3N5bmNfZ2V0KGZkKTsKLQotCURQVV9ERUJV R19QTEFORShwZHB1LCAiMHglbGxYXG4iLCBmZCk7Ci19Ci0KIC8qKgogICogX2RwdV9wbGFuZV9p bmxpbmVfcm90X3NldF9vdF9saW1pdCAtIHNldCBPVCBsaW1pdCBmb3IgdGhlIGdpdmVuIGlubGlu ZQogICogcm90YXRpb24geGluIGNsaWVudApAQCAtNzgwLDY0ICs3NTksNiBAQCBzdGF0aWMgdm9p ZCBfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0X3Fvc19yZW1hcChzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAlkcHVfdmJpZl9zZXRfcW9zX3JlbWFwKGRwdV9rbXMsICZxb3NfcGFyYW1zKTsKIH0K IAotaW50IGRwdV9wbGFuZV93YWl0X2lucHV0X2ZlbmNlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LCB1aW50MzJfdCB3YWl0X21zKQotewotCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7Ci0Jc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwotCXVpbnQzMl90IHByZWZpeDsKLQl2b2lkICppbnB1 dF9mZW5jZTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQlzaWduZWQgbG9uZyByYzsKLQotCWlmICgh cGxhbmUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKLQl9IGVsc2UgaWYgKCFw bGFuZS0+c3RhdGUpIHsKLQkJRFBVX0VSUk9SX1BMQU5FKHRvX2RwdV9wbGFuZShwbGFuZSksICJp bnZhbGlkIHN0YXRlXG4iKTsKLQl9IGVsc2UgewotCQlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5l KTsKLQkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Ci0JCWlucHV0 X2ZlbmNlID0gcHN0YXRlLT5pbnB1dF9mZW5jZTsKLQotCQlpZiAoaW5wdXRfZmVuY2UpIHsKLQkJ CXBkcHUtPmlzX2Vycm9yID0gZmFsc2U7Ci0JCQlwcmVmaXggPSBkcHVfc3luY19nZXRfbmFtZV9w cmVmaXgoaW5wdXRfZmVuY2UpOwotCQkJcmMgPSBkcHVfc3luY193YWl0KGlucHV0X2ZlbmNlLCB3 YWl0X21zKTsKLQotCQkJc3dpdGNoIChyYykgewotCQkJY2FzZSAwOgotCQkJCURQVV9FUlJPUl9Q TEFORShwZHB1LCAiJXVtcyB0aW1lb3V0IG9uICUwOFhcbiIsCi0JCQkJCQl3YWl0X21zLCBwcmVm aXgpOwotCQkJCXBkcHUtPmlzX2Vycm9yID0gdHJ1ZTsKLQkJCQlyZXQgPSAtRVRJTUVET1VUOwot CQkJCWJyZWFrOwotCQkJY2FzZSAtRVJFU1RBUlRTWVM6Ci0JCQkJRFBVX0VSUk9SX1BMQU5FKHBk cHUsCi0JCQkJCSIldW1zIHdhaXQgaW50ZXJydXB0ZWQgb24gJTA4WFxuIiwKLQkJCQkJd2FpdF9t cywgcHJlZml4KTsKLQkJCQlwZHB1LT5pc19lcnJvciA9IHRydWU7Ci0JCQkJcmV0ID0gLUVSRVNU QVJUU1lTOwotCQkJCWJyZWFrOwotCQkJY2FzZSAtRUlOVkFMOgotCQkJCURQVV9FUlJPUl9QTEFO RShwZHB1LAotCQkJCQkiaW52YWxpZCBmZW5jZSBwYXJhbSBmb3IgJTA4WFxuIiwKLQkJCQkJCXBy ZWZpeCk7Ci0JCQkJcGRwdS0+aXNfZXJyb3IgPSB0cnVlOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0J CQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCURQVV9ERUJVR19QTEFORShwZHB1LCAic2lnbmFs ZWRcbiIpOwotCQkJCXJldCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCURQVV9FVlQzMl9W RVJCT1NFKERSTUlEKHBsYW5lKSwgLXJldCwgcHJlZml4KTsKLQkJfSBlbHNlIHsKLQkJCXJldCA9 IDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoqCiAgKiBfZHB1X3BsYW5lX2dldF9h c3BhY2U6IGdldHMgdGhlIGFkZHJlc3Mgc3BhY2UKICAqLwpAQCAtMzMzMiw3ICszMjUzLDYgQEAg c3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAogCQkJYnJlYWs7CiAJCWNhc2UgUExBTkVfUFJPUF9JTkZPOgogCQljYXNlIFBMQU5F X1BST1BfQUxQSEE6Ci0JCWNhc2UgUExBTkVfUFJPUF9JTlBVVF9GRU5DRToKIAkJY2FzZSBQTEFO RV9QUk9QX0JMRU5EX09QOgogCQkJLyogbm8gc3BlY2lhbCBhY3Rpb24gcmVxdWlyZWQgKi8KIAkJ CWJyZWFrOwpAQCAtMzcwMywxMCArMzYyMyw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfaW5z dGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCW1zbV9wcm9wZXJ0eV9p bnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYWxwaGEiLAogCQkweDAsIDAsIDI1 NSwgMjU1LCBQTEFORV9QUk9QX0FMUEhBKTsKIAotCS8qIGxpbnV4IGRlZmF1bHQgZmlsZSBkZXNj cmlwdG9yIHJhbmdlIG9uIGVhY2ggcHJvY2VzcyAqLwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jh bmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiaW5wdXRfZmVuY2UiLAotCQkweDAsIDAsIElOUl9P UEVOX01BWCwgMCwgUExBTkVfUFJPUF9JTlBVVF9GRU5DRSk7Ci0KIAlpZiAoIW1hc3Rlcl9wbGFu ZV9pZCkgewogCQlpZiAocGRwdS0+cGlwZV9zYmxrLT5tYXhoZGVjaWV4cCkgewogCQkJbXNtX3By b3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sCkBAIC00MDc2LDkgKzM5 OTIsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCQkJaWR4ID0gbXNtX3Byb3BlcnR5X2luZGV4KCZwZHB1LT5wcm9w ZXJ0eV9pbmZvLAogCQkJCQlwcm9wZXJ0eSk7CiAJCQlzd2l0Y2ggKGlkeCkgewotCQkJY2FzZSBQ TEFORV9QUk9QX0lOUFVUX0ZFTkNFOgotCQkJCV9kcHVfcGxhbmVfc2V0X2lucHV0X2ZlbmNlKHBk cHUsIHBzdGF0ZSwgdmFsKTsKLQkJCQlicmVhazsKIAkJCWNhc2UgUExBTkVfUFJPUF9DU0NfVjE6 CiAJCQkJX2RwdV9wbGFuZV9zZXRfY3NjX3YxKHBkcHUsICh2b2lkICopdmFsKTsKIAkJCQlicmVh azsKQEAgLTQxOTAsMTAgKzQxMDMsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9z dGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlpZiAoc3RhdGUtPmZiKQogCQlkcm1fZnJh bWVidWZmZXJfcHV0KHN0YXRlLT5mYik7CiAKLQkvKiByZW1vdmUgcmVmIGNvdW50IGZvciBmZW5j ZSAqLwotCWlmIChwc3RhdGUtPmlucHV0X2ZlbmNlKQotCQlkcHVfc3luY19wdXQocHN0YXRlLT5p bnB1dF9mZW5jZSk7Ci0KIAkvKiBkZXN0cm95IHZhbHVlIGhlbHBlciAqLwogCW1zbV9wcm9wZXJ0 eV9kZXN0cm95X3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBwc3RhdGUsCiAJCQkmcHN0YXRl LT5wcm9wZXJ0eV9zdGF0ZSk7CkBAIC00MjA2LDcgKzQxMTUsNiBAQCBkcHVfcGxhbmVfZHVwbGlj YXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCXN0cnVjdCBkcHVfcGxhbmVfc3Rh dGUgKnBzdGF0ZTsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfc3RhdGU7CiAJc3RydWN0 IGRybV9wcm9wZXJ0eSAqZHJtX3Byb3A7Ci0JdWludDY0X3QgaW5wdXRfZmVuY2VfZGVmYXVsdDsK IAogCWlmICghcGxhbmUpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKQEAgLTQy MzAsMTggKzQxMzgsNiBAQCBkcHVfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQogCW1zbV9wcm9wZXJ0eV9kdXBsaWNhdGVfc3RhdGUoJnBkcHUtPnByb3BlcnR5 X2luZm8sIG9sZF9zdGF0ZSwgcHN0YXRlLAogCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHBz dGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsKIAotCS8qIGNsZWFyIG91dCBhbnkgaW5wdXQgZmVuY2Ug Ki8KLQlwc3RhdGUtPmlucHV0X2ZlbmNlID0gMDsKLQlpbnB1dF9mZW5jZV9kZWZhdWx0ID0gbXNt X3Byb3BlcnR5X2dldF9kZWZhdWx0KAotCQkJJnBkcHUtPnByb3BlcnR5X2luZm8sIFBMQU5FX1BS T1BfSU5QVVRfRkVOQ0UpOwotCWRybV9wcm9wID0gbXNtX3Byb3BlcnR5X2luZGV4X3RvX2RybV9w cm9wZXJ0eSgKLQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgUExBTkVfUFJPUF9JTlBVVF9GRU5D RSk7Ci0JaWYgKG1zbV9wcm9wZXJ0eV9hdG9taWNfc2V0KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAot CQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBkcm1fcHJvcCwKLQkJCQlpbnB1dF9mZW5jZV9k ZWZhdWx0KSkKLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsCi0JCQkJImVycm9yIGNsZWFyaW5nIGR1 cGxpY2F0ZWQgaW5wdXQgZmVuY2VcbiIpOwotCiAJcHN0YXRlLT5kaXJ0eSA9IDB4MDsKIAlwc3Rh dGUtPnBlbmRpbmcgPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAppbmRleCA2NTdlYTA1MmEx ZWUuLjc1YTI0YjgxYzg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTk5LDcgKzk5LDYgQEAg ZW51bSBtc21fbWRwX3BsYW5lX3Byb3BlcnR5IHsKIAlQTEFORV9QUk9QX0NPTE9SX0ZJTEwsCiAJ UExBTkVfUFJPUF9IX0RFQ0lNQVRFLAogCVBMQU5FX1BST1BfVl9ERUNJTUFURSwKLQlQTEFORV9Q Uk9QX0lOUFVUX0ZFTkNFLAogCVBMQU5FX1BST1BfSFVFX0FESlVTVCwKIAlQTEFORV9QUk9QX1NB VFVSQVRJT05fQURKVVNULAogCVBMQU5FX1BST1BfVkFMVUVfQURKVVNULApAQCAtMTMxLDggKzEz MCw3IEBAIGVudW0gbXNtX21kcF9jcnRjX3Byb3BlcnR5IHsKIAlDUlRDX1BST1BfQkxPQkNPVU5U LAogCiAJLyogcmFuZ2UgcHJvcGVydGllcyAqLwotCUNSVENfUFJPUF9JTlBVVF9GRU5DRV9USU1F T1VUID0gQ1JUQ19QUk9QX0JMT0JDT1VOVCwKLQlDUlRDX1BST1BfRElNX0xBWUVSX1YxLAorCUNS VENfUFJPUF9ESU1fTEFZRVJfVjEgPSBDUlRDX1BST1BfQkxPQkNPVU5ULAogCUNSVENfUFJPUF9D T1JFX0NMSywKIAlDUlRDX1BST1BfQ09SRV9BQiwKIAlDUlRDX1BST1BfQ09SRV9JQiwKLS0gClNl YW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGlu ZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K