From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH v4 03/10] drm/imx: atomic phase 1: Use transitional atomic CRTC and plane helpers Date: Fri, 8 Jul 2016 17:40:55 +0800 Message-ID: <1467970862-28012-4-git-send-email-gnuiyl@gmail.com> References: <1467970862-28012-1-git-send-email-gnuiyl@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0053.outbound.protection.outlook.com [104.47.36.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 582E36E0FF for ; Fri, 8 Jul 2016 09:41:27 +0000 (UTC) In-Reply-To: <1467970862-28012-1-git-send-email-gnuiyl@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Russell King , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org VXNlIHRoZSBkcm1fcGxhbmVfaGVscGVyX3VwZGF0ZS9kaXNhYmxlKCkgYW5kIGRybV9oZWxwZXJf Y3J0Y19tb2RlX3NldCgpCnRyYW5zaXRpb25hbCBhdG9taWMgaGVscGVycy4gIFRoZSBjcnRjLT5t b2RlX3NldF9ub2ZiIGNhbGxiYWNrIGlzIGFkZGVkCnNvIHRoYXQgdGhlIHByaW1hcnkgcGxhbmUg aXMgbm8gbG9uZ2VyIHRpZWQgdG8gdGhlIENSVEMuICBDaGVjay91cGRhdGUKbG9naWNzIGFyZSBz ZXBhcmF0ZWQgdG8gbWFrZSBzdXJlIGNydGMtPm1vZGVfc2V0X25vZmIgYW5kIHBsYW5lLT5hdG9t aWNfdXBkYXRlCmFyZSBhbHdheXMgc3VjY2Vzc2Z1bC4gIEFsc28sIHNvbWUgbmVjZXNzYXJ5IGxv Z2ljcyBhcmUgdHdlYWtlZCBmb3IgYSBzbW9vdGgKdHJhbnNpdGlvbi4KClNpZ25lZC1vZmYtYnk6 IExpdSBZaW5nIDxnbnVpeWxAZ21haWwuY29tPgotLS0KdjMtPnY0OgoqIFN0YXRpY2l6ZSBpcHVf cGxhbmVfYXRvbWljX3NldF9iYXNlKCkuCgp2Mi0+djM6CiogQSBtaW5vciBjaGFuZ2UgdG8gc2lt cGxpZnkgdGhlIHdheSB3ZSBmaW5kIGNydGMtPmVuYWJsZWQgaW4KICBkcm1fcGxhbmVfaGVscGVy X2Z1bmNzLT5hdG9taWNfY2hlY2suCgp2MS0+djI6CiogR2V0IHRoZSBvdmVybGF5IGlwdSBwbGFu ZSByZXNvdXJjZSB3aGVuIGluaXRpYWxpemluZyB0aGUgcmVsZXZhbnQgQ1JUQwogIGFuZCBkbyBu b3QgZ2V0IGlwdSBwbGFuZSByZXNvdXJjZSBhbnkgbW9yZSB3aGVuIHVwZGF0aW5nIHBsYW5lIHRv IGF2b2lkCiAgcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsdXJlLgoqIFJlbW92ZSBvYnNvbGV0ZSBj b21tZW50cyBmcm9tIGlwdV9jcnRjX2VuYWJsZS9kaXNhYmxlKCkuCgogZHJpdmVycy9ncHUvZHJt L2lteC9pcHV2My1jcnRjLmMgIHwgMTk3ICsrKysrKysrLS0tLS0tLQogZHJpdmVycy9ncHUvZHJt L2lteC9pcHV2My1wbGFuZS5jIHwgNTExICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmggfCAgMTYgKy0KIGRyaXZl cnMvZ3B1L2lwdS12My9pcHUtZGMuYyAgICAgICB8ICAgNSArLQogZHJpdmVycy9ncHUvaXB1LXYz L2lwdS1kaS5jICAgICAgIHwgICAzIC0KIDUgZmlsZXMgY2hhbmdlZCwgNDEwIGluc2VydGlvbnMo KyksIDMyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lw dXYzLWNydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCmluZGV4IGZjMDQw NDEuLmJhODgwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCkBAIC03Myw3ICs3Myw3IEBA IHN0cnVjdCBpcHVfY3J0YyB7CiAKICNkZWZpbmUgdG9faXB1X2NydGMoeCkgY29udGFpbmVyX29m KHgsIHN0cnVjdCBpcHVfY3J0YywgYmFzZSkKIAotc3RhdGljIHZvaWQgaXB1X2ZiX2VuYWJsZShz dHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQorc3RhdGljIHZvaWQgaXB1X2NydGNfZW5hYmxlKHN0 cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCiB7CiAJc3RydWN0IGlwdV9zb2MgKmlwdSA9IGRldl9n ZXRfZHJ2ZGF0YShpcHVfY3J0Yy0+ZGV2LT5wYXJlbnQpOwogCkBAIC04MSwzMCArODEsMzAgQEAg c3RhdGljIHZvaWQgaXB1X2ZiX2VuYWJsZShzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQogCQly ZXR1cm47CiAKIAlpcHVfZGNfZW5hYmxlKGlwdSk7Ci0JaXB1X3BsYW5lX2VuYWJsZShpcHVfY3J0 Yy0+cGxhbmVbMF0pOwotCS8qIFN0YXJ0IERDIGNoYW5uZWwgYW5kIERJIGFmdGVyIElETUFDICov CiAJaXB1X2RjX2VuYWJsZV9jaGFubmVsKGlwdV9jcnRjLT5kYyk7CiAJaXB1X2RpX2VuYWJsZShp cHVfY3J0Yy0+ZGkpOwotCWRybV9jcnRjX3ZibGFua19vbigmaXB1X2NydGMtPmJhc2UpOwotCiAJ aXB1X2NydGMtPmVuYWJsZWQgPSAxOworCisJLyoKKwkgKiBJbiBvcmRlciBub3QgdG8gYmUgd2Fy bmVkIG9uIGVuYWJsaW5nIHZibGFuayBmYWlsdXJlLAorCSAqIHdlIHNob3VsZCBjYWxsIGRybV9j cnRjX3ZibGFua19vbigpIGFmdGVyIC0+ZW5hYmxlZCBpcyBzZXQgdG8gMS4KKwkgKi8KKwlkcm1f Y3J0Y192Ymxhbmtfb24oJmlwdV9jcnRjLT5iYXNlKTsKIH0KIAotc3RhdGljIHZvaWQgaXB1X2Zi X2Rpc2FibGUoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykKK3N0YXRpYyB2b2lkIGlwdV9jcnRj X2Rpc2FibGUoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykKIHsKIAlzdHJ1Y3QgaXB1X3NvYyAq aXB1ID0gZGV2X2dldF9kcnZkYXRhKGlwdV9jcnRjLT5kZXYtPnBhcmVudCk7CiAKIAlpZiAoIWlw dV9jcnRjLT5lbmFibGVkKQogCQlyZXR1cm47CiAKLQkvKiBTdG9wIERDIGNoYW5uZWwgYW5kIERJ IGJlZm9yZSBJRE1BQyAqLwogCWlwdV9kY19kaXNhYmxlX2NoYW5uZWwoaXB1X2NydGMtPmRjKTsK IAlpcHVfZGlfZGlzYWJsZShpcHVfY3J0Yy0+ZGkpOwotCWlwdV9wbGFuZV9kaXNhYmxlKGlwdV9j cnRjLT5wbGFuZVswXSk7CiAJaXB1X2RjX2Rpc2FibGUoaXB1KTsKLQlkcm1fY3J0Y192Ymxhbmtf b2ZmKCZpcHVfY3J0Yy0+YmFzZSk7Ci0KIAlpcHVfY3J0Yy0+ZW5hYmxlZCA9IDA7CisKKwlkcm1f Y3J0Y192Ymxhbmtfb2ZmKCZpcHVfY3J0Yy0+YmFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdV9j cnRjX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgbW9kZSkKQEAgLTExNSwxMiArMTE1 LDEyIEBAIHN0YXRpYyB2b2lkIGlwdV9jcnRjX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBp bnQgbW9kZSkKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKLQkJ aXB1X2ZiX2VuYWJsZShpcHVfY3J0Yyk7CisJCWlwdV9jcnRjX2VuYWJsZShpcHVfY3J0Yyk7CiAJ CWJyZWFrOwogCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgogCWNhc2UgRFJNX01PREVfRFBN U19TVVNQRU5EOgogCWNhc2UgRFJNX01PREVfRFBNU19PRkY6Ci0JCWlwdV9mYl9kaXNhYmxlKGlw dV9jcnRjKTsKKwkJaXB1X2NydGNfZGlzYWJsZShpcHVfY3J0Yyk7CiAJCWJyZWFrOwogCX0KIH0K QEAgLTIzNCw3OSArMjM0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBp cHVfY3J0Y19mdW5jcyA9IHsKIAkucGFnZV9mbGlwID0gaXB1X3BhZ2VfZmxpcCwKIH07CiAKLXN0 YXRpYyBpbnQgaXB1X2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAg ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvcmlnX21vZGUsCi0JCQkgICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgICAgICAgaW50IHgsIGludCB5LAotCQkJICAg ICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKLXsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1 Y3QgaXB1X2NydGMgKmlwdV9jcnRjID0gdG9faXB1X2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGlwdV9k aV9zaWduYWxfY2ZnIHNpZ19jZmcgPSB7fTsKLQl1bnNpZ25lZCBsb25nIGVuY29kZXJfdHlwZXMg PSAwOwotCWludCByZXQ7Ci0KLQlkZXZfZGJnKGlwdV9jcnRjLT5kZXYsICIlczogbW9kZS0+aGRp c3BsYXk6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCW1vZGUtPmhkaXNwbGF5KTsKLQlkZXZfZGJnKGlw dV9jcnRjLT5kZXYsICIlczogbW9kZS0+dmRpc3BsYXk6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCW1v ZGUtPnZkaXNwbGF5KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9k ZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQotCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRj KQotCQkJZW5jb2Rlcl90eXBlcyB8PSBCSVQoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlKTsKLQotCWRl dl9kYmcoaXB1X2NydGMtPmRldiwgIiVzOiBhdHRhY2hlZCB0byBlbmNvZGVyIHR5cGVzIDB4JWx4 XG4iLAotCQlfX2Z1bmNfXywgZW5jb2Rlcl90eXBlcyk7Ci0KLQkvKgotCSAqIElmIHdlIGhhdmUg REFDIG9yIExEQiwgdGhlbiB3ZSBuZWVkIHRoZSBJUFUgREkgY2xvY2sgdG8gYmUKLQkgKiB0aGUg c2FtZSBhcyB0aGUgTERCIERJIGNsb2NrLiBGb3IgVFZEQUMsIGRlcml2ZSB0aGUgSVBVIERJCi0J ICogY2xvY2sgZnJvbSAyNyBNSHogVFZFX0RJIGNsb2NrLCBidXQgYWxsb3cgdG8gZGl2aWRlIGl0 LgotCSAqLwotCWlmIChlbmNvZGVyX3R5cGVzICYgKEJJVChEUk1fTU9ERV9FTkNPREVSX0RBQykg fAotCQkJICAgICBCSVQoRFJNX01PREVfRU5DT0RFUl9MVkRTKSkpCi0JCXNpZ19jZmcuY2xrZmxh Z3MgPSBJUFVfRElfQ0xLTU9ERV9TWU5DIHwgSVBVX0RJX0NMS01PREVfRVhUOwotCWVsc2UgaWYg KGVuY29kZXJfdHlwZXMgJiBCSVQoRFJNX01PREVfRU5DT0RFUl9UVkRBQykpCi0JCXNpZ19jZmcu Y2xrZmxhZ3MgPSBJUFVfRElfQ0xLTU9ERV9FWFQ7Ci0JZWxzZQotCQlzaWdfY2ZnLmNsa2ZsYWdz ID0gMDsKLQotCXNpZ19jZmcuZW5hYmxlX3BvbCA9ICEoaXB1X2NydGMtPmJ1c19mbGFncyAmIERS TV9CVVNfRkxBR19ERV9MT1cpOwotCS8qIERlZmF1bHQgdG8gZHJpdmluZyBwaXhlbCBkYXRhIG9u IG5lZ2F0aXZlIGNsb2NrIGVkZ2VzICovCi0Jc2lnX2NmZy5jbGtfcG9sID0gISEoaXB1X2NydGMt PmJ1c19mbGFncyAmCi0JCQkgICAgIERSTV9CVVNfRkxBR19QSVhEQVRBX1BPU0VER0UpOwotCXNp Z19jZmcuYnVzX2Zvcm1hdCA9IGlwdV9jcnRjLT5idXNfZm9ybWF0OwotCXNpZ19jZmcudl90b19o X3N5bmMgPSAwOwotCXNpZ19jZmcuaHN5bmNfcGluID0gaXB1X2NydGMtPmRpX2hzeW5jX3BpbjsK LQlzaWdfY2ZnLnZzeW5jX3BpbiA9IGlwdV9jcnRjLT5kaV92c3luY19waW47Ci0KLQlkcm1fZGlz cGxheV9tb2RlX3RvX3ZpZGVvbW9kZShtb2RlLCAmc2lnX2NmZy5tb2RlKTsKLQotCXJldCA9IGlw dV9kY19pbml0X3N5bmMoaXB1X2NydGMtPmRjLCBpcHVfY3J0Yy0+ZGksCi0JCQkgICAgICAgbW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSwKLQkJCSAgICAgICBpcHVfY3J0Yy0+ YnVzX2Zvcm1hdCwgbW9kZS0+aGRpc3BsYXkpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihpcHVf Y3J0Yy0+ZGV2LAotCQkJCSJpbml0aWFsaXppbmcgZGlzcGxheSBjb250cm9sbGVyIGZhaWxlZCB3 aXRoICVkXG4iLAotCQkJCXJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gaXB1X2Rp X2luaXRfc3luY19wYW5lbChpcHVfY3J0Yy0+ZGksICZzaWdfY2ZnKTsKLQlpZiAocmV0KSB7Ci0J CWRldl9lcnIoaXB1X2NydGMtPmRldiwKLQkJCQkiaW5pdGlhbGl6aW5nIHBhbmVsIGZhaWxlZCB3 aXRoICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBpcHVfcGxhbmVf bW9kZV9zZXQoaXB1X2NydGMtPnBsYW5lWzBdLCBjcnRjLCBtb2RlLAotCQkJCSAgY3J0Yy0+cHJp bWFyeS0+ZmIsCi0JCQkJICAwLCAwLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCi0J CQkJICB4LCB5LCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCi0JCQkJICBtb2RlLT5m bGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKTsKLX0KLQogc3RhdGljIHZvaWQgaXB1X2Ny dGNfaGFuZGxlX3BhZ2VmbGlwKHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMpCiB7CiAJdW5zaWdu ZWQgbG9uZyBmbGFnczsKQEAgLTMzMCw4ICsyNTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaXB1 X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIAlpZiAoaXB1X2NydGMtPmZsaXBf c3RhdGUgPT0gSVBVX0ZMSVBfU1VCTUlUVEVEKSB7CiAJCXN0cnVjdCBpcHVfcGxhbmUgKnBsYW5l ID0gaXB1X2NydGMtPnBsYW5lWzBdOwogCi0JCWlwdV9wbGFuZV9zZXRfYmFzZShwbGFuZSwgaXB1 X2NydGMtPmJhc2UucHJpbWFyeS0+ZmIsCi0JCQkJICAgcGxhbmUtPngsIHBsYW5lLT55KTsKKwkJ aXB1X3BsYW5lX3NldF9iYXNlKHBsYW5lLCBpcHVfY3J0Yy0+YmFzZS5wcmltYXJ5LT5mYik7CiAJ CWlwdV9jcnRjX2hhbmRsZV9wYWdlZmxpcChpcHVfY3J0Yyk7CiAJCXF1ZXVlX3dvcmsoaXB1X2Ny dGMtPmZsaXBfcXVldWUsCiAJCQkgICAmaXB1X2NydGMtPmZsaXBfd29yay0+dW5yZWZfd29yayk7 CkBAIC0zNTUsNiArMjgxLDkgQEAgc3RhdGljIGJvb2wgaXB1X2NydGNfbW9kZV9maXh1cChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCiAJaWYgKHJldCkKIAkJcmV0dXJuIGZhbHNlOwogCisJaWYgKCh2 bS52c3luY19sZW4gPT0gMCkgfHwgKHZtLmhzeW5jX2xlbiA9PSAwKSkKKwkJcmV0dXJuIGZhbHNl OworCiAJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9kZSgmdm0sIGFkanVzdGVkX21vZGUp OwogCiAJcmV0dXJuIHRydWU7CkBAIC0zNjQsMjggKzI5Myw5NSBAQCBzdGF0aWMgdm9pZCBpcHVf Y3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgaXB1X2NydGMg KmlwdV9jcnRjID0gdG9faXB1X2NydGMoY3J0Yyk7CiAKLQlpcHVfZmJfZGlzYWJsZShpcHVfY3J0 Yyk7CisJaXB1X2NydGNfZGlzYWJsZShpcHVfY3J0Yyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdV9j cnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGlwdV9jcnRjICpp cHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMpOwogCi0JaXB1X2ZiX2VuYWJsZShpcHVfY3J0Yyk7 CisJaXB1X2NydGNfZW5hYmxlKGlwdV9jcnRjKTsKK30KKworc3RhdGljIGludCBpcHVfY3J0Y19h dG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSBzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKnN0YXRlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcHVfY3J0Y19t b2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1 Y3QgaXB1X2NydGMgKmlwdV9jcnRjID0gdG9faXB1X2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7CisJc3RydWN0 IGlwdV9kaV9zaWduYWxfY2ZnIHNpZ19jZmcgPSB7fTsKKwl1bnNpZ25lZCBsb25nIGVuY29kZXJf dHlwZXMgPSAwOworCisJZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IG1vZGUtPmhkaXNwbGF5 OiAlZFxuIiwgX19mdW5jX18sCisJCQltb2RlLT5oZGlzcGxheSk7CisJZGV2X2RiZyhpcHVfY3J0 Yy0+ZGV2LCAiJXM6IG1vZGUtPnZkaXNwbGF5OiAlZFxuIiwgX19mdW5jX18sCisJCQltb2RlLT52 ZGlzcGxheSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29u ZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkKKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykKKwkJ CWVuY29kZXJfdHlwZXMgfD0gQklUKGVuY29kZXItPmVuY29kZXJfdHlwZSk7CisKKwlkZXZfZGJn KGlwdV9jcnRjLT5kZXYsICIlczogYXR0YWNoZWQgdG8gZW5jb2RlciB0eXBlcyAweCVseFxuIiwK KwkJX19mdW5jX18sIGVuY29kZXJfdHlwZXMpOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIERBQyBv ciBMREIsIHRoZW4gd2UgbmVlZCB0aGUgSVBVIERJIGNsb2NrIHRvIGJlCisJICogdGhlIHNhbWUg YXMgdGhlIExEQiBESSBjbG9jay4gRm9yIFRWREFDLCBkZXJpdmUgdGhlIElQVSBESQorCSAqIGNs b2NrIGZyb20gMjcgTUh6IFRWRV9ESSBjbG9jaywgYnV0IGFsbG93IHRvIGRpdmlkZSBpdC4KKwkg Ki8KKwlpZiAoZW5jb2Rlcl90eXBlcyAmIChCSVQoRFJNX01PREVfRU5DT0RFUl9EQUMpIHwKKwkJ CSAgICAgQklUKERSTV9NT0RFX0VOQ09ERVJfTFZEUykpKQorCQlzaWdfY2ZnLmNsa2ZsYWdzID0g SVBVX0RJX0NMS01PREVfU1lOQyB8IElQVV9ESV9DTEtNT0RFX0VYVDsKKwllbHNlIGlmIChlbmNv ZGVyX3R5cGVzICYgQklUKERSTV9NT0RFX0VOQ09ERVJfVFZEQUMpKQorCQlzaWdfY2ZnLmNsa2Zs YWdzID0gSVBVX0RJX0NMS01PREVfRVhUOworCWVsc2UKKwkJc2lnX2NmZy5jbGtmbGFncyA9IDA7 CisKKwlzaWdfY2ZnLmVuYWJsZV9wb2wgPSAhKGlwdV9jcnRjLT5idXNfZmxhZ3MgJiBEUk1fQlVT X0ZMQUdfREVfTE9XKTsKKwkvKiBEZWZhdWx0IHRvIGRyaXZpbmcgcGl4ZWwgZGF0YSBvbiBuZWdh dGl2ZSBjbG9jayBlZGdlcyAqLworCXNpZ19jZmcuY2xrX3BvbCA9ICEhKGlwdV9jcnRjLT5idXNf ZmxhZ3MgJgorCQkJICAgICBEUk1fQlVTX0ZMQUdfUElYREFUQV9QT1NFREdFKTsKKwlzaWdfY2Zn LmJ1c19mb3JtYXQgPSBpcHVfY3J0Yy0+YnVzX2Zvcm1hdDsKKwlzaWdfY2ZnLnZfdG9faF9zeW5j ID0gMDsKKwlzaWdfY2ZnLmhzeW5jX3BpbiA9IGlwdV9jcnRjLT5kaV9oc3luY19waW47CisJc2ln X2NmZy52c3luY19waW4gPSBpcHVfY3J0Yy0+ZGlfdnN5bmNfcGluOworCisJZHJtX2Rpc3BsYXlf bW9kZV90b192aWRlb21vZGUobW9kZSwgJnNpZ19jZmcubW9kZSk7CisKKwlpcHVfZGNfaW5pdF9z eW5jKGlwdV9jcnRjLT5kYywgaXB1X2NydGMtPmRpLAorCQkJIG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19JTlRFUkxBQ0UsCisJCQkgaXB1X2NydGMtPmJ1c19mb3JtYXQsIG1vZGUtPmhkaXNw bGF5KTsKKwlpcHVfZGlfaW5pdF9zeW5jX3BhbmVsKGlwdV9jcnRjLT5kaSwgJnNpZ19jZmcpOwog fQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpcHVfaGVscGVy X2Z1bmNzID0gewogCS5kcG1zID0gaXB1X2NydGNfZHBtcywKIAkubW9kZV9maXh1cCA9IGlwdV9j cnRjX21vZGVfZml4dXAsCi0JLm1vZGVfc2V0ID0gaXB1X2NydGNfbW9kZV9zZXQsCisJLm1vZGVf c2V0ID0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0LAorCS5tb2RlX3NldF9ub2ZiID0gaXB1X2Ny dGNfbW9kZV9zZXRfbm9mYiwKIAkucHJlcGFyZSA9IGlwdV9jcnRjX3ByZXBhcmUsCiAJLmNvbW1p dCA9IGlwdV9jcnRjX2NvbW1pdCwKKwkuYXRvbWljX2NoZWNrID0gaXB1X2NydGNfYXRvbWljX2No ZWNrLAogfTsKIAogc3RhdGljIGludCBpcHVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCiB7CiAJc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNydGMp OwogCisJLyoKKwkgKiAtPmNvbW1pdCBpcyBkb25lIGFmdGVyIC0+bW9kZV9zZXQgaW4gZHJtX2Ny dGNfaGVscGVyX3NldF9tb2RlKCksCisJICogc28gd2FpdGluZyBmb3IgdmJsYW5rIGluIGRybV9w bGFuZV9oZWxwZXJfY29tbWl0KCkgd2lsbCB0aW1lb3V0LgorCSAqIENoZWNrIHRoZSBzdGF0ZSBo ZXJlIHRvIGF2b2lkIHRoZSB3YWl0aW5nLgorCSAqLworCWlmICghaXB1X2NydGMtPmVuYWJsZWQp CisJCXJldHVybiAtRUlOVkFMOworCiAJZW5hYmxlX2lycShpcHVfY3J0Yy0+aXJxKTsKIAogCXJl dHVybiAwOwpAQCAtNDk2LDggKzQ5MiwxNiBAQCBzdGF0aWMgaW50IGlwdV9jcnRjX2luaXQoc3Ry dWN0IGlwdV9jcnRjICppcHVfY3J0YywKIAkJCQkJCUlQVV9EUF9GTE9XX1NZTkNfRkcsCiAJCQkJ CQlkcm1fY3J0Y19tYXNrKCZpcHVfY3J0Yy0+YmFzZSksCiAJCQkJCQlEUk1fUExBTkVfVFlQRV9P VkVSTEFZKTsKLQkJaWYgKElTX0VSUihpcHVfY3J0Yy0+cGxhbmVbMV0pKQorCQlpZiAoSVNfRVJS KGlwdV9jcnRjLT5wbGFuZVsxXSkpIHsKIAkJCWlwdV9jcnRjLT5wbGFuZVsxXSA9IE5VTEw7CisJ CX0gZWxzZSB7CisJCQlyZXQgPSBpcHVfcGxhbmVfZ2V0X3Jlc291cmNlcyhpcHVfY3J0Yy0+cGxh bmVbMV0pOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoaXB1X2NydGMtPmRldiwgImdldHRp bmcgcGxhbmUgMSAiCisJCQkJCSJyZXNvdXJjZXMgZmFpbGVkIHdpdGggJWQuXG4iLCByZXQpOwor CQkJCWdvdG8gZXJyX3B1dF9wbGFuZTBfcmVzOworCQkJfQorCQl9CiAJfQogCiAJaXB1X2NydGMt PmlycSA9IGlwdV9wbGFuZV9pcnEoaXB1X2NydGMtPnBsYW5lWzBdKTsKQEAgLTUwNSw3ICs1MDks NyBAQCBzdGF0aWMgaW50IGlwdV9jcnRjX2luaXQoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YywK IAkJCSJpbXhfZHJtIiwgaXB1X2NydGMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoaXB1 X2NydGMtPmRldiwgImlycSByZXF1ZXN0IGZhaWxlZCB3aXRoICVkLlxuIiwgcmV0KTsKLQkJZ290 byBlcnJfcHV0X3BsYW5lX3JlczsKKwkJZ290byBlcnJfcHV0X3BsYW5lMV9yZXM7CiAJfQogCS8q IE9ubHkgZW5hYmxlIElSUSB3aGVuIHdlIGFjdHVhbGx5IG5lZWQgaXQgdG8gdHJpZ2dlciB3b3Jr LiAqLwogCWRpc2FibGVfaXJxKGlwdV9jcnRjLT5pcnEpOwpAQCAtNTE0LDcgKzUxOCwxMCBAQCBz dGF0aWMgaW50IGlwdV9jcnRjX2luaXQoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YywKIAogCXJl dHVybiAwOwogCi1lcnJfcHV0X3BsYW5lX3JlczoKK2Vycl9wdXRfcGxhbmUxX3JlczoKKwlpZiAo aXB1X2NydGMtPnBsYW5lWzFdKQorCQlpcHVfcGxhbmVfcHV0X3Jlc291cmNlcyhpcHVfY3J0Yy0+ cGxhbmVbMV0pOworZXJyX3B1dF9wbGFuZTBfcmVzOgogCWlwdV9wbGFuZV9wdXRfcmVzb3VyY2Vz KGlwdV9jcnRjLT5wbGFuZVswXSk7CiBlcnJfcmVtb3ZlX2NydGM6CiAJaW14X2RybV9yZW1vdmVf Y3J0YyhpcHVfY3J0Yy0+aW14X2NydGMpOwpAQCAtNTU0LDggKzU2MSwxMCBAQCBzdGF0aWMgdm9p ZCBpcHVfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKIAlpbXhfZHJtX3JlbW92ZV9jcnRjKGlwdV9jcnRjLT5pbXhfY3J0Yyk7CiAKIAlkZXN0cm95 X3dvcmtxdWV1ZShpcHVfY3J0Yy0+ZmxpcF9xdWV1ZSk7Ci0JaXB1X3BsYW5lX3B1dF9yZXNvdXJj ZXMoaXB1X2NydGMtPnBsYW5lWzBdKTsKIAlpcHVfcHV0X3Jlc291cmNlcyhpcHVfY3J0Yyk7CisJ aWYgKGlwdV9jcnRjLT5wbGFuZVsxXSkKKwkJaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoaXB1X2Ny dGMtPnBsYW5lWzFdKTsKKwlpcHVfcGxhbmVfcHV0X3Jlc291cmNlcyhpcHVfY3J0Yy0+cGxhbmVb MF0pOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgaXB1X2NydGNfb3Bz ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jIGIvZHJp dmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jCmluZGV4IDAyNzAxZGUuLmI4NWQxMDIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxk cm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgogI2luY2x1ZGUg PGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBl ci5oPgogCiAjaW5jbHVkZSAidmlkZW8vaW14LWlwdS12My5oIgogI2luY2x1ZGUgImlwdXYzLXBs YW5lLmgiCkBAIC01MywxMiArNTQsMTUgQEAgaW50IGlwdV9wbGFuZV9pcnEoc3RydWN0IGlwdV9w bGFuZSAqaXB1X3BsYW5lKQogCQkJCSAgICAgSVBVX0lSUV9FT0YpOwogfQogCi1pbnQgaXB1X3Bs YW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCi0JCSAgICAgICBpbnQgeCwgaW50IHkpCitpbnQgaXB1X3BsYW5lX3NldF9i YXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIpCiB7Ci0Jc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29ialszXTsKLQl1bnNpZ25l ZCBsb25nIGViYSwgdWJvLCB2Ym87CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29i alszXSwgKm9sZF9jbWFfb2JqWzNdOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0g aXB1X3BsYW5lLT5iYXNlLnN0YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9 IHN0YXRlLT5mYjsKKwl1bnNpZ25lZCBsb25nIGViYSwgdWJvLCB2Ym8sIG9sZF9lYmEsIG9sZF91 Ym8sIG9sZF92Ym87CiAJaW50IGFjdGl2ZSwgaTsKKwlpbnQgeCA9IHN0YXRlLT5zcmNfeCA+PiAx NjsKKwlpbnQgeSA9IHN0YXRlLT5zcmNfeSA+PiAxNjsKIAogCWZvciAoaSA9IDA7IGkgPCBkcm1f Zm9ybWF0X251bV9wbGFuZXMoZmItPnBpeGVsX2Zvcm1hdCk7IGkrKykgewogCQljbWFfb2JqW2ld ID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgaSk7CkBAIC02OCw2ICs3MiwxNCBAQCBpbnQg aXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsCiAJCX0KIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgZHJtX2Zvcm1h dF9udW1fcGxhbmVzKG9sZF9mYi0+cGl4ZWxfZm9ybWF0KTsgaSsrKSB7CisJCW9sZF9jbWFfb2Jq W2ldID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihvbGRfZmIsIGkpOworCQlpZiAoIW9sZF9jbWFf b2JqW2ldKSB7CisJCQlEUk1fREVCVUdfS01TKCJwbGFuZSAlZCBlbnRyeSBpcyBudWxsLlxuIiwg aSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKwogCWViYSA9IGNtYV9vYmpbMF0tPnBh ZGRyICsgZmItPm9mZnNldHNbMF0gKwogCSAgICAgIGZiLT5waXRjaGVzWzBdICogeSArIChmYi0+ Yml0c19wZXJfcGl4ZWwgPj4gMykgKiB4OwogCkBAIC04MSwxMyArOTMsMTEgQEAgaW50IGlwdV9w bGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaXB1X3BsYW5lLT5l bmFibGVkICYmIGZiLT5waXRjaGVzWzBdICE9IGlwdV9wbGFuZS0+c3RyaWRlWzBdKSB7CisJaWYg KGZiLT5waXRjaGVzWzBdICE9IG9sZF9mYi0+cGl0Y2hlc1swXSkgewogCQlEUk1fREVCVUdfS01T KCJwaXRjaGVzIG11c3Qgbm90IGNoYW5nZSB3aGlsZSBwbGFuZSBpcyBlbmFibGVkLlxuIik7CiAJ CXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlwdV9wbGFuZS0+c3RyaWRlWzBdID0gZmItPnBpdGNo ZXNbMF07Ci0KIAlzd2l0Y2ggKGZiLT5waXhlbF9mb3JtYXQpIHsKIAljYXNlIERSTV9GT1JNQVRf WVVWNDIwOgogCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6CkBAIC0xMDQsNiArMTE0LDE0IEBAIGlu dCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJdmJvID0gY21hX29ialsyXS0+cGFkZHIgKyBmYi0+b2Zm c2V0c1syXSArCiAJCSAgICAgIGZiLT5waXRjaGVzWzJdICogeSAvIDIgKyB4IC8gMiAtIGViYTsK IAorCQlvbGRfZWJhID0gb2xkX2NtYV9vYmpbMF0tPnBhZGRyICsgb2xkX2ZiLT5vZmZzZXRzWzBd ICsKKwkJICAgICAgb2xkX2ZiLT5waXRjaGVzWzBdICogeSArCisJCSAgICAgIChvbGRfZmItPmJp dHNfcGVyX3BpeGVsID4+IDMpICogeDsKKwkJb2xkX3VibyA9IG9sZF9jbWFfb2JqWzFdLT5wYWRk ciArIG9sZF9mYi0+b2Zmc2V0c1sxXSArCisJCSAgICAgIG9sZF9mYi0+cGl0Y2hlc1sxXSAqIHkg LyAyICsgeCAvIDIgLSBvbGRfZWJhOworCQlvbGRfdmJvID0gb2xkX2NtYV9vYmpbMl0tPnBhZGRy ICsgb2xkX2ZiLT5vZmZzZXRzWzJdICsKKwkJICAgICAgb2xkX2ZiLT5waXRjaGVzWzJdICogeSAv IDIgKyB4IC8gMiAtIG9sZF9lYmE7CisKIAkJaWYgKCh1Ym8gJiAweDcpIHx8ICh2Ym8gJiAweDcp KSB7CiAJCQlEUk1fREVCVUdfS01TKCJVL1YgYnVmZmVyIG9mZnNldHMgbXVzdCBiZSBhIG11bHRp cGxlIG9mIDguXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE0LDggKzEzMiw3IEBAIGlu dCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaWYgKGlw dV9wbGFuZS0+ZW5hYmxlZCAmJiAoKGlwdV9wbGFuZS0+dV9vZmZzZXQgIT0gdWJvKSB8fAotCQkJ CQkgICAoaXB1X3BsYW5lLT52X29mZnNldCAhPSB2Ym8pKSkgeworCQlpZiAob2xkX3VibyAhPSB1 Ym8gfHwgb2xkX3ZibyAhPSB2Ym8pIHsKIAkJCURSTV9ERUJVR19LTVMoIlUvViBidWZmZXIgb2Zm c2V0cyBtdXN0IG5vdCBjaGFuZ2Ugd2hpbGUgcGxhbmUgaXMgZW5hYmxlZC5cbiIpOwogCQkJcmV0 dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTEzMCwxNiArMTQ3LDExIEBAIGludCBpcHVfcGxhbmVfc2V0 X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaWYgKGlwdV9wbGFuZS0+ZW5hYmxl ZCAmJgotCQkgICAgKGlwdV9wbGFuZS0+c3RyaWRlWzFdICE9IGZiLT5waXRjaGVzWzFdKSkgewor CQlpZiAob2xkX2ZiLT5waXRjaGVzWzFdICE9IGZiLT5waXRjaGVzWzFdKSB7CiAJCQlEUk1fREVC VUdfS01TKCJVL1YgcGl0Y2hlcyBtdXN0IG5vdCBjaGFuZ2Ugd2hpbGUgcGxhbmUgaXMgZW5hYmxl ZC5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpcHVfcGxhbmUtPnVfb2Zmc2V0 ID0gdWJvOwotCQlpcHVfcGxhbmUtPnZfb2Zmc2V0ID0gdmJvOwotCQlpcHVfcGxhbmUtPnN0cmlk ZVsxXSA9IGZiLT5waXRjaGVzWzFdOwotCiAJCWRldl9kYmcoaXB1X3BsYW5lLT5iYXNlLmRldi0+ ZGV2LAogCQkJInBoeXMgPSAlcGFkICVwYWQgJXBhZCwgeCA9ICVkLCB5ID0gJWQiLAogCQkJJmNt YV9vYmpbMF0tPnBhZGRyLCAmY21hX29ialsxXS0+cGFkZHIsCkBAIC0xNTEsMTY0ICsxNjMsMTEx IEBAIGludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGlwdV9wbGFu ZS0+ZW5hYmxlZCkgewotCQlhY3RpdmUgPSBpcHVfaWRtYWNfZ2V0X2N1cnJlbnRfYnVmZmVyKGlw dV9wbGFuZS0+aXB1X2NoKTsKLQkJaXB1X2NwbWVtX3NldF9idWZmZXIoaXB1X3BsYW5lLT5pcHVf Y2gsICFhY3RpdmUsIGViYSk7Ci0JCWlwdV9pZG1hY19zZWxlY3RfYnVmZmVyKGlwdV9wbGFuZS0+ aXB1X2NoLCAhYWN0aXZlKTsKLQl9IGVsc2UgewotCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVf cGxhbmUtPmlwdV9jaCwgMCwgZWJhKTsKLQkJaXB1X2NwbWVtX3NldF9idWZmZXIoaXB1X3BsYW5l LT5pcHVfY2gsIDEsIGViYSk7Ci0JfQotCi0JLyogY2FjaGUgb2Zmc2V0cyBmb3Igc3Vic2VxdWVu dCBwYWdlZmxpcHMgKi8KLQlpcHVfcGxhbmUtPnggPSB4OwotCWlwdV9wbGFuZS0+eSA9IHk7CisJ YWN0aXZlID0gaXB1X2lkbWFjX2dldF9jdXJyZW50X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCk7 CisJaXB1X2NwbWVtX3NldF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsICFhY3RpdmUsIGViYSk7 CisJaXB1X2lkbWFjX3NlbGVjdF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsICFhY3RpdmUpOwog CiAJcmV0dXJuIDA7CiB9CiAKLWludCBpcHVfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGlwdV9wbGFu ZSAqaXB1X3BsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCSAgICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAotCQkgICAgICAgdW5zaWduZWQgaW50IGNydGNfdywg dW5zaWduZWQgaW50IGNydGNfaCwKLQkJICAgICAgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBz cmNfeSwKLQkJICAgICAgIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCwgYm9vbCBpbnRl cmxhY2VkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitkcm1fcGxhbmVfc3RhdGVfdG9f ZWJhKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBkZXZpY2UgKmRl diA9IGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldjsKLQlpbnQgcmV0OworCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNt YV9vYmo7CiAKLQkvKiBubyBzY2FsaW5nICovCi0JaWYgKHNyY193ICE9IGNydGNfdyB8fCBzcmNf aCAhPSBjcnRjX2gpCi0JCXJldHVybiAtRUlOVkFMOworCWNtYV9vYmogPSBkcm1fZmJfY21hX2dl dF9nZW1fb2JqKGZiLCAwKTsKKwlCVUdfT04oIWNtYV9vYmopOwogCi0JaWYgKGlwdV9wbGFuZS0+ YmFzZS50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKLQkJLyogZnVsbCBwbGFuZSBk b2Vzbid0IHN1cHBvcnQgcGFydGlhbCBvZmYgc2NyZWVuICovCi0JCWlmIChjcnRjX3ggfHwgY3J0 Y195IHx8IGNydGNfdyAhPSBtb2RlLT5oZGlzcGxheSB8fAotCQkJY3J0Y19oICE9IG1vZGUtPnZk aXNwbGF5KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGNtYV9vYmotPnBhZGRyICsgZmIt Pm9mZnNldHNbMF0gKworCSAgICAgICBmYi0+cGl0Y2hlc1swXSAqIChzdGF0ZS0+c3JjX3kgPj4g MTYpICsKKwkgICAgICAgKGZiLT5iaXRzX3Blcl9waXhlbCA+PiAzKSAqIChzdGF0ZS0+c3JjX3gg Pj4gMTYpOworfQogCi0JCS8qIGZ1bGwgcGxhbmUgbWluaW11bSB3aWR0aCBpcyAxMyBwaXhlbHMg Ki8KLQkJaWYgKGNydGNfdyA8IDEzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChp cHVfcGxhbmUtPmJhc2UudHlwZSA9PSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKSB7Ci0JCS8qIGNs aXAgdG8gY3J0YyBib3VuZHMgKi8KLQkJaWYgKGNydGNfeCA8IDApIHsKLQkJCWlmICgtY3J0Y194 ID4gY3J0Y193KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJc3JjX3ggKz0gLWNydGNfeDsKLQkJ CXNyY193IC09IC1jcnRjX3g7Ci0JCQljcnRjX3cgLT0gLWNydGNfeDsKLQkJCWNydGNfeCA9IDA7 Ci0JCX0KLQkJaWYgKGNydGNfeSA8IDApIHsKLQkJCWlmICgtY3J0Y195ID4gY3J0Y19oKQotCQkJ CXJldHVybiAtRUlOVkFMOwotCQkJc3JjX3kgKz0gLWNydGNfeTsKLQkJCXNyY19oIC09IC1jcnRj X3k7Ci0JCQljcnRjX2ggLT0gLWNydGNfeTsKLQkJCWNydGNfeSA9IDA7Ci0JCX0KLQkJaWYgKGNy dGNfeCArIGNydGNfdyA+IG1vZGUtPmhkaXNwbGF5KSB7Ci0JCQlpZiAoY3J0Y194ID4gbW9kZS0+ aGRpc3BsYXkpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQljcnRjX3cgPSBtb2RlLT5oZGlzcGxh eSAtIGNydGNfeDsKLQkJCXNyY193ID0gY3J0Y193OwotCQl9Ci0JCWlmIChjcnRjX3kgKyBjcnRj X2ggPiBtb2RlLT52ZGlzcGxheSkgewotCQkJaWYgKGNydGNfeSA+IG1vZGUtPnZkaXNwbGF5KQot CQkJCXJldHVybiAtRUlOVkFMOwotCQkJY3J0Y19oID0gbW9kZS0+dmRpc3BsYXkgLSBjcnRjX3k7 Ci0JCQlzcmNfaCA9IGNydGNfaDsKLQkJfQotCX0gZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQlp ZiAoY3J0Y19oIDwgMikKLQkJcmV0dXJuIC1FSU5WQUw7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGxvbmcKK2RybV9wbGFuZV9zdGF0ZV90b191Ym8oc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKwl1bnNpZ25lZCBsb25nIGViYSA9IGRybV9w bGFuZV9zdGF0ZV90b19lYmEoc3RhdGUpOwogCi0JLyoKLQkgKiBzaW5jZSB3ZSBjYW5ub3QgdG91 Y2ggYWN0aXZlIElETUFDIGNoYW5uZWxzLCB3ZSBkbyBub3Qgc3VwcG9ydAotCSAqIHJlc2l6aW5n IHRoZSBlbmFibGVkIHBsYW5lIG9yIGNoYW5naW5nIGl0cyBmb3JtYXQKLQkgKi8KLQlpZiAoaXB1 X3BsYW5lLT5lbmFibGVkKSB7Ci0JCWlmIChzcmNfdyAhPSBpcHVfcGxhbmUtPncgfHwgc3JjX2gg IT0gaXB1X3BsYW5lLT5oIHx8Ci0JCSAgICBmYi0+cGl4ZWxfZm9ybWF0ICE9IGlwdV9wbGFuZS0+ YmFzZS5mYi0+cGl4ZWxfZm9ybWF0KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJY21hX29iaiA9IGRy bV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDEpOworCUJVR19PTighY21hX29iaik7CiAKLQkJcmV0 dXJuIGlwdV9wbGFuZV9zZXRfYmFzZShpcHVfcGxhbmUsIGZiLCBzcmNfeCwgc3JjX3kpOwotCX0K KwlyZXR1cm4gY21hX29iai0+cGFkZHIgKyBmYi0+b2Zmc2V0c1sxXSArCisJICAgICAgIGZiLT5w aXRjaGVzWzFdICogKHN0YXRlLT5zcmNfeSA+PiAxNikgLyAyICsKKwkgICAgICAgKHN0YXRlLT5z cmNfeCA+PiAxNikgLyAyIC0gZWJhOworfQogCi0Jc3dpdGNoIChpcHVfcGxhbmUtPmRwX2Zsb3cp IHsKLQljYXNlIElQVV9EUF9GTE9XX1NZTkNfQkc6Ci0JCXJldCA9IGlwdV9kcF9zZXR1cF9jaGFu bmVsKGlwdV9wbGFuZS0+ZHAsCi0JCQkJSVBVVjNfQ09MT1JTUEFDRV9SR0IsCi0JCQkJSVBVVjNf Q09MT1JTUEFDRV9SR0IpOwotCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGRldiwKLQkJCQkiaW5p dGlhbGl6aW5nIGRpc3BsYXkgcHJvY2Vzc29yIGZhaWxlZCB3aXRoICVkXG4iLAotCQkJCXJldCk7 Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlwdV9kcF9zZXRfZ2xvYmFsX2FscGhhKGlwdV9wbGFu ZS0+ZHAsIHRydWUsIDAsIHRydWUpOwotCQlicmVhazsKLQljYXNlIElQVV9EUF9GTE9XX1NZTkNf Rkc6Ci0JCWlwdV9kcF9zZXR1cF9jaGFubmVsKGlwdV9wbGFuZS0+ZHAsCi0JCQkJaXB1X2RybV9m b3VyY2NfdG9fY29sb3JzcGFjZShmYi0+cGl4ZWxfZm9ybWF0KSwKLQkJCQlJUFVWM19DT0xPUlNQ QUNFX1VOS05PV04pOwotCQlpcHVfZHBfc2V0X3dpbmRvd19wb3MoaXB1X3BsYW5lLT5kcCwgY3J0 Y194LCBjcnRjX3kpOwotCQkvKiBFbmFibGUgbG9jYWwgYWxwaGEgb24gcGFydGlhbCBwbGFuZSAq LwotCQlzd2l0Y2ggKGZiLT5waXhlbF9mb3JtYXQpIHsKLQkJY2FzZSBEUk1fRk9STUFUX0FSR0Ix NTU1OgotCQljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9SR0JB NTU1MToKLQkJY2FzZSBEUk1fRk9STUFUX0JHUkE1NTUxOgotCQljYXNlIERSTV9GT1JNQVRfQVJH QjQ0NDQ6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQkJY2FzZSBEUk1fRk9STUFUX0FC R1I4ODg4OgotCQljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9C R1JBODg4ODoKLQkJCWlwdV9kcF9zZXRfZ2xvYmFsX2FscGhhKGlwdV9wbGFuZS0+ZHAsIGZhbHNl LCAwLCBmYWxzZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZworZHJtX3BsYW5lX3N0YXRlX3RvX3ZibyhzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1 Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOworCXVuc2lnbmVkIGxvbmcgZWJhID0gZHJt X3BsYW5lX3N0YXRlX3RvX2ViYShzdGF0ZSk7CisKKwljbWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRf Z2VtX29iaihmYiwgMik7CisJQlVHX09OKCFjbWFfb2JqKTsKKworCXJldHVybiBjbWFfb2JqLT5w YWRkciArIGZiLT5vZmZzZXRzWzJdICsKKwkgICAgICAgZmItPnBpdGNoZXNbMl0gKiAoc3RhdGUt PnNyY195ID4+IDE2KSAvIDIgKworCSAgICAgICAoc3RhdGUtPnNyY194ID4+IDE2KSAvIDIgLSBl YmE7Cit9CisKK3N0YXRpYyB2b2lkIGlwdV9wbGFuZV9hdG9taWNfc2V0X2Jhc2Uoc3RydWN0IGlw dV9wbGFuZSAqaXB1X3BsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9s ZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZpcHVfcGxhbmUtPmJhc2U7 CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJdW5zaWduZWQgbG9uZyBlYmEsIHVi bywgdmJvOworCWludCBhY3RpdmU7CisKKwllYmEgPSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJhKHN0 YXRlKTsKKworCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9Z VVY0MjA6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKKwkJaWYgKG9sZF9zdGF0ZS0+ZmIpCiAJ CQlicmVhazsKLQkJfQotCX0KIAotCWlwdV9kbWZjX2NvbmZpZ193YWl0NGVvdChpcHVfcGxhbmUt PmRtZmMsIGNydGNfdyk7CisJCS8qCisJCSAqIE11bHRpcGxhbmFyIGZvcm1hdHMgaGF2ZSB0byBt ZWV0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCQkgKiAtIFRoZSAodXAgdG8pIHRocmVl IHBsYW5lIGFkZHJlc3NlcyBhcmUgRUJBLCBFQkErVUJPLCBFQkErVkJPCisJCSAqIC0gRUJBLCBV Qk8gYW5kIFZCTyBhcmUgYSBtdWx0aXBsZSBvZiA4CisJCSAqIC0gVUJPIGFuZCBWQk8gYXJlIHVu c2lnbmVkIGFuZCBub3QgbGFyZ2VyIHRoYW4gMHhmZmZmZjgKKwkJICogLSBPbmx5IEVCQSBtYXkg YmUgY2hhbmdlZCB3aGlsZSBzY2Fub3V0IGlzIGFjdGl2ZQorCQkgKiAtIFRoZSBzdHJpZGVzIG9m IFUgYW5kIFYgcGxhbmVzIG11c3QgYmUgaWRlbnRpY2FsLgorCQkgKi8KKwkJdWJvID0gZHJtX3Bs YW5lX3N0YXRlX3RvX3VibyhzdGF0ZSk7CisJCXZibyA9IGRybV9wbGFuZV9zdGF0ZV90b192Ym8o c3RhdGUpOwogCi0JaXB1X2NwbWVtX3plcm8oaXB1X3BsYW5lLT5pcHVfY2gpOwotCWlwdV9jcG1l bV9zZXRfcmVzb2x1dGlvbihpcHVfcGxhbmUtPmlwdV9jaCwgc3JjX3csIHNyY19oKTsKLQlyZXQg PSBpcHVfY3BtZW1fc2V0X2ZtdChpcHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpeGVsX2Zvcm1hdCk7 Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBwaXhlbCBmb3Jt YXQgMHglMDh4XG4iLAotCQkJZmItPnBpeGVsX2Zvcm1hdCk7Ci0JCXJldHVybiByZXQ7Ci0JfQot CWlwdV9jcG1lbV9zZXRfaGlnaF9wcmlvcml0eShpcHVfcGxhbmUtPmlwdV9jaCk7Ci0JaXB1X2lk bWFjX3NldF9kb3VibGVfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAxKTsKLQlpcHVfY3BtZW1f c2V0X3N0cmlkZShpcHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpdGNoZXNbMF0pOworCQlpZiAoZmIt PnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lVVjQyMCkKKwkJCWlwdV9jcG1lbV9zZXRfeXV2 X3BsYW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAorCQkJCQkJICAgICAgZmItPnBpdGNoZXNb MV0sIHVibywgdmJvKTsKKwkJZWxzZQorCQkJaXB1X2NwbWVtX3NldF95dXZfcGxhbmFyX2Z1bGwo aXB1X3BsYW5lLT5pcHVfY2gsCisJCQkJCQkgICAgICBmYi0+cGl0Y2hlc1sxXSwgdmJvLCB1Ym8p OwogCi0JcmV0ID0gaXB1X3BsYW5lX3NldF9iYXNlKGlwdV9wbGFuZSwgZmIsIHNyY194LCBzcmNf eSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JaWYgKGludGVybGFjZWQpCi0JCWlw dV9jcG1lbV9pbnRlcmxhY2VkX3NjYW4oaXB1X3BsYW5lLT5pcHVfY2gsIGZiLT5waXRjaGVzWzBd KTsKLQotCWlmIChmYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfWVVWNDIwKSB7Ci0JCWlw dV9jcG1lbV9zZXRfeXV2X3BsYW5hcl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAotCQkJCQkgICAg ICBpcHVfcGxhbmUtPnN0cmlkZVsxXSwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT51X29mZnNldCwK LQkJCQkJICAgICAgaXB1X3BsYW5lLT52X29mZnNldCk7Ci0JfSBlbHNlIGlmIChmYi0+cGl4ZWxf Zm9ybWF0ID09IERSTV9GT1JNQVRfWVZVNDIwKSB7Ci0JCWlwdV9jcG1lbV9zZXRfeXV2X3BsYW5h cl9mdWxsKGlwdV9wbGFuZS0+aXB1X2NoLAotCQkJCQkgICAgICBpcHVfcGxhbmUtPnN0cmlkZVsx XSwKLQkJCQkJICAgICAgaXB1X3BsYW5lLT52X29mZnNldCwKLQkJCQkJICAgICAgaXB1X3BsYW5l LT51X29mZnNldCk7Ci0JfQorCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldiwKKwkJ CSJwaHkgPSAlbHUgJWx1ICVsdSwgeCA9ICVkLCB5ID0gJWQiLCBlYmEsIHVibywgdmJvLAorCQkJ c3RhdGUtPnNyY194ID4+IDE2LCBzdGF0ZS0+c3JjX3kgPj4gMTYpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlkZXZfZGJnKGlwdV9wbGFuZS0+YmFzZS5kZXYtPmRldiwgInBoeXMgPSAlbHUsIHgg PSAlZCwgeSA9ICVkIiwKKwkJCWViYSwgc3RhdGUtPnNyY194ID4+IDE2LCBzdGF0ZS0+c3JjX3kg Pj4gMTYpOwogCi0JaXB1X3BsYW5lLT53ID0gc3JjX3c7Ci0JaXB1X3BsYW5lLT5oID0gc3JjX2g7 CisJCWJyZWFrOworCX0KIAotCXJldHVybiAwOworCWlmIChvbGRfc3RhdGUtPmZiKSB7CisJCWFj dGl2ZSA9IGlwdV9pZG1hY19nZXRfY3VycmVudF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gpOwor CQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSwgZWJhKTsK KwkJaXB1X2lkbWFjX3NlbGVjdF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsICFhY3RpdmUpOwor CX0gZWxzZSB7CisJCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAwLCBl YmEpOworCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgMSwgZWJhKTsK Kwl9CiB9CiAKIHZvaWQgaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoc3RydWN0IGlwdV9wbGFuZSAq aXB1X3BsYW5lKQpAQCAtMzU1LDcgKzMxNCw3IEBAIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0K IAotdm9pZCBpcHVfcGxhbmVfZW5hYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKK3N0 YXRpYyB2b2lkIGlwdV9wbGFuZV9lbmFibGUoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lKQog ewogCWlmIChpcHVfcGxhbmUtPmRwKQogCQlpcHVfZHBfZW5hYmxlKGlwdV9wbGFuZS0+aXB1KTsK QEAgLTM2MywxNCArMzIyLDEwIEBAIHZvaWQgaXB1X3BsYW5lX2VuYWJsZShzdHJ1Y3QgaXB1X3Bs YW5lICppcHVfcGxhbmUpCiAJaXB1X2lkbWFjX2VuYWJsZV9jaGFubmVsKGlwdV9wbGFuZS0+aXB1 X2NoKTsKIAlpZiAoaXB1X3BsYW5lLT5kcCkKIAkJaXB1X2RwX2VuYWJsZV9jaGFubmVsKGlwdV9w bGFuZS0+ZHApOwotCi0JaXB1X3BsYW5lLT5lbmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBpcHVf cGxhbmVfZGlzYWJsZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCitzdGF0aWMgdm9pZCBp cHVfcGxhbmVfZGlzYWJsZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCiB7Ci0JaXB1X3Bs YW5lLT5lbmFibGVkID0gZmFsc2U7Ci0KIAlpcHVfaWRtYWNfd2FpdF9idXN5KGlwdV9wbGFuZS0+ aXB1X2NoLCA1MCk7CiAKIAlpZiAoaXB1X3BsYW5lLT5kcCkKQEAgLTM4MSw3NCArMzM2LDIxNiBA QCB2b2lkIGlwdV9wbGFuZV9kaXNhYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKIAkJ aXB1X2RwX2Rpc2FibGUoaXB1X3BsYW5lLT5pcHUpOwogfQogCi0vKgotICogZHJtX3BsYW5lIEFQ SQotICovCi0KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAotCQkJICAgIHVuc2lnbmVkIGludCBjcnRj X3csIHVuc2lnbmVkIGludCBjcnRjX2gsCi0JCQkgICAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90 IHNyY195LAotCQkJICAgIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCkKK3N0YXRpYyBp bnQgaXB1X2Rpc2FibGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiB7CiAJc3RydWN0 IGlwdV9wbGFuZSAqaXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKLQlpbnQgcmV0ID0g MDsKIAotCURSTV9ERUJVR19LTVMoInBsYW5lIC0gJXBcbiIsIHBsYW5lKTsKLQotCWlmICghaXB1 X3BsYW5lLT5lbmFibGVkKQotCQlyZXQgPSBpcHVfcGxhbmVfZ2V0X3Jlc291cmNlcyhpcHVfcGxh bmUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaXB1X3BsYW5lX21v ZGVfc2V0KGlwdV9wbGFuZSwgY3J0YywgJmNydGMtPmh3bW9kZSwgZmIsCi0JCQljcnRjX3gsIGNy dGNfeSwgY3J0Y193LCBjcnRjX2gsCi0JCQlzcmNfeCA+PiAxNiwgc3JjX3kgPj4gMTYsIHNyY193 ID4+IDE2LCBzcmNfaCA+PiAxNiwKLQkJCWZhbHNlKTsKLQlpZiAocmV0IDwgMCkgewotCQlpcHVf cGxhbmVfcHV0X3Jlc291cmNlcyhpcHVfcGxhbmUpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlm IChjcnRjICE9IHBsYW5lLT5jcnRjKQotCQlkZXZfZGJnKHBsYW5lLT5kZXYtPmRldiwgImNydGMg Y2hhbmdlOiAlcCAtPiAlcFxuIiwKLQkJCQlwbGFuZS0+Y3J0YywgY3J0Yyk7CisJRFJNX0RFQlVH X0tNUygiWyVkXSAlc1xuIiwgX19MSU5FX18sIF9fZnVuY19fKTsKIAotCWlmICghaXB1X3BsYW5l LT5lbmFibGVkKQotCQlpcHVfcGxhbmVfZW5hYmxlKGlwdV9wbGFuZSk7CisJaXB1X3BsYW5lX2Rp c2FibGUoaXB1X3BsYW5lKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwdV9kaXNh YmxlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQorc3RhdGljIHZvaWQgaXB1X3BsYW5l X2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiB7CiAJc3RydWN0IGlwdV9wbGFuZSAq aXB1X3BsYW5lID0gdG9faXB1X3BsYW5lKHBsYW5lKTsKIAogCURSTV9ERUJVR19LTVMoIlslZF0g JXNcbiIsIF9fTElORV9fLCBfX2Z1bmNfXyk7CiAKLQlpZiAoaXB1X3BsYW5lLT5lbmFibGVkKQot CQlpcHVfcGxhbmVfZGlzYWJsZShpcHVfcGxhbmUpOworCWlwdV9kaXNhYmxlX3BsYW5lKHBsYW5l KTsKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUoaXB1X3BsYW5lKTsKK30KIAot CWlwdV9wbGFuZV9wdXRfcmVzb3VyY2VzKGlwdV9wbGFuZSk7CitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9mdW5jcyBpcHVfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZQk9IGRy bV9wbGFuZV9oZWxwZXJfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lCT0gZHJtX3BsYW5lX2hlbHBl cl9kaXNhYmxlLAorCS5kZXN0cm95CT0gaXB1X3BsYW5lX2Rlc3Ryb3ksCit9OworCitzdGF0aWMg aW50IGlwdV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpvbGRfc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBsYW5lLT5kZXYtPmRldjsKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpvbGRfZmIgPSBvbGRfc3RhdGUtPmZiOworCXVuc2lnbmVkIGxvbmcgZWJhLCB1Ym8sIHZi bywgb2xkX3Vibywgb2xkX3ZibzsKKworCS8qIE9rIHRvIGRpc2FibGUgKi8KKwlpZiAoIWZiKQor CQlyZXR1cm4gb2xkX2ZiID8gMCA6IC1FSU5WQUw7CisKKwkvKiBDUlRDIHNob3VsZCBiZSBlbmFi bGVkICovCisJaWYgKCFzdGF0ZS0+Y3J0Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwkvKiBubyBzY2FsaW5nICovCisJaWYgKHN0YXRlLT5zcmNfdyA+PiAxNiAhPSBzdGF0ZS0+Y3J0 Y193IHx8CisJICAgIHN0YXRlLT5zcmNfaCA+PiAxNiAhPSBzdGF0ZS0+Y3J0Y19oKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWNydGNfc3RhdGUgPSBzdGF0ZS0+Y3J0Yy0+c3RhdGU7CisKKwlzd2l0 Y2ggKHBsYW5lLT50eXBlKSB7CisJY2FzZSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOgorCQkvKiBm dWxsIHBsYW5lIGRvZXNuJ3Qgc3VwcG9ydCBwYXJ0aWFsIG9mZiBzY3JlZW4gKi8KKwkJaWYgKHN0 YXRlLT5jcnRjX3ggfHwgc3RhdGUtPmNydGNfeSB8fAorCQkgICAgc3RhdGUtPmNydGNfdyAhPSBj cnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5IHx8CisJCSAgICBzdGF0ZS0+Y3J0Y19o ICE9IGNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXkpCisJCQlyZXR1cm4gLUVJTlZB TDsKKworCQkvKiBmdWxsIHBsYW5lIG1pbmltdW0gd2lkdGggaXMgMTMgcGl4ZWxzICovCisJCWlm IChzdGF0ZS0+Y3J0Y193IDwgMTMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgorCQlpZiAoc3RhdGUtPmNydGNfeCA8IDAgfHwgc3Rh dGUtPmNydGNfeSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoc3RhdGUtPmNydGNf eCArIHN0YXRlLT5jcnRjX3cgPgorCQkgICAgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlz cGxheSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoc3RhdGUtPmNydGNfeSArIHN0YXRlLT5j cnRjX2ggPgorCQkgICAgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52ZGlzcGxheSkKKwkJCXJl dHVybiAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihkZXYsICJVbnN1 cHBvcnRlZCBwbGFuZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0 YXRlLT5jcnRjX2ggPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogc2luY2Ugd2Ug Y2Fubm90IHRvdWNoIGFjdGl2ZSBJRE1BQyBjaGFubmVscywgd2UgZG8gbm90IHN1cHBvcnQKKwkg KiByZXNpemluZyB0aGUgZW5hYmxlZCBwbGFuZSBvciBjaGFuZ2luZyBpdHMgZm9ybWF0CisJICov CisJaWYgKG9sZF9mYiAmJiAoc3RhdGUtPnNyY193ICE9IG9sZF9zdGF0ZS0+c3JjX3cgfHwKKwkJ CSAgICAgIHN0YXRlLT5zcmNfaCAhPSBvbGRfc3RhdGUtPnNyY19oIHx8CisJCQkgICAgICBmYi0+ cGl4ZWxfZm9ybWF0ICE9IG9sZF9mYi0+cGl4ZWxfZm9ybWF0KSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwllYmEgPSBkcm1fcGxhbmVfc3RhdGVfdG9fZWJhKHN0YXRlKTsKKworCWlmIChlYmEgJiAw eDcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZiLT5waXRjaGVzWzBdIDwgMSB8fCBmYi0+ cGl0Y2hlc1swXSA+IDE2Mzg0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvbGRfZmIgJiYg ZmItPnBpdGNoZXNbMF0gIT0gb2xkX2ZiLT5waXRjaGVzWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6 CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKKwkJLyoKKwkJICogTXVsdGlwbGFuYXIgZm9ybWF0 cyBoYXZlIHRvIG1lZXQgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisJCSAqIC0gVGhlICh1 cCB0bykgdGhyZWUgcGxhbmUgYWRkcmVzc2VzIGFyZSBFQkEsIEVCQStVQk8sIEVCQStWQk8KKwkJ ICogLSBFQkEsIFVCTyBhbmQgVkJPIGFyZSBhIG11bHRpcGxlIG9mIDgKKwkJICogLSBVQk8gYW5k IFZCTyBhcmUgdW5zaWduZWQgYW5kIG5vdCBsYXJnZXIgdGhhbiAweGZmZmZmOAorCQkgKiAtIE9u bHkgRUJBIG1heSBiZSBjaGFuZ2VkIHdoaWxlIHNjYW5vdXQgaXMgYWN0aXZlCisJCSAqIC0gVGhl IHN0cmlkZXMgb2YgVSBhbmQgViBwbGFuZXMgbXVzdCBiZSBpZGVudGljYWwuCisJCSAqLworCQl1 Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0YXRlKTsKKwkJdmJvID0gZHJtX3BsYW5lX3N0 YXRlX3RvX3ZibyhzdGF0ZSk7CisKKwkJaWYgKCh1Ym8gJiAweDcpIHx8ICh2Ym8gJiAweDcpKQor CQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKCh1Ym8gPiAweGZmZmZmOCkgfHwgKHZibyA+IDB4 ZmZmZmY4KSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChvbGRfZmIpIHsKKwkJCW9sZF91 Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKG9sZF9zdGF0ZSk7CisJCQlvbGRfdmJvID0gZHJt X3BsYW5lX3N0YXRlX3RvX3ZibyhvbGRfc3RhdGUpOworCQkJaWYgKHVibyAhPSBvbGRfdWJvIHx8 IHZibyAhPSBvbGRfdmJvKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGZiLT5w aXRjaGVzWzFdICE9IGZiLT5waXRjaGVzWzJdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYg KGZiLT5waXRjaGVzWzFdIDwgMSB8fCBmYi0+cGl0Y2hlc1sxXSA+IDE2Mzg0KQorCQkJcmV0dXJu IC1FSU5WQUw7CisKKwkJaWYgKG9sZF9mYiAmJiBvbGRfZmItPnBpdGNoZXNbMV0gIT0gZmItPnBp dGNoZXNbMV0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIHZvaWQgaXB1X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCitzdGF0 aWMgdm9pZCBpcHVfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJaXB1X2Rp c2FibGVfcGxhbmUocGxhbmUpOworfQorCitzdGF0aWMgdm9pZCBpcHVfcGxhbmVfYXRvbWljX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqb2xkX3N0YXRlKQogewogCXN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSA9IHRvX2lw dV9wbGFuZShwbGFuZSk7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+ c3RhdGU7CisJZW51bSBpcHVfY29sb3Jfc3BhY2UgaWNzOwogCi0JRFJNX0RFQlVHX0tNUygiWyVk XSAlc1xuIiwgX19MSU5FX18sIF9fZnVuY19fKTsKKwlpZiAob2xkX3N0YXRlLT5mYikgeworCQlp cHVfcGxhbmVfYXRvbWljX3NldF9iYXNlKGlwdV9wbGFuZSwgb2xkX3N0YXRlKTsKKwkJcmV0dXJu OworCX0KIAotCWlwdV9kaXNhYmxlX3BsYW5lKHBsYW5lKTsKLQlkcm1fcGxhbmVfY2xlYW51cChw bGFuZSk7Ci0Ja2ZyZWUoaXB1X3BsYW5lKTsKKwlzd2l0Y2ggKGlwdV9wbGFuZS0+ZHBfZmxvdykg eworCWNhc2UgSVBVX0RQX0ZMT1dfU1lOQ19CRzoKKwkJaXB1X2RwX3NldHVwX2NoYW5uZWwoaXB1 X3BsYW5lLT5kcCwKKwkJCQkJSVBVVjNfQ09MT1JTUEFDRV9SR0IsCisJCQkJCUlQVVYzX0NPTE9S U1BBQ0VfUkdCKTsKKwkJaXB1X2RwX3NldF9nbG9iYWxfYWxwaGEoaXB1X3BsYW5lLT5kcCwgdHJ1 ZSwgMCwgdHJ1ZSk7CisJCWJyZWFrOworCWNhc2UgSVBVX0RQX0ZMT1dfU1lOQ19GRzoKKwkJaWNz ID0gaXB1X2RybV9mb3VyY2NfdG9fY29sb3JzcGFjZShzdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCk7 CisJCWlwdV9kcF9zZXR1cF9jaGFubmVsKGlwdV9wbGFuZS0+ZHAsIGljcywKKwkJCQkJSVBVVjNf Q09MT1JTUEFDRV9VTktOT1dOKTsKKwkJaXB1X2RwX3NldF93aW5kb3dfcG9zKGlwdV9wbGFuZS0+ ZHAsIHN0YXRlLT5jcnRjX3gsCisJCQkJCXN0YXRlLT5jcnRjX3kpOworCQkvKiBFbmFibGUgbG9j YWwgYWxwaGEgb24gcGFydGlhbCBwbGFuZSAqLworCQlzd2l0Y2ggKHN0YXRlLT5mYi0+cGl4ZWxf Zm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKKwkJY2FzZSBEUk1fRk9STUFU X0FCR1IxNTU1OgorCQljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6CisJCWNhc2UgRFJNX0ZPUk1B VF9CR1JBNTU1MToKKwkJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0OgorCQljYXNlIERSTV9GT1JN QVRfQVJHQjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJY2FzZSBEUk1fRk9S TUFUX1JHQkE4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCQlpcHVfZHBfc2V0 X2dsb2JhbF9hbHBoYShpcHVfcGxhbmUtPmRwLCBmYWxzZSwgMCwgZmFsc2UpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWlwdV9kbWZjX2NvbmZpZ193YWl0 NGVvdChpcHVfcGxhbmUtPmRtZmMsIHN0YXRlLT5jcnRjX3cpOworCisJaXB1X2NwbWVtX3plcm8o aXB1X3BsYW5lLT5pcHVfY2gpOworCWlwdV9jcG1lbV9zZXRfcmVzb2x1dGlvbihpcHVfcGxhbmUt PmlwdV9jaCwgc3RhdGUtPnNyY193ID4+IDE2LAorCQkJCQlzdGF0ZS0+c3JjX2ggPj4gMTYpOwor CWlwdV9jcG1lbV9zZXRfZm10KGlwdV9wbGFuZS0+aXB1X2NoLCBzdGF0ZS0+ZmItPnBpeGVsX2Zv cm1hdCk7CisJaXB1X2NwbWVtX3NldF9oaWdoX3ByaW9yaXR5KGlwdV9wbGFuZS0+aXB1X2NoKTsK KwlpcHVfaWRtYWNfc2V0X2RvdWJsZV9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsIDEpOworCWlw dV9jcG1lbV9zZXRfc3RyaWRlKGlwdV9wbGFuZS0+aXB1X2NoLCBzdGF0ZS0+ZmItPnBpdGNoZXNb MF0pOworCWlwdV9wbGFuZV9hdG9taWNfc2V0X2Jhc2UoaXB1X3BsYW5lLCBvbGRfc3RhdGUpOwor CWlwdV9wbGFuZV9lbmFibGUoaXB1X3BsYW5lKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgaXB1X3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUJPSBpcHVf dXBkYXRlX3BsYW5lLAotCS5kaXNhYmxlX3BsYW5lCT0gaXB1X2Rpc2FibGVfcGxhbmUsCi0JLmRl c3Ryb3kJPSBpcHVfcGxhbmVfZGVzdHJveSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyBpcHVfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sg PSBpcHVfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfZGlzYWJsZSA9IGlwdV9wbGFuZV9h dG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX3VwZGF0ZSA9IGlwdV9wbGFuZV9hdG9taWNfdXBkYXRl LAogfTsKIAogc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGlwdV9zb2MgKmlwdSwKQEAgLTQ4MSw1ICs1NzgsNyBAQCBzdHJ1Y3Qg aXB1X3BsYW5lICppcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg aXB1X3NvYyAqaXB1LAogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAorCWRybV9wbGFuZV9o ZWxwZXJfYWRkKCZpcHVfcGxhbmUtPmJhc2UsICZpcHVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwog CXJldHVybiBpcHVfcGxhbmU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lw dXYzLXBsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmgKaW5kZXggNDQ0 OGZkNC4uYzUxYTQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFu ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuaApAQCAtMjMsMTcgKzIz LDYgQEAgc3RydWN0IGlwdV9wbGFuZSB7CiAKIAlpbnQJCQlkbWE7CiAJaW50CQkJZHBfZmxvdzsK LQotCWludAkJCXg7Ci0JaW50CQkJeTsKLQlpbnQJCQl3OwotCWludAkJCWg7Ci0KLQl1bnNpZ25l ZCBpbnQJCXVfb2Zmc2V0OwotCXVuc2lnbmVkIGludAkJdl9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50 CQlzdHJpZGVbMl07Ci0KLQlib29sCQkJZW5hYmxlZDsKIH07CiAKIHN0cnVjdCBpcHVfcGxhbmUg KmlwdV9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpcHVfc29jICpp cHUsCkBAIC00OCwxMCArMzcsNyBAQCBpbnQgaXB1X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBpcHVf cGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCSAgICAgICB1aW50MzJfdCBz cmNfeCwgdWludDMyX3Qgc3JjX3ksIHVpbnQzMl90IHNyY193LAogCQkgICAgICAgdWludDMyX3Qg c3JjX2gsIGJvb2wgaW50ZXJsYWNlZCk7CiAKLXZvaWQgaXB1X3BsYW5lX2VuYWJsZShzdHJ1Y3Qg aXB1X3BsYW5lICpwbGFuZSk7Ci12b2lkIGlwdV9wbGFuZV9kaXNhYmxlKHN0cnVjdCBpcHVfcGxh bmUgKnBsYW5lKTsKLWludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqcGxh bmUsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgICAgaW50IHgsIGludCB5KTsK K2ludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiKTsKIAogaW50IGlwdV9wbGFuZV9nZXRfcmVzb3VyY2VzKHN0cnVj dCBpcHVfcGxhbmUgKnBsYW5lKTsKIHZvaWQgaXB1X3BsYW5lX3B1dF9yZXNvdXJjZXMoc3RydWN0 IGlwdV9wbGFuZSAqcGxhbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1k Yy5jIGIvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1kYy5jCmluZGV4IDJmMjk3ODAuLmNkNzJkYWQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtZGMuYworKysgYi9kcml2ZXJzL2dw dS9pcHUtdjMvaXB1LWRjLmMKQEAgLTE3OCwxMCArMTc4LDcgQEAgaW50IGlwdV9kY19pbml0X3N5 bmMoc3RydWN0IGlwdV9kYyAqZGMsIHN0cnVjdCBpcHVfZGkgKmRpLCBib29sIGludGVybGFjZWQs CiAJZGMtPmRpID0gaXB1X2RpX2dldF9udW0oZGkpOwogCiAJbWFwID0gaXB1X2J1c19mb3JtYXRf dG9fbWFwKGJ1c19mb3JtYXQpOwotCWlmIChtYXAgPCAwKSB7Ci0JCWRldl9kYmcocHJpdi0+ZGV2 LCAiSVBVX0RJU1A6IE5vIE1BUFxuIik7Ci0JCXJldHVybiBtYXA7Ci0JfQorCUJVR19PTihtYXAg PCAwKTsKIAogCS8qCiAJICogSW4gaW50ZXJsYWNlZCBtb2RlIHdlIG5lZWQgbW9yZSBjb3VudGVy cyB0byBjcmVhdGUgdGhlIGFzeW1tZXRyaWMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2lwdS12 My9pcHUtZGkuYyBiL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtZGkuYwppbmRleCAzNTkyNjhlLi5h OGQ4N2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRpLmMKKysrIGIvZHJp dmVycy9ncHUvaXB1LXYzL2lwdS1kaS5jCkBAIC01NzIsOSArNTcyLDYgQEAgaW50IGlwdV9kaV9p bml0X3N5bmNfcGFuZWwoc3RydWN0IGlwdV9kaSAqZGksIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2Nm ZyAqc2lnKQogCWRldl9kYmcoZGktPmlwdS0+ZGV2LCAiZGlzcCAlZDogcGFuZWwgc2l6ZSA9ICVk IHggJWRcbiIsCiAJCWRpLT5pZCwgc2lnLT5tb2RlLmhhY3RpdmUsIHNpZy0+bW9kZS52YWN0aXZl KTsKIAotCWlmICgoc2lnLT5tb2RlLnZzeW5jX2xlbiA9PSAwKSB8fCAoc2lnLT5tb2RlLmhzeW5j X2xlbiA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlkZXZfZGJnKGRpLT5pcHUtPmRldiwg IkNsb2NrczogSVBVICVsdUh6IERJICVsdUh6IE5lZWRlZCAlbHVIelxuIiwKIAkJY2xrX2dldF9y YXRlKGRpLT5jbGtfaXB1KSwKIAkJY2xrX2dldF9yYXRlKGRpLT5jbGtfZGkpLAotLSAKMi43LjQK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=