From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 1/2] drm/i915: Tidy workaround batch buffer emission Date: Wed, 15 Feb 2017 16:06:33 +0000 Message-ID: <20170215160634.8894-1-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 7AC856E977 for ; Wed, 15 Feb 2017 16:06:43 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id v77so8906345wmv.0 for ; Wed, 15 Feb 2017 08:06:43 -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 dGhlIGRyaXZlciBpZiBzb21ldGhpbmcKd2VudCB3cm9uZy4KCnYyOiBSZWJhc2UuCgpTaWduZWQt b2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIHwgMzA5ICsrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDExMCBpbnNlcnRpb25zKCspLCAx OTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCBlZTQzMWQzOWNl MDYuLmY2NTM3ZDE0ZDI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKQEAgLTg5MCwxOCAr ODkwLDYgQEAgc3RhdGljIGludCBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSB3YV9j dHhfZW1pdChiYXRjaCwgaW5kZXgsIGNtZCkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWludCBf X2luZGV4ID0gKGluZGV4KSsrOwkJCQlcCi0JCWlmIChXQVJOX09OKF9faW5kZXggPj0gKFBBR0Vf U0laRSAvIHNpemVvZih1aW50MzJfdCkpKSkgeyBcCi0JCQlyZXR1cm4gLUVOT1NQQzsJCQkJCVwK LQkJfQkJCQkJCQlcCi0JCWJhdGNoW19faW5kZXhdID0gKGNtZCk7CQkJCQlcCi0JfSB3aGlsZSAo MCkKLQotI2RlZmluZSB3YV9jdHhfZW1pdF9yZWcoYmF0Y2gsIGluZGV4LCByZWcpIFwKLQl3YV9j dHhfZW1pdCgoYmF0Y2gpLCAoaW5kZXgpLCBpOTE1X21taW9fcmVnX29mZnNldChyZWcpKQotCiAv KgogICogSW4gdGhpcyBXQSB3ZSBuZWVkIHRvIHNldCBHRU44X0wzU1FDUkVHNFsyMToyMV0gYW5k IHJlc2V0IGl0IGFmdGVyCiAgKiBQSVBFX0NPTlRST0wgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVx dWlyZWQgZm9yIHRoZSBmbHVzaCB0byBoYXBwZW4gY29ycmVjdGx5CkBAIC05MTgsNTYgKzkwNiwz MSBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1ZXN0X2FsbG9jKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdCkKICAqIFRoaXMgV0EgaXMgYWxzbyByZXF1aXJlZCBmb3IgR2Vu OSBzbyBleHRyYWN0aW5nIGFzIGEgZnVuY3Rpb24gYXZvaWRzCiAgKiBjb2RlIGR1cGxpY2F0aW9u LgogICovCi1zdGF0aWMgaW5saW5lIGludCBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJCQl1aW50MzJfdCAqYmF0Y2gsCi0J CQkJCQl1aW50MzJfdCBpbmRleCkKLXsKLQl1aW50MzJfdCBsM3NxYzRfZmx1c2ggPSAoMHg0MDQw MDAwMCB8IEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVOVF9MSU5FUyk7Ci0KLQl3YV9jdHhfZW1pdChi YXRjaCwgaW5kZXgsIChNSV9TVE9SRV9SRUdJU1RFUl9NRU1fR0VOOCB8Ci0JCQkJICAgTUlfU1JN X0xSTV9HTE9CQUxfR1RUKSk7Ci0Jd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwgR0VOOF9M M1NRQ1JFRzQpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgaTkxNV9nZ3R0X29mZnNldChl bmdpbmUtPnNjcmF0Y2gpICsgMjU2KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwot Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKSk7Ci0J d2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwgR0VOOF9MM1NRQ1JFRzQpOwotCXdhX2N0eF9l bWl0KGJhdGNoLCBpbmRleCwgbDNzcWM0X2ZsdXNoKTsKLQotCXdhX2N0eF9lbWl0KGJhdGNoLCBp bmRleCwgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4 LCAoUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJCQkgICBQSVBFX0NPTlRST0xfRENfRkxVU0hf RU5BQkxFKSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChi YXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4 X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgKE1J X0xPQURfUkVHSVNURVJfTUVNX0dFTjggfAotCQkJCSAgIE1JX1NSTV9MUk1fR0xPQkFMX0dUVCkp OwotCXdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5kZXgsIEdFTjhfTDNTUUNSRUc0KTsKLQl3YV9j dHhfZW1pdChiYXRjaCwgaW5kZXgsIGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSAr IDI1Nik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQotCXJldHVybiBpbmRleDsK LX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdCB3YV9jdHhfc3RhcnQoc3RydWN0IGk5MTVfd2Ff Y3R4X2JiICp3YV9jdHgsCi0JCQkJICAgIHVpbnQzMl90IG9mZnNldCwKLQkJCQkgICAgdWludDMy X3Qgc3RhcnRfYWxpZ25tZW50KQorc3RhdGljIHUzMiAqCitnZW44X2VtaXRfZmx1c2hfY29oZXJl bnRsM193YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0J cmV0dXJuIHdhX2N0eC0+b2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBzdGFydF9hbGlnbm1lbnQpOwot fQotCi1zdGF0aWMgaW5saW5lIGludCB3YV9jdHhfZW5kKHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAq d2FfY3R4LAotCQkJICAgICB1aW50MzJfdCBvZmZzZXQsCi0JCQkgICAgIHVpbnQzMl90IHNpemVf YWxpZ25tZW50KQotewotCXdhX2N0eC0+c2l6ZSA9IG9mZnNldCAtIHdhX2N0eC0+b2Zmc2V0Owot Ci0JV0FSTih3YV9jdHgtPnNpemUgJSBzaXplX2FsaWdubWVudCwKLQkgICAgICJ3YV9jdHhfYmIg ZmFpbGVkIHNhbml0eSBjaGVja3M6IHNpemUgJWQgaXMgbm90IGFsaWduZWQgdG8gJWRcbiIsCi0J ICAgICB3YV9jdHgtPnNpemUsIHNpemVfYWxpZ25tZW50KTsKLQlyZXR1cm4gMDsKKwkqYmF0Y2gr KyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOwor CSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOworCSpiYXRj aCsrID0gaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMjU2OworCSpiYXRjaCsr ID0gMDsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7CisJKmJhdGNoKysg PSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSAweDQw NDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTOworCisJKmJhdGNoKysgPSBH RlhfT1BfUElQRV9DT05UUk9MKDYpOworCSpiYXRjaCsrID0gUElQRV9DT05UUk9MX0NTX1NUQUxM IHwgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRTsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNo KysgPSAwOworCSpiYXRjaCsrID0gMDsKKwkqYmF0Y2grKyA9IDA7CisKKwkqYmF0Y2grKyA9IE1J X0xPQURfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9TUk1fTFJNX0dMT0JBTF9HVFQ7CisJKmJhdGNo KysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSBp OTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyNTY7CisJKmJhdGNoKysgPSAwOwor CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtOTg1LDQyICs5NDgsMjggQEAgc3RhdGljIGlu bGluZSBpbnQgd2FfY3R4X2VuZChzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKICAqIE1J X0JBVENIX0JVRkZFUl9FTkQgd2lsbCBiZSBhZGRlZCB0byBwZXJjdHggYmF0Y2ggYW5kIGJvdGgg b2YgdGhlbSB0b2dldGhlcgogICogbWFrZXMgYSBjb21wbGV0ZSBiYXRjaCBidWZmZXIuCiAgKi8K LXN0YXRpYyBpbnQgZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKLQkJCQkgICAgc3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkJ ICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJCQkgICAgdWludDMyX3QgKm9mZnNldCkKK3N0YXRpYyB1 MzIgKmdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIHUzMiAqYmF0Y2gpCiB7Ci0JdWludDMyX3Qgc2NyYXRjaF9hZGRyOwotCXVpbnQzMl90IGlu ZGV4ID0gd2FfY3R4X3N0YXJ0KHdhX2N0eCwgKm9mZnNldCwgQ0FDSEVMSU5FX0RXT1JEUyk7Ci0K IAkvKiBXYURpc2FibGVDdHhSZXN0b3JlQXJiaXRyYXRpb246YmR3LGNodiAqLwotCXdhX2N0eF9l bWl0KGJhdGNoLCBpbmRleCwgTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxFKTsKKwkqYmF0 Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKIAogCS8qIFdhRmx1c2hDb2hl cmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRjaDpiZHcgKi8KLQlpZiAoSVNfQlJPQURXRUxM KGVuZ2luZS0+aTkxNSkpIHsKLQkJaW50IHJjID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNf d2EoZW5naW5lLCBiYXRjaCwgaW5kZXgpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwot CQlpbmRleCA9IHJjOwotCX0KKwlpZiAoSVNfQlJPQURXRUxMKGVuZ2luZS0+aTkxNSkpCisJCWJh dGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRjaCk7CiAKKwkq YmF0Y2grKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNik7CisJKmJhdGNoKysgPSBQSVBFX0NPTlRS T0xfRkxVU0hfTDMgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAorCQkgICBQSVBFX0NP TlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfUVdfV1JJVEU7CiAJLyogV2FDbGVhclNsbVNw YWNlQXRDb250ZXh0U3dpdGNoOmJkdyxjaHYgKi8KIAkvKiBBY3R1YWwgc2NyYXRjaCBsb2NhdGlv biBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0ICovCi0Jc2NyYXRjaF9hZGRyID0gaTkxNV9nZ3R0X29m ZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMiAqIENBQ0hFTElORV9CWVRFUzsKLQotCXdhX2N0eF9l bWl0KGJhdGNoLCBpbmRleCwgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7Ci0Jd2FfY3R4X2VtaXQo YmF0Y2gsIGluZGV4LCAoUElQRV9DT05UUk9MX0ZMVVNIX0wzIHwKLQkJCQkgICBQSVBFX0NPTlRS T0xfR0xPQkFMX0dUVF9JVkIgfAotCQkJCSAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Ci0JCQkJ ICAgUElQRV9DT05UUk9MX1FXX1dSSVRFKSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBz Y3JhdGNoX2FkZHIpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2Vt aXQoYmF0Y2gsIGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOworCSpi YXRjaCsrID0gaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMiAqIENBQ0hFTElO RV9CWVRFUzsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAwOworCSpiYXRjaCsrID0gMDsK IAogCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCi0Jd2hpbGUgKGluZGV4ICUgQ0FDSEVM SU5FX0RXT1JEUykKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9OT09QKTsKKwl3aGls ZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllURVMpCisJCSpiYXRjaCsrID0g TUlfTk9PUDsKIAogCS8qCiAJICogTUlfQkFUQ0hfQlVGRkVSX0VORCBpcyBub3QgcmVxdWlyZWQg aW4gSW5kaXJlY3QgY3R4IEJCIGJlY2F1c2UKQEAgLTEwMjgsNyArOTc3LDcgQEAgc3RhdGljIGlu dCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAogCSAqIGluIHRoZSByZWdpc3RlciBDVFhfUkNTX0lORElSRUNUX0NUWAogCSAqLwogCi0JcmV0 dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5kZXgsIENBQ0hFTElORV9EV09SRFMp OworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTEwNDAsNTggKzk4OSwzOCBAQCBzdGF0aWMg aW50IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCiAgKiAgVGhpcyBiYXRjaCBpcyB0ZXJtaW5hdGVkIHdpdGggTUlfQkFUQ0hfQlVGRkVSX0VO RCBhbmQgc28gd2UgbmVlZCBub3QgYWRkIHBhZGRpbmcKICAqICB0byBhbGlnbiBpdCB3aXRoIGNh Y2hlbGluZSBhcyBwYWRkaW5nIGFmdGVyIE1JX0JBVENIX0JVRkZFUl9FTkQgaXMgcmVkdW5kYW50 LgogICovCi1zdGF0aWMgaW50IGdlbjhfaW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAotCQkJICAgICAgIHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfY3R4LAot CQkJICAgICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJCSAgICAgICB1aW50MzJfdCAqb2Zmc2V0KQor c3RhdGljIHUzMiAqZ2VuOF9pbml0X3BlcmN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhfc3RhcnQod2Ff Y3R4LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRTKTsKLQogCS8qIFdhRGlzYWJsZUN0eFJlc3Rv cmVBcmJpdHJhdGlvbjpiZHcsY2h2ICovCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9B UkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRSk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgs IE1JX0JBVENIX0JVRkZFUl9FTkQpOworCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FS Ql9FTkFCTEU7CisJKmJhdGNoKysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwogCi0JcmV0dXJuIHdh X2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5kZXgsIDEpOworCXJldHVybiBiYXRjaDsKIH0K IAotc3RhdGljIGludCBnZW45X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAotCQkJCSAgICBzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJ CQkgICAgdWludDMyX3QgKmJhdGNoLAotCQkJCSAgICB1aW50MzJfdCAqb2Zmc2V0KQorc3RhdGlj IHUzMiAqZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyICpiYXRjaCkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKLQl1aW50MzJfdCBpbmRleCA9IHdhX2N0eF9zdGFy dCh3YV9jdHgsICpvZmZzZXQsIENBQ0hFTElORV9EV09SRFMpOwotCiAJLyogV2FGbHVzaENvaGVy ZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNoOnNrbCxieHQsZ2xrICovCi0JcmV0ID0gZ2Vu OF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRjaCwgaW5kZXgpOwotCWlmIChy ZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWluZGV4ID0gcmV0OworCWJhdGNoID0gZ2VuOF9lbWl0 X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRjaCk7CiAKIAkvKiBXYURpc2FibGVHYXRo ZXJBdFNldFNoYWRlckNvbW1vblNsaWNlOnNrbCxieHQsa2JsLGdsayAqLwotCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwotCXdhX2N0eF9lbWl0X3Jl ZyhiYXRjaCwgaW5kZXgsIENPTU1PTl9TTElDRV9DSElDS0VOMik7Ci0Jd2FfY3R4X2VtaXQoYmF0 Y2gsIGluZGV4LCBfTUFTS0VEX0JJVF9ESVNBQkxFKAotCQkJICAgIEdFTjlfRElTQUJMRV9HQVRI RVJfQVRfU0VUX1NIQURFUl9DT01NT05fU0xJQ0UpKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5k ZXgsIE1JX05PT1ApOworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7CisJKmJh dGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChDT01NT05fU0xJQ0VfQ0hJQ0tFTjIpOworCSpi YXRjaCsrID0gX01BU0tFRF9CSVRfRElTQUJMRSgKKwkJCUdFTjlfRElTQUJMRV9HQVRIRVJfQVRf U0VUX1NIQURFUl9DT01NT05fU0xJQ0UpOworCSpiYXRjaCsrID0gTUlfTk9PUDsKIAogCS8qIFdh Q2xlYXJTbG1TcGFjZUF0Q29udGV4dFN3aXRjaDprYmwgKi8KIAkvKiBBY3R1YWwgc2NyYXRjaCBs b2NhdGlvbiBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0ICovCi0JaWYgKElTX0tCTF9SRVZJRChkZXZf cHJpdiwgMCwgS0JMX1JFVklEX0EwKSkgewotCQl1MzIgc2NyYXRjaF9hZGRyID0KLQkJCWk5MTVf Z2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSArIDIgKiBDQUNIRUxJTkVfQllURVM7Ci0KLQkJ d2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05UUk9MKDYpKTsKLQkJd2Ff Y3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAoUElQRV9DT05UUk9MX0ZMVVNIX0wzIHwKLQkJCQkJICAg UElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwKLQkJCQkJICAgUElQRV9DT05UUk9MX0NTX1NU QUxMIHwKLQkJCQkJICAgUElQRV9DT05UUk9MX1FXX1dSSVRFKSk7Ci0JCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgc2NyYXRjaF9hZGRyKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAw KTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gs IGluZGV4LCAwKTsKKwlpZiAoSVNfS0JMX1JFVklEKGVuZ2luZS0+aTkxNSwgMCwgS0JMX1JFVklE X0EwKSkgeworCQkqYmF0Y2grKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNik7CisJCSpiYXRjaCsr ID0gUElQRV9DT05UUk9MX0ZMVVNIX0wzIHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwK KwkJCSAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKwkJ KmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKworCQkJICAgMiAq IENBQ0hFTElORV9CWVRFUzsKKwkJKmJhdGNoKysgPSAwOworCQkqYmF0Y2grKyA9IDA7CisJCSpi YXRjaCsrID0gMDsKIAl9CiAKIAkvKiBXYU1lZGlhUG9vbFN0YXRlQ21kSW5XQUJCOmJ4dCxnbGsg Ki8KQEAgLTExMDksNDEgKzEwMzgsMzcgQEAgc3RhdGljIGludCBnZW45X2luaXRfaW5kaXJlY3Rj dHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQkgKiBwb3NzaWJsZSBjb25m aWd1cmF0aW9ucywgdG8gYXZvaWQgZHVwbGljYXRpb24gdGhleSBhcmUKIAkJICogbm90IHNob3du IGhlcmUgYWdhaW4uCiAJCSAqLwotCQl1MzIgZXVfcG9vbF9jb25maWcgPSAweDAwNzc3MDAwOwot CQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIEdFTjlfTUVESUFfUE9PTF9TVEFURSk7Ci0JCXdh X2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0VOOV9NRURJQV9QT09MX0VOQUJMRSk7Ci0JCXdhX2N0 eF9lbWl0KGJhdGNoLCBpbmRleCwgZXVfcG9vbF9jb25maWcpOwotCQl3YV9jdHhfZW1pdChiYXRj aCwgaW5kZXgsIDApOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIDApOworCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9TVEFU RTsKKwkJKmJhdGNoKysgPSBHRU45X01FRElBX1BPT0xfRU5BQkxFOworCQkqYmF0Y2grKyA9IDB4 MDA3NzcwMDA7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOworCQkqYmF0Y2grKyA9 IDA7CiAJfQogCiAJLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KLQl3aGlsZSAoaW5kZXgg JSBDQUNIRUxJTkVfRFdPUkRTKQotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX05PT1Ap OworCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9CWVRFUykKKwkJKmJh dGNoKysgPSBNSV9OT09QOwogCi0JcmV0dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0g aW5kZXgsIENBQ0hFTElORV9EV09SRFMpOworCXJldHVybiBiYXRjaDsKIH0KIAotc3RhdGljIGlu dCBnZW45X2luaXRfcGVyY3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJ CSAgICAgICBzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJCSAgICAgICB1aW50MzJf dCAqYmF0Y2gsCi0JCQkgICAgICAgdWludDMyX3QgKm9mZnNldCkKK3N0YXRpYyB1MzIgKmdlbjlf aW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNo KQogewotCXVpbnQzMl90IGluZGV4ID0gd2FfY3R4X3N0YXJ0KHdhX2N0eCwgKm9mZnNldCwgQ0FD SEVMSU5FX0RXT1JEUyk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX0JBVENIX0JV RkZFUl9FTkQpOworCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKIAotCXJldHVybiB3 YV9jdHhfZW5kKHdhX2N0eCwgKm9mZnNldCA9IGluZGV4LCAxKTsKKwlyZXR1cm4gYmF0Y2g7CiB9 CiAKLXN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eF9vYmooc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCB1MzIgc2l6ZSkKKyNkZWZpbmUgQ1RYX1dBX0JCX09CSl9TSVpFIChQQUdFX1NJ WkUpCisKK3N0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKIAlpbnQgZXJyOwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0 ZShlbmdpbmUtPmk5MTUsIFBBR0VfQUxJR04oc2l6ZSkpOworCW9iaiA9IGk5MTVfZ2VtX29iamVj dF9jcmVhdGUoZW5naW5lLT5pOTE1LCBDVFhfV0FfQkJfT0JKX1NJWkUpOwogCWlmIChJU19FUlIo b2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIApAQCAtMTE2NSw4MCArMTA5MCw2NiBAQCBz dGF0aWMgaW50IGxyY19zZXR1cF93YV9jdHhfb2JqKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyIHNpemUpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbHJjX2Rlc3Ry b3lfd2FfY3R4X29iaihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9p ZCBscmNfZGVzdHJveV93YV9jdHgoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewog CWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZlbmdpbmUtPndhX2N0eC52bWEpOwogfQogCit0 eXBlZGVmIHUzMiAqKCp3YV9iYl9mdW5jX3QpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwgdTMyICpiYXRjaCk7CisKIHN0YXRpYyBpbnQgaW50ZWxfaW5pdF93b3JrYXJvdW5kX2JiKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fy b3VuZHMgKndhX2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKLQl1aW50MzJfdCAqYmF0Y2g7Ci0JdWlu dDMyX3Qgb2Zmc2V0OworCXN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfYmJbMl0gPSB7ICZ3YV9j dHgtPmluZGlyZWN0X2N0eCwKKwkJCQkJICAgICZ3YV9jdHgtPnBlcl9jdHggfTsKKwl3YV9iYl9m dW5jX3Qgd2FfYmJfZlsyXTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1MzIgKmJhdGNoLCAqYmF0 Y2hfcHRyOworCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKLQlXQVJOX09OKGVuZ2luZS0+ aWQgIT0gUkNTKTsKKwlpZiAoV0FSTl9PTihlbmdpbmUtPmlkICE9IFJDUyB8fCAhZW5naW5lLT5z Y3JhdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiB1cGRhdGUgdGhpcyB3aGVuIFdBIGZv ciBoaWdoZXIgR2VuIGFyZSBhZGRlZCAqLwotCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ IDkpIHsKLQkJRFJNX0VSUk9SKCJXQSBiYXRjaCBidWZmZXIgaXMgbm90IGluaXRpYWxpemVkIGZv ciBHZW4lZFxuIiwKLQkJCSAgSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOworCXN3aXRjaCAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKKwljYXNlIDk6CisJCXdhX2JiX2ZbMF0gPSBnZW45X2lu aXRfaW5kaXJlY3RjdHhfYmI7CisJCXdhX2JiX2ZbMV0gPSBnZW45X2luaXRfcGVyY3R4X2JiOwor CQlicmVhazsKKwljYXNlIDg6CisJCXdhX2JiX2ZbMF0gPSBnZW44X2luaXRfaW5kaXJlY3RjdHhf YmI7CisJCXdhX2JiX2ZbMV0gPSBnZW44X2luaXRfcGVyY3R4X2JiOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOwogCQlyZXR1cm4g MDsKIAl9CiAKLQkvKiBzb21lIFdBIHBlcmZvcm0gd3JpdGVzIHRvIHNjcmF0Y2ggcGFnZSwgZW5z dXJlIGl0IGlzIHZhbGlkICovCi0JaWYgKCFlbmdpbmUtPnNjcmF0Y2gpIHsKLQkJRFJNX0VSUk9S KCJzY3JhdGNoIHBhZ2Ugbm90IGFsbG9jYXRlZCBmb3IgJXNcbiIsIGVuZ2luZS0+bmFtZSk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldCA9IGxyY19zZXR1cF93YV9jdHhfb2JqKGVuZ2lu ZSwgUEFHRV9TSVpFKTsKKwlyZXQgPSBscmNfc2V0dXBfd2FfY3R4KGVuZ2luZSk7CiAJaWYgKHJl dCkgewogCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gc2V0dXAgY29udGV4dCBXQSBwYWdl OiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlwYWdlID0gaTkxNV9nZW1fb2Jq ZWN0X2dldF9kaXJ0eV9wYWdlKHdhX2N0eC0+dm1hLT5vYmosIDApOwotCWJhdGNoID0ga21hcF9h dG9taWMocGFnZSk7Ci0Jb2Zmc2V0ID0gMDsKLQotCWlmIChJU19HRU44KGVuZ2luZS0+aTkxNSkp IHsKLQkJcmV0ID0gZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKGVuZ2luZSwKLQkJCQkJICAgICAg ICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwKLQkJCQkJICAgICAgIGJhdGNoLAotCQkJCQkgICAgICAg Jm9mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwliYXRjaCA9IGJhdGNoX3B0ciA9 IGttYXBfYXRvbWljKHBhZ2UpOwogCi0JCXJldCA9IGdlbjhfaW5pdF9wZXJjdHhfYmIoZW5naW5l LAotCQkJCQkgICZ3YV9jdHgtPnBlcl9jdHgsCi0JCQkJCSAgYmF0Y2gsCi0JCQkJCSAgJm9mZnNl dCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKElTX0dFTjkoZW5naW5l LT5pOTE1KSkgewotCQlyZXQgPSBnZW45X2luaXRfaW5kaXJlY3RjdHhfYmIoZW5naW5lLAotCQkJ CQkgICAgICAgJndhX2N0eC0+aW5kaXJlY3RfY3R4LAotCQkJCQkgICAgICAgYmF0Y2gsCi0JCQkJ CSAgICAgICAmb2Zmc2V0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCi0JCXJldCA9IGdl bjlfaW5pdF9wZXJjdHhfYmIoZW5naW5lLAotCQkJCQkgICZ3YV9jdHgtPnBlcl9jdHgsCi0JCQkJ CSAgYmF0Y2gsCi0JCQkJCSAgJm9mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwkv KgorCSAqIEVtaXQgdGhlIHR3byB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlcnMsIHJlY29yZGluZyB0 aGUgb2Zmc2V0IGZyb20gdGhlCisJICogc3RhcnQgb2YgdGhlIHdvcmthcm91bmQgYmF0Y2ggYnVm ZmVyIG9iamVjdCBmb3IgZWFjaCBhbmQgdGhlaXIKKwkgKiByZXNwZWN0aXZlIHNpemVzLgorCSAq LworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdhX2JiX2YpOyBpKyspIHsKKwkJd2FfYmJb aV0tPm9mZnNldCA9IEFMSUdOKGJhdGNoX3B0ciAtIGJhdGNoLCBDQUNIRUxJTkVfRFdPUkRTKTsK KwkJYmF0Y2hfcHRyID0gd2FfYmJfZltpXShlbmdpbmUsIGJhdGNoX3B0cik7CisJCXdhX2JiW2ld LT5zaXplID0gYmF0Y2hfcHRyIC0gJmJhdGNoW3dhX2JiW2ldLT5vZmZzZXRdOwogCX0KIAotb3V0 OgorCUJVR19PTihiYXRjaF9wdHIgLSBiYXRjaCA+IENUWF9XQV9CQl9PQkpfU0laRSAvIHNpemVv Zih1MzIpKTsKKwogCWt1bm1hcF9hdG9taWMoYmF0Y2gpOwotCWlmIChyZXQpCi0JCWxyY19kZXN0 cm95X3dhX2N0eF9vYmooZW5naW5lKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAK IHN0YXRpYyB1MzIgcG9ydF9zZXFubyhzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCkKQEAgLTE2 ODUsNyArMTU5Niw3IEBAIHZvaWQgaW50ZWxfbG9naWNhbF9yaW5nX2NsZWFudXAoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiAJaW50ZWxfZW5naW5lX2NsZWFudXBfY29tbW9uKGVu Z2luZSk7CiAKLQlscmNfZGVzdHJveV93YV9jdHhfb2JqKGVuZ2luZSk7CisJbHJjX2Rlc3Ryb3lf d2FfY3R4KGVuZ2luZSk7CiAJZW5naW5lLT5pOTE1ID0gTlVMTDsKIAlkZXZfcHJpdi0+ZW5naW5l W2VuZ2luZS0+aWRdID0gTlVMTDsKIAlrZnJlZShlbmdpbmUpOwotLSAKMi45LjMKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=