From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v2 04/33] lib/igt_kms: Implement dynamic plane count support Date: Wed, 25 Jan 2017 12:28:32 +0200 Message-ID: <1485340112.9014.76.camel@intel.com> References: <20170124233400.5053-1-robert.foss@collabora.com> <20170124233400.5053-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1AC576E971 for ; Wed, 25 Jan 2017 10:27:53 +0000 (UTC) In-Reply-To: <20170124233400.5053-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 , Petri Latvala List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE3LTAxLTI0IGF0IDE4OjMzIC0wNTAwLCBSb2JlcnQgRm9zcyB3cm90ZToKPiBJ biB1cGNvbWluZyBkcm0tbWlzYy1uZXh0IGNoYW5nZXMsIHRoZSBudW1iZXIgb2YgcGxhbmVzIHBl ciBwaXBlIGhhcwo+IGJlZW4gaW5jcmVhc2VkIGFzIG1vcmUgdGhhbiBvbmUgcHJpbWFyeSBwbGFu ZSBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoCj4gYSBwaXBlLgo+IAo+IFRoZSBzaW1wbGUgZml4IGZv ciB0aGlzIHdvdWxkIGJlIHRvIHNpbXBseSBidW1wIGhhcmRjb2RlZCB2YWx1ZSBmb3IKPiBudW1i ZXIgb2YgZnJhbWVzIHBlciBwaXBlLgo+IEJ1dCBhIGJldHRlciBzb2x1dGlvbiB3b3VsZCBiZSB0 byBhZGQgc3VwcG9ydCBmb3IgZHluYW1pYyBudW1iZXIgb2YKPiBwbGFuZXMgcGVyIHBpcGUgdG8g aS1nLXQuCj4gCj4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxh Ym9yYS5jb20+Cj4gLS0tCj4gwqBsaWIvaWd0X2ttcy5jIHwgMTYwICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPiAtLS0tLS0tLS0tLS0KPiDCoGxpYi9pZ3Rf a21zLmggfMKgwqAzNSArKysrKysrKy0tLS0tCj4gwqAyIGZpbGVzIGNoYW5nZWQsIDE0MiBpbnNl cnRpb25zKCspLCA1MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMu YyBiL2xpYi9pZ3Rfa21zLmMKPiBpbmRleCA4ZmE0MGMyOC4uYmZlNWVhYjQgMTAwNjQ0Cj4gLS0t IGEvbGliL2lndF9rbXMuYwo+ICsrKyBiL2xpYi9pZ3Rfa21zLmMKPiBAQCAtMzQ1LDcgKzM0NSw3 IEBAIGludCBrbXN0ZXN0X3BpcGVfdG9faW5kZXgoY2hhciBwaXBlKQo+IMKgICoga21zdGVzdF9w bGFuZV9uYW1lOgo+IMKgICogQHBsYW5lOiBkaXNwbGF5IHBsYW5lCj4gwqAgKgo+IC0gKiBSZXR1 cm5zOiBTdHJpbmcgcmVwcmVzbnRpbmcgQHBpcGUsIGUuZy4gInBsYW5lMSIuCj4gKyAqIFJldHVy bnM6IFN0cmluZyByZXByZXNlbnRpbmcgQHBsYW5lLCBlLmcuICJwbGFuZTEiLgo+IMKgICovCj4g wqBjb25zdCBjaGFyICprbXN0ZXN0X3BsYW5lX25hbWUoZW51bSBpZ3RfcGxhbmUgcGxhbmUpCj4g wqB7Cj4gQEAgLTM2Nyw2ICszNjcsMjUgQEAgY29uc3QgY2hhciAqa21zdGVzdF9wbGFuZV9uYW1l KGVudW0gaWd0X3BsYW5lCj4gcGxhbmUpCj4gwqAJcmV0dXJuIG5hbWVzW3BsYW5lXTsKPiDCoH0K PiDCoAo+ICsvKioKPiArICoga21zdGVzdF9wbGFuZV90eXBlX25hbWU6Cj4gKyAqIEBwbGFuZTog ZGlzcGxheSBwbGFuZQo+ICsgKgo+ICsgKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVzZW50aW5nIEBw bGFuZSwgZS5nLiAib3ZlcmxheSIuCj4gKyAqLwo+ICtjb25zdCBjaGFyICprbXN0ZXN0X3BsYW5l X3R5cGVfbmFtZShpbnQgcGxhbmVfdHlwZSkKPiArewo+ICsJc3RhdGljIGNvbnN0IGNoYXIgKm5h bWVzW10gPSB7Cj4gKwkJW0RSTV9QTEFORV9UWVBFX09WRVJMQVldID0gIm92ZXJsYXkiLAo+ICsJ CVtEUk1fUExBTkVfVFlQRV9QUklNQVJZXSA9ICJwcmltYXJ5IiwKPiArCQlbRFJNX1BMQU5FX1RZ UEVfQ1VSU09SXSA9ICJjdXJzb3IiLAo+ICsJfTsKPiArCj4gKwlpZ3RfYXNzZXJ0KHBsYW5lX3R5 cGUgPCBBUlJBWV9TSVpFKG5hbWVzKSAmJgo+IG5hbWVzW3BsYW5lX3R5cGVdKTsKPiArCj4gKwly ZXR1cm4gbmFtZXNbcGxhbmVfdHlwZV07Cj4gK30KPiArCj4gwqBzdGF0aWMgY29uc3QgY2hhciAq bW9kZV9zdGVyZW9fbmFtZShjb25zdCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCj4gwqB7Cj4gwqAJ c3dpdGNoIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykgewo+IEBAIC0xNTMy LDE0ICsxNTUxLDE3IEBAIHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpkaXNw bGF5LAo+IGludCBkcm1fZmQpCj4gwqAJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7 IGkrKykgewo+IMKgCQlpZ3RfcGlwZV90ICpwaXBlID0gJmRpc3BsYXktPnBpcGVzW2ldOwo+IMKg CQlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gLQkJaW50IHAgPSBJR1RfUExBTkVfMjsKPiArCQlpbnQg cCA9IDE7Cj4gwqAJCWludCBqLCB0eXBlOwo+IC0JCXVpbnQ4X3Qgbl9wbGFuZXMgPSAwOwo+ICsJ CXVpbnQ4X3QgbGFzdF9wbGFuZSA9IDAsIG5fcGxhbmVzID0gMDsKPiDCoAkJdWludDY0X3QgcHJv cF92YWx1ZTsKPiDCoAo+IMKgCQlwaXBlLT5jcnRjX2lkID0gcmVzb3VyY2VzLT5jcnRjc1tpXTsK PiDCoAkJcGlwZS0+ZGlzcGxheSA9IGRpc3BsYXk7Cj4gwqAJCXBpcGUtPnBpcGUgPSBpOwo+ICsJ CXBpcGUtPnBsYW5lX2N1cnNvciA9IC0xOwo+ICsJCXBpcGUtPnBsYW5lX3ByaW1hcnkgPSAtMTsK PiArCQlwaXBlLT5wbGFuZXMgPSBOVUxMOwo+IMKgCj4gwqAJCWdldF9jcnRjX3Byb3BlcnR5KGRp c3BsYXktPmRybV9mZCwgcGlwZS0+Y3J0Y19pZCwKPiDCoAkJCQnCoMKgwqDCoCJiYWNrZ3JvdW5k X2NvbG9yIiwKPiBAQCAtMTU2NSw2ICsxNTg3LDI3IEBAIHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChp Z3RfZGlzcGxheV90ICpkaXNwbGF5LAo+IGludCBkcm1fZmQpCj4gwqAKPiDCoAkJaWd0X2F0b21p Y19maWxsX3BpcGVfcHJvcHMoZGlzcGxheSwgcGlwZSwKPiBJR1RfTlVNX0NSVENfUFJPUFMsIGln dF9jcnRjX3Byb3BfbmFtZXMpOwo+IMKgCj4gKwkJLyogY291bnQgbnVtYmVyIG9mIHZhbGlkIHBs YW5lcyAqLwo+ICsJCWZvciAoaiA9IDA7IGogPCBwbGFuZV9yZXNvdXJjZXMtPmNvdW50X3BsYW5l czsgaisrKQo+IHsKPiArCQkJZHJtTW9kZVBsYW5lICpkcm1fcGxhbmU7Cj4gKwo+ICsJCQlkcm1f cGxhbmUgPSBkcm1Nb2RlR2V0UGxhbmUoZGlzcGxheS0+ZHJtX2ZkLAo+ICsJCQkJCQnCoMKgwqDC oHBsYW5lX3Jlc291cmNlcy0KPiA+cGxhbmVzW2pdKTsKPiArCQkJaWd0X2Fzc2VydChkcm1fcGxh bmUpOwo+ICsKPiArCQkJaWYgKCEoZHJtX3BsYW5lLT5wb3NzaWJsZV9jcnRjcyAmICgxIDw8IGkp KSkKPiB7Cj4gKwkJCQlkcm1Nb2RlRnJlZVBsYW5lKGRybV9wbGFuZSk7Cj4gKwkJCQljb250aW51 ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQp0aGlzwqBjdXJseSBicmFja2V0IGlzIG1p c3BsYWNlZC4KCldpdGggdGhpcyBmaXhlZCwgdGhpcyBpc8KgCgpSZXZpZXdlZC1ieTogTWlrYSBL YWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4KCj4gKwo+ICsJCcKgwqDCoMKgbl9wbGFuZXMr KzsKPiArCQl9Cj4gKwo+ICsJCWlndF9hc3NlcnRfbHRlKDAsIG5fcGxhbmVzKTsKPiArCQlwaXBl LT5wbGFuZXMgPSBjYWxsb2Moc2l6ZW9mKGlndF9wbGFuZV90KSwKPiBuX3BsYW5lcyk7Cj4gKwkJ aWd0X2Fzc2VydF9mKHBpcGUtPnBsYW5lcywgIkZhaWxlZCB0byBhbGxvY2F0ZQo+IG1lbW9yeSBm b3IgJWQgcGxhbmVzXG4iLCBuX3BsYW5lcyk7Cj4gKwkJbGFzdF9wbGFuZSA9IG5fcGxhbmVzIC0g MTsKPiArCj4gwqAJCS8qIGFkZCB0aGUgcGxhbmVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGF0 IHBpcGUgKi8KPiDCoAkJZm9yIChqID0gMDsgaiA8IHBsYW5lX3Jlc291cmNlcy0+Y291bnRfcGxh bmVzOyBqKyspCj4gewo+IMKgCQkJZHJtTW9kZVBsYW5lICpkcm1fcGxhbmU7Cj4gQEAgLTE1ODIs MjIgKzE2MjUsMjcgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3Bs YXksCj4gaW50IGRybV9mZCkKPiDCoAkJCQkJCcKgwqBwbGFuZV9yZXNvdXJjZXMtCj4gPnBsYW5l c1tqXSk7Cj4gwqAJCQlzd2l0Y2ggKHR5cGUpIHsKPiDCoAkJCWNhc2UgRFJNX1BMQU5FX1RZUEVf UFJJTUFSWToKPiAtCQkJCXBsYW5lID0gJnBpcGUtCj4gPnBsYW5lc1tJR1RfUExBTkVfUFJJTUFS WV07Cj4gKwkJCQlpZiAocGlwZS0+cGxhbmVfcHJpbWFyeSA9PSAtMSkgewo+ICsJCQkJCXBsYW5l ID0gJnBpcGUtPnBsYW5lc1swXTsKPiArCQkJCQlwbGFuZS0+aW5kZXggPSAwOwo+ICsJCQkJCXBp cGUtPnBsYW5lX3ByaW1hcnkgPSAwOwo+ICsJCQkJfSBlbHNlIHsKPiArCQkJCQlwbGFuZSA9ICZw aXBlLT5wbGFuZXNbcF07Cj4gKwkJCQkJcGxhbmUtPmluZGV4ID0gcCsrOwo+ICsJCQkJfQo+IMKg CQkJCXBsYW5lLT5pc19wcmltYXJ5ID0gMTsKPiAtCQkJCXBsYW5lLT5pbmRleCA9IElHVF9QTEFO RV9QUklNQVJZOwo+IMKgCQkJCWJyZWFrOwo+IMKgCQkJY2FzZSBEUk1fUExBTkVfVFlQRV9DVVJT T1I6Cj4gLQkJCQkvKgo+IC0JCQkJwqAqIEN1cnNvciBzaG91bGQgYmUgdGhlIGhpZ2hlc3QKPiBp bmRleCBpbiBvdXIKPiAtCQkJCcKgKiBpbnRlcm5hbCBsaXN0LCBidXQgd2UgZG9uJ3Qga25vdwo+ IHdoYXQgdGhhdAo+IC0JCQkJwqAqIGlzIHlldC7CoMKgSnVzdCBzdGljayBpdCBpbiB0aGUKPiBs YXN0IHNsb3QKPiAtCQkJCcKgKiBmb3Igbm93IGFuZCB3ZSdsbCBtb3ZlIGl0IGxhdGVyLAo+IGlm Cj4gLQkJCQnCoCogbmVjZXNzYXJ5Lgo+IC0JCQkJwqAqLwo+IC0JCQkJcGxhbmUgPSAmcGlwZS0K PiA+cGxhbmVzW0lHVF9QTEFORV9DVVJTT1JdOwo+IC0JCQkJcGxhbmUtPmlzX2N1cnNvciA9IDE7 Cj4gLQkJCQlwbGFuZS0+aW5kZXggPSBJR1RfUExBTkVfQ1VSU09SOwo+ICsJCQkJaWYgKHBpcGUt PnBsYW5lX2N1cnNvciA9PSAtMSkgewo+ICsJCQkJCXBsYW5lID0gJnBpcGUtCj4gPnBsYW5lc1ts YXN0X3BsYW5lXTsKPiArCQkJCQlwbGFuZS0+aW5kZXggPSBsYXN0X3BsYW5lOwo+ICsJCQkJCXBp cGUtPnBsYW5lX2N1cnNvciA9Cj4gbGFzdF9wbGFuZTsKPiArCQkJCX0gZWxzZSB7Cj4gKwkJCQkJ cGxhbmUgPSAmcGlwZS0+cGxhbmVzW3BdOwo+ICsJCQkJCXBsYW5lLT5pbmRleCA9IHArKzsKPiAr CQkJCX0KPiDCoAkJCQlkaXNwbGF5LT5oYXNfY3Vyc29yX3BsYW5lID0gdHJ1ZTsKPiArCQkJCXBs YW5lLT5pc19jdXJzb3IgPSAxOwo+IMKgCQkJCWJyZWFrOwo+IMKgCQkJZGVmYXVsdDoKPiDCoAkJ CQlwbGFuZSA9ICZwaXBlLT5wbGFuZXNbcF07Cj4gQEAgLTE2MDUsNyArMTY1Myw4IEBAIHZvaWQg aWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+IGludCBkcm1fZmQpCj4g wqAJCQkJYnJlYWs7Cj4gwqAJCQl9Cj4gwqAKPiAtCQkJbl9wbGFuZXMrKzsKPiArCQkJaWd0X2Fz c2VydF9mKHBsYW5lLT5pbmRleCA8IG5fcGxhbmVzLAo+ICJuX3BsYW5lcyA8IHBsYW5lLT5pbmRl eCBmYWlsZWRcbiIpOwo+ICsJCQlwbGFuZS0+dHlwZSA9IHR5cGU7Cj4gwqAJCQlwbGFuZS0+cGlw ZSA9IHBpcGU7Cj4gwqAJCQlwbGFuZS0+ZHJtX3BsYW5lID0gZHJtX3BsYW5lOwo+IMKgCj4gQEAg LTE2MjYsNyArMTY3NSw3IEBAIHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpk aXNwbGF5LAo+IGludCBkcm1fZmQpCj4gwqAJCcKgKiBBdCB0aGUgYmFyZSBtaW5pbXVtLCB3ZSBz aG91bGQgZXhwZWN0IHRvIGhhdmUgYQo+IHByaW1hcnkKPiDCoAkJwqAqIHBsYW5lCj4gwqAJCcKg Ki8KPiAtCQlpZ3RfYXNzZXJ0KHBpcGUtCj4gPnBsYW5lc1tJR1RfUExBTkVfUFJJTUFSWV0uZHJt X3BsYW5lKTsKPiArCQlpZ3RfYXNzZXJ0KHBpcGUtPnBsYW5lc1twaXBlLQo+ID5wbGFuZV9wcmlt YXJ5XS5kcm1fcGxhbmUpOwo+IMKgCj4gwqAJCWlmIChkaXNwbGF5LT5oYXNfY3Vyc29yX3BsYW5l KSB7Cj4gwqAJCQkvKgo+IEBAIC0xNjM0LDExICsxNjgzLDExIEBAIHZvaWQgaWd0X2Rpc3BsYXlf aW5pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+IGludCBkcm1fZmQpCj4gwqAJCQnCoCogb25s eSAxIHNwcml0ZSwgdGhhdCdzIHRoZSB3cm9uZyBzbG90IGFuZAo+IHdlIG5lZWQgdG8KPiDCoAkJ CcKgKiBtb3ZlIGl0IGRvd24uCj4gwqAJCQnCoCovCj4gLQkJCWlmIChwICE9IElHVF9QTEFORV9D VVJTT1IpIHsKPiArCQkJaWYgKHAgIT0gbGFzdF9wbGFuZSkgewo+IMKgCQkJCXBpcGUtPnBsYW5l c1twXSA9Cj4gLQkJCQkJcGlwZS0KPiA+cGxhbmVzW0lHVF9QTEFORV9DVVJTT1JdOwo+ICsJCQkJ CXBpcGUtPnBsYW5lc1tsYXN0X3BsYW5lXTsKPiDCoAkJCQlwaXBlLT5wbGFuZXNbcF0uaW5kZXgg PSBwOwo+IC0JCQkJbWVtc2V0KCZwaXBlLQo+ID5wbGFuZXNbSUdUX1BMQU5FX0NVUlNPUl0sIDAs Cj4gKwkJCQltZW1zZXQoJnBpcGUtPnBsYW5lc1tsYXN0X3BsYW5lXSwgMCwKPiDCoAkJCQnCoMKg wqDCoMKgwqDCoHNpemVvZiAqcGxhbmUpOwo+IMKgCQkJfQo+IMKgCQl9IGVsc2Ugewo+IEBAIC0x NjQ2LDcgKzE2OTUsNyBAQCB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlz cGxheSwKPiBpbnQgZHJtX2ZkKQo+IMKgCQkJcGxhbmUgPSAmcGlwZS0+cGxhbmVzW3BdOwo+IMKg CQkJcGxhbmUtPnBpcGUgPSBwaXBlOwo+IMKgCQkJcGxhbmUtPmluZGV4ID0gcDsKPiAtCQkJcGxh bmUtPmlzX2N1cnNvciA9IHRydWU7Cj4gKwkJCXBsYW5lLT50eXBlID0gRFJNX1BMQU5FX1RZUEVf Q1VSU09SOwo+IMKgCQl9Cj4gwqAKPiDCoAkJcGlwZS0+bl9wbGFuZXMgPSBuX3BsYW5lczsKPiBA QCAtMTY1NCw5ICsxNzAzLDYgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3Qg KmRpc3BsYXksCj4gaW50IGRybV9mZCkKPiDCoAkJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNw bGF5LCBpLCBwbGFuZSkKPiDCoAkJCXBsYW5lLT5mYl9jaGFuZ2VkID0gdHJ1ZTsKPiDCoAo+IC0J CS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgcGxhbmUgYXJyYXkgKi8KPiAtCQlp Z3RfYXNzZXJ0X2x0ZShwaXBlLT5uX3BsYW5lcywgSUdUX01BWF9QTEFORVMpOwo+IC0KPiDCoAkJ cGlwZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiDCoAl9Cj4gwqAKPiBAQCAtMTcwOSw2ICsxNzU1 LDkgQEAgc3RhdGljIHZvaWQgaWd0X3BpcGVfZmluaShpZ3RfcGlwZV90ICpwaXBlKQo+IMKgCQkJ cGxhbmUtPmRybV9wbGFuZSA9IE5VTEw7Cj4gwqAJCX0KPiDCoAl9Cj4gKwo+ICsJZnJlZShwaXBl LT5wbGFuZXMpOwo+ICsJcGlwZS0+cGxhbmVzID0gTlVMTDsKPiDCoH0KPiDCoAo+IMKgc3RhdGlj IHZvaWQgaWd0X291dHB1dF9maW5pKGlndF9vdXRwdXRfdCAqb3V0cHV0KQo+IEBAIC0xNzk3LDIw ICsxODQ2LDQxIEBAIHN0YXRpYyBpZ3RfcGlwZV90Cj4gKmlndF9vdXRwdXRfZ2V0X2RyaXZpbmdf cGlwZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiDCoAlyZXR1cm4gJmRpc3BsYXktPnBpcGVzW3Bp cGVdOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBpZ3RfcGxhbmVfdCAqaWd0X3BpcGVfZ2V0X3BsYW5l KGlndF9waXBlX3QgKnBpcGUsIGVudW0KPiBpZ3RfcGxhbmUgcGxhbmUpCj4gK3N0YXRpYyBpZ3Rf cGxhbmVfdCAqaWd0X3BpcGVfZ2V0X3BsYW5lKGlndF9waXBlX3QgKnBpcGUsIGludAo+IHBsYW5l X2lkeCkKPiDCoHsKPiAtCWludCBpZHg7Cj4gKwlpZ3RfYXNzZXJ0X2YocGxhbmVfaWR4ID49IDAg JiYgcGxhbmVfaWR4IDwgcGlwZS0+bl9wbGFuZXMsCj4gKwkJIlZhbGlkIHBpcGUtPnBsYW5lcyBw bGFuZV9pZHggbm90IGZvdW5kLAo+IHBsYW5lX2lkeD0lZCBuX3BsYW5lcz0lZCIsCj4gKwkJcGxh bmVfaWR4LCBwaXBlLT5uX3BsYW5lcyk7Cj4gwqAKPiAtCS8qIEN1cnNvciBwbGFuZSBpcyBhbHdh eXMgdGhlIGhpZ2hlc3QgaW5kZXggKi8KPiAtCWlmIChwbGFuZSA9PSBJR1RfUExBTkVfQ1VSU09S KQo+IC0JCWlkeCA9IHBpcGUtPm5fcGxhbmVzIC0gMTsKPiAtCWVsc2Ugewo+IC0JCWlndF9hc3Nl cnRfZihwbGFuZSA+PSAwICYmIHBsYW5lIDwgKHBpcGUtPm5fcGxhbmVzKSwKPiAtCQkJwqDCoMKg wqDCoCJwbGFuZT0lZFxuIiwgcGxhbmUpOwo+IC0JCWlkeCA9IHBsYW5lOwo+ICsJcmV0dXJuICZw aXBlLT5wbGFuZXNbcGxhbmVfaWR4XTsKPiArfQo+ICsKPiArCj4gK2lndF9wbGFuZV90ICppZ3Rf cGlwZV9nZXRfcGxhbmVfdHlwZShpZ3RfcGlwZV90ICpwaXBlLCBpbnQKPiBwbGFuZV90eXBlKQo+ ICt7Cj4gKwlpbnQgaSwgcGxhbmVfaWR4ID0gLTE7Cj4gKwo+ICsJc3dpdGNoKHBsYW5lX3R5cGUp IHsKPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOgo+ICsJCXBsYW5lX2lkeCA9IHBpcGUt PnBsYW5lX2N1cnNvcjsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WToKPiArCQlwbGFuZV9pZHggPSBwaXBlLT5wbGFuZV9wcmltYXJ5Owo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgo+ICsJCWZvcihpID0gMDsgaSA8IHBpcGUtPm5f cGxhbmVzOyBpKyspCj4gKwkJCWlmIChwaXBlLT5wbGFuZXNbaV0udHlwZSA9PQo+IERSTV9QTEFO RV9UWVBFX09WRVJMQVkpCj4gKwkJCcKgwqDCoMKgcGxhbmVfaWR4ID0gaTsKPiArCQlicmVhazsK PiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gwqAJfQo+IMKgCj4gLQlyZXR1cm4gJnBpcGUtPnBs YW5lc1tpZHhdOwo+ICsJaWd0X2Fzc2VydF9mKHBsYW5lX2lkeCA+PSAwICYmIHBsYW5lX2lkeCA8 IHBpcGUtPm5fcGxhbmVzLAo+ICsJCSJWYWxpZCBwaXBlLT5wbGFuZXMgaWR4IG5vdCBmb3VuZC4g cGxhbmVfaWR4PSVkCj4gcGxhbmVfdHlwZT0lZCBuX3BsYW5lcz0lZFxuIiwKPiArCQlwbGFuZV9p ZHgsIHBsYW5lX3R5cGUsIHBpcGUtPm5fcGxhbmVzKTsKPiArCj4gKwlyZXR1cm4gJnBpcGUtPnBs YW5lc1twbGFuZV9pZHhdOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaWd0X291dHB1dF90ICppZ3Rf cGlwZV9nZXRfb3V0cHV0KGlndF9waXBlX3QgKnBpcGUpCj4gQEAgLTIxNTUsOSArMjIyNSw5IEBA IHN0YXRpYyBpbnQgaWd0X3BsYW5lX2NvbW1pdChpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gwqAJCQnC oMKgwqDCoGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzLAo+IMKgCQkJwqDCoMKgwqBib29sIGZhaWxf b25fZXJyb3IpCj4gwqB7Cj4gLQlpZiAocGxhbmUtPmlzX2N1cnNvciAmJiBzID09IENPTU1JVF9M RUdBQ1kpIHsKPiArCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IgJiYg cyA9PQo+IENPTU1JVF9MRUdBQ1kpIHsKPiDCoAkJcmV0dXJuIGlndF9jdXJzb3JfY29tbWl0X2xl Z2FjeShwbGFuZSwgcGlwZSwKPiBmYWlsX29uX2Vycm9yKTsKPiAtCX0gZWxzZSBpZiAocGxhbmUt PmlzX3ByaW1hcnkgJiYgcyA9PSBDT01NSVRfTEVHQUNZKSB7Cj4gKwl9IGVsc2UgaWYgKHBsYW5l LT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgJiYgcyA9PQo+IENPTU1JVF9MRUdBQ1kp IHsKPiDCoAkJcmV0dXJuIGlndF9wcmltYXJ5X3BsYW5lX2NvbW1pdF9sZWdhY3kocGxhbmUsIHBp cGUsCj4gwqAJCQkJCQnCoMKgwqDCoMKgwqDCoGZhaWxfb25fZXJyb3IKPiApOwo+IMKgCX0gZWxz ZSB7Cj4gQEAgLTIzNzQsNyArMjQ0NCw5IEBAIGRpc3BsYXlfY29tbWl0X2NoYW5nZWQoaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSwKPiBlbnVtIGlndF9jb21taXRfc3R5bGUgcykKPiDCoAkJCXBsYW5l LT5wb3NpdGlvbl9jaGFuZ2VkID0gZmFsc2U7Cj4gwqAJCQlwbGFuZS0+c2l6ZV9jaGFuZ2VkID0g ZmFsc2U7Cj4gwqAKPiAtCQkJaWYgKHMgIT0gQ09NTUlUX0xFR0FDWSB8fCAhKHBsYW5lLQo+ID5p c19wcmltYXJ5IHx8IHBsYW5lLT5pc19jdXJzb3IpKQo+ICsJCQlpZiAocyAhPSBDT01NSVRfTEVH QUNZIHx8Cj4gKwkJCcKgwqDCoMKgIShwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklN QVJZCj4gfHwKPiArCQkJwqDCoMKgwqDCoMKgcGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf Q1VSU09SKSkKPiDCoAkJCQlwbGFuZS0+cm90YXRpb25fY2hhbmdlZCA9IGZhbHNlOwo+IMKgCQl9 Cj4gwqAJfQo+IEBAIC0yNjU0LDE0ICsyNzI2LDI0IEBAIHZvaWQgaWd0X291dHB1dF9zZXRfc2Nh bGluZ19tb2RlKGlndF9vdXRwdXRfdAo+ICpvdXRwdXQsIHVpbnQ2NF90IHNjYWxpbmdfbW9kZSkK PiDCoAlpZ3RfcmVxdWlyZShvdXRwdXQtCj4gPmNvbmZpZy5hdG9taWNfcHJvcHNfY29ubmVjdG9y W0lHVF9DT05ORUNUT1JfU0NBTElOR19NT0RFXSk7Cj4gwqB9Cj4gwqAKPiAtaWd0X3BsYW5lX3Qg KmlndF9vdXRwdXRfZ2V0X3BsYW5lKGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtCj4gaWd0X3Bs YW5lIHBsYW5lKQo+ICtpZ3RfcGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmUoaWd0X291dHB1 dF90ICpvdXRwdXQsIGludAo+IHBsYW5lX2lkeCkKPiArewo+ICsJaWd0X3BpcGVfdCAqcGlwZTsK PiArCj4gKwlwaXBlID0gaWd0X291dHB1dF9nZXRfZHJpdmluZ19waXBlKG91dHB1dCk7Cj4gKwlp Z3RfYXNzZXJ0KHBpcGUpOwo+ICsKPiArCXJldHVybiBpZ3RfcGlwZV9nZXRfcGxhbmUocGlwZSwg cGxhbmVfaWR4KTsKPiArfQo+ICsKPiAraWd0X3BsYW5lX3QgKmlndF9vdXRwdXRfZ2V0X3BsYW5l X3R5cGUoaWd0X291dHB1dF90ICpvdXRwdXQsIGludAo+IHBsYW5lX3R5cGUpCj4gwqB7Cj4gwqAJ aWd0X3BpcGVfdCAqcGlwZTsKPiDCoAo+IMKgCXBpcGUgPSBpZ3Rfb3V0cHV0X2dldF9kcml2aW5n X3BpcGUob3V0cHV0KTsKPiDCoAlpZ3RfYXNzZXJ0KHBpcGUpOwo+IMKgCj4gLQlyZXR1cm4gaWd0 X3BpcGVfZ2V0X3BsYW5lKHBpcGUsIHBsYW5lKTsKPiArCXJldHVybiBpZ3RfcGlwZV9nZXRfcGxh bmVfdHlwZShwaXBlLCBwbGFuZV90eXBlKTsKPiDCoH0KPiDCoAo+IMKgdm9pZCBpZ3RfcGxhbmVf c2V0X2ZiKGlndF9wbGFuZV90ICpwbGFuZSwgc3RydWN0IGlndF9mYiAqZmIpCj4gZGlmZiAtLWdp dCBhL2xpYi9pZ3Rfa21zLmggYi9saWIvaWd0X2ttcy5oCj4gaW5kZXggM2JjNjliODQuLmRlYTUw ZGYzIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3Rfa21zLmgKPiArKysgYi9saWIvaWd0X2ttcy5oCj4g QEAgLTYxLDIxICs2MSwyMiBAQCBpbnQga21zdGVzdF9waXBlX3RvX2luZGV4KGNoYXIgcGlwZSk7 Cj4gwqAKPiDCoC8qIFdlIG5hbWVzcGFjZSB0aGlzIGVudW0gdG8gbm90IGNvbmZsaWN0IHdpdGgg dGhlIEFuZHJvaWQKPiBpOTE1X2RybS5oICovCj4gwqBlbnVtIGlndF9wbGFuZSB7Cj4gLQlJR1Rf UExBTkVfMSA9IDAsCj4gLQlJR1RfUExBTkVfUFJJTUFSWSA9IElHVF9QTEFORV8xLAo+IC0JSUdU X1BMQU5FXzIsCj4gLQlJR1RfUExBTkVfMywKPiAtCUlHVF9QTEFORV80LAo+IC0JSUdUX1BMQU5F XzUsCj4gLQlJR1RfUExBTkVfNiwKPiAtCUlHVF9QTEFORV83LAo+IC0JSUdUX1BMQU5FXzgsCj4g LQlJR1RfUExBTkVfOSwKPiAtCUlHVF9QTEFORV9DVVJTT1IsIC8qIElHVF9QTEFORV9DVVJTT1Ig aXMgYWx3YXlzIHRoZSBsYXN0Cj4gcGxhbmUuICovCj4gLQlJR1RfTUFYX1BMQU5FUywKPiArwqDC oMKgwqDCoMKgwqDCoElHVF9QTEFORV8xID0gMCwKPiArwqDCoMKgwqDCoMKgwqDCoElHVF9QTEFO RV9QUklNQVJZID0gSUdUX1BMQU5FXzEsCj4gK8KgwqDCoMKgwqDCoMKgwqBJR1RfUExBTkVfMiwK PiArwqDCoMKgwqDCoMKgwqDCoElHVF9QTEFORV8zLAo+ICvCoMKgwqDCoMKgwqDCoMKgSUdUX1BM QU5FXzQsCj4gK8KgwqDCoMKgwqDCoMKgwqBJR1RfUExBTkVfNSwKPiArwqDCoMKgwqDCoMKgwqDC oElHVF9QTEFORV82LAo+ICvCoMKgwqDCoMKgwqDCoMKgSUdUX1BMQU5FXzcsCj4gK8KgwqDCoMKg wqDCoMKgwqBJR1RfUExBTkVfOCwKPiArwqDCoMKgwqDCoMKgwqDCoElHVF9QTEFORV85LAo+ICvC oMKgwqDCoMKgwqDCoMKgSUdUX1BMQU5FX0NVUlNPUiwgLyogSUdUX1BMQU5FX0NVUlNPUiBpcyBh bHdheXMgdGhlIGxhc3QKPiBwbGFuZS4gKi8KPiArwqDCoMKgwqDCoMKgwqDCoElHVF9NQVhfUExB TkVTLAo+IMKgfTsKPiDCoAo+IMKgY29uc3QgY2hhciAqa21zdGVzdF9wbGFuZV9uYW1lKGVudW0g aWd0X3BsYW5lIHBsYW5lKTsKPiArY29uc3QgY2hhciAqa21zdGVzdF9wbGFuZV90eXBlX25hbWUo aW50IHBsYW5lX3R5cGUpOwo+IMKgCj4gwqBlbnVtIHBvcnQgewo+IMKgwqDCoMKgwqDCoMKgwqDC oFBPUlRfQSA9IDAsCj4gQEAgLTI1Niw2ICsyNTcsNyBAQCB0eXBlZGVmIHN0cnVjdCB7Cj4gwqAJ aWd0X3BpcGVfdCAqcGlwZTsKPiDCoAlpbnQgaW5kZXg7Cj4gwqAJLyogY2FwYWJpbGl0aWVzICov Cj4gKwlpbnQgdHlwZTsKPiDCoAl1bnNpZ25lZCBpbnQgaXNfcHJpbWFyecKgwqDCoMKgwqDCoMKg OiAxOwo+IMKgCXVuc2lnbmVkIGludCBpc19jdXJzb3LCoMKgwqDCoMKgwqDCoMKgOiAxOwo+IMKg CS8qIHN0YXRlIHRyYWNraW5nICovCj4gQEAgLTI5Miw4ICsyOTQsMTEgQEAgc3RydWN0IGlndF9w aXBlIHsKPiDCoAlpZ3RfZGlzcGxheV90ICpkaXNwbGF5Owo+IMKgCWVudW0gcGlwZSBwaXBlOwo+ IMKgCWJvb2wgZW5hYmxlZDsKPiArCj4gwqAJaW50IG5fcGxhbmVzOwo+IC0JaWd0X3BsYW5lX3Qg cGxhbmVzW0lHVF9NQVhfUExBTkVTXTsKPiArCWludCBwbGFuZV9jdXJzb3I7Cj4gKwlpbnQgcGxh bmVfcHJpbWFyeTsKPiArCWlndF9wbGFuZV90ICpwbGFuZXM7Cj4gwqAKPiDCoAl1aW50MzJfdCBh dG9taWNfcHJvcHNfY3J0Y1tJR1RfTlVNX0NSVENfUFJPUFNdOwo+IMKgCj4gQEAgLTM1Myw3ICsz NTgsOSBAQCBkcm1Nb2RlTW9kZUluZm8gKmlndF9vdXRwdXRfZ2V0X21vZGUoaWd0X291dHB1dF90 Cj4gKm91dHB1dCk7Cj4gwqB2b2lkIGlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShpZ3Rfb3V0cHV0 X3QgKm91dHB1dCwgZHJtTW9kZU1vZGVJbmZvCj4gKm1vZGUpOwo+IMKgdm9pZCBpZ3Rfb3V0cHV0 X3NldF9waXBlKGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSk7Cj4gwqB2b2lk IGlndF9vdXRwdXRfc2V0X3NjYWxpbmdfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdWludDY0 X3QKPiBzY2FsaW5nX21vZGUpOwo+IC1pZ3RfcGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmUo aWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0KPiBpZ3RfcGxhbmUgcGxhbmUpOwo+ICtpZ3RfcGxh bmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmUoaWd0X291dHB1dF90ICpvdXRwdXQsIGludAo+IHBs YW5lX2lkeCk7Cj4gK2lndF9wbGFuZV90ICppZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKGlndF9v dXRwdXRfdCAqb3V0cHV0LCBpbnQKPiBwbGFuZV90eXBlKTsKPiAraWd0X3BsYW5lX3QgKmlndF9w aXBlX2dldF9wbGFuZV90eXBlKGlndF9waXBlX3QgKnBpcGUsIGludAo+IHBsYW5lX3R5cGUpOwo+ IMKgYm9vbCBpZ3RfcGlwZV9nZXRfcHJvcGVydHkoaWd0X3BpcGVfdCAqcGlwZSwgY29uc3QgY2hh ciAqbmFtZSwKPiDCoAkJCcKgwqDCoHVpbnQzMl90ICpwcm9wX2lkLCB1aW50NjRfdCAqdmFsdWUs Cj4gwqAJCQnCoMKgwqBkcm1Nb2RlUHJvcGVydHlQdHIgKnByb3ApOwotLSAKTWlrYSBLYWhvbGEg LSBJbnRlbCBPVEMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=