From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH] drm/i915: Tidy workaround batch buffer emission Date: Wed, 8 Feb 2017 13:13:48 +0000 Message-ID: <1486559628-392-1-git-send-email-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id BF8F76E888 for ; Wed, 8 Feb 2017 13:13:57 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id u63so33176104wmu.2 for ; Wed, 08 Feb 2017 05:13:57 -0800 (PST) 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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClVzZSB0aGUg IipiYXRjaCsrID0gIiBzdHlsZSBhcyBpbiB0aGUgcmluZyBlbWlzc2lvbiBmb3IgYmV0dGVyCnJl YWRhYmlsaXR5IGFuZCBhbHNvIHNpbXBsaWZ5IHRoZSBsb2dpYyBhIGJpdCBieSBjb25zb2xpZGF0 aW5nCnRoZSBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIGFuZCBvdmVyZmxvdyBjaGVja2lu Zy4gVGhlCmxhdHRlciBpcyBhIHByb2dyYW1taW5nIGVycm9yIHNvIGl0IGlzIG5vdCByZXF1aXJl ZCB0byBjaGVjawpmb3IgaXQgYWZ0ZXIgZWFjaCB3cml0ZSB0byB0aGUgb2JqZWN0LCBidXQgcmF0 aGVyIGRvIGl0IG9uY2UgdGhlCndob2xlIHN0YXRlIGhhcyBiZWVuIHdyaXR0ZW4gYW5kIGZhaWwg dGhlIGRyaXZlciBpZiBzb21ldGhpbmcKd2VudCB3cm9uZy4KClNpZ25lZC1vZmYtYnk6IFR2cnRr byBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMgfCAzMDkgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTEwIGluc2VydGlvbnMoKyksIDE5OSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IGU0Mjk5MGI1NmZhOC4uMmZjNzY5NTVm NDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtOTIyLDE4ICs5MjIsNiBAQCBzdGF0 aWMgaW50IGludGVsX2xvZ2ljYWxfcmluZ193b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxKQogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIHdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgY21kKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaW50IF9faW5kZXgg PSAoaW5kZXgpKys7CQkJCVwKLQkJaWYgKFdBUk5fT04oX19pbmRleCA+PSAoUEFHRV9TSVpFIC8g c2l6ZW9mKHVpbnQzMl90KSkpKSB7IFwKLQkJCXJldHVybiAtRU5PU1BDOwkJCQkJXAotCQl9CQkJ CQkJCVwKLQkJYmF0Y2hbX19pbmRleF0gPSAoY21kKTsJCQkJCVwKLQl9IHdoaWxlICgwKQotCi0j ZGVmaW5lIHdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5kZXgsIHJlZykgXAotCXdhX2N0eF9lbWl0 KChiYXRjaCksIChpbmRleCksIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykpCi0KIC8qCiAgKiBJ biB0aGlzIFdBIHdlIG5lZWQgdG8gc2V0IEdFTjhfTDNTUUNSRUc0WzIxOjIxXSBhbmQgcmVzZXQg aXQgYWZ0ZXIKICAqIFBJUEVfQ09OVFJPTCBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBm b3IgdGhlIGZsdXNoIHRvIGhhcHBlbiBjb3JyZWN0bHkKQEAgLTk1MCw1NiArOTM4LDMxIEBAIHN0 YXRpYyBpbnQgaW50ZWxfbG9naWNhbF9yaW5nX3dvcmthcm91bmRzX2VtaXQoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiAgKiBUaGlzIFdBIGlzIGFsc28gcmVxdWlyZWQgZm9yIEdl bjkgc28gZXh0cmFjdGluZyBhcyBhIGZ1bmN0aW9uIGF2b2lkcwogICogY29kZSBkdXBsaWNhdGlv bi4KICAqLwotc3RhdGljIGlubGluZSBpbnQgZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2Eo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCQkJdWludDMyX3QgKmJhdGNoLAot CQkJCQkJdWludDMyX3QgaW5kZXgpCi17Ci0JdWludDMyX3QgbDNzcWM0X2ZsdXNoID0gKDB4NDA0 MDAwMDAgfCBHRU44X0xRU0NfRkxVU0hfQ09IRVJFTlRfTElORVMpOwotCi0Jd2FfY3R4X2VtaXQo YmF0Y2gsIGluZGV4LCAoTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfAotCQkJCSAgIE1JX1NS TV9MUk1fR0xPQkFMX0dUVCkpOwotCXdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5kZXgsIEdFTjhf TDNTUUNSRUc0KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIGk5MTVfZ2d0dF9vZmZzZXQo ZW5naW5lLT5zY3JhdGNoKSArIDI1Nik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsK LQotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwot CXdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5kZXgsIEdFTjhfTDNTUUNSRUc0KTsKLQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIGwzc3FjNF9mbHVzaCk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwg aW5kZXgsIEdGWF9PUF9QSVBFX0NPTlRST0woNikpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRl eCwgKFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Ci0JCQkJICAgUElQRV9DT05UUk9MX0RDX0ZMVVNI X0VOQUJMRSkpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQo YmF0Y2gsIGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0 eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChN SV9MT0FEX1JFR0lTVEVSX01FTV9HRU44IHwKLQkJCQkgICBNSV9TUk1fTFJNX0dMT0JBTF9HVFQp KTsKLQl3YV9jdHhfZW1pdF9yZWcoYmF0Y2gsIGluZGV4LCBHRU44X0wzU1FDUkVHNCk7Ci0Jd2Ff Y3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkg KyAyNTYpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0KLQlyZXR1cm4gaW5kZXg7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDMyX3Qgd2FfY3R4X3N0YXJ0KHN0cnVjdCBpOTE1X3dh X2N0eF9iYiAqd2FfY3R4LAotCQkJCSAgICB1aW50MzJfdCBvZmZzZXQsCi0JCQkJICAgIHVpbnQz Ml90IHN0YXJ0X2FsaWdubWVudCkKK3N0YXRpYyB1MzIgKgorZ2VuOF9lbWl0X2ZsdXNoX2NvaGVy ZW50bDNfd2Eoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewot CXJldHVybiB3YV9jdHgtPm9mZnNldCA9IEFMSUdOKG9mZnNldCwgc3RhcnRfYWxpZ25tZW50KTsK LX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FfY3R4X2VuZChzdHJ1Y3QgaTkxNV93YV9jdHhfYmIg KndhX2N0eCwKLQkJCSAgICAgdWludDMyX3Qgb2Zmc2V0LAotCQkJICAgICB1aW50MzJfdCBzaXpl X2FsaWdubWVudCkKLXsKLQl3YV9jdHgtPnNpemUgPSBvZmZzZXQgLSB3YV9jdHgtPm9mZnNldDsK LQotCVdBUk4od2FfY3R4LT5zaXplICUgc2l6ZV9hbGlnbm1lbnQsCi0JICAgICAid2FfY3R4X2Ji IGZhaWxlZCBzYW5pdHkgY2hlY2tzOiBzaXplICVkIGlzIG5vdCBhbGlnbmVkIHRvICVkXG4iLAot CSAgICAgd2FfY3R4LT5zaXplLCBzaXplX2FsaWdubWVudCk7Ci0JcmV0dXJuIDA7CisJKmJhdGNo KysgPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU1fR0VOOCB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsK KwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNSRUc0KTsKKwkqYmF0 Y2grKyA9IGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSArIDI1NjsKKwkqYmF0Y2gr KyA9IDA7CisKKwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOworCSpiYXRjaCsr ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOworCSpiYXRjaCsrID0gMHg0 MDQwMDAwMCB8IEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUzsKKworCSpiYXRjaCsrID0g R0ZYX09QX1BJUEVfQ09OVFJPTCg2KTsKKwkqYmF0Y2grKyA9IFBJUEVfQ09OVFJPTF9DU19TVEFM TCB8IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7CisJKmJhdGNoKysgPSAwOworCSpiYXRj aCsrID0gMDsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAwOworCisJKmJhdGNoKysgPSBN SV9MT0FEX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOworCSpiYXRj aCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOworCSpiYXRjaCsrID0g aTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMjU2OworCSpiYXRjaCsrID0gMDsK KworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTEwMTcsNDIgKzk4MCwyOCBAQCBzdGF0aWMg aW5saW5lIGludCB3YV9jdHhfZW5kKHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfY3R4LAogICog TUlfQkFUQ0hfQlVGRkVSX0VORCB3aWxsIGJlIGFkZGVkIHRvIHBlcmN0eCBiYXRjaCBhbmQgYm90 aCBvZiB0aGVtIHRvZ2V0aGVyCiAgKiBtYWtlcyBhIGNvbXBsZXRlIGJhdGNoIGJ1ZmZlci4KICAq Lwotc3RhdGljIGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAotCQkJCSAgICBzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJ CQkgICAgdWludDMyX3QgKmJhdGNoLAotCQkJCSAgICB1aW50MzJfdCAqb2Zmc2V0KQorc3RhdGlj IHUzMiAqZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyICpiYXRjaCkKIHsKLQl1aW50MzJfdCBzY3JhdGNoX2FkZHI7Ci0JdWludDMyX3Qg aW5kZXggPSB3YV9jdHhfc3RhcnQod2FfY3R4LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRTKTsK LQogCS8qIFdhRGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlvbjpiZHcsY2h2ICovCi0Jd2FfY3R4 X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEUpOworCSpi YXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxFOwogCiAJLyogV2FGbHVzaENv aGVyZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNoOmJkdyAqLwotCWlmIChJU19CUk9BRFdF TEwoZW5naW5lLT5pOTE1KSkgewotCQlpbnQgcmMgPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRs M193YShlbmdpbmUsIGJhdGNoLCBpbmRleCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7 Ci0JCWluZGV4ID0gcmM7Ci0JfQorCWlmIChJU19CUk9BRFdFTEwoZW5naW5lLT5pOTE1KSkKKwkJ YmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoKTsKIAor CSpiYXRjaCsrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg2KTsKKwkqYmF0Y2grKyA9IFBJUEVfQ09O VFJPTF9GTFVTSF9MMyB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8CisJCSAgIFBJUEVf Q09OVFJPTF9DU19TVEFMTCB8IFBJUEVfQ09OVFJPTF9RV19XUklURTsKIAkvKiBXYUNsZWFyU2xt U3BhY2VBdENvbnRleHRTd2l0Y2g6YmR3LGNodiAqLwogCS8qIEFjdHVhbCBzY3JhdGNoIGxvY2F0 aW9uIGlzIGF0IDEyOCBieXRlcyBvZmZzZXQgKi8KLQlzY3JhdGNoX2FkZHIgPSBpOTE1X2dndHRf b2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyICogQ0FDSEVMSU5FX0JZVEVTOwotCi0Jd2FfY3R4 X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05UUk9MKDYpKTsKLQl3YV9jdHhfZW1p dChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRST0xfRkxVU0hfTDMgfAotCQkJCSAgIFBJUEVfQ09O VFJPTF9HTE9CQUxfR1RUX0lWQiB8Ci0JCQkJICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJ CQkgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUpKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgs IHNjcmF0Y2hfYWRkcik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7CisJ KmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyICogQ0FDSEVM SU5FX0JZVEVTOworCSpiYXRjaCsrID0gMDsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAw OwogCiAJLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KLQl3aGlsZSAoaW5kZXggJSBDQUNI RUxJTkVfRFdPUkRTKQotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX05PT1ApOworCXdo aWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9CWVRFUykKKwkJKmJhdGNoKysg PSBNSV9OT09QOwogCiAJLyoKIAkgKiBNSV9CQVRDSF9CVUZGRVJfRU5EIGlzIG5vdCByZXF1aXJl ZCBpbiBJbmRpcmVjdCBjdHggQkIgYmVjYXVzZQpAQCAtMTA2MCw3ICsxMDA5LDcgQEAgc3RhdGlj IGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAogCSAqIGluIHRoZSByZWdpc3RlciBDVFhfUkNTX0lORElSRUNUX0NUWAogCSAqLwogCi0J cmV0dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5kZXgsIENBQ0hFTElORV9EV09S RFMpOworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTEwNzIsNTggKzEwMjEsMzggQEAgc3Rh dGljIGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAogICogIFRoaXMgYmF0Y2ggaXMgdGVybWluYXRlZCB3aXRoIE1JX0JBVENIX0JVRkZF Ul9FTkQgYW5kIHNvIHdlIG5lZWQgbm90IGFkZCBwYWRkaW5nCiAgKiAgdG8gYWxpZ24gaXQgd2l0 aCBjYWNoZWxpbmUgYXMgcGFkZGluZyBhZnRlciBNSV9CQVRDSF9CVUZGRVJfRU5EIGlzIHJlZHVu ZGFudC4KICAqLwotc3RhdGljIGludCBnZW44X2luaXRfcGVyY3R4X2JiKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwKLQkJCSAgICAgICBzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0 eCwKLQkJCSAgICAgICB1aW50MzJfdCAqYmF0Y2gsCi0JCQkgICAgICAgdWludDMyX3QgKm9mZnNl dCkKK3N0YXRpYyB1MzIgKmdlbjhfaW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewotCXVpbnQzMl90IGluZGV4ID0gd2FfY3R4X3N0YXJ0 KHdhX2N0eCwgKm9mZnNldCwgQ0FDSEVMSU5FX0RXT1JEUyk7Ci0KIAkvKiBXYURpc2FibGVDdHhS ZXN0b3JlQXJiaXRyYXRpb246YmR3LGNodiAqLwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwg TUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEUpOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGlu ZGV4LCBNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKwkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBN SV9BUkJfRU5BQkxFOworCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKIAotCXJldHVy biB3YV9jdHhfZW5kKHdhX2N0eCwgKm9mZnNldCA9IGluZGV4LCAxKTsKKwlyZXR1cm4gYmF0Y2g7 CiB9CiAKLXN0YXRpYyBpbnQgZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkgICAgc3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgs Ci0JCQkJICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJCQkgICAgdWludDMyX3QgKm9mZnNldCkKK3N0 YXRpYyB1MzIgKmdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhf c3RhcnQod2FfY3R4LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRTKTsKLQogCS8qIFdhRmx1c2hD b2hlcmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRjaDpza2wsYnh0LGdsayAqLwotCXJldCA9 IGdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gsIGluZGV4KTsKLQlp ZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlpbmRleCA9IHJldDsKKwliYXRjaCA9IGdlbjhf ZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gpOwogCiAJLyogV2FEaXNhYmxl R2F0aGVyQXRTZXRTaGFkZXJDb21tb25TbGljZTpza2wsYnh0LGtibCxnbGsgKi8KLQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpKTsKLQl3YV9jdHhfZW1p dF9yZWcoYmF0Y2gsIGluZGV4LCBDT01NT05fU0xJQ0VfQ0hJQ0tFTjIpOwotCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgX01BU0tFRF9CSVRfRElTQUJMRSgKLQkJCSAgICBHRU45X0RJU0FCTEVf R0FUSEVSX0FUX1NFVF9TSEFERVJfQ09NTU9OX1NMSUNFKSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gs IGluZGV4LCBNSV9OT09QKTsKKwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOwor CSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoQ09NTU9OX1NMSUNFX0NISUNLRU4yKTsK KwkqYmF0Y2grKyA9IF9NQVNLRURfQklUX0RJU0FCTEUoCisJCQlHRU45X0RJU0FCTEVfR0FUSEVS X0FUX1NFVF9TSEFERVJfQ09NTU9OX1NMSUNFKTsKKwkqYmF0Y2grKyA9IE1JX05PT1A7CiAKIAkv KiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6a2JsICovCiAJLyogQWN0dWFsIHNjcmF0 Y2ggbG9jYXRpb24gaXMgYXQgMTI4IGJ5dGVzIG9mZnNldCAqLwotCWlmIChJU19LQkxfUkVWSUQo ZGV2X3ByaXYsIDAsIEtCTF9SRVZJRF9BMCkpIHsKLQkJdTMyIHNjcmF0Y2hfYWRkciA9Ci0JCQlp OTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyICogQ0FDSEVMSU5FX0JZVEVTOwot Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Ci0J CXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgKFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8Ci0JCQkJ CSAgIFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8Ci0JCQkJCSAgIFBJUEVfQ09OVFJPTF9D U19TVEFMTCB8Ci0JCQkJCSAgIFBJUEVfQ09OVFJPTF9RV19XUklURSkpOwotCQl3YV9jdHhfZW1p dChiYXRjaCwgaW5kZXgsIHNjcmF0Y2hfYWRkcik7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRl eCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgMCk7CisJaWYgKElTX0tCTF9SRVZJRChlbmdpbmUtPmk5MTUsIDAsIEtCTF9S RVZJRF9BMCkpIHsKKwkJKmJhdGNoKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDYpOworCQkqYmF0 Y2grKyA9IFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lW QiB8CisJCQkgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfUVdfV1JJVEU7 CisJCSpiYXRjaCsrID0gaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsKKwkJCSAg IDIgKiBDQUNIRUxJTkVfQllURVM7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOwor CQkqYmF0Y2grKyA9IDA7CiAJfQogCiAJLyogV2FNZWRpYVBvb2xTdGF0ZUNtZEluV0FCQjpieHQs Z2xrICovCkBAIC0xMTQxLDQxICsxMDcwLDM3IEBAIHN0YXRpYyBpbnQgZ2VuOV9pbml0X2luZGly ZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJICogcG9zc2libGUg Y29uZmlndXJhdGlvbnMsIHRvIGF2b2lkIGR1cGxpY2F0aW9uIHRoZXkgYXJlCiAJCSAqIG5vdCBz aG93biBoZXJlIGFnYWluLgogCQkgKi8KLQkJdTMyIGV1X3Bvb2xfY29uZmlnID0gMHgwMDc3NzAw MDsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRU45X01FRElBX1BPT0xfU1RBVEUpOwot CQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIEdFTjlfTUVESUFfUE9PTF9FTkFCTEUpOwotCQl3 YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIGV1X3Bvb2xfY29uZmlnKTsKLQkJd2FfY3R4X2VtaXQo YmF0Y2gsIGluZGV4LCAwKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQkJd2Ff Y3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKKwkJKmJhdGNoKysgPSBHRU45X01FRElBX1BPT0xf U1RBVEU7CisJCSpiYXRjaCsrID0gR0VOOV9NRURJQV9QT09MX0VOQUJMRTsKKwkJKmJhdGNoKysg PSAweDAwNzc3MDAwOworCQkqYmF0Y2grKyA9IDA7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNo KysgPSAwOwogCX0KIAogCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCi0Jd2hpbGUgKGlu ZGV4ICUgQ0FDSEVMSU5FX0RXT1JEUykKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9O T09QKTsKKwl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllURVMpCisJ CSpiYXRjaCsrID0gTUlfTk9PUDsKIAotCXJldHVybiB3YV9jdHhfZW5kKHdhX2N0eCwgKm9mZnNl dCA9IGluZGV4LCBDQUNIRUxJTkVfRFdPUkRTKTsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKLXN0YXRp YyBpbnQgZ2VuOV9pbml0X3BlcmN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Ci0JCQkgICAgICAgc3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkgICAgICAgdWlu dDMyX3QgKmJhdGNoLAotCQkJICAgICAgIHVpbnQzMl90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpn ZW45X2luaXRfcGVyY3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpi YXRjaCkKIHsKLQl1aW50MzJfdCBpbmRleCA9IHdhX2N0eF9zdGFydCh3YV9jdHgsICpvZmZzZXQs IENBQ0hFTElORV9EV09SRFMpOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9CQVRD SF9CVUZGRVJfRU5EKTsKKwkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CiAKLQlyZXR1 cm4gd2FfY3R4X2VuZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRleCwgMSk7CisJcmV0dXJuIGJhdGNo OwogfQogCi1zdGF0aWMgaW50IGxyY19zZXR1cF93YV9jdHhfb2JqKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgdTMyIHNpemUpCisjZGVmaW5lIENUWF9XQV9CQl9PQkpfU0laRSAoUEFH RV9TSVpFKQorCitzdGF0aWMgaW50IGxyY19zZXR1cF93YV9jdHgoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3Ry dWN0IGk5MTVfdm1hICp2bWE7CiAJaW50IGVycjsKIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9j cmVhdGUoZW5naW5lLT5pOTE1LCBQQUdFX0FMSUdOKHNpemUpKTsKKwlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNSwgQ1RYX1dBX0JCX09CSl9TSVpFKTsKIAlpZiAoSVNf RVJSKG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9iaik7CiAKQEAgLTExOTcsODAgKzExMjIsNjYg QEAgc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4X29iaihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIHUzMiBzaXplKQogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGxyY19k ZXN0cm95X3dhX2N0eF9vYmooc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGlj IHZvaWQgbHJjX2Rlc3Ryb3lfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK IHsKIAlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmZW5naW5lLT53YV9jdHgudm1hKTsKIH0K IAordHlwZWRlZiB1MzIgKigqd2FfYmJfZnVuY190KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHUzMiAqYmF0Y2gpOworCiBzdGF0aWMgaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9i YihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGk5MTVfY3R4X3dv cmthcm91bmRzICp3YV9jdHggPSAmZW5naW5lLT53YV9jdHg7Ci0JdWludDMyX3QgKmJhdGNoOwot CXVpbnQzMl90IG9mZnNldDsKKwlzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2JiWzJdID0geyAm d2FfY3R4LT5pbmRpcmVjdF9jdHgsCisJCQkJCSAgICAmd2FfY3R4LT5wZXJfY3R4IH07CisJd2Ff YmJfZnVuY190IHdhX2JiX2ZbMl07CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTMyICpiYXRjaCwg KmJhdGNoX3B0cjsKKwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0OwogCi0JV0FSTl9PTihlbmdp bmUtPmlkICE9IFJDUyk7CisJaWYgKFdBUk5fT04oZW5naW5lLT5pZCAhPSBSQ1MgfHwgIWVuZ2lu ZS0+c2NyYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOwogCi0JLyogdXBkYXRlIHRoaXMgd2hlbiBX QSBmb3IgaGlnaGVyIEdlbiBhcmUgYWRkZWQgKi8KLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPiA5KSB7Ci0JCURSTV9FUlJPUigiV0EgYmF0Y2ggYnVmZmVyIGlzIG5vdCBpbml0aWFsaXpl ZCBmb3IgR2VuJWRcbiIsCi0JCQkgIElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsKKwlzd2l0Y2gg KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7CisJY2FzZSA5OgorCQl3YV9iYl9mWzBdID0gZ2Vu OV9pbml0X2luZGlyZWN0Y3R4X2JiOworCQl3YV9iYl9mWzFdID0gZ2VuOV9pbml0X3BlcmN0eF9i YjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl3YV9iYl9mWzBdID0gZ2VuOF9pbml0X2luZGlyZWN0 Y3R4X2JiOworCQl3YV9iYl9mWzFdID0gZ2VuOF9pbml0X3BlcmN0eF9iYjsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsKIAkJcmV0 dXJuIDA7CiAJfQogCi0JLyogc29tZSBXQSBwZXJmb3JtIHdyaXRlcyB0byBzY3JhdGNoIHBhZ2Us IGVuc3VyZSBpdCBpcyB2YWxpZCAqLwotCWlmICghZW5naW5lLT5zY3JhdGNoKSB7Ci0JCURSTV9F UlJPUigic2NyYXRjaCBwYWdlIG5vdCBhbGxvY2F0ZWQgZm9yICVzXG4iLCBlbmdpbmUtPm5hbWUp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSBscmNfc2V0dXBfd2FfY3R4X29iaihl bmdpbmUsIFBBR0VfU0laRSk7CisJcmV0ID0gbHJjX3NldHVwX3dhX2N0eChlbmdpbmUpOwogCWlm IChyZXQpIHsKIAkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldHVwIGNvbnRleHQgV0Eg cGFnZTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcGFnZSA9IGk5MTVfZ2Vt X29iamVjdF9nZXRfZGlydHlfcGFnZSh3YV9jdHgtPnZtYS0+b2JqLCAwKTsKLQliYXRjaCA9IGtt YXBfYXRvbWljKHBhZ2UpOwotCW9mZnNldCA9IDA7Ci0KLQlpZiAoSVNfR0VOOChlbmdpbmUtPmk5 MTUpKSB7Ci0JCXJldCA9IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihlbmdpbmUsCi0JCQkJCSAg ICAgICAmd2FfY3R4LT5pbmRpcmVjdF9jdHgsCi0JCQkJCSAgICAgICBiYXRjaCwKLQkJCQkJICAg ICAgICZvZmZzZXQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJYmF0Y2ggPSBiYXRjaF9w dHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKIAotCQlyZXQgPSBnZW44X2luaXRfcGVyY3R4X2JiKGVu Z2luZSwKLQkJCQkJICAmd2FfY3R4LT5wZXJfY3R4LAotCQkJCQkgIGJhdGNoLAotCQkJCQkgICZv ZmZzZXQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmIChJU19HRU45KGVu Z2luZS0+aTkxNSkpIHsKLQkJcmV0ID0gZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKGVuZ2luZSwK LQkJCQkJICAgICAgICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwKLQkJCQkJICAgICAgIGJhdGNoLAot CQkJCQkgICAgICAgJm9mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQotCQlyZXQg PSBnZW45X2luaXRfcGVyY3R4X2JiKGVuZ2luZSwKLQkJCQkJICAmd2FfY3R4LT5wZXJfY3R4LAot CQkJCQkgIGJhdGNoLAotCQkJCQkgICZvZmZzZXQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7 CisJLyoKKwkgKiBFbWl0IHRoZSB0d28gd29ya2Fyb3VuZCBiYXRjaCBidWZmZXJzLCByZWNvcmRp bmcgdGhlIG9mZnNldCBmcm9tIHRoZQorCSAqIHN0YXJ0IG9mIHRoZSB3b3JrYXJvdW5kIGJhdGNo IGJ1ZmZlciBvYmplY3QgZm9yIGVhY2ggYW5kIHRoZWlyCisJICogcmVzcGVjdGl2ZSBzaXplcy4K KwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YV9iYl9mKTsgaSsrKSB7CisJCXdh X2JiW2ldLT5vZmZzZXQgPSBBTElHTihiYXRjaF9wdHIgLSBiYXRjaCwgQ0FDSEVMSU5FX0RXT1JE Uyk7CisJCWJhdGNoX3B0ciA9IHdhX2JiX2ZbaV0oZW5naW5lLCBiYXRjaF9wdHIpOworCQl3YV9i YltpXS0+c2l6ZSA9IGJhdGNoX3B0ciAtICZiYXRjaFt3YV9iYltpXS0+b2Zmc2V0XTsKIAl9CiAK LW91dDoKKwlCVUdfT04oYmF0Y2hfcHRyIC0gYmF0Y2ggPiBDVFhfV0FfQkJfT0JKX1NJWkUgLyBz aXplb2YodTMyKSk7CisKIAlrdW5tYXBfYXRvbWljKGJhdGNoKTsKLQlpZiAocmV0KQotCQlscmNf ZGVzdHJveV93YV9jdHhfb2JqKGVuZ2luZSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwog fQogCiBzdGF0aWMgdTMyIHBvcnRfc2Vxbm8oc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQpCkBA IC0xNzI3LDcgKzE2MzgsNyBAQCB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCWludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1v bihlbmdpbmUpOwogCi0JbHJjX2Rlc3Ryb3lfd2FfY3R4X29iaihlbmdpbmUpOworCWxyY19kZXN0 cm95X3dhX2N0eChlbmdpbmUpOwogCWVuZ2luZS0+aTkxNSA9IE5VTEw7CiAJZGV2X3ByaXYtPmVu Z2luZVtlbmdpbmUtPmlkXSA9IE5VTEw7CiAJa2ZyZWUoZW5naW5lKTsKLS0gCjIuNy40CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK