From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH 3/5] drm/vc4: Use drm_atomic_helper_check_plane_state() to simplify the logic Date: Wed, 25 Jul 2018 17:32:07 +0200 Message-ID: <20180725153209.14366-4-boris.brezillon@bootlin.com> References: <20180725153209.14366-1-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 95F696E3AF for ; Wed, 25 Jul 2018 15:32:44 +0000 (UTC) In-Reply-To: <20180725153209.14366-1-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: David Airlie , Boris Brezillon , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KCmRybV9hdG9taWNfaGVscGVyX2No ZWNrX3BsYW5lX3N0YXRlKCkgdGFrZXMgY2FyZSBvZiBjaGVja2luZyB0aGUKc2NhbGluZyBjYXBh YmlsaXRpZXMgYW5kIGNhbGN1bGF0aW5nIHRoZSBjbGlwcGVkIFgvWSBvZmZzZXRzIGZvciB1cy4K ClJlbHkgb24gdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIG9wZW4tY29kaW5nIHRoZSBsb2dpYy4g V2hpbGUgYXQgaXQsIHdlCmdldCByaWQgb2YgYSBmZXcgZmllbGRzIGluIHZjNF9wbGFuZV9zdGF0 ZSB0aGF0IGNhbiBiZSBlYXNpbHkgZXh0cmFjdGVkCmZyb20gZHJtX3BsYW5lX3N0YXRlLgoKSW5j aWRlbnRhbGx5LCBpdCBzZWVtcyB0byBmaXggYSBwcm9ibGVtIHdlIGhhZCB3aXRoIG5lZ2F0aXZl IFgvWQpwb3NpdGlvbmluZyBvZiBZVVYgcGxhbmVzLgoKU2lnbmVkLW9mZi1ieTogRXJpYyBBbmhv bHQgPGVyaWNAYW5ob2x0Lm5ldD4KU2lnbmVkLW9mZi1ieTogQm9yaXMgQnJlemlsbG9uIDxib3Jp cy5icmV6aWxsb25AYm9vdGxpbi5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2 LmggICB8ICAgOSAtLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYyB8IDIxMCArKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDEx MSBpbnNlcnRpb25zKCspLCAxMDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAppbmRl eCBiZDZlZjFmMzE4MjIuLmVhZTc4MTc4MzdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKQEAgLTM0 NCwxNyArMzQ0LDggQEAgc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSB7CiAJICovCiAJdTMyIF9faW9t ZW0gKmh3X2RsaXN0OwogCi0JLyogQ2xpcHBlZCBjb29yZGluYXRlcyBvZiB0aGUgcGxhbmUgb24g dGhlIGRpc3BsYXkuICovCi0JaW50IGNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNydGNfaDsKLQkv KiBDbGlwcGVkIGFyZWEgYmVpbmcgc2Nhbm5lZCBmcm9tIGluIHRoZSBGQi4gKi8KLQl1MzIgc3Jj X3gsIHNyY195OwotCi0JdTMyIHNyY193WzJdLCBzcmNfaFsyXTsKLQogCS8qIFNjYWxpbmcgc2Vs ZWN0aW9uIGZvciB0aGUgUkdCL1kgcGxhbmUgYW5kIHRoZSBDYi9DciBwbGFuZXMuICovCiAJZW51 bSB2YzRfc2NhbGluZ19tb2RlIHhfc2NhbGluZ1syXSwgeV9zY2FsaW5nWzJdOwotCWJvb2wgaXNf dW5pdHk7Ci0JYm9vbCBpc195dXY7CiAKIAkvKiBPZmZzZXQgdG8gc3RhcnQgc2Nhbm5pbmcgb3V0 IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwbGFuZSdzCiAJICogQk8uCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxh bmUuYwppbmRleCBhMzI3NWZhNjZiN2IuLjM5ZTFmYTNhODQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9w bGFuZS5jCkBAIC0yNTgsMTA3ICsyNTgsMTA4IEBAIHN0YXRpYyB1MzIgdmM0X2dldF9zY2xfZmll bGQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIGludCBwbGFuZSkKIAl9CiB9CiAKK3N0 YXRpYyBib29sIGlzX3VuaXR5KHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXUz MiBzcmNfdyA9IChzdGF0ZS0+c3JjLngyIC0gc3RhdGUtPnNyYy54MSkgPj4gMTY7CisJdTMyIHNy Y19oID0gKHN0YXRlLT5zcmMueTIgLSBzdGF0ZS0+c3JjLnkxKSA+PiAxNjsKKwl1MzIgY3J0Y193 ID0gc3RhdGUtPmRzdC54MiAtIHN0YXRlLT5kc3QueDE7CisJdTMyIGNydGNfaCA9IHN0YXRlLT5k c3QueTIgLSBzdGF0ZS0+ZHN0LnkxOworCisJcmV0dXJuIHNyY193ID09IGNydGNfdyAmJiBzcmNf aCA9PSBjcnRjX2g7Cit9CisKK3N0YXRpYyBib29sIGlzX3l1dihzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUtPmZiLT5mb3JtYXQtPm51bV9wbGFuZXMgPiAx OworfQorCiBzdGF0aWMgaW50IHZjNF9wbGFuZV9zZXR1cF9jbGlwcGluZ19hbmRfc2NhbGluZyhz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSA9IHN0YXRlLT5wbGFuZTsKIAlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0 b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g c3RhdGUtPmZiOwogCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmJvID0gZHJtX2ZiX2NtYV9n ZXRfZ2VtX29iaihmYiwgMCk7CisJdTMyIGNydGNfaCwgY3J0Y193LCBzcmNfaCwgc3JjX3csIHNy Y194LCBzcmNfeTsKIAl1MzIgc3VicGl4ZWxfc3JjX21hc2sgPSAoMSA8PCAxNikgLSAxOwogCXUz MiBmb3JtYXQgPSBmYi0+Zm9ybWF0LT5mb3JtYXQ7CiAJaW50IG51bV9wbGFuZXMgPSBmYi0+Zm9y bWF0LT5udW1fcGxhbmVzOwotCXUzMiBoX3N1YnNhbXBsZSA9IDE7Ci0JdTMyIHZfc3Vic2FtcGxl ID0gMTsKLQlpbnQgaTsKKwlpbnQgbWluX3NjYWxlID0gMSwgbWF4X3NjYWxlID0gSU5UX01BWDsK KwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJdTMyIGhfc3Vic2FtcGxlLCB2 X3N1YnNhbXBsZTsKKwlpbnQgaSwgcmV0OworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLAorCQkJCQkJCXN0YXRlLT5jcnRjKTsK KwlpZiAoIWNydGNfc3RhdGUpIHsKKwkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCBjcnRjIHN0YXRl XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm8gY29uZmlndXJpbmcgc2NhbGlu ZyBvbiB0aGUgY3Vyc29yIHBsYW5lLCBzaW5jZSBpdCBnZXRzCisJICogbm9uLXZibGFuay1zeW5j ZWQgdXBkYXRlcywgYW5kIHNjYWxpbmcgcmVxdWlyZXMgTEJNIGNoYW5nZXMgd2hpY2gKKwkgKiBo YXZlIHRvIGJlIHZibGFuay1zeW5jZWQuCisJICovCisJaWYgKHBsYW5lLT50eXBlID09IERSTV9Q TEFORV9UWVBFX0NVUlNPUikgeworCQltaW5fc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1ND QUxJTkc7CisJCW1heF9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKKwl9IGVs c2UgeworCQltaW5fc2NhbGUgPSAxOworCQltYXhfc2NhbGUgPSBJTlRfTUFYOworCX0KKworCXJl dCA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lX3N0YXRlKHN0YXRlLCBjcnRjX3N0YXRl LAorCQkJCQkJICBtaW5fc2NhbGUsIG1heF9zY2FsZSwKKwkJCQkJCSAgdHJ1ZSwgdHJ1ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBp KyspCiAJCXZjNF9zdGF0ZS0+b2Zmc2V0c1tpXSA9IGJvLT5wYWRkciArIGZiLT5vZmZzZXRzW2ld OwogCiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCBzdWJwaXhlbCBzb3VyY2UgcG9zaXRpb25pbmcgZm9y IHNjYWxpbmcuICovCi0JaWYgKChzdGF0ZS0+c3JjX3ggJiBzdWJwaXhlbF9zcmNfbWFzaykgfHwK LQkgICAgKHN0YXRlLT5zcmNfeSAmIHN1YnBpeGVsX3NyY19tYXNrKSB8fAotCSAgICAoc3RhdGUt PnNyY193ICYgc3VicGl4ZWxfc3JjX21hc2spIHx8Ci0JICAgIChzdGF0ZS0+c3JjX2ggJiBzdWJw aXhlbF9zcmNfbWFzaykpIHsKKwlpZiAoKHN0YXRlLT5zcmMueDEgJiBzdWJwaXhlbF9zcmNfbWFz aykgfHwKKwkgICAgKHN0YXRlLT5zcmMueDIgJiBzdWJwaXhlbF9zcmNfbWFzaykgfHwKKwkgICAg KHN0YXRlLT5zcmMueTEgJiBzdWJwaXhlbF9zcmNfbWFzaykgfHwKKwkgICAgKHN0YXRlLT5zcmMu eTIgJiBzdWJwaXhlbF9zcmNfbWFzaykpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdmM0 X3N0YXRlLT5zcmNfeCA9IHN0YXRlLT5zcmNfeCA+PiAxNjsKLQl2YzRfc3RhdGUtPnNyY195ID0g c3RhdGUtPnNyY195ID4+IDE2OwotCXZjNF9zdGF0ZS0+c3JjX3dbMF0gPSBzdGF0ZS0+c3JjX3cg Pj4gMTY7Ci0JdmM0X3N0YXRlLT5zcmNfaFswXSA9IHN0YXRlLT5zcmNfaCA+PiAxNjsKLQotCXZj NF9zdGF0ZS0+Y3J0Y194ID0gc3RhdGUtPmNydGNfeDsKLQl2YzRfc3RhdGUtPmNydGNfeSA9IHN0 YXRlLT5jcnRjX3k7Ci0JdmM0X3N0YXRlLT5jcnRjX3cgPSBzdGF0ZS0+Y3J0Y193OwotCXZjNF9z dGF0ZS0+Y3J0Y19oID0gc3RhdGUtPmNydGNfaDsKKwlzcmNfdyA9IChzdGF0ZS0+c3JjLngyIC0g c3RhdGUtPnNyYy54MSkgPj4gMTY7CisJc3JjX2ggPSAoc3RhdGUtPnNyYy55MiAtIHN0YXRlLT5z cmMueTEpID4+IDE2OworCXNyY194ID0gc3RhdGUtPnNyYy54MSA+PiAxNjsKKwlzcmNfeSA9IHN0 YXRlLT5zcmMueTEgPj4gMTY7CisJY3J0Y193ID0gc3RhdGUtPmRzdC54MiAtIHN0YXRlLT5kc3Qu eDE7CisJY3J0Y19oID0gc3RhdGUtPmRzdC55MiAtIHN0YXRlLT5kc3QueTE7CiAKLQl2YzRfc3Rh dGUtPnhfc2NhbGluZ1swXSA9IHZjNF9nZXRfc2NhbGluZ19tb2RlKHZjNF9zdGF0ZS0+c3JjX3db MF0sCi0JCQkJCQkgICAgICAgdmM0X3N0YXRlLT5jcnRjX3cpOwotCXZjNF9zdGF0ZS0+eV9zY2Fs aW5nWzBdID0gdmM0X2dldF9zY2FsaW5nX21vZGUodmM0X3N0YXRlLT5zcmNfaFswXSwKLQkJCQkJ CSAgICAgICB2YzRfc3RhdGUtPmNydGNfaCk7Ci0KLQl2YzRfc3RhdGUtPmlzX3VuaXR5ID0gKHZj NF9zdGF0ZS0+eF9zY2FsaW5nWzBdID09IFZDNF9TQ0FMSU5HX05PTkUgJiYKLQkJCSAgICAgICB2 YzRfc3RhdGUtPnlfc2NhbGluZ1swXSA9PSBWQzRfU0NBTElOR19OT05FKTsKKwl2YzRfc3RhdGUt Pnhfc2NhbGluZ1swXSA9IHZjNF9nZXRfc2NhbGluZ19tb2RlKHNyY193LCBjcnRjX3cpOworCXZj NF9zdGF0ZS0+eV9zY2FsaW5nWzBdID0gdmM0X2dldF9zY2FsaW5nX21vZGUoc3JjX2gsIGNydGNf aCk7CisJaF9zdWJzYW1wbGUgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKGZv cm1hdCk7CisJdl9zdWJzYW1wbGUgPSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5n KGZvcm1hdCk7CiAKIAlpZiAobnVtX3BsYW5lcyA+IDEpIHsKLQkJdmM0X3N0YXRlLT5pc195dXYg PSB0cnVlOwotCi0JCWhfc3Vic2FtcGxlID0gZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1w bGluZyhmb3JtYXQpOwotCQl2X3N1YnNhbXBsZSA9IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vi c2FtcGxpbmcoZm9ybWF0KTsKLQkJdmM0X3N0YXRlLT5zcmNfd1sxXSA9IHZjNF9zdGF0ZS0+c3Jj X3dbMF0gLyBoX3N1YnNhbXBsZTsKLQkJdmM0X3N0YXRlLT5zcmNfaFsxXSA9IHZjNF9zdGF0ZS0+ c3JjX2hbMF0gLyB2X3N1YnNhbXBsZTsKKwkJc3JjX3cgLz0gaF9zdWJzYW1wbGU7CisJCXNyY19o IC89IHZfc3Vic2FtcGxlOwogCi0JCXZjNF9zdGF0ZS0+eF9zY2FsaW5nWzFdID0KLQkJCXZjNF9n ZXRfc2NhbGluZ19tb2RlKHZjNF9zdGF0ZS0+c3JjX3dbMV0sCi0JCQkJCSAgICAgdmM0X3N0YXRl LT5jcnRjX3cpOwotCQl2YzRfc3RhdGUtPnlfc2NhbGluZ1sxXSA9Ci0JCQl2YzRfZ2V0X3NjYWxp bmdfbW9kZSh2YzRfc3RhdGUtPnNyY19oWzFdLAotCQkJCQkgICAgIHZjNF9zdGF0ZS0+Y3J0Y19o KTsKKwkJdmM0X3N0YXRlLT54X3NjYWxpbmdbMV0gPSB2YzRfZ2V0X3NjYWxpbmdfbW9kZShzcmNf dywgY3J0Y193KTsKKwkJdmM0X3N0YXRlLT55X3NjYWxpbmdbMV0gPSB2YzRfZ2V0X3NjYWxpbmdf bW9kZShzcmNfaCwgY3J0Y19oKTsKIAogCQkvKiBZVVYgY29udmVyc2lvbiByZXF1aXJlcyB0aGF0 IGhvcml6b250YWwgc2NhbGluZyBiZSBlbmFibGVkLAogCQkgKiBldmVuIG9uIGEgcGxhbmUgdGhh dCdzIG90aGVyd2lzZSAxOjEuIExvb2tzIGxpa2Ugb25seSBQUEYKIAkJICogd29ya3MgaW4gdGhh dCBjYXNlLCBzbyBsZXQncyBwaWNrIHRoYXQgb25lLgogCQkgKi8KLQkJaWYgKHZjNF9zdGF0ZS0+ aXNfdW5pdHkpCisJCWlmIChpc191bml0eShzdGF0ZSkpCiAJCQl2YzRfc3RhdGUtPnhfc2NhbGlu Z1swXSA9IFZDNF9TQ0FMSU5HX1BQRjsKIAl9IGVsc2UgewogCQl2YzRfc3RhdGUtPnhfc2NhbGlu Z1sxXSA9IFZDNF9TQ0FMSU5HX05PTkU7CiAJCXZjNF9zdGF0ZS0+eV9zY2FsaW5nWzFdID0gVkM0 X1NDQUxJTkdfTk9ORTsKIAl9CiAKLQkvKiBObyBjb25maWd1cmluZyBzY2FsaW5nIG9uIHRoZSBj dXJzb3IgcGxhbmUsIHNpbmNlIGl0IGdldHMKLQkgICBub24tdmJsYW5rLXN5bmNlZCB1cGRhdGVz LCBhbmQgc2NhbGluZyByZXF1aXJlcyByZXF1aXJlcwotCSAgIExCTSBjaGFuZ2VzIHdoaWNoIGhh dmUgdG8gYmUgdmJsYW5rLXN5bmNlZC4KLQkgKi8KLQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BM QU5FX1RZUEVfQ1VSU09SICYmICF2YzRfc3RhdGUtPmlzX3VuaXR5KQotCQlyZXR1cm4gLUVJTlZB TDsKLQotCS8qIENsYW1wIHRoZSBvbi1zY3JlZW4gc3RhcnQgeC95IHRvIDAuICBUaGUgaGFyZHdh cmUgZG9lc24ndAotCSAqIHN1cHBvcnQgbmVnYXRpdmUgeSwgYW5kIG5lZ2F0aXZlIHggd2FzdGVz IGJhbmR3aWR0aC4KLQkgKi8KLQlpZiAodmM0X3N0YXRlLT5jcnRjX3ggPCAwKSB7Ci0JCWZvciAo aSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKLQkJCXUzMiBjcHAgPSBmYi0+Zm9ybWF0LT5j cHBbaV07Ci0JCQl1MzIgc3VicyA9ICgoaSA9PSAwKSA/IDEgOiBoX3N1YnNhbXBsZSk7Ci0KLQkJ CXZjNF9zdGF0ZS0+b2Zmc2V0c1tpXSArPSAoY3BwICoKLQkJCQkJCSAgKC12YzRfc3RhdGUtPmNy dGNfeCkgLyBzdWJzKTsKLQkJfQotCQl2YzRfc3RhdGUtPnNyY193WzBdICs9IHZjNF9zdGF0ZS0+ Y3J0Y194OwotCQl2YzRfc3RhdGUtPnNyY193WzFdICs9IHZjNF9zdGF0ZS0+Y3J0Y194IC8gaF9z dWJzYW1wbGU7Ci0JCXZjNF9zdGF0ZS0+Y3J0Y194ID0gMDsKLQl9Ci0KLQlpZiAodmM0X3N0YXRl LT5jcnRjX3kgPCAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKLQkJ CXUzMiBzdWJzID0gKChpID09IDApID8gMSA6IHZfc3Vic2FtcGxlKTsKLQotCQkJdmM0X3N0YXRl LT5vZmZzZXRzW2ldICs9IChmYi0+cGl0Y2hlc1tpXSAqCi0JCQkJCQkgICgtdmM0X3N0YXRlLT5j cnRjX3kpIC8gc3Vicyk7Ci0JCX0KLQkJdmM0X3N0YXRlLT5zcmNfaFswXSArPSB2YzRfc3RhdGUt PmNydGNfeTsKLQkJdmM0X3N0YXRlLT5zcmNfaFsxXSArPSB2YzRfc3RhdGUtPmNydGNfeSAvIHZf c3Vic2FtcGxlOwotCQl2YzRfc3RhdGUtPmNydGNfeSA9IDA7CisJLyogQWRqdXN0IHRoZSBiYXNl IHBvaW50ZXIgdG8gdGhlIGZpcnN0IHBpeGVsIHRvIGJlIHNjYW5uZWQgb3V0LiAqLworCWZvciAo aSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKKwkJdmM0X3N0YXRlLT5vZmZzZXRzW2ldICs9 IChzcmNfeSAvIChpID8gdl9zdWJzYW1wbGUgOiAxKSkgKgorCQkJCQkgZmItPnBpdGNoZXNbaV07 CisJCXZjNF9zdGF0ZS0+b2Zmc2V0c1tpXSArPSAoc3JjX3ggLyAoaSA/IGhfc3Vic2FtcGxlIDog MSkpICoKKwkJCQkJIGZiLT5mb3JtYXQtPmNwcFtpXTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM5 OCwxMSArMzk5LDEzIEBAIHN0YXRpYyB1MzIgdmM0X2xibV9zaXplKHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlKQogCS8qIFRoaXMgaXMgdGhlIHdvcnN0IGNhc2UgbnVtYmVyLiAgT25lIG9m IHRoZSB0d28gc2l6ZXMgd2lsbAogCSAqIGJlIHVzZWQgZGVwZW5kaW5nIG9uIHRoZSBzY2FsaW5n IGNvbmZpZ3VyYXRpb24uCiAJICovCi0JdTMyIHBpeF9wZXJfbGluZSA9IG1heCh2YzRfc3RhdGUt PnNyY193WzBdLCAodTMyKXZjNF9zdGF0ZS0+Y3J0Y193KTsKKwl1MzIgY3J0Y193ID0gc3RhdGUt PmRzdC54MiAtIHN0YXRlLT5kc3QueDE7CisJdTMyIHNyY193ID0gKHN0YXRlLT5zcmMueDIgLSBz dGF0ZS0+c3JjLngxKSA+PiAxNjsKKwl1MzIgcGl4X3Blcl9saW5lID0gbWF4KHNyY193LCBjcnRj X3cpOwogCXUzMiBsYm07CiAKLQlpZiAoIXZjNF9zdGF0ZS0+aXNfeXV2KSB7Ci0JCWlmICh2YzRf c3RhdGUtPmlzX3VuaXR5KQorCWlmICghaXNfeXV2KHN0YXRlKSkgeworCQlpZiAoaXNfdW5pdHko c3RhdGUpKQogCQkJcmV0dXJuIDA7CiAJCWVsc2UgaWYgKHZjNF9zdGF0ZS0+eV9zY2FsaW5nWzBd ID09IFZDNF9TQ0FMSU5HX1RQWikKIAkJCWxibSA9IHBpeF9wZXJfbGluZSAqIDg7CkBAIC00Mjcs MzAgKzQzMCwzNCBAQCBzdGF0aWMgdm9pZCB2YzRfd3JpdGVfc2NhbGluZ19wYXJhbWV0ZXJzKHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAogCQkJCQkgaW50IGNoYW5uZWwpCiB7CiAJc3Ry dWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHN0YXRl KTsKKwl1MzIgc3JjX3cgPSAoc3RhdGUtPnNyYy54MiAtIHN0YXRlLT5zcmMueDEpID4+IDE2Owor CXUzMiBzcmNfaCA9IChzdGF0ZS0+c3JjLnkyIC0gc3RhdGUtPnNyYy55MSkgPj4gMTY7CisJdTMy IGNydGNfdyA9IHN0YXRlLT5kc3QueDIgLSBzdGF0ZS0+ZHN0LngxOworCXUzMiBjcnRjX2ggPSBz dGF0ZS0+ZHN0LnkyIC0gc3RhdGUtPmRzdC55MTsKKwl1MzIgZm10ID0gc3RhdGUtPmZiLT5mb3Jt YXQtPmZvcm1hdDsKKworCWlmIChjaGFubmVsKSB7CisJCXNyY193IC89IGRybV9mb3JtYXRfaG9y el9jaHJvbWFfc3Vic2FtcGxpbmcoZm10KTsKKwkJc3JjX2ggLz0gZHJtX2Zvcm1hdF9ob3J6X2No cm9tYV9zdWJzYW1wbGluZyhmbXQpOworCX0KIAogCS8qIENoMCBILVBQRiBXb3JkIDA6IFNjYWxp bmcgUGFyYW1ldGVycyAqLwotCWlmICh2YzRfc3RhdGUtPnhfc2NhbGluZ1tjaGFubmVsXSA9PSBW QzRfU0NBTElOR19QUEYpIHsKLQkJdmM0X3dyaXRlX3BwZih2YzRfc3RhdGUsCi0JCQkgICAgICB2 YzRfc3RhdGUtPnNyY193W2NoYW5uZWxdLCB2YzRfc3RhdGUtPmNydGNfdyk7Ci0JfQorCWlmICh2 YzRfc3RhdGUtPnhfc2NhbGluZ1tjaGFubmVsXSA9PSBWQzRfU0NBTElOR19QUEYpCisJCXZjNF93 cml0ZV9wcGYodmM0X3N0YXRlLCBzcmNfdywgY3J0Y193KTsKIAogCS8qIENoMCBWLVBQRiBXb3Jk cyAwLTE6IFNjYWxpbmcgUGFyYW1ldGVycywgQ29udGV4dCAqLwogCWlmICh2YzRfc3RhdGUtPnlf c2NhbGluZ1tjaGFubmVsXSA9PSBWQzRfU0NBTElOR19QUEYpIHsKLQkJdmM0X3dyaXRlX3BwZih2 YzRfc3RhdGUsCi0JCQkgICAgICB2YzRfc3RhdGUtPnNyY19oW2NoYW5uZWxdLCB2YzRfc3RhdGUt PmNydGNfaCk7CisJCXZjNF93cml0ZV9wcGYodmM0X3N0YXRlLCBzcmNfaCwgY3J0Y19oKTsKIAkJ dmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwgMHhjMGMwYzBjMCk7CiAJfQogCiAJLyogQ2gwIEgt VFBaIFdvcmRzIDAtMTogU2NhbGluZyBQYXJhbWV0ZXJzLCBSZWNpcCAqLwotCWlmICh2YzRfc3Rh dGUtPnhfc2NhbGluZ1tjaGFubmVsXSA9PSBWQzRfU0NBTElOR19UUFopIHsKLQkJdmM0X3dyaXRl X3Rweih2YzRfc3RhdGUsCi0JCQkgICAgICB2YzRfc3RhdGUtPnNyY193W2NoYW5uZWxdLCB2YzRf c3RhdGUtPmNydGNfdyk7Ci0JfQorCWlmICh2YzRfc3RhdGUtPnhfc2NhbGluZ1tjaGFubmVsXSA9 PSBWQzRfU0NBTElOR19UUFopCisJCXZjNF93cml0ZV90cHoodmM0X3N0YXRlLCBzcmNfdywgY3J0 Y193KTsKIAogCS8qIENoMCBWLVRQWiBXb3JkcyAwLTI6IFNjYWxpbmcgUGFyYW1ldGVycywgUmVj aXAsIENvbnRleHQgKi8KIAlpZiAodmM0X3N0YXRlLT55X3NjYWxpbmdbY2hhbm5lbF0gPT0gVkM0 X1NDQUxJTkdfVFBaKSB7Ci0JCXZjNF93cml0ZV90cHoodmM0X3N0YXRlLAotCQkJICAgICAgdmM0 X3N0YXRlLT5zcmNfaFtjaGFubmVsXSwgdmM0X3N0YXRlLT5jcnRjX2gpOworCQl2YzRfd3JpdGVf dHB6KHZjNF9zdGF0ZSwgc3JjX2gsIGNydGNfaCk7CiAJCXZjNF9kbGlzdF93cml0ZSh2YzRfc3Rh dGUsIDB4YzBjMGMwYzApOwogCX0KIH0KQEAgLTQ2OCw2ICs0NzUsNyBAQCBzdGF0aWMgaW50IHZj NF9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAljb25zdCBzdHJ1Y3Qg aHZzX2Zvcm1hdCAqZm9ybWF0ID0gdmM0X2dldF9odnNfZm9ybWF0KGZiLT5mb3JtYXQtPmZvcm1h dCk7CiAJdTY0IGJhc2VfZm9ybWF0X21vZCA9IGZvdXJjY19tb2RfYnJvYWRjb21fbW9kKGZiLT5t b2RpZmllcik7CiAJaW50IG51bV9wbGFuZXMgPSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0 LT5kcm0pOworCXUzMiBzcmNfeCwgc3JjX3ksIGNydGNfaCwgY3J0Y193LCBzcmNfaCwgc3JjX3c7 CiAJYm9vbCBtaXhfcGxhbmVfYWxwaGE7CiAJYm9vbCBjb3ZlcnNfc2NyZWVuOwogCXUzMiBzY2ww LCBzY2wxLCBwaXRjaDA7CkBAIC01MTMsNiArNTIxLDEzIEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5l X21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlzY2wxID0gdmM0X2dldF9zY2xf ZmllbGQoc3RhdGUsIDApOwogCX0KIAorCWNydGNfdyA9IHN0YXRlLT5kc3QueDIgLSBzdGF0ZS0+ ZHN0LngxOworCWNydGNfaCA9IHN0YXRlLT5kc3QueTIgLSBzdGF0ZS0+ZHN0LnkxOworCXNyY194 ID0gc3RhdGUtPnNyYy54MSA+PiAxNjsKKwlzcmNfeSA9IHN0YXRlLT5zcmMueTEgPj4gMTY7CisJ c3JjX3cgPSAoc3RhdGUtPnNyYy54MiAtIHN0YXRlLT5zcmMueDEpID4+IDE2OworCXNyY19oID0g KHN0YXRlLT5zcmMueTIgLSBzdGF0ZS0+c3JjLnkxKSA+PiAxNjsKKwogCXN3aXRjaCAoYmFzZV9m b3JtYXRfbW9kKSB7CiAJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CiAJCXRpbGluZyA9IFND QUxFUl9DVEwwX1RJTElOR19MSU5FQVI7CkBAIC01OTIsNyArNjA3LDcgQEAgc3RhdGljIGludCB2 YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkoZm9ybWF0LT5w aXhlbF9vcmRlciA8PCBTQ0FMRVJfQ1RMMF9PUkRFUl9TSElGVCkgfAogCQkJKGh2c19mb3JtYXQg PDwgU0NBTEVSX0NUTDBfUElYRUxfRk9STUFUX1NISUZUKSB8CiAJCQlWQzRfU0VUX0ZJRUxEKHRp bGluZywgU0NBTEVSX0NUTDBfVElMSU5HKSB8Ci0JCQkodmM0X3N0YXRlLT5pc191bml0eSA/IFND QUxFUl9DVEwwX1VOSVRZIDogMCkgfAorCQkJKGlzX3VuaXR5KHN0YXRlKSA/IFNDQUxFUl9DVEww X1VOSVRZIDogMCkgfAogCQkJVkM0X1NFVF9GSUVMRChzY2wwLCBTQ0FMRVJfQ1RMMF9TQ0wwKSB8 CiAJCQlWQzRfU0VUX0ZJRUxEKHNjbDEsIFNDQUxFUl9DVEwwX1NDTDEpKTsKIApAQCAtNjAwLDE3 ICs2MTUsMTQgQEAgc3RhdGljIGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCiAJdmM0X3N0YXRlLT5wb3MwX29mZnNldCA9IHZjNF9zdGF0ZS0+ZGxpc3RfY291 bnQ7CiAJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwKIAkJCVZDNF9TRVRfRklFTEQoc3RhdGUt PmFscGhhID4+IDgsIFNDQUxFUl9QT1MwX0ZJWEVEX0FMUEhBKSB8Ci0JCQlWQzRfU0VUX0ZJRUxE KHZjNF9zdGF0ZS0+Y3J0Y194LCBTQ0FMRVJfUE9TMF9TVEFSVF9YKSB8Ci0JCQlWQzRfU0VUX0ZJ RUxEKHZjNF9zdGF0ZS0+Y3J0Y195LCBTQ0FMRVJfUE9TMF9TVEFSVF9ZKSk7CisJCQlWQzRfU0VU X0ZJRUxEKHN0YXRlLT5kc3QueDEsIFNDQUxFUl9QT1MwX1NUQVJUX1gpIHwKKwkJCVZDNF9TRVRf RklFTEQoc3RhdGUtPmRzdC55MSwgU0NBTEVSX1BPUzBfU1RBUlRfWSkpOwogCiAJLyogUG9zaXRp b24gV29yZCAxOiBTY2FsZWQgSW1hZ2UgRGltZW5zaW9ucy4gKi8KLQlpZiAoIXZjNF9zdGF0ZS0+ aXNfdW5pdHkpIHsKKwlpZiAoIWlzX3VuaXR5KHN0YXRlKSkKIAkJdmM0X2RsaXN0X3dyaXRlKHZj NF9zdGF0ZSwKLQkJCQlWQzRfU0VUX0ZJRUxEKHZjNF9zdGF0ZS0+Y3J0Y193LAotCQkJCQkgICAg ICBTQ0FMRVJfUE9TMV9TQ0xfV0lEVEgpIHwKLQkJCQlWQzRfU0VUX0ZJRUxEKHZjNF9zdGF0ZS0+ Y3J0Y19oLAotCQkJCQkgICAgICBTQ0FMRVJfUE9TMV9TQ0xfSEVJR0hUKSk7Ci0JfQorCQkJCVZD NF9TRVRfRklFTEQoY3J0Y193LCBTQ0FMRVJfUE9TMV9TQ0xfV0lEVEgpIHwKKwkJCQlWQzRfU0VU X0ZJRUxEKGNydGNfaCwgU0NBTEVSX1BPUzFfU0NMX0hFSUdIVCkpOwogCiAJLyogRG9uJ3Qgd2Fz dGUgY3ljbGVzIG1peGluZyB3aXRoIHBsYW5lIGFscGhhIGlmIHRoZSBzZXQgYWxwaGEKIAkgKiBp cyBvcGFxdWUgb3IgdGhlcmUgaXMgbm8gcGVyLXBpeGVsIGFscGhhIGluZm9ybWF0aW9uLgpAQCAt NjI4LDggKzY0MCw4IEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAogCQkJCSAgICAgIFNDQUxFUl9QT1MyX0FMUEhBX01PREUpIHwKIAkJCSht aXhfcGxhbmVfYWxwaGEgPyBTQ0FMRVJfUE9TMl9BTFBIQV9NSVggOiAwKSB8CiAJCQkoZmItPmZv cm1hdC0+aGFzX2FscGhhID8gU0NBTEVSX1BPUzJfQUxQSEFfUFJFTVVMVCA6IDApIHwKLQkJCVZD NF9TRVRfRklFTEQodmM0X3N0YXRlLT5zcmNfd1swXSwgU0NBTEVSX1BPUzJfV0lEVEgpIHwKLQkJ CVZDNF9TRVRfRklFTEQodmM0X3N0YXRlLT5zcmNfaFswXSwgU0NBTEVSX1BPUzJfSEVJR0hUKSk7 CisJCQlWQzRfU0VUX0ZJRUxEKHNyY193LCBTQ0FMRVJfUE9TMl9XSURUSCkgfAorCQkJVkM0X1NF VF9GSUVMRChzcmNfaCwgU0NBTEVSX1BPUzJfSEVJR0hUKSk7CiAKIAkvKiBQb3NpdGlvbiBXb3Jk IDM6IENvbnRleHQuICBXcml0dGVuIGJ5IHRoZSBIVlMuICovCiAJdmM0X2RsaXN0X3dyaXRlKHZj NF9zdGF0ZSwgMHhjMGMwYzBjMCk7CkBAIC02NjIsNyArNjc0LDcgQEAgc3RhdGljIGludCB2YzRf cGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJfQogCiAJLyogQ29sb3Jz cGFjZSBjb252ZXJzaW9uIHdvcmRzICovCi0JaWYgKHZjNF9zdGF0ZS0+aXNfeXV2KSB7CisJaWYg KGlzX3l1dihzdGF0ZSkpIHsKIAkJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwgU0NBTEVSX0NT QzBfSVRSX1JfNjAxXzUpOwogCQl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRlLCBTQ0FMRVJfQ1ND MV9JVFJfUl82MDFfNSk7CiAJCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUsIFNDQUxFUl9DU0My X0lUUl9SXzYwMV81KTsKQEAgLTcxMiw5ICs3MjQsOSBAQCBzdGF0aWMgaW50IHZjNF9wbGFuZV9t b2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJVkM0X1NFVF9GSUVMRCh2YzRfc3Rh dGUtPmRsaXN0X2NvdW50LCBTQ0FMRVJfQ1RMMF9TSVpFKTsKIAogCS8qIGNydGNfKiBhcmUgYWxy ZWFkeSBjbGlwcGVkIGNvb3JkaW5hdGVzLiAqLwotCWNvdmVyc19zY3JlZW4gPSB2YzRfc3RhdGUt PmNydGNfeCA9PSAwICYmIHZjNF9zdGF0ZS0+Y3J0Y195ID09IDAgJiYKLQkJCXZjNF9zdGF0ZS0+ Y3J0Y193ID09IHN0YXRlLT5jcnRjLT5tb2RlLmhkaXNwbGF5ICYmCi0JCQl2YzRfc3RhdGUtPmNy dGNfaCA9PSBzdGF0ZS0+Y3J0Yy0+bW9kZS52ZGlzcGxheTsKKwljb3ZlcnNfc2NyZWVuID0gc3Rh dGUtPmNydGNfeCA9PSAwICYmIHN0YXRlLT5jcnRjX3kgPT0gMCAmJgorCQkJY3J0Y193ID09IHN0 YXRlLT5jcnRjLT5tb2RlLmhkaXNwbGF5ICYmCisJCQljcnRjX2ggPT0gc3RhdGUtPmNydGMtPm1v ZGUudmRpc3BsYXk7CiAJLyogQmFja2dyb3VuZCBmaWxsIG1pZ2h0IGJlIG5lY2Vzc2FyeSB3aGVu IHRoZSBwbGFuZSBoYXMgcGVyLXBpeGVsCiAJICogYWxwaGEgY29udGVudCBvciBhIG5vbi1vcGFx dWUgcGxhbmUgYWxwaGEgYW5kIGNvdWxkIGJsZW5kIGZyb20gdGhlCiAJICogYmFja2dyb3VuZCBv ciBkb2VzIG5vdCBjb3ZlciB0aGUgZW50aXJlIHNjcmVlbi4KLS0gCjIuMTQuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==