From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: [PATCH 2/6] drm/i915: Add render decompression support Date: Tue, 1 Aug 2017 09:58:13 -0700 Message-ID: <20170801165817.7063-2-ben@bwidawsk.net> References: <20170801165817.7063-1-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170801165817.7063-1-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Intel GFX , DRI Development Cc: Jason Ekstrand , Ben Widawsky , 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 IGZhciBmcm9tIG9wdGltYWwsCgkJIGJ1dCBpdCB3b3Jrcy4KCgkJIEFsc28gbm90IGFsbCBwbGFu ZXMgd2lsbCBiZSBjYXBhYmxlIG9mIHNjYW5uaW5nIG91dCBjb21wcmVzc2VkIHN1cmZhY2VzLAoJ CSBhbmQgZWcuIDkwLzI3MCBkZWdyZWUgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBjb21i aW5hdGlvbiB3aXRoCgkJIGRlY29tcHJlc3Npb24gZWl0aGVyLgoKCQkgVGhpcyBwYXRjaCBtYXkg Y29udGFpbiB3b3JrIGZyb20gYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBwZW9wbGU6CgkJICogVmFu ZGFuYSBLYW5uYW4gPHZhbmRhbmEua2FubmFuQGludGVsLmNvbT4KCQkgKiBEYW5pZWwgVmV0dGVy IDxkYW5pZWxAZmZ3bGwuY2g+CgkJICogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgoK CXYyOiBEZWFsIHdpdGggZGlzcGxheSB3b3JrYXJvdW5kcyAwMzkwLCAwNTMxLCAxMTI1IChQYXVs bykKdjM6IFByZXRlbmQgQ0NTIHRpbGVzIGFyZSByZWd1bGFyIDEyOCBieXRlIHdpZGUgWSB0aWxl cyAoSmFzb24pCglQdXQgdGhlIEFVWCByZWdpc3RlciBkZWZpbmVzIHRvIHRoZSBjb3JyZWN0IHBs YWNlCglGaXggdXAgdGhlIHNsaWdodGx5IGJvZ3VzIHJvdGF0aW9uIGNoZWNrCgl2NDogVXNlIEk5 MTVfV1JJVEVfRlcoKSBkdWUgdG8gcGxhbmUgdXBkYXRlIGxvY2tpbmcgY2hhbmdlcwpzL3JldHVy biAtRUlOVkFML2dvdG8gZXJyLyBpbiBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KCkKCUVsaW1pbmF0 ZSBhIGJ1bmNoIGhhcmRjb2RlZCBudW1iZXJzIGluIENDUyBjb2RlCgp2NTogKEJ5IEJlbikKY29u ZmxpY3QgcmVzb2x1dGlvbiArCi0gICAgICAgICAgICAgICByZXNfYmxvY2tzICs9IGZpeGVkXzE2 XzE2X3RvX3UzMl9yb3VuZF91cCh5X3RpbGVfbWluaW11bSk7CisgICAgICAgICAgICAgICByZXNf YmxvY2tzICs9IGZpeGVkMTZfdG9fdTMyX3JvdW5kX3VwKHlfdGlsZV9taW5pbXVtKTsKCkNjOiBQ YXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIg PGRhbmllbEBmZndsbC5jaD4KQ2M6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KQ2M6 IEphc29uIEVrc3RyYW5kIDxqYXNvbkBqbGVrc3RyYW5kLm5ldD4KU2lnbmVkLW9mZi1ieTogVmls bGUgU3lyasOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEJl biBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4gKHYxKQpTaWduZWQtb2ZmLWJ5OiBCZW4gV2lk YXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaCAgICAgIHwgIDIzICsrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyB8IDIzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgIDI5ICsrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9zcHJpdGUuYyAgfCAgIDUgKwogNCBmaWxlcyBjaGFuZ2VkLCAyNzIgaW5zZXJ0aW9u cygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggYzcxMmQw MWY5MmFiLi5jZWE0Zjk0MWE1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNjEwNiw2 ICs2MTA2LDEwIEBAIGVudW0gewogI2RlZmluZSBfUExBTkVfS0VZTVNLXzJfQQkJCTB4NzAyOTgK ICNkZWZpbmUgX1BMQU5FX0tFWU1BWF8xX0EJCQkweDcwMWEwCiAjZGVmaW5lIF9QTEFORV9LRVlN QVhfMl9BCQkJMHg3MDJhMAorI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMV9BCQkJMHg3MDFjMAor I2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMl9BCQkJMHg3MDJjMAorI2RlZmluZSBfUExBTkVfQVVY X09GRlNFVF8xX0EJCQkweDcwMWM0CisjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzJfQQkJCTB4 NzAyYzQKICNkZWZpbmUgX1BMQU5FX0NPTE9SX0NUTF8xX0EJCQkweDcwMUNDIC8qIEdMSysgKi8K ICNkZWZpbmUgX1BMQU5FX0NPTE9SX0NUTF8yX0EJCQkweDcwMkNDIC8qIEdMSysgKi8KICNkZWZp bmUgX1BMQU5FX0NPTE9SX0NUTF8zX0EJCQkweDcwM0NDIC8qIEdMSysgKi8KQEAgLTYyMTIsNiAr NjIxNiwyNCBAQCBlbnVtIHsKICNkZWZpbmUgUExBTkVfTlYxMl9CVUZfQ0ZHKHBpcGUsIHBsYW5l KQlcCiAJX01NSU9fUExBTkUocGxhbmUsIF9QTEFORV9OVjEyX0JVRl9DRkdfMShwaXBlKSwgX1BM QU5FX05WMTJfQlVGX0NGR18yKHBpcGUpKQogCisjZGVmaW5lIF9QTEFORV9BVVhfRElTVF8xX0IJ CTB4NzExYzAKKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNUXzJfQgkJMHg3MTJjMAorI2RlZmluZSBf UExBTkVfQVVYX0RJU1RfMShwaXBlKSBcCisJCQlfUElQRShwaXBlLCBfUExBTkVfQVVYX0RJU1Rf MV9BLCBfUExBTkVfQVVYX0RJU1RfMV9CKQorI2RlZmluZSBfUExBTkVfQVVYX0RJU1RfMihwaXBl KSBcCisJCQlfUElQRShwaXBlLCBfUExBTkVfQVVYX0RJU1RfMl9BLCBfUExBTkVfQVVYX0RJU1Rf Ml9CKQorI2RlZmluZSBQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZSkgICAgIFwKKwlfTU1JT19Q TEFORShwbGFuZSwgX1BMQU5FX0FVWF9ESVNUXzEocGlwZSksIF9QTEFORV9BVVhfRElTVF8yKHBp cGUpKQorCisjZGVmaW5lIF9QTEFORV9BVVhfT0ZGU0VUXzFfQgkJMHg3MTFjNAorI2RlZmluZSBf UExBTkVfQVVYX09GRlNFVF8yX0IJCTB4NzEyYzQKKyNkZWZpbmUgX1BMQU5FX0FVWF9PRkZTRVRf MShwaXBlKSAgICAgICBcCisJCV9QSVBFKHBpcGUsIF9QTEFORV9BVVhfT0ZGU0VUXzFfQSwgX1BM QU5FX0FVWF9PRkZTRVRfMV9CKQorI2RlZmluZSBfUExBTkVfQVVYX09GRlNFVF8yKHBpcGUpICAg ICAgIFwKKwkJX1BJUEUocGlwZSwgX1BMQU5FX0FVWF9PRkZTRVRfMl9BLCBfUExBTkVfQVVYX09G RlNFVF8yX0IpCisjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmUpICAgXAorCV9N TUlPX1BMQU5FKHBsYW5lLCBfUExBTkVfQVVYX09GRlNFVF8xKHBpcGUpLCBfUExBTkVfQVVYX09G RlNFVF8yKHBpcGUpKQorCiAjZGVmaW5lIF9QTEFORV9DT0xPUl9DVExfMV9CCQkJMHg3MTFDQwog I2RlZmluZSBfUExBTkVfQ09MT1JfQ1RMXzJfQgkJCTB4NzEyQ0MKICNkZWZpbmUgX1BMQU5FX0NP TE9SX0NUTF8zX0IJCQkweDcxM0NDCkBAIC02Njk1LDYgKzY3MTcsNyBAQCBlbnVtIHsKICMgZGVm aW5lIENISUNLRU4zX0RHTUdfRE9ORV9GSVhfRElTQUJMRQkJKDEgPDwgMikKIAogI2RlZmluZSBD SElDS0VOX1BBUjFfMQkJX01NSU8oMHg0MjA4MCkKKyNkZWZpbmUgIFNLTF9SQ19IQVNIX09VVFNJ REUJKDEgPDwgMTUpCiAjZGVmaW5lICBEUEFfTUFTS19WQkxBTktfU1JECSgxIDw8IDE1KQogI2Rl ZmluZSAgRk9SQ0VfQVJCX0lETEVfUExBTkVTCSgxIDw8IDE0KQogI2RlZmluZSAgU0tMX0VEUF9Q U1JfRklYX1JEV1JBUAkoMSA8PCAzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmlu ZGV4IDZiMDA2ODllZjZlMC4uZjQ1ZjU1OTk4YTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCkBAIC0xOTk5LDExICsxOTk5LDE5IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKIAkJCXJldHVybiAx Mjg7CiAJCWVsc2UKIAkJCXJldHVybiA1MTI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1M6CisJCWlmIChwbGFuZSA9PSAxKQorCQkJcmV0dXJuIDEyODsKKwkJLyogZmFsbCB0aHJv dWdoICovCiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKIAkJaWYgKElTX0dFTjIoZGV2 X3ByaXYpIHx8IEhBU18xMjhfQllURV9ZX1RJTElORyhkZXZfcHJpdikpCiAJCQlyZXR1cm4gMTI4 OwogCQllbHNlCiAJCQlyZXR1cm4gNTEyOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE X0NDUzoKKwkJaWYgKHBsYW5lID09IDEpCisJCQlyZXR1cm4gMTI4OworCQkvKiBmYWxsIHRocm91 Z2ggKi8KIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKIAkJc3dpdGNoIChjcHApIHsK IAkJY2FzZSAxOgpAQCAtMjExMCw3ICsyMTE4LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRl bF9zdXJmX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwogCiAJLyog QVVYX0RJU1QgbmVlZHMgb25seSA0SyBhbGlnbm1lbnQgKi8KLQlpZiAoZmItPmZvcm1hdC0+Zm9y bWF0ID09IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQorCWlmIChwbGFuZSA9PSAxKQog CQlyZXR1cm4gNDA5NjsKIAogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CkBAIC0yMTIwLDYgKzIx MjgsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5 KQogCQkJcmV0dXJuIDI1NiAqIDEwMjQ7CiAJCXJldHVybiAwOworCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKIAlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEOgogCQlyZXR1cm4gMSAqIDEwMjQgKiAxMDI0OwpAQCAtMjQyNyw2ICsyNDM3LDcgQEAgc3Rh dGljIHVuc2lnbmVkIGludCBpbnRlbF9mYl9tb2RpZmllcl90b190aWxpbmcodWludDY0X3QgZmJf bW9kaWZpZXIpCiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKIAkJcmV0dXJuIEk5MTVf VElMSU5HX1g7CiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUzoKIAkJcmV0dXJuIEk5MTVfVElMSU5HX1k7CiAJZGVmYXVsdDoK IAkJcmV0dXJuIEk5MTVfVElMSU5HX05PTkU7CkBAIC0yNDkyLDYgKzI1MDMsMzYgQEAgaW50ZWxf ZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCQlpbnRl bF9mYl9vZmZzZXRfdG9feHkoJngsICZ5LCBmYiwgaSk7CiAKKwkJaWYgKChmYi0+bW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8CisJCSAgICAgZmItPm1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpICYmIGkgPT0gMSkgeworCQkJaW50IGhzdWIg PSBmYi0+Zm9ybWF0LT5oc3ViOworCQkJaW50IHZzdWIgPSBmYi0+Zm9ybWF0LT52c3ViOworCQkJ aW50IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0OworCQkJaW50IG1haW5feCwgbWFpbl95OworCQkJ aW50IGNjc194LCBjY3NfeTsKKworCQkJaW50ZWxfdGlsZV9kaW1zKGZiLCBpLCAmdGlsZV93aWR0 aCwgJnRpbGVfaGVpZ2h0KTsKKworCQkJY2NzX3ggPSAoeCAqIGhzdWIpICUgKHRpbGVfd2lkdGgg KiBoc3ViKTsKKwkJCWNjc195ID0gKHkgKiB2c3ViKSAlICh0aWxlX2hlaWdodCAqIHZzdWIpOwor CQkJbWFpbl94ID0gaW50ZWxfZmItPm5vcm1hbFswXS54ICUgKHRpbGVfd2lkdGggKiBoc3ViKTsK KwkJCW1haW5feSA9IGludGVsX2ZiLT5ub3JtYWxbMF0ueSAlICh0aWxlX2hlaWdodCAqIHZzdWIp OworCisJCQkvKgorCQkJICogQ0NTIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXQgcmVn aXN0ZXIsIHNvIHRoZSBpbnRyYSBDQ1MgdGlsZQorCQkJICogeC95IG9mZnNldHMgbXVzdCBtYXRj aCBiZXR3ZWVuIENDUyBhbmQgdGhlIG1haW4gc3VyZmFjZS4KKwkJCSAqLworCQkJaWYgKG1haW5f eCAhPSBjY3NfeCB8fCBtYWluX3kgIT0gY2NzX3kpIHsKKwkJCQlEUk1fREVCVUdfS01TKCJCYWQg Q0NTIHgveSAobWFpbiAlZCwlZCBjY3MgJWQsJWQpIGZ1bGwgKG1haW4gJWQsJWQgY2NzICVkLCVk KVxuIiwKKwkJCQkJICAgICAgbWFpbl94LCBtYWluX3ksCisJCQkJCSAgICAgIGNjc194LCBjY3Nf eSwKKwkJCQkJICAgICAgaW50ZWxfZmItPm5vcm1hbFswXS54LAorCQkJCQkgICAgICBpbnRlbF9m Yi0+bm9ybWFsWzBdLnksCisJCQkJCSAgICAgIHgsIHkpOworCQkJCXJldHVybiAtRUlOVkFMOwor CQkJfQorCQl9CisKIAkJLyoKIAkJICogVGhlIGZlbmNlIChpZiB1c2VkKSBpcyBhbGlnbmVkIHRv IHRoZSBzdGFydCBvZiB0aGUgb2JqZWN0CiAJCSAqIHNvIGhhdmluZyB0aGUgZnJhbWVidWZmZXIg d3JhcCBhcm91bmQgYWNyb3NzIHRoZSBlZGdlIG9mIHRoZQpAQCAtMjg2Niw2ICsyOTA3LDkgQEAg c3RhdGljIGludCBza2xfbWF4X3BsYW5lX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUsCiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9D Q1M6CisJCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEOgogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgogCQlzd2l0Y2ggKGNwcCkgewpA QCAtMjg4OCw2ICsyOTMyLDQ0IEBAIHN0YXRpYyBpbnQgc2tsX21heF9wbGFuZV93aWR0aChjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAogCXJldHVybiAyMDQ4Owog fQogCitzdGF0aWMgYm9vbCBza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCQkJICAgaW50IG1haW5feCwgaW50IG1h aW5feSwgdTMyIG1haW5fb2Zmc2V0KQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7CisJaW50IGhzdWIgPSBmYi0+Zm9ybWF0LT5oc3Vi OworCWludCB2c3ViID0gZmItPmZvcm1hdC0+dnN1YjsKKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0 ZS0+YXV4Lng7CisJaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmF1eC55OworCXUzMiBhdXhfb2Zm c2V0ID0gcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQ7CisJdTMyIGFsaWdubWVudCA9IGludGVsX3N1 cmZfYWxpZ25tZW50KGZiLCAxKTsKKworCXdoaWxlIChhdXhfb2Zmc2V0ID49IG1haW5fb2Zmc2V0 ICYmIGF1eF95IDw9IG1haW5feSkgeworCQlpbnQgeCwgeTsKKworCQlpZiAoYXV4X3ggPT0gbWFp bl94ICYmIGF1eF95ID09IG1haW5feSkKKwkJCWJyZWFrOworCisJCWlmIChhdXhfb2Zmc2V0ID09 IDApCisJCQlicmVhazsKKworCQl4ID0gYXV4X3ggLyBoc3ViOworCQl5ID0gYXV4X3kgLyB2c3Vi OworCQlhdXhfb2Zmc2V0ID0gaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVf c3RhdGUsIDEsCisJCQkJCQkgICAgICBhdXhfb2Zmc2V0LCBhdXhfb2Zmc2V0IC0gYWxpZ25tZW50 KTsKKwkJYXV4X3ggPSB4ICogaHN1YiArIGF1eF94ICUgaHN1YjsKKwkJYXV4X3kgPSB5ICogdnN1 YiArIGF1eF95ICUgdnN1YjsKKwl9CisKKwlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9 IG1haW5feSkKKwkJcmV0dXJuIGZhbHNlOworCisJcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSBh dXhfb2Zmc2V0OworCXBsYW5lX3N0YXRlLT5hdXgueCA9IGF1eF94OworCXBsYW5lX3N0YXRlLT5h dXgueSA9IGF1eF95OworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgc2tsX2NoZWNr X21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewog CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7 CkBAIC0yOTMwLDcgKzMwMTIsNyBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAogCQl3aGlsZSAoKHggKyB3 KSAqIGNwcCA+IGZiLT5waXRjaGVzWzBdKSB7CiAJCQlpZiAob2Zmc2V0ID09IDApIHsKLQkJCQlE Uk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zm c2V0XG4iKTsKKwkJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNw bGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBYLXRpbGluZ1xuIik7CiAJCQkJcmV0dXJuIC1FSU5W QUw7CiAJCQl9CiAKQEAgLTI5MzksNiArMzAyMSwyNiBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19t YWluX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAkJfQog CX0KIAorCS8qCisJICogQ0NTIEFVWCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBv ZmZzZXRzLCB3ZSBtdXN0IG1ha2Ugc3VyZQorCSAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFpbiBz dXJmYWNlIHgveSBvZmZzZXRzLgorCSAqLworCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfQ0NTIHx8CisJICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRURfQ0NTKSB7CisJCXdoaWxlICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5h dGVzKHBsYW5lX3N0YXRlLCB4LCB5LCBvZmZzZXQpKSB7CisJCQlpZiAob2Zmc2V0ID09IDApCisJ CQkJYnJlYWs7CisKKwkJCW9mZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnks IHBsYW5lX3N0YXRlLCAwLAorCQkJCQkJCSAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOwor CQl9CisKKwkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmF1eC54IHx8IHkgIT0gcGxhbmVfc3RhdGUt PmF1eC55KSB7CisJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8gZmluZCBzdWl0YWJsZSBkaXNw bGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0KKwl9CisKIAlwbGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQgPSBvZmZzZXQ7CiAJcGxhbmVfc3Rh dGUtPm1haW4ueCA9IHg7CiAJcGxhbmVfc3RhdGUtPm1haW4ueSA9IHk7CkBAIC0yOTc1LDYgKzMw NzcsNDkgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50 IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUo cGxhbmVfc3RhdGUtPmJhc2UucGxhbmUpOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9f aW50ZWxfY3J0YyhwbGFuZV9zdGF0ZS0+YmFzZS5jcnRjKTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOworCWludCBzcmNfeCA9IHBsYW5l X3N0YXRlLT5iYXNlLnNyYy54MSA+PiAxNjsKKwlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5zcmMueTEgPj4gMTY7CisJaW50IGhzdWIgPSBmYi0+Zm9ybWF0LT5oc3ViOworCWludCB2c3Vi ID0gZmItPmZvcm1hdC0+dnN1YjsKKwlpbnQgeCA9IHNyY194IC8gaHN1YjsKKwlpbnQgeSA9IHNy Y195IC8gdnN1YjsKKwl1MzIgb2Zmc2V0OworCisJc3dpdGNoIChwbGFuZS0+aWQpIHsKKwljYXNl IFBMQU5FX1BSSU1BUlk6CisJY2FzZSBQTEFORV9TUFJJVEUwOgorCQlicmVhazsKKwlkZWZhdWx0 OgorCQlEUk1fREVCVUdfS01TKCJSQyBzdXBwb3J0IG9ubHkgb24gcGxhbmUgMSBhbmQgMlxuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjcnRjLT5waXBlID09IFBJUEVfQykgewor CQlEUk1fREVCVUdfS01TKCJObyBSQyBzdXBwb3J0IG9uIHBpcGUgQ1xuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWlmIChwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiAmIH4oRFJNX01P REVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfMTgwKSkgeworCQlEUk1fREVCVUdfS01TKCJS QyBzdXBwb3J0IG9ubHkgd2l0aCAwLzE4MCBkZWdyZWUgcm90YXRpb24gJXhcbiIsCisJCQkgICAg ICBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOworCW9mZnNldCA9 IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7CisKKwlw bGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCA9IG9mZnNldDsKKwlwbGFuZV9zdGF0ZS0+YXV4LnggPSB4 ICogaHN1YiArIHNyY194ICUgaHN1YjsKKwlwbGFuZV9zdGF0ZS0+YXV4LnkgPSB5ICogdnN1YiAr IHNyY195ICUgdnN1YjsKKworCXJldHVybiAwOworfQorCiBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1 cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKIAljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwpAQCAtMjk5 OCw2ICszMTQzLDExIEBAIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OworCX0gZWxzZSBp ZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCQkgICBm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykgeworCQlyZXQgPSBz a2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CiAJfSBlbHNlIHsKIAkJcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSB+MHhmZmY7 CiAJCXBsYW5lX3N0YXRlLT5hdXgueCA9IDA7CkBAIC0zMzA0LDggKzM0NTQsMTIgQEAgc3RhdGlj IHUzMiBza2xfcGxhbmVfY3RsX3RpbGluZyh1aW50NjRfdCBmYl9tb2RpZmllcikKIAkJcmV0dXJu IFBMQU5FX0NUTF9USUxFRF9YOwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CiAJCXJl dHVybiBQTEFORV9DVExfVElMRURfWTsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05f RU5BQkxFOwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgogCQlyZXR1cm4gUExBTkVf Q1RMX1RJTEVEX1lGOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJcmV0 dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8IFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRTsK IAlkZWZhdWx0OgogCQlNSVNTSU5HX0NBU0UoZmJfbW9kaWZpZXIpOwogCX0KQEAgLTMzNzgsNiAr MzUzMiw3IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSwKIAl1MzIgcGxhbmVfY3RsID0gcGxhbmVfc3RhdGUtPmN0bDsK IAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKIAl1 MzIgc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOworCXUzMiBhdXhf c3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMSwgcm90YXRpb24pOwogCXUzMiBzdXJmX2Fk ZHIgPSBwbGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQ7CiAJaW50IHNjYWxlcl9pZCA9IHBsYW5lX3N0 YXRlLT5zY2FsZXJfaWQ7CiAJaW50IHNyY194ID0gcGxhbmVfc3RhdGUtPm1haW4ueDsKQEAgLTM0 MTQsNiArMzU2OSwxMCBAQCBzdGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5l KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCiAJSTkxNV9XUklURV9GVyhQTEFORV9PRkZTRVQo cGlwZSwgcGxhbmVfaWQpLCAoc3JjX3kgPDwgMTYpIHwgc3JjX3gpOwogCUk5MTVfV1JJVEVfRlco UExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsKIAlJOTE1X1dSSVRFX0ZXKFBM QU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpLCAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOworCUk5MTVf V1JJVEVfRlcoUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLAorCQkgICAgICAocGxhbmVf c3RhdGUtPmF1eC5vZmZzZXQgLSBzdXJmX2FkZHIpIHwgYXV4X3N0cmlkZSk7CisJSTkxNV9XUklU RV9GVyhQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKKwkJICAgICAgKHBsYW5lX3N0 YXRlLT5hdXgueSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+YXV4LngpOwogCiAJaWYgKHNjYWxlcl9p ZCA+PSAwKSB7CiAJCXVpbnQzMl90IHBzX2N0cmwgPSAwOwpAQCAtODQ2MSwxMCArODYyMCwxNiBA QCBza3lsYWtlX2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YywKIAkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7CiAJCWJyZWFrOwog CWNhc2UgUExBTkVfQ1RMX1RJTEVEX1k6Ci0JCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEOworCQlpZiAodmFsICYgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFKQor CQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOworCQllbHNlCisJ CQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKIAkJYnJlYWs7CiAJY2Fz ZSBQTEFORV9DVExfVElMRURfWUY6Ci0JCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRDsKKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJ CWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7CisJCWVsc2UKKwkJ CWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKIAkJYnJlYWs7CiAJZGVm YXVsdDoKIAkJTUlTU0lOR19DQVNFKHRpbGluZyk7CkBAIC0xNDQ2NCwxMCArMTQ2MjksMTIgQEAg c3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZl ciAqaW50ZWxfZmIsCiAJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShvYmotPmJhc2Uu ZGV2KTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9ICZpbnRlbF9mYi0+YmFzZTsKIAlz dHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBmb3JtYXRfbmFtZTsKLQl1MzIgcGl0Y2hfbGltaXQs IHN0cmlkZV9hbGlnbm1lbnQ7CisJdTMyIHBpdGNoX2xpbWl0OwogCXVuc2lnbmVkIGludCB0aWxp bmcsIHN0cmlkZTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgaTsKIAogCWk5MTVfZ2VtX29i amVjdF9sb2NrKG9iaik7CiAJb2JqLT5mcmFtZWJ1ZmZlcl9yZWZlcmVuY2VzKys7CkBAIC0xNDQ5 Niw2ICsxNDY2MywxOSBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0 IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiwKIAogCS8qIFBhc3NlZCBpbiBtb2RpZmllciBz YW5pdHkgY2hlY2tpbmcuICovCiAJc3dpdGNoIChtb2RlX2NtZC0+bW9kaWZpZXJbMF0pIHsKKwlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1M6CisJCXN3aXRjaCAobW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCkgeworCQljYXNl IERSTV9GT1JNQVRfWEJHUjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJY2Fz ZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9ERUJVR19LTVMoIlJDIHN1cHBvcnRlZCBvbmx5IHdp dGggUkdCODg4OCBmb3JtYXRzXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCS8qIGZhbGwgdGhy b3VnaCAqLwogCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CiAJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQ6CiAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkgewpAQCAtMTQ2 MDAsMjUgKzE0NzgwLDQ2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1 Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiLAogCWlmIChtb2RlX2NtZC0+b2Zmc2V0c1sw XSAhPSAwKQogCQlnb3RvIGVycjsKIAotCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgm ZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgICAgJmludGVsX2ZiLT5iYXNlLCBtb2RlX2NtZCk7CisJ ZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZkZXZfcHJpdi0+ZHJtLCBmYiwgbW9kZV9j bWQpOwogCi0Jc3RyaWRlX2FsaWdubWVudCA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoJmlu dGVsX2ZiLT5iYXNlLCAwKTsKLQlpZiAobW9kZV9jbWQtPnBpdGNoZXNbMF0gJiAoc3RyaWRlX2Fs aWdubWVudCAtIDEpKSB7Ci0JCURSTV9ERUJVR19LTVMoInBpdGNoICglZCkgbXVzdCBiZSBhdCBs ZWFzdCAldSBieXRlIGFsaWduZWRcbiIsCi0JCQkgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1swXSwg c3RyaWRlX2FsaWdubWVudCk7Ci0JCWdvdG8gZXJyOworCWZvciAoaSA9IDA7IGkgPCBmYi0+Zm9y bWF0LT5udW1fcGxhbmVzOyBpKyspIHsKKwkJdTMyIHN0cmlkZV9hbGlnbm1lbnQ7CisKKwkJaWYg KG1vZGVfY21kLT5oYW5kbGVzW2ldICE9IG1vZGVfY21kLT5oYW5kbGVzWzBdKSB7CisJCQlEUk1f REVCVUdfS01TKCJiYWQgcGxhbmUgJWQgaGFuZGxlXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFM OworCQl9CisKKwkJc3RyaWRlX2FsaWdubWVudCA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQo ZmIsIGkpOworCisJCS8qCisJCSAqIERpc3BsYXkgV0EgIzA1MzE6IHNrbCxieHQsa2JsLGdsawor CQkgKgorCQkgKiBSZW5kZXIgZGVjb21wcmVzc2lvbiBhbmQgcGxhbmUgd2lkdGggPiAzODQwCisJ CSAqIGNvbWJpbmVkIHdpdGggaG9yaXpvbnRhbCBwYW5uaW5nIHJlcXVpcmVzIHRoZQorCQkgKiBw bGFuZSBzdHJpZGUgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LiBXZSdsbCBqdXN0CisJCSAqIHJlcXVp cmUgdGhlIGVudGlyZSBmYiB0byBhY2NvbW1vZGF0ZSB0aGF0IHRvIGF2b2lkCisJCSAqIHBvdGVu dGlhbCBydW50aW1lIGVycm9ycyBhdCBwbGFuZSBjb25maWd1cmF0aW9uIHRpbWUuCisJCSAqLwor CQlpZiAoSVNfR0VOOShkZXZfcHJpdikgJiYgaSA9PSAwICYmIGZiLT53aWR0aCA+IDM4NDAgJiYK KwkJICAgIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8CisJ CSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpKQorCQkJ c3RyaWRlX2FsaWdubWVudCAqPSA0OworCisJCWlmIChmYi0+cGl0Y2hlc1tpXSAmIChzdHJpZGVf YWxpZ25tZW50IC0gMSkpIHsKKwkJCURSTV9ERUJVR19LTVMoInBsYW5lICVkIHBpdGNoICglZCkg bXVzdCBiZSBhdCBsZWFzdCAldSBieXRlIGFsaWduZWRcbiIsCisJCQkJICAgICAgaSwgZmItPnBp dGNoZXNbaV0sIHN0cmlkZV9hbGlnbm1lbnQpOworCQkJZ290byBlcnI7CisJCX0KIAl9CiAKIAlp bnRlbF9mYi0+b2JqID0gb2JqOwogCi0JcmV0ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2 LCAmaW50ZWxfZmItPmJhc2UpOworCXJldCA9IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwg ZmIpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2lu aXQob2JqLT5iYXNlLmRldiwKLQkJCQkgICAmaW50ZWxfZmItPmJhc2UsCi0JCQkJICAgJmludGVs X2ZiX2Z1bmNzKTsKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdCgmZGV2X3ByaXYtPmRybSwg ZmIsICZpbnRlbF9mYl9mdW5jcyk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImZyYW1lYnVm ZmVyIGluaXQgZmFpbGVkICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCmluZGV4IGVlMmEzNDljZmU2OC4uZjk1OTNlNGQ1NjJjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmMKQEAgLTYyLDYgKzYyLDIwIEBAIHN0YXRpYyB2b2lkIGdlbjlfaW5pdF9jbG9ja19n YXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCUk5MTVfV1JJVEUoQ0hJ Q0tFTl9QQVIxXzEsCiAJCSAgIEk5MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgfCBTS0xfRURQX1BT Ul9GSVhfUkRXUkFQKTsKIAorCS8qCisJICogRGlzcGxheSBXQSMwMzkwOiBza2wsYnh0LGtibCxn bGsKKwkgKgorCSAqIE11c3QgbWF0Y2ggU2FtcGxlciwgUGl4ZWwgQmFjayBFbmQsIGFuZCBNZWRp YQorCSAqICgweEUxOTQgYml0IDgsIDB4NzAxNCBiaXQgMTMsIDB4NEREQyBiaXRzIDI3IGFuZCAz MSkuCisJICoKKwkgKiBJbmNsdWRpbmcgYml0cyBvdXRzaWRlIHRoZSBwYWdlIGluIHRoZSBoYXNo IHdvdWxkCisJICogcmVxdWlyZSAyIChvciA0PykgTWlCIGFsaWdubWVudCBvZiByZXNvdXJjZXMu IEp1c3QKKwkgKiBhc3N1bWUgdGhlIGRlZmF1bCBoYXNoaW5nIG1vZGUgd2hpY2ggb25seSB1c2Vz IGJpdHMKKwkgKiB3aXRoaW4gdGhlIHBhZ2UuCisJICovCisJSTkxNV9XUklURShDSElDS0VOX1BB UjFfMSwKKwkJICAgSTkxNV9SRUFEKENISUNLRU5fUEFSMV8xKSAmIH5TS0xfUkNfSEFTSF9PVVRT SURFKTsKKwogCUk5MTVfV1JJVEUoR0VOOF9DT05GSUcwLAogCQkgICBJOTE1X1JFQUQoR0VOOF9D T05GSUcwKSB8IEdFTjlfREVGQVVMVF9GSVhFUyk7CiAKQEAgLTQwNzEsNyArNDA4NSw5IEBAIHNr bF9kZGJfbWluX2FsbG9jKGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSwKIAog CS8qIEZvciBOb24gWS10aWxlIHJldHVybiA4LWJsb2NrcyAqLwogCWlmIChmYi0+bW9kaWZpZXIg IT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgJiYKLQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRCkKKwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01P RF9ZZl9USUxFRCAmJgorCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfQ0NTICYmCisJICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURf Q0NTKQogCQlyZXR1cm4gODsKIAogCS8qCkBAIC00Mzc3LDcgKzQzOTMsOSBAQCBzdGF0aWMgaW50 IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKIAl9CiAKIAl5X3RpbGVkID0gZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEIHx8Ci0JCSAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsK KwkJICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEIHx8CisJCSAgZmIt Pm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAorCQkgIGZiLT5tb2Rp ZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOwogCXhfdGlsZWQgPSBmYi0+bW9k aWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7CiAKIAkvKiBEaXNwbGF5IFdBICMxMTQx OiBrYmwsY2ZsICovCkBAIC00NDcyLDYgKzQ0OTAsMTMgQEAgc3RhdGljIGludCBza2xfY29tcHV0 ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmVz X2xpbmVzID0gZGl2X3JvdW5kX3VwX2ZpeGVkMTYoc2VsZWN0ZWRfcmVzdWx0LAogCQkJCQkgcGxh bmVfYmxvY2tzX3Blcl9saW5lKTsKIAorCS8qIERpc3BsYXkgV0EgIzExMjU6IHNrbCxieHQsa2Js LGdsayAqLworCWlmIChsZXZlbCA9PSAwICYmCisJICAgIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEX0NDUykpCisJCXJlc19ibG9ja3MgKz0gZml4ZWQxNl90b191MzJfcm91 bmRfdXAoeV90aWxlX21pbmltdW0pOworCisJLyogRGlzcGxheSBXQSAjMTEyNjogc2tsLGJ4dCxr YmwsZ2xrICovCiAJaWYgKGxldmVsID49IDEgJiYgbGV2ZWwgPD0gNykgewogCQlpZiAoeV90aWxl ZCkgewogCQkJcmVzX2Jsb2NrcyArPSBmaXhlZDE2X3RvX3UzMl9yb3VuZF91cCh5X3RpbGVfbWlu aW11bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCmluZGV4IDk0ZjlhMTMzMmRiZi4u NWUyZjRhOWI4ZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJp dGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwpAQCAtMjQ0LDYg KzI0NCw3IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKIAl1 MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0OwogCXVuc2lnbmVkIGludCBy b3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwogCXUzMiBzdHJpZGUgPSBza2xf cGxhbmVfc3RyaWRlKGZiLCAwLCByb3RhdGlvbik7CisJdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxh bmVfc3RyaWRlKGZiLCAxLCByb3RhdGlvbik7CiAJaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5i YXNlLmRzdC54MTsKIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LnkxOwogCXVp bnQzMl90IGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwpA QCAtMjc4LDYgKzI3OSwxMCBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUsCiAJSTkxNV9XUklURV9GVyhQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLCAoeSA8 PCAxNikgfCB4KTsKIAlJOTE1X1dSSVRFX0ZXKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCks IHN0cmlkZSk7CiAJSTkxNV9XUklURV9GVyhQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNy Y19oIDw8IDE2KSB8IHNyY193KTsKKwlJOTE1X1dSSVRFX0ZXKFBMQU5FX0FVWF9ESVNUKHBpcGUs IHBsYW5lX2lkKSwKKwkJICAgICAgKHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRy KSB8IGF1eF9zdHJpZGUpOworCUk5MTVfV1JJVEVfRlcoUExBTkVfQVVYX09GRlNFVChwaXBlLCBw bGFuZV9pZCksCisJCSAgICAgIChwbGFuZV9zdGF0ZS0+YXV4LnkgPDwgMTYpIHwgcGxhbmVfc3Rh dGUtPmF1eC54KTsKIAogCS8qIHByb2dyYW0gcGxhbmUgc2NhbGVyICovCiAJaWYgKHBsYW5lX3N0 YXRlLT5zY2FsZXJfaWQgPj0gMCkgewotLSAKMi4xMy4zCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK