From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id CA09B6E14B for ; Fri, 5 Apr 2019 08:42:56 +0000 (UTC) References: <20190405010737.19111-1-andi@etezian.org> <20190405010737.19111-5-andi@etezian.org> From: Tvrtko Ursulin Message-ID: <3af0b26f-f79a-bfc3-5735-241f192a8cc0@linux.intel.com> Date: Fri, 5 Apr 2019 09:42:53 +0100 MIME-Version: 1.0 In-Reply-To: <20190405010737.19111-5-andi@etezian.org> Content-Language: en-US Subject: Re: [igt-dev] [PATCH v17 4/7] lib/i915: add gem_engine_topology library and for_each loop definition List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Andi Shyti , IGT dev List-ID: Ck9uIDA1LzA0LzIwMTkgMDI6MDcsIEFuZGkgU2h5dGkgd3JvdGU6Cj4gRnJvbTogQW5kaSBTaHl0 aSA8YW5kaS5zaHl0aUBpbnRlbC5jb20+Cj4gCj4gVGhlIGdlbV9lbmdpbmVfdG9wb2xvZ3kgbGli cmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdAo+IGludGVyZmFjZSB3aXRoIHRoZSBxdWVy eSBhbmQgZ2V0cGFyYW0vc2V0cGFyYW0gaW9jdGxzLgo+IAo+IFRoZSBsaWJyYXJ5J3MgYWNjZXNz IHBvaW50IGlzIHRoZSAnaW50ZWxfaW5pdF9lbmdpbmVfbGlzdCgpJwo+IGZ1bmN0aW9uIHRoYXQs IGV2ZXJ5dGltZSBpcyBjYWxsZWQsIGdlbmVyYXRlcyB0aGUgbGlzdCBvZiBhY3RpdmUKPiBlbmdp bmVzIGFuZCByZXR1cm5zIHRoZW0gaW4gYSAnc3RydWN0IGludGVsX2VuZ2luZV9kYXRhJy4gVGhl Cj4gc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgdGhlIGVuZ2luZXMgdGhhdCBhcmUgYWN0aXZlbHkg cHJlc2VudCBpbgo+IHRoZSBHUFUuCj4gCj4gVGhlIGZ1bmN0aW9uIGNhbiB3b3JrIGluIGJvdGgg dGhlIGNhc2VzIHRoYXQgdGhlIHF1ZXJ5IGFuZAo+IGdldHBhcmFtIGlvY3RscyBhcmUgaW1wbGVt ZW50ZWQgb3Igbm90IGJ5IHRoZSBydW5uaW5nIGtlcm5lbC4gSW4KPiBjYXNlIHRoZXkgYXJlIGlt cGxlbWVudGVkLCBhIHF1ZXJ5IGlzIG1hZGUgdG8gdGhlIGRyaXZlciB0byBmZXRjaAo+IHRoZSBs aXN0IG9mIGFjdGl2ZSBlbmdpbmVzLiBJbiBjYXNlIHRoZXkgYXJlIG5vdCBpbXBsZW1lbnRlZCwg dGhlCj4gbGlzdCBpcyB0YWtlbiBmcm9tIHRoZSAnaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMyJyBh cnJheSBhbmQKPiBzdG9yZWQgb25seSBhZnRlciBjaGVja2luZyB0aGVpciBwcmVzZW5jZS4KPiAK PiBUaGUgZ2VtX2VuZ2luZV90b3BvbG9neSBsaWJyYXJ5IHByb3ZpZGVzIHNvbWUgaXRlcmF0aW9u IGhlbHBlcnM6Cj4gCj4gICAtIGludGVsX2dldF9jdXJyZW50X2VuZ2luZSgpOiBwcm92aWRlcyB0 aGUgY3VycmVudCBlbmdpbmUgaW4gdGhlCj4gICAgIGl0ZXJhdGlvbi4KPiAKPiAgIC0gaW50ZWxf Z2V0X2N1cnJlbnRfcGh5c2ljYWxfZW5naW5lKCk6IHByb3ZpZGVzIHRoZSBjdXJyZW50Cj4gICAg IHBoeXNpY2FsIGVuZ2luZSwgaWYgdGhlIGN1cnJlbnQgZW5naW5lIGlzIGEgdmlydHVhbCBlbmdp bmUsCj4gICAgIGl0IG1vdmVzIGZvcndhcmQgdW50aWwgaXQgZmluZHMgYSBwaHlzaWNhbCBlbmdp bmUuCj4gCj4gICAtIGludGVsX25leHRfZW5naW5lKCkgaXQganVzdCBpbmNyZW1lbnRzIHRoZSBj b3VudGVyIHNvIHRoYXQgaXQKPiAgICAgcG9pbnRzIHRvIHRoZSBuZXh0IGVuZ2luZS4KPiAKPiBF eHRlbmQgdGhlICdmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UnIHNvIHRoYXQgaXQgY2Fu IGxvb3AKPiB1c2luZyB0aGUgbmV3ICdpbnRlbF9pbml0X2VuZ2luZV9saXN0KCknIGFuZCByZW5h bWUgaXQgdG8KPiAnZm9yX2VhY2hfY29udGV4dF9lbmdpbmUnLgo+IAo+IE1vdmUgJ19fZm9yX2Vh Y2hfZW5naW5lX2NsYXNzX2luc3RhbmNlJyB0byBnZW1fZW5naW5lX3RvcG9sb2d5LmgKPiBhbmQg cmVuYW1lIGl0IHRvICdfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUnLgo+IAo+IFVwZGF0ZSBhY2Nv cmRpbmdseSB0ZXN0cy9wZXJmX3BtdS5jIHRvIHVzZSBjb3JyZWN0bHkgdGhlIG5ldwo+IGZvcl9l YWNoIGxvb3BzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFuZGkgU2h5dGkgPGFuZGkuc2h5dGlAaW50 ZWwuY29tPgo+IC0tLQo+ICAgbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgIHwgICAyICsK PiAgIGxpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYyB8IDI1NiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgIGxpYi9pOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuaCB8ICA2 NiArKysrKysrKysKPiAgIGxpYi9pZ3QuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4g ICBsaWIvaWd0X2d0LmggICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ICAgbGliL21lc29uLmJ1 aWxkICAgICAgICAgICAgICAgIHwgICAxICsKPiAgIDYgZmlsZXMgY2hhbmdlZCwgMzI4IGluc2Vy dGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaTkxNS9nZW1fZW5naW5lX3RvcG9s b2d5LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5 LmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUu c291cmNlcwo+IGluZGV4IGUwMDM0N2Y5NDVjNS4uNDEzMzFjMmYyYjgwIDEwMDY0NAo+IC0tLSBh L2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAt MTMsNiArMTMsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAgIAlpOTE1L2dlbV9yaW5nLmMJ XAo+ICAgCWk5MTUvZ2VtX21tYW4uYwlcCj4gICAJaTkxNS9nZW1fbW1hbi5oCVwKPiArCWk5MTUv Z2VtX2VuZ2luZV90b3BvbG9neS5jCVwKPiArCWk5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5oCVwK PiAgIAlpOTE1XzNkLmgJCVwKPiAgIAlpOTE1X3JlZy5oCQlcCj4gICAJaTkxNV9wY2lpZHMuaAkJ XAo+IGRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmMgYi9saWIvaTkx NS9nZW1fZW5naW5lX3RvcG9sb2d5LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uNTFlZTFjODJiZDY1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pOTE1 L2dlbV9lbmdpbmVfdG9wb2xvZ3kuYwo+IEBAIC0wLDAgKzEsMjU2IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImRybXRlc3QuaCIKPiArI2luY2x1ZGUgImlvY3Rs X3dyYXBwZXJzLmgiCj4gKwo+ICsjaW5jbHVkZSAiaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5Lmgi Cj4gKwo+ICsvKgo+ICsgKiBMaW1pdCB3aGF0IHdlIHN1cHBvcnQgZm9yIHNpbXBsaWNpdHkgZHVl IGxpbWl0YXRpb24gaW4gaG93IG11Y2ggd2UKPiArICogY2FuIGFkZHJlc3MgdmlhIGV4ZWNidWYy Lgo+ICsgKi8KPiArI2RlZmluZSBTSVpFT0ZfQ1RYX1BBUkFNCW9mZnNldG9mKHN0cnVjdCBpOTE1 X2NvbnRleHRfcGFyYW1fZW5naW5lcywgXAo+ICsJCQkJCWNsYXNzX2luc3RhbmNlW0dFTV9NQVhf RU5HSU5FU10pCj4gKyNkZWZpbmUgU0laRU9GX1FVRVJZCQlvZmZzZXRvZihzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnlfZW5naW5lX2luZm8sIFwKPiArCQkJCQllbmdpbmVzW0dFTV9NQVhfRU5HSU5FU10p Cj4gKwo+ICtzdGF0aWMgaW50IF9fZ2VtX3F1ZXJ5KGludCBmZCwgc3RydWN0IGRybV9pOTE1X3F1 ZXJ5ICpxKQo+ICt7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlpZiAoaWd0X2lvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9RVUVSWSwgcSkpCj4gKwkJZXJyID0gLWVycm5vOwo+ICsKPiArCWVycm5v ID0gMDsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9xdWVyeShp bnQgZmQsIHN0cnVjdCBkcm1faTkxNV9xdWVyeSAqcSkKPiArewo+ICsJaWd0X2Fzc2VydF9lcShf X2dlbV9xdWVyeShmZCwgcSksIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBxdWVyeV9lbmdp bmVzKGludCBmZCwKPiArCQkJICBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKnF1 ZXJ5X2VuZ2luZXMsCj4gKwkJCSAgaW50IGxlbmd0aCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3F1ZXJ5X2l0ZW0gaXRlbSA9IHsgfTsKPiArCXN0cnVjdCBkcm1faTkxNV9xdWVyeSBxdWVyeSA9 IHsgfTsKPiArCj4gKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX0lORk87 Cj4gKwlxdWVyeS5pdGVtc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJml0ZW0pOwo+ICsJcXVlcnku bnVtX2l0ZW1zID0gMTsKPiArCWl0ZW0ubGVuZ3RoID0gbGVuZ3RoOwo+ICsKPiArCWl0ZW0uZGF0 YV9wdHIgPSB0b191c2VyX3BvaW50ZXIocXVlcnlfZW5naW5lcyk7Cj4gKwo+ICsJZ2VtX3F1ZXJ5 KGZkLCAmcXVlcnkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjdHhfbWFwX2VuZ2luZXMoaW50 IGZkLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgKmVkLAo+ICsJCQkgICAgc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtICpwYXJhbSkKPiArewo+ICsJc3RydWN0IGk5MTVfY29udGV4 dF9wYXJhbV9lbmdpbmVzICplbmdpbmVzID0KPiArCQkJKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFy YW1fZW5naW5lcyopIHBhcmFtLT52YWx1ZTsKCkNvc21ldGljcyBvbmx5OiBPdXIgY29kaW5nIHN0 eWxlIGlzICIodHlwZSAqKXZhciIuCgo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWZvciAodHlwZW9m KGVuZ2luZXMtPmNsYXNzX2luc3RhbmNlWzBdKSAqcCA9Cj4gKwkJCSZlbmdpbmVzLT5jbGFzc19p bnN0YW5jZVswXTsKPiArCQkJCQkJaSA8IGVkLT5uZW5naW5lczsgaSsrLCBwKyspIAoKTW9yZSBj b3NtZXRpY3M6IEluZGVudGF0aW9uIGFsaWdubWVudCBsb29rcyB3b25reS4KCnsKPiArCQlwLT5l bmdpbmVfY2xhc3MgPSBlZC0+ZW5naW5lc1tpXS5jbGFzczsKPiArCQlwLT5lbmdpbmVfaW5zdGFu Y2UgPSBlZC0+ZW5naW5lc1tpXS5pbnN0YW5jZTsKPiArCX0KPiArCj4gKwlwYXJhbS0+c2l6ZSA9 IG9mZnNldG9mKHR5cGVvZigqZW5naW5lcyksIGNsYXNzX2luc3RhbmNlW2ldKTsKPiArCWVuZ2lu ZXMtPmV4dGVuc2lvbnMgPSAwOwo+ICsKPiArCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgcGFy YW0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbml0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgKmUyLAo+ICsJCQlpbnQgY2xhc3MsIGludCBpbnN0YW5jZSwgdWludDY0 X3QgZmxhZ3MpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq X19lMjsKPiArCXN0YXRpYyBjb25zdCBjaGFyICp1bmtub3duX25hbWUgPSAidW5rbm93biIsCj4g KwkJCSAgKnZpcnR1YWxfbmFtZSA9ICJ2aXJ0dWFsIjsKPiArCj4gKwllMi0+Y2xhc3MgICAgPSBj bGFzczsKPiArCWUyLT5pbnN0YW5jZSA9IGluc3RhbmNlOwo+ICsJZTItPmZsYWdzICAgID0gZmxh Z3M7Cj4gKwo+ICsJLyogZW5naW5lIGlzIGEgdmlydHVhbCBlbmdpbmUgKi8KPiArCWlmIChjbGFz cyA9PSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEKSB7Cj4gKwkJZTItPm5hbWUgPSB2aXJ0dWFs X25hbWU7Cj4gKwkJZTItPmlzX3ZpcnR1YWwgPSB0cnVlOwo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUoX19lMikKPiArCQlpZiAoX19lMi0+Y2xhc3Mg PT0gY2xhc3MgJiYgX19lMi0+aW5zdGFuY2UgPT0gaW5zdGFuY2UpCj4gKwkJCWJyZWFrOwo+ICsK PiArCWlmIChfX2UyLT5uYW1lKSB7Cj4gKwkJZTItPm5hbWUgPSBfX2UyLT5uYW1lOwo+ICsJfSBl bHNlIHsKPiArCQlpZ3Rfd2FybigiZm91bmQgdW5rbm93biBlbmdpbmUgKCVkLCAlZCkiLCBjbGFz cywgaW5zdGFuY2UpOwo+ICsJCWUyLT5uYW1lID0gdW5rbm93bl9uYW1lOwo+ICsJfQo+ICsKPiAr CS8qIGp1c3QgdG8gcmVtYXJrIGl0ICovCj4gKwllMi0+aXNfdmlydHVhbCA9IGZhbHNlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBxdWVyeV9lbmdpbmVfbGlzdChpbnQgZmQsIHN0cnVjdCBpbnRl bF9lbmdpbmVfZGF0YSAqZWQpCj4gK3sKPiArCXVpbnQ4X3QgYnVmZltTSVpFT0ZfUVVFUlldID0g eyB9Owo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvICpxdWVyeV9lbmdpbmUg PQo+ICsJCQkoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvICopIGJ1ZmY7Cj4gKwlp bnQgaTsKPiArCj4gKwlxdWVyeV9lbmdpbmVzKGZkLCBxdWVyeV9lbmdpbmUsIFNJWkVPRl9RVUVS WSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHF1ZXJ5X2VuZ2luZS0+bnVtX2VuZ2luZXM7IGkr KykKPiArCQlpbml0X2VuZ2luZSgmZWQtPmVuZ2luZXNbaV0sCj4gKwkJCSAgICBxdWVyeV9lbmdp bmUtPmVuZ2luZXNbaV0uZW5naW5lX2NsYXNzLAo+ICsJCQkgICAgcXVlcnlfZW5naW5lLT5lbmdp bmVzW2ldLmVuZ2luZV9pbnN0YW5jZSwgaSk7Cj4gKwo+ICsJZWQtPm5lbmdpbmVzID0gcXVlcnlf ZW5naW5lLT5udW1fZW5naW5lczsKPiArfQo+ICsKPiArc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyCj4gKyppbnRlbF9nZXRfY3VycmVudF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9k YXRhICplZCkKPiArewo+ICsJaWYgKCFlZC0+bikKPiArCQllZC0+Y3VycmVudF9lbmdpbmUgPSAm ZWQtPmVuZ2luZXNbMF07Cj4gKwllbHNlIGlmIChlZC0+biA+PSBlZC0+bmVuZ2luZXMpCj4gKwkJ ZWQtPmN1cnJlbnRfZW5naW5lID0gTlVMTDsKPiArCj4gKwlyZXR1cm4gZWQtPmN1cnJlbnRfZW5n aW5lOwo+ICt9Cj4gKwoKV2h5IGNhbiB0aGlzIGp1c3QgcmV0dXJuIGVkLT5jdXJyZW50X2VuZ2lu ZT8gSSBhbSBjb25mdXNlZCBieSB0aGUgbmVlZCAKdG8gY2hlY2sgYWdhaW5zdCBlZC0+bmVuZ2lu ZXMgYm90aCBpbiB0aGUgZ2V0dGVyIGFuZCBpbiB0aGUgbmV4dCBoZWxwZXIuIApKdXN0IG5lZWQg dG8gaW5pdCBlZC0+Y3VycmVudF9lbmdpbmUgdG8gdGhlIGZpcnN0IG9uZSBpbiAKaW5pdF9lbmdp bmVfbGlzdCBJIHRoaW5rLgoKPiArdm9pZCBpbnRlbF9uZXh0X2VuZ2luZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2RhdGEgKmVkKQo+ICt7Cj4gKwlpZiAoZWQtPm4gKyAxIDwgZWQtPm5lbmdpbmVzKSB7 Cj4gKwkJZWQtPm4rKzsKPiArCQllZC0+Y3VycmVudF9lbmdpbmUgPSAmZWQtPmVuZ2luZXNbZWQt Pm5dOwo+ICsJfSBlbHNlIHsKPiArCQllZC0+Y3VycmVudF9lbmdpbmUgPSBOVUxMOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIKPiArKmludGVsX2dldF9j dXJyZW50X3BoeXNpY2FsX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgKmVkKQo+ICt7 Cj4gKwlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4gKwo+ICsJaWYgKGVkLT5u ID49IGVkLT5uZW5naW5lcykKPiArCQlyZXR1cm4gTlVMTDsKCkNhbiB0aGlzIGJlIGhpdD8gaW50 ZWxfbmV4dF9lbmdpbmUgbG9va3MgdG8gYmUgYXZvaWRpbmcgaW5jcmVtZW50aW5nIApwYXN0IG5l bmdpbmVzIC0gMS4KCj4gKwo+ICsJaWYgKGlndF9vbmx5X2xpc3Rfc3VidGVzdHMoKSkKPiArCQlp bnRlbF9uZXh0X2VuZ2luZShlZCk7CgpJbiBzdWJ0ZXN0IGxpc3RpbmcgbW9kZSB0aGVyZSBjYW5u b3QgYmUgdmlydHVhbCBlbmdpbmVzIGluIHRoZSBsaXN0IHNvIEkgCnRoaW5rIHRoaXMgYnJhbmNo IGlzIG5vdCBuZWVkZWQuCgo+ICsJZWxzZQo+ICsJCWZvciAoZSA9IGludGVsX2dldF9jdXJyZW50 X2VuZ2luZShlZCk7Cj4gKwkJICAgICBlICYmIGUtPmlzX3ZpcnR1YWw7Cj4gKwkJICAgICBpbnRl bF9uZXh0X2VuZ2luZShlZCkpCj4gKwkJCTsKPiArCj4gKwlyZXR1cm4gZTsKPiArfQo+ICsKPiAr c3RydWN0IGludGVsX2VuZ2luZV9kYXRhIGludGVsX2luaXRfZW5naW5lX2xpc3QoaW50IGZkLCB1 aW50MzJfdCBjdHhfaWQpCj4gK3sKPiArCUk5MTVfREVGSU5FX0NPTlRFWFRfUEFSQU1fRU5HSU5F UyhlbmdpbmVzLCBHRU1fTUFYX0VOR0lORVMpOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9kYXRh IGVuZ2luZV9kYXRhID0geyB9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFt IHBhcmFtID0gewo+ICsJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTLAo+ICsJ CS5jdHhfaWQgPSBjdHhfaWQsCj4gKwkJLnNpemUgPSBTSVpFT0ZfQ1RYX1BBUkFNLAo+ICsJCS52 YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmZW5naW5lcyksCj4gKwl9Owo+ICsJaW50IGk7Cj4gKwl1 bnNpZ25lZCBpbnQgbmVuZ2luZXM7Cj4gKwo+ICsJaWYgKGlndF9vbmx5X2xpc3Rfc3VidGVzdHMo KSB8fCBfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJnBhcmFtKSkgewo+ICsJCS8qIGlmIGtl cm5lbCBkb2VzIG5vdCBzdXBwb3J0IGVuZ2luZS9jb250ZXh0IG1hcHBpbmcgKi8KPiArCQljb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUyOwo+ICsKPiArCQlpZ3RfZGVidWco InVzaW5nIHByZS1hbGxvY2F0ZWQgZW5naW5lIGxpc3RcbiIpOwo+ICsKPiArCQlfX2Zvcl9lYWNo X3N0YXRpY19lbmdpbmUoZTIpIHsKPiArCQkJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICpfX2UyID0KPiArCQkJCSZlbmdpbmVfZGF0YS5lbmdpbmVzW2VuZ2luZV9kYXRhLm5lbmdpbmVz XTsKPiArCj4gKwkJCWlmICghaWd0X29ubHlfbGlzdF9zdWJ0ZXN0cygpKSB7Cj4gKwkJCQlfX2Uy LT5mbGFncyA9IGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFncyhmZCwKPiArCQkJCQkJZTIt PmNsYXNzLCBlMi0+aW5zdGFuY2UpOwo+ICsKPiArCQkJCWlmICghZ2VtX2hhc19yaW5nKGZkLCBf X2UyLT5mbGFncykpCj4gKwkJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCV9fZTItPm5h bWUgICAgICAgPSBlMi0+bmFtZTsKPiArCQkJX19lMi0+aW5zdGFuY2UgICA9IGUyLT5pbnN0YW5j ZTsKPiArCQkJX19lMi0+Y2xhc3MgICAgICA9IGUyLT5jbGFzczsKPiArCQkJX19lMi0+aXNfdmly dHVhbCA9IGZhbHNlOwoKWW91IGNvdWxkIHVzZSBpbml0X2VuZ2luZSBoZXJlIGJ1dCBncmFudGVk IGl0IHdvdWxkIGhhdmUgdG8gZG8gYSAKcmVkdW5kYW50IG5hbWUgc2VhcmNoIHNvIG1heWJlIG5v dC4KCj4gKwo+ICsJCQllbmdpbmVfZGF0YS5uZW5naW5lcysrOwo+ICsJCX0KPiArCQlyZXR1cm4g ZW5naW5lX2RhdGE7Cj4gKwl9Cj4gKwo+ICsJbmVuZ2luZXMgPSBwYXJhbS5zaXplID4gc2l6ZW9m KHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcykgPwo+ICsJCSAgIChwYXJhbS5zaXpl IC0gc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcykpIC8KPiArCQkgICBz aXplb2YoZW5naW5lcy5jbGFzc19pbnN0YW5jZVswXSkgOgo+ICsJCSAgIDA7Cj4gKwo+ICsJaWd0 X2Fzc2VydF9mKG5lbmdpbmVzIDw9IEdFTV9NQVhfRU5HSU5FUywgInVuc3VwcG9ydGVkIGVuZ2lu ZSBjb3VudFxuIik7Cj4gKwo+ICsJaWYgKCFwYXJhbS5zaXplKSB7Cj4gKwkJLyogZWxzZSBpZiBj b250ZXh0IGRvZXNuJ3QgaGF2ZSBtYXBwZWQgZW5naW5lcyAqLwo+ICsJCXF1ZXJ5X2VuZ2luZV9s aXN0KGZkLCAmZW5naW5lX2RhdGEpOwo+ICsJCWN0eF9tYXBfZW5naW5lcyhmZCwgJmVuZ2luZV9k YXRhLCAmcGFyYW0pOwo+ICsKPiArCX0gZWxzZSB7Cj4gKwkJLyogY29udGV4dCBoYXMgYSBsaXN0 IG9mIG1hcHBlZCBlbmdpbmVzICovCj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBuZW5naW5lczsg aSsrKQo+ICsJCQlpbml0X2VuZ2luZSgmZW5naW5lX2RhdGEuZW5naW5lc1tpXSwKPiArCQkJCSAg ICBlbmdpbmVzLmNsYXNzX2luc3RhbmNlW2ldLmVuZ2luZV9jbGFzcywKPiArCQkJCSAgICBlbmdp bmVzLmNsYXNzX2luc3RhbmNlW2ldLmVuZ2luZV9pbnN0YW5jZSwKPiArCQkJCSAgICBpKTsKPiAr Cj4gKwkJZW5naW5lX2RhdGEubmVuZ2luZXMgPSBpOwo+ICsJfQo+ICsKPiArCXJldHVybiBlbmdp bmVfZGF0YTsKPiArfQo+ICsKPiArYm9vbCBnZW1faGFzX2VuZ2luZV90b3BvbG9neShpbnQgZmQp Cj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBwYXJhbSA9IHsKPiAr CQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCX07Cj4gKwo+ICsJcmV0 dXJuICFfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJnBhcmFtKTsKPiArfQo+IGRpZmYgLS1n aXQgYS9saWIvaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmggYi9saWIvaTkxNS9nZW1fZW5naW5l X3RvcG9sb2d5LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u YjAyODViODBmNjczCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pOTE1L2dlbV9lbmdpbmVf dG9wb2xvZ3kuaAo+IEBAIC0wLDAgKzEsNjYgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIw MTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoK PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4g Kwo+ICsjaWZuZGVmIEdFTV9FTkdJTkVfVE9QT0xPR1lfSAo+ICsjZGVmaW5lIEdFTV9FTkdJTkVf VE9QT0xPR1lfSAo+ICsKPiArI2luY2x1ZGUgImlndF9ndC5oIgo+ICsjaW5jbHVkZSAiaTkxNV9k cm0uaCIKPiArCj4gKyNkZWZpbmUgR0VNX01BWF9FTkdJTkVTCQlJOTE1X0VYRUNfUklOR19NQVNL ICsgMQo+ICsKPiArc3RydWN0IGludGVsX2VuZ2luZV9kYXRhIHsKPiArCXVpbnQzMl90IG5lbmdp bmVzOwo+ICsJdWludDMyX3QgbjsKPiArCWludCBlcnJvcjsKPiArCXN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqY3VycmVudF9lbmdpbmU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZTIgZW5naW5lc1tHRU1fTUFYX0VOR0lORVNdOwo+ICt9Owo+ICsKPiArYm9vbCBnZW1f aGFzX2VuZ2luZV90b3BvbG9neShpbnQgZmQpOwo+ICtzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEg aW50ZWxfaW5pdF9lbmdpbmVfbGlzdChpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCk7Cj4gKwo+ICsv KiBpdGVyYXRpb24gZnVuY3Rpb25zICovCj4gK3N0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5l Mgo+ICsqaW50ZWxfZ2V0X2N1cnJlbnRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSAq ZWQpOwo+ICsKPiArc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyCj4gKyppbnRlbF9nZXRf Y3VycmVudF9waHlzaWNhbF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9kYXRhICplZCk7Cj4g Kwo+ICt2b2lkIGludGVsX25leHRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSAqZWQp Owo+ICsKPiArI2RlZmluZSBfX2Zvcl9lYWNoX3N0YXRpY19lbmdpbmUoZV9fKSBcCj4gKwlmb3Ig KChlX18pID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMyOyAoZV9fKS0+bmFtZTsgKGVfXykrKykK PiArCj4gKyNkZWZpbmUgZm9yX2VhY2hfY29udGV4dF9lbmdpbmUoZmRfXywgY3R4X18sIGVfXykg XAo+ICsJZm9yIChzdHJ1Y3QgaW50ZWxfZW5naW5lX2RhdGEgaV9fID0gaW50ZWxfaW5pdF9lbmdp bmVfbGlzdChmZF9fLCBjdHhfXyk7IFwKPiArCSAgICAgKChlX18pID0gaW50ZWxfZ2V0X2N1cnJl bnRfZW5naW5lKCZpX18pKTsgXAo+ICsJICAgICBpbnRlbF9uZXh0X2VuZ2luZSgmaV9fKSkKPiAr Cj4gKy8qIG5lZWRzIHRvIHJlcGxhY2UgImZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZSIgd2hlbiBj b25mbGljdHMgYXJlIGZpeGVkICovCj4gKyNkZWZpbmUgX19mb3JfZWFjaF9waHlzaWNhbF9lbmdp bmUoZmRfXywgZV9fKSBcCj4gKwlmb3IgKHN0cnVjdCBpbnRlbF9lbmdpbmVfZGF0YSBpX18gPSBp bnRlbF9pbml0X2VuZ2luZV9saXN0KGZkX18sIDApOyBcCj4gKwkgICAgICgoZV9fKSA9IGludGVs X2dldF9jdXJyZW50X3BoeXNpY2FsX2VuZ2luZSgmaV9fKSk7IFwKPiArCSAgICAgaW50ZWxfbmV4 dF9lbmdpbmUoJmlfXykpCj4gKwo+ICsjZW5kaWYgLyogR0VNX0VOR0lORV9UT1BPTE9HWV9IICov Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3QuaCBiL2xpYi9pZ3QuaAo+IGluZGV4IDY2NTRhNjU5YzA2 Mi4uMDNmMTljYTJkZmI2IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3QuaAo+ICsrKyBiL2xpYi9pZ3Qu aAo+IEBAIC01Myw1ICs1Myw2IEBACj4gICAjaW5jbHVkZSAibWVkaWFfc3Bpbi5oIgo+ICAgI2lu Y2x1ZGUgInJlbmRlcmNvcHkuaCIKPiAgICNpbmNsdWRlICJpOTE1L2dlbV9tbWFuLmgiCj4gKyNp bmNsdWRlICJpOTE1L2dlbV9lbmdpbmVfdG9wb2xvZ3kuaCIKPiAgIAo+ICAgI2VuZGlmIC8qIElH VF9IICovCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZ3QuaCBiL2xpYi9pZ3RfZ3QuaAo+IGluZGV4 IDQ3NWMwYjNjM2NjNi4uNTJiMmYxZWE5NWE1IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZ3QuaAo+ ICsrKyBiL2xpYi9pZ3RfZ3QuaAo+IEBAIC05NSw2ICs5NSw4IEBAIGV4dGVybiBjb25zdCBzdHJ1 Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgewo+ICAgCWNvbnN0IGNoYXIgKm5hbWU7Cj4gICAJ aW50IGNsYXNzOwo+ICAgCWludCBpbnN0YW5jZTsKPiArCXVpbnQ2NF90IGZsYWdzOwo+ICsJYm9v bCBpc192aXJ0dWFsOwo+ICAgfSBpbnRlbF9leGVjdXRpb25fZW5naW5lczJbXTsKPiAgIAo+ICAg dW5zaWduZWQgaW50Cj4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5i dWlsZAo+IGluZGV4IDg5ZGUwNmU2OTI0YS4uOTNjMDFkYWE0MjIyIDEwMDY0NAo+IC0tLSBhL2xp Yi9tZXNvbi5idWlsZAo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZAo+IEBAIC01LDYgKzUsNyBAQCBs aWJfc291cmNlcyA9IFsKPiAgIAknaTkxNS9nZW1fc3VibWlzc2lvbi5jJywKPiAgIAknaTkxNS9n ZW1fcmluZy5jJywKPiAgIAknaTkxNS9nZW1fbW1hbi5jJywKPiArCSdpOTE1L2dlbV9lbmdpbmVf dG9wb2xvZ3kuYycsCj4gICAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKPiAgIAknaWd0X2RlYnVn ZnMuYycsCj4gICAJJ2lndF9kZXZpY2UuYycsCj4gCgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBs aXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==