From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vidya Srinivas Subject: [PATCH 2/8] drm/i915: Add render decompression support Date: Wed, 7 Jun 2017 17:10:58 +0530 Message-ID: <1496835664-13656-3-git-send-email-vidya.srinivas@intel.com> References: <1496811086-28706-1-git-send-email-vidya.srinivas@intel.com> <1496835664-13656-1-git-send-email-vidya.srinivas@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id C478C6E234 for ; Wed, 7 Jun 2017 11:33:52 +0000 (UTC) In-Reply-To: <1496835664-13656-1-git-send-email-vidya.srinivas@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 Cc: Ben Widawsky , Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClNL TCsgZGlzcGxheSBlbmdpbmUgY2FuIHNjYW4gb3V0IGNlcnRhaW4ga2luZHMgb2YgY29tcHJlc3Nl ZCBzdXJmYWNlcwpwcm9kdWNlZCBieSB0aGUgcmVuZGVyIGVuZ2luZS4gVGhpcyBpbnZvbHZlZCB0 ZWxsaW5nIHRoZSBkaXNwbGF5IGVuZ2luZQp0aGUgbG9jYXRpb24gb2YgdGhlIGNvbG9yIGNvbnRy b2wgc3VyZmFlIChDQ1MpIHdoaWNoIGRlc2NyaWJlcwp3aGljaCBwYXJ0cyBvZiB0aGUgbWFpbiBz dXJmYWNlIGFyZSBjb21wcmVzc2VkIGFuZCB3aGljaCBhcmUgbm90LiBUaGUKbG9jYXRpb24gb2Yg Q0NTIGlzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBqdXN0IGFub3RoZXIgcGxhbmUgd2l0aCBp dHMKb3duIG9mZnNldC4KCkFkZCB0aGUgcmVxdWlyZWQgc3R1ZmYgdG8gdmFsaWRhdGUgdGhlIHVz ZXIgcHJvdmlkZWQgQVVYIHBsYW5lIG1ldGFkYXRhCmFuZCBjb252ZXJ0IHRoZSB1c2VyIHByb3Zp ZGVkIGxpbmVhciBvZmZzZXQgaW50byBzb21ldGhpbmcgdGhlIGhhcmR3YXJlCmNhbiBjb25zdW1l LgoKRHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb25zIHdlIHJlcXVpcmUgdGhhdCB0aGUgbWFpbiBz dXJmYWNlIGFuZAp0aGUgQVVYIHN1cmZhY2UgKENDUykgYmUgcGFydCBvZiB0aGUgc2FtZSBiby4g VGhlIGhhcmR3YXJlIGFsc28KbWFrZXMgbGlmZSBoYXJkIGJ5IG5vdCBhbGxvd2luZyB5b3UgdG8g cHJvdmlkZSBzZXBhcmF0ZSB4L3kgb2Zmc2V0cwpmb3IgdGhlIG1haW4gYW5kIEFVWCBzdXJmYWNl cyAoZXhjcGV0IHdpdGggTlYxMiksIHNvIGZpbmRpbmcgc3VpdGFibGUKb2Zmc2V0cyBmb3IgYm90 aCByZXF1aXJlcyBhIGJpdCBvZiB3b3JrLiBBc3N1bWluZyB3ZSBzdGlsbCB3YW50IGtlZXAKcGxh eWluZyB0cmlja3Mgd2l0aCB0aGUgb2Zmc2V0cy4gSSd2ZSBqdXN0IGdvbmUgd2l0aCBhIGR1bWIg InNlYXJjaApiYWNrd2FyZCBmb3Igc3VpdGFibGUgb2Zmc2V0cyIgYXBwcm9hY2gsIHdoaWNoIGlz IGZhciBmcm9tIG9wdGltYWwsCgkJIGJ1dCBpdCB3b3Jrcy4KCgkJIEFsc28gbm90IGFsbCBwbGFu ZXMgd2lsbCBiZSBjYXBhYmxlIG9mIHNjYW5uaW5nIG91dCBjb21wcmVzc2VkIHN1cmZhY2VzLAoJ CSBhbmQgZWcuIDkwLzI3MCBkZWdyZWUgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBjb21i aW5hdGlvbiB3aXRoCgkJIGRlY29tcHJlc3Npb24gZWl0aGVyLgoKCQkgVGhpcyBwYXRjaCBtYXkg Y29udGFpbiB3b3JrIGZyb20gYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBwZW9wbGU6CgkJICogVmFu ZGFuYSBLYW5uYW4gPHZhbmRhbmEua2FubmFuQGludGVsLmNvbT4KCQkgKiBEYW5pZWwgVmV0dGVy IDxkYW5pZWxAZmZ3bGwuY2g+CgkJICogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgoK CXYyOiBEZWFsIHdpdGggZGlzcGxheSB3b3JrYXJvdW5kcyAwMzkwLCAwNTMxLCAxMTI1IChQYXVs bykKdjM6IFByZXRlbmQgQ0NTIHRpbGVzIGFyZSByZWd1bGFyIDEyOCBieXRlIHdpZGUgWSB0aWxl cyAoSmFzb24pCglQdXQgdGhlIEFVWCByZWdpc3RlciBkZWZpbmVzIHRvIHRoZSBjb3JyZWN0IHBs YWNlCglGaXggdXAgdGhlIHNsaWdodGx5IGJvZ3VzIHJvdGF0aW9uIGNoZWNrCgl2NDogVXNlIEk5 MTVfV1JJVEVfRlcoKSBkdWUgdG8gcGxhbmUgdXBkYXRlIGxvY2tpbmcgY2hhbmdlcwpzL3JldHVy biAtRUlOVkFML2dvdG8gZXJyLyBpbiBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KCkKCUVsaW1pbmF0 ZSBhIGJ1bmNoIGhhcmRjb2RlZCBudW1iZXJzIGluIENDUyBjb2RlCgpDYzogUGF1bG8gWmFub25p IDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3 bGwuY2g+CkNjOiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+CkNjOiBKYXNvbiBFa3N0 cmFuZCA8amFzb25Aamxla3N0cmFuZC5uZXQ+Ckxpbms6IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVk ZXNrdG9wLm9yZy9wYXRjaC8xNDU0MDUvClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBCZW4gV2lkYXdza3kgPGJl bkBid2lkYXdzay5uZXQ+ICh2MSkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o ICAgICAgfCAgMjMgKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwg MjQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jICAgICAgfCAgMjkgKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3Nwcml0ZS5jICB8ICAgNSArCiA0IGZpbGVzIGNoYW5nZWQsIDI3OSBpbnNlcnRpb25zKCsp LCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCBhYzBiZjIzLi44 OTkwZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTU5MDYsNiArNTkwNiwxMCBAQCBl bnVtIHsKICNkZWZpbmUgX1BMQU5FX0tFWU1TS18yX0EJCQkweDcwMjk4CiAjZGVmaW5lIF9QTEFO RV9LRVlNQVhfMV9BCQkJMHg3MDFhMAogI2RlZmluZSBfUExBTkVfS0VZTUFYXzJfQQkJCTB4NzAy YTAKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNUXzFfQQkJCTB4NzAxYzAKKyNkZWZpbmUgX1BMQU5F X0FVWF9ESVNUXzJfQQkJCTB4NzAyYzAKKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZTRVRfMV9BCQkJ MHg3MDFjNAorI2RlZmluZSBfUExBTkVfQVVYX09GRlNFVF8yX0EJCQkweDcwMmM0CiAjZGVmaW5l IF9QTEFORV9DT0xPUl9DVExfMV9BCQkJMHg3MDFDQyAvKiBHTEsrICovCiAjZGVmaW5lIF9QTEFO RV9DT0xPUl9DVExfMl9BCQkJMHg3MDJDQyAvKiBHTEsrICovCiAjZGVmaW5lIF9QTEFORV9DT0xP Ul9DVExfM19BCQkJMHg3MDNDQyAvKiBHTEsrICovCkBAIC02MDEyLDYgKzYwMTYsMjQgQEAgZW51 bSB7CiAjZGVmaW5lIFBMQU5FX05WMTJfQlVGX0NGRyhwaXBlLCBwbGFuZSkJXAogCV9NTUlPX1BM QU5FKHBsYW5lLCBfUExBTkVfTlYxMl9CVUZfQ0ZHXzEocGlwZSksIF9QTEFORV9OVjEyX0JVRl9D RkdfMihwaXBlKSkKIAorI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMV9CCQkweDcxMWMwCisjZGVm aW5lIF9QTEFORV9BVVhfRElTVF8yX0IJCTB4NzEyYzAKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNU XzEocGlwZSkgXAorCQkJX1BJUEUocGlwZSwgX1BMQU5FX0FVWF9ESVNUXzFfQSwgX1BMQU5FX0FV WF9ESVNUXzFfQikKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNUXzIocGlwZSkgXAorCQkJX1BJUEUo cGlwZSwgX1BMQU5FX0FVWF9ESVNUXzJfQSwgX1BMQU5FX0FVWF9ESVNUXzJfQikKKyNkZWZpbmUg UExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmUpICAgICBcCisJX01NSU9fUExBTkUocGxhbmUsIF9Q TEFORV9BVVhfRElTVF8xKHBpcGUpLCBfUExBTkVfQVVYX0RJU1RfMihwaXBlKSkKKworI2RlZmlu ZSBfUExBTkVfQVVYX09GRlNFVF8xX0IJCTB4NzExYzQKKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZT RVRfMl9CCQkweDcxMmM0CisjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzEocGlwZSkgICAgICAg XAorCQlfUElQRShwaXBlLCBfUExBTkVfQVVYX09GRlNFVF8xX0EsIF9QTEFORV9BVVhfT0ZGU0VU XzFfQikKKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZTRVRfMihwaXBlKSAgICAgICBcCisJCV9QSVBF KHBpcGUsIF9QTEFORV9BVVhfT0ZGU0VUXzJfQSwgX1BMQU5FX0FVWF9PRkZTRVRfMl9CKQorI2Rl ZmluZSBQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lKSAgIFwKKwlfTU1JT19QTEFORShwbGFu ZSwgX1BMQU5FX0FVWF9PRkZTRVRfMShwaXBlKSwgX1BMQU5FX0FVWF9PRkZTRVRfMihwaXBlKSkK KwogI2RlZmluZSBfUExBTkVfQ09MT1JfQ1RMXzFfQgkJCTB4NzExQ0MKICNkZWZpbmUgX1BMQU5F X0NPTE9SX0NUTF8yX0IJCQkweDcxMkNDCiAjZGVmaW5lIF9QTEFORV9DT0xPUl9DVExfM19CCQkJ MHg3MTNDQwpAQCAtNjQ5NSw2ICs2NTE3LDcgQEAgZW51bSB7CiAjIGRlZmluZSBDSElDS0VOM19E R01HX0RPTkVfRklYX0RJU0FCTEUJCSgxIDw8IDIpCiAKICNkZWZpbmUgQ0hJQ0tFTl9QQVIxXzEJ CV9NTUlPKDB4NDIwODApCisjZGVmaW5lICBTS0xfUkNfSEFTSF9PVVRTSURFCSgxIDw8IDE1KQog I2RlZmluZSAgRFBBX01BU0tfVkJMQU5LX1NSRAkoMSA8PCAxNSkKICNkZWZpbmUgIEZPUkNFX0FS Ql9JRExFX1BMQU5FUwkoMSA8PCAxNCkKICNkZWZpbmUgIFNLTF9FRFBfUFNSX0ZJWF9SRFdSQVAJ KDEgPDwgMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBhM2ZkYmEyLi4x ZGU2NzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0yMDA0LDExICsy MDA0LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9zaXplKGNvbnN0IHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCXJldHVybiAxMjg7CiAJCWVsc2UKIAkJ CXJldHVybiA1MTI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJCWlmIChw bGFuZSA9PSAxKQorCQkJcmV0dXJuIDEyODsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAkJaWYgKElTX0dFTjIoZGV2X3ByaXYpIHx8IEhBU18x MjhfQllURV9ZX1RJTElORyhkZXZfcHJpdikpCiAJCQlyZXR1cm4gMTI4OwogCQllbHNlCiAJCQly ZXR1cm4gNTEyOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJaWYgKHBs YW5lID09IDEpCisJCQlyZXR1cm4gMTI4OworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEk5 MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJc3dpdGNoIChjcHApIHsKIAkJY2FzZSAxOgpAQCAt MjExNSw3ICsyMTIzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdubWVu dChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwogCiAJLyogQVVYX0RJU1QgbmVlZHMg b25seSA0SyBhbGlnbm1lbnQgKi8KLQlpZiAoZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JN QVRfTlYxMiAmJiBwbGFuZSA9PSAxKQorCWlmIChwbGFuZSA9PSAxKQogCQlyZXR1cm4gNDA5NjsK IAogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CkBAIC0yMTI1LDYgKzIxMzMsOCBAQCBzdGF0aWMg dW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAogCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQogCQkJcmV0dXJuIDI1 NiAqIDEwMjQ7CiAJCXJldHVybiAwOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT OgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKIAljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEOgogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgogCQlyZXR1cm4g MSAqIDEwMjQgKiAxMDI0OwpAQCAtMjQzMiw2ICsyNDQyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGlu dCBpbnRlbF9mYl9tb2RpZmllcl90b190aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCiAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKIAkJcmV0dXJuIEk5MTVfVElMSU5HX1g7CiAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0NDUzoKIAkJcmV0dXJuIEk5MTVfVElMSU5HX1k7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIEk5MTVf VElMSU5HX05PTkU7CkBAIC0yNDk3LDYgKzI1MDgsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBp bnRlbF9mYl9tb2RpZmllcl90b190aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCiAKIAkJaW50 ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwogCisJCWlmICgoZmItPm1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCQkgICAgIGZiLT5tb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKSAmJiBpID09IDEpIHsKKwkJCWludCBoc3Vi ID0gZmItPmZvcm1hdC0+aHN1YjsKKwkJCWludCB2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsKKwkJ CWludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKKwkJCWludCBtYWluX3gsIG1haW5feTsKKwkJ CWludCBjY3NfeCwgY2NzX3k7CisKKwkJCWludGVsX3RpbGVfZGltcyhmYiwgaSwgJnRpbGVfd2lk dGgsICZ0aWxlX2hlaWdodCk7CisKKwkJCWNjc194ID0gKHggKiBoc3ViKSAlICh0aWxlX3dpZHRo ICogaHN1Yik7CisJCQljY3NfeSA9ICh5ICogdnN1YikgJSAodGlsZV9oZWlnaHQgKiB2c3ViKTsK KwkJCW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbMF0ueCAlICh0aWxlX3dpZHRoICogaHN1Yik7 CisJCQltYWluX3kgPSBpbnRlbF9mYi0+bm9ybWFsWzBdLnkgJSAodGlsZV9oZWlnaHQgKiB2c3Vi KTsKKworCQkJLyoKKwkJCSAqIENDUyBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0IHJl Z2lzdGVyLCBzbyB0aGUgaW50cmEgQ0NTIHRpbGUKKwkJCSAqIHgveSBvZmZzZXRzIG11c3QgbWF0 Y2ggYmV0d2VlbiBDQ1MgYW5kIHRoZSBtYWluIHN1cmZhY2UuCisJCQkgKi8KKwkJCWlmIChtYWlu X3ggIT0gY2NzX3ggfHwgbWFpbl95ICE9IGNjc195KSB7CisJCQkJRFJNX0RFQlVHX0tNUygiQmFk IENDUyB4L3kgKG1haW4gJWQsJWQgY2NzICVkLCVkKSBmdWxsIChtYWluICVkLCVkIGNjcyAlZCwl ZClcbiIsCisJCQkJCSAgICAgIG1haW5feCwgbWFpbl95LAorCQkJCQkgICAgICBjY3NfeCwgY2Nz X3ksCisJCQkJCSAgICAgIGludGVsX2ZiLT5ub3JtYWxbMF0ueCwKKwkJCQkJICAgICAgaW50ZWxf ZmItPm5vcm1hbFswXS55LAorCQkJCQkgICAgICB4LCB5KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsK KwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIFRoZSBmZW5jZSAoaWYgdXNlZCkgaXMgYWxpZ25lZCB0 byB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdAogCQkgKiBzbyBoYXZpbmcgdGhlIGZyYW1lYnVmZmVy IHdyYXAgYXJvdW5kIGFjcm9zcyB0aGUgZWRnZSBvZiB0aGUKQEAgLTI4NzEsNiArMjkxMiw5IEBA IHN0YXRpYyBpbnQgc2tsX21heF9wbGFuZV93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgaW50IHBsYW5lLAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURf Q0NTOgorCQkvKiBGSVhNRSBBVVggcGxhbmU/ICovCiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRDoKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJc3dpdGNoIChjcHApIHsK QEAgLTI4OTMsNiArMjkzNyw0NCBAQCBzdGF0aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgoY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKIAlyZXR1cm4gMjA0ODsK IH0KIAorc3RhdGljIGJvb2wgc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkJCSAgIGludCBtYWluX3gsIGludCBt YWluX3ksIHUzMiBtYWluX29mZnNldCkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOworCWludCBoc3ViID0gZmItPmZvcm1hdC0+aHN1 YjsKKwlpbnQgdnN1YiA9IGZiLT5mb3JtYXQtPnZzdWI7CisJaW50IGF1eF94ID0gcGxhbmVfc3Rh dGUtPmF1eC54OworCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5hdXgueTsKKwl1MzIgYXV4X29m ZnNldCA9IHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0OworCXUzMiBhbGlnbm1lbnQgPSBpbnRlbF9z dXJmX2FsaWdubWVudChmYiwgMSk7CisKKwl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNl dCAmJiBhdXhfeSA8PSBtYWluX3kpIHsKKwkJaW50IHgsIHk7CisKKwkJaWYgKGF1eF94ID09IG1h aW5feCAmJiBhdXhfeSA9PSBtYWluX3kpCisJCQlicmVhazsKKworCQlpZiAoYXV4X29mZnNldCA9 PSAwKQorCQkJYnJlYWs7CisKKwkJeCA9IGF1eF94IC8gaHN1YjsKKwkJeSA9IGF1eF95IC8gdnN1 YjsKKwkJYXV4X29mZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBsYW5l X3N0YXRlLCAxLAorCQkJCQkJICAgICAgYXV4X29mZnNldCwgYXV4X29mZnNldCAtIGFsaWdubWVu dCk7CisJCWF1eF94ID0geCAqIGhzdWIgKyBhdXhfeCAlIGhzdWI7CisJCWF1eF95ID0geSAqIHZz dWIgKyBhdXhfeSAlIHZzdWI7CisJfQorCisJaWYgKGF1eF94ICE9IG1haW5feCB8fCBhdXhfeSAh PSBtYWluX3kpCisJCXJldHVybiBmYWxzZTsKKworCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0g YXV4X29mZnNldDsKKwlwbGFuZV9zdGF0ZS0+YXV4LnggPSBhdXhfeDsKKwlwbGFuZV9zdGF0ZS0+ YXV4LnkgPSBhdXhfeTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgaW50IHNrbF9jaGVj a19tYWluX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsK IAljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZi OwpAQCAtMjkzNSw3ICszMDE3LDcgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNl KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAKIAkJd2hpbGUgKCh4ICsg dykgKiBjcHAgPiBmYi0+cGl0Y2hlc1swXSkgewogCQkJaWYgKG9mZnNldCA9PSAwKSB7Ci0JCQkJ RFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9m ZnNldFxuIik7CisJCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlz cGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOwogCQkJCXJldHVybiAtRUlO VkFMOwogCQkJfQogCkBAIC0yOTQ0LDYgKzMwMjYsMjYgQEAgc3RhdGljIGludCBza2xfY2hlY2tf bWFpbl9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJCX0K IAl9CiAKKwkvKgorCSAqIENDUyBBVVggc3VyZmFjZSBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kg b2Zmc2V0cywgd2UgbXVzdCBtYWtlIHN1cmUKKwkgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4g c3VyZmFjZSB4L3kgb2Zmc2V0cy4KKwkgKi8KKwlpZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCSAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEX0NDUykgeworCQl3aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29yZGlu YXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwgb2Zmc2V0KSkgeworCQkJaWYgKG9mZnNldCA9PSAwKQor CQkJCWJyZWFrOworCisJCQlvZmZzZXQgPSBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoJngsICZ5 LCBwbGFuZV9zdGF0ZSwgMCwKKwkJCQkJCQkgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsK KwkJfQorCisJCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5hdXgueCB8fCB5ICE9IHBsYW5lX3N0YXRl LT5hdXgueSkgeworCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlz cGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJfQorCiAJcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0ID0gb2Zmc2V0OwogCXBsYW5lX3N0 YXRlLT5tYWluLnggPSB4OwogCXBsYW5lX3N0YXRlLT5tYWluLnkgPSB5OwpAQCAtMjk4MCw2ICsz MDgyLDQ5IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlu dCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRv X2ludGVsX2NydGMocGxhbmVfc3RhdGUtPmJhc2UuY3J0Yyk7CisJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKKwlpbnQgc3JjX3ggPSBwbGFu ZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7CisJaW50IHNyY195ID0gcGxhbmVfc3RhdGUtPmJh c2Uuc3JjLnkxID4+IDE2OworCWludCBoc3ViID0gZmItPmZvcm1hdC0+aHN1YjsKKwlpbnQgdnN1 YiA9IGZiLT5mb3JtYXQtPnZzdWI7CisJaW50IHggPSBzcmNfeCAvIGhzdWI7CisJaW50IHkgPSBz cmNfeSAvIHZzdWI7CisJdTMyIG9mZnNldDsKKworCXN3aXRjaCAocGxhbmUtPmlkKSB7CisJY2Fz ZSBQTEFORV9QUklNQVJZOgorCWNhc2UgUExBTkVfU1BSSVRFMDoKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydCBvbmx5IG9uIHBsYW5lIDEgYW5kIDJcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3J0Yy0+cGlwZSA9PSBQSVBFX0MpIHsK KwkJRFJNX0RFQlVHX0tNUygiTm8gUkMgc3VwcG9ydCBvbiBwaXBlIENcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlpZiAocGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24gJiB+KERSTV9N T0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkpIHsKKwkJRFJNX0RFQlVHX0tNUygi UkMgc3VwcG9ydCBvbmx5IHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uICV4XG4iLAorCQkJICAg ICAgcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCAxKTsKKwlvZmZzZXQg PSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOworCisJ cGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmF1eC54ID0g eCAqIGhzdWIgKyBzcmNfeCAlIGhzdWI7CisJcGxhbmVfc3RhdGUtPmF1eC55ID0geSAqIHZzdWIg KyBzcmNfeSAlIHZzdWI7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHNrbF9jaGVja19wbGFuZV9z dXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiB7CiAJY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKQEAgLTMw MDMsNiArMzE0OCwxMSBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAkJcmV0ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1 cmZhY2UocGxhbmVfc3RhdGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKKwl9IGVsc2Ug aWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICAg ZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpIHsKKwkJcmV0ID0g c2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJCWlmIChyZXQpCisJCQly ZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gfjB4ZmZm OwogCQlwbGFuZV9zdGF0ZS0+YXV4LnggPSAwOwpAQCAtMzMwOSw4ICszNDU5LDEyIEBAIHN0YXRp YyB1MzIgc2tsX3BsYW5lX2N0bF90aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCiAJCXJldHVy biBQTEFORV9DVExfVElMRURfWDsKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgogCQly ZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1k7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9D Q1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9O X0VOQUJMRTsKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJcmV0dXJuIFBMQU5F X0NUTF9USUxFRF9ZRjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6CisJCXJl dHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEU7 CiAJZGVmYXVsdDoKIAkJTUlTU0lOR19DQVNFKGZiX21vZGlmaWVyKTsKIAl9CkBAIC0zMzgzLDYg KzM1MzcsNyBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCiAJdTMyIHBsYW5lX2N0bCA9IHBsYW5lX3N0YXRlLT5jdGw7 CiAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247CiAJ dTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKKwl1MzIgYXV4 X3N0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDEsIHJvdGF0aW9uKTsKIAl1MzIgc3VyZl9h ZGRyID0gcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0OwogCWludCBzY2FsZXJfaWQgPSBwbGFuZV9z dGF0ZS0+c2NhbGVyX2lkOwogCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5tYWluLng7CkBAIC0z NDE5LDYgKzM1NzQsMTAgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFu ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCUk5MTVfV1JJVEVfRlcoUExBTkVfT0ZGU0VU KHBpcGUsIHBsYW5lX2lkKSwgKHNyY195IDw8IDE2KSB8IHNyY194KTsKIAlJOTE1X1dSSVRFX0ZX KFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7CiAJSTkxNV9XUklURV9GVyhQ TEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKKwlJOTE1 X1dSSVRFX0ZXKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwKKwkJICAgICAgKHBsYW5l X3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1eF9zdHJpZGUpOworCUk5MTVfV1JJ VEVfRlcoUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJCSAgICAgIChwbGFuZV9z dGF0ZS0+YXV4LnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54KTsKIAogCWlmIChzY2FsZXJf aWQgPj0gMCkgewogCQl1aW50MzJfdCBwc19jdHJsID0gMDsKQEAgLTg0NDYsMTAgKzg2MDUsMTYg QEAgc3RhdGljIHZvaWQgc2t5bGFrZV9nZXRfcGZpdF9jb25maWcoc3RydWN0IGludGVsX2NydGMg KmNydGMsCiAJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwogCQlicmVh azsKIAljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgotCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRDsKKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJM RSkKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKKwkJZWxz ZQorCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7CiAJCWJyZWFrOwog CWNhc2UgUExBTkVfQ1RMX1RJTEVEX1lGOgotCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRUQ7CisJCWlmICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUp CisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOworCQllbHNl CisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CiAJCWJyZWFrOwog CWRlZmF1bHQ6CiAJCU1JU1NJTkdfQ0FTRSh0aWxpbmcpOwpAQCAtMTA1ODYsNyArMTA3NTEsNyBA QCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjLAogCXUzMiBjdGwsIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9u KTsKIAogCWN0bCA9IEk5MTVfUkVBRChQTEFORV9DVEwocGlwZSwgMCkpOwotCWN0bCAmPSB+UExB TkVfQ1RMX1RJTEVEX01BU0s7CisJY3RsICY9IH4oUExBTkVfQ1RMX1RJTEVEX01BU0sgfCBQTEFO RV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpOwogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CiAJ Y2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CiAJCWJyZWFrOwpAQCAtMTA1OTYsOSArMTA3NjEs MTUgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YywKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgogCQljdGwgfD0gUExBTkVf Q1RMX1RJTEVEX1k7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT OgorCQljdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExfREVDT01QUkVTU0lPTl9F TkFCTEU7CisJCWJyZWFrOwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgogCQljdGwg fD0gUExBTkVfQ1RMX1RJTEVEX1lGOwogCQlicmVhazsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1M6CisJCWN0bCB8PSBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExfREVD T01QUkVTU0lPTl9FTkFCTEU7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCU1JU1NJTkdfQ0FTRShm Yi0+bW9kaWZpZXIpOwogCX0KQEAgLTE0NDI5LDEwICsxNDYwMCwxMiBAQCBzdGF0aWMgaW50IGlu dGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiwK IAkJCQkgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKIHsKIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gJmludGVsX2ZiLT5iYXNlOwogCXN0cnVjdCBkcm1fZm9y bWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOwotCXUzMiBwaXRjaF9saW1pdCwgc3RyaWRlX2FsaWdu bWVudDsKKwl1MzIgcGl0Y2hfbGltaXQ7CiAJdW5zaWduZWQgaW50IHRpbGluZywgc3RyaWRlOwog CWludCByZXQgPSAtRUlOVkFMOworCWludCBpOwogCiAJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2Jq KTsKIAlvYmotPmZyYW1lYnVmZmVyX3JlZmVyZW5jZXMrKzsKQEAgLTE0NDYxLDYgKzE0NjM0LDE5 IEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZnJhbWVi dWZmZXIgKmludGVsX2ZiLAogCiAJLyogUGFzc2VkIGluIG1vZGlmaWVyIHNhbml0eSBjaGVja2lu Zy4gKi8KIAlzd2l0Y2ggKG1vZGVfY21kLT5tb2RpZmllclswXSkgeworCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoK KwkJc3dpdGNoIChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSODg4ODoKKwkJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQljYXNlIERSTV9GT1JNQVRf WFJHQjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydGVkIG9ubHkgd2l0aCBSR0I4ODg4IGZv cm1hdHNcbiIpOworCQkJZ290byBlcnI7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxF RDoKIAkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7CkBAIC0xNDU2NSwyNSArMTQ3NTEs NDYgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBpbnRlbF9mcmFt ZWJ1ZmZlciAqaW50ZWxfZmIsCiAJaWYgKG1vZGVfY21kLT5vZmZzZXRzWzBdICE9IDApCiAJCWdv dG8gZXJyOwogCi0JZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZkZXZfcHJpdi0+ZHJt LAotCQkJCSAgICAgICAmaW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKKwlkcm1faGVscGVyX21v ZGVfZmlsbF9mYl9zdHJ1Y3QoJmRldl9wcml2LT5kcm0sIGZiLCBtb2RlX2NtZCk7CiAKLQlzdHJp ZGVfYWxpZ25tZW50ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudCgmaW50ZWxfZmItPmJhc2Us IDApOwotCWlmIChtb2RlX2NtZC0+cGl0Y2hlc1swXSAmIChzdHJpZGVfYWxpZ25tZW50IC0gMSkp IHsKLQkJRFJNX0RFQlVHX0tNUygicGl0Y2ggKCVkKSBtdXN0IGJlIGF0IGxlYXN0ICV1IGJ5dGUg YWxpZ25lZFxuIiwKLQkJCSAgICAgIG1vZGVfY21kLT5waXRjaGVzWzBdLCBzdHJpZGVfYWxpZ25t ZW50KTsKLQkJZ290byBlcnI7CisJZm9yIChpID0gMDsgaSA8IGZiLT5mb3JtYXQtPm51bV9wbGFu ZXM7IGkrKykgeworCQl1MzIgc3RyaWRlX2FsaWdubWVudDsKKworCQlpZiAobW9kZV9jbWQtPmhh bmRsZXNbaV0gIT0gbW9kZV9jbWQtPmhhbmRsZXNbMF0pIHsKKwkJCURSTV9ERUJVR19LTVMoImJh ZCBwbGFuZSAlZCBoYW5kbGVcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlz dHJpZGVfYWxpZ25tZW50ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChmYiwgaSk7CisKKwkJ LyoKKwkJICogRGlzcGxheSBXQSAjMDUzMTogc2tsLGJ4dCxrYmwsZ2xrCisJCSAqCisJCSAqIFJl bmRlciBkZWNvbXByZXNzaW9uIGFuZCBwbGFuZSB3aWR0aCA+IDM4NDAKKwkJICogY29tYmluZWQg d2l0aCBob3Jpem9udGFsIHBhbm5pbmcgcmVxdWlyZXMgdGhlCisJCSAqIHBsYW5lIHN0cmlkZSB0 byBiZSBhIG11bHRpcGxlIG9mIDQuIFdlJ2xsIGp1c3QKKwkJICogcmVxdWlyZSB0aGUgZW50aXJl IGZiIHRvIGFjY29tbW9kYXRlIHRoYXQgdG8gYXZvaWQKKwkJICogcG90ZW50aWFsIHJ1bnRpbWUg ZXJyb3JzIGF0IHBsYW5lIGNvbmZpZ3VyYXRpb24gdGltZS4KKwkJICovCisJCWlmIChJU19HRU45 KGRldl9wcml2KSAmJiBpID09IDAgJiYgZmItPndpZHRoID4gMzg0MCAmJgorCQkgICAgKGZiLT5t b2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICAgICBmYi0+bW9k aWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykpCisJCQlzdHJpZGVfYWxpZ25t ZW50ICo9IDQ7CisKKwkJaWYgKGZiLT5waXRjaGVzW2ldICYgKHN0cmlkZV9hbGlnbm1lbnQgLSAx KSkgeworCQkJRFJNX0RFQlVHX0tNUygicGxhbmUgJWQgcGl0Y2ggKCVkKSBtdXN0IGJlIGF0IGxl YXN0ICV1IGJ5dGUgYWxpZ25lZFxuIiwKKwkJCQkgICAgICBpLCBmYi0+cGl0Y2hlc1tpXSwgc3Ry aWRlX2FsaWdubWVudCk7CisJCQlnb3RvIGVycjsKKwkJfQogCX0KIAogCWludGVsX2ZiLT5vYmog PSBvYmo7CiAKLQlyZXQgPSBpbnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9mYi0+ YmFzZSk7CisJcmV0ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2LCBmYik7CiAJaWYgKHJl dCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChvYmotPmJhc2Uu ZGV2LAotCQkJCSAgICZpbnRlbF9mYi0+YmFzZSwKLQkJCQkgICAmaW50ZWxfZmJfZnVuY3MpOwor CXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KCZkZXZfcHJpdi0+ZHJtLCBmYiwgJmludGVsX2Zi X2Z1bmNzKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZnJhbWVidWZmZXIgaW5pdCBmYWls ZWQgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXgg YWE5ZDhjZS4uNzk3OTI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCkBAIC02Miw2ICs2Miwy MCBAQCBzdGF0aWMgdm9pZCBnZW45X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAlJOTE1X1dSSVRFKENISUNLRU5fUEFSMV8xLAogCQkgICBJOTE1 X1JFQUQoQ0hJQ0tFTl9QQVIxXzEpIHwgU0tMX0VEUF9QU1JfRklYX1JEV1JBUCk7CiAKKwkvKgor CSAqIERpc3BsYXkgV0EjMDM5MDogc2tsLGJ4dCxrYmwsZ2xrCisJICoKKwkgKiBNdXN0IG1hdGNo IFNhbXBsZXIsIFBpeGVsIEJhY2sgRW5kLCBhbmQgTWVkaWEKKwkgKiAoMHhFMTk0IGJpdCA4LCAw eDcwMTQgYml0IDEzLCAweDREREMgYml0cyAyNyBhbmQgMzEpLgorCSAqCisJICogSW5jbHVkaW5n IGJpdHMgb3V0c2lkZSB0aGUgcGFnZSBpbiB0aGUgaGFzaCB3b3VsZAorCSAqIHJlcXVpcmUgMiAo b3IgND8pIE1pQiBhbGlnbm1lbnQgb2YgcmVzb3VyY2VzLiBKdXN0CisJICogYXNzdW1lIHRoZSBk ZWZhdWwgaGFzaGluZyBtb2RlIHdoaWNoIG9ubHkgdXNlcyBiaXRzCisJICogd2l0aGluIHRoZSBw YWdlLgorCSAqLworCUk5MTVfV1JJVEUoQ0hJQ0tFTl9QQVIxXzEsCisJCSAgIEk5MTVfUkVBRChD SElDS0VOX1BBUjFfMSkgJiB+U0tMX1JDX0hBU0hfT1VUU0lERSk7CisKIAlJOTE1X1dSSVRFKEdF TjhfQ09ORklHMCwKIAkJICAgSTkxNV9SRUFEKEdFTjhfQ09ORklHMCkgfCBHRU45X0RFRkFVTFRf RklYRVMpOwogCkBAIC00MDcxLDcgKzQwODUsOSBAQCBpbnQgc2tsX2NoZWNrX3BpcGVfbWF4X3Bp eGVsX3JhdGUoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAKIAkvKiBGb3IgTm9uIFkt dGlsZSByZXR1cm4gOC1ibG9ja3MgKi8KIAlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEICYmCi0JICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRUQpCisJICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgJiYK KwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyAmJgorCSAg ICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykKIAkJcmV0dXJu IDg7CiAKIAkvKgpAQCAtNDQ1Niw3ICs0NDcyLDkgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9w bGFuZV93bShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXJldHVy biAwOwogCiAJeV90aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RCB8fAotCQkgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CisJCSAg ZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCB8fAorCQkgIGZiLT5tb2Rp ZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICBmYi0+bW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKIAl4X3RpbGVkID0gZmItPm1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwogCiAJLyogRGlzcGxheSBXQSAjMTE0MToga2Js LiAqLwpAQCAtNDU1MSw2ICs0NTY5LDEzIEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVf d20oY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJlc19saW5lcyA9 IGRpdl9yb3VuZF91cF9maXhlZDE2KHNlbGVjdGVkX3Jlc3VsdCwKIAkJCQkJIHBsYW5lX2Jsb2Nr c19wZXJfbGluZSk7CiAKKwkvKiBEaXNwbGF5IFdBICMxMTI1OiBza2wsYnh0LGtibCxnbGsgKi8K KwlpZiAobGV2ZWwgPT0gMCAmJgorCSAgICAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1MpKQorCQlyZXNfYmxvY2tzICs9IGZpeGVkXzE2XzE2X3RvX3UzMl9yb3VuZF91 cCh5X3RpbGVfbWluaW11bSk7CisKKwkvKiBEaXNwbGF5IFdBICMxMTI2OiBza2wsYnh0LGtibCxn bGsgKi8KIAlpZiAobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSA3KSB7CiAJCWlmICh5X3RpbGVkKSB7 CiAJCQlyZXNfYmxvY2tzICs9IGZpeGVkXzE2XzE2X3RvX3UzMl9yb3VuZF91cCh5X3RpbGVfbWlu aW11bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCmluZGV4IDBjNjUwYzIuLjNlNDU0 OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC0yNDQsNiArMjQ0LDcgQEAg dm9pZCBpbnRlbF9waXBlX3VwZGF0ZV9lbmQoc3RydWN0IGludGVsX2NydGMgKmNydGMsIHN0cnVj dCBpbnRlbF9mbGlwX3dvcmsgKndvcmsKIAl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPm1h aW4ub2Zmc2V0OwogCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJv dGF0aW9uOwogCXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAwLCByb3RhdGlvbik7 CisJdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAxLCByb3RhdGlvbik7CiAJ aW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC54MTsKIAlpbnQgY3J0Y195ID0gcGxh bmVfc3RhdGUtPmJhc2UuZHN0LnkxOwogCXVpbnQzMl90IGNydGNfdyA9IGRybV9yZWN0X3dpZHRo KCZwbGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwpAQCAtMjc4LDYgKzI3OSwxMCBAQCB2b2lkIGludGVs X3BpcGVfdXBkYXRlX2VuZChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yywgc3RydWN0IGludGVsX2Zs aXBfd29yayAqd29yawogCUk5MTVfV1JJVEVfRlcoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lk KSwgKHkgPDwgMTYpIHwgeCk7CiAJSTkxNV9XUklURV9GVyhQTEFORV9TVFJJREUocGlwZSwgcGxh bmVfaWQpLCBzdHJpZGUpOwogCUk5MTVfV1JJVEVfRlcoUExBTkVfU0laRShwaXBlLCBwbGFuZV9p ZCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7CisJSTkxNV9XUklURV9GVyhQTEFORV9BVVhfRElT VChwaXBlLCBwbGFuZV9pZCksCisJCSAgICAgIChwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCAtIHN1 cmZfYWRkcikgfCBhdXhfc3RyaWRlKTsKKwlJOTE1X1dSSVRFX0ZXKFBMQU5FX0FVWF9PRkZTRVQo cGlwZSwgcGxhbmVfaWQpLAorCQkgICAgICAocGxhbmVfc3RhdGUtPmF1eC55IDw8IDE2KSB8IHBs YW5lX3N0YXRlLT5hdXgueCk7CiAKIAkvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwogCWlmIChw bGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApIHsKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK