From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH 06/14] drm/imx: atomic phase 1: Use transitional atomic CRTC and plane helpers Date: Tue, 24 May 2016 18:10:45 +0800 Message-ID: <1464084653-16684-7-git-send-email-gnuiyl@gmail.com> References: <1464084653-16684-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 na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0064.outbound.protection.outlook.com [65.55.169.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 89FF26E701 for ; Tue, 24 May 2016 10:27:16 +0000 (UTC) In-Reply-To: <1464084653-16684-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 List-Id: dri-devel@lists.freedesktop.org VXNlIHRoZSBkcm1fcGxhbmVfaGVscGVyX3VwZGF0ZS9kaXNhYmxlKCkgYW5kIGRybV9oZWxwZXJf Y3J0Y19tb2RlX3NldCgpCnRyYW5zaXN0aW9uYWwgYXRvbWljIGhlbHBlcnMuICBUaGUgY3J0Yy0+ bW9kZV9zZXRfbm9mYiBjYWxsYmFjayBpcyBhZGRlZApzbyB0aGF0IHRoZSBwcmltYXJ5IHBsYW5l IGlzIG5vIGxvbmdlciB0aWVkIHRvIHRoZSBDUlRDLiAgQ2hlY2svdXBkYXRlCmxvZ2ljcyBhcmUg c2VwYXJhdGVkIHRvIG1ha2Ugc3VyZSBjcnRjLT5tb2RlX3NldF9ub2ZiIGFuZCBwbGFuZS0+YXRv bWljX3VwZGF0ZQphcmUgYWx3YXlzIHN1Y2Nlc3NmdWwuICBBbHNvLCBzb21lIG5lY2Vzc2FyeSBs b2dpY3MgYXJlIHR3ZWFrZWQgZm9yIGEgc21vb3RoCnRyYW5zaXRpb24uCgpTaWduZWQtb2ZmLWJ5 OiBMaXUgWWluZyA8Z251aXlsQGdtYWlsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaW14L2lw dXYzLWNydGMuYyAgfCAxNzMgKysrKysrKy0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2 My1wbGFuZS5jIHwgNTE2ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmggfCAgMTQgKy0KIGRyaXZlcnMvZ3B1L2lw dS12My9pcHUtZGMuYyAgICAgICB8ICAgNSArLQogZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1kaS5j ICAgICAgIHwgICAzIC0KIDUgZmlsZXMgY2hhbmdlZCwgNDAwIGluc2VydGlvbnMoKyksIDMxMSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLWNydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCmluZGV4IGIyYzMwYjguLjExZmFk ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBp cHVfY3J0YyB7CiAKICNkZWZpbmUgdG9faXB1X2NydGMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVj dCBpcHVfY3J0YywgYmFzZSkKIAotc3RhdGljIHZvaWQgaXB1X2ZiX2VuYWJsZShzdHJ1Y3QgaXB1 X2NydGMgKmlwdV9jcnRjKQorc3RhdGljIHZvaWQgaXB1X2NydGNfZW5hYmxlKHN0cnVjdCBpcHVf Y3J0YyAqaXB1X2NydGMpCiB7CiAJc3RydWN0IGlwdV9zb2MgKmlwdSA9IGRldl9nZXRfZHJ2ZGF0 YShpcHVfY3J0Yy0+ZGV2LT5wYXJlbnQpOwogCkBAIC04MCwxNiArODAsMTkgQEAgc3RhdGljIHZv aWQgaXB1X2ZiX2VuYWJsZShzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjKQogCQlyZXR1cm47CiAK IAlpcHVfZGNfZW5hYmxlKGlwdSk7Ci0JaXB1X3BsYW5lX2VuYWJsZShpcHVfY3J0Yy0+cGxhbmVb MF0pOwogCS8qIFN0YXJ0IERDIGNoYW5uZWwgYW5kIERJIGFmdGVyIElETUFDICovCiAJaXB1X2Rj X2VuYWJsZV9jaGFubmVsKGlwdV9jcnRjLT5kYyk7CiAJaXB1X2RpX2VuYWJsZShpcHVfY3J0Yy0+ ZGkpOwotCWRybV9jcnRjX3ZibGFua19vbigmaXB1X2NydGMtPmJhc2UpOwotCiAJaXB1X2NydGMt PmVuYWJsZWQgPSAxOworCisJLyoKKwkgKiBJbiBvcmRlciBub3QgdG8gYmUgd2FybmVkIG9uIGVu YWJsaW5nIHZibGFuayBmYWlsdXJlLAorCSAqIHdlIHNob3VsZCBjYWxsIGRybV9jcnRjX3ZibGFu a19vbigpIGFmdGVyIC0+ZW5hYmxlZCBpcyBzZXQgdG8gMS4KKwkgKi8KKwlkcm1fY3J0Y192Ymxh bmtfb24oJmlwdV9jcnRjLT5iYXNlKTsKIH0KIAotc3RhdGljIHZvaWQgaXB1X2ZiX2Rpc2FibGUo c3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykKK3N0YXRpYyB2b2lkIGlwdV9jcnRjX2Rpc2FibGUo c3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykKIHsKIAlzdHJ1Y3QgaXB1X3NvYyAqaXB1ID0gZGV2 X2dldF9kcnZkYXRhKGlwdV9jcnRjLT5kZXYtPnBhcmVudCk7CiAKQEAgLTk5LDExICsxMDIsMTAg QEAgc3RhdGljIHZvaWQgaXB1X2ZiX2Rpc2FibGUoc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YykK IAkvKiBTdG9wIERDIGNoYW5uZWwgYW5kIERJIGJlZm9yZSBJRE1BQyAqLwogCWlwdV9kY19kaXNh YmxlX2NoYW5uZWwoaXB1X2NydGMtPmRjKTsKIAlpcHVfZGlfZGlzYWJsZShpcHVfY3J0Yy0+ZGkp OwotCWlwdV9wbGFuZV9kaXNhYmxlKGlwdV9jcnRjLT5wbGFuZVswXSk7CiAJaXB1X2RjX2Rpc2Fi bGUoaXB1KTsKLQlkcm1fY3J0Y192Ymxhbmtfb2ZmKCZpcHVfY3J0Yy0+YmFzZSk7Ci0KIAlpcHVf Y3J0Yy0+ZW5hYmxlZCA9IDA7CisKKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKCZpcHVfY3J0Yy0+YmFz ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdV9jcnRjX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRj LCBpbnQgbW9kZSkKQEAgLTExNCwxMiArMTE2LDEyIEBAIHN0YXRpYyB2b2lkIGlwdV9jcnRjX2Rw bXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgbW9kZSkKIAogCXN3aXRjaCAobW9kZSkgewog CWNhc2UgRFJNX01PREVfRFBNU19PTjoKLQkJaXB1X2ZiX2VuYWJsZShpcHVfY3J0Yyk7CisJCWlw dV9jcnRjX2VuYWJsZShpcHVfY3J0Yyk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfRFBNU19T VEFOREJZOgogCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgogCWNhc2UgRFJNX01PREVfRFBN U19PRkY6Ci0JCWlwdV9mYl9kaXNhYmxlKGlwdV9jcnRjKTsKKwkJaXB1X2NydGNfZGlzYWJsZShp cHVfY3J0Yyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIzMyw3NyArMjM1LDYgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpcHVfY3J0Y19mdW5jcyA9IHsKIAkucGFnZV9mbGlw ID0gaXB1X3BhZ2VfZmxpcCwKIH07CiAKLXN0YXRpYyBpbnQgaXB1X2NydGNfbW9kZV9zZXQoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpv cmlnX21vZGUsCi0JCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkg ICAgICAgaW50IHgsIGludCB5LAotCQkJICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9s ZF9mYikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgaXB1X2NydGMgKmlwdV9jcnRjID0gdG9faXB1 X2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGlwdV9kaV9zaWduYWxfY2ZnIHNpZ19jZmcgPSB7fTsKLQl1 bnNpZ25lZCBsb25nIGVuY29kZXJfdHlwZXMgPSAwOwotCWludCByZXQ7Ci0KLQlkZXZfZGJnKGlw dV9jcnRjLT5kZXYsICIlczogbW9kZS0+aGRpc3BsYXk6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCW1v ZGUtPmhkaXNwbGF5KTsKLQlkZXZfZGJnKGlwdV9jcnRjLT5kZXYsICIlczogbW9kZS0+dmRpc3Bs YXk6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCW1vZGUtPnZkaXNwbGF5KTsKLQotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQot CQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKQotCQkJZW5jb2Rlcl90eXBlcyB8PSBCSVQoZW5j b2Rlci0+ZW5jb2Rlcl90eXBlKTsKLQotCWRldl9kYmcoaXB1X2NydGMtPmRldiwgIiVzOiBhdHRh Y2hlZCB0byBlbmNvZGVyIHR5cGVzIDB4JWx4XG4iLAotCQlfX2Z1bmNfXywgZW5jb2Rlcl90eXBl cyk7Ci0KLQkvKgotCSAqIElmIHdlIGhhdmUgREFDIG9yIExEQiwgdGhlbiB3ZSBuZWVkIHRoZSBJ UFUgREkgY2xvY2sgdG8gYmUKLQkgKiB0aGUgc2FtZSBhcyB0aGUgTERCIERJIGNsb2NrLiBGb3Ig VFZEQUMsIGRlcml2ZSB0aGUgSVBVIERJCi0JICogY2xvY2sgZnJvbSAyNyBNSHogVFZFX0RJIGNs b2NrLCBidXQgYWxsb3cgdG8gZGl2aWRlIGl0LgotCSAqLwotCWlmIChlbmNvZGVyX3R5cGVzICYg KEJJVChEUk1fTU9ERV9FTkNPREVSX0RBQykgfAotCQkJICAgICBCSVQoRFJNX01PREVfRU5DT0RF Ul9MVkRTKSkpCi0JCXNpZ19jZmcuY2xrZmxhZ3MgPSBJUFVfRElfQ0xLTU9ERV9TWU5DIHwgSVBV X0RJX0NMS01PREVfRVhUOwotCWVsc2UgaWYgKGVuY29kZXJfdHlwZXMgJiBCSVQoRFJNX01PREVf RU5DT0RFUl9UVkRBQykpCi0JCXNpZ19jZmcuY2xrZmxhZ3MgPSBJUFVfRElfQ0xLTU9ERV9FWFQ7 Ci0JZWxzZQotCQlzaWdfY2ZnLmNsa2ZsYWdzID0gMDsKLQotCXNpZ19jZmcuZW5hYmxlX3BvbCA9 IDE7Ci0Jc2lnX2NmZy5jbGtfcG9sID0gMDsKLQlzaWdfY2ZnLmJ1c19mb3JtYXQgPSBpcHVfY3J0 Yy0+YnVzX2Zvcm1hdDsKLQlzaWdfY2ZnLnZfdG9faF9zeW5jID0gMDsKLQlzaWdfY2ZnLmhzeW5j X3BpbiA9IGlwdV9jcnRjLT5kaV9oc3luY19waW47Ci0Jc2lnX2NmZy52c3luY19waW4gPSBpcHVf Y3J0Yy0+ZGlfdnN5bmNfcGluOwotCi0JZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUobW9k ZSwgJnNpZ19jZmcubW9kZSk7Ci0KLQlyZXQgPSBpcHVfZGNfaW5pdF9zeW5jKGlwdV9jcnRjLT5k YywgaXB1X2NydGMtPmRpLAotCQkJICAgICAgIG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19J TlRFUkxBQ0UsCi0JCQkgICAgICAgaXB1X2NydGMtPmJ1c19mb3JtYXQsIG1vZGUtPmhkaXNwbGF5 KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoaXB1X2NydGMtPmRldiwKLQkJCQkiaW5pdGlhbGl6 aW5nIGRpc3BsYXkgY29udHJvbGxlciBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJCQlyZXQpOwotCQly ZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IGlwdV9kaV9pbml0X3N5bmNfcGFuZWwoaXB1X2NydGMt PmRpLCAmc2lnX2NmZyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGlwdV9jcnRjLT5kZXYsCi0J CQkJImluaXRpYWxpemluZyBwYW5lbCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJu IHJldDsKLQl9Ci0KLQlyZXR1cm4gaXB1X3BsYW5lX21vZGVfc2V0KGlwdV9jcnRjLT5wbGFuZVsw XSwgY3J0YywgbW9kZSwKLQkJCQkgIGNydGMtPnByaW1hcnktPmZiLAotCQkJCSAgMCwgMCwgbW9k ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAotCQkJCSAgeCwgeSwgbW9kZS0+aGRpc3BsYXks IG1vZGUtPnZkaXNwbGF5LAotCQkJCSAgbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVS TEFDRSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGlwdV9jcnRjX2hhbmRsZV9wYWdlZmxpcChzdHJ1Y3Qg aXB1X2NydGMgKmlwdV9jcnRjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMjcsOCAr MjU4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGlwdV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkZXZfaWQpCiAJaWYgKGlwdV9jcnRjLT5mbGlwX3N0YXRlID09IElQVV9GTElQX1NVQk1JVFRF RCkgewogCQlzdHJ1Y3QgaXB1X3BsYW5lICpwbGFuZSA9IGlwdV9jcnRjLT5wbGFuZVswXTsKIAot CQlpcHVfcGxhbmVfc2V0X2Jhc2UocGxhbmUsIGlwdV9jcnRjLT5iYXNlLnByaW1hcnktPmZiLAot CQkJCSAgIHBsYW5lLT54LCBwbGFuZS0+eSk7CisJCWlwdV9wbGFuZV9zZXRfYmFzZShwbGFuZSwg aXB1X2NydGMtPmJhc2UucHJpbWFyeS0+ZmIpOwogCQlpcHVfY3J0Y19oYW5kbGVfcGFnZWZsaXAo aXB1X2NydGMpOwogCQlxdWV1ZV93b3JrKGlwdV9jcnRjLT5mbGlwX3F1ZXVlLAogCQkJICAgJmlw dV9jcnRjLT5mbGlwX3dvcmstPnVucmVmX3dvcmspOwpAQCAtMzUyLDYgKzI4Miw5IEBAIHN0YXRp YyBib29sIGlwdV9jcnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWlmIChy ZXQpCiAJCXJldHVybiBmYWxzZTsKIAorCWlmICgodm0udnN5bmNfbGVuID09IDApIHx8ICh2bS5o c3luY19sZW4gPT0gMCkpCisJCXJldHVybiBmYWxzZTsKKwogCWRybV9kaXNwbGF5X21vZGVfZnJv bV92aWRlb21vZGUoJnZtLCBhZGp1c3RlZF9tb2RlKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMzYx LDI4ICsyOTQsOTMgQEAgc3RhdGljIHZvaWQgaXB1X2NydGNfcHJlcGFyZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCiB7CiAJc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRvX2lwdV9jcnRjKGNy dGMpOwogCi0JaXB1X2ZiX2Rpc2FibGUoaXB1X2NydGMpOworCWlwdV9jcnRjX2Rpc2FibGUoaXB1 X2NydGMpOwogfQogCiBzdGF0aWMgdm9pZCBpcHVfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogewogCXN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMgPSB0b19pcHVfY3J0YyhjcnRj KTsKIAotCWlwdV9mYl9lbmFibGUoaXB1X2NydGMpOworCWlwdV9jcnRjX2VuYWJsZShpcHVfY3J0 Yyk7Cit9CisKK3N0YXRpYyBpbnQgaXB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKKwkJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgaXB1X2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGlwdV9jcnRjICppcHVfY3J0YyA9IHRv X2lwdV9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGMt PnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCXN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2Zn ID0ge307CisJdW5zaWduZWQgbG9uZyBlbmNvZGVyX3R5cGVzID0gMDsKKworCWRldl9kYmcoaXB1 X2NydGMtPmRldiwgIiVzOiBtb2RlLT5oZGlzcGxheTogJWRcbiIsIF9fZnVuY19fLAorCQkJbW9k ZS0+aGRpc3BsYXkpOworCWRldl9kYmcoaXB1X2NydGMtPmRldiwgIiVzOiBtb2RlLT52ZGlzcGxh eTogJWRcbiIsIF9fZnVuY19fLAorCQkJbW9kZS0+dmRpc3BsYXkpOworCisJbGlzdF9mb3JfZWFj aF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpCisJ CWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpCisJCQllbmNvZGVyX3R5cGVzIHw9IEJJVChlbmNv ZGVyLT5lbmNvZGVyX3R5cGUpOworCisJZGV2X2RiZyhpcHVfY3J0Yy0+ZGV2LCAiJXM6IGF0dGFj aGVkIHRvIGVuY29kZXIgdHlwZXMgMHglbHhcbiIsCisJCV9fZnVuY19fLCBlbmNvZGVyX3R5cGVz KTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBEQUMgb3IgTERCLCB0aGVuIHdlIG5lZWQgdGhlIElQ VSBESSBjbG9jayB0byBiZQorCSAqIHRoZSBzYW1lIGFzIHRoZSBMREIgREkgY2xvY2suIEZvciBU VkRBQywgZGVyaXZlIHRoZSBJUFUgREkKKwkgKiBjbG9jayBmcm9tIDI3IE1IeiBUVkVfREkgY2xv Y2ssIGJ1dCBhbGxvdyB0byBkaXZpZGUgaXQuCisJICovCisJaWYgKGVuY29kZXJfdHlwZXMgJiAo QklUKERSTV9NT0RFX0VOQ09ERVJfREFDKSB8CisJCQkgICAgIEJJVChEUk1fTU9ERV9FTkNPREVS X0xWRFMpKSkKKwkJc2lnX2NmZy5jbGtmbGFncyA9IElQVV9ESV9DTEtNT0RFX1NZTkMgfCBJUFVf RElfQ0xLTU9ERV9FWFQ7CisJZWxzZSBpZiAoZW5jb2Rlcl90eXBlcyAmIEJJVChEUk1fTU9ERV9F TkNPREVSX1RWREFDKSkKKwkJc2lnX2NmZy5jbGtmbGFncyA9IElQVV9ESV9DTEtNT0RFX0VYVDsK KwllbHNlCisJCXNpZ19jZmcuY2xrZmxhZ3MgPSAwOworCisJc2lnX2NmZy5lbmFibGVfcG9sID0g MTsKKwlzaWdfY2ZnLmNsa19wb2wgPSAwOworCXNpZ19jZmcuYnVzX2Zvcm1hdCA9IGlwdV9jcnRj LT5idXNfZm9ybWF0OworCXNpZ19jZmcudl90b19oX3N5bmMgPSAwOworCXNpZ19jZmcuaHN5bmNf cGluID0gaXB1X2NydGMtPmRpX2hzeW5jX3BpbjsKKwlzaWdfY2ZnLnZzeW5jX3BpbiA9IGlwdV9j cnRjLT5kaV92c3luY19waW47CisKKwlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZShtb2Rl LCAmc2lnX2NmZy5tb2RlKTsKKworCWlwdV9kY19pbml0X3N5bmMoaXB1X2NydGMtPmRjLCBpcHVf Y3J0Yy0+ZGksCisJCQkgbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSwKKwkJ CSBpcHVfY3J0Yy0+YnVzX2Zvcm1hdCwgbW9kZS0+aGRpc3BsYXkpOworCWlwdV9kaV9pbml0X3N5 bmNfcGFuZWwoaXB1X2NydGMtPmRpLCAmc2lnX2NmZyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGlwdV9oZWxwZXJfZnVuY3MgPSB7CiAJLmRwbXMgPSBp cHVfY3J0Y19kcG1zLAogCS5tb2RlX2ZpeHVwID0gaXB1X2NydGNfbW9kZV9maXh1cCwKLQkubW9k ZV9zZXQgPSBpcHVfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXQgPSBkcm1faGVscGVyX2NydGNf bW9kZV9zZXQsCisJLm1vZGVfc2V0X25vZmIgPSBpcHVfY3J0Y19tb2RlX3NldF9ub2ZiLAogCS5w cmVwYXJlID0gaXB1X2NydGNfcHJlcGFyZSwKIAkuY29tbWl0ID0gaXB1X2NydGNfY29tbWl0LAor CS5hdG9taWNfY2hlY2sgPSBpcHVfY3J0Y19hdG9taWNfY2hlY2ssCiB9OwogCiBzdGF0aWMgaW50 IGlwdV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgaXB1 X2NydGMgKmlwdV9jcnRjID0gdG9faXB1X2NydGMoY3J0Yyk7CiAKKwkvKgorCSAqIC0+Y29tbWl0 IGlzIGRvbmUgYWZ0ZXIgLT5tb2RlX3NldCBpbiBkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoKSwK KwkgKiBzbyB3YWl0aW5nIGZvciB2YmxhbmsgaW4gZHJtX3BsYW5lX2hlbHBlcl9jb21taXQoKSB3 aWxsIHRpbWVvdXQuCisJICogQ2hlY2sgdGhlIHN0YXRlIGhlcmUgdG8gYXZvaWQgdGhlIHdhaXRp bmcuCisJICovCisJaWYgKCFpcHVfY3J0Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK IAllbmFibGVfaXJxKGlwdV9jcnRjLT5pcnEpOwogCiAJcmV0dXJuIDA7CkBAIC01MDYsNiArNTA0 LDggQEAgc3RhdGljIGludCBpcHVfY3J0Y19pbml0KHN0cnVjdCBpcHVfY3J0YyAqaXB1X2NydGMs CiAJLyogT25seSBlbmFibGUgSVJRIHdoZW4gd2UgYWN0dWFsbHkgbmVlZCBpdCB0byB0cmlnZ2Vy IHdvcmsuICovCiAJZGlzYWJsZV9pcnEoaXB1X2NydGMtPmlycSk7CiAKKwlpcHVfcGxhbmVfcHV0 X3Jlc291cmNlcyhpcHVfY3J0Yy0+cGxhbmVbMF0pOworCiAJaXB1X2NydGMtPmZsaXBfcXVldWUg PSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaXB1LWNydGMtZmxpcCIpOwogCiAJcmV0 dXJuIDA7CkBAIC01NTAsNyArNTUwLDYgQEAgc3RhdGljIHZvaWQgaXB1X2RybV91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAJaW14X2RybV9yZW1vdmVf Y3J0YyhpcHVfY3J0Yy0+aW14X2NydGMpOwogCiAJZGVzdHJveV93b3JrcXVldWUoaXB1X2NydGMt PmZsaXBfcXVldWUpOwotCWlwdV9wbGFuZV9wdXRfcmVzb3VyY2VzKGlwdV9jcnRjLT5wbGFuZVsw XSk7CiAJaXB1X3B1dF9yZXNvdXJjZXMoaXB1X2NydGMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYz LXBsYW5lLmMKaW5kZXggMzBjZWRiYi4uNDUxMWI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2lteC9pcHV2My1wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxh bmUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8 ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CiAKICNpbmNsdWRlICJ2aWRl by9pbXgtaXB1LXYzLmgiCiAjaW5jbHVkZSAiaXB1djMtcGxhbmUuaCIKQEAgLTUxLDEyICs1Miwx NSBAQCBpbnQgaXB1X3BsYW5lX2lycShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCiAJCQkJ ICAgICBJUFVfSVJRX0VPRik7CiB9CiAKLWludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlw dV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJICAgICAg IGludCB4LCBpbnQgeSkKK2ludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3RydWN0IGlwdV9wbGFuZSAq aXB1X3BsYW5lLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKIHsKLQlzdHJ1Y3QgZHJtX2dl bV9jbWFfb2JqZWN0ICpjbWFfb2JqWzNdOwotCXVuc2lnbmVkIGxvbmcgZWJhLCB1Ym8sIHZibzsK KwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqWzNdLCAqb2xkX2NtYV9vYmpbM107 CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBpcHVfcGxhbmUtPmJhc2Uuc3RhdGU7 CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiID0gc3RhdGUtPmZiOworCXVuc2lnbmVk IGxvbmcgZWJhLCB1Ym8sIHZibywgb2xkX2ViYSwgb2xkX3Vibywgb2xkX3ZibzsKIAlpbnQgYWN0 aXZlLCBpOworCWludCB4ID0gc3RhdGUtPnNyY194ID4+IDE2OworCWludCB5ID0gc3RhdGUtPnNy Y195ID4+IDE2OwogCiAJZm9yIChpID0gMDsgaSA8IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhmYi0+ cGl4ZWxfZm9ybWF0KTsgaSsrKSB7CiAJCWNtYV9vYmpbaV0gPSBkcm1fZmJfY21hX2dldF9nZW1f b2JqKGZiLCBpKTsKQEAgLTY2LDYgKzcwLDE0IEBAIGludCBpcHVfcGxhbmVfc2V0X2Jhc2Uoc3Ry dWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJ fQogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBkcm1fZm9ybWF0X251bV9wbGFuZXMob2xkX2ZiLT5w aXhlbF9mb3JtYXQpOyBpKyspIHsKKwkJb2xkX2NtYV9vYmpbaV0gPSBkcm1fZmJfY21hX2dldF9n ZW1fb2JqKG9sZF9mYiwgaSk7CisJCWlmICghb2xkX2NtYV9vYmpbaV0pIHsKKwkJCURSTV9ERUJV R19LTVMoInBsYW5lICVkIGVudHJ5IGlzIG51bGwuXG4iLCBpKTsKKwkJCXJldHVybiAtRUZBVUxU OworCQl9CisJfQorCiAJZWJhID0gY21hX29ialswXS0+cGFkZHIgKyBmYi0+b2Zmc2V0c1swXSAr CiAJICAgICAgZmItPnBpdGNoZXNbMF0gKiB5ICsgKGZiLT5iaXRzX3Blcl9waXhlbCA+PiAzKSAq IHg7CiAKQEAgLTc5LDEzICs5MSwxMSBAQCBpbnQgaXB1X3BsYW5lX3NldF9iYXNlKHN0cnVjdCBp cHVfcGxhbmUgKmlwdV9wbGFuZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCXJldHVy biAtRUlOVkFMOwogCX0KIAotCWlmIChpcHVfcGxhbmUtPmVuYWJsZWQgJiYgZmItPnBpdGNoZXNb MF0gIT0gaXB1X3BsYW5lLT5zdHJpZGVbMF0pIHsKKwlpZiAoZmItPnBpdGNoZXNbMF0gIT0gb2xk X2ZiLT5waXRjaGVzWzBdKSB7CiAJCURSTV9ERUJVR19LTVMoInBpdGNoZXMgbXVzdCBub3QgY2hh bmdlIHdoaWxlIHBsYW5lIGlzIGVuYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQog Ci0JaXB1X3BsYW5lLT5zdHJpZGVbMF0gPSBmYi0+cGl0Y2hlc1swXTsKLQogCXN3aXRjaCAoZmIt PnBpeGVsX2Zvcm1hdCkgewogCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6CiAJY2FzZSBEUk1fRk9S TUFUX1lWVTQyMDoKQEAgLTEwMiw2ICsxMTIsMTQgQEAgaW50IGlwdV9wbGFuZV9zZXRfYmFzZShz dHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAog CQl2Ym8gPSBjbWFfb2JqWzJdLT5wYWRkciArIGZiLT5vZmZzZXRzWzJdICsKIAkJICAgICAgZmIt PnBpdGNoZXNbMl0gKiB5IC8gMiArIHggLyAyIC0gZWJhOwogCisJCW9sZF9lYmEgPSBvbGRfY21h X29ialswXS0+cGFkZHIgKyBvbGRfZmItPm9mZnNldHNbMF0gKworCQkgICAgICBvbGRfZmItPnBp dGNoZXNbMF0gKiB5ICsKKwkJICAgICAgKG9sZF9mYi0+Yml0c19wZXJfcGl4ZWwgPj4gMykgKiB4 OworCQlvbGRfdWJvID0gb2xkX2NtYV9vYmpbMV0tPnBhZGRyICsgb2xkX2ZiLT5vZmZzZXRzWzFd ICsKKwkJICAgICAgb2xkX2ZiLT5waXRjaGVzWzFdICogeSAvIDIgKyB4IC8gMiAtIG9sZF9lYmE7 CisJCW9sZF92Ym8gPSBvbGRfY21hX29ialsyXS0+cGFkZHIgKyBvbGRfZmItPm9mZnNldHNbMl0g KworCQkgICAgICBvbGRfZmItPnBpdGNoZXNbMl0gKiB5IC8gMiArIHggLyAyIC0gb2xkX2ViYTsK KwogCQlpZiAoKHVibyAmIDB4NykgfHwgKHZibyAmIDB4NykpIHsKIAkJCURSTV9ERUJVR19LTVMo IlUvViBidWZmZXIgb2Zmc2V0cyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC5cbiIpOwogCQkJcmV0 dXJuIC1FSU5WQUw7CkBAIC0xMTIsOCArMTMwLDcgQEAgaW50IGlwdV9wbGFuZV9zZXRfYmFzZShz dHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAog CQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAoaXB1X3BsYW5lLT5lbmFibGVkICYmICgo aXB1X3BsYW5lLT51X29mZnNldCAhPSB1Ym8pIHx8Ci0JCQkJCSAgIChpcHVfcGxhbmUtPnZfb2Zm c2V0ICE9IHZibykpKSB7CisJCWlmIChvbGRfdWJvICE9IHVibyB8fCBvbGRfdmJvICE9IHZibykg ewogCQkJRFJNX0RFQlVHX0tNUygiVS9WIGJ1ZmZlciBvZmZzZXRzIG11c3Qgbm90IGNoYW5nZSB3 aGlsZSBwbGFuZSBpcyBlbmFibGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAt MTI4LDE2ICsxNDUsMTEgQEAgaW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5l ICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJcmV0dXJuIC1FSU5W QUw7CiAJCX0KIAotCQlpZiAoaXB1X3BsYW5lLT5lbmFibGVkICYmCi0JCSAgICAoaXB1X3BsYW5l LT5zdHJpZGVbMV0gIT0gZmItPnBpdGNoZXNbMV0pKSB7CisJCWlmIChvbGRfZmItPnBpdGNoZXNb MV0gIT0gZmItPnBpdGNoZXNbMV0pIHsKIAkJCURSTV9ERUJVR19LTVMoIlUvViBwaXRjaGVzIG11 c3Qgbm90IGNoYW5nZSB3aGlsZSBwbGFuZSBpcyBlbmFibGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJ TlZBTDsKIAkJfQogCi0JCWlwdV9wbGFuZS0+dV9vZmZzZXQgPSB1Ym87Ci0JCWlwdV9wbGFuZS0+ dl9vZmZzZXQgPSB2Ym87Ci0JCWlwdV9wbGFuZS0+c3RyaWRlWzFdID0gZmItPnBpdGNoZXNbMV07 Ci0KIAkJZGV2X2RiZyhpcHVfcGxhbmUtPmJhc2UuZGV2LT5kZXYsCiAJCQkicGh5cyA9ICVwYWQg JXBhZCAlcGFkLCB4ID0gJWQsIHkgPSAlZCIsCiAJCQkmY21hX29ialswXS0+cGFkZHIsICZjbWFf b2JqWzFdLT5wYWRkciwKQEAgLTE0OSwxNjUgKzE2MSwxMTEgQEAgaW50IGlwdV9wbGFuZV9zZXRf YmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLAogCQlicmVhazsKIAl9CiAKLQlpZiAoaXB1X3BsYW5lLT5lbmFibGVkKSB7Ci0JCWFjdGl2 ZSA9IGlwdV9pZG1hY19nZXRfY3VycmVudF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gpOwotCQlp cHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSwgZWJhKTsKLQkJ aXB1X2lkbWFjX3NlbGVjdF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsICFhY3RpdmUpOwotCX0g ZWxzZSB7Ci0JCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAwLCBlYmEp OwotCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgMSwgZWJhKTsKLQl9 Ci0KLQkvKiBjYWNoZSBvZmZzZXRzIGZvciBzdWJzZXF1ZW50IHBhZ2VmbGlwcyAqLwotCWlwdV9w bGFuZS0+eCA9IHg7Ci0JaXB1X3BsYW5lLT55ID0geTsKKwlhY3RpdmUgPSBpcHVfaWRtYWNfZ2V0 X2N1cnJlbnRfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2NoKTsKKwlpcHVfY3BtZW1fc2V0X2J1ZmZl cihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSwgZWJhKTsKKwlpcHVfaWRtYWNfc2VsZWN0X2J1 ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50 IGlwdV9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsIHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKLQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAot CQkgICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjcnRjX3gsIGludCBjcnRj X3ksCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY3J0Y193LCB1bnNpZ25lZCBpbnQgY3J0Y19oLAot CQkgICAgICAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAotCQkgICAgICAgdWludDMy X3Qgc3JjX3csIHVpbnQzMl90IHNyY19oLCBib29sIGludGVybGFjZWQpCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcKK2RybV9wbGFuZV9zdGF0ZV90b19lYmEoc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9wbGFuZSBwbGFuZSA9IGlwdV9wbGFuZS0+YmFz ZTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwbGFuZS5kZXYtPmRldjsKLQlpbnQgcmV0OworCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKmNtYV9vYmo7CiAKLQkvKiBubyBzY2FsaW5nICovCi0JaWYgKHNyY193ICE9IGNy dGNfdyB8fCBzcmNfaCAhPSBjcnRjX2gpCi0JCXJldHVybiAtRUlOVkFMOworCWNtYV9vYmogPSBk cm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKKwlCVUdfT04oIWNtYV9vYmopOwogCi0JaWYg KHBsYW5lLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewotCQkvKiBmdWxsIHBsYW5l IGRvZXNuJ3Qgc3VwcG9ydCBwYXJ0aWFsIG9mZiBzY3JlZW4gKi8KLQkJaWYgKGNydGNfeCB8fCBj cnRjX3kgfHwgY3J0Y193ICE9IG1vZGUtPmhkaXNwbGF5IHx8Ci0JCQljcnRjX2ggIT0gbW9kZS0+ dmRpc3BsYXkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY21hX29iai0+cGFkZHIgKyBm Yi0+b2Zmc2V0c1swXSArCisJICAgICAgIGZiLT5waXRjaGVzWzBdICogKHN0YXRlLT5zcmNfeSA+ PiAxNikgKworCSAgICAgICAoZmItPmJpdHNfcGVyX3BpeGVsID4+IDMpICogKHN0YXRlLT5zcmNf eCA+PiAxNik7Cit9CiAKLQkJLyogZnVsbCBwbGFuZSBtaW5pbXVtIHdpZHRoIGlzIDEzIHBpeGVs cyAqLwotCQlpZiAoY3J0Y193IDwgMTMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgaWYg KHBsYW5lLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkgewotCQkvKiBjbGlwIHRvIGNy dGMgYm91bmRzICovCi0JCWlmIChjcnRjX3ggPCAwKSB7Ci0JCQlpZiAoLWNydGNfeCA+IGNydGNf dykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXNyY194ICs9IC1jcnRjX3g7Ci0JCQlzcmNfdyAt PSAtY3J0Y194OwotCQkJY3J0Y193IC09IC1jcnRjX3g7Ci0JCQljcnRjX3ggPSAwOwotCQl9Ci0J CWlmIChjcnRjX3kgPCAwKSB7Ci0JCQlpZiAoLWNydGNfeSA+IGNydGNfaCkKLQkJCQlyZXR1cm4g LUVJTlZBTDsKLQkJCXNyY195ICs9IC1jcnRjX3k7Ci0JCQlzcmNfaCAtPSAtY3J0Y195OwotCQkJ Y3J0Y19oIC09IC1jcnRjX3k7Ci0JCQljcnRjX3kgPSAwOwotCQl9Ci0JCWlmIChjcnRjX3ggKyBj cnRjX3cgPiBtb2RlLT5oZGlzcGxheSkgewotCQkJaWYgKGNydGNfeCA+IG1vZGUtPmhkaXNwbGF5 KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJY3J0Y193ID0gbW9kZS0+aGRpc3BsYXkgLSBjcnRj X3g7Ci0JCQlzcmNfdyA9IGNydGNfdzsKLQkJfQotCQlpZiAoY3J0Y195ICsgY3J0Y19oID4gbW9k ZS0+dmRpc3BsYXkpIHsKLQkJCWlmIChjcnRjX3kgPiBtb2RlLT52ZGlzcGxheSkKLQkJCQlyZXR1 cm4gLUVJTlZBTDsKLQkJCWNydGNfaCA9IG1vZGUtPnZkaXNwbGF5IC0gY3J0Y195OwotCQkJc3Jj X2ggPSBjcnRjX2g7Ci0JCX0KLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNydGNf aCA8IDIpCi0JCXJldHVybiAtRUlOVkFMOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitk cm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQorewor CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fZ2Vt X2NtYV9vYmplY3QgKmNtYV9vYmo7CisJdW5zaWduZWQgbG9uZyBlYmEgPSBkcm1fcGxhbmVfc3Rh dGVfdG9fZWJhKHN0YXRlKTsKIAotCS8qCi0JICogc2luY2Ugd2UgY2Fubm90IHRvdWNoIGFjdGl2 ZSBJRE1BQyBjaGFubmVscywgd2UgZG8gbm90IHN1cHBvcnQKLQkgKiByZXNpemluZyB0aGUgZW5h YmxlZCBwbGFuZSBvciBjaGFuZ2luZyBpdHMgZm9ybWF0Ci0JICovCi0JaWYgKGlwdV9wbGFuZS0+ ZW5hYmxlZCkgewotCQlpZiAoc3JjX3cgIT0gaXB1X3BsYW5lLT53IHx8IHNyY19oICE9IGlwdV9w bGFuZS0+aCB8fAotCQkgICAgZmItPnBpeGVsX2Zvcm1hdCAhPSBwbGFuZS5mYi0+cGl4ZWxfZm9y bWF0KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJY21hX29iaiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9v YmooZmIsIDEpOworCUJVR19PTighY21hX29iaik7CiAKLQkJcmV0dXJuIGlwdV9wbGFuZV9zZXRf YmFzZShpcHVfcGxhbmUsIGZiLCBzcmNfeCwgc3JjX3kpOwotCX0KKwlyZXR1cm4gY21hX29iai0+ cGFkZHIgKyBmYi0+b2Zmc2V0c1sxXSArCisJICAgICAgIGZiLT5waXRjaGVzWzFdICogKHN0YXRl LT5zcmNfeSA+PiAxNikgLyAyICsKKwkgICAgICAgKHN0YXRlLT5zcmNfeCA+PiAxNikgLyAyIC0g ZWJhOworfQogCi0Jc3dpdGNoIChpcHVfcGxhbmUtPmRwX2Zsb3cpIHsKLQljYXNlIElQVV9EUF9G TE9XX1NZTkNfQkc6Ci0JCXJldCA9IGlwdV9kcF9zZXR1cF9jaGFubmVsKGlwdV9wbGFuZS0+ZHAs Ci0JCQkJSVBVVjNfQ09MT1JTUEFDRV9SR0IsCi0JCQkJSVBVVjNfQ09MT1JTUEFDRV9SR0IpOwot CQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKGRldiwKLQkJCQkiaW5pdGlhbGl6aW5nIGRpc3BsYXkg cHJvY2Vzc29yIGZhaWxlZCB3aXRoICVkXG4iLAotCQkJCXJldCk7Ci0JCQlyZXR1cm4gcmV0Owot CQl9Ci0JCWlwdV9kcF9zZXRfZ2xvYmFsX2FscGhhKGlwdV9wbGFuZS0+ZHAsIHRydWUsIDAsIHRy dWUpOwotCQlicmVhazsKLQljYXNlIElQVV9EUF9GTE9XX1NZTkNfRkc6Ci0JCWlwdV9kcF9zZXR1 cF9jaGFubmVsKGlwdV9wbGFuZS0+ZHAsCi0JCQkJaXB1X2RybV9mb3VyY2NfdG9fY29sb3JzcGFj ZShmYi0+cGl4ZWxfZm9ybWF0KSwKLQkJCQlJUFVWM19DT0xPUlNQQUNFX1VOS05PV04pOwotCQlp cHVfZHBfc2V0X3dpbmRvd19wb3MoaXB1X3BsYW5lLT5kcCwgY3J0Y194LCBjcnRjX3kpOwotCQkv KiBFbmFibGUgbG9jYWwgYWxwaGEgb24gcGFydGlhbCBwbGFuZSAqLwotCQlzd2l0Y2ggKGZiLT5w aXhlbF9mb3JtYXQpIHsKLQkJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgotCQljYXNlIERSTV9G T1JNQVRfQUJHUjE1NTU6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKLQkJY2FzZSBEUk1f Rk9STUFUX0JHUkE1NTUxOgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6Ci0JCWNhc2UgRFJN X0ZPUk1BVF9BUkdCODg4ODoKLQkJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQljYXNlIERS TV9GT1JNQVRfUkdCQTg4ODg6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKLQkJCWlwdV9k cF9zZXRfZ2xvYmFsX2FscGhhKGlwdV9wbGFuZS0+ZHAsIGZhbHNlLCAwLCBmYWxzZSk7Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZHJtX3BsYW5l X3N0YXRlX3RvX3ZibyhzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2Jq ZWN0ICpjbWFfb2JqOworCXVuc2lnbmVkIGxvbmcgZWJhID0gZHJtX3BsYW5lX3N0YXRlX3RvX2Vi YShzdGF0ZSk7CisKKwljbWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMik7CisJ QlVHX09OKCFjbWFfb2JqKTsKKworCXJldHVybiBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRz WzJdICsKKwkgICAgICAgZmItPnBpdGNoZXNbMl0gKiAoc3RhdGUtPnNyY195ID4+IDE2KSAvIDIg KworCSAgICAgICAoc3RhdGUtPnNyY194ID4+IDE2KSAvIDIgLSBlYmE7Cit9CisKK3ZvaWQgaXB1 X3BsYW5lX2F0b21pY19zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUsCisJCQkg ICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lID0gJmlwdV9wbGFuZS0+YmFzZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0 YXRlLT5mYjsKKwl1bnNpZ25lZCBsb25nIGViYSwgdWJvLCB2Ym87CisJaW50IGFjdGl2ZTsKKwor CWViYSA9IGRybV9wbGFuZV9zdGF0ZV90b19lYmEoc3RhdGUpOworCisJc3dpdGNoIChmYi0+cGl4 ZWxfZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwljYXNlIERSTV9GT1JNQVRf WVZVNDIwOgorCQlpZiAob2xkX3N0YXRlLT5mYikKIAkJCWJyZWFrOwotCQl9Ci0JfQogCi0JaXB1 X2RtZmNfY29uZmlnX3dhaXQ0ZW90KGlwdV9wbGFuZS0+ZG1mYywgY3J0Y193KTsKKwkJLyoKKwkJ ICogTXVsdGlwbGFuYXIgZm9ybWF0cyBoYXZlIHRvIG1lZXQgdGhlIGZvbGxvd2luZyByZXN0cmlj dGlvbnM6CisJCSAqIC0gVGhlICh1cCB0bykgdGhyZWUgcGxhbmUgYWRkcmVzc2VzIGFyZSBFQkEs IEVCQStVQk8sIEVCQStWQk8KKwkJICogLSBFQkEsIFVCTyBhbmQgVkJPIGFyZSBhIG11bHRpcGxl IG9mIDgKKwkJICogLSBVQk8gYW5kIFZCTyBhcmUgdW5zaWduZWQgYW5kIG5vdCBsYXJnZXIgdGhh biAweGZmZmZmOAorCQkgKiAtIE9ubHkgRUJBIG1heSBiZSBjaGFuZ2VkIHdoaWxlIHNjYW5vdXQg aXMgYWN0aXZlCisJCSAqIC0gVGhlIHN0cmlkZXMgb2YgVSBhbmQgViBwbGFuZXMgbXVzdCBiZSBp ZGVudGljYWwuCisJCSAqLworCQl1Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdWJvKHN0YXRlKTsK KwkJdmJvID0gZHJtX3BsYW5lX3N0YXRlX3RvX3ZibyhzdGF0ZSk7CiAKLQlpcHVfY3BtZW1femVy byhpcHVfcGxhbmUtPmlwdV9jaCk7Ci0JaXB1X2NwbWVtX3NldF9yZXNvbHV0aW9uKGlwdV9wbGFu ZS0+aXB1X2NoLCBzcmNfdywgc3JjX2gpOwotCXJldCA9IGlwdV9jcG1lbV9zZXRfZm10KGlwdV9w bGFuZS0+aXB1X2NoLCBmYi0+cGl4ZWxfZm9ybWF0KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZf ZXJyKGRldiwgInVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAweCUwOHhcbiIsCi0JCQlmYi0+cGl4 ZWxfZm9ybWF0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaXB1X2NwbWVtX3NldF9oaWdoX3ByaW9y aXR5KGlwdV9wbGFuZS0+aXB1X2NoKTsKLQlpcHVfaWRtYWNfc2V0X2RvdWJsZV9idWZmZXIoaXB1 X3BsYW5lLT5pcHVfY2gsIDEpOwotCWlwdV9jcG1lbV9zZXRfc3RyaWRlKGlwdV9wbGFuZS0+aXB1 X2NoLCBmYi0+cGl0Y2hlc1swXSk7CisJCWlmIChmYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JN QVRfWVVWNDIwKQorCQkJaXB1X2NwbWVtX3NldF95dXZfcGxhbmFyX2Z1bGwoaXB1X3BsYW5lLT5p cHVfY2gsCisJCQkJCQkgICAgICBmYi0+cGl0Y2hlc1sxXSwgdWJvLCB2Ym8pOworCQllbHNlCisJ CQlpcHVfY3BtZW1fc2V0X3l1dl9wbGFuYXJfZnVsbChpcHVfcGxhbmUtPmlwdV9jaCwKKwkJCQkJ CSAgICAgIGZiLT5waXRjaGVzWzFdLCB2Ym8sIHVibyk7CiAKLQlyZXQgPSBpcHVfcGxhbmVfc2V0 X2Jhc2UoaXB1X3BsYW5lLCBmYiwgc3JjX3gsIHNyY195KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0 dXJuIHJldDsKLQlpZiAoaW50ZXJsYWNlZCkKLQkJaXB1X2NwbWVtX2ludGVybGFjZWRfc2Nhbihp cHVfcGxhbmUtPmlwdV9jaCwgZmItPnBpdGNoZXNbMF0pOwotCi0JaWYgKGZiLT5waXhlbF9mb3Jt YXQgPT0gRFJNX0ZPUk1BVF9ZVVY0MjApIHsKLQkJaXB1X2NwbWVtX3NldF95dXZfcGxhbmFyX2Z1 bGwoaXB1X3BsYW5lLT5pcHVfY2gsCi0JCQkJCSAgICAgIGlwdV9wbGFuZS0+c3RyaWRlWzFdLAot CQkJCQkgICAgICBpcHVfcGxhbmUtPnVfb2Zmc2V0LAotCQkJCQkgICAgICBpcHVfcGxhbmUtPnZf b2Zmc2V0KTsKLQl9IGVsc2UgaWYgKGZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9ZVlU0 MjApIHsKLQkJaXB1X2NwbWVtX3NldF95dXZfcGxhbmFyX2Z1bGwoaXB1X3BsYW5lLT5pcHVfY2gs Ci0JCQkJCSAgICAgIGlwdV9wbGFuZS0+c3RyaWRlWzFdLAotCQkJCQkgICAgICBpcHVfcGxhbmUt PnZfb2Zmc2V0LAotCQkJCQkgICAgICBpcHVfcGxhbmUtPnVfb2Zmc2V0KTsKLQl9CisJCWRldl9k YmcoaXB1X3BsYW5lLT5iYXNlLmRldi0+ZGV2LAorCQkJInBoeSA9ICVsdSAlbHUgJWx1LCB4ID0g JWQsIHkgPSAlZCIsIGViYSwgdWJvLCB2Ym8sCisJCQlzdGF0ZS0+c3JjX3ggPj4gMTYsIHN0YXRl LT5zcmNfeSA+PiAxNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoaXB1X3BsYW5l LT5iYXNlLmRldi0+ZGV2LCAicGh5cyA9ICVsdSwgeCA9ICVkLCB5ID0gJWQiLAorCQkJZWJhLCBz dGF0ZS0+c3JjX3ggPj4gMTYsIHN0YXRlLT5zcmNfeSA+PiAxNik7CiAKLQlpcHVfcGxhbmUtPncg PSBzcmNfdzsKLQlpcHVfcGxhbmUtPmggPSBzcmNfaDsKKwkJYnJlYWs7CisJfQogCi0JcmV0dXJu IDA7CisJaWYgKG9sZF9zdGF0ZS0+ZmIpIHsKKwkJYWN0aXZlID0gaXB1X2lkbWFjX2dldF9jdXJy ZW50X2J1ZmZlcihpcHVfcGxhbmUtPmlwdV9jaCk7CisJCWlwdV9jcG1lbV9zZXRfYnVmZmVyKGlw dV9wbGFuZS0+aXB1X2NoLCAhYWN0aXZlLCBlYmEpOworCQlpcHVfaWRtYWNfc2VsZWN0X2J1ZmZl cihpcHVfcGxhbmUtPmlwdV9jaCwgIWFjdGl2ZSk7CisJfSBlbHNlIHsKKwkJaXB1X2NwbWVtX3Nl dF9idWZmZXIoaXB1X3BsYW5lLT5pcHVfY2gsIDAsIGViYSk7CisJCWlwdV9jcG1lbV9zZXRfYnVm ZmVyKGlwdV9wbGFuZS0+aXB1X2NoLCAxLCBlYmEpOworCX0KIH0KIAogdm9pZCBpcHVfcGxhbmVf cHV0X3Jlc291cmNlcyhzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUpCkBAIC0zNjIsMTQgKzMy MCwxMCBAQCB2b2lkIGlwdV9wbGFuZV9lbmFibGUoc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5l KQogCWlwdV9pZG1hY19lbmFibGVfY2hhbm5lbChpcHVfcGxhbmUtPmlwdV9jaCk7CiAJaWYgKGlw dV9wbGFuZS0+ZHApCiAJCWlwdV9kcF9lbmFibGVfY2hhbm5lbChpcHVfcGxhbmUtPmRwKTsKLQot CWlwdV9wbGFuZS0+ZW5hYmxlZCA9IHRydWU7CiB9CiAKIHZvaWQgaXB1X3BsYW5lX2Rpc2FibGUo c3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lKQogewotCWlwdV9wbGFuZS0+ZW5hYmxlZCA9IGZh bHNlOwotCiAJaXB1X2lkbWFjX3dhaXRfYnVzeShpcHVfcGxhbmUtPmlwdV9jaCwgNTApOwogCiAJ aWYgKGlwdV9wbGFuZS0+ZHApCkBAIC0zODAsNTMgKzMzNCwxMyBAQCB2b2lkIGlwdV9wbGFuZV9k aXNhYmxlKHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSkKIAkJaXB1X2RwX2Rpc2FibGUoaXB1 X3BsYW5lLT5pcHUpOwogfQogCi0vKgotICogZHJtX3BsYW5lIEFQSQotICovCi0KLXN0YXRpYyBp bnQgaXB1X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9j cnRjICpjcnRjLAotCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY3J0Y194 LCBpbnQgY3J0Y195LAotCQkJICAgIHVuc2lnbmVkIGludCBjcnRjX3csIHVuc2lnbmVkIGludCBj cnRjX2gsCi0JCQkgICAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAotCQkJICAgIHVp bnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCkKLXsKLQlzdHJ1Y3QgaXB1X3BsYW5lICppcHVf cGxhbmUgPSB0b19pcHVfcGxhbmUocGxhbmUpOwotCWludCByZXQgPSAwOwotCi0JRFJNX0RFQlVH X0tNUygicGxhbmUgLSAlcFxuIiwgcGxhbmUpOwotCi0JaWYgKCFpcHVfcGxhbmUtPmVuYWJsZWQp Ci0JCXJldCA9IGlwdV9wbGFuZV9nZXRfcmVzb3VyY2VzKGlwdV9wbGFuZSk7Ci0JaWYgKHJldCA8 IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpcHVfcGxhbmVfbW9kZV9zZXQoaXB1X3BsYW5l LCBjcnRjLCAmY3J0Yy0+aHdtb2RlLCBmYiwKLQkJCWNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNy dGNfaCwKLQkJCXNyY194ID4+IDE2LCBzcmNfeSA+PiAxNiwgc3JjX3cgPj4gMTYsIHNyY19oID4+ IDE2LAotCQkJZmFsc2UpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWlwdV9wbGFuZV9wdXRfcmVzb3Vy Y2VzKGlwdV9wbGFuZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGNydGMgIT0gcGxhbmUt PmNydGMpCi0JCWRldl9kYmcocGxhbmUtPmRldi0+ZGV2LCAiY3J0YyBjaGFuZ2U6ICVwIC0+ICVw XG4iLAotCQkJCXBsYW5lLT5jcnRjLCBjcnRjKTsKLQotCWlmICghaXB1X3BsYW5lLT5lbmFibGVk KQotCQlpcHVfcGxhbmVfZW5hYmxlKGlwdV9wbGFuZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3Rh dGljIGludCBpcHVfZGlzYWJsZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIHsKIAlz dHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmUgPSB0b19pcHVfcGxhbmUocGxhbmUpOwogCiAJRFJN X0RFQlVHX0tNUygiWyVkXSAlc1xuIiwgX19MSU5FX18sIF9fZnVuY19fKTsKIAotCWlmIChpcHVf cGxhbmUtPmVuYWJsZWQpCi0JCWlwdV9wbGFuZV9kaXNhYmxlKGlwdV9wbGFuZSk7CisJaXB1X3Bs YW5lX2Rpc2FibGUoaXB1X3BsYW5lKTsKIAogCWlwdV9wbGFuZV9wdXRfcmVzb3VyY2VzKGlwdV9w bGFuZSk7CiAKQEAgLTQ0NSwxMSArMzU5LDIwMyBAQCBzdGF0aWMgdm9pZCBpcHVfcGxhbmVfZGVz dHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgaXB1X3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUJPSBpcHVf dXBkYXRlX3BsYW5lLAotCS5kaXNhYmxlX3BsYW5lCT0gaXB1X2Rpc2FibGVfcGxhbmUsCisJLnVw ZGF0ZV9wbGFuZQk9IGRybV9wbGFuZV9oZWxwZXJfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lCT0g ZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlLAogCS5kZXN0cm95CT0gaXB1X3BsYW5lX2Rlc3Ryb3ks CiB9OwogCitzdGF0aWMgaW50IGlwdV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBsYW5lLT5k ZXYtPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiID0gb2xk X3N0YXRlLT5mYjsKKwl1bnNpZ25lZCBsb25nIGViYSwgdWJvLCB2Ym8sIG9sZF91Ym8sIG9sZF92 Ym87CisKKwkvKiBPayB0byBkaXNhYmxlICovCisJaWYgKCFmYikKKwkJcmV0dXJuIG9sZF9mYiA/ IDAgOiAtRUlOVkFMOworCisJLyogQ1JUQyBzaG91bGQgYmUgZW5hYmxlZCAqLworCWRybV9mb3Jf ZWFjaF9jcnRjKGNydGMsIHBsYW5lLT5kZXYpIHsKKwkJaWYgKGRybV9jcnRjX21hc2soY3J0Yykg PT0gcGxhbmUtPnBvc3NpYmxlX2NydGNzKSB7CisJCQlpZiAoIWNydGMtPmVuYWJsZWQpCisJCQkJ cmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG5vIHNjYWxpbmcgKi8K KwlpZiAoc3RhdGUtPnNyY193ID4+IDE2ICE9IHN0YXRlLT5jcnRjX3cgfHwKKwkgICAgc3RhdGUt PnNyY19oID4+IDE2ICE9IHN0YXRlLT5jcnRjX2gpCisJCXJldHVybiAtRUlOVkFMOworCisJY3J0 Y19zdGF0ZSA9IHN0YXRlLT5jcnRjLT5zdGF0ZTsKKworCXN3aXRjaCAocGxhbmUtPnR5cGUpIHsK KwljYXNlIERSTV9QTEFORV9UWVBFX1BSSU1BUlk6CisJCS8qIGZ1bGwgcGxhbmUgZG9lc24ndCBz dXBwb3J0IHBhcnRpYWwgb2ZmIHNjcmVlbiAqLworCQlpZiAoc3RhdGUtPmNydGNfeCB8fCBzdGF0 ZS0+Y3J0Y195IHx8CisJCSAgICBzdGF0ZS0+Y3J0Y193ICE9IGNydGNfc3RhdGUtPmFkanVzdGVk X21vZGUuaGRpc3BsYXkgfHwKKwkJICAgIHN0YXRlLT5jcnRjX2ggIT0gY3J0Y19zdGF0ZS0+YWRq dXN0ZWRfbW9kZS52ZGlzcGxheSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIGZ1bGwgcGxh bmUgbWluaW11bSB3aWR0aCBpcyAxMyBwaXhlbHMgKi8KKwkJaWYgKHN0YXRlLT5jcnRjX3cgPCAx MykKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIERSTV9QTEFORV9UWVBFX09W RVJMQVk6CisJCWlmIChzdGF0ZS0+Y3J0Y194IDwgMCB8fCBzdGF0ZS0+Y3J0Y195IDwgMCkKKwkJ CXJldHVybiAtRUlOVkFMOworCisJCWlmIChzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdyA+ CisJCSAgICBjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5KQorCQkJcmV0dXJuIC1F SU5WQUw7CisJCWlmIChzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCA+CisJCSAgICBjcnRj X3N0YXRlLT5hZGp1c3RlZF9tb2RlLnZkaXNwbGF5KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGRldiwgIlVuc3VwcG9ydGVkIHBsYW5lIHR5cGVc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RhdGUtPmNydGNfaCA8IDIpCisJ CXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBzaW5jZSB3ZSBjYW5ub3QgdG91Y2ggYWN0aXZl IElETUFDIGNoYW5uZWxzLCB3ZSBkbyBub3Qgc3VwcG9ydAorCSAqIHJlc2l6aW5nIHRoZSBlbmFi bGVkIHBsYW5lIG9yIGNoYW5naW5nIGl0cyBmb3JtYXQKKwkgKi8KKwlpZiAob2xkX2ZiICYmIChz dGF0ZS0+c3JjX3cgIT0gb2xkX3N0YXRlLT5zcmNfdyB8fAorCQkJICAgICAgc3RhdGUtPnNyY19o ICE9IG9sZF9zdGF0ZS0+c3JjX2ggfHwKKwkJCSAgICAgIGZiLT5waXhlbF9mb3JtYXQgIT0gb2xk X2ZiLT5waXhlbF9mb3JtYXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWViYSA9IGRybV9wbGFu ZV9zdGF0ZV90b19lYmEoc3RhdGUpOworCisJaWYgKGViYSAmIDB4NykKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlpZiAoZmItPnBpdGNoZXNbMF0gPCAxIHx8IGZiLT5waXRjaGVzWzBdID4gMTYzODQp CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9sZF9mYiAmJiBmYi0+cGl0Y2hlc1swXSAhPSBv bGRfZmItPnBpdGNoZXNbMF0pCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChmYi0+cGl4 ZWxfZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwljYXNlIERSTV9GT1JNQVRf WVZVNDIwOgorCQkvKgorCQkgKiBNdWx0aXBsYW5hciBmb3JtYXRzIGhhdmUgdG8gbWVldCB0aGUg Zm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKwkJICogLSBUaGUgKHVwIHRvKSB0aHJlZSBwbGFuZSBh ZGRyZXNzZXMgYXJlIEVCQSwgRUJBK1VCTywgRUJBK1ZCTworCQkgKiAtIEVCQSwgVUJPIGFuZCBW Qk8gYXJlIGEgbXVsdGlwbGUgb2YgOAorCQkgKiAtIFVCTyBhbmQgVkJPIGFyZSB1bnNpZ25lZCBh bmQgbm90IGxhcmdlciB0aGFuIDB4ZmZmZmY4CisJCSAqIC0gT25seSBFQkEgbWF5IGJlIGNoYW5n ZWQgd2hpbGUgc2Nhbm91dCBpcyBhY3RpdmUKKwkJICogLSBUaGUgc3RyaWRlcyBvZiBVIGFuZCBW IHBsYW5lcyBtdXN0IGJlIGlkZW50aWNhbC4KKwkJICovCisJCXVibyA9IGRybV9wbGFuZV9zdGF0 ZV90b191Ym8oc3RhdGUpOworCQl2Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdmJvKHN0YXRlKTsK KworCQlpZiAoKHVibyAmIDB4NykgfHwgKHZibyAmIDB4NykpCisJCQlyZXR1cm4gLUVJTlZBTDsK KworCQlpZiAoKHVibyA+IDB4ZmZmZmY4KSB8fCAodmJvID4gMHhmZmZmZjgpKQorCQkJcmV0dXJu IC1FSU5WQUw7CisKKwkJaWYgKG9sZF9mYikgeworCQkJb2xkX3VibyA9IGRybV9wbGFuZV9zdGF0 ZV90b191Ym8ob2xkX3N0YXRlKTsKKwkJCW9sZF92Ym8gPSBkcm1fcGxhbmVfc3RhdGVfdG9fdmJv KG9sZF9zdGF0ZSk7CisJCQlpZiAodWJvICE9IG9sZF91Ym8gfHwgdmJvICE9IG9sZF92Ym8pCisJ CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoZmItPnBpdGNoZXNbMV0gIT0gZmItPnBp dGNoZXNbMl0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZmItPnBpdGNoZXNbMV0gPCAx IHx8IGZiLT5waXRjaGVzWzFdID4gMTYzODQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAo b2xkX2ZiICYmIG9sZF9mYi0+cGl0Y2hlc1sxXSAhPSBmYi0+cGl0Y2hlc1sxXSkKKwkJCXJldHVy biAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcHVfcGxhbmVf YXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJaXB1X2Rpc2FibGVfcGxhbmUocGxhbmUp OworfQorCitzdGF0aWMgdm9pZCBpcHVfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQor eworCXN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZSA9IHRvX2lwdV9wbGFuZShwbGFuZSk7CisJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJZW51bSBpcHVf Y29sb3Jfc3BhY2UgaWNzOworCisJaWYgKG9sZF9zdGF0ZS0+ZmIpIHsKKwkJaXB1X3BsYW5lX2F0 b21pY19zZXRfYmFzZShpcHVfcGxhbmUsIG9sZF9zdGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlp cHVfcGxhbmVfZ2V0X3Jlc291cmNlcyhpcHVfcGxhbmUpOworCisJc3dpdGNoIChpcHVfcGxhbmUt PmRwX2Zsb3cpIHsKKwljYXNlIElQVV9EUF9GTE9XX1NZTkNfQkc6CisJCWlwdV9kcF9zZXR1cF9j aGFubmVsKGlwdV9wbGFuZS0+ZHAsCisJCQkJCUlQVVYzX0NPTE9SU1BBQ0VfUkdCLAorCQkJCQlJ UFVWM19DT0xPUlNQQUNFX1JHQik7CisJCWlwdV9kcF9zZXRfZ2xvYmFsX2FscGhhKGlwdV9wbGFu ZS0+ZHAsIHRydWUsIDAsIHRydWUpOworCQlicmVhazsKKwljYXNlIElQVV9EUF9GTE9XX1NZTkNf Rkc6CisJCWljcyA9IGlwdV9kcm1fZm91cmNjX3RvX2NvbG9yc3BhY2Uoc3RhdGUtPmZiLT5waXhl bF9mb3JtYXQpOworCQlpcHVfZHBfc2V0dXBfY2hhbm5lbChpcHVfcGxhbmUtPmRwLCBpY3MsCisJ CQkJCUlQVVYzX0NPTE9SU1BBQ0VfVU5LTk9XTik7CisJCWlwdV9kcF9zZXRfd2luZG93X3Bvcyhp cHVfcGxhbmUtPmRwLCBzdGF0ZS0+Y3J0Y194LAorCQkJCQlzdGF0ZS0+Y3J0Y195KTsKKwkJLyog RW5hYmxlIGxvY2FsIGFscGhhIG9uIHBhcnRpYWwgcGxhbmUgKi8KKwkJc3dpdGNoIChzdGF0ZS0+ ZmItPnBpeGVsX2Zvcm1hdCkgeworCQljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6CisJCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSMTU1NToKKwkJY2FzZSBEUk1fRk9STUFUX1JHQkE1NTUxOgorCQljYXNl IERSTV9GT1JNQVRfQkdSQTU1NTE6CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKKwkJY2Fz ZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWNh c2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCQkJ aXB1X2RwX3NldF9nbG9iYWxfYWxwaGEoaXB1X3BsYW5lLT5kcCwgZmFsc2UsIDAsIGZhbHNlKTsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpcHVfZG1mY19j b25maWdfd2FpdDRlb3QoaXB1X3BsYW5lLT5kbWZjLCBzdGF0ZS0+Y3J0Y193KTsKKworCWlwdV9j cG1lbV96ZXJvKGlwdV9wbGFuZS0+aXB1X2NoKTsKKwlpcHVfY3BtZW1fc2V0X3Jlc29sdXRpb24o aXB1X3BsYW5lLT5pcHVfY2gsIHN0YXRlLT5zcmNfdyA+PiAxNiwKKwkJCQkJc3RhdGUtPnNyY19o ID4+IDE2KTsKKwlpcHVfY3BtZW1fc2V0X2ZtdChpcHVfcGxhbmUtPmlwdV9jaCwgc3RhdGUtPmZi LT5waXhlbF9mb3JtYXQpOworCWlwdV9jcG1lbV9zZXRfaGlnaF9wcmlvcml0eShpcHVfcGxhbmUt PmlwdV9jaCk7CisJaXB1X2lkbWFjX3NldF9kb3VibGVfYnVmZmVyKGlwdV9wbGFuZS0+aXB1X2No LCAxKTsKKwlpcHVfY3BtZW1fc2V0X3N0cmlkZShpcHVfcGxhbmUtPmlwdV9jaCwgc3RhdGUtPmZi LT5waXRjaGVzWzBdKTsKKwlpcHVfcGxhbmVfYXRvbWljX3NldF9iYXNlKGlwdV9wbGFuZSwgb2xk X3N0YXRlKTsKKwlpcHVfcGxhbmVfZW5hYmxlKGlwdV9wbGFuZSk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBpcHVfcGxhbmVfaGVscGVyX2Z1bmNzID0g eworCS5hdG9taWNfY2hlY2sgPSBpcHVfcGxhbmVfYXRvbWljX2NoZWNrLAorCS5hdG9taWNfZGlz YWJsZSA9IGlwdV9wbGFuZV9hdG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX3VwZGF0ZSA9IGlwdV9w bGFuZV9hdG9taWNfdXBkYXRlLAorfTsKKwogc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGlwdV9zb2MgKmlwdSwKIAkJCQkgaW50 IGRtYSwgaW50IGRwLCB1bnNpZ25lZCBpbnQgcG9zc2libGVfY3J0Y3MsCiAJCQkJIGVudW0gZHJt X3BsYW5lX3R5cGUgdHlwZSkKQEAgLTQ4MCw1ICs1ODYsNyBAQCBzdHJ1Y3QgaXB1X3BsYW5lICpp cHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaXB1X3NvYyAqaXB1 LAogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAorCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZp cHVfcGxhbmUtPmJhc2UsICZpcHVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwogCXJldHVybiBpcHVf cGxhbmU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmgKaW5kZXggNDQ0OGZkNC4uMjZiOWM1 OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuaApAQCAtMjMsMTcgKzIzLDYgQEAgc3RydWN0 IGlwdV9wbGFuZSB7CiAKIAlpbnQJCQlkbWE7CiAJaW50CQkJZHBfZmxvdzsKLQotCWludAkJCXg7 Ci0JaW50CQkJeTsKLQlpbnQJCQl3OwotCWludAkJCWg7Ci0KLQl1bnNpZ25lZCBpbnQJCXVfb2Zm c2V0OwotCXVuc2lnbmVkIGludAkJdl9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50CQlzdHJpZGVbMl07 Ci0KLQlib29sCQkJZW5hYmxlZDsKIH07CiAKIHN0cnVjdCBpcHVfcGxhbmUgKmlwdV9wbGFuZV9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpcHVfc29jICppcHUsCkBAIC01MCw4 ICszOSw3IEBAIGludCBpcHVfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUs IHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogdm9pZCBpcHVfcGxhbmVfZW5hYmxlKHN0cnVjdCBp cHVfcGxhbmUgKnBsYW5lKTsKIHZvaWQgaXB1X3BsYW5lX2Rpc2FibGUoc3RydWN0IGlwdV9wbGFu ZSAqcGxhbmUpOwotaW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICpwbGFu ZSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCSAgICAgICBpbnQgeCwgaW50IHkpOwor aW50IGlwdV9wbGFuZV9zZXRfYmFzZShzdHJ1Y3QgaXB1X3BsYW5lICpwbGFuZSwgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpOwogCiBpbnQgaXB1X3BsYW5lX2dldF9yZXNvdXJjZXMoc3RydWN0 IGlwdV9wbGFuZSAqcGxhbmUpOwogdm9pZCBpcHVfcGxhbmVfcHV0X3Jlc291cmNlcyhzdHJ1Y3Qg aXB1X3BsYW5lICpwbGFuZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRj LmMgYi9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWRjLmMKaW5kZXggMmYyOTc4MC4uY2Q3MmRhZCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1kYy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2lwdS12My9pcHUtZGMuYwpAQCAtMTc4LDEwICsxNzgsNyBAQCBpbnQgaXB1X2RjX2luaXRfc3lu YyhzdHJ1Y3QgaXB1X2RjICpkYywgc3RydWN0IGlwdV9kaSAqZGksIGJvb2wgaW50ZXJsYWNlZCwK IAlkYy0+ZGkgPSBpcHVfZGlfZ2V0X251bShkaSk7CiAKIAltYXAgPSBpcHVfYnVzX2Zvcm1hdF90 b19tYXAoYnVzX2Zvcm1hdCk7Ci0JaWYgKG1hcCA8IDApIHsKLQkJZGV2X2RiZyhwcml2LT5kZXYs ICJJUFVfRElTUDogTm8gTUFQXG4iKTsKLQkJcmV0dXJuIG1hcDsKLQl9CisJQlVHX09OKG1hcCA8 IDApOwogCiAJLyoKIAkgKiBJbiBpbnRlcmxhY2VkIG1vZGUgd2UgbmVlZCBtb3JlIGNvdW50ZXJz IHRvIGNyZWF0ZSB0aGUgYXN5bW1ldHJpYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaXB1LXYz L2lwdS1kaS5jIGIvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1kaS5jCmluZGV4IDM1OTI2OGUuLmE4 ZDg3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtZGkuYworKysgYi9kcml2 ZXJzL2dwdS9pcHUtdjMvaXB1LWRpLmMKQEAgLTU3Miw5ICs1NzIsNiBAQCBpbnQgaXB1X2RpX2lu aXRfc3luY19wYW5lbChzdHJ1Y3QgaXB1X2RpICpkaSwgc3RydWN0IGlwdV9kaV9zaWduYWxfY2Zn ICpzaWcpCiAJZGV2X2RiZyhkaS0+aXB1LT5kZXYsICJkaXNwICVkOiBwYW5lbCBzaXplID0gJWQg eCAlZFxuIiwKIAkJZGktPmlkLCBzaWctPm1vZGUuaGFjdGl2ZSwgc2lnLT5tb2RlLnZhY3RpdmUp OwogCi0JaWYgKChzaWctPm1vZGUudnN5bmNfbGVuID09IDApIHx8IChzaWctPm1vZGUuaHN5bmNf bGVuID09IDApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWRldl9kYmcoZGktPmlwdS0+ZGV2LCAi Q2xvY2tzOiBJUFUgJWx1SHogREkgJWx1SHogTmVlZGVkICVsdUh6XG4iLAogCQljbGtfZ2V0X3Jh dGUoZGktPmNsa19pcHUpLAogCQljbGtfZ2V0X3JhdGUoZGktPmNsa19kaSksCi0tIAoyLjcuNAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==