From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH i-g-t] lib/igt_kms: Rework plane properties to be more atomic, v5. Date: Wed, 4 Oct 2017 15:54:23 +0200 Message-ID: <20171004135423.25255-1-maarten.lankhorst@linux.intel.com> References: <1507032303.3274.32.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id D56C86E272 for ; Wed, 4 Oct 2017 13:54:31 +0000 (UTC) In-Reply-To: <1507032303.3274.32.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SW4gdGhlIGZ1dHVyZSBJIHdhbnQgdG8gYWxsb3cgdGVzdHMgdG8gY29tbWl0IG1vcmUgcHJvcGVy dGllcywKYnV0IGZvciB0aGlzIHRvIHdvcmsgSSBoYXZlIHRvIGZpeCBhbGwgcHJvcGVydGllcyB0 byB3b3JrIGJldHRlcgp3aXRoIGF0b21pYyBjb21taXQuIEluc3RlYWQgb2Ygc3BlY2lhbCBjYXNp bmcgZWFjaApwcm9wZXJ0eSBtYWtlIGEgYml0bWFzayBmb3IgYWxsIHByb3BlcnR5IGNoYW5nZWQg ZmxhZ3MsIGFuZCB0cnkgdG8KY29tbWl0IGFsbCBwcm9wZXJ0aWVzLgoKQ2hhbmdlcyBzaW5jZSB2 MToKLSBSZW1vdmUgc3BlY2lhbCBkdW1waW5nIG9mIHNyYyBhbmQgY3J0YyBjb29yZGluYXRlcy4K LSBEdW1wIGFsbCBtb2RpZmllZCBjb29yZGluYXRlcy4KQ2hhbmdlcyBzaW5jZSB2MjoKLSBNb3Zl IGlndF9wbGFuZV9zZXRfcHJvcF9jaGFuZ2VkIHVwIHNsaWdodGx5LgpDaGFuZ2VzIHNpbmNlIHYz OgotIEZpeCB3cm9uZyBvcmRlcmluZyBvZiBzZXRfcG9zaXRpb24gaW4ga21zX3BsYW5lX2xvd3Jl cyBjYXVzaW5nIGEgdGVzdCBmYWlsdXJlLgpDaGFuZ2VzIHNpbmNlIHY0OgotIEJhY2sgb3V0IHJl c2V0dGluZyBjcnRjIHBvc2l0aW9uIGluIGlndF9wbGFuZV9zZXRfZmIoKSBhbmQKICBkb2N1bWVu dCBpdCBkdXJpbmcgaW5pdC4gVGVzdHMgYXBwZWFyIHRvIHJlbHkgb24gaXQgYmVpbmcgcHJlc2Vy dmVkLgoKU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0 QGxpbnV4LmludGVsLmNvbT4KLS0tCiBsaWIvaWd0X2ttcy5jICAgICAgICAgICAgICAgICAgICB8 IDI5OSArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9pZ3Rfa21z LmggICAgICAgICAgICAgICAgICAgIHwgIDU5ICsrKystLS0tCiB0ZXN0cy9rbXNfYXRvbWljX2lu dGVycnVwdGlibGUuYyB8ICAxMiArLQogdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jICAgICAgICAg fCAgIDQgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2VydGlvbnMoKyksIDIwOSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5jIGIvbGliL2lndF9rbXMuYwppbmRleCBl MzUzNGVlODA2NTkuLjQ0ZDJkOTQ1Mjk4OSAxMDA2NDQKLS0tIGEvbGliL2lndF9rbXMuYworKysg Yi9saWIvaWd0X2ttcy5jCkBAIC0xOTIsMTEgKzE5MiwxMSBAQCBjb25zdCBjaGFyICppZ3RfY29u bmVjdG9yX3Byb3BfbmFtZXNbSUdUX05VTV9DT05ORUNUT1JfUFJPUFNdID0gewogCiAvKgogICog UmV0cmlldmUgYWxsIHRoZSBwcm9wZXJpZXMgc3BlY2lmaWVkIGluIHByb3BzX25hbWUgYW5kIHN0 b3JlIHRoZW0gaW50bwotICogcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZS4KKyAqIHBsYW5lLT5w cm9wcy4KICAqLwogc3RhdGljIHZvaWQKLWlndF9hdG9taWNfZmlsbF9wbGFuZV9wcm9wcyhpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5LCBpZ3RfcGxhbmVfdCAqcGxhbmUsCi0JCQlpbnQgbnVtX3Byb3Bz LCBjb25zdCBjaGFyICoqcHJvcF9uYW1lcykKK2lndF9maWxsX3BsYW5lX3Byb3BzKGlndF9kaXNw bGF5X3QgKmRpc3BsYXksIGlndF9wbGFuZV90ICpwbGFuZSwKKwkJICAgICBpbnQgbnVtX3Byb3Bz LCBjb25zdCBjaGFyICoqcHJvcF9uYW1lcykKIHsKIAlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0 ciBwcm9wczsKIAlpbnQgaSwgaiwgZmQ7CkBAIC0yMTQsNyArMjE0LDcgQEAgaWd0X2F0b21pY19m aWxsX3BsYW5lX3Byb3BzKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9wbGFuZV90ICpwbGFu ZSwKIAkJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lc1tqXSkgIT0gMCkKIAkJCQlj b250aW51ZTsKIAotCQkJcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZVtqXSA9IHByb3BzLT5wcm9w c1tpXTsKKwkJCXBsYW5lLT5wcm9wc1tqXSA9IHByb3BzLT5wcm9wc1tpXTsKIAkJCWJyZWFrOwog CQl9CiAKQEAgLTE2NTksNyArMTY1OSw2IEBAIHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlz cGxheV90ICpkaXNwbGF5LCBpbnQgZHJtX2ZkKQogCWRybU1vZGVSZXMgKnJlc291cmNlczsKIAlk cm1Nb2RlUGxhbmVSZXMgKnBsYW5lX3Jlc291cmNlczsKIAlpbnQgaTsKLQlpbnQgaXNfYXRvbWlj ID0gMDsKIAogCW1lbXNldChkaXNwbGF5LCAwLCBzaXplb2YoaWd0X2Rpc3BsYXlfdCkpOwogCkBA IC0xNjc5LDcgKzE2NzgsOSBAQCB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSwgaW50IGRybV9mZCkKIAlpZ3RfYXNzZXJ0X2YoZGlzcGxheS0+cGlwZXMsICJGYWls ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlZCBwaXBlc1xuIiwgZGlzcGxheS0+bl9waXBlcyk7 CiAKIAlkcm1TZXRDbGllbnRDYXAoZHJtX2ZkLCBEUk1fQ0xJRU5UX0NBUF9VTklWRVJTQUxfUExB TkVTLCAxKTsKLQlpc19hdG9taWMgPSBkcm1TZXRDbGllbnRDYXAoZHJtX2ZkLCBEUk1fQ0xJRU5U X0NBUF9BVE9NSUMsIDEpOworCWlmIChkcm1TZXRDbGllbnRDYXAoZHJtX2ZkLCBEUk1fQ0xJRU5U X0NBUF9BVE9NSUMsIDEpID09IDApCisJCWRpc3BsYXktPmlzX2F0b21pYyA9IDE7CisKIAlwbGFu ZV9yZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UGxhbmVSZXNvdXJjZXMoZGlzcGxheS0+ZHJtX2ZkKTsK IAlpZ3RfYXNzZXJ0KHBsYW5lX3Jlc291cmNlcyk7CiAKQEAgLTE3NzYsMTkgKzE3NzcsMjcgQEAg dm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGludCBkcm1fZmQp CiAJCQlwbGFuZS0+dHlwZSA9IHR5cGU7CiAJCQlwbGFuZS0+cGlwZSA9IHBpcGU7CiAJCQlwbGFu ZS0+ZHJtX3BsYW5lID0gZHJtX3BsYW5lOwotCQkJcGxhbmUtPmZlbmNlX2ZkID0gLTE7CisJCQlw bGFuZS0+dmFsdWVzW0lHVF9QTEFORV9JTl9GRU5DRV9GRF0gPSB+MFVMTDsKIAotCQkJaWYgKGlz X2F0b21pYyA9PSAwKSB7Ci0JCQkJZGlzcGxheS0+aXNfYXRvbWljID0gMTsKLQkJCQlpZ3RfYXRv bWljX2ZpbGxfcGxhbmVfcHJvcHMoZGlzcGxheSwgcGxhbmUsIElHVF9OVU1fUExBTkVfUFJPUFMs IGlndF9wbGFuZV9wcm9wX25hbWVzKTsKLQkJCX0KKwkJCWlndF9maWxsX3BsYW5lX3Byb3BzKGRp c3BsYXksIHBsYW5lLCBJR1RfTlVNX1BMQU5FX1BST1BTLCBpZ3RfcGxhbmVfcHJvcF9uYW1lcyk7 CiAKIAkJCWdldF9wbGFuZV9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIGRybV9wbGFuZS0+cGxh bmVfaWQsCiAJCQkJCSAgICJyb3RhdGlvbiIsCi0JCQkJCSAgICZwbGFuZS0+cm90YXRpb25fcHJv cGVydHksCi0JCQkJCSAgICZwcm9wX3ZhbHVlLAorCQkJCQkgICAmcGxhbmUtPnByb3BzW0lHVF9Q TEFORV9ST1RBVElPTl0sCisJCQkJCSAgICZwbGFuZS0+dmFsdWVzW0lHVF9QTEFORV9ST1RBVElP Tl0sCiAJCQkJCSAgIE5VTEwpOwotCQkJcGxhbmUtPnJvdGF0aW9uID0gKGlndF9yb3RhdGlvbl90 KXByb3BfdmFsdWU7CisKKwkJCS8qIENsZWFyIGFueSByZXNpZHVhbCBmcmFtZWJ1ZmZlciBpbmZv IG9uIGZpcnN0IGNvbW1pdC4gKi8KKwkJCWlndF9wbGFuZV9zZXRfcHJvcF9jaGFuZ2VkKHBsYW5l LCBJR1RfUExBTkVfRkJfSUQpOworCQkJaWd0X3BsYW5lX3NldF9wcm9wX2NoYW5nZWQocGxhbmUs IElHVF9QTEFORV9DUlRDX0lEKTsKKworCQkJLyoKKwkJCSAqIENSVENfWC9ZIGFyZSBub3QgY2hh bmdlZCBpbiBpZ3RfcGxhbmVfc2V0X2ZiLCBzbworCQkJICogZm9yY2UgdGhlbSB0byBiZSBzYW5p dGl6ZWQgaW4gY2FzZSB0aGV5IGNvbnRhaW4KKwkJCSAqIGdhcmJhZ2UuCisJCQkgKi8KKwkJCWln dF9wbGFuZV9zZXRfcHJvcF9jaGFuZ2VkKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19YKTsKKwkJCWln dF9wbGFuZV9zZXRfcHJvcF9jaGFuZ2VkKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ZKTsKIAkJfQog CiAJCS8qCkBAIC0xODA1LDkgKzE4MTQsNiBAQCB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSwgaW50IGRybV9mZCkKIAogCQlwaXBlLT5uX3BsYW5lcyA9IG5fcGxh bmVzOwogCi0JCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgaSwgcGxhbmUpCi0JCQlw bGFuZS0+ZmJfY2hhbmdlZCA9IHRydWU7Ci0KIAkJcGlwZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsK IAl9CiAKQEAgLTIwNzAsMTggKzIwNzYsNyBAQCBib29sIGlndF9waXBlX2dldF9wcm9wZXJ0eShp Z3RfcGlwZV90ICpwaXBlLCBjb25zdCBjaGFyICpuYW1lLAogCiBzdGF0aWMgdWludDMyX3QgaWd0 X3BsYW5lX2dldF9mYl9pZChpZ3RfcGxhbmVfdCAqcGxhbmUpCiB7Ci0JaWYgKHBsYW5lLT5mYikK LQkJcmV0dXJuIHBsYW5lLT5mYi0+ZmJfaWQ7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHVpbnQzMl90IGlndF9wbGFuZV9nZXRfZmJfZ2VtX2hhbmRsZShpZ3RfcGxhbmVfdCAqcGxh bmUpCi17Ci0JaWYgKHBsYW5lLT5mYikKLQkJcmV0dXJuIHBsYW5lLT5mYi0+Z2VtX2hhbmRsZTsK LQllbHNlCi0JCXJldHVybiAwOworCXJldHVybiBwbGFuZS0+dmFsdWVzW0lHVF9QTEFORV9GQl9J RF07CiB9CiAKICNkZWZpbmUgQ0hFQ0tfUkVUVVJOKHIsIGZhaWwpIHsJXApAQCAtMjA5MCw5ICsy MDg1LDYgQEAgc3RhdGljIHVpbnQzMl90IGlndF9wbGFuZV9nZXRfZmJfZ2VtX2hhbmRsZShpZ3Rf cGxhbmVfdCAqcGxhbmUpCiAJaWd0X2Fzc2VydF9lcShyLCAwKTsJXAogfQogCi0KLQotCiAvKgog ICogQWRkIHBvc2l0aW9uIGFuZCBmYiBjaGFuZ2VzIG9mIGEgcGxhbmUgdG8gdGhlIGF0b21pYyBw cm9wZXJ0eSBzZXQKICAqLwpAQCAtMjEwMSw2MyArMjA5MywzMSBAQCBpZ3RfYXRvbWljX3ByZXBh cmVfcGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFuZSwgaWd0X3BpcGVfdCAqcGlwZSwKIAlk cm1Nb2RlQXRvbWljUmVxICpyZXEpCiB7CiAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9IHBpcGUt PmRpc3BsYXk7Ci0JdWludDMyX3QgZmJfaWQsIGNydGNfaWQ7CisJaW50IGk7CiAKIAlpZ3RfYXNz ZXJ0KHBsYW5lLT5kcm1fcGxhbmUpOwogCi0JLyogaXQncyBhbiBlcnJvciB0byB0cnkgYW4gdW5z dXBwb3J0ZWQgZmVhdHVyZSAqLwotCWlndF9hc3NlcnQoaWd0X3BsYW5lX3N1cHBvcnRzX3JvdGF0 aW9uKHBsYW5lKSB8fAotCQkJIXBsYW5lLT5yb3RhdGlvbl9jaGFuZ2VkKTsKLQotCWZiX2lkID0g aWd0X3BsYW5lX2dldF9mYl9pZChwbGFuZSk7Ci0JY3J0Y19pZCA9IHBpcGUtPmNydGNfaWQ7Ci0K IAlMT0coZGlzcGxheSwKIAkgICAgInBvcHVsYXRpbmcgcGxhbmUgZGF0YTogJXMuJWQsIGZiICV1 XG4iLAogCSAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSwKIAkgICAgcGxhbmUtPmlu ZGV4LAotCSAgICBmYl9pZCk7Ci0KLQlpZiAocGxhbmUtPmZlbmNlX2ZkID49IDApIHsKLQkJdWlu dDY0X3QgZmVuY2VfZmQgPSAoaW50NjRfdCkgcGxhbmUtPmZlbmNlX2ZkOwotCQlpZ3RfYXRvbWlj X3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfSU5fRkVOQ0VfRkQsIGZl bmNlX2ZkKTsKLQl9CisJICAgIGlndF9wbGFuZV9nZXRfZmJfaWQocGxhbmUpKTsKIAotCWlmIChw bGFuZS0+ZmJfY2hhbmdlZCkgewotCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEs IHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgZmJfaWQgPyBjcnRjX2lkIDogMCk7Ci0JCWlndF9h dG9taWNfcG9wdWxhdGVfcGxhbmVfcmVxKHJlcSwgcGxhbmUsIElHVF9QTEFORV9GQl9JRCwgZmJf aWQpOwotCX0KLQotCWlmIChwbGFuZS0+cG9zaXRpb25fY2hhbmdlZCB8fCBwbGFuZS0+c2l6ZV9j aGFuZ2VkKSB7Ci0JCXVpbnQzMl90IHNyY194ID0gSUdUX0ZJWEVEKHBsYW5lLT5zcmNfeCwgMCk7 IC8qIHNyY194ICovCi0JCXVpbnQzMl90IHNyY195ID0gSUdUX0ZJWEVEKHBsYW5lLT5zcmNfeSwg MCk7IC8qIHNyY195ICovCi0JCXVpbnQzMl90IHNyY193ID0gSUdUX0ZJWEVEKHBsYW5lLT5zcmNf dywgMCk7IC8qIHNyY193ICovCi0JCXVpbnQzMl90IHNyY19oID0gSUdUX0ZJWEVEKHBsYW5lLT5z cmNfaCwgMCk7IC8qIHNyY19oICovCi0JCWludDMyX3QgY3J0Y194ID0gcGxhbmUtPmNydGNfeDsK LQkJaW50MzJfdCBjcnRjX3kgPSBwbGFuZS0+Y3J0Y195OwotCQl1aW50MzJfdCBjcnRjX3cgPSBw bGFuZS0+Y3J0Y193OwotCQl1aW50MzJfdCBjcnRjX2ggPSBwbGFuZS0+Y3J0Y19oOworCWZvciAo aSA9IDA7IGkgPCBJR1RfTlVNX1BMQU5FX1BST1BTOyBpKyspIHsKKwkJaWYgKCFpZ3RfcGxhbmVf aXNfcHJvcF9jaGFuZ2VkKHBsYW5lLCBpKSkKKwkJCWNvbnRpbnVlOwogCi0JCUxPRyhkaXNwbGF5 LAotCQkic3JjID0gKCVkLCAlZCkgJXUgeCAldSAiCi0JCSJkc3QgPSAoJWQsICVkKSAldSB4ICV1 XG4iLAotCQlzcmNfeCA+PiAxNiwgc3JjX3kgPj4gMTYsIHNyY193ID4+IDE2LCBzcmNfaCA+PiAx NiwKLQkJY3J0Y194LCBjcnRjX3ksIGNydGNfdywgY3J0Y19oKTsKKwkJLyogaXQncyBhbiBlcnJv ciB0byB0cnkgYW4gdW5zdXBwb3J0ZWQgZmVhdHVyZSAqLworCQlpZ3RfYXNzZXJ0KHBsYW5lLT5w cm9wc1tpXSk7CiAKLQkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwg SUdUX1BMQU5FX1NSQ19YLCBzcmNfeCk7Ci0JCWlndF9hdG9taWNfcG9wdWxhdGVfcGxhbmVfcmVx KHJlcSwgcGxhbmUsIElHVF9QTEFORV9TUkNfWSwgc3JjX3kpOwotCQlpZ3RfYXRvbWljX3BvcHVs YXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JDX1csIHNyY193KTsKLQkJaWd0 X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgSUdUX1BMQU5FX1NSQ19ILCBz cmNfaCk7CisJCWlndF9kZWJ1ZygicGxhbmUgJXMuJWQ6IFNldHRpbmcgcHJvcGVydHkgXCIlc1wi IHRvIDB4JSJQUkl4NjQiLyUiUFJJaTY0IlxuIiwKKwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBpcGUt PnBpcGUpLCBwbGFuZS0+aW5kZXgsIGlndF9wbGFuZV9wcm9wX25hbWVzW2ldLAorCQkJcGxhbmUt PnZhbHVlc1tpXSwgcGxhbmUtPnZhbHVlc1tpXSk7CiAKLQkJaWd0X2F0b21pY19wb3B1bGF0ZV9w bGFuZV9yZXEocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfWCwgY3J0Y194KTsKLQkJaWd0X2F0 b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfWSwgY3J0 Y195KTsKLQkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgSUdUX1BM QU5FX0NSVENfVywgY3J0Y193KTsKLQkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVx LCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfSCwgY3J0Y19oKTsKKwkJaWd0X2Fzc2VydF9sdCgwLCBk cm1Nb2RlQXRvbWljQWRkUHJvcGVydHkocmVxLCBwbGFuZS0+ZHJtX3BsYW5lLT5wbGFuZV9pZCwK KwkJCQkJCSAgcGxhbmUtPnByb3BzW2ldLAorCQkJCQkJICBwbGFuZS0+dmFsdWVzW2ldKSk7CiAJ fQotCi0JaWYgKHBsYW5lLT5yb3RhdGlvbl9jaGFuZ2VkKQotCQlpZ3RfYXRvbWljX3BvcHVsYXRl X3BsYW5lX3JlcShyZXEsIHBsYW5lLAotCQkJSUdUX1BMQU5FX1JPVEFUSU9OLCBwbGFuZS0+cm90 YXRpb24pOwogfQogCiAKQEAgLTIxODMsMTcgKzIxNDMsMjAgQEAgc3RhdGljIGludCBpZ3RfZHJt X3BsYW5lX2NvbW1pdChpZ3RfcGxhbmVfdCAqcGxhbmUsCiAJaW50MzJfdCBjcnRjX3k7CiAJdWlu dDMyX3QgY3J0Y193OwogCXVpbnQzMl90IGNydGNfaDsKKwlib29sIHNldHBsYW5lID0KKwkJaWd0 X3BsYW5lX2lzX3Byb3BfY2hhbmdlZChwbGFuZSwgSUdUX1BMQU5FX0ZCX0lEKSB8fAorCQlwbGFu ZS0+Y2hhbmdlZCAmIElHVF9QTEFORV9DT09SRF9DSEFOR0VEX01BU0s7CiAKIAlpZ3RfYXNzZXJ0 KHBsYW5lLT5kcm1fcGxhbmUpOwogCiAJLyogaXQncyBhbiBlcnJvciB0byB0cnkgYW4gdW5zdXBw b3J0ZWQgZmVhdHVyZSAqLwogCWlndF9hc3NlcnQoaWd0X3BsYW5lX3N1cHBvcnRzX3JvdGF0aW9u KHBsYW5lKSB8fAotCQkgICAhcGxhbmUtPnJvdGF0aW9uX2NoYW5nZWQpOworCQkgICAhaWd0X3Bs YW5lX2lzX3Byb3BfY2hhbmdlZChwbGFuZSwgSUdUX1BMQU5FX1JPVEFUSU9OKSk7CiAKIAlmYl9p ZCA9IGlndF9wbGFuZV9nZXRfZmJfaWQocGxhbmUpOwogCWNydGNfaWQgPSBwaXBlLT5jcnRjX2lk OwogCi0JaWYgKChwbGFuZS0+ZmJfY2hhbmdlZCB8fCBwbGFuZS0+c2l6ZV9jaGFuZ2VkKSAmJiBm Yl9pZCA9PSAwKSB7CisJaWYgKHNldHBsYW5lICYmIGZiX2lkID09IDApIHsKIAkJTE9HKGRpc3Bs YXksCiAJCSAgICAiU2V0UGxhbmUgcGlwZSAlcywgcGxhbmUgJWQsIGRpc2FibGluZ1xuIiwKIAkJ ICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUtPnBpcGUpLApAQCAtMjIxMiwxNiArMjE3NSwxNSBA QCBzdGF0aWMgaW50IGlndF9kcm1fcGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFuZSwKIAkJ CQkgICAgICBJR1RfRklYRUQoMCwwKSAvKiBzcmNfaCAqLyk7CiAKIAkJQ0hFQ0tfUkVUVVJOKHJl dCwgZmFpbF9vbl9lcnJvcik7Ci0JfSBlbHNlIGlmIChwbGFuZS0+ZmJfY2hhbmdlZCB8fCBwbGFu ZS0+cG9zaXRpb25fY2hhbmdlZCB8fAotCQlwbGFuZS0+c2l6ZV9jaGFuZ2VkKSB7Ci0JCXNyY194 ID0gSUdUX0ZJWEVEKHBsYW5lLT5zcmNfeCwwKTsgLyogc3JjX3ggKi8KLQkJc3JjX3kgPSBJR1Rf RklYRUQocGxhbmUtPnNyY195LDApOyAvKiBzcmNfeSAqLwotCQlzcmNfdyA9IElHVF9GSVhFRChw bGFuZS0+c3JjX3csMCk7IC8qIHNyY193ICovCi0JCXNyY19oID0gSUdUX0ZJWEVEKHBsYW5lLT5z cmNfaCwwKTsgLyogc3JjX2ggKi8KLQkJY3J0Y194ID0gcGxhbmUtPmNydGNfeDsKLQkJY3J0Y195 ID0gcGxhbmUtPmNydGNfeTsKLQkJY3J0Y193ID0gcGxhbmUtPmNydGNfdzsKLQkJY3J0Y19oID0g cGxhbmUtPmNydGNfaDsKKwl9IGVsc2UgaWYgKHNldHBsYW5lKSB7CisJCXNyY194ID0gcGxhbmUt PnZhbHVlc1tJR1RfUExBTkVfU1JDX1hdOworCQlzcmNfeSA9IHBsYW5lLT52YWx1ZXNbSUdUX1BM QU5FX1NSQ19ZXTsKKwkJc3JjX3cgPSBwbGFuZS0+dmFsdWVzW0lHVF9QTEFORV9TUkNfV107CisJ CXNyY19oID0gcGxhbmUtPnZhbHVlc1tJR1RfUExBTkVfU1JDX0hdOworCQljcnRjX3ggPSBwbGFu ZS0+dmFsdWVzW0lHVF9QTEFORV9DUlRDX1hdOworCQljcnRjX3kgPSBwbGFuZS0+dmFsdWVzW0lH VF9QTEFORV9DUlRDX1ldOworCQljcnRjX3cgPSBwbGFuZS0+dmFsdWVzW0lHVF9QTEFORV9DUlRD X1ddOworCQljcnRjX2ggPSBwbGFuZS0+dmFsdWVzW0lHVF9QTEFORV9DUlRDX0hdOwogCiAJCUxP RyhkaXNwbGF5LAogCQkgICAgIlNldFBsYW5lICVzLiVkLCBmYiAldSwgc3JjID0gKCVkLCAlZCkg IgpAQCAtMjI0NSw5ICsyMjA3LDEwIEBAIHN0YXRpYyBpbnQgaWd0X2RybV9wbGFuZV9jb21taXQo aWd0X3BsYW5lX3QgKnBsYW5lLAogCQlDSEVDS19SRVRVUk4ocmV0LCBmYWlsX29uX2Vycm9yKTsK IAl9CiAKLQlpZiAocGxhbmUtPnJvdGF0aW9uX2NoYW5nZWQpIHsKLQkJcmV0ID0gaWd0X3BsYW5l X3NldF9wcm9wZXJ0eShwbGFuZSwgcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5LAotCQkJCSAgICAg ICBwbGFuZS0+cm90YXRpb24pOworCWlmIChpZ3RfcGxhbmVfaXNfcHJvcF9jaGFuZ2VkKHBsYW5l LCBJR1RfUExBTkVfUk9UQVRJT04pKSB7CisJCXJldCA9IGlndF9wbGFuZV9zZXRfcHJvcGVydHko cGxhbmUsCisJCQkJCSAgICAgcGxhbmUtPnByb3BzW0lHVF9QTEFORV9ST1RBVElPTl0sCisJCQkJ CSAgICAgcGxhbmUtPnZhbHVlc1tJR1RfUExBTkVfUk9UQVRJT05dKTsKIAogCQlDSEVDS19SRVRV Uk4ocmV0LCBmYWlsX29uX2Vycm9yKTsKIAl9CkBAIC0yMjY5LDM1ICsyMjMyLDMwIEBAIHN0YXRp YyBpbnQgaWd0X2N1cnNvcl9jb21taXRfbGVnYWN5KGlndF9wbGFuZV90ICpjdXJzb3IsCiAJdWlu dDMyX3QgY3J0Y19pZCA9IHBpcGUtPmNydGNfaWQ7CiAJaW50IHJldDsKIAotCWlmIChjdXJzb3It PmZiX2NoYW5nZWQpIHsKLQkJdWludDMyX3QgZ2VtX2hhbmRsZSA9IGlndF9wbGFuZV9nZXRfZmJf Z2VtX2hhbmRsZShjdXJzb3IpOwotCi0JCWlmIChnZW1faGFuZGxlKSB7CisJaWYgKGlndF9wbGFu ZV9pc19wcm9wX2NoYW5nZWQoY3Vyc29yLCBJR1RfUExBTkVfRkJfSUQpKSB7CisJCWlmIChjdXJz b3ItPmdlbV9oYW5kbGUpCiAJCQlMT0coZGlzcGxheSwKIAkJCSAgICAiU2V0Q3Vyc29yIHBpcGUg JXMsIGZiICV1ICVkeCVkXG4iLAogCQkJICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUtPnBpcGUp LAotCQkJICAgIGdlbV9oYW5kbGUsCi0JCQkgICAgY3Vyc29yLT5jcnRjX3csIGN1cnNvci0+Y3J0 Y19oKTsKLQotCQkJcmV0ID0gZHJtTW9kZVNldEN1cnNvcihkaXNwbGF5LT5kcm1fZmQsIGNydGNf aWQsCi0JCQkJCSAgICAgICBnZW1faGFuZGxlLAotCQkJCQkgICAgICAgY3Vyc29yLT5jcnRjX3cs Ci0JCQkJCSAgICAgICBjdXJzb3ItPmNydGNfaCk7Ci0JCX0gZWxzZSB7CisJCQkgICAgY3Vyc29y LT5nZW1faGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCljdXJzb3ItPnZhbHVlc1tJR1RfUExBTkVf Q1JUQ19XXSwKKwkJCSAgICAodW5zaWduZWQpY3Vyc29yLT52YWx1ZXNbSUdUX1BMQU5FX0NSVENf SF0pOworCQllbHNlCiAJCQlMT0coZGlzcGxheSwKIAkJCSAgICAiU2V0Q3Vyc29yIHBpcGUgJXMs IGRpc2FibGluZ1xuIiwKIAkJCSAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSk7CiAK LQkJCXJldCA9IGRybU1vZGVTZXRDdXJzb3IoZGlzcGxheS0+ZHJtX2ZkLCBjcnRjX2lkLAotCQkJ CQkgICAgICAgMCwgMCwgMCk7Ci0JCX0KLQorCQlyZXQgPSBkcm1Nb2RlU2V0Q3Vyc29yKGRpc3Bs YXktPmRybV9mZCwgY3J0Y19pZCwKKwkJCQkgICAgICAgY3Vyc29yLT5nZW1faGFuZGxlLAorCQkJ CSAgICAgICBjdXJzb3ItPnZhbHVlc1tJR1RfUExBTkVfQ1JUQ19XXSwKKwkJCQkgICAgICAgY3Vy c29yLT52YWx1ZXNbSUdUX1BMQU5FX0NSVENfSF0pOwogCQlDSEVDS19SRVRVUk4ocmV0LCBmYWls X29uX2Vycm9yKTsKIAl9CiAKLQlpZiAoY3Vyc29yLT5wb3NpdGlvbl9jaGFuZ2VkKSB7Ci0JCWlu dCB4ID0gY3Vyc29yLT5jcnRjX3g7Ci0JCWludCB5ID0gY3Vyc29yLT5jcnRjX3k7CisJaWYgKGln dF9wbGFuZV9pc19wcm9wX2NoYW5nZWQoY3Vyc29yLCBJR1RfUExBTkVfQ1JUQ19YKSB8fAorCSAg ICBpZ3RfcGxhbmVfaXNfcHJvcF9jaGFuZ2VkKGN1cnNvciwgSUdUX1BMQU5FX0NSVENfWSkpIHsK KwkJaW50IHggPSBjdXJzb3ItPnZhbHVlc1tJR1RfUExBTkVfQ1JUQ19YXTsKKwkJaW50IHkgPSBj dXJzb3ItPnZhbHVlc1tJR1RfUExBTkVfQ1JUQ19ZXTsKIAogCQlMT0coZGlzcGxheSwKIAkJICAg ICJNb3ZlQ3Vyc29yIHBpcGUgJXMsICglZCwgJWQpXG4iLApAQCAtMjMyNiwxMyArMjI4NCwxNCBA QCBzdGF0aWMgaW50IGlndF9wcmltYXJ5X3BsYW5lX2NvbW1pdF9sZWdhY3koaWd0X3BsYW5lX3Qg KnByaW1hcnksCiAJaW50IHJldDsKIAogCS8qIFByaW1hcnkgcGxhbmVzIGNhbid0IGJlIHdpbmRv d2VkIHdoZW4gdXNpbmcgYSBsZWdhY3kgY29tbWl0ICovCi0JaWd0X2Fzc2VydCgocHJpbWFyeS0+ Y3J0Y194ID09IDAgJiYgcHJpbWFyeS0+Y3J0Y195ID09IDApKTsKKwlpZ3RfYXNzZXJ0KChwcmlt YXJ5LT52YWx1ZXNbSUdUX1BMQU5FX0NSVENfWF0gPT0gMCAmJiBwcmltYXJ5LT52YWx1ZXNbSUdU X1BMQU5FX0NSVENfWV0gPT0gMCkpOwogCiAJLyogbm9yIHJvdGF0ZWQgKi8KLQlpZ3RfYXNzZXJ0 KCFwcmltYXJ5LT5yb3RhdGlvbl9jaGFuZ2VkKTsKKwlpZ3RfYXNzZXJ0KCFpZ3RfcGxhbmVfaXNf cHJvcF9jaGFuZ2VkKHByaW1hcnksIElHVF9QTEFORV9ST1RBVElPTikpOwogCi0JaWYgKCFwcmlt YXJ5LT5mYl9jaGFuZ2VkICYmICFwcmltYXJ5LT5wb3NpdGlvbl9jaGFuZ2VkICYmCi0JICAgICFw cmltYXJ5LT5zaXplX2NoYW5nZWQgJiYgIXByaW1hcnktPnBpcGUtPm1vZGVfY2hhbmdlZCkKKwlp ZiAoIWlndF9wbGFuZV9pc19wcm9wX2NoYW5nZWQocHJpbWFyeSwgSUdUX1BMQU5FX0ZCX0lEKSAm JgorCSAgICAhKHByaW1hcnktPmNoYW5nZWQgJiBJR1RfUExBTkVfQ09PUkRfQ0hBTkdFRF9NQVNL KSAmJgorCSAgICAhcHJpbWFyeS0+cGlwZS0+bW9kZV9jaGFuZ2VkKQogCQlyZXR1cm4gMDsKIAog CWNydGNfaWQgPSBwaXBlLT5jcnRjX2lkOwpAQCAtMjM0MywxOSArMjMwMiwyMiBAQCBzdGF0aWMg aW50IGlndF9wcmltYXJ5X3BsYW5lX2NvbW1pdF9sZWdhY3koaWd0X3BsYW5lX3QgKnByaW1hcnks CiAJCW1vZGUgPSBOVUxMOwogCiAJaWYgKGZiX2lkKSB7CisJCXVpbnQzMl90IHNyY194ID0gcHJp bWFyeS0+dmFsdWVzW0lHVF9QTEFORV9TUkNfWF0gPj4gMTY7CisJCXVpbnQzMl90IHNyY195ID0g cHJpbWFyeS0+dmFsdWVzW0lHVF9QTEFORV9TUkNfWV0gPj4gMTY7CisKIAkJTE9HKGRpc3BsYXks CiAJCSAgICAiJXM6IFNldENydGMgcGlwZSAlcywgZmIgJXUsIHNyYyAoJWQsICVkKSwgIgogCQkg ICAgIm1vZGUgJWR4JWRcbiIsCiAJCSAgICBpZ3Rfb3V0cHV0X25hbWUob3V0cHV0KSwKIAkJICAg IGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUtPnBpcGUpLAogCQkgICAgZmJfaWQsCi0JCSAgICBwcmlt YXJ5LT5zcmNfeCwgcHJpbWFyeS0+c3JjX3ksCisJCSAgICBzcmNfeCwgc3JjX3ksCiAJCSAgICBt b2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOwogCiAJCXJldCA9IGRybU1vZGVTZXRDcnRj KGRpc3BsYXktPmRybV9mZCwKIAkJCQkgICAgIGNydGNfaWQsCiAJCQkJICAgICBmYl9pZCwKLQkJ CQkgICAgIHByaW1hcnktPnNyY194LCBwcmltYXJ5LT5zcmNfeSwKKwkJCQkgICAgIHNyY194LCBz cmNfeSwKIAkJCQkgICAgICZvdXRwdXQtPmlkLAogCQkJCSAgICAgMSwKIAkJCQkgICAgIG1vZGUp OwpAQCAtMjYwOCwxOCArMjU3MCwyNyBAQCBkaXNwbGF5X2NvbW1pdF9jaGFuZ2VkKGlndF9kaXNw bGF5X3QgKmRpc3BsYXksIGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQogCQl9CiAKIAkJZm9yX2Vh Y2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgewotCQkJcGxhbmUtPmZiX2No YW5nZWQgPSBmYWxzZTsKLQkJCXBsYW5lLT5wb3NpdGlvbl9jaGFuZ2VkID0gZmFsc2U7Ci0JCQlw bGFuZS0+c2l6ZV9jaGFuZ2VkID0gZmFsc2U7CisJCQlpZiAocyA9PSBDT01NSVRfQVRPTUlDKSB7 CisJCQkJaW50IGZkOworCQkJCXBsYW5lLT5jaGFuZ2VkID0gMDsKIAotCQkJaWYgKHMgIT0gQ09N TUlUX0xFR0FDWSB8fAotCQkJICAgICEocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWSB8fAotCQkJICAgICAgcGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSkK LQkJCQlwbGFuZS0+cm90YXRpb25fY2hhbmdlZCA9IGZhbHNlOworCQkJCWZkID0gcGxhbmUtPnZh bHVlc1tJR1RfUExBTkVfSU5fRkVOQ0VfRkRdOworCQkJCWlmIChmZCAhPSAtMSkKKwkJCQkJY2xv c2UoZmQpOwogCi0JCQlpZiAocyA9PSBDT01NSVRfQVRPTUlDKQogCQkJCS8qIHJlc2V0IGZlbmNl X2ZkIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBzZXQgZm9yIHRoZSBuZXh0IGNvbW1pdCAqLwot CQkJCWlndF9wbGFuZV9zZXRfZmVuY2VfZmQocGxhbmUsIC0xKTsKKwkJCQlwbGFuZS0+dmFsdWVz W0lHVF9QTEFORV9JTl9GRU5DRV9GRF0gPSAtMTsKKwkJCX0gZWxzZSB7CisJCQkJcGxhbmUtPmNo YW5nZWQgJj0gfklHVF9QTEFORV9DT09SRF9DSEFOR0VEX01BU0s7CisKKwkJCQlpZ3RfcGxhbmVf Y2xlYXJfcHJvcF9jaGFuZ2VkKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCk7CisJCQkJaWd0X3Bs YW5lX2NsZWFyX3Byb3BfY2hhbmdlZChwbGFuZSwgSUdUX1BMQU5FX0ZCX0lEKTsKKworCQkJCWlm IChzICE9IENPTU1JVF9MRUdBQ1kgfHwKKwkJCQkgICAgIShwbGFuZS0+dHlwZSA9PSBEUk1fUExB TkVfVFlQRV9QUklNQVJZIHx8CisJCQkJICAgICAgcGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZ UEVfQ1VSU09SKSkKKwkJCQkJaWd0X3BsYW5lX2NsZWFyX3Byb3BfY2hhbmdlZChwbGFuZSwgSUdU X1BMQU5FX1JPVEFUSU9OKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjkxMywzMCArMjg4NCwyOSBA QCB2b2lkIGlndF9wbGFuZV9zZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2Zi ICpmYikKIAlMT0coZGlzcGxheSwgIiVzLiVkOiBwbGFuZV9zZXRfZmIoJWQpXG4iLCBrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlLT5waXBlKSwKIAkgICAgcGxhbmUtPmluZGV4LCBmYiA/IGZiLT5mYl9p ZCA6IDApOwogCi0JcGxhbmUtPmZiID0gZmI7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBs YW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgZmIgPyBwaXBlLT5jcnRjX2lkIDogMCk7CisJaWd0X3Bs YW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfRkJfSUQsIGZiID8gZmItPmZiX2lk IDogMCk7CisKKwlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SICYmIGZi KQorCQlwbGFuZS0+Z2VtX2hhbmRsZSA9IGZiLT5nZW1faGFuZGxlOworCWVsc2UKKwkJcGxhbmUt PmdlbV9oYW5kbGUgPSAwOworCiAJLyogaGFjayB0byBrZWVwIHRlc3RzIHdvcmtpbmcgdGhhdCBk b24ndCBjYWxsIGlndF9wbGFuZV9zZXRfc2l6ZSgpICovCiAJaWYgKGZiKSB7CiAJCS8qIHNldCBk ZWZhdWx0IHBsYW5lIHNpemUgYXMgZmIgc2l6ZSAqLwotCQlwbGFuZS0+Y3J0Y193ID0gZmItPndp ZHRoOwotCQlwbGFuZS0+Y3J0Y19oID0gZmItPmhlaWdodDsKKwkJaWd0X3BsYW5lX3NldF9zaXpl KHBsYW5lLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOwogCiAJCS8qIHNldCBkZWZhdWx0IHNyYyBw b3Mvc2l6ZSBhcyBmYiBzaXplICovCi0JCXBsYW5lLT5zcmNfeCA9IDA7Ci0JCXBsYW5lLT5zcmNf eSA9IDA7Ci0JCXBsYW5lLT5zcmNfdyA9IGZiLT53aWR0aDsKLQkJcGxhbmUtPnNyY19oID0gZmIt PmhlaWdodDsKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIDAsIDApOworCQlpZ3Rf ZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOwogCX0gZWxzZSB7 Ci0JCXBsYW5lLT5zcmNfeCA9IDA7Ci0JCXBsYW5lLT5zcmNfeSA9IDA7Ci0JCXBsYW5lLT5zcmNf dyA9IDA7Ci0JCXBsYW5lLT5zcmNfaCA9IDA7CisJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwg MCwgMCk7CiAKLQkJcGxhbmUtPmNydGNfdyA9IDA7Ci0JCXBsYW5lLT5jcnRjX2ggPSAwOworCQkv KiBzZXQgZGVmYXVsdCBzcmMgcG9zL3NpemUgYXMgZmIgc2l6ZSAqLworCQlpZ3RfZmJfc2V0X3Bv c2l0aW9uKGZiLCBwbGFuZSwgMCwgMCk7CisJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIDAs IDApOwogCX0KLQotCXBsYW5lLT5mYl9jaGFuZ2VkID0gdHJ1ZTsKLQlwbGFuZS0+c2l6ZV9jaGFu Z2VkID0gdHJ1ZTsKIH0KIAogLyoqCkBAIC0yOTQ5LDEyICsyOTE5LDE5IEBAIHZvaWQgaWd0X3Bs YW5lX3NldF9mYihpZ3RfcGxhbmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiKQogICovCiB2 b2lkIGlndF9wbGFuZV9zZXRfZmVuY2VfZmQoaWd0X3BsYW5lX3QgKnBsYW5lLCBpbnQgZmVuY2Vf ZmQpCiB7Ci0JY2xvc2UocGxhbmUtPmZlbmNlX2ZkKTsKKwlpbnQ2NF90IGZkOwogCi0JaWYgKGZj bnRsKGZlbmNlX2ZkLCBGX0dFVEZEKSAhPSAtMSkKLQkJcGxhbmUtPmZlbmNlX2ZkID0gZHVwKGZl bmNlX2ZkKTsKLQllbHNlCi0JCXBsYW5lLT5mZW5jZV9mZCA9IC0xOworCWZkID0gcGxhbmUtPnZh bHVlc1tJR1RfUExBTkVfSU5fRkVOQ0VfRkRdOworCWlmIChmZCAhPSAtMSkKKwkJY2xvc2UoZmQp OworCisJaWYgKGZlbmNlX2ZkICE9IC0xKSB7CisJCWZkID0gZHVwKGZlbmNlX2ZkKTsKKwkJaWd0 X2ZhaWxfb24oZmQgPT0gLTEpOworCX0gZWxzZQorCQlmZCA9IC0xOworCisJaWd0X3BsYW5lX3Nl dF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfSU5fRkVOQ0VfRkQsIGZkKTsKIH0KIAogdm9p ZCBpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGlndF9wbGFuZV90ICpwbGFuZSwgaW50IHgsIGludCB5 KQpAQCAtMjk2NSwxMCArMjk0Miw4IEBAIHZvaWQgaWd0X3BsYW5lX3NldF9wb3NpdGlvbihpZ3Rf cGxhbmVfdCAqcGxhbmUsIGludCB4LCBpbnQgeSkKIAlMT0coZGlzcGxheSwgIiVzLiVkOiBwbGFu ZV9zZXRfcG9zaXRpb24oJWQsJWQpXG4iLAogCSAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5w aXBlKSwgcGxhbmUtPmluZGV4LCB4LCB5KTsKIAotCXBsYW5lLT5jcnRjX3ggPSB4OwotCXBsYW5l LT5jcnRjX3kgPSB5OwotCi0JcGxhbmUtPnBvc2l0aW9uX2NoYW5nZWQgPSB0cnVlOworCWlndF9w bGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfWCwgeCk7CisJaWd0X3Bs YW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ZLCB5KTsKIH0KIAogLyoq CkBAIC0yOTg5LDEwICsyOTY0LDggQEAgdm9pZCBpZ3RfcGxhbmVfc2V0X3NpemUoaWd0X3BsYW5l X3QgKnBsYW5lLCBpbnQgdywgaW50IGgpCiAJTE9HKGRpc3BsYXksICIlcy4lZDogcGxhbmVfc2V0 X3NpemUgKCVkeCVkKVxuIiwKIAkgICAga21zdGVzdF9waXBlX25hbWUocGlwZS0+cGlwZSksIHBs YW5lLT5pbmRleCwgdywgaCk7CiAKLQlwbGFuZS0+Y3J0Y193ID0gdzsKLQlwbGFuZS0+Y3J0Y19o ID0gaDsKLQotCXBsYW5lLT5zaXplX2NoYW5nZWQgPSB0cnVlOworCWlndF9wbGFuZV9zZXRfcHJv cF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfVywgdyk7CisJaWd0X3BsYW5lX3NldF9wcm9w X3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ILCBoKTsKIH0KIAogLyoqCkBAIC0zMDE0LDEw ICsyOTg3LDggQEAgdm9pZCBpZ3RfZmJfc2V0X3Bvc2l0aW9uKHN0cnVjdCBpZ3RfZmIgKmZiLCBp Z3RfcGxhbmVfdCAqcGxhbmUsCiAJTE9HKGRpc3BsYXksICIlcy4lZDogZmJfc2V0X3Bvc2l0aW9u KCVkLCVkKVxuIiwKIAkgICAga21zdGVzdF9waXBlX25hbWUocGlwZS0+cGlwZSksIHBsYW5lLT5p bmRleCwgeCwgeSk7CiAKLQlwbGFuZS0+c3JjX3ggPSB4OwotCXBsYW5lLT5zcmNfeSA9IHk7Ci0K LQlwbGFuZS0+ZmJfY2hhbmdlZCA9IHRydWU7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBs YW5lLCBJR1RfUExBTkVfU1JDX1gsIElHVF9GSVhFRCh4LCAwKSk7CisJaWd0X3BsYW5lX3NldF9w cm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfU1JDX1ksIElHVF9GSVhFRCh5LCAwKSk7CiB9CiAK IC8qKgpAQCAtMzA0MCwxMCArMzAxMSw4IEBAIHZvaWQgaWd0X2ZiX3NldF9zaXplKHN0cnVjdCBp Z3RfZmIgKmZiLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCiAJTE9HKGRpc3BsYXksICIlcy4lZDogZmJf c2V0X3NpemUoJWR4JWQpXG4iLAogCSAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSwg cGxhbmUtPmluZGV4LCB3LCBoKTsKIAotCXBsYW5lLT5zcmNfdyA9IHc7Ci0JcGxhbmUtPnNyY19o ID0gaDsKLQotCXBsYW5lLT5mYl9jaGFuZ2VkID0gdHJ1ZTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3Bf dmFsdWUocGxhbmUsIElHVF9QTEFORV9TUkNfVywgSUdUX0ZJWEVEKHcsIDApKTsKKwlpZ3RfcGxh bmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9TUkNfSCwgSUdUX0ZJWEVEKGgsIDAp KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKnJvdGF0aW9uX25hbWUoaWd0X3JvdGF0aW9uX3Qg cm90YXRpb24pCkBAIC0zMDcxLDkgKzMwNDAsNyBAQCB2b2lkIGlndF9wbGFuZV9zZXRfcm90YXRp b24oaWd0X3BsYW5lX3QgKnBsYW5lLCBpZ3Rfcm90YXRpb25fdCByb3RhdGlvbikKIAkgICAga21z dGVzdF9waXBlX25hbWUocGlwZS0+cGlwZSksCiAJICAgIHBsYW5lLT5pbmRleCwgcm90YXRpb25f bmFtZShyb3RhdGlvbikpOwogCi0JcGxhbmUtPnJvdGF0aW9uID0gcm90YXRpb247Ci0KLQlwbGFu ZS0+cm90YXRpb25fY2hhbmdlZCA9IHRydWU7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBs YW5lLCBJR1RfUExBTkVfUk9UQVRJT04sIHJvdGF0aW9uKTsKIH0KIAogLyoqCmRpZmYgLS1naXQg YS9saWIvaWd0X2ttcy5oIGIvbGliL2lndF9rbXMuaAppbmRleCAxZWYxMGU3ZDUyNWMuLmY4N2Y4 YmUzMTQyMSAxMDA2NDQKLS0tIGEvbGliL2lndF9rbXMuaAorKysgYi9saWIvaWd0X2ttcy5oCkBA IC0yNTIsNiArMjUyLDkgQEAgZW51bSBpZ3RfYXRvbWljX3BsYW5lX3Byb3BlcnRpZXMgewogICAg ICAgIElHVF9QTEFORV9DUlRDX1csCiAgICAgICAgSUdUX1BMQU5FX0NSVENfSCwKIAorLyogQXBw ZW5kIG5ldyBwcm9wZXJ0aWVzIGFmdGVyIElHVF9QTEFORV9DT09SRF9DSEFOR0VEX01BU0sgKi8K KyNkZWZpbmUgSUdUX1BMQU5FX0NPT1JEX0NIQU5HRURfTUFTSyAweGZmCisKICAgICAgICBJR1Rf UExBTkVfRkJfSUQsCiAgICAgICAgSUdUX1BMQU5FX0NSVENfSUQsCiAgICAgICAgSUdUX1BMQU5F X0lOX0ZFTkNFX0ZELApAQCAtMjg2LDM3ICsyODksMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCWlu dCBpbmRleDsKIAkvKiBjYXBhYmlsaXRpZXMgKi8KIAlpbnQgdHlwZTsKLQkvKiBzdGF0ZSB0cmFj a2luZyAqLwotCXVuc2lnbmVkIGludCBmYl9jaGFuZ2VkICAgICAgIDogMTsKLQl1bnNpZ25lZCBp bnQgcG9zaXRpb25fY2hhbmdlZCA6IDE7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uX2NoYW5nZWQg OiAxOwotCXVuc2lnbmVkIGludCBzaXplX2NoYW5nZWQgICAgIDogMTsKKwogCS8qCiAJICogZHJt X3BsYW5lIGNhbiBiZSBOVUxMIGZvciBwcmltYXJ5IGFuZCBjdXJzb3IgcGxhbmVzICh3aGVuIG5v dAogCSAqIHVzaW5nIHRoZSBhdG9taWMgbW9kZXNldCBBUEkpCiAJICovCiAJZHJtTW9kZVBsYW5l ICpkcm1fcGxhbmU7Ci0Jc3RydWN0IGlndF9mYiAqZmI7Ci0KLQl1aW50MzJfdCByb3RhdGlvbl9w cm9wZXJ0eTsKLQotCS8qIHBvc2l0aW9uIHdpdGhpbiBwaXBlX3NyY193IHggcGlwZV9zcmNfaCAq LwotCWludCBjcnRjX3gsIGNydGNfeTsKLQkvKiBzaXplIHdpdGhpbiBwaXBlX3NyY193IHggcGlw ZV9zcmNfaCAqLwotCWludCBjcnRjX3csIGNydGNfaDsKIAotCS8qIHBvc2l0aW9uIHdpdGhpbiB0 aGUgZnJhbWVidWZmZXIgKi8KLQl1aW50MzJfdCBzcmNfeDsKLQl1aW50MzJfdCBzcmNfeTsKLQkv KiBzaXplIHdpdGhpbiB0aGUgZnJhbWVidWZmZXIqLwotCXVpbnQzMl90IHNyY193OwotCXVpbnQz Ml90IHNyY19oOworCS8qIGdlbSBoYW5kbGUgZm9yIGZiICovCisJdWludDMyX3QgZ2VtX2hhbmRs ZTsKIAotCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uOwotCi0JLyogaW4gZmVuY2UgZmQgKi8KLQlp bnQgZmVuY2VfZmQ7Ci0JdWludDMyX3QgYXRvbWljX3Byb3BzX3BsYW5lW0lHVF9OVU1fUExBTkVf UFJPUFNdOworCXVpbnQ2NF90IGNoYW5nZWQ7CisJdWludDMyX3QgcHJvcHNbSUdUX05VTV9QTEFO RV9QUk9QU107CisJdWludDY0X3QgdmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdOwogfSBpZ3Rf cGxhbmVfdDsKIAogc3RydWN0IGlndF9waXBlIHsKQEAgLTQwNyw3ICszOTIsNyBAQCBib29sIGln dF9waXBlX2dldF9wcm9wZXJ0eShpZ3RfcGlwZV90ICpwaXBlLCBjb25zdCBjaGFyICpuYW1lLAog CiBzdGF0aWMgaW5saW5lIGJvb2wgaWd0X3BsYW5lX3N1cHBvcnRzX3JvdGF0aW9uKGlndF9wbGFu ZV90ICpwbGFuZSkKIHsKLQlyZXR1cm4gcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5ICE9IDA7CisJ cmV0dXJuIHBsYW5lLT5wcm9wc1tJR1RfUExBTkVfUk9UQVRJT05dICE9IDA7CiB9CiB2b2lkIGln dF9waXBlX3JlcXVlc3Rfb3V0X2ZlbmNlKGlndF9waXBlX3QgKnBpcGUpOwogdm9pZCBpZ3RfcGlw ZV9zZXRfZGVnYW1tYV9sdXQoaWd0X3BpcGVfdCAqcGlwZSwgdm9pZCAqcHRyLCBzaXplX3QgbGVu Z3RoKTsKQEAgLTUyNywxNiArNTEyLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZ3Rfb3V0cHV0 X2lzX2Nvbm5lY3RlZChpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKIAogI2RlZmluZSBJR1RfRklYRUQo aSxmKQkoKGkpIDw8IDE2IHwgKGYpKQogCi0vKioKLSAqIGlndF9hdG9taWNfcG9wdWxhdGVfcGxh bmVfcmVxOgotICogQHJlcTogQSBwb2ludGVyIHRvIGRybU1vZGVBdG9taWNSZXEKLSAqIEBwbGFu ZTogQSBwb2ludGVyIGlndF9wbGFuZV90Ci0gKiBAcHJvcDogb25lIG9mIGlndF9hdG9taWNfcGxh bmVfcHJvcGVydGllcwotICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gYWRkCi0gKi8KLSNkZWZpbmUg aWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgcHJvcCwgdmFsdWUpIFwK LQlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1vZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIHBsYW5lLT5k cm1fcGxhbmUtPnBsYW5lX2lkLFwKLQkJCQkJCSAgcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZVtw cm9wXSwgdmFsdWUpKQorI2RlZmluZSBpZ3RfcGxhbmVfaXNfcHJvcF9jaGFuZ2VkKHBsYW5lLCBw cm9wKSBcCisJKCEhKChwbGFuZSktPmNoYW5nZWQgJiAoMSA8PCAocHJvcCkpKSkKKworI2RlZmlu ZSBpZ3RfcGxhbmVfc2V0X3Byb3BfY2hhbmdlZChwbGFuZSwgcHJvcCkgXAorCShwbGFuZSktPmNo YW5nZWQgfD0gMSA8PCAocHJvcCkKKworI2RlZmluZSBpZ3RfcGxhbmVfY2xlYXJfcHJvcF9jaGFu Z2VkKHBsYW5lLCBwcm9wKSBcCisJKHBsYW5lKS0+Y2hhbmdlZCAmPSB+KDEgPDwgKHByb3ApKQor CisjZGVmaW5lIGlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgcHJvcCwgdmFsdWUpIFwK KwlkbyB7IFwKKwkJcGxhbmUtPnZhbHVlc1twcm9wXSA9IHZhbHVlOyBcCisJCWlndF9wbGFuZV9z ZXRfcHJvcF9jaGFuZ2VkKHBsYW5lLCBwcm9wKTsgXAorCX0gd2hpbGUgKDApCiAKIC8qKgogICog aWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcToKZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19hdG9t aWNfaW50ZXJydXB0aWJsZS5jIGIvdGVzdHMva21zX2F0b21pY19pbnRlcnJ1cHRpYmxlLmMKaW5k ZXggZGNkYmMyNjdkM2VmLi40YTJhNTc3NDEyY2MgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttc19hdG9t aWNfaW50ZXJydXB0aWJsZS5jCisrKyBiL3Rlc3RzL2ttc19hdG9taWNfaW50ZXJydXB0aWJsZS5j CkBAIC0xNjMsMTIgKzE2MywxMiBAQCBzdGF0aWMgdm9pZCBydW5fcGxhbmVfdGVzdChpZ3RfZGlz cGxheV90ICpkaXNwbGF5LCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90CiAJCQkJCS8qIGNv bm5lY3RvcjogMSBwcm9wICovCiAJCQkJCW91dHB1dC0+cHJvcHNbSUdUX0NPTk5FQ1RPUl9DUlRD X0lEXSwKIAkJCQkJLyogcGxhbmU6IHJlbWFpbmRlciBwcm9wcyAqLwotCQkJCQlwbGFuZS0+YXRv bWljX3Byb3BzX3BsYW5lW0lHVF9QTEFORV9DUlRDX0lEXSwKLQkJCQkJcGxhbmUtPmF0b21pY19w cm9wc19wbGFuZVtJR1RfUExBTkVfRkJfSURdLAotCQkJCQlwbGFuZS0+YXRvbWljX3Byb3BzX3Bs YW5lW0lHVF9QTEFORV9TUkNfV10sCi0JCQkJCXBsYW5lLT5hdG9taWNfcHJvcHNfcGxhbmVbSUdU X1BMQU5FX1NSQ19IXSwKLQkJCQkJcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZVtJR1RfUExBTkVf Q1JUQ19XXSwKLQkJCQkJcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZVtJR1RfUExBTkVfQ1JUQ19I XQorCQkJCQlwbGFuZS0+cHJvcHNbSUdUX1BMQU5FX0NSVENfSURdLAorCQkJCQlwbGFuZS0+cHJv cHNbSUdUX1BMQU5FX0ZCX0lEXSwKKwkJCQkJcGxhbmUtPnByb3BzW0lHVF9QTEFORV9TUkNfV10s CisJCQkJCXBsYW5lLT5wcm9wc1tJR1RfUExBTkVfU1JDX0hdLAorCQkJCQlwbGFuZS0+cHJvcHNb SUdUX1BMQU5FX0NSVENfV10sCisJCQkJCXBsYW5lLT5wcm9wc1tJR1RfUExBTkVfQ1JUQ19IXQog CQkJCX07CiAJCQkJdWludDY0X3QgcHJvcF92YWxzW10gPSB7CiAJCQkJCS8qIGNydGMgKi8KZGlm ZiAtLWdpdCBhL3Rlc3RzL2ttc19yb3RhdGlvbl9jcmMuYyBiL3Rlc3RzL2ttc19yb3RhdGlvbl9j cmMuYwppbmRleCA1YWVjOGZhMzk2NzEuLmI4MzI3ZGZhMGQ4MyAxMDA2NDQKLS0tIGEvdGVzdHMv a21zX3JvdGF0aW9uX2NyYy5jCisrKyBiL3Rlc3RzL2ttc19yb3RhdGlvbl9jcmMuYwpAQCAtMTIy LDExICsxMjIsMTEgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9jcnRjKGRhdGFfdCAqZGF0YSwgaWd0 X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlLAogCWlndF9wbGFuZV9zZXRfZmIocHJp bWFyeSwgJmRhdGEtPmZiX21vZGVzZXQpOwogCiAJaWYgKGNvbW1pdCA8IENPTU1JVF9BVE9NSUMp IHsKLQkJcHJpbWFyeS0+cm90YXRpb25fY2hhbmdlZCA9IGZhbHNlOworCQlpZ3RfcGxhbmVfY2xl YXJfcHJvcF9jaGFuZ2VkKHByaW1hcnksIElHVF9QTEFORV9ST1RBVElPTik7CiAJCWlndF9kaXNw bGF5X2NvbW1pdChkaXNwbGF5KTsKIAogCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSkKLQkJCXByaW1hcnktPnJvdGF0aW9uX2NoYW5nZWQgPSB0cnVlOworCQkJaWd0 X3BsYW5lX3NldF9wcm9wX2NoYW5nZWQocHJpbWFyeSwgSUdUX1BMQU5FX1JPVEFUSU9OKTsKIAl9 CiAKIAlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKLS0gCjIuMTQuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==