From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v4.1. Date: Fri, 29 Sep 2017 11:52:04 +0200 Message-ID: <20170929095204.15299-1-maarten.lankhorst@linux.intel.com> References: <20170928110105.12466-1-maarten.lankhorst@linux.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 [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D4326E26E for ; Fri, 29 Sep 2017 09:52:11 +0000 (UTC) In-Reply-To: <20170928110105.12466-1-maarten.lankhorst@linux.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 ZmxhZ3MsIGFuZCB0cnkgdG8KY29tbWl0IGFsbCBwcm9wZXJ0aWVzLgoKVGhpcyBoYXMgYmVlbiB0 aGUgbW9zdCBpbnZvbHZlZCBvbmUsIHNpbmNlIGxlZ2FjeSBwaXBlIGNvbW1pdCBzdGlsbApoYW5k bGVzIGEgbG90IG9mIHRoZSBwcm9wZXJ0aWVzIGRpZmZlcmVudGx5IGZyb20gdGhlIHJlc3QuCgpD aGFuZ2VzIHNpbmNlIHYxOgotIER1bXAgYWxsIGNoYW5nZWQgcHJvcGVydGllcyBvbiBjb21taXQu Ci0gRml4IGJ1ZyBpbiBpZ3RfcGlwZV9yZWZyZXNoKCkuCkNoYW5nZXMgc2luY2UgdjI6Ci0gU2V0 IHBpcGUgQUNUSVZFIHByb3BlcnR5IGNoYW5nZWQgZmxhZyBvbiBpbml0LgpDaGFuZ2VzIHNpbmNl IHYzOgotIEFkZCBhIG1pc3NpbmcgaWd0X3BpcGVfcmVmcmVzaCgpIHRvIGttc19hdG9taWNfaW50 ZXJydXB0aWJsZS4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxh bmtob3JzdEBsaW51eC5pbnRlbC5jb20+Ci0tLQpBY3R1YWxseSBjb21waWxpbmcgbm93IQoKIGxp Yi9pZ3Rfa21zLmMgICAgICAgICAgICAgICAgICAgICB8IDIxNyArKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLQogbGliL2lndF9rbXMuaCAgICAgICAgICAgICAgICAgICAgIHwg IDc3ICsrKysrKy0tLS0tLS0tCiB0ZXN0cy9rbXNfYXRvbWljX2ludGVycnVwdGlibGUuYyAgfCAg IDggKy0KIHRlc3RzL2ttc19hdG9taWNfdHJhbnNpdGlvbi5jICAgICB8ICAgMiArLQogdGVzdHMv a21zX2NydGNfYmFja2dyb3VuZF9jb2xvci5jIHwgICAyICstCiA1IGZpbGVzIGNoYW5nZWQsIDE1 MSBpbnNlcnRpb25zKCspLCAxNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9r bXMuYyBiL2xpYi9pZ3Rfa21zLmMKaW5kZXggNmUwMDUyZWJlN2E3Li5hODFkNzk5ODQzM2EgMTAw NjQ0Ci0tLSBhL2xpYi9pZ3Rfa21zLmMKKysrIGIvbGliL2lndF9rbXMuYwpAQCAtMjU5LDggKzI1 OSw4IEBAIGlndF9hdG9taWNfZmlsbF9jb25uZWN0b3JfcHJvcHMoaWd0X2Rpc3BsYXlfdCAqZGlz cGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCiB9CiAKIHN0YXRpYyB2b2lkCi1pZ3RfYXRvbWlj X2ZpbGxfcGlwZV9wcm9wcyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3RfcGlwZV90ICpwaXBl LAotCQkJaW50IG51bV9jcnRjX3Byb3BzLCBjb25zdCBjaGFyICoqY3J0Y19wcm9wX25hbWVzKQor aWd0X2ZpbGxfcGlwZV9wcm9wcyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3RfcGlwZV90ICpw aXBlLAorCQkgICAgaW50IG51bV9jcnRjX3Byb3BzLCBjb25zdCBjaGFyICoqY3J0Y19wcm9wX25h bWVzKQogewogCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzOwogCWludCBpLCBqLCBm ZDsKQEAgLTI3OCw3ICsyNzgsNyBAQCBpZ3RfYXRvbWljX2ZpbGxfcGlwZV9wcm9wcyhpZ3RfZGlz cGxheV90ICpkaXNwbGF5LCBpZ3RfcGlwZV90ICpwaXBlLAogCQkJaWYgKHN0cmNtcChwcm9wLT5u YW1lLCBjcnRjX3Byb3BfbmFtZXNbal0pICE9IDApCiAJCQkJY29udGludWU7CiAKLQkJCXBpcGUt PmF0b21pY19wcm9wc19jcnRjW2pdID0gcHJvcHMtPnByb3BzW2ldOworCQkJcGlwZS0+cHJvcHNb al0gPSBwcm9wcy0+cHJvcHNbaV07CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNjkwLDcgKzE2OTAs NiBAQCB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRy bV9mZCkKIAkJaW50IHAgPSAxOwogCQlpbnQgaiwgdHlwZTsKIAkJdWludDhfdCBsYXN0X3BsYW5l ID0gMCwgbl9wbGFuZXMgPSAwOwotCQl1aW50NjRfdCBwcm9wX3ZhbHVlOwogCiAJCXBpcGUtPmNy dGNfaWQgPSByZXNvdXJjZXMtPmNydGNzW2ldOwogCQlwaXBlLT5kaXNwbGF5ID0gZGlzcGxheTsK QEAgLTE3MDAsMjkgKzE2OTksMTYgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5 X3QgKmRpc3BsYXksIGludCBkcm1fZmQpCiAJCXBpcGUtPnBsYW5lcyA9IE5VTEw7CiAJCXBpcGUt Pm91dF9mZW5jZV9mZCA9IC0xOwogCisJCWlndF9maWxsX3BpcGVfcHJvcHMoZGlzcGxheSwgcGlw ZSwgSUdUX05VTV9DUlRDX1BST1BTLCBpZ3RfY3J0Y19wcm9wX25hbWVzKTsKKworCQkvKiBGb3Jj ZSBtb2Rlc2V0IGRpc2FibGUgb24gZmlyc3QgY29tbWl0ICovCisJCWlndF9waXBlX29ial9zZXRf cHJvcF9jaGFuZ2VkKHBpcGUsIElHVF9DUlRDX01PREVfSUQpOworCQlpZ3RfcGlwZV9vYmpfc2V0 X3Byb3BfY2hhbmdlZChwaXBlLCBJR1RfQ1JUQ19BQ1RJVkUpOworCiAJCWdldF9jcnRjX3Byb3Bl cnR5KGRpc3BsYXktPmRybV9mZCwgcGlwZS0+Y3J0Y19pZCwKLQkJCQkgICAgImJhY2tncm91bmRf Y29sb3IiLAotCQkJCSAgICAmcGlwZS0+YmFja2dyb3VuZF9wcm9wZXJ0eSwKLQkJCQkgICAgJnBy b3BfdmFsdWUsCisJCQkJICAgICJiYWNrZ3JvdW5kX2NvbG9yIiwgTlVMTCwKKwkJCQkgICAgJnBp cGUtPnZhbHVlc1tJR1RfQ1JUQ19CQUNLR1JPVU5EXSwKIAkJCQkgICAgTlVMTCk7Ci0JCXBpcGUt PmJhY2tncm91bmQgPSAodWludDMyX3QpcHJvcF92YWx1ZTsKLQkJZ2V0X2NydGNfcHJvcGVydHko ZGlzcGxheS0+ZHJtX2ZkLCBwaXBlLT5jcnRjX2lkLAotCQkJCSAgIkRFR0FNTUFfTFVUIiwKLQkJ CQkgICZwaXBlLT5kZWdhbW1hX3Byb3BlcnR5LAotCQkJCSAgTlVMTCwKLQkJCQkgIE5VTEwpOwot CQlnZXRfY3J0Y19wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIHBpcGUtPmNydGNfaWQsCi0JCQkJ ICAiQ1RNIiwKLQkJCQkgICZwaXBlLT5jdG1fcHJvcGVydHksCi0JCQkJICBOVUxMLAotCQkJCSAg TlVMTCk7Ci0JCWdldF9jcnRjX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgcGlwZS0+Y3J0Y19p ZCwKLQkJCQkgICJHQU1NQV9MVVQiLAotCQkJCSAgJnBpcGUtPmdhbW1hX3Byb3BlcnR5LAotCQkJ CSAgTlVMTCwKLQkJCQkgIE5VTEwpOwotCi0JCWlndF9hdG9taWNfZmlsbF9waXBlX3Byb3BzKGRp c3BsYXksIHBpcGUsIElHVF9OVU1fQ1JUQ19QUk9QUywgaWd0X2NydGNfcHJvcF9uYW1lcyk7CiAK IAkJLyogY291bnQgbnVtYmVyIG9mIHZhbGlkIHBsYW5lcyAqLwogCQlmb3IgKGogPSAwOyBqIDwg cGxhbmVfcmVzb3VyY2VzLT5jb3VudF9wbGFuZXM7IGorKykgewpAQCAtMTgwNSw4ICsxNzkxLDYg QEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGludCBkcm1f ZmQpCiAJCQlpZ3RfYXNzZXJ0X2VxKHAsIG5fcGxhbmVzKTsKIAogCQlwaXBlLT5uX3BsYW5lcyA9 IG5fcGxhbmVzOwotCi0JCXBpcGUtPm1vZGVfY2hhbmdlZCA9IHRydWU7CiAJfQogCiAJLyoKQEAg LTIyODMsNyArMjI2Nyw3IEBAIHN0YXRpYyBpbnQgaWd0X3ByaW1hcnlfcGxhbmVfY29tbWl0X2xl Z2FjeShpZ3RfcGxhbmVfdCAqcHJpbWFyeSwKIAogCWlmICghaWd0X3BsYW5lX2lzX3Byb3BfY2hh bmdlZChwcmltYXJ5LCBJR1RfUExBTkVfRkJfSUQpICYmCiAJICAgICEocHJpbWFyeS0+Y2hhbmdl ZCAmIElHVF9QTEFORV9DT09SRF9DSEFOR0VEX01BU0spICYmCi0JICAgICFwcmltYXJ5LT5waXBl LT5tb2RlX2NoYW5nZWQpCisJICAgICFpZ3RfcGlwZV9vYmpfaXNfcHJvcF9jaGFuZ2VkKHByaW1h cnktPnBpcGUsIElHVF9DUlRDX01PREVfSUQpKQogCQlyZXR1cm4gMDsKIAogCWNydGNfaWQgPSBw aXBlLT5jcnRjX2lkOwpAQCAtMjM1Miw2ICsyMzM2LDE2IEBAIHN0YXRpYyBpbnQgaWd0X3BsYW5l X2NvbW1pdChpZ3RfcGxhbmVfdCAqcGxhbmUsCiAJfQogfQogCitzdGF0aWMgYm9vbCBpc19hdG9t aWNfcHJvcChlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVzIHByb3ApCit7CisgICAgICAg aWYgKHByb3AgPT0gSUdUX0NSVENfTU9ERV9JRCB8fAorCSAgIHByb3AgPT0gSUdUX0NSVENfQUNU SVZFIHx8CisJICAgcHJvcCA9PSBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSKQorCQlyZXR1cm4gdHJ1 ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIENvbW1pdCBhbGwgcGxhbmUgY2hhbmdl cyB0byBhbiBvdXRwdXQuICBOb3RlIHRoYXQgaWYgQHMgaXMgQ09NTUlUX0xFR0FDWSwKICAqIGVu YWJsaW5nL2Rpc2FibGluZyB0aGUgcHJpbWFyeSBwbGFuZSB3aWxsIGFsc28gZW5hYmxlL2Rpc2Fi bGUgdGhlIENSVEMuCkBAIC0yMzY5LDE5ICsyMzYzLDkgQEAgc3RhdGljIGludCBpZ3RfcGlwZV9j b21taXQoaWd0X3BpcGVfdCAqcGlwZSwKIAlpbnQgaTsKIAlpbnQgcmV0OwogCi0JaWYgKHBpcGUt PmJhY2tncm91bmRfY2hhbmdlZCkgewotCQlpZ3RfY3J0Y19zZXRfcHJvcGVydHkocGlwZSwgcGlw ZS0+YmFja2dyb3VuZF9wcm9wZXJ0eSwKLQkJCXBpcGUtPmJhY2tncm91bmQpOwotCX0KLQotCWlm IChwaXBlLT5jb2xvcl9tZ210X2NoYW5nZWQpIHsKLQkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KHBp cGUsIHBpcGUtPmRlZ2FtbWFfcHJvcGVydHksCi0JCQkJICAgICAgcGlwZS0+ZGVnYW1tYV9ibG9i KTsKLQkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KHBpcGUsIHBpcGUtPmN0bV9wcm9wZXJ0eSwKLQkJ CQkgICAgICBwaXBlLT5jdG1fYmxvYik7Ci0JCWlndF9jcnRjX3NldF9wcm9wZXJ0eShwaXBlLCBw aXBlLT5nYW1tYV9wcm9wZXJ0eSwKLQkJCQkgICAgICBwaXBlLT5nYW1tYV9ibG9iKTsKLQl9CisJ Zm9yIChpID0gMDsgaSA8IElHVF9OVU1fQ1JUQ19QUk9QUzsgaSsrKQorCQlpZiAoIWlzX2F0b21p Y19wcm9wKGkpKQorCQkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KHBpcGUsIHBpcGUtPnByb3BzW2ld LCBwaXBlLT52YWx1ZXNbaV0pOwogCiAJZm9yIChpID0gMDsgaSA8IHBpcGUtPm5fcGxhbmVzOyBp KyspIHsKIAkJaWd0X3BsYW5lX3QgKnBsYW5lID0gJnBpcGUtPnBsYW5lc1tpXTsKQEAgLTIzOTQs OSArMjM3OCwxMCBAQCBzdGF0aWMgaW50IGlndF9waXBlX2NvbW1pdChpZ3RfcGlwZV90ICpwaXBl LAogfQogCiBzdGF0aWMgdm9pZAotaWd0X3BpcGVfcmVwbGFjZV9ibG9iKGlndF9waXBlX3QgKnBp cGUsIHVpbnQ2NF90ICpibG9iLCB2b2lkICpwdHIsIHNpemVfdCBsZW5ndGgpCitpZ3RfcGlwZV9y ZXBsYWNlX2Jsb2IoaWd0X3BpcGVfdCAqcGlwZSwgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVy dGllcyBwcm9wLCB2b2lkICpwdHIsIHNpemVfdCBsZW5ndGgpCiB7CiAJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9IHBpcGUtPmRpc3BsYXk7CisJdWludDY0X3QgKmJsb2IgPSAmcGlwZS0+dmFsdWVz W3Byb3BdOwogCXVpbnQzMl90IGJsb2JfaWQgPSAwOwogCiAJaWYgKCpibG9iICE9IDApCkBAIC0y NDA4LDYgKzIzOTMsNyBAQCBpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IoaWd0X3BpcGVfdCAqcGlwZSwg dWludDY0X3QgKmJsb2IsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbmd0aAogCQkJCQkJICAgICBwdHIs IGxlbmd0aCwgJmJsb2JfaWQpID09IDApOwogCiAJKmJsb2IgPSBibG9iX2lkOworCWlndF9waXBl X29ial9zZXRfcHJvcF9jaGFuZ2VkKHBpcGUsIHByb3ApOwogfQogCiAvKgpAQCAtMjQxNSw1MSAr MjQwMSwyMyBAQCBpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IoaWd0X3BpcGVfdCAqcGlwZSwgdWludDY0 X3QgKmJsb2IsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbmd0aAogICovCiBzdGF0aWMgdm9pZCBpZ3Rf YXRvbWljX3ByZXBhcmVfY3J0Y19jb21taXQoaWd0X3BpcGVfdCAqcGlwZV9vYmosIGRybU1vZGVB dG9taWNSZXEgKnJlcSkKIHsKLQlpZiAocGlwZV9vYmotPmJhY2tncm91bmRfY2hhbmdlZCkKLQkJ aWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcShyZXEsIHBpcGVfb2JqLCBJR1RfQ1JUQ19CQUNL R1JPVU5ELCBwaXBlX29iai0+YmFja2dyb3VuZCk7Ci0KLQlpZiAocGlwZV9vYmotPmNvbG9yX21n bXRfY2hhbmdlZCkgewotCQlpZ3RfYXRvbWljX3BvcHVsYXRlX2NydGNfcmVxKHJlcSwgcGlwZV9v YmosIElHVF9DUlRDX0RFR0FNTUFfTFVULCBwaXBlX29iai0+ZGVnYW1tYV9ibG9iKTsKLQkJaWd0 X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcShyZXEsIHBpcGVfb2JqLCBJR1RfQ1JUQ19DVE0sIHBp cGVfb2JqLT5jdG1fYmxvYik7Ci0JCWlndF9hdG9taWNfcG9wdWxhdGVfY3J0Y19yZXEocmVxLCBw aXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVULCBwaXBlX29iai0+Z2FtbWFfYmxvYik7Ci0JfQot Ci0JaWYgKHBpcGVfb2JqLT5tb2RlX2NoYW5nZWQpIHsKLQkJaWd0X291dHB1dF90ICpvdXRwdXQg PSBpZ3RfcGlwZV9nZXRfb3V0cHV0KHBpcGVfb2JqKTsKLQotCQlpZiAoIW91dHB1dCkgewotCQkJ aWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBpcGVfb2JqLCAmcGlwZV9vYmotPm1vZGVfYmxvYiwgTlVM TCwgMCk7Ci0KLQkJCUxPRyhwaXBlX29iai0+ZGlzcGxheSwgIiVzOiBTZXR0aW5nIE5VTEwgbW9k ZVxuIiwKLQkJCSAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlX29iai0+cGlwZSkpOwotCQl9IGVs c2UgewotCQkJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRw dXQpOworCWludCBpOwogCi0JCQlpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IocGlwZV9vYmosICZwaXBl X29iai0+bW9kZV9ibG9iLCBtb2RlLCBzaXplb2YoKm1vZGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwg SUdUX05VTV9DUlRDX1BST1BTOyBpKyspIHsKKwkJaWYgKCFpZ3RfcGlwZV9vYmpfaXNfcHJvcF9j aGFuZ2VkKHBpcGVfb2JqLCBpKSkKKwkJCWNvbnRpbnVlOwogCi0JCQlMT0cocGlwZV9vYmotPmRp c3BsYXksICIlczogU2V0dGluZyBtb2RlICVzIGZyb20gJXNcbiIsCi0JCQkgICAga21zdGVzdF9w aXBlX25hbWUocGlwZV9vYmotPnBpcGUpLAotCQkJICAgIG1vZGUtPm5hbWUsIGlndF9vdXRwdXRf bmFtZShvdXRwdXQpKTsKLQkJfQorCQlpZ3RfZGVidWcoIlBpcGUgJXM6IFNldHRpbmcgcHJvcGVy dHkgXCIlc1wiIHRvIDB4JSJQUkl4NjQiLyUiUFJJaTY0IlxuIiwKKwkJCWttc3Rlc3RfcGlwZV9u YW1lKHBpcGVfb2JqLT5waXBlKSwgaWd0X2NydGNfcHJvcF9uYW1lc1tpXSwKKwkJCXBpcGVfb2Jq LT52YWx1ZXNbaV0sIHBpcGVfb2JqLT52YWx1ZXNbaV0pOwogCi0JCWlndF9hdG9taWNfcG9wdWxh dGVfY3J0Y19yZXEocmVxLCBwaXBlX29iaiwgSUdUX0NSVENfTU9ERV9JRCwgcGlwZV9vYmotPm1v ZGVfYmxvYik7Ci0JCWlndF9hdG9taWNfcG9wdWxhdGVfY3J0Y19yZXEocmVxLCBwaXBlX29iaiwg SUdUX0NSVENfQUNUSVZFLCAhIW91dHB1dCk7CisJCWlndF9hc3NlcnRfbHQoMCwgZHJtTW9kZUF0 b21pY0FkZFByb3BlcnR5KHJlcSwgcGlwZV9vYmotPmNydGNfaWQsIHBpcGVfb2JqLT5wcm9wc1tp XSwgcGlwZV9vYmotPnZhbHVlc1tpXSkpOwogCX0KIAogCWlmIChwaXBlX29iai0+b3V0X2ZlbmNl X2ZkICE9IC0xKSB7CiAJCWNsb3NlKHBpcGVfb2JqLT5vdXRfZmVuY2VfZmQpOwogCQlwaXBlX29i ai0+b3V0X2ZlbmNlX2ZkID0gLTE7CiAJfQotCi0JaWYgKHBpcGVfb2JqLT5vdXRfZmVuY2VfcmVx dWVzdGVkKQotCXsKLQkJaWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcShyZXEsIHBpcGVfb2Jq LCBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLAotCQkgICAgKHVpbnQ2NF90KSh1aW50cHRyX3QpICZw aXBlX29iai0+b3V0X2ZlbmNlX2ZkKTsKLQl9Ci0KLQkvKgotCSAqCVRPRE86IEFkZCBhbGwgY3J0 YyBsZXZlbCBwcm9wZXJ0aWVzIGhlcmUKLQkgKi8KIH0KIAogLyoKQEAgLTI1NTAsMTUgKzI1MDgs MjEgQEAgZGlzcGxheV9jb21taXRfY2hhbmdlZChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBlbnVt IGlndF9jb21taXRfc3R5bGUgcykKIAkJaWd0X3BpcGVfdCAqcGlwZV9vYmogPSAmZGlzcGxheS0+ cGlwZXNbcGlwZV07CiAJCWlndF9wbGFuZV90ICpwbGFuZTsKIAotCQlwaXBlX29iai0+Y29sb3Jf bWdtdF9jaGFuZ2VkID0gZmFsc2U7Ci0JCXBpcGVfb2JqLT5iYWNrZ3JvdW5kX2NoYW5nZWQgPSBm YWxzZTsKKwkJaWYgKHMgPT0gQ09NTUlUX0FUT01JQykgeworCQkJaWYgKGlndF9waXBlX29ial9p c19wcm9wX2NoYW5nZWQocGlwZV9vYmosIElHVF9DUlRDX09VVF9GRU5DRV9QVFIpKQorCQkJCWln dF9hc3NlcnQocGlwZV9vYmotPm91dF9mZW5jZV9mZCA+PSAwKTsKIAotCQlpZiAocyAhPSBDT01N SVRfVU5JVkVSU0FMKQotCQkJcGlwZV9vYmotPm1vZGVfY2hhbmdlZCA9IGZhbHNlOwotCi0JCWlm IChzID09IENPTU1JVF9BVE9NSUMgJiYgcGlwZV9vYmotPm91dF9mZW5jZV9yZXF1ZXN0ZWQpIHsK LQkJCXBpcGVfb2JqLT5vdXRfZmVuY2VfcmVxdWVzdGVkID0gZmFsc2U7Ci0JCQlpZ3RfYXNzZXJ0 KHBpcGVfb2JqLT5vdXRfZmVuY2VfZmQgPj0gMCk7CisJCQlwaXBlX29iai0+Y2hhbmdlZCA9IDA7 CisJCX0gZWxzZSB7CisJCQlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGVfb2Jq LCBJR1RfQ1JUQ19CQUNLR1JPVU5EKTsKKwkJCWlndF9waXBlX29ial9jbGVhcl9wcm9wX2NoYW5n ZWQocGlwZV9vYmosIElHVF9DUlRDX0NUTSk7CisJCQlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9j aGFuZ2VkKHBpcGVfb2JqLCBJR1RfQ1JUQ19ERUdBTU1BX0xVVCk7CisJCQlpZ3RfcGlwZV9vYmpf Y2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLCBJR1RfQ1JUQ19HQU1NQV9MVVQpOworCisJCQlp ZiAocyAhPSBDT01NSVRfVU5JVkVSU0FMKSB7CisJCQkJaWd0X3BpcGVfb2JqX2NsZWFyX3Byb3Bf Y2hhbmdlZChwaXBlX29iaiwgSUdUX0NSVENfTU9ERV9JRCk7CisJCQkJaWd0X3BpcGVfb2JqX2Ns ZWFyX3Byb3BfY2hhbmdlZChwaXBlX29iaiwgSUdUX0NSVENfQUNUSVZFKTsKKwkJCX0KIAkJfQog CiAJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKQEAgLTI4 MTIsMzMgKzI3NzYsODMgQEAgdm9pZCBpZ3Rfb3V0cHV0X292ZXJyaWRlX21vZGUoaWd0X291dHB1 dF90ICpvdXRwdXQsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKIAogCW91dHB1dC0+dXNlX292ZXJy aWRlX21vZGUgPSAhIW1vZGU7CiAKLQlpZiAocGlwZSkKLQkJcGlwZS0+bW9kZV9jaGFuZ2VkID0g dHJ1ZTsKKwlpZiAocGlwZSkgeworCQlpZiAob3V0cHV0LT5kaXNwbGF5LT5pc19hdG9taWMpCisJ CQlpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IocGlwZSwgSUdUX0NSVENfTU9ERV9JRCwgaWd0X291dHB1 dF9nZXRfbW9kZShvdXRwdXQpLCBzaXplb2YoKm1vZGUpKTsKKwkJZWxzZQorCQkJaWd0X3BpcGVf b2JqX3NldF9wcm9wX2NoYW5nZWQocGlwZSwgSUdUX0NSVENfTU9ERV9JRCk7CisJfQogfQogCiB2 b2lkIGlndF9vdXRwdXRfc2V0X3BpcGUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBw aXBlKQogewogCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBvdXRwdXQtPmRpc3BsYXk7Ci0JaWd0 X3BpcGVfdCAqb2xkX3BpcGU7CisJaWd0X3BpcGVfdCAqb2xkX3BpcGUgPSBOVUxMLCAqcGlwZV9v YmogPSBOVUxMOzsKIAogCWlndF9hc3NlcnQob3V0cHV0LT5uYW1lKTsKIAotCWlmIChvdXRwdXQt PnBlbmRpbmdfcGlwZSAhPSBQSVBFX05PTkUpIHsKKwlpZiAob3V0cHV0LT5wZW5kaW5nX3BpcGUg IT0gUElQRV9OT05FKQogCQlvbGRfcGlwZSA9IGlndF9vdXRwdXRfZ2V0X2RyaXZpbmdfcGlwZShv dXRwdXQpOwogCi0JCW9sZF9waXBlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOwotCX0KKwlpZiAocGlw ZSAhPSBQSVBFX05PTkUpCisJCXBpcGVfb2JqID0gJmRpc3BsYXktPnBpcGVzW3BpcGVdOwogCiAJ TE9HKGRpc3BsYXksICIlczogc2V0X3BpcGUoJXMpXG4iLCBpZ3Rfb3V0cHV0X25hbWUob3V0cHV0 KSwKIAkgICAga21zdGVzdF9waXBlX25hbWUocGlwZSkpOwogCW91dHB1dC0+cGVuZGluZ19waXBl ID0gcGlwZTsKIAotCWlmIChwaXBlICE9IFBJUEVfTk9ORSkKLQkJZGlzcGxheS0+cGlwZXNbcGlw ZV0ubW9kZV9jaGFuZ2VkID0gdHJ1ZTsKKwlpZiAob2xkX3BpcGUpIHsKKwkJaWd0X291dHB1dF90 ICpvbGRfb3V0cHV0OworCisJCW9sZF9vdXRwdXQgPSBpZ3RfcGlwZV9nZXRfb3V0cHV0KG9sZF9w aXBlKTsKKwkJaWYgKCFvbGRfb3V0cHV0KSB7CisJCQlpZiAoZGlzcGxheS0+aXNfYXRvbWljKQor CQkJCWlndF9waXBlX3JlcGxhY2VfYmxvYihvbGRfcGlwZSwgSUdUX0NSVENfTU9ERV9JRCwgTlVM TCwgMCk7CisJCQllbHNlCisJCQkJaWd0X3BpcGVfb2JqX3NldF9wcm9wX2NoYW5nZWQob2xkX3Bp cGUsIElHVF9DUlRDX01PREVfSUQpOworCisJCQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUo b2xkX3BpcGUsIElHVF9DUlRDX0FDVElWRSwgMCk7CisJCX0KKwl9CiAKIAlpZ3Rfb3V0cHV0X3Nl dF9wcm9wX3ZhbHVlKG91dHB1dCwgSUdUX0NPTk5FQ1RPUl9DUlRDX0lELCBwaXBlID09IFBJUEVf Tk9ORSA/IDAgOiBkaXNwbGF5LT5waXBlc1twaXBlXS5jcnRjX2lkKTsKIAogCWlndF9vdXRwdXRf cmVmcmVzaChvdXRwdXQpOworCisJaWYgKHBpcGVfb2JqKSB7CisJCWlmIChkaXNwbGF5LT5pc19h dG9taWMpCisJCQlpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IocGlwZV9vYmosIElHVF9DUlRDX01PREVf SUQsIGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KSwgc2l6ZW9mKGRybU1vZGVNb2RlSW5mbykp OworCQllbHNlCisJCQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfY2hhbmdlZChwaXBlX29iaiwgSUdU X0NSVENfTU9ERV9JRCk7CisKKwkJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGVfb2Jq LCBJR1RfQ1JUQ19BQ1RJVkUsIDEpOworCX0KK30KKworLyoKKyAqIGlndF9waXBlX3JlZnJlc2g6 CisgKiBAZGlzcGxheTogYSBwb2ludGVyIHRvIGFuICNpZ3RfZGlzcGxheV90IHN0cnVjdHVyZQor ICogQHBpcGU6IFBpcGUgdG8gcmVmcmVzaAorICogQGZvcmNlOiBTaG91bGQgYmUgc2V0IHRvIHRy dWUgaWYgbW9kZV9ibG9iIGlzIG5vIGxvbmdlciBjb25zaWRlcmVkCisgKiB0byBiZSB2YWxpZCwg Zm9yIGV4YW1wbGUgYWZ0ZXIgZG9pbmcgYW4gYXRvbWljIGNvbW1pdCBkdXJpbmcgZm9yayBvciBj bG9zaW5nIGRpc3BsYXkgZmQuCisgKgorICogUmVxdWVzdHMgdGhlIHBpcGUgdG8gYmUgcGFydCBv ZiB0aGUgc3RhdGUgb24gbmV4dCB1cGRhdGUuCisgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHN0YXRl IG1heSBoYXZlIGJlZW4gb3V0IG9mIHN5bmMgYWZ0ZXIKKyAqIGEgZm9yaywgb3Igd2UganVzdCB3 YW50IHRvIGJlIHN1cmUgdGhlIHBpcGUgaXMgaW5jbHVkZWQKKyAqIGluIHRoZSBuZXh0IGNvbW1p dC4KKyAqLwordm9pZCBpZ3RfcGlwZV9yZWZyZXNoKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVu dW0gcGlwZSBwaXBlLCBib29sIGZvcmNlKQoreworCWlndF9waXBlX3QgKnBpcGVfb2JqID0gJmRp c3BsYXktPnBpcGVzW3BpcGVdOworCisJaWYgKGZvcmNlICYmIGRpc3BsYXktPmlzX2F0b21pYykg eworCQlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IGlndF9waXBlX2dldF9vdXRwdXQocGlwZV9vYmop OworCisJCXBpcGVfb2JqLT52YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0gPSAwOworCQlpZiAob3V0 cHV0KQorCQkJaWd0X3BpcGVfcmVwbGFjZV9ibG9iKHBpcGVfb2JqLCBJR1RfQ1JUQ19NT0RFX0lE LCBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCksIHNpemVvZihkcm1Nb2RlTW9kZUluZm8pKTsK Kwl9IGVsc2UKKwkJaWd0X3BpcGVfb2JqX3NldF9wcm9wX2NoYW5nZWQocGlwZV9vYmosIElHVF9D UlRDX01PREVfSUQpOwogfQogCiB2b2lkIGlndF9vdXRwdXRfc2V0X3NjYWxpbmdfbW9kZShpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgdWludDY0X3Qgc2NhbGluZ19tb2RlKQpAQCAtMzA0NiwyOCArMzA2 MCwyNSBAQCB2b2lkIGlndF9wbGFuZV9zZXRfcm90YXRpb24oaWd0X3BsYW5lX3QgKnBsYW5lLCBp Z3Rfcm90YXRpb25fdCByb3RhdGlvbikKICAqLwogdm9pZCBpZ3RfcGlwZV9yZXF1ZXN0X291dF9m ZW5jZShpZ3RfcGlwZV90ICpwaXBlKQogewotCXBpcGUtPm91dF9mZW5jZV9yZXF1ZXN0ZWQgPSB0 cnVlOworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19PVVRfRkVO Q0VfUFRSLCAocHRyZGlmZl90KSZwaXBlLT5vdXRfZmVuY2VfZmQpOwogfQogCiB2b2lkCiBpZ3Rf cGlwZV9zZXRfZGVnYW1tYV9sdXQoaWd0X3BpcGVfdCAqcGlwZSwgdm9pZCAqcHRyLCBzaXplX3Qg bGVuZ3RoKQogewotCWlndF9waXBlX3JlcGxhY2VfYmxvYihwaXBlLCAmcGlwZS0+ZGVnYW1tYV9i bG9iLCBwdHIsIGxlbmd0aCk7Ci0JcGlwZS0+Y29sb3JfbWdtdF9jaGFuZ2VkID0gMTsKKwlpZ3Rf cGlwZV9yZXBsYWNlX2Jsb2IocGlwZSwgSUdUX0NSVENfREVHQU1NQV9MVVQsIHB0ciwgbGVuZ3Ro KTsKIH0KIAogdm9pZAogaWd0X3BpcGVfc2V0X2N0bV9tYXRyaXgoaWd0X3BpcGVfdCAqcGlwZSwg dm9pZCAqcHRyLCBzaXplX3QgbGVuZ3RoKQogewotCWlndF9waXBlX3JlcGxhY2VfYmxvYihwaXBl LCAmcGlwZS0+Y3RtX2Jsb2IsIHB0ciwgbGVuZ3RoKTsKLQlwaXBlLT5jb2xvcl9tZ210X2NoYW5n ZWQgPSAxOworCWlndF9waXBlX3JlcGxhY2VfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwg bGVuZ3RoKTsKIH0KIAogdm9pZAogaWd0X3BpcGVfc2V0X2dhbW1hX2x1dChpZ3RfcGlwZV90ICpw aXBlLCB2b2lkICpwdHIsIHNpemVfdCBsZW5ndGgpCiB7Ci0JaWd0X3BpcGVfcmVwbGFjZV9ibG9i KHBpcGUsICZwaXBlLT5nYW1tYV9ibG9iLCBwdHIsIGxlbmd0aCk7Ci0JcGlwZS0+Y29sb3JfbWdt dF9jaGFuZ2VkID0gMTsKKwlpZ3RfcGlwZV9yZXBsYWNlX2Jsb2IocGlwZSwgSUdUX0NSVENfR0FN TUFfTFVULCBwdHIsIGxlbmd0aCk7CiB9CiAKIC8qKgpAQCAtMzA4OCw5ICszMDk5LDcgQEAgdm9p ZCBpZ3RfY3J0Y19zZXRfYmFja2dyb3VuZChpZ3RfcGlwZV90ICpwaXBlLCB1aW50NjRfdCBiYWNr Z3JvdW5kKQogCSAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSwKIAkgICAgcGlwZS0+ cGlwZSwgYmFja2dyb3VuZCk7CiAKLQlwaXBlLT5iYWNrZ3JvdW5kID0gYmFja2dyb3VuZDsKLQot CXBpcGUtPmJhY2tncm91bmRfY2hhbmdlZCA9IHRydWU7CisJaWd0X3BpcGVfb2JqX3NldF9wcm9w X3ZhbHVlKHBpcGUsIElHVF9DUlRDX0JBQ0tHUk9VTkQsIGJhY2tncm91bmQpOwogfQogCiB2b2lk IGlndF93YWl0X2Zvcl92YmxhbmtfY291bnQoaW50IGRybV9mZCwgZW51bSBwaXBlIHBpcGUsIGlu dCBjb3VudCkKZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfa21zLmggYi9saWIvaWd0X2ttcy5oCmluZGV4 IGY4N2Y4YmUzMTQyMS4uYjUzMTI3ZmZlZjVmIDEwMDY0NAotLS0gYS9saWIvaWd0X2ttcy5oCisr KyBiL2xpYi9pZ3Rfa21zLmgKQEAgLTMxMywyNyArMzEzLDEzIEBAIHN0cnVjdCBpZ3RfcGlwZSB7 CiAJaW50IHBsYW5lX3ByaW1hcnk7CiAJaWd0X3BsYW5lX3QgKnBsYW5lczsKIAotCXVpbnQzMl90 IGF0b21pY19wcm9wc19jcnRjW0lHVF9OVU1fQ1JUQ19QUk9QU107Ci0KLQl1aW50NjRfdCBiYWNr Z3JvdW5kOyAvKiBCYWNrZ3JvdW5kIGNvbG9yIE1TQiBCR1IgMTZicGMgTFNCICovCi0JdWludDMy X3QgYmFja2dyb3VuZF9jaGFuZ2VkIDogMTsKLQl1aW50MzJfdCBiYWNrZ3JvdW5kX3Byb3BlcnR5 OwotCi0JdWludDY0X3QgZGVnYW1tYV9ibG9iOwotCXVpbnQzMl90IGRlZ2FtbWFfcHJvcGVydHk7 Ci0JdWludDY0X3QgY3RtX2Jsb2I7Ci0JdWludDMyX3QgY3RtX3Byb3BlcnR5OwotCXVpbnQ2NF90 IGdhbW1hX2Jsb2I7Ci0JdWludDMyX3QgZ2FtbWFfcHJvcGVydHk7Ci0JdWludDMyX3QgY29sb3Jf bWdtdF9jaGFuZ2VkIDogMTsKKwl1aW50NjRfdCBjaGFuZ2VkOworCXVpbnQzMl90IHByb3BzW0lH VF9OVU1fQ1JUQ19QUk9QU107CisJdWludDY0X3QgdmFsdWVzW0lHVF9OVU1fQ1JUQ19QUk9QU107 CiAKIAl1aW50MzJfdCBjcnRjX2lkOwogCi0JdWludDY0X3QgbW9kZV9ibG9iOwotCWJvb2wgbW9k ZV9jaGFuZ2VkOwotCiAJaW50MzJfdCBvdXRfZmVuY2VfZmQ7Ci0JYm9vbCBvdXRfZmVuY2VfcmVx dWVzdGVkOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNTI3LDE3ICs1MTMsNiBAQCBzdGF0 aWMgaW5saW5lIGJvb2wgaWd0X291dHB1dF9pc19jb25uZWN0ZWQoaWd0X291dHB1dF90ICpvdXRw dXQpCiAJCWlndF9wbGFuZV9zZXRfcHJvcF9jaGFuZ2VkKHBsYW5lLCBwcm9wKTsgXAogCX0gd2hp bGUgKDApCiAKLS8qKgotICogaWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcToKLSAqIEByZXE6 IEEgcG9pbnRlciB0byBkcm1Nb2RlQXRvbWljUmVxCi0gKiBAcGlwZTogQSBwb2ludGVyIGlndF9w aXBlX3QKLSAqIEBwcm9wOiBvbmUgb2YgaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMKLSAqIEB2 YWx1ZTogdGhlIHZhbHVlIHRvIGFkZAotICovCi0jZGVmaW5lIGlndF9hdG9taWNfcG9wdWxhdGVf Y3J0Y19yZXEocmVxLCBwaXBlLCBwcm9wLCB2YWx1ZSkgXAotCWlndF9hc3NlcnRfbHQoMCwgZHJt TW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwgcGlwZS0+Y3J0Y19pZCxcCi0JCQkJCQkgIHBpcGUt PmF0b21pY19wcm9wc19jcnRjW3Byb3BdLCB2YWx1ZSkpCi0KICNkZWZpbmUgaWd0X291dHB1dF9p c19wcm9wX2NoYW5nZWQob3V0cHV0LCBwcm9wKSBcCiAJKCEhKChvdXRwdXQpLT5jaGFuZ2VkICYg KDEgPDwgKHByb3ApKSkpCiAjZGVmaW5lIGlndF9vdXRwdXRfc2V0X3Byb3BfY2hhbmdlZChvdXRw dXQsIHByb3ApIFwKQEAgLTU1MiwyNiArNTI3LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZ3Rf b3V0cHV0X2lzX2Nvbm5lY3RlZChpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKIAkJaWd0X291dHB1dF9z ZXRfcHJvcF9jaGFuZ2VkKG91dHB1dCwgcHJvcCk7IFwKIAl9IHdoaWxlICgwKQogCi0vKgotICog aWd0X3BpcGVfcmVmcmVzaDoKLSAqIEBkaXNwbGF5OiBhIHBvaW50ZXIgdG8gYW4gI2lndF9kaXNw bGF5X3Qgc3RydWN0dXJlCi0gKiBAcGlwZTogUGlwZSB0byByZWZyZXNoCi0gKiBAZm9yY2U6IFNo b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiBtb2RlX2Jsb2IgaXMgbm8gbG9uZ2VyIGNvbnNpZGVyZWQK LSAqIHRvIGJlIHZhbGlkLCBmb3IgZXhhbXBsZSBhZnRlciBkb2luZyBhbiBhdG9taWMgY29tbWl0 IGR1cmluZyBmb3JrIG9yIGNsb3NpbmcgZGlzcGxheSBmZC4KLSAqCi0gKiBSZXF1ZXN0cyB0aGUg cGlwZSB0byBiZSBwYXJ0IG9mIHRoZSBzdGF0ZSBvbiBuZXh0IHVwZGF0ZS4KLSAqIFRoaXMgaXMg dXNlZnVsIHdoZW4gc3RhdGUgbWF5IGhhdmUgYmVlbiBvdXQgb2Ygc3luYyBhZnRlcgotICogYSBm b3JrLCBvciB3ZSBqdXN0IHdhbnQgdG8gYmUgc3VyZSB0aGUgcGlwZSBpcyBpbmNsdWRlZAotICog aW4gdGhlIG5leHQgY29tbWl0LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWlndF9waXBlX3Jl ZnJlc2goaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUsIGJvb2wgZm9yY2Up Ci17Ci0JaWYgKGZvcmNlKQotCQlkaXNwbGF5LT5waXBlc1twaXBlXS5tb2RlX2Jsb2IgPSAwOwor I2RlZmluZSBpZ3RfcGlwZV9vYmpfaXNfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLCBwcm9wKSBcCisJ KCEhKChwaXBlX29iaiktPmNoYW5nZWQgJiAoMSA8PCAocHJvcCkpKSkKIAotCWRpc3BsYXktPnBp cGVzW3BpcGVdLm1vZGVfY2hhbmdlZCA9IHRydWU7Ci19CisjZGVmaW5lIGlndF9waXBlX2lzX3By b3BfY2hhbmdlZChkaXNwbGF5LCBwaXBlLCBwcm9wKSBcCisJaWd0X3BpcGVfb2JqX2lzX3Byb3Bf Y2hhbmdlZCgmKGRpc3BsYXkpLT5waXBlc1socGlwZSldLCBwcm9wKQorCisjZGVmaW5lIGlndF9w aXBlX29ial9zZXRfcHJvcF9jaGFuZ2VkKHBpcGVfb2JqLCBwcm9wKSBcCisJKHBpcGVfb2JqKS0+ Y2hhbmdlZCB8PSAxIDw8IChwcm9wKQorCisjZGVmaW5lIGlndF9waXBlX3NldF9wcm9wX2NoYW5n ZWQoZGlzcGxheSwgcGlwZSwgcHJvcCkgXAorCWlndF9waXBlX29ial9zZXRfcHJvcF9jaGFuZ2Vk KCYoZGlzcGxheSktPnBpcGVzWyhwaXBlKV0sIHByb3ApCisKKyNkZWZpbmUgaWd0X3BpcGVfb2Jq X2NsZWFyX3Byb3BfY2hhbmdlZChwaXBlX29iaiwgcHJvcCkgXAorCShwaXBlX29iaiktPmNoYW5n ZWQgJj0gfigxIDw8IChwcm9wKSkKKworI2RlZmluZSBpZ3RfcGlwZV9jbGVhcl9wcm9wX2NoYW5n ZWQoZGlzcGxheSwgcGlwZSwgcHJvcCkgXAorCWlndF9waXBlX29ial9jbGVhcl9wcm9wX2NoYW5n ZWQoJihkaXNwbGF5KS0+cGlwZXNbKHBpcGUpXSwgcHJvcCkKKworI2RlZmluZSBpZ3RfcGlwZV9v Ympfc2V0X3Byb3BfdmFsdWUocGlwZV9vYmosIHByb3AsIHZhbHVlKSBcCisJZG8geyBcCisJCShw aXBlX29iaiktPnZhbHVlc1twcm9wXSA9ICh2YWx1ZSk7IFwKKwkJaWd0X3BpcGVfb2JqX3NldF9w cm9wX2NoYW5nZWQocGlwZV9vYmosIHByb3ApOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBp Z3RfcGlwZV9zZXRfcHJvcF92YWx1ZShkaXNwbGF5LCBwaXBlLCBwcm9wLCB2YWx1ZSkgXAorCWln dF9waXBlX29ial9zZXRfcHJvcF92YWx1ZSgmKGRpc3BsYXkpLT5waXBlc1socGlwZSldLCBwcm9w LCB2YWx1ZSkKKwordm9pZCBpZ3RfcGlwZV9yZWZyZXNoKGlndF9kaXNwbGF5X3QgKmRpc3BsYXks IGVudW0gcGlwZSBwaXBlLCBib29sIGZvcmNlKTsKIAogdm9pZCBpZ3RfZW5hYmxlX2Nvbm5lY3Rv cnModm9pZCk7CiB2b2lkIGlndF9yZXNldF9jb25uZWN0b3JzKHZvaWQpOwpkaWZmIC0tZ2l0IGEv dGVzdHMva21zX2F0b21pY19pbnRlcnJ1cHRpYmxlLmMgYi90ZXN0cy9rbXNfYXRvbWljX2ludGVy cnVwdGlibGUuYwppbmRleCA1NTcwODU0MzkwZWEuLjAyNzBjOGY4NzBiZiAxMDA2NDQKLS0tIGEv dGVzdHMva21zX2F0b21pY19pbnRlcnJ1cHRpYmxlLmMKKysrIGIvdGVzdHMva21zX2F0b21pY19p bnRlcnJ1cHRpYmxlLmMKQEAgLTE1Niw4ICsxNTYsOCBAQCBzdGF0aWMgdm9pZCBydW5fcGxhbmVf dGVzdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90 CiAJCQkJdWludDMyX3QgY291bnRfcHJvcHNbM10gPSB7IDIsIDEsIDYgfTsKIAkJCQl1aW50MzJf dCBwcm9wc1tdID0gewogCQkJCQkvKiBjcnRjOiAyIHByb3BzICovCi0JCQkJCXBsYW5lLT5waXBl LT5hdG9taWNfcHJvcHNfY3J0Y1tJR1RfQ1JUQ19NT0RFX0lEXSwKLQkJCQkJcGxhbmUtPnBpcGUt PmF0b21pY19wcm9wc19jcnRjW0lHVF9DUlRDX0FDVElWRV0sCisJCQkJCXBsYW5lLT5waXBlLT5w cm9wc1tJR1RfQ1JUQ19NT0RFX0lEXSwKKwkJCQkJcGxhbmUtPnBpcGUtPnByb3BzW0lHVF9DUlRD X0FDVElWRV0sCiAJCQkJCS8qIGNvbm5lY3RvcjogMSBwcm9wICovCiAJCQkJCW91dHB1dC0+cHJv cHNbSUdUX0NPTk5FQ1RPUl9DUlRDX0lEXSwKIAkJCQkJLyogcGxhbmU6IHJlbWFpbmRlciBwcm9w cyAqLwpAQCAtMjUzLDYgKzI1MywxMCBAQCBzdGF0aWMgdm9pZCBydW5fcGxhbmVfdGVzdChpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5LCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90CiAKIAlpZ3Rf d2FpdGNoaWxkcmVuKCk7CiAKKwkvKiBUaGUgbW9kZSBpcyB1bnNldCBieSB0aGUgZm9ya2VkIGhl bHBlciwgZm9yY2UgYSByZWZyZXNoIGhlcmUgKi8KKwlpZiAodGVzdF90eXBlID09IHRlc3RfbGVn YWN5X21vZGVzZXQgfHwgdGVzdF90eXBlID09IHRlc3RfYXRvbWljX21vZGVzZXQpCisJCWlndF9w aXBlX3JlZnJlc2goZGlzcGxheSwgcGlwZSwgdHJ1ZSk7CisKIAlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCBOVUxMKTsKIAlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOwogCWlndF9vdXRw dXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX05PTkUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2F0 b21pY190cmFuc2l0aW9uLmMgYi90ZXN0cy9rbXNfYXRvbWljX3RyYW5zaXRpb24uYwppbmRleCAy YWU3NWYyZDY2MzAuLjdkZGI2NWNlYTE4MyAxMDA2NDQKLS0tIGEvdGVzdHMva21zX2F0b21pY190 cmFuc2l0aW9uLmMKKysrIGIvdGVzdHMva21zX2F0b21pY190cmFuc2l0aW9uLmMKQEAgLTYzMyw3 ICs2MzMsNyBAQCBzdGF0aWMgdW5zaWduZWQgc2V0X2NvbWJpbmF0aW9ucyhpZ3RfZGlzcGxheV90 ICpkaXNwbGF5LCB1bnNpZ25lZCBtYXNrLCBzdHJ1Y3QgaQogCQlkcm1Nb2RlTW9kZUluZm8gKm1v ZGUgPSBOVUxMOwogCiAJCWlmICghKG1hc2sgJiAoMSA8PCBwaXBlKSkpIHsKLQkJCWlmIChkaXNw bGF5LT5waXBlc1twaXBlXS5tb2RlX2Jsb2IpIHsKKwkJCWlmIChpZ3RfcGlwZV9pc19wcm9wX2No YW5nZWQoZGlzcGxheSwgcGlwZSwgSUdUX0NSVENfQUNUSVZFKSkgewogCQkJCWV2ZW50X21hc2sg fD0gMSA8PCBwaXBlOwogCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwogCQkJfQpk aWZmIC0tZ2l0IGEvdGVzdHMva21zX2NydGNfYmFja2dyb3VuZF9jb2xvci5jIGIvdGVzdHMva21z X2NydGNfYmFja2dyb3VuZF9jb2xvci5jCmluZGV4IGUxMmUxNjM0NDlmOC4uNjU5YTMwYjkwMjE5 IDEwMDY0NAotLS0gYS90ZXN0cy9rbXNfY3J0Y19iYWNrZ3JvdW5kX2NvbG9yLmMKKysrIGIvdGVz dHMva21zX2NydGNfYmFja2dyb3VuZF9jb2xvci5jCkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGlj IHZvaWQgdGVzdF9jcnRjX2JhY2tncm91bmQoZGF0YV90ICpkYXRhKQogCQlpZ3Rfb3V0cHV0X3Nl dF9waXBlKG91dHB1dCwgcGlwZSk7CiAKIAkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90 eXBlKG91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7Ci0JCWlndF9yZXF1aXJlKHBsYW5l LT5waXBlLT5iYWNrZ3JvdW5kX3Byb3BlcnR5KTsKKwkJaWd0X3JlcXVpcmUocGxhbmUtPnBpcGUt PnByb3BzW0lHVF9DUlRDX0JBQ0tHUk9VTkRdKTsKIAogCQlwcmVwYXJlX2NydGMoZGF0YSwgb3V0 cHV0LCBwaXBlLCBwbGFuZSwgMSwgUFVSUExFLCBCTEFDSzY0KTsKIAotLSAKMi4xNC4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK