From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vidya Srinivas Subject: [PATCH 2/8] drm/i915: Add render decompression support Date: Tue, 11 Jul 2017 19:40:50 +0530 Message-ID: <1499782256-25664-3-git-send-email-vidya.srinivas@intel.com> References: <1499782256-25664-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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33FF46E2D9 for ; Tue, 11 Jul 2017 14:03:26 +0000 (UTC) In-Reply-To: <1499782256-25664-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+ClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBCZW4gV2lkYXdza3kg PGJlbkBid2lkYXdzay5uZXQ+ICh2MSkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oICAgICAgfCAgMjMgKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IHwgMjQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jICAgICAgfCAgMjkgKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3Nwcml0ZS5jICB8ICAgNSArCiA0IGZpbGVzIGNoYW5nZWQsIDI3OSBpbnNlcnRpb25z KCspLCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCBjNzEyZDAx Li5jZWE0Zjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTYxMDYsNiArNjEwNiwxMCBA QCBlbnVtIHsKICNkZWZpbmUgX1BMQU5FX0tFWU1TS18yX0EJCQkweDcwMjk4CiAjZGVmaW5lIF9Q TEFORV9LRVlNQVhfMV9BCQkJMHg3MDFhMAogI2RlZmluZSBfUExBTkVfS0VZTUFYXzJfQQkJCTB4 NzAyYTAKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNUXzFfQQkJCTB4NzAxYzAKKyNkZWZpbmUgX1BM QU5FX0FVWF9ESVNUXzJfQQkJCTB4NzAyYzAKKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZTRVRfMV9B CQkJMHg3MDFjNAorI2RlZmluZSBfUExBTkVfQVVYX09GRlNFVF8yX0EJCQkweDcwMmM0CiAjZGVm aW5lIF9QTEFORV9DT0xPUl9DVExfMV9BCQkJMHg3MDFDQyAvKiBHTEsrICovCiAjZGVmaW5lIF9Q TEFORV9DT0xPUl9DVExfMl9BCQkJMHg3MDJDQyAvKiBHTEsrICovCiAjZGVmaW5lIF9QTEFORV9D T0xPUl9DVExfM19BCQkJMHg3MDNDQyAvKiBHTEsrICovCkBAIC02MjEyLDYgKzYyMTYsMjQgQEAg ZW51bSB7CiAjZGVmaW5lIFBMQU5FX05WMTJfQlVGX0NGRyhwaXBlLCBwbGFuZSkJXAogCV9NTUlP X1BMQU5FKHBsYW5lLCBfUExBTkVfTlYxMl9CVUZfQ0ZHXzEocGlwZSksIF9QTEFORV9OVjEyX0JV Rl9DRkdfMihwaXBlKSkKIAorI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMV9CCQkweDcxMWMwCisj ZGVmaW5lIF9QTEFORV9BVVhfRElTVF8yX0IJCTB4NzEyYzAKKyNkZWZpbmUgX1BMQU5FX0FVWF9E SVNUXzEocGlwZSkgXAorCQkJX1BJUEUocGlwZSwgX1BMQU5FX0FVWF9ESVNUXzFfQSwgX1BMQU5F X0FVWF9ESVNUXzFfQikKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNUXzIocGlwZSkgXAorCQkJX1BJ UEUocGlwZSwgX1BMQU5FX0FVWF9ESVNUXzJfQSwgX1BMQU5FX0FVWF9ESVNUXzJfQikKKyNkZWZp bmUgUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmUpICAgICBcCisJX01NSU9fUExBTkUocGxhbmUs IF9QTEFORV9BVVhfRElTVF8xKHBpcGUpLCBfUExBTkVfQVVYX0RJU1RfMihwaXBlKSkKKworI2Rl ZmluZSBfUExBTkVfQVVYX09GRlNFVF8xX0IJCTB4NzExYzQKKyNkZWZpbmUgX1BMQU5FX0FVWF9P RkZTRVRfMl9CCQkweDcxMmM0CisjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzEocGlwZSkgICAg ICAgXAorCQlfUElQRShwaXBlLCBfUExBTkVfQVVYX09GRlNFVF8xX0EsIF9QTEFORV9BVVhfT0ZG U0VUXzFfQikKKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZTRVRfMihwaXBlKSAgICAgICBcCisJCV9Q SVBFKHBpcGUsIF9QTEFORV9BVVhfT0ZGU0VUXzJfQSwgX1BMQU5FX0FVWF9PRkZTRVRfMl9CKQor I2RlZmluZSBQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lKSAgIFwKKwlfTU1JT19QTEFORShw bGFuZSwgX1BMQU5FX0FVWF9PRkZTRVRfMShwaXBlKSwgX1BMQU5FX0FVWF9PRkZTRVRfMihwaXBl KSkKKwogI2RlZmluZSBfUExBTkVfQ09MT1JfQ1RMXzFfQgkJCTB4NzExQ0MKICNkZWZpbmUgX1BM QU5FX0NPTE9SX0NUTF8yX0IJCQkweDcxMkNDCiAjZGVmaW5lIF9QTEFORV9DT0xPUl9DVExfM19C CQkJMHg3MTNDQwpAQCAtNjY5NSw2ICs2NzE3LDcgQEAgZW51bSB7CiAjIGRlZmluZSBDSElDS0VO M19ER01HX0RPTkVfRklYX0RJU0FCTEUJCSgxIDw8IDIpCiAKICNkZWZpbmUgQ0hJQ0tFTl9QQVIx XzEJCV9NTUlPKDB4NDIwODApCisjZGVmaW5lICBTS0xfUkNfSEFTSF9PVVRTSURFCSgxIDw8IDE1 KQogI2RlZmluZSAgRFBBX01BU0tfVkJMQU5LX1NSRAkoMSA8PCAxNSkKICNkZWZpbmUgIEZPUkNF X0FSQl9JRExFX1BMQU5FUwkoMSA8PCAxNCkKICNkZWZpbmUgIFNLTF9FRFBfUFNSX0ZJWF9SRFdS QVAJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5ZmIyZjM3 Li44YjNjZWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xOTk5LDEx ICsxOTk5LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9zaXplKGNvbnN0IHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJCXJldHVybiAxMjg7CiAJCWVsc2UK IAkJCXJldHVybiA1MTI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJCWlm IChwbGFuZSA9PSAxKQorCQkJcmV0dXJuIDEyODsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAkJaWYgKElTX0dFTjIoZGV2X3ByaXYpIHx8IEhB U18xMjhfQllURV9ZX1RJTElORyhkZXZfcHJpdikpCiAJCQlyZXR1cm4gMTI4OwogCQllbHNlCiAJ CQlyZXR1cm4gNTEyOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJaWYg KHBsYW5lID09IDEpCisJCQlyZXR1cm4gMTI4OworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNl IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJc3dpdGNoIChjcHApIHsKIAkJY2FzZSAxOgpA QCAtMjExMCw3ICsyMTE4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdu bWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwogCiAJLyogQVVYX0RJU1QgbmVl ZHMgb25seSA0SyBhbGlnbm1lbnQgKi8KLQlpZiAoZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9G T1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQorCWlmIChwbGFuZSA9PSAxKQogCQlyZXR1cm4gNDA5 NjsKIAogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CkBAIC0yMTIwLDYgKzIxMjgsOCBAQCBzdGF0 aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAogCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQogCQkJcmV0dXJu IDI1NiAqIDEwMjQ7CiAJCXJldHVybiAwOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf Q0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKIAljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEOgogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgogCQlyZXR1 cm4gMSAqIDEwMjQgKiAxMDI0OwpAQCAtMjQyNyw2ICsyNDM3LDcgQEAgc3RhdGljIHVuc2lnbmVk IGludCBpbnRlbF9mYl9tb2RpZmllcl90b190aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCiAJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKIAkJcmV0dXJuIEk5MTVfVElMSU5HX1g7CiAJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEX0NDUzoKIAkJcmV0dXJuIEk5MTVfVElMSU5HX1k7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIEk5 MTVfVElMSU5HX05PTkU7CkBAIC0yNDkyLDYgKzI1MDMsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGlu dCBpbnRlbF9mYl9tb2RpZmllcl90b190aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCiAKIAkJ aW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwogCisJCWlmICgoZmItPm1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCQkgICAgIGZiLT5tb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKSAmJiBpID09IDEpIHsKKwkJCWludCBo c3ViID0gZmItPmZvcm1hdC0+aHN1YjsKKwkJCWludCB2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsK KwkJCWludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKKwkJCWludCBtYWluX3gsIG1haW5feTsK KwkJCWludCBjY3NfeCwgY2NzX3k7CisKKwkJCWludGVsX3RpbGVfZGltcyhmYiwgaSwgJnRpbGVf d2lkdGgsICZ0aWxlX2hlaWdodCk7CisKKwkJCWNjc194ID0gKHggKiBoc3ViKSAlICh0aWxlX3dp ZHRoICogaHN1Yik7CisJCQljY3NfeSA9ICh5ICogdnN1YikgJSAodGlsZV9oZWlnaHQgKiB2c3Vi KTsKKwkJCW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbMF0ueCAlICh0aWxlX3dpZHRoICogaHN1 Yik7CisJCQltYWluX3kgPSBpbnRlbF9mYi0+bm9ybWFsWzBdLnkgJSAodGlsZV9oZWlnaHQgKiB2 c3ViKTsKKworCQkJLyoKKwkJCSAqIENDUyBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0 IHJlZ2lzdGVyLCBzbyB0aGUgaW50cmEgQ0NTIHRpbGUKKwkJCSAqIHgveSBvZmZzZXRzIG11c3Qg bWF0Y2ggYmV0d2VlbiBDQ1MgYW5kIHRoZSBtYWluIHN1cmZhY2UuCisJCQkgKi8KKwkJCWlmICht YWluX3ggIT0gY2NzX3ggfHwgbWFpbl95ICE9IGNjc195KSB7CisJCQkJRFJNX0RFQlVHX0tNUygi QmFkIENDUyB4L3kgKG1haW4gJWQsJWQgY2NzICVkLCVkKSBmdWxsIChtYWluICVkLCVkIGNjcyAl ZCwlZClcbiIsCisJCQkJCSAgICAgIG1haW5feCwgbWFpbl95LAorCQkJCQkgICAgICBjY3NfeCwg Y2NzX3ksCisJCQkJCSAgICAgIGludGVsX2ZiLT5ub3JtYWxbMF0ueCwKKwkJCQkJICAgICAgaW50 ZWxfZmItPm5vcm1hbFswXS55LAorCQkJCQkgICAgICB4LCB5KTsKKwkJCQlyZXR1cm4gLUVJTlZB TDsKKwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIFRoZSBmZW5jZSAoaWYgdXNlZCkgaXMgYWxpZ25l ZCB0byB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdAogCQkgKiBzbyBoYXZpbmcgdGhlIGZyYW1lYnVm ZmVyIHdyYXAgYXJvdW5kIGFjcm9zcyB0aGUgZWRnZSBvZiB0aGUKQEAgLTI4NjYsNiArMjkwNyw5 IEBAIHN0YXRpYyBpbnQgc2tsX21heF9wbGFuZV93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IHBsYW5lLAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOgorCQkvKiBGSVhNRSBBVVggcGxhbmU/ICovCiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRDoKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJc3dpdGNoIChjcHAp IHsKQEAgLTI4ODgsNiArMjkzMiw0NCBAQCBzdGF0aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKIAlyZXR1cm4gMjA0 ODsKIH0KIAorc3RhdGljIGJvb2wgc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkJCSAgIGludCBtYWluX3gsIGlu dCBtYWluX3ksIHUzMiBtYWluX29mZnNldCkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOworCWludCBoc3ViID0gZmItPmZvcm1hdC0+ aHN1YjsKKwlpbnQgdnN1YiA9IGZiLT5mb3JtYXQtPnZzdWI7CisJaW50IGF1eF94ID0gcGxhbmVf c3RhdGUtPmF1eC54OworCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5hdXgueTsKKwl1MzIgYXV4 X29mZnNldCA9IHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0OworCXUzMiBhbGlnbm1lbnQgPSBpbnRl bF9zdXJmX2FsaWdubWVudChmYiwgMSk7CisKKwl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29m ZnNldCAmJiBhdXhfeSA8PSBtYWluX3kpIHsKKwkJaW50IHgsIHk7CisKKwkJaWYgKGF1eF94ID09 IG1haW5feCAmJiBhdXhfeSA9PSBtYWluX3kpCisJCQlicmVhazsKKworCQlpZiAoYXV4X29mZnNl dCA9PSAwKQorCQkJYnJlYWs7CisKKwkJeCA9IGF1eF94IC8gaHN1YjsKKwkJeSA9IGF1eF95IC8g dnN1YjsKKwkJYXV4X29mZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBs YW5lX3N0YXRlLCAxLAorCQkJCQkJICAgICAgYXV4X29mZnNldCwgYXV4X29mZnNldCAtIGFsaWdu bWVudCk7CisJCWF1eF94ID0geCAqIGhzdWIgKyBhdXhfeCAlIGhzdWI7CisJCWF1eF95ID0geSAq IHZzdWIgKyBhdXhfeSAlIHZzdWI7CisJfQorCisJaWYgKGF1eF94ICE9IG1haW5feCB8fCBhdXhf eSAhPSBtYWluX3kpCisJCXJldHVybiBmYWxzZTsKKworCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0 ID0gYXV4X29mZnNldDsKKwlwbGFuZV9zdGF0ZS0+YXV4LnggPSBhdXhfeDsKKwlwbGFuZV9zdGF0 ZS0+YXV4LnkgPSBhdXhfeTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgaW50IHNrbF9j aGVja19tYWluX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK IHsKIAljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNl LmZiOwpAQCAtMjkzMCw3ICszMDEyLDcgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJm YWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAKIAkJd2hpbGUgKCh4 ICsgdykgKiBjcHAgPiBmYi0+cGl0Y2hlc1swXSkgewogCQkJaWYgKG9mZnNldCA9PSAwKSB7Ci0J CQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNl IG9mZnNldFxuIik7CisJCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUg ZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOwogCQkJCXJldHVybiAt RUlOVkFMOwogCQkJfQogCkBAIC0yOTM5LDYgKzMwMjEsMjYgQEAgc3RhdGljIGludCBza2xfY2hl Y2tfbWFpbl9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJ CX0KIAl9CiAKKwkvKgorCSAqIENDUyBBVVggc3VyZmFjZSBkb2Vzbid0IGhhdmUgaXRzIG93biB4 L3kgb2Zmc2V0cywgd2UgbXVzdCBtYWtlIHN1cmUKKwkgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1h aW4gc3VyZmFjZSB4L3kgb2Zmc2V0cy4KKwkgKi8KKwlpZiAoZmItPm1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCSAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEX0NDUykgeworCQl3aGlsZSAoIXNrbF9jaGVja19tYWluX2Njc19jb29y ZGluYXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwgb2Zmc2V0KSkgeworCQkJaWYgKG9mZnNldCA9PSAw KQorCQkJCWJyZWFrOworCisJCQlvZmZzZXQgPSBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoJngs ICZ5LCBwbGFuZV9zdGF0ZSwgMCwKKwkJCQkJCQkgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50 KTsKKwkJfQorCisJCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5hdXgueCB8fCB5ICE9IHBsYW5lX3N0 YXRlLT5hdXgueSkgeworCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUg ZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKKwkJCXJldHVybiAtRUlOVkFM OworCQl9CisJfQorCiAJcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0ID0gb2Zmc2V0OwogCXBsYW5l X3N0YXRlLT5tYWluLnggPSB4OwogCXBsYW5lX3N0YXRlLT5tYWluLnkgPSB5OwpAQCAtMjk3NSw2 ICszMDc3LDQ5IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGlj IGludCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3Bs YW5lKHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9 IHRvX2ludGVsX2NydGMocGxhbmVfc3RhdGUtPmJhc2UuY3J0Yyk7CisJY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKKwlpbnQgc3JjX3ggPSBw bGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7CisJaW50IHNyY195ID0gcGxhbmVfc3RhdGUt PmJhc2Uuc3JjLnkxID4+IDE2OworCWludCBoc3ViID0gZmItPmZvcm1hdC0+aHN1YjsKKwlpbnQg dnN1YiA9IGZiLT5mb3JtYXQtPnZzdWI7CisJaW50IHggPSBzcmNfeCAvIGhzdWI7CisJaW50IHkg PSBzcmNfeSAvIHZzdWI7CisJdTMyIG9mZnNldDsKKworCXN3aXRjaCAocGxhbmUtPmlkKSB7CisJ Y2FzZSBQTEFORV9QUklNQVJZOgorCWNhc2UgUExBTkVfU1BSSVRFMDoKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydCBvbmx5IG9uIHBsYW5lIDEgYW5kIDJc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3J0Yy0+cGlwZSA9PSBQSVBFX0Mp IHsKKwkJRFJNX0RFQlVHX0tNUygiTm8gUkMgc3VwcG9ydCBvbiBwaXBlIENcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24gJiB+KERS TV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkpIHsKKwkJRFJNX0RFQlVHX0tN UygiUkMgc3VwcG9ydCBvbmx5IHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uICV4XG4iLAorCQkJ ICAgICAgcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCAxKTsKKwlvZmZz ZXQgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOwor CisJcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmF1eC54 ID0geCAqIGhzdWIgKyBzcmNfeCAlIGhzdWI7CisJcGxhbmVfc3RhdGUtPmF1eC55ID0geSAqIHZz dWIgKyBzcmNfeSAlIHZzdWI7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHNrbF9jaGVja19wbGFu ZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiB7CiAJY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKQEAg LTI5OTgsNiArMzE0MywxMSBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAkJcmV0ID0gc2tsX2NoZWNrX252MTJfYXV4 X3N1cmZhY2UocGxhbmVfc3RhdGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKKwl9IGVs c2UgaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJ ICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpIHsKKwkJcmV0 ID0gc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gfjB4 ZmZmOwogCQlwbGFuZV9zdGF0ZS0+YXV4LnggPSAwOwpAQCAtMzMwNCw4ICszNDU0LDEyIEBAIHN0 YXRpYyB1MzIgc2tsX3BsYW5lX2N0bF90aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCiAJCXJl dHVybiBQTEFORV9DVExfVElMRURfWDsKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgog CQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1k7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NUTF9ERUNPTVBSRVNT SU9OX0VOQUJMRTsKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJcmV0dXJuIFBM QU5FX0NUTF9USUxFRF9ZRjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6CisJ CXJldHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFC TEU7CiAJZGVmYXVsdDoKIAkJTUlTU0lOR19DQVNFKGZiX21vZGlmaWVyKTsKIAl9CkBAIC0zMzc4 LDYgKzM1MzIsNyBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCiAJdTMyIHBsYW5lX2N0bCA9IHBsYW5lX3N0YXRlLT5j dGw7CiAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247 CiAJdTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKKwl1MzIg YXV4X3N0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDEsIHJvdGF0aW9uKTsKIAl1MzIgc3Vy Zl9hZGRyID0gcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0OwogCWludCBzY2FsZXJfaWQgPSBwbGFu ZV9zdGF0ZS0+c2NhbGVyX2lkOwogCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5tYWluLng7CkBA IC0zNDE0LDYgKzM1NjksMTAgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCUk5MTVfV1JJVEVfRlcoUExBTkVfT0ZG U0VUKHBpcGUsIHBsYW5lX2lkKSwgKHNyY195IDw8IDE2KSB8IHNyY194KTsKIAlJOTE1X1dSSVRF X0ZXKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7CiAJSTkxNV9XUklURV9G VyhQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKKwlJ OTE1X1dSSVRFX0ZXKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwKKwkJICAgICAgKHBs YW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1eF9zdHJpZGUpOworCUk5MTVf V1JJVEVfRlcoUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJCSAgICAgIChwbGFu ZV9zdGF0ZS0+YXV4LnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54KTsKIAogCWlmIChzY2Fs ZXJfaWQgPj0gMCkgewogCQl1aW50MzJfdCBwc19jdHJsID0gMDsKQEAgLTg0NjEsMTAgKzg2MjAs MTYgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV9nZXRfcGZpdF9jb25maWcoc3RydWN0IGludGVsX2Ny dGMgKmNydGMsCiAJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwogCQli cmVhazsKIAljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgotCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRDsKKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VO QUJMRSkKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKKwkJ ZWxzZQorCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7CiAJCWJyZWFr OwogCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1lGOgotCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQ7CisJCWlmICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFC TEUpCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOworCQll bHNlCisJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CiAJCWJyZWFr OwogCWRlZmF1bHQ6CiAJCU1JU1NJTkdfQ0FTRSh0aWxpbmcpOwpAQCAtMTA2MTksNyArMTA3ODQs NyBAQCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjLAogCXUzMiBjdGwsIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0 aW9uKTsKIAogCWN0bCA9IEk5MTVfUkVBRChQTEFORV9DVEwocGlwZSwgMCkpOwotCWN0bCAmPSB+ UExBTkVfQ1RMX1RJTEVEX01BU0s7CisJY3RsICY9IH4oUExBTkVfQ1RMX1RJTEVEX01BU0sgfCBQ TEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpOwogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7 CiAJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CiAJCWJyZWFrOwpAQCAtMTA2MjksOSArMTA3 OTQsMTUgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YywKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgogCQljdGwgfD0gUExB TkVfQ1RMX1RJTEVEX1k7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf Q0NTOgorCQljdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExfREVDT01QUkVTU0lP Tl9FTkFCTEU7CisJCWJyZWFrOwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgogCQlj dGwgfD0gUExBTkVfQ1RMX1RJTEVEX1lGOwogCQlicmVhazsKKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZZl9USUxFRF9DQ1M6CisJCWN0bCB8PSBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExf REVDT01QUkVTU0lPTl9FTkFCTEU7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCU1JU1NJTkdfQ0FT RShmYi0+bW9kaWZpZXIpOwogCX0KQEAgLTE0NDU2LDEwICsxNDYyNywxMiBAQCBzdGF0aWMgaW50 IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9m YiwKIAkJCQkgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gJmludGVsX2ZiLT5iYXNlOwogCXN0cnVjdCBkcm1f Zm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOwotCXUzMiBwaXRjaF9saW1pdCwgc3RyaWRlX2Fs aWdubWVudDsKKwl1MzIgcGl0Y2hfbGltaXQ7CiAJdW5zaWduZWQgaW50IHRpbGluZywgc3RyaWRl OwogCWludCByZXQgPSAtRUlOVkFMOworCWludCBpOwogCiAJaTkxNV9nZW1fb2JqZWN0X2xvY2so b2JqKTsKIAlvYmotPmZyYW1lYnVmZmVyX3JlZmVyZW5jZXMrKzsKQEAgLTE0NDg4LDYgKzE0NjYx LDE5IEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgaW50ZWxfZnJh bWVidWZmZXIgKmludGVsX2ZiLAogCiAJLyogUGFzc2VkIGluIG1vZGlmaWVyIHNhbml0eSBjaGVj a2luZy4gKi8KIAlzd2l0Y2ggKG1vZGVfY21kLT5tb2RpZmllclswXSkgeworCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UzoKKwkJc3dpdGNoIChtb2RlX2NtZC0+cGl4ZWxfZm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1B VF9YQkdSODg4ODoKKwkJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQljYXNlIERSTV9GT1JN QVRfWFJHQjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9ydGVkIG9ubHkgd2l0aCBSR0I4ODg4 IGZvcm1hdHNcbiIpOworCQkJZ290byBlcnI7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCiAJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRDoKIAkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7CkBAIC0xNDU5MiwyNSArMTQ3 NzgsNDYgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBpbnRlbF9m cmFtZWJ1ZmZlciAqaW50ZWxfZmIsCiAJaWYgKG1vZGVfY21kLT5vZmZzZXRzWzBdICE9IDApCiAJ CWdvdG8gZXJyOwogCi0JZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZkZXZfcHJpdi0+ ZHJtLAotCQkJCSAgICAgICAmaW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKKwlkcm1faGVscGVy X21vZGVfZmlsbF9mYl9zdHJ1Y3QoJmRldl9wcml2LT5kcm0sIGZiLCBtb2RlX2NtZCk7CiAKLQlz dHJpZGVfYWxpZ25tZW50ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudCgmaW50ZWxfZmItPmJh c2UsIDApOwotCWlmIChtb2RlX2NtZC0+cGl0Y2hlc1swXSAmIChzdHJpZGVfYWxpZ25tZW50IC0g MSkpIHsKLQkJRFJNX0RFQlVHX0tNUygicGl0Y2ggKCVkKSBtdXN0IGJlIGF0IGxlYXN0ICV1IGJ5 dGUgYWxpZ25lZFxuIiwKLQkJCSAgICAgIG1vZGVfY21kLT5waXRjaGVzWzBdLCBzdHJpZGVfYWxp Z25tZW50KTsKLQkJZ290byBlcnI7CisJZm9yIChpID0gMDsgaSA8IGZiLT5mb3JtYXQtPm51bV9w bGFuZXM7IGkrKykgeworCQl1MzIgc3RyaWRlX2FsaWdubWVudDsKKworCQlpZiAobW9kZV9jbWQt PmhhbmRsZXNbaV0gIT0gbW9kZV9jbWQtPmhhbmRsZXNbMF0pIHsKKwkJCURSTV9ERUJVR19LTVMo ImJhZCBwbGFuZSAlZCBoYW5kbGVcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwor CQlzdHJpZGVfYWxpZ25tZW50ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChmYiwgaSk7CisK KwkJLyoKKwkJICogRGlzcGxheSBXQSAjMDUzMTogc2tsLGJ4dCxrYmwsZ2xrCisJCSAqCisJCSAq IFJlbmRlciBkZWNvbXByZXNzaW9uIGFuZCBwbGFuZSB3aWR0aCA+IDM4NDAKKwkJICogY29tYmlu ZWQgd2l0aCBob3Jpem9udGFsIHBhbm5pbmcgcmVxdWlyZXMgdGhlCisJCSAqIHBsYW5lIHN0cmlk ZSB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdlJ2xsIGp1c3QKKwkJICogcmVxdWlyZSB0aGUgZW50 aXJlIGZiIHRvIGFjY29tbW9kYXRlIHRoYXQgdG8gYXZvaWQKKwkJICogcG90ZW50aWFsIHJ1bnRp bWUgZXJyb3JzIGF0IHBsYW5lIGNvbmZpZ3VyYXRpb24gdGltZS4KKwkJICovCisJCWlmIChJU19H RU45KGRldl9wcml2KSAmJiBpID09IDAgJiYgZmItPndpZHRoID4gMzg0MCAmJgorCQkgICAgKGZi LT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICAgICBmYi0+ bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykpCisJCQlzdHJpZGVfYWxp Z25tZW50ICo9IDQ7CisKKwkJaWYgKGZiLT5waXRjaGVzW2ldICYgKHN0cmlkZV9hbGlnbm1lbnQg LSAxKSkgeworCQkJRFJNX0RFQlVHX0tNUygicGxhbmUgJWQgcGl0Y2ggKCVkKSBtdXN0IGJlIGF0 IGxlYXN0ICV1IGJ5dGUgYWxpZ25lZFxuIiwKKwkJCQkgICAgICBpLCBmYi0+cGl0Y2hlc1tpXSwg c3RyaWRlX2FsaWdubWVudCk7CisJCQlnb3RvIGVycjsKKwkJfQogCX0KIAogCWludGVsX2ZiLT5v YmogPSBvYmo7CiAKLQlyZXQgPSBpbnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9m Yi0+YmFzZSk7CisJcmV0ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2LCBmYik7CiAJaWYg KHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChvYmotPmJh c2UuZGV2LAotCQkJCSAgICZpbnRlbF9mYi0+YmFzZSwKLQkJCQkgICAmaW50ZWxfZmJfZnVuY3Mp OworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KCZkZXZfcHJpdi0+ZHJtLCBmYiwgJmludGVs X2ZiX2Z1bmNzKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZnJhbWVidWZmZXIgaW5pdCBm YWlsZWQgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5k ZXggNmRiODMzZS4uZTIyZWI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCkBAIC02Miw2ICs2 MiwyMCBAQCBzdGF0aWMgdm9pZCBnZW45X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIAlJOTE1X1dSSVRFKENISUNLRU5fUEFSMV8xLAogCQkgICBJ OTE1X1JFQUQoQ0hJQ0tFTl9QQVIxXzEpIHwgU0tMX0VEUF9QU1JfRklYX1JEV1JBUCk7CiAKKwkv KgorCSAqIERpc3BsYXkgV0EjMDM5MDogc2tsLGJ4dCxrYmwsZ2xrCisJICoKKwkgKiBNdXN0IG1h dGNoIFNhbXBsZXIsIFBpeGVsIEJhY2sgRW5kLCBhbmQgTWVkaWEKKwkgKiAoMHhFMTk0IGJpdCA4 LCAweDcwMTQgYml0IDEzLCAweDREREMgYml0cyAyNyBhbmQgMzEpLgorCSAqCisJICogSW5jbHVk aW5nIGJpdHMgb3V0c2lkZSB0aGUgcGFnZSBpbiB0aGUgaGFzaCB3b3VsZAorCSAqIHJlcXVpcmUg MiAob3IgND8pIE1pQiBhbGlnbm1lbnQgb2YgcmVzb3VyY2VzLiBKdXN0CisJICogYXNzdW1lIHRo ZSBkZWZhdWwgaGFzaGluZyBtb2RlIHdoaWNoIG9ubHkgdXNlcyBiaXRzCisJICogd2l0aGluIHRo ZSBwYWdlLgorCSAqLworCUk5MTVfV1JJVEUoQ0hJQ0tFTl9QQVIxXzEsCisJCSAgIEk5MTVfUkVB RChDSElDS0VOX1BBUjFfMSkgJiB+U0tMX1JDX0hBU0hfT1VUU0lERSk7CisKIAlJOTE1X1dSSVRF KEdFTjhfQ09ORklHMCwKIAkJICAgSTkxNV9SRUFEKEdFTjhfQ09ORklHMCkgfCBHRU45X0RFRkFV TFRfRklYRVMpOwogCkBAIC00MDcxLDcgKzQwODUsOSBAQCBpbnQgc2tsX2NoZWNrX3BpcGVfbWF4 X3BpeGVsX3JhdGUoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAKIAkvKiBGb3IgTm9u IFktdGlsZSByZXR1cm4gOC1ibG9ja3MgKi8KIAlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEICYmCi0JICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRUQpCisJICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQg JiYKKwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyAmJgor CSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykKIAkJcmV0 dXJuIDg7CiAKIAkvKgpAQCAtNDM3Nyw3ICs0MzkzLDkgQEAgc3RhdGljIGludCBza2xfY29tcHV0 ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJfQog CiAJeV90aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAot CQkgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CisJCSAgZmItPm1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCB8fAorCQkgIGZiLT5tb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICBmYi0+bW9kaWZpZXIgPT0gSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKIAl4X3RpbGVkID0gZmItPm1vZGlmaWVyID09IEk5 MTVfRk9STUFUX01PRF9YX1RJTEVEOwogCiAJLyogRGlzcGxheSBXQSAjMTE0MToga2JsLGNmbCAq LwpAQCAtNDQ3Niw2ICs0NDk0LDEzIEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20o Y29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJlc19saW5lcyA9IGRp dl9yb3VuZF91cF9maXhlZDE2KHNlbGVjdGVkX3Jlc3VsdCwKIAkJCQkJIHBsYW5lX2Jsb2Nrc19w ZXJfbGluZSk7CiAKKwkvKiBEaXNwbGF5IFdBICMxMTI1OiBza2wsYnh0LGtibCxnbGsgKi8KKwlp ZiAobGV2ZWwgPT0gMCAmJgorCSAgICAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRF9DQ1MpKQorCQlyZXNfYmxvY2tzICs9IGZpeGVkXzE2XzE2X3RvX3UzMl9yb3VuZF91cCh5 X3RpbGVfbWluaW11bSk7CisKKwkvKiBEaXNwbGF5IFdBICMxMTI2OiBza2wsYnh0LGtibCxnbGsg Ki8KIAlpZiAobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSA3KSB7CiAJCWlmICh5X3RpbGVkKSB7CiAJ CQlyZXNfYmxvY2tzICs9IGZpeGVkXzE2XzE2X3RvX3UzMl9yb3VuZF91cCh5X3RpbGVfbWluaW11 bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCmluZGV4IDk0ZjlhMTMuLjVlMmY0YTkg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC0yNDQsNiArMjQ0LDcgQEAgdm9p ZCBpbnRlbF9waXBlX3VwZGF0ZV9lbmQoc3RydWN0IGludGVsX2NydGMgKmNydGMsIHN0cnVjdCBp bnRlbF9mbGlwX3dvcmsgKndvcmsKIAl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPm1haW4u b2Zmc2V0OwogCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0 aW9uOwogCXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAwLCByb3RhdGlvbik7CisJ dTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAxLCByb3RhdGlvbik7CiAJaW50 IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC54MTsKIAlpbnQgY3J0Y195ID0gcGxhbmVf c3RhdGUtPmJhc2UuZHN0LnkxOwogCXVpbnQzMl90IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZw bGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwpAQCAtMjc4LDYgKzI3OSwxMCBAQCB2b2lkIGludGVsX3Bp cGVfdXBkYXRlX2VuZChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yywgc3RydWN0IGludGVsX2ZsaXBf d29yayAqd29yawogCUk5MTVfV1JJVEVfRlcoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwg KHkgPDwgMTYpIHwgeCk7CiAJSTkxNV9XUklURV9GVyhQTEFORV9TVFJJREUocGlwZSwgcGxhbmVf aWQpLCBzdHJpZGUpOwogCUk5MTVfV1JJVEVfRlcoUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCks IChzcmNfaCA8PCAxNikgfCBzcmNfdyk7CisJSTkxNV9XUklURV9GVyhQTEFORV9BVVhfRElTVChw aXBlLCBwbGFuZV9pZCksCisJCSAgICAgIChwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCAtIHN1cmZf YWRkcikgfCBhdXhfc3RyaWRlKTsKKwlJOTE1X1dSSVRFX0ZXKFBMQU5FX0FVWF9PRkZTRVQocGlw ZSwgcGxhbmVfaWQpLAorCQkgICAgICAocGxhbmVfc3RhdGUtPmF1eC55IDw8IDE2KSB8IHBsYW5l X3N0YXRlLT5hdXgueCk7CiAKIAkvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwogCWlmIChwbGFu ZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApIHsKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK