From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 08/13] drm/i915: Eliminate lots of iterations over the execobjects array Date: Tue, 04 Apr 2017 17:57:34 +0300 Message-ID: <1491317854.3024.44.camel@linux.intel.com> References: <20170329155635.19060-1-chris@chris-wilson.co.uk> <20170329155635.19060-9-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0CBEB89831 for ; Tue, 4 Apr 2017 14:57:40 +0000 (UTC) In-Reply-To: <20170329155635.19060-9-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24ga2UsIDIwMTctMDMtMjkgYXQgMTY6NTYgKzAxMDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBU aGUgbWFqb3Igc2NhbGluZyBib3R0bGVuZWNrIGluIGV4ZWNidWZmZXIgaXMgdGhlIHByb2Nlc3Np bmcgb2YgdGhlCj4gZXhlY29iamVjdHMuIENyZWF0aW5nIGFuIGF1eGlsaWFyeSBsaXN0IGlzIGlu ZWZmaWNpZW50IHdoZW4gY29tcGFyZWQgdG8KPiB1c2luZyB0aGUgZXhlY29iamVjdCBhcnJheSB3 ZSBhbHJlYWR5IGhhdmUgYWxsb2NhdGVkLgo+IAo+IFJlc2VydmF0aW9uIGlzIHRoZW4gc3BsaXQg aW50byBwaGFzZXMuIEFzIHdlIGxvb2t1cCB1cCB0aGUgVk1BLCB3ZQo+IHRyeSBhbmQgYmluZCBp dCBiYWNrIGludG8gYWN0aXZlIGxvY2F0aW9uLiBPbmx5IGlmIHRoYXQgZmFpbHMsIGRvIHdlIGFk ZAo+IGl0IHRvIHRoZSB1bmJvdW5kIGxpc3QgZm9yIHBoYXNlIDIuIEluIHBoYXNlIDIsIHdlIHRy eSBhbmQgYWRkIGFsbCB0aG9zZQo+IG9iamVjdHMgdGhhdCBjb3VsZCBub3QgZml0IGludG8gdGhl aXIgcHJldmlvdXMgbG9jYXRpb24sIHdpdGggZmFsbGJhY2sKPiB0byByZXRyeWluZyBhbGwgb2Jq ZWN0cyBhbmQgZXZpY3RpbmcgdGhlIFZNIGluIGNhc2Ugb2Ygc2V2ZXJlCj4gZnJhZ21lbnRhdGlv bi4gKFRoaXMgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLCBleGNlcHQgdGhhdCBwaGFzZSAxIGlzIG5v dwo+IGRvbmUgaW5saW5lIHdpdGggbG9va2luZyB1cCB0aGUgVk1BIHRvIGF2b2lkIGFuIGl0ZXJh dGlvbiBvdmVyIHRoZQo+IGV4ZWNvYmplY3QgYXJyYXkuIEluIHRoZSBpZGVhbCBjYXNlLCB3ZSBl bGltaW5hdGUgdGhlIHNlcGFyYXRlIHJlc2VydmF0aW9uCj4gcGhhc2UpLiBEdXJpbmcgdGhlIHJl c2VydmF0aW9uIHBoYXNlLCB3ZSBvbmx5IGV2aWN0IGZyb20gdGhlIFZNIGJldHdlZW4KPiBwYXNz ZXMgKHJhdGhlciB0aGFuIGN1cnJlbnRseSBhcyB3ZSB0cnkgdG8gZml0IGV2ZXJ5IG5ldyBWTUEp LiBJbgo+IHRlc3Rpbmcgd2l0aCBVbnJlYWwgRW5naW5lJ3MgQXRsYW50aXMgZGVtbyB3aGljaCBz dHJlc3NlcyB0aGUgZXZpY3Rpb24KPiBsb2dpYyBvbiBnZW43IGNsYXNzIGhhcmR3YXJlLCB0aGlz IHNwZWVkIHVwIHRoZSBmcmFtZXJhdGUgYnkgYSBmYWN0b3Igb2YKPiAyLgo+IAo+IFRoZSBzZWNv bmQgbG9vcCBhbWFsZ2FtYXRpb24gaXMgYmV0d2VlbiBtb3ZlX3RvX2dwdSBhbmQgbW92ZV90b19h Y3RpdmUuCj4gQXMgd2UgYWx3YXlzIHN1Ym1pdCB0aGUgcmVxdWVzdCwgZXZlbiBpZiBpbmNvbXBs ZXRlLCB3ZSBjYW4gdXNlIHRoZQo+IGN1cnJlbnQgcmVxdWVzdCB0byB0cmFjayBhY3RpdmUgVk1B IGFzIHdlIHBlcmZvcm0gdGhlIGZsdXNoZXMgYW5kCj4gc3luY2hyb25pc2F0aW9uIHJlcXVpcmVk Lgo+IAo+IFRoZSBuZXh0IGJpZyBhZHZhbmNlbWVudCBpcyB0byBhdm9pZCBjb3B5aW5nIGJhY2sg dG8gdGhlIHVzZXIgYW55Cj4gZXhlY29iamVjdHMgYW5kIHJlbG9jYXRpb25zIHRoYXQgYXJlIG5v dCBjaGFuZ2VkLgo+IAo+IHYyOiBBZGQgYSBUaGVvcnkgb2YgT3BlcmF0aW9uIHNwaWVsLgo+IHYz OiBGYWxsIGJhY2sgdG8gc2xvdyByZWxvY2F0aW9ucyBpbiBwcmVwYXJhdGlvbiBmb3IgZmx1c2hp bmcgdXNlcnB0cnMuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+Cgo8U05JUD4KCj4gwqBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyIHsKPiDC oAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiDCoAlzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGU7Cj4gQEAgLTYzLDE5ICsxODAsMjQgQEAgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciB7Cj4gwqAJ c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07Cj4gwqAJc3RydWN0IGk5MTVfdm1hICpiYXRj aDsKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4gLQl1MzIgYmF0 Y2hfc3RhcnRfb2Zmc2V0Owo+IC0JdTMyIGJhdGNoX2xlbjsKPiAtCXVuc2lnbmVkIGludCBkaXNw YXRjaF9mbGFnczsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIHNoYWRvd19l eGVjX2VudHJ5Owo+IC0JYm9vbCBuZWVkX3JlbG9jczsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgdm1h czsKPiArCXVuc2lnbmVkIGludCBidWZmZXJfY291bnQ7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHVu Ym91bmQ7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlbG9jczsKPiDCoAlzdHJ1Y3QgcmVsb2NfY2Fj aGUgewo+IMKgCQlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKPiDCoAkJdW5zaWduZWQgbG9uZyB2 YWRkcjsKPiDCoAkJdW5zaWduZWQgaW50IHBhZ2U7Cj4gwqAJCWJvb2wgdXNlXzY0Yml0X3JlbG9j IDogMTsKPiArCQlib29sIGhhc19sbGMgOiAxOwo+ICsJCWJvb2wgaGFzX2ZlbmNlIDogMTsKPiAr CQlib29sIG5lZWRzX3VuZmVuY2VkIDogMTsKPiDCoAl9IHJlbG9jX2NhY2hlOwo+IC0JaW50IGx1 dF9tYXNrOwo+ICsJdTY0IGludmFsaWRfZmxhZ3M7Cj4gKwl1MzIgY29udGV4dF9mbGFnczsKPiAr CXUzMiBkaXNwYXRjaF9mbGFnczsKPiArCXUzMiBiYXRjaF9zdGFydF9vZmZzZXQ7Cj4gKwl1MzIg YmF0Y2hfbGVuOwo+ICsJaW50IGx1dF9zaXplOwo+IMKgCXN0cnVjdCBobGlzdF9oZWFkICpidWNr ZXRzOwoKUGxlYXNlIGRvY3VtZW50IChuZXcpIG1lbWJlcnMuCgo+ICtzdGF0aWMgaW5saW5lIHU2 NCBnZW44X25vbmNhbm9uaWNhbF9hZGRyKHU2NCBhZGRyZXNzKQo+ICt7Cj4gKwlyZXR1cm4gYWRk cmVzcyAmICgoMVVMTCA8PCAoR0VOOF9ISUdIX0FERFJFU1NfQklUICsgMSkpIC0gMSk7CgpHRU5N QVNLX1VMTAoKPiBAQCAtMTA2LDcxICsyNTYsMzAyIEBAIGViX2NyZWF0ZShzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyICplYikKPiDCoAkJCQlyZXR1cm4gLUVOT01FTTsKPiDCoAkJfQo+IMKgCj4gLQkJ ZWItPmx1dF9tYXNrID0gc2l6ZTsKPiArCQllYi0+bHV0X3NpemUgPSBzaXplOwo+IMKgCX0gZWxz ZSB7Cj4gLQkJZWItPmx1dF9tYXNrID0gLWViLT5hcmdzLT5idWZmZXJfY291bnQ7Cj4gKwkJZWIt Pmx1dF9zaXplID0gLWViLT5idWZmZXJfY291bnQ7CgpEb2N1bWVudCB0aGUgbmVnYXRpdmUgbWVh bmluZyBpbiB0aGUgZG9jIG1lbnRpb25lZCBhYm92ZS4KCj4gK3N0YXRpYyBib29sCj4gK2ViX3Zt YV9taXNwbGFjZWQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5 LAo+ICsJCcKgY29uc3Qgc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gK3sKPiArCWlmICgoZW50cnkt PmZsYWdzICYgX19FWEVDX09CSkVDVF9IQVNfUElOKSA9PSAwKQoKTGV0cyB0cnkgdG8gc3RpY2sg dG8gb25lIGNvbnZlbnRpb24sIHdlIGdhdmUgdXAgPT0gTlVMTCB0b28sIHNvCiEoYSAmIEZPTyku Cgo8U05JUD4KCj4gKwlpZiAoKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4 Ql9BRERSRVNTKSA9PSAwICYmCj4gKwnCoMKgwqDCoCh2bWEtPm5vZGUuc3RhcnQgKyB2bWEtPm5v ZGUuc2l6ZSAtIDEpID4+IDMyKQoKdXBwZXJfMzJfYml0cyBmb3IgY2xhcml0eT8KCj4gK3N0YXRp YyB2b2lkCj4gK2ViX3Bpbl92bWEoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4gKwnCoMKg wqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnksCj4gKwnCoMKgwqBzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKPiArewo+ICsJdTY0IGZsYWdzOwo+ICsKPiArCWZsYWdzID0gdm1h LT5ub2RlLnN0YXJ0OwoKSSdkIGJlIG1vcmUgY29tZm9ydGFibGUgaWYgc29tZSBtYXNrIHdhcyBh cHBsaWVkIGhlcmUuCgpPciBhdCBsZWFzdCBHRU1fQlVHX09OKGZsYWdzICYgQkFEX0ZMQUdTKTsK Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtlYl91bnJlc2VydmVfdm1hKHN0cnVjdCBpOTE1X3Zt YSAqdm1hLAo+ICsJCcKgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5KQo+ IMKgewo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1hLT5l eGVjX2VudHJ5Owo+IC0KPiAtCV9fZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIGVudHJ5KTsKPiAtCWVu dHJ5LT5mbGFncyAmPSB+KF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFIHwgX19FWEVDX09CSkVDVF9I QVNfUElOKTsKPiArCWlmIChlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX0hBU19QSU4pIHsK CkknZCB0cmVhdCB0aGUgaWYgbW9yZSBhcyBhbiBlYXJseSByZXR1cm4sIGJ1dCBJIGd1ZXNzIHlv dSBoYXZlIG1vcmUKY29kZSBjb21pbmcuCgo+ICtzdGF0aWMgaW50Cj4gK2ViX2FkZF92bWEoc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4gPiArCcKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICplbnRyeSwKPiA+ICsJwqDCoMKgc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g wqB7Cj4gPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ID4gKwlpbnQgcmV0Owo+IMKgCj4gPiAt CWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmZWItPnZtYXMsIGV4ZWNfbGluaykgewo+ID4gLQkJ ZWJfdW5yZXNlcnZlX3ZtYSh2bWEpOwo+ID4gLQkJaTkxNV92bWFfcHV0KHZtYSk7Cj4gPiAtCQl2 bWEtPmV4ZWNfZW50cnkgPSBOVUxMOwo+ID4gKwlHRU1fQlVHX09OKGk5MTVfdm1hX2lzX2Nsb3Nl ZCh2bWEpKTsKPiArCj4gKwlpZiAoKGViLT5hcmdzLT5mbGFncyAmIF9fRVhFQ19WQUxJREFURUQp ID09IDApIHsKCnNtZWxscyBsaWtlIGEgZnVuY3Rpb24gaGVyZS4KCjxTTklQPgoKPiAJfQo+IMKg Cj4gLQlpZiAoZWItPmx1dF9tYXNrID49IDApCj4gLQkJbWVtc2V0KGViLT5idWNrZXRzLCAwLAo+ IC0JCcKgwqDCoMKgwqDCoMKgc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSA8PCBlYi0+bHV0X21h c2spOwo+ICsJdm1hLT5leGVjX2VudHJ5ID0gZW50cnk7Cj4gKwllbnRyeS0+cnN2ZDIgPSAodWlu dHB0cl90KXZtYTsKClVtbSwgdGhlcmUgd2FzIGEgaGVscGVyIGludHJvZHVjZWQgaW4gc29tZSBw YXRjaC4KCjxTTklQPgoKQ291bGQgYWRkIGEgY29tbWVudCBhcyB0byB3aHkgZG8gdGhpcz8KCj4g KwlpZiAoKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkgPT0gMCkKPiArCQllbnRy eS0+ZmxhZ3MgfD0gZWItPmNvbnRleHRfZmxhZ3M7Cj4gKwoKPFNOSVA+Cgo+ICsKPiArc3RhdGlj IGludAo+ICtlYl9yZXNlcnZlX3ZtYShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gK3sKCjxTTklQPgrCoAo+IC0JaTkxNV92bWFfZ2V0KHZtYSk7Cj4g LQlfX2V4ZWNfdG9fdm1hKCZlYi0+ZXhlY1tpXSkgPSAodWludHB0cl90KXZtYTsKPiAtCXJldHVy biB0cnVlOwo+ICsJaWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFKSB7 Cj4gKwkJcmV0ID0gaTkxNV92bWFfZ2V0X2ZlbmNlKHZtYSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiArCj4gKwkJaWYgKGk5MTVfdm1hX3Bpbl9mZW5jZSh2bWEpKQo+ICsJCQll bnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9IQVNfRkVOQ0U7Cj4gKwl9CgpTbWVsbHMgbGlr ZSBkdXBsaWNhdGUgY29kZSB3aXRoIGViX3ZtYV9waW4uCgo8U05JUD7CoArCoAogCj4gc3RhdGlj IGludAo+IGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQo+IHsKCjxT TklQPgoKPiAtCWlmIChodF9uZWVkc19yZXNpemUoZWItPmN0eCkpIHsKPiAtCQllYi0+Y3R4LT52 bWFfbHV0Lmh0X3NpemUgfD0gSTkxNV9DVFhfUkVTSVpFX0lOX1BST0dSRVNTOwo+IC0JCXF1ZXVl X3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZlYi0+Y3R4LT52bWFfbHV0LnJlc2l6ZSk7Cj4gLQl9 Cj4gKwlpZiAoZWItPmN0eC0+dm1hX2x1dC5odF9zaXplICYgSTkxNV9DVFhfUkVTSVpFX0lOX1BS T0dSRVNTKSB7Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHRfdm1hX2x1dCAqbHV0ID0gJmVi LT5jdHgtPnZtYV9sdXQ7CgpZb3UgY291bGQgaG9pc3QgdGhlIGx1dCB2YXJpYWJsZSwgaXRzIHVz ZWQgcXVpdGUgYSBmZXcgdGltZXMuCgo+IEBAIC02MTYsMTYgKzEwNDgsMTUgQEAgcmVsb2NhdGVf ZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiDCoAkJZ290byByZXBlYXQ7 Cj4gCX0KPiDCoAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gZ2VuOF9jYW5vbmljYWxfYWRkcih0 YXJnZXQtPm5vZGUuc3RhcnQpIHwgMTsKCk1hZ2ljIGJpdC4KCj4gK3N0YXRpYyBpbnQgZWJfcmVs b2NhdGVfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaTkxNV92bWEgKnZt YSkKPiDCoHsKPiDCoCNkZWZpbmUgTl9SRUxPQyh4KSAoKHgpIC8gc2l6ZW9mKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSkpCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgc3RhY2tfcmVsb2NbTl9SRUxPQyg1MTIpXTsKPiAtCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnVzZXJfcmVsb2NzOwo+IC0Jc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1hLT5leGVjX2VudHJ5Owo+IC0JaW50 IHJlbWFpbiwgcmV0ID0gMDsKPiAtCj4gLQl1c2VyX3JlbG9jcyA9IHU2NF90b191c2VyX3B0cihl bnRyeS0+cmVsb2NzX3B0cik7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50 cnkgc3RhY2tbTl9SRUxPQyg1MTIpXTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlv bl9lbnRyeSBfX3VzZXIgKnVyZWxvY3M7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Cj4gKwl1bnNpZ25lZCBpbnQgcmVt YWluOwo+IMKgCj4gKwl1cmVsb2NzID0gdTY0X3RvX3VzZXJfcHRyKGVudHJ5LT5yZWxvY3NfcHRy KTsKPiDCoAlyZW1haW4gPSBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsKPiAtCXdoaWxlIChyZW1h aW4pIHsKPiAtCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnIgPSBzdGFj a19yZWxvYzsKPiAtCQl1bnNpZ25lZCBsb25nIHVud3JpdHRlbjsKPiAtCQl1bnNpZ25lZCBpbnQg Y291bnQ7Cj4gKwlpZiAodW5saWtlbHkocmVtYWluID4gVUxPTkdfTUFYIC8gc2l6ZW9mKCp1cmVs b2NzKSkpCgpIb3cgYm91dCBOX1JFTE9DKFVMT05HX01BWCkgPwoKPiBAQCAtNzMyLDY2ICsxMTY0 LDY2IEBAIHN0YXRpYyBpbnQgZWJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBz dHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKPiDCoAkJwqAqIHRoaXMgaXMgYmFkIGFuZCBzbyBs b2NrZGVwIGNvbXBsYWlucyB2ZWhlbWVudGx5Lgo+IMKgCQnCoCovCj4gwqAJCXBhZ2VmYXVsdF9k aXNhYmxlKCk7Cj4gLQkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhyLCB1 c2VyX3JlbG9jcywgY291bnQqc2l6ZW9mKHJbMF0pKTsKPiAtCQlwYWdlZmF1bHRfZW5hYmxlKCk7 Cj4gLQkJaWYgKHVubGlrZWx5KHVud3JpdHRlbikpIHsKPiAtCQkJcmV0ID0gLUVGQVVMVDsKPiAr CQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhyLCB1cmVsb2NzLCBjb3VudCpzaXplb2Yo clswXSkpKSB7Cj4gKwkJCXBhZ2VmYXVsdF9lbmFibGUoKTsKPiArCQkJcmVtYWluID0gLUVGQVVM VDsKPiDCoAkJCWdvdG8gb3V0Owo+IMKgCQl9Cj4gKwkJcGFnZWZhdWx0X2VuYWJsZSgpOwoKV2h5 IGR1cGUgdGhlIHBhZ2VmYXVsdF9lbmFibGU/Cgo+IMKgCj4gKwkJcmVtYWluIC09IGNvdW50Owo+ IMKgCQlkbyB7Cj4gLQkJCXU2NCBvZmZzZXQgPSByLT5wcmVzdW1lZF9vZmZzZXQ7Cj4gKwkJCXU2 NCBvZmZzZXQgPSBlYl9yZWxvY2F0ZV9lbnRyeShlYiwgdm1hLCByKTsKPiDCoAo+IC0JCQlyZXQg PSBlYl9yZWxvY2F0ZV9lbnRyeSh2bWEsIGViLCByKTsKPiAtCQkJaWYgKHJldCkKPiArCQkJaWYg KGxpa2VseShvZmZzZXQgPT0gMCkpIHsKClNwYXJzZSBub3QgY29tcGxhaW5pbmc/Cgo+ICsJCQl9 IGVsc2UgaWYgKChzNjQpb2Zmc2V0IDwgMCkgewo+ICsJCQkJcmVtYWluID0gKHM2NClvZmZzZXQ7 Cj4gwqAJCQkJZ290byBvdXQ7Cj4gLQo+IC0JCQlpZiAoci0+cHJlc3VtZWRfb2Zmc2V0ICE9IG9m ZnNldCkgewo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJLyogTm90ZSB0aGF0IHJlcG9ydGluZyBhbiBl cnJvciBub3cKPiArCQkJCcKgKiBsZWF2ZXMgZXZlcnl0aGluZyBpbiBhbiBpbmNvbnNpc3RlbnQK PiArCQkJCcKgKiBzdGF0ZSBhcyB3ZSBoYXZlICphbHJlYWR5KiBjaGFuZ2VkCj4gKwkJCQnCoCog dGhlIHJlbG9jYXRpb24gdmFsdWUgaW5zaWRlIHRoZQo+ICsJCQkJwqAqIG9iamVjdC4gQXMgd2Ug aGF2ZSBub3QgY2hhbmdlZCB0aGUKPiArCQkJCcKgKiByZWxvYy5wcmVzdW1lZF9vZmZzZXQgb3Ig d2lsbCBub3QKPiArCQkJCcKgKiBjaGFuZ2UgdGhlIGV4ZWNvYmplY3Qub2Zmc2V0LCBvbiB0aGUK PiArCQkJCcKgKiBjYWxsIHdlIG1heSBub3QgcmV3cml0ZSB0aGUgdmFsdWUKPiArCQkJCcKgKiBp bnNpZGUgdGhlIG9iamVjdCwgbGVhdmluZyBpdAo+ICsJCQkJwqAqIGRhbmdsaW5nIGFuZCBjYXVz aW5nIGEgR1BVIGhhbmcuCj4gKwkJCQnCoCovCj4gwqAJCQkJcGFnZWZhdWx0X2Rpc2FibGUoKTsK PiAtCQkJCXVud3JpdHRlbiA9IF9fcHV0X3VzZXIoci0+cHJlc3VtZWRfb2Zmc2V0LAo+IC0JCQkJ CQnCoMKgwqDCoMKgwqDCoCZ1c2VyX3JlbG9jcy0+cHJlc3VtZWRfb2Zmc2V0KTsKPiArCQkJCV9f cHV0X3VzZXIob2Zmc2V0ICYgfjEsCgpNYWdpYy4KCj4gKwkJCQkJwqDCoMKgJnVyZWxvY3Nbci1z dGFja10ucHJlc3VtZWRfb2Zmc2V0KTsKClRoZXJlJ3MgdGhlIGNvbW1lbnQsIHNvIG1heWJlIHdv cnRoIGlmIChfX3B1dF91c2VyKCkpIERSTV9ERUJVRz8KCj4gwqAJCQkJcGFnZWZhdWx0X2VuYWJs ZSgpOwoKPFNOSVA+Cgo+ICtzdGF0aWMgaW50IGNoZWNrX3JlbG9jYXRpb25zKGNvbnN0IHN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSkKPsKgewoKPFNOSVA+Cj4gKwljb25z dCB1bnNpZ25lZCBsb25nIHJlbG9jc19tYXggPQo+ICsJCVVMT05HX01BWCAvIHNpemVvZihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkpOwoKQ291bGQgYmUgYSBkZWZpbmUsIHRo aXMgaXMgdXNlZCBhYm92ZSB0b28uCgo8U05JUD4KCj4gKwlyZXR1cm4gX19nZXRfdXNlcihjLCBl bmQgLSAxKTsKCldoYXQncyB0aGUgcG9pbnQgaW4gdGhpcyBmaW5hbCBjaGVjaz8KCj4gwqB9Cj4g wqAKPiAtc3RhdGljIGJvb2wKPiAtbmVlZF9yZWxvY19tYXBwYWJsZShzdHJ1Y3QgaTkxNV92bWEg KnZtYSkKPiArc3RhdGljIGludAo+ICtlYl9jb3B5X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViKQo+IMKgewo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgKmVudHJ5ID0gdm1hLT5leGVjX2VudHJ5Owo+IC0KPiAtCWlmIChlbnRyeS0+cmVsb2Nh dGlvbl9jb3VudCA9PSAwKQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlpZiAoIWk5MTVfdm1h X2lzX2dndHQodm1hKSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gKwljb25zdCB1bnNpZ25lZCBpbnQg Y291bnQgPSBlYi0+YnVmZmVyX2NvdW50Owo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwlpbnQgcmV0 Owo+IMKgCj4gLQkvKiBTZWUgYWxzbyB1c2VfY3B1X3JlbG9jKCkgKi8KPiAtCWlmIChIQVNfTExD KHRvX2k5MTUodm1hLT5vYmotPmJhc2UuZGV2KSkpCj4gLQkJcmV0dXJuIGZhbHNlOwo+ICsJZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgX191c2VyICp1cmVsb2NzOwo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVs b2NhdGlvbl9lbnRyeSAqcmVsb2NzOwo+ICsJCXVuc2lnbmVkIGludCBucmVsb2MgPSBlYi0+ZXhl Y1tpXS5yZWxvY2F0aW9uX2NvdW50LCBqOwoKTm8gaGlkZGVuIHZhcmlhYmxlcyBpbiBhc3NpZ25t ZW50IGxpbmVzLgrCoAo+IC1zdGF0aWMgYm9vbAo+IC1lYl92bWFfbWlzcGxhY2VkKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAq ZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Cj4gKwkJdXJlbG9jcyA9IHU2NF90b191c2VyX3B0cihl Yi0+ZXhlY1tpXS5yZWxvY3NfcHRyKTsKPiArCQlzaXplID0gbnJlbG9jICogc2l6ZW9mKCpyZWxv Y3MpOwo+IMKgCj4gLQlXQVJOX09OKGVudHJ5LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfTkVFRFNf TUFQICYmCj4gLQkJIWk5MTVfdm1hX2lzX2dndHQodm1hKSk7Cj4gKwkJcmVsb2NzID0gZHJtX21h bGxvY19nZnAoc2l6ZSwgMSwgR0ZQX1RFTVBPUkFSWSk7Cj4gKwkJaWYgKCFyZWxvY3MpIHsKPiAr CQkJZHJtX2ZyZWVfbGFyZ2UocmVsb2NzKTsKPiArCQkJcmV0ID0gLUVOT01FTTsKPiArCQkJZ290 byBlcnI7Cj4gKwkJfQo+IMKgCj4gLQlpZiAoZW50cnktPmFsaWdubWVudCAmJiAhSVNfQUxJR05F RCh2bWEtPm5vZGUuc3RhcnQsIGVudHJ5LT5hbGlnbm1lbnQpKQo+IC0JCXJldHVybiB0cnVlOwo+ ICsJCS8qIGNvcHlfZnJvbV91c2VyIGlzIGxpbWl0ZWQgdG8gNEdpQiAqLwo+ICsJCWogPSAwOwo+ ICsJCWRvIHsKPiArCQkJdTMyIGxlbiA9IG1pbl90KHU2NCwgMXVsbDw8MzEsIHNpemUpOwoKQklU X1VMTCgzMSkKCj4gK3N0YXRpYyB2b2lkIGViX2V4cG9ydF9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAo+ICsJCQnCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxLAo+ICsJCQnCoMKgwqDCoHVuc2lnbmVkIGludCBmbGFncykKPiArewo+ICsJc3RydWN0 IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdiA9IG9iai0+cmVzdjsKPiArCj4gKwkvKiBJZ25vcmUg ZXJyb3JzIGZyb20gZmFpbGluZyB0byBhbGxvY2F0ZSB0aGUgbmV3IGZlbmNlLCB3ZSBjYW4ndAo+ ICsJwqAqIGhhbmRsZSBhbiBlcnJvciByaWdodCBub3cuIFdvcnN0IGNhc2Ugc2hvdWxkIGJlIG1p c3NlZAo+ICsJwqAqIHN5bmNocm9uaXNhdGlvbiBsZWFkaW5nIHRvIHJlbmRlcmluZyBjb3JydXB0 aW9uLgo+ICsJwqAqLwoKV29ydGh5IERSTV9ERUJVRz8KCj4gQEAgLTExNTUsMTAgKzE1MjQsMzMg QEAgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCj4gwqAJCX0KPiDC oAo+IMKgCQlyZXQgPSBpOTE1X2dlbV9yZXF1ZXN0X2F3YWl0X29iamVjdAo+IC0JCQkoZWItPnJl cXVlc3QsIG9iaiwgdm1hLT5leGVjX2VudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRFKTsK PiArCQkJKGViLT5yZXF1ZXN0LCBvYmosIGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRF KTsKPiDCoAkJaWYgKHJldCkKPiDCoAkJCXJldHVybiByZXQ7Cj4gKwo+ICtza2lwX2ZsdXNoZXM6 Cj4gKwkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7Cj4gKwkJaWYgKGVudHJ5LT5mbGFncyAm IEVYRUNfT0JKRUNUX1dSSVRFKSB7Cj4gKwkJCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSAwOwo+ ICsJCQlpZiAoIW9iai0+Y2FjaGVfZGlydHkgJiYgZ3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2Jq KSkKPiArCQkJCW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOwo+ICsJCQlpbnRlbF9mYl9vYmpfaW52 YWxpZGF0ZShvYmosIE9SSUdJTl9DUyk7Cj4gKwkJfQo+ICsJCW9iai0+YmFzZS5yZWFkX2RvbWFp bnMgfD0gSTkxNV9HRU1fR1BVX0RPTUFJTlM7Cj4gKwo+ICsJCWk5MTVfdm1hX21vdmVfdG9fYWN0 aXZlKHZtYSwgZWItPnJlcXVlc3QsIGVudHJ5LT5mbGFncyk7Cj4gKwkJX19lYl91bnJlc2VydmVf dm1hKHZtYSwgZW50cnkpOwo+ICsJCXZtYS0+ZXhlY19lbnRyeSA9IE5VTEw7CgpUaGlzIHNlZW1z IGxpa2UgYSBidWdmaXggaHVuayBsb3N0IHRvIHJlZmFjdG9yaW5nIHBhdGNoLgoKPiBAQCAtMTM3 NywxNiArMTYyOSwxNiBAQCBpOTE1X3Jlc2V0X2dlbjdfc29sX29mZnNldHMoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gwqAJCXJldHVybiAtRUlOVkFMOwo+IMKgCX0KPiDCoAo+ IC0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcSwgNCAqIDMpOwo+ICsJY3MgPSBpbnRlbF9yaW5n X2JlZ2luKHJlcSwgNCAqIDIgKyAyKTsKPiDCoAlpZiAoSVNfRVJSKGNzKSkKPiDCoAkJcmV0dXJu IFBUUl9FUlIoY3MpOwo+IMKgCj4gKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDQpOwo+ IMKgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiAtCQkqY3MrKyA9IE1JX0xPQURfUkVHSVNU RVJfSU1NKDEpOwo+IMKgCQkqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjdfU09fV1JJ VEVfT0ZGU0VUKGkpKTsKPiDCoAkJKmNzKysgPSAwOwo+IMKgCX0KPiAtCj4gKwkqY3MrKyA9IE1J X05PT1A7Cj4gwqAJaW50ZWxfcmluZ19hZHZhbmNlKHJlcSwgY3MpOwoKQWdhaW4gYSBsb3N0IGh1 bmsuCgo+IMKgCj4gPiDCoAlyZXR1cm4gMDsKPiBAQCAtMTQyMiwxMCArMTY3NCwxMSBAQCBzdGF0 aWMgc3RydWN0IGk5MTVfdm1hICplYl9wYXJzZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwg Ym9vbCBpc19tYXN0ZXIpCj4gwqAJCWdvdG8gb3V0Owo+IMKgCj4gwqAJdm1hLT5leGVjX2VudHJ5 ID0KPiAtCQltZW1zZXQoJmViLT5zaGFkb3dfZXhlY19lbnRyeSwgMCwgc2l6ZW9mKCp2bWEtPmV4 ZWNfZW50cnkpKTsKPiArCQltZW1zZXQoJmViLT5leGVjW2ViLT5idWZmZXJfY291bnQrK10sCj4g KwkJwqDCoMKgwqDCoMKgwqAwLCBzaXplb2YoKnZtYS0+ZXhlY19lbnRyeSkpOwo+IMKgCXZtYS0+ ZXhlY19lbnRyeS0+ZmxhZ3MgPSBfX0VYRUNfT0JKRUNUX0hBU19QSU47Cj4gLQlpOTE1X2dlbV9v YmplY3RfZ2V0KHNoYWRvd19iYXRjaF9vYmopOwo+IC0JbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVj X2xpbmssICZlYi0+dm1hcyk7Cj4gKwl2bWEtPmV4ZWNfZW50cnktPnJzdmQyID0gKHVpbnRwdHJf dCl2bWE7CgpVc2UgdGhlIGhlbHBlci4KCj4gQEAgLTE5MDEsNTYgKzIxMzUsNjMgQEAgaTkxNV9n ZW1fZXhlY2J1ZmZlcjIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiDCoAkJ wqDCoMKgwqDCoHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDCoHsKPiDCoAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzID0gZGF0YTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpleGVjMl9saXN0ID0gTlVMTDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpleGVjMl9saXN0Owo+IMKgCWludCByZXQ7Cj4gwqAKPiDCoAlpZiAoYXJn cy0+YnVmZmVyX2NvdW50IDwgMSB8fAo+IC0JwqDCoMKgwqBhcmdzLT5idWZmZXJfY291bnQgPiBV SU5UX01BWCAvIHNpemVvZigqZXhlYzJfbGlzdCkpIHsKPiArCcKgwqDCoMKgYXJncy0+YnVmZmVy X2NvdW50ID49IFVJTlRfTUFYIC8gc2l6ZW9mKCpleGVjMl9saXN0KSAtIDEpIHsKPiDCoAkJRFJN X0RFQlVHKCJleGVjYnVmMiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7 Cj4gwqAJCXJldHVybiAtRUlOVkFMOwo+IMKgCX0KPiDCoAo+IC0JZXhlYzJfbGlzdCA9IGRybV9t YWxsb2NfZ2ZwKGFyZ3MtPmJ1ZmZlcl9jb3VudCwKPiArCWlmICghaTkxNV9nZW1fY2hlY2tfZXhl Y2J1ZmZlcihhcmdzKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlleGVjMl9saXN0ID0g ZHJtX21hbGxvY19nZnAoYXJncy0+YnVmZmVyX2NvdW50ICsgMSwKClRoZSAiKyAxIiBpcyB2ZXJ5 IHVuaW50dWl0aXZlIHdpdGhvdXQgYSBjb21tZW50LgoKV2l0aCB0aGUgY29tbWVudHMsIHRoaXMg aXMgKDkwJSk7CgpSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5A bGludXguaW50ZWwuY29tPgoKSSdtIHByZXR0eSBkYXJuIHN1cmUgSSBhaW4ndCByZXZpZXdpbmcg dGhpcyBhZ2FpbiB3aXRob3V0IHNvbWUgdmVyeQpzcGVjaWZpYyBjaGFuZ2Vsb2cgYW5kIGludGVy LWRpZmYuCgpSZWdhcmRzLCBKb29uYXMKLS0gCkpvb25hcyBMYWh0aW5lbgpPcGVuIFNvdXJjZSBU ZWNobm9sb2d5IENlbnRlcgpJbnRlbCBDb3Jwb3JhdGlvbgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK