From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH v2 9/9] drm/i915: Add render decompression support Date: Thu, 5 Jan 2017 17:14:54 +0200 Message-ID: <20170105151454.12862-1-ville.syrjala@linux.intel.com> References: <20170104184232.23048-10-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170104184232.23048-10-ville.syrjala@linux.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 , dri-devel@lists.freedesktop.org, Vandana Kannan , Paulo Zanoni List-Id: dri-devel@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClNL TCsgZGlzcGxheSBlbmdpbmUgY2FuIHNjYW4gb3V0IGNlcnRhaW4ga2luZHMgb2YgY29tcHJlc3Nl ZCBzdXJmYWNlcwpwcm9kdWNlZCBieSB0aGUgcmVuZGVyIGVuZ2luZS4gVGhpcyBpbnZvbHZlZCB0 ZWxsaW5nIHRoZSBkaXNwbGF5IGVuZ2luZQp0aGUgbG9jYXRpb24gb2YgdGhlIGNvbG9yIGNvbnRy b2wgc3VyZmFlIChDQ1MpIHdoaWNoIGRlc2NyaWJlcwp3aGljaCBwYXJ0cyBvZiB0aGUgbWFpbiBz dXJmYWNlIGFyZSBjb21wcmVzc2VkIGFuZCB3aGljaCBhcmUgbm90LiBUaGUKbG9jYXRpb24gb2Yg Q0NTIGlzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBqdXN0IGFub3RoZXIgcGxhbmUgd2l0aCBp dHMKb3duIG9mZnNldC4KCkFkZCB0aGUgcmVxdWlyZWQgc3R1ZmYgdG8gdmFsaWRhdGUgdGhlIHVz ZXIgcHJvdmlkZWQgQVVYIHBsYW5lIG1ldGFkYXRhCmFuZCBjb252ZXJ0IHRoZSB1c2VyIHByb3Zp ZGVkIGxpbmVhciBvZmZzZXQgaW50byBzb21ldGhpbmcgdGhlIGhhcmR3YXJlCmNhbiBjb25zdW1l LgoKRHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb25zIHdlIHJlcXVpcmUgdGhhdCB0aGUgbWFpbiBz dXJmYWNlIGFuZAp0aGUgQVVYIHN1cmZhY2UgKENDUykgYmUgcGFydCBvZiB0aGUgc2FtZSBiby4g VGhlIGhhcmR3YXJlIGFsc28KbWFrZXMgbGlmZSBoYXJkIGJ5IG5vdCBhbGxvd2luZyB5b3UgdG8g cHJvdmlkZSBzZXBhcmF0ZSB4L3kgb2Zmc2V0cwpmb3IgdGhlIG1haW4gYW5kIEFVWCBzdXJmYWNl cyAoZXhjcGV0IHdpdGggTlYxMiksIHNvIGZpbmRpbmcgc3VpdGFibGUKb2Zmc2V0cyBmb3IgYm90 aCByZXF1aXJlcyBhIGJpdCBvZiB3b3JrLiBBc3N1bWluZyB3ZSBzdGlsbCB3YW50IGtlZXAKcGxh eWluZyB0cmlja3Mgd2l0aCB0aGUgb2Zmc2V0cy4gSSd2ZSBqdXN0IGdvbmUgd2l0aCBhIGR1bWIg InNlYXJjaApiYWNrd2FyZCBmb3Igc3VpdGFibGUgb2Zmc2V0cyIgYXBwcm9hY2gsIHdoaWNoIGlz IGZhciBmcm9tIG9wdGltYWwsCmJ1dCBpdCB3b3Jrcy4KCkFsc28gbm90IGFsbCBwbGFuZXMgd2ls bCBiZSBjYXBhYmxlIG9mIHNjYW5uaW5nIG91dCBjb21wcmVzc2VkIHN1cmZhY2VzLAphbmQgZWcu IDkwLzI3MCBkZWdyZWUgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBjb21iaW5hdGlvbiB3 aXRoCmRlY29tcHJlc3Npb24gZWl0aGVyLgoKVGhpcyBwYXRjaCBtYXkgY29udGFpbiB3b3JrIGZy b20gYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBwZW9wbGU6CiogVmFuZGFuYSBLYW5uYW4gPHZhbmRh bmEua2FubmFuQGludGVsLmNvbT4KKiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Ciog QmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgoKdjI6IERlYWwgd2l0aCBkaXNwbGF5IHdv cmthcm91bmRzIDAzOTAsIDA1MzEsIDExMjUgKFBhdWxvKQoKQ2M6IFBhdWxvIFphbm9uaSA8cGF1 bG8uci56YW5vbmlAaW50ZWwuY29tPgpDYzogVmFuZGFuYSBLYW5uYW4gPHZhbmRhbmEua2FubmFu QGludGVsLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KQ2M6IEJlbiBX aWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KQ2M6IEphc29uIEVrc3RyYW5kIDxqYXNvbkBqbGVr c3RyYW5kLm5ldD4KU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxh QGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAg ICAgfCAgMjMgKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMjM0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jICAgICAgfCAgMjkgKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3Nwcml0ZS5jICB8ICAgNSArCiA0IGZpbGVzIGNoYW5nZWQsIDI3NCBpbnNlcnRpb25zKCspLCAx NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAwMDk3MGFhNzdhZmEu LjY4NDliYTkzZjFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC02MjA5LDYgKzYyMDks MjggQEAgZW51bSB7CiAJCQlfSUQoaWQsIF9QU19FQ0NfU1RBVF8xQSwgX1BTX0VDQ19TVEFUXzJB KSwgICBcCiAJCQlfSUQoaWQsIF9QU19FQ0NfU1RBVF8xQiwgX1BTX0VDQ19TVEFUXzJCKSkKIAor I2RlZmluZSBQTEFORV9BVVhfRElTVF8xX0EJCTB4NzAxYzAKKyNkZWZpbmUgUExBTkVfQVVYX0RJ U1RfMl9BCQkweDcwMmMwCisjZGVmaW5lIFBMQU5FX0FVWF9ESVNUXzFfQgkJMHg3MTFjMAorI2Rl ZmluZSBQTEFORV9BVVhfRElTVF8yX0IJCTB4NzEyYzAKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNU XzEocGlwZSkgXAorCQkJX1BJUEUocGlwZSwgUExBTkVfQVVYX0RJU1RfMV9BLCBQTEFORV9BVVhf RElTVF8xX0IpCisjZGVmaW5lIF9QTEFORV9BVVhfRElTVF8yKHBpcGUpIFwKKwkJCV9QSVBFKHBp cGUsIFBMQU5FX0FVWF9ESVNUXzJfQSwgUExBTkVfQVVYX0RJU1RfMl9CKQorI2RlZmluZSBQTEFO RV9BVVhfRElTVChwaXBlLCBwbGFuZSkgICAgIFwKKwlfTU1JT19QTEFORShwbGFuZSwgX1BMQU5F X0FVWF9ESVNUXzEocGlwZSksIF9QTEFORV9BVVhfRElTVF8yKHBpcGUpKQorCisjZGVmaW5lIFBM QU5FX0FVWF9PRkZTRVRfMV9BCQkweDcwMWM0CisjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRfMl9B CQkweDcwMmM0CisjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRfMV9CCQkweDcxMWM0CisjZGVmaW5l IFBMQU5FX0FVWF9PRkZTRVRfMl9CCQkweDcxMmM0CisjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VU XzEocGlwZSkgICAgICAgXAorCQlfUElQRShwaXBlLCBQTEFORV9BVVhfT0ZGU0VUXzFfQSwgUExB TkVfQVVYX09GRlNFVF8xX0IpCisjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzIocGlwZSkgICAg ICAgXAorCQlfUElQRShwaXBlLCBQTEFORV9BVVhfT0ZGU0VUXzJfQSwgUExBTkVfQVVYX09GRlNF VF8yX0IpCisjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmUpICAgXAorCV9NTUlP X1BMQU5FKHBsYW5lLCBfUExBTkVfQVVYX09GRlNFVF8xKHBpcGUpLCBfUExBTkVfQVVYX09GRlNF VF8yKHBpcGUpKQorCiAvKiBsZWdhY3kgcGFsZXR0ZSAqLwogI2RlZmluZSBfTEdDX1BBTEVUVEVf QSAgICAgICAgICAgMHg0YTAwMAogI2RlZmluZSBfTEdDX1BBTEVUVEVfQiAgICAgICAgICAgMHg0 YTgwMApAQCAtNjQzMyw2ICs2NDU1LDcgQEAgZW51bSB7CiAjIGRlZmluZSBDSElDS0VOM19ER01H X0RPTkVfRklYX0RJU0FCTEUJCSgxIDw8IDIpCiAKICNkZWZpbmUgQ0hJQ0tFTl9QQVIxXzEJCV9N TUlPKDB4NDIwODApCisjZGVmaW5lICBTS0xfUkNfSEFTSF9PVVRTSURFCSgxIDw8IDE1KQogI2Rl ZmluZSAgRFBBX01BU0tfVkJMQU5LX1NSRAkoMSA8PCAxNSkKICNkZWZpbmUgIEZPUkNFX0FSQl9J RExFX1BMQU5FUwkoMSA8PCAxNCkKICNkZWZpbmUgIFNLTF9FRFBfUFNSX0ZJWF9SRFdSQVAJKDEg PDwgMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCAzOGRlOWRmMGVjNjAu LjIyMzZhYmViZDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMjA2 NCwxMSArMjA2NCwxOSBAQCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCiAJCQlyZXR1cm4gMTI4OwogCQllbHNlCiAJCQly ZXR1cm4gNTEyOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgorCQlpZiAocGxh bmUgPT0gMSkKKwkJCXJldHVybiA2NDsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAkJaWYgKElTX0dFTjIoZGV2X3ByaXYpIHx8IEhBU18xMjhf QllURV9ZX1RJTElORyhkZXZfcHJpdikpCiAJCQlyZXR1cm4gMTI4OwogCQllbHNlCiAJCQlyZXR1 cm4gNTEyOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJaWYgKHBsYW5l ID09IDEpCisJCQlyZXR1cm4gNjQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEOgogCQkvKgogCQkgKiBCc3BlYyBzZWVtcyB0byBzdWdnZXN0IHRo YXQgdGhlIFlmIHRpbGUgd2lkdGggd291bGQKQEAgLTIxNTYsNyArMjE2NCw3IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShm Yi0+ZGV2KTsKIAogCS8qIEFVWF9ESVNUIG5lZWRzIG9ubHkgNEsgYWxpZ25tZW50ICovCi0JaWYg KGZiLT5mb3JtYXQtPmZvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIgJiYgcGxhbmUgPT0gMSkKKwlp ZiAocGxhbmUgPT0gMSkKIAkJcmV0dXJuIDQwOTY7CiAKIAlzd2l0Y2ggKGZiLT5tb2RpZmllcikg ewpAQCAtMjE2Niw2ICsyMTc0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9zdXJmX2Fs aWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gOSkKIAkJCXJldHVybiAyNTYgKiAxMDI0OwogCQlyZXR1cm4gMDsKKwlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1M6CiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAljYXNlIEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRDoKIAkJcmV0dXJuIDEgKiAxMDI0ICogMTAyNDsKQEAgLTI0NzIs NiArMjQ4Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfZmJfbW9kaWZpZXJfdG9fdGls aW5nKHVpbnQ2NF90IGZiX21vZGlmaWVyKQogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6 CiAJCXJldHVybiBJOTE1X1RJTElOR19YOwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6 CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CiAJCXJldHVybiBJOTE1X1RJTElO R19ZOwogCWRlZmF1bHQ6CiAJCXJldHVybiBJOTE1X1RJTElOR19OT05FOwpAQCAtMjUzNiw2ICsy NTQ3LDM1IEBAIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCiAKIAkJaW50ZWxfZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwogCisJCWlm ICgoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCQkgICAg IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKSAmJiBpID09IDEp IHsKKwkJCWludCBtYWluX3gsIG1haW5feTsKKwkJCWludCBjY3NfeCwgY2NzX3k7CisKKwkJCS8q CisJCQkgKiBFYWNoIGJ5dGUgb2YgQ0NTIGNvcnJlc3BvbmRzIHRvIGEgMTZ4OCBhcmVhIG9mIHRo ZSBtYWluIHN1cmZhY2UsIGFuZAorCQkJICogZWFjaCBDQ1MgdGlsZSBpcyA2NHg2NCBieXRlcy4K KwkJCSAqLworCQkJY2NzX3ggPSAoeCAqIDE2KSAlICg2NCAqIDE2KTsKKwkJCWNjc195ID0gKHkg KiA4KSAlICg2NCAqIDgpOworCQkJbWFpbl94ID0gaW50ZWxfZmItPm5vcm1hbFswXS54ICUgKDY0 ICogMTYpOworCQkJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFswXS55ICUgKDY0ICogOCk7CisK KwkJCS8qCisJCQkgKiBDQ1MgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldCByZWdpc3Rl ciwgc28gdGhlIGludHJhIENDUyB0aWxlCisJCQkgKiB4L3kgb2Zmc2V0cyBtdXN0IG1hdGNoIGJl dHdlZW4gQ0NTIGFuZCB0aGUgbWFpbiBzdXJmYWNlLgorCQkJICovCisJCQlpZiAobWFpbl94ICE9 IGNjc194IHx8IG1haW5feSAhPSBjY3NfeSkgeworCQkJCURSTV9ERUJVR19LTVMoIkJhZCBDQ1Mg eC95IChtYWluICVkLCVkIGNjcyAlZCwlZCkgZnVsbCAobWFpbiAlZCwlZCBjY3MgJWQsJWQpXG4i LAorCQkJCQkgICAgICBtYWluX3gsIG1haW5feSwKKwkJCQkJICAgICAgY2NzX3gsIGNjc195LAor CQkJCQkgICAgICBpbnRlbF9mYi0+bm9ybWFsWzBdLngsCisJCQkJCSAgICAgIGludGVsX2ZiLT5u b3JtYWxbMF0ueSwKKwkJCQkJICAgICAgeCwgeSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9 CisJCX0KKwogCQkvKgogCQkgKiBUaGUgZmVuY2UgKGlmIHVzZWQpIGlzIGFsaWduZWQgdG8gdGhl IHN0YXJ0IG9mIHRoZSBvYmplY3QKIAkJICogc28gaGF2aW5nIHRoZSBmcmFtZWJ1ZmZlciB3cmFw IGFyb3VuZCBhY3Jvc3MgdGhlIGVkZ2Ugb2YgdGhlCkBAIC0yODczLDYgKzI5MTMsOSBAQCBzdGF0 aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludCBwbGFuZSwKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoK KwkJLyogRklYTUUgQVVYIHBsYW5lPyAqLwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6 CiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CiAJCXN3aXRjaCAoY3BwKSB7CkBAIC0y ODk1LDYgKzI5MzgsNDIgQEAgc3RhdGljIGludCBza2xfbWF4X3BsYW5lX3dpZHRoKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCiAJcmV0dXJuIDIwNDg7CiB9CiAK K3N0YXRpYyBib29sIHNrbF9jaGVja19tYWluX2Njc19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJCQkgICBpbnQgbWFpbl94LCBpbnQgbWFpbl95 LCB1MzIgbWFpbl9vZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg PSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+YXV4Lng7 CisJaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmF1eC55OworCXUzMiBhdXhfb2Zmc2V0ID0gcGxh bmVfc3RhdGUtPmF1eC5vZmZzZXQ7CisJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25t ZW50KGZiLCAxKTsKKworCXdoaWxlIChhdXhfb2Zmc2V0ID49IG1haW5fb2Zmc2V0ICYmIGF1eF95 IDw9IG1haW5feSkgeworCQlpbnQgeCwgeTsKKworCQlpZiAoYXV4X3ggPT0gbWFpbl94ICYmIGF1 eF95ID09IG1haW5feSkKKwkJCWJyZWFrOworCisJCWlmIChhdXhfb2Zmc2V0ID09IDApCisJCQli cmVhazsKKworCQl4ID0gYXV4X3ggLyAxNjsKKwkJeSA9IGF1eF95IC8gODsKKwkJYXV4X29mZnNl dCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxLAorCQkJ CQkJICAgICAgYXV4X29mZnNldCwgYXV4X29mZnNldCAtIGFsaWdubWVudCk7CisJCWF1eF94ID0g eCAqIDE2ICsgYXV4X3ggJSAxNjsKKwkJYXV4X3kgPSB5ICogOCArIGF1eF95ICUgODsKKwl9CisK KwlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5feSkKKwkJcmV0dXJuIGZhbHNl OworCisJcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSBhdXhfb2Zmc2V0OworCXBsYW5lX3N0YXRl LT5hdXgueCA9IGF1eF94OworCXBsYW5lX3N0YXRlLT5hdXgueSA9IGF1eF95OworCisJcmV0dXJu IHRydWU7Cit9CisKIHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewogCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7CkBAIC0yOTM3LDcgKzMwMTYsNyBAQCBz dGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKIAogCQl3aGlsZSAoKHggKyB3KSAqIGNwcCA+IGZiLT5waXRjaGVzWzBd KSB7CiAJCQlpZiAob2Zmc2V0ID09IDApIHsKLQkJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8g ZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0XG4iKTsKKwkJCQlEUk1fREVCVUdf S01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0 byBYLXRpbGluZ1xuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAKQEAgLTI5NDYsNiAr MzAyNSwyNiBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAkJfQogCX0KIAorCS8qCisJICogQ0NTIEFVWCBz dXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXRzLCB3ZSBtdXN0IG1ha2Ugc3Vy ZQorCSAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFpbiBzdXJmYWNlIHgveSBvZmZzZXRzLgorCSAq LworCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8CisJ ICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKSB7CisJCXdo aWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LCBv ZmZzZXQpKSB7CisJCQlpZiAob2Zmc2V0ID09IDApCisJCQkJYnJlYWs7CisKKwkJCW9mZnNldCA9 IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJ CSAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0gcGxhbmVf c3RhdGUtPmF1eC54IHx8IHkgIT0gcGxhbmVfc3RhdGUtPmF1eC55KSB7CisJCQlEUk1fREVCVUdf S01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0 byBDQ1NcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlwbGFuZV9zdGF0ZS0+ bWFpbi5vZmZzZXQgPSBvZmZzZXQ7CiAJcGxhbmVfc3RhdGUtPm1haW4ueCA9IHg7CiAJcGxhbmVf c3RhdGUtPm1haW4ueSA9IHk7CkBAIC0yOTgyLDYgKzMwODEsNDcgQEAgc3RhdGljIGludCBza2xf Y2hlY2tfbnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNrbF9jaGVja19jY3NfYXV4X3N1cmZh Y2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUp OworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhwbGFuZV9zdGF0ZS0+ YmFzZS5jcnRjKTsKKwlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7 CisJaW50IHNyY195ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLnkxID4+IDE2OworCWludCB4ID0g c3JjX3ggLyAxNjsKKwlpbnQgeSA9IHNyY195IC8gODsKKwl1MzIgb2Zmc2V0OworCisJc3dpdGNo IChwbGFuZS0+aWQpIHsKKwljYXNlIFBMQU5FX1BSSU1BUlk6CisJY2FzZSBQTEFORV9TUFJJVEUw OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fREVCVUdfS01TKCJSQyBzdXBwb3J0IG9ubHkg b24gcGxhbmUgMSBhbmQgMlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjcnRj LT5waXBlID09IFBJUEVfQykgeworCQlEUk1fREVCVUdfS01TKCJObyBSQyBzdXBwb3J0IG9uIHBp cGUgQ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwbGFuZV9zdGF0ZS0+YmFz ZS5yb3RhdGlvbiAmJgorCSAgICBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiAmIH4oRFJNX1JP VEFURV8wIHwgRFJNX1JPVEFURV8xODApKSB7CisJCURSTV9ERUJVR19LTVMoIlJDIHN1cHBvcnQg b25seSB3aXRoIDAvMTgwIGRlZ3JlZSByb3RhdGlvbiAleFxuIiwKKwkJCSAgICAgIHBsYW5lX3N0 YXRlLT5iYXNlLnJvdGF0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW50ZWxfYWRk X2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7CisJb2Zmc2V0ID0gaW50ZWxfY29t cHV0ZV90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxKTsKKworCXBsYW5lX3N0YXRl LT5hdXgub2Zmc2V0ID0gb2Zmc2V0OworCXBsYW5lX3N0YXRlLT5hdXgueCA9IHggKiAxNiArIHNy Y194ICUgMTY7CisJcGxhbmVfc3RhdGUtPmF1eC55ID0geSAqIDggKyBzcmNfeSAlIDg7CisKKwly ZXR1cm4gMDsKK30KKwogaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiB7CiAJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKQEAgLTMwMDIsNiArMzE0MiwxMSBAQCBpbnQg c2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKIAkJcmV0ID0gc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwog CQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKGZiLT5tb2RpZmllciA9PSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICAgZmItPm1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpIHsKKwkJcmV0ID0gc2tsX2NoZWNrX2Njc19hdXhfc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7 CiAJCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gfjB4ZmZmOwogCQlwbGFuZV9zdGF0ZS0+YXV4 LnggPSAwOwpAQCAtMzM1Nyw4ICszNTAyLDEyIEBAIHUzMiBza2xfcGxhbmVfY3RsX3RpbGluZyh1 aW50NjRfdCBmYl9tb2RpZmllcikKIAkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9YOwogCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CiAJCXJldHVybiBQTEFORV9DVExfVElMRURfWTsKKwlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxF RF9ZIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwogCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEOgogCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGOworCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8IFBM QU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKIAlkZWZhdWx0OgogCQlNSVNTSU5HX0NBU0Uo ZmJfbW9kaWZpZXIpOwogCX0KQEAgLTM0MDEsNiArMzU1MCw3IEBAIHN0YXRpYyB2b2lkIHNreWxh a2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJdTMyIHBs YW5lX2N0bDsKIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3Rh dGlvbjsKIAl1MzIgc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOwor CXUzMiBhdXhfc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMSwgcm90YXRpb24pOwogCXUz MiBzdXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQ7CiAJaW50IHNjYWxlcl9pZCA9 IHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQ7CiAJaW50IHNyY194ID0gcGxhbmVfc3RhdGUtPm1haW4u eDsKQEAgLTM0MzYsNiArMzU4NiwxMCBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmlt YXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCUk5MTVfV1JJVEUoUExBTkVfT0ZG U0VUKHBpcGUsIHBsYW5lX2lkKSwgKHNyY195IDw8IDE2KSB8IHNyY194KTsKIAlJOTE1X1dSSVRF KFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7CiAJSTkxNV9XUklURShQTEFO RV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKKwlJOTE1X1dS SVRFKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwKKwkJICAgKHBsYW5lX3N0YXRlLT5h dXgub2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1eF9zdHJpZGUpOworCUk5MTVfV1JJVEUoUExBTkVf QVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJCSAgIChwbGFuZV9zdGF0ZS0+YXV4LnkgPDwg MTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54KTsKIAogCWlmIChzY2FsZXJfaWQgPj0gMCkgewogCQl1 aW50MzJfdCBwc19jdHJsID0gMDsKQEAgLTk4MDcsMTAgKzk5NjEsMTYgQEAgc2t5bGFrZV9nZXRf aW5pdGlhbF9wbGFuZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCWZiLT5tb2Rp ZmllciA9IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwogCQlicmVhazsKIAljYXNlIFBMQU5FX0NU TF9USUxFRF9ZOgotCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKKwkJ aWYgKHZhbCAmIFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZiLT5tb2RpZmll ciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKKwkJZWxzZQorCQkJZmItPm1vZGlmaWVy ID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7CiAJCWJyZWFrOwogCWNhc2UgUExBTkVfQ1RMX1RJ TEVEX1lGOgotCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CisJCWlm ICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCisJCQlmYi0+bW9kaWZpZXIg PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOworCQllbHNlCisJCQlmYi0+bW9kaWZpZXIg PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCU1JU1NJ TkdfQ0FTRSh0aWxpbmcpOwpAQCAtMTIwMTQsNyArMTIxNzQsNyBAQCBzdGF0aWMgdm9pZCBza2xf ZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAogCXUzMiBjdGwsIHN0 cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKIAogCWN0bCA9IEk5MTVf UkVBRChQTEFORV9DVEwocGlwZSwgMCkpOwotCWN0bCAmPSB+UExBTkVfQ1RMX1RJTEVEX01BU0s7 CisJY3RsICY9IH4oUExBTkVfQ1RMX1RJTEVEX01BU0sgfCBQTEFORV9DVExfREVDT01QUkVTU0lP Tl9FTkFCTEUpOwogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CiAJY2FzZSBEUk1fRk9STUFUX01P RF9OT05FOgogCQlicmVhazsKQEAgLTEyMDI0LDkgKzEyMTg0LDE1IEBAIHN0YXRpYyB2b2lkIHNr bF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAkJY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZOwogCQlicmVh azsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwkJY3RsIHw9IFBMQU5FX0NU TF9USUxFRF9ZIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCQlicmVhazsKIAlj YXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9Z RjsKIAkJYnJlYWs7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQljdGwg fD0gUExBTkVfQ1RMX1RJTEVEX1lGIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwor CQlicmVhazsKIAlkZWZhdWx0OgogCQlNSVNTSU5HX0NBU0UoZmItPm1vZGlmaWVyKTsKIAl9CkBA IC0xNTkyNSw5ICsxNjA5MSwxMCBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk ZXYpOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gJmludGVsX2ZiLT5iYXNlOwogCXVu c2lnbmVkIGludCB0aWxpbmcgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3RpbGluZyhvYmopOwotCWlu dCByZXQ7Ci0JdTMyIHBpdGNoX2xpbWl0LCBzdHJpZGVfYWxpZ25tZW50OworCWludCByZXQsIGk7 CisJdTMyIHBpdGNoX2xpbWl0OwogCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9u YW1lOwogCiAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwpA QCAtMTU5NTMsNiArMTYxMjAsMTkgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAkvKiBQYXNzZWQgaW4gbW9kaWZpZXIgc2FuaXR5 IGNoZWNraW5nLiAqLwogCXN3aXRjaCAobW9kZV9jbWQtPm1vZGlmaWVyWzBdKSB7CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOgorCQlzd2l0Y2ggKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpIHsKKwkJY2FzZSBEUk1f Rk9STUFUX1hCR1I4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWNhc2UgRFJN X0ZPUk1BVF9YUkdCODg4ODoKKwkJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlEUk1fREVCVUdfS01TKCJSQyBzdXBwb3J0ZWQgb25seSB3aXRoIFJH Qjg4ODggZm9ybWF0c1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBmYWxsIHRo cm91Z2ggKi8KIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgogCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEOgogCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkpIHsKQEAgLTE2 MDU5LDIyICsxNjIzOSw0NiBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkKIAkJ cmV0dXJuIC1FSU5WQUw7CiAKLQlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2LCAm aW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1 Y3QoZGV2LCBmYiwgbW9kZV9jbWQpOwogCi0Jc3RyaWRlX2FsaWdubWVudCA9IGludGVsX2ZiX3N0 cmlkZV9hbGlnbm1lbnQoJmludGVsX2ZiLT5iYXNlLCAwKTsKLQlpZiAobW9kZV9jbWQtPnBpdGNo ZXNbMF0gJiAoc3RyaWRlX2FsaWdubWVudCAtIDEpKSB7Ci0JCURSTV9ERUJVR19LTVMoInBpdGNo ICglZCkgbXVzdCBiZSBhdCBsZWFzdCAldSBieXRlIGFsaWduZWRcbiIsCi0JCQkgICAgICBtb2Rl X2NtZC0+cGl0Y2hlc1swXSwgc3RyaWRlX2FsaWdubWVudCk7Ci0JCXJldHVybiAtRUlOVkFMOwor CWZvciAoaSA9IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspIHsKKwkJdTMyIHN0 cmlkZV9hbGlnbm1lbnQ7CisKKwkJaWYgKG1vZGVfY21kLT5oYW5kbGVzW2ldICE9IG1vZGVfY21k LT5oYW5kbGVzWzBdKSB7CisJCQlEUk1fREVCVUdfS01TKCJiYWQgcGxhbmUgJWQgaGFuZGxlXG4i LCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3RyaWRlX2FsaWdubWVudCA9IGlu dGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoZmIsIGkpOworCisJCS8qCisJCSAqIERpc3BsYXkgV0Eg IzA1MzE6IHNrbCxieHQsa2JsLGdsaworCQkgKgorCQkgKiBSZW5kZXIgZGVjb21wcmVzc2lvbiBh bmQgcGxhbmUgd2lkdGggPiAzODQwCisJCSAqIGNvbWJpbmVkIHdpdGggaG9yaXpvbnRhbCBwYW5u aW5nIHJlcXVpcmVzIHRoZQorCQkgKiBwbGFuZSBzdHJpZGUgdG8gYmUgYSBtdWx0aXBsZSBvZiA0 LiBXZSdsbCBqdXN0CisJCSAqIHJlcXVpcmUgdGhlIGVudGlyZSBmYiB0byBhY2NvbW1vZGF0ZSB0 aGF0IHRvIGF2b2lkCisJCSAqIHBvdGVudGlhbCBydW50aW1lIGVycm9ycyBhdCBwbGFuZSBjb25m aWd1cmF0aW9uIHRpbWUuCisJCSAqLworCQlpZiAoSVNfR0VOOShkZXZfcHJpdikgJiYgaSA9PSAw ICYmIGZiLT53aWR0aCA+IDM4NDAgJiYKKwkJICAgIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfQ0NTIHx8CisJCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRF9DQ1MpKQorCQkJc3RyaWRlX2FsaWdubWVudCAqPSA0OworCisJCWlmIChm Yi0+cGl0Y2hlc1tpXSAmIChzdHJpZGVfYWxpZ25tZW50IC0gMSkpIHsKKwkJCURSTV9ERUJVR19L TVMoInBsYW5lICVkIHBpdGNoICglZCkgbXVzdCBiZSBhdCBsZWFzdCAldSBieXRlIGFsaWduZWRc biIsCisJCQkJICAgICAgaSwgZmItPnBpdGNoZXNbaV0sIHN0cmlkZV9hbGlnbm1lbnQpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAlpbnRlbF9mYi0+b2JqID0gb2JqOwogCi0JcmV0 ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2LCAmaW50ZWxfZmItPmJhc2UpOworCXJldCA9 IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwgZmIpOwogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7CiAKLQlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZpbnRlbF9mYi0+YmFzZSwg JmludGVsX2ZiX2Z1bmNzKTsKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsIGZiLCAm aW50ZWxfZmJfZnVuY3MpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJmcmFtZWJ1ZmZlciBp bml0IGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jCmluZGV4IDI0OTYyM2Q0NWJlMC4uMjU3ODJjZDE3NGMwIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKQEAgLTYyLDYgKzYyLDIwIEBAIHN0YXRpYyB2b2lkIGdlbjlfaW5pdF9jbG9ja19nYXRp bmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCUk5MTVfV1JJVEUoQ0hJQ0tF Tl9QQVIxXzEsCiAJCSAgIEk5MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgfCBTS0xfRURQX1BTUl9G SVhfUkRXUkFQKTsKIAorCS8qCisJICogRGlzcGxheSBXQSMwMzkwOiBza2wsYnh0LGtibCxnbGsK KwkgKgorCSAqIE11c3QgbWF0Y2ggU2FtcGxlciwgUGl4ZWwgQmFjayBFbmQsIGFuZCBNZWRpYQor CSAqICgweEUxOTQgYml0IDgsIDB4NzAxNCBiaXQgMTMsIDB4NEREQyBiaXRzIDI3IGFuZCAzMSku CisJICoKKwkgKiBJbmNsdWRpbmcgYml0cyBvdXRzaWRlIHRoZSBwYWdlIGluIHRoZSBoYXNoIHdv dWxkCisJICogcmVxdWlyZSAyIChvciA0PykgTWlCIGFsaWdubWVudCBvZiByZXNvdXJjZXMuIEp1 c3QKKwkgKiBhc3N1bWUgdGhlIGRlZmF1bCBoYXNoaW5nIG1vZGUgd2hpY2ggb25seSB1c2VzIGJp dHMKKwkgKiB3aXRoaW4gdGhlIHBhZ2UuCisJICovCisJSTkxNV9XUklURShDSElDS0VOX1BBUjFf MSwKKwkJICAgSTkxNV9SRUFEKENISUNLRU5fUEFSMV8xKSAmIH5TS0xfUkNfSEFTSF9PVVRTSURF KTsKKwogCUk5MTVfV1JJVEUoR0VOOF9DT05GSUcwLAogCQkgICBJOTE1X1JFQUQoR0VOOF9DT05G SUcwKSB8IEdFTjlfREVGQVVMVF9GSVhFUyk7CiAKQEAgLTMzMTQsNyArMzMyOCw5IEBAIHNrbF9k ZGJfbWluX2FsbG9jKGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSwKIAogCS8q IEZvciBOb24gWS10aWxlIHJldHVybiA4LWJsb2NrcyAqLwogCWlmIChmYi0+bW9kaWZpZXIgIT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRUQgJiYKLQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRCkKKwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRCAmJgorCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf Q0NTICYmCisJICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NT KQogCQlyZXR1cm4gODsKIAogCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJmludGVsX3BzdGF0ZS0+ YmFzZS5zcmMpID4+IDE2OwpAQCAtMzU5MCw3ICszNjA2LDkgQEAgc3RhdGljIGludCBza2xfY29t cHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJ fQogCiAJeV90aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8 fAotCQkgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CisJCSAgZmIt Pm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCB8fAorCQkgIGZiLT5tb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKKwkJICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKIAl4X3RpbGVkID0gZmItPm1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwogCiAJLyogRGlzcGxheSBXQSAjMTE0MToga2JsLiAq LwpAQCAtMzY3NSw2ICszNjkzLDEzIEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20o Y29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJlc19saW5lcyA9IERJ Vl9ST1VORF9VUChzZWxlY3RlZF9yZXN1bHQudmFsLAogCQkJCSBwbGFuZV9ibG9ja3NfcGVyX2xp bmUudmFsKTsKIAorCS8qIERpc3BsYXkgV0EgIzExMjU6IHNrbCxieHQsa2JsLGdsayAqLworCWlm IChsZXZlbCA9PSAwICYmCisJICAgIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lf VElMRURfQ0NTIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEX0NDUykpCisJCXJlc19ibG9ja3MgKz0gZml4ZWRfMTZfMTZfdG9fdTMyX3JvdW5kX3VwKHlf dGlsZV9taW5pbXVtKTsKKworCS8qIERpc3BsYXkgV0EgIzExMjY6IHNrbCxieHQsa2JsLGdsayAq LwogCWlmIChsZXZlbCA+PSAxICYmIGxldmVsIDw9IDcpIHsKIAkJaWYgKHlfdGlsZWQpIHsKIAkJ CXJlc19ibG9ja3MgKz0gZml4ZWRfMTZfMTZfdG9fdTMyX3JvdW5kX3VwKHlfdGlsZV9taW5pbXVt KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKaW5kZXggNzAzMWJjNzMzZDk3Li4wNjNh OTk0ODE1ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC0yMTAsNiArMjEw LDcgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCiAJdTMy IHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5tYWluLm9mZnNldDsKIAl1bnNpZ25lZCBpbnQgcm90 YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKIAl1MzIgc3RyaWRlID0gc2tsX3Bs YW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOworCXUzMiBhdXhfc3RyaWRlID0gc2tsX3BsYW5l X3N0cmlkZShmYiwgMSwgcm90YXRpb24pOwogCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+YmFz ZS5kc3QueDE7CiAJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC55MTsKIAl1aW50 MzJfdCBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPmJhc2UuZHN0KTsKQEAg LTI0OCw2ICsyNDksMTAgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1f cGxhbmUsCiAJSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLCAoeSA8PCAx NikgfCB4KTsKIAlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCksIHN0cmlk ZSk7CiAJSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNyY19oIDw8IDE2 KSB8IHNyY193KTsKKwlJOTE1X1dSSVRFKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwK KwkJICAgKHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1eF9zdHJpZGUp OworCUk5MTVfV1JJVEUoUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJCSAgIChw bGFuZV9zdGF0ZS0+YXV4LnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54KTsKIAogCS8qIHBy b2dyYW0gcGxhbmUgc2NhbGVyICovCiAJaWYgKHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQgPj0gMCkg ewotLSAKMi4xMC4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK