From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v1 04/32] lib/igt_kms: Implement dynamic plane count support Date: Mon, 23 Jan 2017 13:00:33 +0200 Message-ID: <1485169233.9014.44.camel@intel.com> References: <20170120174554.14195-1-robert.foss@collabora.com> <20170120174554.14195-5-robert.foss@collabora.com> Reply-To: mika.kahola@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 32D456E449 for ; Mon, 23 Jan 2017 10:59:54 +0000 (UTC) In-Reply-To: <20170120174554.14195-5-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Robert Foss , intel-gfx@lists.freedesktop.org, Tomeu Vizoso , Maarten Lankhorst , Gustavo Padovan , Daniel Stone List-Id: intel-gfx@lists.freedesktop.org V2l0aCB0aGlzIHBhdGNoIGFwcGxpZWQsIEkgcmVjZWl2ZWQgY291cGxlIG9mIGlzc3VlcyBkdXJp bmcgdGhlCmNvbXBpbGF0aW9uCgppZ3Rfa21zLmM6MzMyOjU6IHdhcm5pbmc6IG5vIHByZXZpb3Vz IHByb3RvdHlwZSBmb3IK4oCYa21zdGVzdF9waXBlX3RvX2luZGV44oCZIFstV21pc3NpbmctcHJv dG90eXBlc10KwqBpbnQga21zdGVzdF9waXBlX3RvX2luZGV4KGNoYXIgcGlwZSkKwqAKYW5kCgpr bXNfZmVuY2VfcGluX2xlYWsuYzoxMTg6NDE6IGVycm9yOiDigJhJR1RfUExBTkVfUFJJTUFSWeKA mSB1bmRlY2xhcmVkCihmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKwqAgcHJpbWFyeSA9IGln dF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwrCoApUaGlzIHdv dWxkIHJlcXVpcmUgdGhhdCB3ZSBtb3ZlIGFsbCBJR1RfUExBTkVfUFJJTUFSWSByZWZlcmVuY2Vz IHRvCkRSTV9QTEFORV9UWVBFX1BSSU1BUlkKCk9uIEZyaSwgMjAxNy0wMS0yMCBhdCAxMjo0NSAt MDUwMCwgUm9iZXJ0IEZvc3Mgd3JvdGU6Cj4gSW4gdXBjb21pbmcgZHJtLW1pc2MtbmV4dCBjaGFu Z2VzLCB0aGUgbnVtYmVyIG9mIHBsYW5lcyBwZXIgcGlwZSBoYXMKPiBiZWVuIGluY3JlYXNlZCBh cyBtb3JlIHRoYW4gb25lIHByaW1hcnkgcGxhbmUgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aAo+IGEg cGlwZS4KPiAKPiBUaGUgc2ltcGxlIGZpeCBmb3IgdGhpcyB3b3VsZCBiZSB0byBzaW1wbHkgYnVt cCBoYXJkY29kZWQgdmFsdWUgZm9yCj4gbnVtYmVyIG9mIGZyYW1lcyBwZXIgcGlwZS4KPiBCdXQg YSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gYWRkIHN1cHBvcnQgZm9yIGR5bmFtaWMgbnVt YmVyIG9mCj4gcGxhbmVzIHBlciBwaXBlIHRvIGktZy10Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IFJv YmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tPgo+IC0tLQo+IMKgbGliL2lndF9r bXMuYyB8IDE1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0KPiAtLS0tLS0tLS0tCj4gwqBsaWIvaWd0X2ttcy5oIHzCoMKgMzIgKysrKy0tLS0tLS0tCj4g wqAyIGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25zKCspLCA3NSBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuYyBiL2xpYi9pZ3Rfa21zLmMKPiBpbmRleCA4ZmE0 MGMyOC4uNThlNjJlMmIgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9rbXMuYwo+ICsrKyBiL2xpYi9p Z3Rfa21zLmMKPiBAQCAtMzQ3LDI0ICszNDcsMTcgQEAgaW50IGttc3Rlc3RfcGlwZV90b19pbmRl eChjaGFyIHBpcGUpCj4gwqAgKgo+IMKgICogUmV0dXJuczogU3RyaW5nIHJlcHJlc250aW5nIEBw aXBlLCBlLmcuICJwbGFuZTEiLgo+IMKgICovCj4gLWNvbnN0IGNoYXIgKmttc3Rlc3RfcGxhbmVf bmFtZShlbnVtIGlndF9wbGFuZSBwbGFuZSkKPiArY29uc3QgY2hhciAqa21zdGVzdF9wbGFuZV90 eXBlX25hbWUoaW50IHBsYW5lX3R5cGUpCj4gwqB7Cj4gwqAJc3RhdGljIGNvbnN0IGNoYXIgKm5h bWVzW10gPSB7Cj4gLQkJW0lHVF9QTEFORV8xXSA9ICJwbGFuZTEiLAo+IC0JCVtJR1RfUExBTkVf Ml0gPSAicGxhbmUyIiwKPiAtCQlbSUdUX1BMQU5FXzNdID0gInBsYW5lMyIsCj4gLQkJW0lHVF9Q TEFORV80XSA9ICJwbGFuZTQiLAo+IC0JCVtJR1RfUExBTkVfNV0gPSAicGxhbmU1IiwKPiAtCQlb SUdUX1BMQU5FXzZdID0gInBsYW5lNiIsCj4gLQkJW0lHVF9QTEFORV83XSA9ICJwbGFuZTciLAo+ IC0JCVtJR1RfUExBTkVfOF0gPSAicGxhbmU4IiwKPiAtCQlbSUdUX1BMQU5FXzldID0gInBsYW5l OSIsCj4gLQkJW0lHVF9QTEFORV9DVVJTT1JdID0gImN1cnNvciIsCj4gKwkJW0RSTV9QTEFORV9U WVBFX09WRVJMQVldID0gIm92ZXJsYXkiLAo+ICsJCVtEUk1fUExBTkVfVFlQRV9QUklNQVJZXSA9 ICJwcmltYXJ5IiwKPiArCQlbRFJNX1BMQU5FX1RZUEVfQ1VSU09SXSA9ICJjdXJzb3IiLAo+IMKg CX07Cj4gwqAKPiAtCWlndF9hc3NlcnQocGxhbmUgPCBBUlJBWV9TSVpFKG5hbWVzKSAmJiBuYW1l c1twbGFuZV0pOwo+ICsJaWd0X2Fzc2VydChwbGFuZV90eXBlIDwgQVJSQVlfU0laRShuYW1lcykg JiYKPiBuYW1lc1twbGFuZV90eXBlXSk7Cj4gwqAKPiAtCXJldHVybiBuYW1lc1twbGFuZV07Cj4g KwlyZXR1cm4gbmFtZXNbcGxhbmVfdHlwZV07Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBjb25zdCBj aGFyICptb2RlX3N0ZXJlb19uYW1lKGNvbnN0IGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKPiBAQCAt MTUzMiwxNCArMTUyNSwxNyBAQCB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKgCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5uX3Bp cGVzOyBpKyspIHsKPiDCoAkJaWd0X3BpcGVfdCAqcGlwZSA9ICZkaXNwbGF5LT5waXBlc1tpXTsK PiDCoAkJaWd0X3BsYW5lX3QgKnBsYW5lOwo+IC0JCWludCBwID0gSUdUX1BMQU5FXzI7Cj4gKwkJ aW50IHAgPSAxOwo+IMKgCQlpbnQgaiwgdHlwZTsKPiAtCQl1aW50OF90IG5fcGxhbmVzID0gMDsK PiArCQl1aW50OF90IGxhc3RfcGxhbmUgPSAwLCBuX3BsYW5lcyA9IDA7Cj4gwqAJCXVpbnQ2NF90 IHByb3BfdmFsdWU7Cj4gwqAKPiDCoAkJcGlwZS0+Y3J0Y19pZCA9IHJlc291cmNlcy0+Y3J0Y3Nb aV07Cj4gwqAJCXBpcGUtPmRpc3BsYXkgPSBkaXNwbGF5Owo+IMKgCQlwaXBlLT5waXBlID0gaTsK PiArCQlwaXBlLT5wbGFuZV9jdXJzb3IgPSAtMTsKPiArCQlwaXBlLT5wbGFuZV9wcmltYXJ5ID0g LTE7Cj4gKwkJcGlwZS0+cGxhbmVzID0gTlVMTDsKPiDCoAo+IMKgCQlnZXRfY3J0Y19wcm9wZXJ0 eShkaXNwbGF5LT5kcm1fZmQsIHBpcGUtPmNydGNfaWQsCj4gwqAJCQkJwqDCoMKgwqAiYmFja2dy b3VuZF9jb2xvciIsCj4gQEAgLTE1NjUsNiArMTU2MSwyNyBAQCB2b2lkIGlndF9kaXNwbGF5X2lu aXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKgCj4gwqAJCWlndF9h dG9taWNfZmlsbF9waXBlX3Byb3BzKGRpc3BsYXksIHBpcGUsCj4gSUdUX05VTV9DUlRDX1BST1BT LCBpZ3RfY3J0Y19wcm9wX25hbWVzKTsKPiDCoAo+ICsJCS8qIGNvdW50IG51bWJlciBvZiB2YWxp ZCBwbGFuZXMgKi8KPiArCQlmb3IgKGogPSAwOyBqIDwgcGxhbmVfcmVzb3VyY2VzLT5jb3VudF9w bGFuZXM7IGorKykKPiB7Cj4gKwkJCWRybU1vZGVQbGFuZSAqZHJtX3BsYW5lOwo+ICsKPiArCQkJ ZHJtX3BsYW5lID0gZHJtTW9kZUdldFBsYW5lKGRpc3BsYXktPmRybV9mZCwKPiArCQkJCQkJwqDC oMKgwqBwbGFuZV9yZXNvdXJjZXMtCj4gPnBsYW5lc1tqXSk7Cj4gKwkJCWlndF9hc3NlcnQoZHJt X3BsYW5lKTsKPiArCj4gKwkJCWlmICghKGRybV9wbGFuZS0+cG9zc2libGVfY3J0Y3MgJiAoMSA8 PCBpKSkpCj4gewo+ICsJCQkJZHJtTW9kZUZyZWVQbGFuZShkcm1fcGxhbmUpOwo+ICsJCQkJY29u dGludWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gKwkJwqDCoMKgwqBuX3Bs YW5lcysrOwo+ICsJCX0KPiArCj4gKwkJaWd0X2Fzc2VydF9sdGUoMCwgbl9wbGFuZXMpOwo+ICsJ CXBpcGUtPnBsYW5lcyA9IGNhbGxvYyhzaXplb2YoaWd0X3BsYW5lX3QpLAo+IG5fcGxhbmVzKTsK PiArCQlpZ3RfYXNzZXJ0X2YocGlwZS0+cGxhbmVzLCAiRmFpbGVkIHRvIGFsbG9jYXRlCj4gbWVt b3J5IGZvciAlZCBwbGFuZXNcbiIsIG5fcGxhbmVzKTsKPiArCQlsYXN0X3BsYW5lID0gbl9wbGFu ZXMgLSAxOwo+ICsKPiDCoAkJLyogYWRkIHRoZSBwbGFuZXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRo IHRoYXQgcGlwZSAqLwo+IMKgCQlmb3IgKGogPSAwOyBqIDwgcGxhbmVfcmVzb3VyY2VzLT5jb3Vu dF9wbGFuZXM7IGorKykKPiB7Cj4gwqAJCQlkcm1Nb2RlUGxhbmUgKmRybV9wbGFuZTsKPiBAQCAt MTU4MiwyMSArMTU5OSwyNCBAQCB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKgCQkJCQkJwqDCoHBsYW5lX3Jlc291cmNlcy0KPiA+ cGxhbmVzW2pdKTsKPiDCoAkJCXN3aXRjaCAodHlwZSkgewo+IMKgCQkJY2FzZSBEUk1fUExBTkVf VFlQRV9QUklNQVJZOgo+IC0JCQkJcGxhbmUgPSAmcGlwZS0KPiA+cGxhbmVzW0lHVF9QTEFORV9Q UklNQVJZXTsKPiAtCQkJCXBsYW5lLT5pc19wcmltYXJ5ID0gMTsKPiAtCQkJCXBsYW5lLT5pbmRl eCA9IElHVF9QTEFORV9QUklNQVJZOwo+ICsJCQkJaWYgKHBpcGUtPnBsYW5lX3ByaW1hcnkgPT0g LTEpIHsKPiArCQkJCQlwbGFuZSA9ICZwaXBlLT5wbGFuZXNbMF07Cj4gKwkJCQkJcGxhbmUtPmlu ZGV4ID0gMDsKPiArCQkJCQlwaXBlLT5wbGFuZV9wcmltYXJ5ID0gMDsKPiArCQkJCX0gZWxzZSB7 Cj4gKwkJCQkJcGxhbmUgPSAmcGlwZS0+cGxhbmVzW3BdOwo+ICsJCQkJCXBsYW5lLT5pbmRleCA9 IHArKzsKPiArCQkJCX0KPiDCoAkJCQlicmVhazsKPiDCoAkJCWNhc2UgRFJNX1BMQU5FX1RZUEVf Q1VSU09SOgo+IC0JCQkJLyoKPiAtCQkJCcKgKiBDdXJzb3Igc2hvdWxkIGJlIHRoZSBoaWdoZXN0 Cj4gaW5kZXggaW4gb3VyCj4gLQkJCQnCoCogaW50ZXJuYWwgbGlzdCwgYnV0IHdlIGRvbid0IGtu b3cKPiB3aGF0IHRoYXQKPiAtCQkJCcKgKiBpcyB5ZXQuwqDCoEp1c3Qgc3RpY2sgaXQgaW4gdGhl Cj4gbGFzdCBzbG90Cj4gLQkJCQnCoCogZm9yIG5vdyBhbmQgd2UnbGwgbW92ZSBpdCBsYXRlciwK PiBpZgo+IC0JCQkJwqAqIG5lY2Vzc2FyeS4KPiAtCQkJCcKgKi8KPiAtCQkJCXBsYW5lID0gJnBp cGUtCj4gPnBsYW5lc1tJR1RfUExBTkVfQ1VSU09SXTsKPiAtCQkJCXBsYW5lLT5pc19jdXJzb3Ig PSAxOwo+IC0JCQkJcGxhbmUtPmluZGV4ID0gSUdUX1BMQU5FX0NVUlNPUjsKPiArCQkJCWlmIChw aXBlLT5wbGFuZV9jdXJzb3IgPT0gLTEpIHsKPiArCQkJCQlwbGFuZSA9ICZwaXBlLQo+ID5wbGFu ZXNbbGFzdF9wbGFuZV07Cj4gKwkJCQkJcGxhbmUtPmluZGV4ID0gbGFzdF9wbGFuZTsKPiArCQkJ CQlwaXBlLT5wbGFuZV9jdXJzb3IgPQo+IGxhc3RfcGxhbmU7Cj4gKwkJCQl9IGVsc2Ugewo+ICsJ CQkJCXBsYW5lID0gJnBpcGUtPnBsYW5lc1twXTsKPiArCQkJCQlwbGFuZS0+aW5kZXggPSBwKys7 Cj4gKwkJCQl9Cj4gwqAJCQkJZGlzcGxheS0+aGFzX2N1cnNvcl9wbGFuZSA9IHRydWU7Cj4gwqAJ CQkJYnJlYWs7Cj4gwqAJCQlkZWZhdWx0Ogo+IEBAIC0xNjA1LDcgKzE2MjUsNyBAQCB2b2lkIGln dF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKg CQkJCWJyZWFrOwo+IMKgCQkJfQo+IMKgCj4gLQkJCW5fcGxhbmVzKys7Cj4gKwkJCXBsYW5lLT50 eXBlID0gdHlwZTsKPiDCoAkJCXBsYW5lLT5waXBlID0gcGlwZTsKPiDCoAkJCXBsYW5lLT5kcm1f cGxhbmUgPSBkcm1fcGxhbmU7Cj4gwqAKPiBAQCAtMTYyNiw3ICsxNjQ2LDcgQEAgdm9pZCBpZ3Rf ZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4gaW50IGRybV9mZCkKPiDCoAkJ wqAqIEF0IHRoZSBiYXJlIG1pbmltdW0sIHdlIHNob3VsZCBleHBlY3QgdG8gaGF2ZSBhCj4gcHJp bWFyeQo+IMKgCQnCoCogcGxhbmUKPiDCoAkJwqAqLwo+IC0JCWlndF9hc3NlcnQocGlwZS0KPiA+ cGxhbmVzW0lHVF9QTEFORV9QUklNQVJZXS5kcm1fcGxhbmUpOwo+ICsJCWlndF9hc3NlcnQocGlw ZS0+cGxhbmVzW3BpcGUtCj4gPnBsYW5lX3ByaW1hcnldLmRybV9wbGFuZSk7Cj4gwqAKPiDCoAkJ aWYgKGRpc3BsYXktPmhhc19jdXJzb3JfcGxhbmUpIHsKPiDCoAkJCS8qCj4gQEAgLTE2MzQsMTEg KzE2NTQsMTEgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXks Cj4gaW50IGRybV9mZCkKPiDCoAkJCcKgKiBvbmx5IDEgc3ByaXRlLCB0aGF0J3MgdGhlIHdyb25n IHNsb3QgYW5kCj4gd2UgbmVlZCB0bwo+IMKgCQkJwqAqIG1vdmUgaXQgZG93bi4KPiDCoAkJCcKg Ki8KPiAtCQkJaWYgKHAgIT0gSUdUX1BMQU5FX0NVUlNPUikgewo+ICsJCQlpZiAocCAhPSBsYXN0 X3BsYW5lKSB7Cj4gwqAJCQkJcGlwZS0+cGxhbmVzW3BdID0KPiAtCQkJCQlwaXBlLQo+ID5wbGFu ZXNbSUdUX1BMQU5FX0NVUlNPUl07Cj4gKwkJCQkJcGlwZS0+cGxhbmVzW2xhc3RfcGxhbmVdOwo+ IMKgCQkJCXBpcGUtPnBsYW5lc1twXS5pbmRleCA9IHA7Cj4gLQkJCQltZW1zZXQoJnBpcGUtCj4g PnBsYW5lc1tJR1RfUExBTkVfQ1VSU09SXSwgMCwKPiArCQkJCW1lbXNldCgmcGlwZS0+cGxhbmVz W2xhc3RfcGxhbmVdLCAwLAo+IMKgCQkJCcKgwqDCoMKgwqDCoMKgc2l6ZW9mICpwbGFuZSk7Cj4g wqAJCQl9Cj4gwqAJCX0gZWxzZSB7Cj4gQEAgLTE2NDYsNyArMTY2Niw3IEBAIHZvaWQgaWd0X2Rp c3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+IGludCBkcm1fZmQpCj4gwqAJCQlw bGFuZSA9ICZwaXBlLT5wbGFuZXNbcF07Cj4gwqAJCQlwbGFuZS0+cGlwZSA9IHBpcGU7Cj4gwqAJ CQlwbGFuZS0+aW5kZXggPSBwOwo+IC0JCQlwbGFuZS0+aXNfY3Vyc29yID0gdHJ1ZTsKPiArCQkJ cGxhbmUtPnR5cGUgPSBEUk1fUExBTkVfVFlQRV9DVVJTT1I7Cj4gwqAJCX0KPiDCoAo+IMKgCQlw aXBlLT5uX3BsYW5lcyA9IG5fcGxhbmVzOwo+IEBAIC0xNjU0LDkgKzE2NzQsNiBAQCB2b2lkIGln dF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKg CQlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIGksIHBsYW5lKQo+IMKgCQkJcGxhbmUt PmZiX2NoYW5nZWQgPSB0cnVlOwo+IMKgCj4gLQkJLyogbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJm bG93IHRoZSBwbGFuZSBhcnJheSAqLwo+IC0JCWlndF9hc3NlcnRfbHRlKHBpcGUtPm5fcGxhbmVz LCBJR1RfTUFYX1BMQU5FUyk7Cj4gLQo+IMKgCQlwaXBlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOwo+ IMKgCX0KPiDCoAo+IEBAIC0xNzA5LDYgKzE3MjYsOSBAQCBzdGF0aWMgdm9pZCBpZ3RfcGlwZV9m aW5pKGlndF9waXBlX3QgKnBpcGUpCj4gwqAJCQlwbGFuZS0+ZHJtX3BsYW5lID0gTlVMTDsKPiDC oAkJfQo+IMKgCX0KPiArCj4gKwlmcmVlKHBpcGUtPnBsYW5lcyk7Cj4gKwlwaXBlLT5wbGFuZXMg PSBOVUxMOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgdm9pZCBpZ3Rfb3V0cHV0X2ZpbmkoaWd0X291 dHB1dF90ICpvdXRwdXQpCj4gQEAgLTE3OTcsMjAgKzE4MTcsNDEgQEAgc3RhdGljIGlndF9waXBl X3QKPiAqaWd0X291dHB1dF9nZXRfZHJpdmluZ19waXBlKGlndF9vdXRwdXRfdCAqb3V0cHV0KQo+ IMKgCXJldHVybiAmZGlzcGxheS0+cGlwZXNbcGlwZV07Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIGln dF9wbGFuZV90ICppZ3RfcGlwZV9nZXRfcGxhbmUoaWd0X3BpcGVfdCAqcGlwZSwgZW51bQo+IGln dF9wbGFuZSBwbGFuZSkKPiArc3RhdGljIGlndF9wbGFuZV90ICppZ3RfcGlwZV9nZXRfcGxhbmUo aWd0X3BpcGVfdCAqcGlwZSwgaW50Cj4gcGxhbmVfaWR4KQo+IMKgewo+IC0JaW50IGlkeDsKPiAr CWlndF9hc3NlcnRfZihwbGFuZV9pZHggPj0gMCAmJiBwbGFuZV9pZHggPCBwaXBlLT5uX3BsYW5l cywKPiArCQkiVmFsaWQgcGlwZS0+cGxhbmVzIHBsYW5lX2lkeCBub3QgZm91bmQsCj4gcGxhbmVf aWR4PSVkIG5fcGxhbmVzPSVkIiwKPiArCQlwbGFuZV9pZHgsIHBpcGUtPm5fcGxhbmVzKTsKPiDC oAo+IC0JLyogQ3Vyc29yIHBsYW5lIGlzIGFsd2F5cyB0aGUgaGlnaGVzdCBpbmRleCAqLwo+IC0J aWYgKHBsYW5lID09IElHVF9QTEFORV9DVVJTT1IpCj4gLQkJaWR4ID0gcGlwZS0+bl9wbGFuZXMg LSAxOwo+IC0JZWxzZSB7Cj4gLQkJaWd0X2Fzc2VydF9mKHBsYW5lID49IDAgJiYgcGxhbmUgPCAo cGlwZS0+bl9wbGFuZXMpLAo+IC0JCQnCoMKgwqDCoMKgInBsYW5lPSVkXG4iLCBwbGFuZSk7Cj4g LQkJaWR4ID0gcGxhbmU7Cj4gKwlyZXR1cm4gJnBpcGUtPnBsYW5lc1twbGFuZV9pZHhdOwo+ICt9 Cj4gKwo+ICsKPiAraWd0X3BsYW5lX3QgKmlndF9waXBlX2dldF9wbGFuZV90eXBlKGlndF9waXBl X3QgKnBpcGUsIGludAo+IHBsYW5lX3R5cGUpCj4gK3sKPiArCWludCBpLCBwbGFuZV9pZHggPSAt MTsKPiArCj4gKwlzd2l0Y2gocGxhbmVfdHlwZSkgewo+ICsJY2FzZSBEUk1fUExBTkVfVFlQRV9D VVJTT1I6Cj4gKwkJcGxhbmVfaWR4ID0gcGlwZS0+cGxhbmVfY3Vyc29yOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOgo+ICsJCXBsYW5lX2lkeCA9IHBpcGUtPnBs YW5lX3ByaW1hcnk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6 Cj4gKwkJZm9yKGkgPSAwOyBpIDwgcGlwZS0+bl9wbGFuZXM7IGkrKykKPiArCQkJaWYgKHBpcGUt PnBsYW5lc1tpXS50eXBlID09Cj4gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkKPiArCQkJwqDCoMKg wqBwbGFuZV9pZHggPSBpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlicmVhazsKPiDC oAl9Cj4gwqAKPiAtCXJldHVybiAmcGlwZS0+cGxhbmVzW2lkeF07Cj4gKwlpZ3RfYXNzZXJ0X2Yo cGxhbmVfaWR4ID49IDAgJiYgcGxhbmVfaWR4IDwgcGlwZS0+bl9wbGFuZXMsCj4gKwkJIlZhbGlk IHBpcGUtPnBsYW5lcyBpZHggbm90IGZvdW5kLiBwbGFuZV9pZHg9JWQKPiBwbGFuZV90eXBlPSVk IG5fcGxhbmVzPSVkXG4iLAo+ICsJCXBsYW5lX2lkeCwgcGxhbmVfdHlwZSwgcGlwZS0+bl9wbGFu ZXMpOwo+ICsKPiArCXJldHVybiAmcGlwZS0+cGxhbmVzW3BsYW5lX2lkeF07Cj4gwqB9Cj4gwqAK PiDCoHN0YXRpYyBpZ3Rfb3V0cHV0X3QgKmlndF9waXBlX2dldF9vdXRwdXQoaWd0X3BpcGVfdCAq cGlwZSkKPiBAQCAtMjE1NSw5ICsyMTk2LDkgQEAgc3RhdGljIGludCBpZ3RfcGxhbmVfY29tbWl0 KGlndF9wbGFuZV90ICpwbGFuZSwKPiDCoAkJCcKgwqDCoMKgZW51bSBpZ3RfY29tbWl0X3N0eWxl IHMsCj4gwqAJCQnCoMKgwqDCoGJvb2wgZmFpbF9vbl9lcnJvcikKPiDCoHsKPiAtCWlmIChwbGFu ZS0+aXNfY3Vyc29yICYmIHMgPT0gQ09NTUlUX0xFR0FDWSkgewo+ICsJaWYgKHBsYW5lLT50eXBl ID09IERSTV9QTEFORV9UWVBFX0NVUlNPUiAmJiBzID09Cj4gQ09NTUlUX0xFR0FDWSkgewo+IMKg CQlyZXR1cm4gaWd0X2N1cnNvcl9jb21taXRfbGVnYWN5KHBsYW5lLCBwaXBlLAo+IGZhaWxfb25f ZXJyb3IpOwo+IC0JfSBlbHNlIGlmIChwbGFuZS0+aXNfcHJpbWFyeSAmJiBzID09IENPTU1JVF9M RUdBQ1kpIHsKPiArCX0gZWxzZSBpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWSAmJiBzID09Cj4gQ09NTUlUX0xFR0FDWSkgewo+IMKgCQlyZXR1cm4gaWd0X3ByaW1hcnlf cGxhbmVfY29tbWl0X2xlZ2FjeShwbGFuZSwgcGlwZSwKPiDCoAkJCQkJCcKgwqDCoMKgwqDCoMKg ZmFpbF9vbl9lcnJvcgo+ICk7Cj4gwqAJfSBlbHNlIHsKPiBAQCAtMjM3NCw3ICsyNDE1LDkgQEAg ZGlzcGxheV9jb21taXRfY2hhbmdlZChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+IGVudW0gaWd0 X2NvbW1pdF9zdHlsZSBzKQo+IMKgCQkJcGxhbmUtPnBvc2l0aW9uX2NoYW5nZWQgPSBmYWxzZTsK PiDCoAkJCXBsYW5lLT5zaXplX2NoYW5nZWQgPSBmYWxzZTsKPiDCoAo+IC0JCQlpZiAocyAhPSBD T01NSVRfTEVHQUNZIHx8ICEocGxhbmUtCj4gPmlzX3ByaW1hcnkgfHwgcGxhbmUtPmlzX2N1cnNv cikpCj4gKwkJCWlmIChzICE9IENPTU1JVF9MRUdBQ1kgfHwKPiArCQkJwqDCoMKgwqAhKHBsYW5l LT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkKPiB8fAo+ICsJCQnCoMKgwqDCoMKgwqBw bGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpKQo+IMKgCQkJCXBsYW5lLT5yb3Rh dGlvbl9jaGFuZ2VkID0gZmFsc2U7Cj4gwqAJCX0KPiDCoAl9Cj4gQEAgLTI2NTQsMTQgKzI2OTcs MjQgQEAgdm9pZCBpZ3Rfb3V0cHV0X3NldF9zY2FsaW5nX21vZGUoaWd0X291dHB1dF90Cj4gKm91 dHB1dCwgdWludDY0X3Qgc2NhbGluZ19tb2RlKQo+IMKgCWlndF9yZXF1aXJlKG91dHB1dC0KPiA+ Y29uZmlnLmF0b21pY19wcm9wc19jb25uZWN0b3JbSUdUX0NPTk5FQ1RPUl9TQ0FMSU5HX01PREVd KTsKPiDCoH0KPiDCoAo+IC1pZ3RfcGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmUoaWd0X291 dHB1dF90ICpvdXRwdXQsIGVudW0KPiBpZ3RfcGxhbmUgcGxhbmUpCj4gK2lndF9wbGFuZV90ICpp Z3Rfb3V0cHV0X2dldF9wbGFuZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaW50Cj4gcGxhbmVfaWR4 KQo+ICt7Cj4gKwlpZ3RfcGlwZV90ICpwaXBlOwo+ICsKPiArCXBpcGUgPSBpZ3Rfb3V0cHV0X2dl dF9kcml2aW5nX3BpcGUob3V0cHV0KTsKPiArCWlndF9hc3NlcnQocGlwZSk7Cj4gKwo+ICsJcmV0 dXJuIGlndF9waXBlX2dldF9wbGFuZShwaXBlLCBwbGFuZV9pZHgpOwo+ICt9Cj4gKwo+ICtpZ3Rf cGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwg aW50Cj4gcGxhbmVfdHlwZSkKPiDCoHsKPiDCoAlpZ3RfcGlwZV90ICpwaXBlOwo+IMKgCj4gwqAJ cGlwZSA9IGlndF9vdXRwdXRfZ2V0X2RyaXZpbmdfcGlwZShvdXRwdXQpOwo+IMKgCWlndF9hc3Nl cnQocGlwZSk7Cj4gwqAKPiAtCXJldHVybiBpZ3RfcGlwZV9nZXRfcGxhbmUocGlwZSwgcGxhbmUp Owo+ICsJcmV0dXJuIGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBpcGUsIHBsYW5lX3R5cGUpOwo+ IMKgfQo+IMKgCj4gwqB2b2lkIGlndF9wbGFuZV9zZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBz dHJ1Y3QgaWd0X2ZiICpmYikKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuaCBiL2xpYi9pZ3Rf a21zLmgKPiBpbmRleCA4NTljNzlhYS4uZGMxNzJlYzkgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9r bXMuaAo+ICsrKyBiL2xpYi9pZ3Rfa21zLmgKPiBAQCAtNTcsMjUgKzU3LDcgQEAgZW51bSBwaXBl IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqBJOTE1X01BWF9QSVBFUwo+IMKgfTsKPiDCoGNvbnN0IGNo YXIgKmttc3Rlc3RfcGlwZV9uYW1lKGVudW0gcGlwZSBwaXBlKTsKPiAtaW50IGttc3Rlc3RfcGlw ZV90b19pbmRleChjaGFyIHBpcGUpOwo+IC0KPiAtLyogV2UgbmFtZXNwYWNlIHRoaXMgZW51bSB0 byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgQW5kcm9pZAo+IGk5MTVfZHJtLmggKi8KPiAtZW51bSBp Z3RfcGxhbmUgewo+IC0JSUdUX1BMQU5FXzEgPSAwLAo+IC0JSUdUX1BMQU5FX1BSSU1BUlkgPSBJ R1RfUExBTkVfMSwKPiAtCUlHVF9QTEFORV8yLAo+IC0JSUdUX1BMQU5FXzMsCj4gLQlJR1RfUExB TkVfNCwKPiAtCUlHVF9QTEFORV81LAo+IC0JSUdUX1BMQU5FXzYsCj4gLQlJR1RfUExBTkVfNywK PiAtCUlHVF9QTEFORV84LAo+IC0JSUdUX1BMQU5FXzksCj4gLQlJR1RfUExBTkVfQ1VSU09SLCAv KiBJR1RfUExBTkVfQ1VSU09SIGlzIGFsd2F5cyB0aGUgbGFzdAo+IHBsYW5lLiAqLwo+IC0JSUdU X01BWF9QTEFORVMsCj4gLX07Cj4gLQo+IC1jb25zdCBjaGFyICprbXN0ZXN0X3BsYW5lX25hbWUo ZW51bSBpZ3RfcGxhbmUgcGxhbmUpOwo+ICtjb25zdCBjaGFyICprbXN0ZXN0X3BsYW5lX3R5cGVf bmFtZShpbnQgcGxhbmVfdHlwZSk7Cj4gwqAKPiDCoGVudW0gcG9ydCB7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgUE9SVF9BID0gMCwKPiBAQCAtMjU3LDggKzIzOSw3IEBAIHR5cGVkZWYgc3RydWN0IHsK PiDCoAlpZ3RfcGlwZV90ICpwaXBlOwo+IMKgCWludCBpbmRleDsKPiDCoAkvKiBjYXBhYmlsaXRp ZXMgKi8KPiAtCXVuc2lnbmVkIGludCBpc19wcmltYXJ5wqDCoMKgwqDCoMKgwqA6IDE7Cj4gLQl1 bnNpZ25lZCBpbnQgaXNfY3Vyc29ywqDCoMKgwqDCoMKgwqDCoDogMTsKPiArCWludCB0eXBlOwo+ IMKgCS8qIHN0YXRlIHRyYWNraW5nICovCj4gwqAJdW5zaWduZWQgaW50IGZiX2NoYW5nZWTCoMKg wqDCoMKgwqDCoDogMTsKPiDCoAl1bnNpZ25lZCBpbnQgcG9zaXRpb25fY2hhbmdlZCA6IDE7Cj4g QEAgLTI5Myw4ICsyNzQsMTEgQEAgc3RydWN0IGlndF9waXBlIHsKPiDCoAlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5Owo+IMKgCWVudW0gcGlwZSBwaXBlOwo+IMKgCWJvb2wgZW5hYmxlZDsKPiArCj4g wqAJaW50IG5fcGxhbmVzOwo+IC0JaWd0X3BsYW5lX3QgcGxhbmVzW0lHVF9NQVhfUExBTkVTXTsK PiArCWludCBwbGFuZV9jdXJzb3I7Cj4gKwlpbnQgcGxhbmVfcHJpbWFyeTsKPiArCWlndF9wbGFu ZV90ICpwbGFuZXM7Cj4gwqAKPiDCoAl1aW50MzJfdCBhdG9taWNfcHJvcHNfY3J0Y1tJR1RfTlVN X0NSVENfUFJPUFNdOwo+IMKgCj4gQEAgLTM1NCw3ICszMzgsOSBAQCBkcm1Nb2RlTW9kZUluZm8g KmlndF9vdXRwdXRfZ2V0X21vZGUoaWd0X291dHB1dF90Cj4gKm91dHB1dCk7Cj4gwqB2b2lkIGln dF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJtTW9kZU1vZGVJ bmZvCj4gKm1vZGUpOwo+IMKgdm9pZCBpZ3Rfb3V0cHV0X3NldF9waXBlKGlndF9vdXRwdXRfdCAq b3V0cHV0LCBlbnVtIHBpcGUgcGlwZSk7Cj4gwqB2b2lkIGlndF9vdXRwdXRfc2V0X3NjYWxpbmdf bW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdWludDY0X3QKPiBzY2FsaW5nX21vZGUpOwo+IC1p Z3RfcGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVu dW0KPiBpZ3RfcGxhbmUgcGxhbmUpOwo+ICtpZ3RfcGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxh bmUoaWd0X291dHB1dF90ICpvdXRwdXQsIGludAo+IHBsYW5lX2lkeCk7Cj4gK2lndF9wbGFuZV90 ICppZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpbnQKPiBw bGFuZV90eXBlKTsKPiAraWd0X3BsYW5lX3QgKmlndF9waXBlX2dldF9wbGFuZV90eXBlKGlndF9w aXBlX3QgKnBpcGUsIGludAo+IHBsYW5lX3R5cGUpOwo+IMKgYm9vbCBpZ3RfcGlwZV9nZXRfcHJv cGVydHkoaWd0X3BpcGVfdCAqcGlwZSwgY29uc3QgY2hhciAqbmFtZSwKPiDCoAkJCcKgwqDCoHVp bnQzMl90ICpwcm9wX2lkLCB1aW50NjRfdCAqdmFsdWUsCj4gwqAJCQnCoMKgwqBkcm1Nb2RlUHJv cGVydHlQdHIgKnByb3ApOwotLSAKTWlrYSBLYWhvbGEgLSBJbnRlbCBPVEMKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=