From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH v4 07/38] drm/i915: Start of GPU scheduler Date: Fri, 19 Feb 2016 12:13:43 +0200 Message-ID: <1455876823.7321.33.camel@linux.intel.com> References: <1448278774-31376-1-git-send-email-John.C.Harrison@Intel.com> <1452537788-32136-1-git-send-email-John.C.Harrison@Intel.com> <1452537788-32136-8-git-send-email-John.C.Harrison@Intel.com> <1453295913.7637.55.camel@linux.intel.com> <56C5D3C0.5070406@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 004556E0E6 for ; Fri, 19 Feb 2016 10:14:03 +0000 (UTC) In-Reply-To: <56C5D3C0.5070406@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison , Intel-GFX@Lists.FreeDesktop.Org Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org SGksCgpBZGRpbmcgRGFuaWVsIGFzIENDIHRvIGNvbW1lbnQgYmVsb3cuCgpPbiB0bywgMjAxNi0w Mi0xOCBhdCAxNDoyMiArMDAwMCwgSm9obiBIYXJyaXNvbiB3cm90ZToKPiBPbiAyMC8wMS8yMDE2 IDEzOjE4LCBKb29uYXMgTGFodGluZW4gd3JvdGU6Cj4gPiBPbiBNb24sIDIwMTYtMDEtMTEgYXQg MTg6NDIgKzAwMDAsIEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20gd3JvdGU6Cj4gPiA+IEZyb206 IEpvaG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+Cj4gPiA+IAoKPFNOSVA+ Cgo+ID4gPiAKPiA+ID4gKwkJCXRoaXMgPSBub2RlLT5zYXZlZF9vYmplY3RzICsgaTsKPiA+ID4g Kwo+ID4gPiArCQkJZm9yIChqID0gMDsgaiA8IHRlc3QtPm51bV9vYmpzOyBqKyspIHsKPiA+ID4g KwkJCQl0aGF0ID0gdGVzdC0+c2F2ZWRfb2JqZWN0cyArIGo7Cj4gPiA+ICsKPiA+ID4gKwkJCQlp ZiAodGhpcy0+b2JqICE9IHRoYXQtPm9iaikKPiA+ID4gKwkJCQkJY29udGludWU7Cj4gPiBIb3cg YWJvdXQgVk1Bcz8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgbWFwcGluZ3MgdG8gYW4gb2JqZWN0 LCBpc24ndCBpdAo+ID4gZW5vdWdoIHRvIGRlcGVuZCBvbiB0aGUgcmVxdWlyZWQgVk1BIGluc3Rl YWQgb2YgdGhlIHdob2xlIG9iamVjdD8KPiBUaGUgb2JqZWN0IGlzIHdoYXQgd2UgZ2V0IGNvbWlu ZyBpbiBmcm9tIHVzZXIgbGFuZCB0aHJvdWdoIHRoZSBJT0NUTC4gU2/CoAo+IHdoeSBtYWtlIHRo aW5ncyBtb3JlIGNvbXBsaWNhdGVkPyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgVk1BcyByZWZlcnJp bmfCoAo+IHRvIHRoZSBzYW1lIG9iamVjdCB0aGVuIHdlIGNhbid0IGp1c3QgdHJhY2sgYW4gaW5k aXZpZHVhbCBWTUEgYXMgdGhhdMKgCj4gd291bGQgbG9vc2UgdGhlIGRlcGVuZGVuY3kgb24gYWxs IHRoZSBvdGhlciBWTUFzLiBKdXN0IGJlY2F1c2UgdGhlwqAKPiBvYmplY3QgaXMgbWFwcGVkIHRv IHNvbWVvbmUgZWxzZSdzIGFkZHJlc3Mgc3BhY2UgZG9lc24ndCBtZWFuIHRoYXQgdGhpc8KgCj4g YmF0Y2ggYnVmZmVyIGNhbid0IG92ZXJ3cml0ZSBkYXRhIHRoZXkgYXJlIHJlYWRpbmcuCj4gCgpS aWdodCwgbWFrZXMgc2Vuc2UuCgo+ID4gPiAraW50IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4ZWNi dWZmZXIoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpxZSkKPiA+ID4gK3sKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBxZS0+cGFyYW1zLmRldi0+ ZGV2X3ByaXZhdGU7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVywqDCoMKgKnNjaGVkdWxl ciA9IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gPiA+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jc8Kg wqAqcmluZyA9IHFlLT5wYXJhbXMucmluZzsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJf cXVldWVfZW50cnnCoMKgKm5vZGU7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVl X2VudHJ5wqDCoCp0ZXN0Owo+ID4gPiArCXVuc2lnbmVkIGxvbmfCoMKgwqDCoMKgwqDCoGZsYWdz Owo+ID4gPiArCWJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vdF9mbHlpbmc7 Cj4gPiA+ICsJaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGksIHI7Cj4gPiA+ ICsJaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluY29tcGxldGUgPSAwOwo+ ID4gPiArCj4gPiA+ICsJV0FSTl9PTighc2NoZWR1bGVyKTsKPiA+ID4gKwo+ID4gVGhpcyBraW5k IG9mIHNpdHVhdGlvbnMgc2hvdWxkIGhhdmUgYSBiZSBhIEJVR19PTiwgYmVjYXVzZSBzY2hlZHVs ZXIKPiA+IGJlaW5nIHplcm8gaXMgbGl0ZXJhbGx5IGdvaW5nIHRvIGNhdXNlIGFuIE9PUFMgaW4g dGhlIG5leHQgZGVyZWZlcmVuY2UKPiA+IHdoaWNoIGlzIGdvaW5nIHRvIGhhcHBlbiB1bmNvbmRp dGlvbmFsbHkuIFdBUk4gKyBPT1BTIGlzIGtpbmQgb2Ygd2hhdAo+ID4gQlVHX09OIHNob3VsZCBi ZSB1c2VkIGF2b2lkLiBCdXQgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBhbnl3YXkgYWZ0ZXIKPiA+ IHNjaGVkdWxlciBpcyBtYWRlIGEgZGF0YSBtZW1iZXIgb2YgZGV2X3ByaXYuCj4gCj4gVGhlIFdB Uk5zIHdlcmUgb3JpZ2luYWxseSBCVUdzIGJ1dCBEYW5pZWwgVmV0dGVyIGhhZCB0aGUgb3Bwb3Np dGXCoAo+IGRlbWFuZC4gSGlzIHZpZXcgd2FzIHRoZSBkcml2ZXIgc2hvdWxkIG5ldmVyIEJVRyB1 bmRlciBhbnnCoAo+IGNpcmN1bXN0YW5jZXMuIEEgV0FSTiBmb2xsb3dlZCBieSBhbiBvb3BzIGlz IGJldHRlciB0aGFuIGEgQlVHIGJlY2F1c2XCoAo+IG1heWJlIGl0IHdvbid0IGFjdHVhbGx5IG9v cHMuCj4gCgpXQVJOX09OIGlzIGJldHRlciB0aGFuIEJVR19PTiB3aGVuIHRoZXJlIHdvbid0IGJl IGFuIGltbWVkaWF0ZSBPT1BTLgpCdXQgaWYgeW91J3JlIGRvaW5nIGEgbnVsbCBwb2ludGVyIGRl cmVmZXJlbmNlIGxpa2UgaGVyZSBpZiBzY2hlZHVsZXIKaXMgTlVMTCwgaXQgaXMgMTAwJSBzdXJl IGl0IGlzIGdvaW5nIHRvIGVpdGhlciBPT1BTIG9yIGNhdXNlIGhvcnJpYmxlCnVuZGVmaW5lZCBi ZWhhdmlvdXIgKG9uIG5vbi14ODYgcGxhdGZvcm0pLgoKU29tZXRoaW5nIGxpa2U7CgoJaWYgKFdB Uk5fT04oIWEpKQoJCXJldHVybiAtRU5PREVWOwoKQ291bGQgYmUgd2hhdCBEYW5pZWwgbWVhbnQg KGlmIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkIHVwIGFuZCBzb21laG93CmRlYWx0IHdpdGgpLCBi dXQ7CgoJV0FSTl9PTighYSk7CglhLT5mb28gPSBiYXI7CgpTaG91bGQgc2ltcGx5IGJlIEJVR19P TighYSksIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0J2xsIGp1c3QgZW5kIHVwIGJlaW5nCldBUk5JTkcg KyBPT1BTIHJpZ2h0IGFmdGVyIGVhY2ggb3RoZXIuCgo+IAo+ID4gCj4gPiA+ICsJaWYgKDEvKmk5 MTUuc2NoZWR1bGVyX292ZXJyaWRlICYgaTkxNV9zb19kaXJlY3Rfc3VibWl0Ki8pIHsKPiA+IEkg YXNzdW1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYWRkcmVzc2VkIGluIGEgZnV0dXJlIGNvbW1pdC4g Q291bGQgaGF2ZQo+ID4gYmVlbiBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2gsIHRvby4KPiA+IAo+ ID4gPiArCQlpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJCXNjaGVkdWxlci0+ZmxhZ3NbcWUtPnBh cmFtcy5yaW5nLT5pZF0gfD0gaTkxNV9zZl9zdWJtaXR0aW5nOwo+ID4gPiArCQlyZXQgPSBkZXZf cHJpdi0+Z3QuZXhlY2J1Zl9maW5hbCgmcWUtPnBhcmFtcyk7Cj4gPiA+ICsJCXNjaGVkdWxlci0+ ZmxhZ3NbcWUtPnBhcmFtcy5yaW5nLT5pZF0gJj0gfmk5MTVfc2Zfc3VibWl0dGluZzsKPiA+ID4g Kwo+ID4gVGhlIGtlcm5lbGRvYyBzaG91bGQgbWVudGlvbiBsb2NraW5nIHJlcXVpcmVtZW50cyBv ZiB0aGlzIGZ1bmN0aW9uLgo+ID4gCj4gPiA+ICsJCS8qCj4gPiA+ICsJCcKgKiBEb24ndCBkbyBh bnkgY2xlYW4gdXAgb24gZmFpbHVyZSBiZWNhdXNlIHRoZSBjYWxsZXIgd2lsbAo+ID4gPiArCQnC oCogZG8gaXQgYWxsIGFueXdheS4KPiA+ID4gKwkJwqAqLwo+ID4gPiArCQlpZiAocmV0KQo+ID4g PiArCQkJcmV0dXJuIHJldDsKPiA+ID4gKwo+ID4gPiArCQkvKiBGcmVlIGV2ZXJ5dGhpbmcgdGhh dCBpcyBvd25lZCBieSB0aGUgUUUgc3RydWN0dXJlOiAqLwo+ID4gPiArCQlrZnJlZShxZS0+cGFy YW1zLmNsaXByZWN0cyk7Cj4gPiA+ICsJCWlmIChxZS0+cGFyYW1zLmRpc3BhdGNoX2ZsYWdzICYg STkxNV9ESVNQQVRDSF9TRUNVUkUpCj4gPiA+ICsJCQlpOTE1X2dlbV9leGVjYnVmZl9yZWxlYXNl X2JhdGNoX29iaihxZS0+cGFyYW1zLmJhdGNoX29iaik7Cj4gPiA+ICsKPiA+ID4gKwkJcmV0dXJu IDA7Cj4gPiBBYm92ZSBwaWVjZSBvZiBjb2RlIGxvb2tzIGxpa2UgaXRzIG93biBmdW5jdGlvbiwg c28gaXQgc2hvdWxkIHByb2JhYmx5Cj4gPiBiZSBvbmUuCj4gPiAKPiA+ID4gKwl9Cj4gPiA+ICsK PiA+ID4gKwlub2RlID0ga21hbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKPiA+ID4g KwlpZiAoIW5vZGUpCj4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gPiArCj4gPiA+ICsJKm5v ZGUgPSAqcWU7Cj4gPiBBbnkgcmVhc29uIHdlIGNhbid0IHNpbXBseSBtb3ZlIG93bmVyc2hpcCBv ZiBxZT8gSWYgbm90LCBJJ2QgcmF0aGVyCj4gPiBtYWtlIGEgY2xvbmUgZnVuY3Rpb24KPiAKPiBU aGUgcWUgcG9pbnRlciBwYXNzZWQgaW4gaXMgYSByZWZlcmVuY2UgdG8gYSBzdGFjayBsb2NhbCBv YmplY3QgaW4gdGhlwqAKPiBleGVjYnVmZiBjb2RlIHBhdGguIFRodXMgb3duZXJzaGlwIGNhbm5v dCBiZSB0cmFuc2ZlcnJlZC4gRG9pbmcgaXQgdGhpc8KgCj4gd2F5IGtlZXBzIHRoZSBleGVjYnVm ZiBjb2RlIG5pY2UgYW5kIHNpbXBsZSBhbmQgYWxsIHRoZSBkeW5hbWljIG1lbW9yecKgCj4gbWFu YWdlbWVudCBhbmQgbGlzdCB0cmFja2luZyBpcyBzZWxmIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNj aGVkdWxlci4KPiAKCkkgd291bGQgaW5kaWNhdGUgdGhpcyB3aXRoIGNvbnN0IHF1YWxpZmllciBp biB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyLgoKPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpOTE1 X3NjaGVkdWxlcl9mbHlfbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5v ZGUpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g bm9kZS0+cGFyYW1zLmRldi0+ZGV2X3ByaXZhdGU7Cj4gPiA+ICsJc3RydWN0IGk5MTVfc2NoZWR1 bGVywqDCoMKgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gPiA+ICsJc3RydWN0 IGludGVsX2VuZ2luZV9jc8KgwqAqcmluZzsKPiA+ID4gKwo+ID4gPiArCVdBUk5fT04oIXNjaGVk dWxlcik7Cj4gPiA+ICsJV0FSTl9PTighbm9kZSk7Cj4gPiA+ICsJV0FSTl9PTihub2RlLT5zdGF0 dXMgIT0gaTkxNV9zcXNfcG9wcGVkKTsKPiA+IE90aGVyIHN0YXRlcyBoYWQgdGhlaXIgSTkxNV9T UVNfSVNfKiBtYWNybywgd2h5IHNvbWUgZG9uJ3Q/Cj4gVGhlIHB1cnBvc2Ugb2YgdGhlIG1hY3Jv IGlzIHRvIGFsbG93IHRoZSBjb21iaW5pbmcgb2YgaW5kaXZpZHVhbCBzdGF0ZXPCoAo+IGludG8g Y2xhc3Nlcy4gRS5nLiBkZWFkIGFuZCBjb21wbGV0ZSBjYW4gYm90aCBiZSBjb25zaWRlcmVkIGNv bXBsZXRlIGZvcsKgCj4gdGhlIG1ham9yaXR5IG9mIGNhc2VzLiBPbmx5IGluIGNlcnRhaW4gc2l0 dWF0aW9ucyBkbyB5b3UgbmVlZCB0byBrbm93wqAKPiB0aGF0IGl0IHJlYWxseSB3YXMgZGVhZC4g SGVuY2UgbW9zdCBwbGFjZXMgdGhhdCBkb24ndCByZWFsbHkgY2FyZSBqdXN0wqAKPiB1c2UgdGhl IG1lcmdlZCBtYWNyb3MsIHdoZXJlYXMgcGxhY2VzIGxpa2UgdGhpcyB0aGF0IGRvIGNhcmUgdXNl IHRoZcKgCj4gZXhwbGljaXQgZW51bSB2YWx1ZS4KPiAKClJpZ2h0LCBqdXN0IGFza2luZyBjYXVz ZSBoYXZpbmcgYSBtYWNybyBtaWdodCBpbmNyZWFzZSBjb25zaXN0ZW5jeS4KCkFsc28gaGVyZSwg d2UgaGF2ZSBXQVJOX09OKCFub2RlKSwgYW5kIHRoZW4gbmV4dCBsaW5lIGRlcmVmZXJlbmNpbmcK bm9kZSwgd2hpY2ggYWdhaW4gaXMgc3VyZWx5IGJldHRlciBvZmYgYXMgQlVHX09OLgoKQWx0aG91 Z2ggaXQncyBub3QgdW5yZWFzb25hYmxlIHRvIGV4cGVjdCBmdW5jdGlvbiB0byBPT1BTIGlmIHlv dSBwYXNzCm51bGwgcG9pbnRlci4gSSB0aGluayBvbmx5IHRoZSBoaWdoZXIgY2FsbGluZyBsZXZl bCBzaG91bGQgaGF2ZQppZihXQVJOX09OKCFub2RlKSkgcmV0dXJuIC4uLiBvciBCVUdfT04gY29u c3RydWN0LCBiZWZvcmUgY2FsbGluZyB0aGlzCmZ1bmN0aW9uLgoKT25seSBjYWxscyBjb21pbmcg ZnJvbSB1c2VybGFuZCBuZWVkIHRvIGJlIHRyZWF0ZWQgd2l0aCBzdWNoIGNhcmUgdGhhdAphbnl0 aGluZyBjYW4gYmUgcGFzc2VkLCBub3QgaW50ZXJuYWwgZnVuY3Rpb25zLiBXZSdyZSBub3QgaGF2 aW5nCkJVR19PTighZGV2KSBvciBCVUdfT04oIWRldl9wcml2KSBhcm91bmQgZWl0aGVyLgoKPiA+ ID4gKwkvKgo+ID4gPiArCcKgKiBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3lzdGVtIGlzIGlkbGUs IHN0YXJ0aW5nICdtaW5fc2Vxbm8nIGZyb20gYSBiaWcKPiA+ID4gKwnCoCogbnVtYmVyIHdpbGwg Y2F1c2UgYWxsIG5vZGVzIHRvIGJlIHJlbW92ZWQgYXMgdGhleSBhcmUgbm93IGJhY2sgdG8KPiA+ ID4gKwnCoCogYmVpbmcgaW4tb3JkZXIuIEhvd2V2ZXIsIHRoaXMgd2lsbCBiZSBhIHByb2JsZW0g aWYgdGhlIGxhc3Qgb25lIHRvCj4gPiA+ICsJwqAqIGNvbXBsZXRlIHdhcyBhY3R1YWxseSBvdXQt b2Ytb3JkZXIgYXMgdGhlIHJpbmcgc2Vxbm8gdmFsdWUgd2lsbCBiZQo+ID4gPiArCcKgKiBsb3dl ciB0aGFuIG9uZSBvciBtb3JlIGNvbXBsZXRlZCBidWZmZXJzLiBUaHVzIGNvZGUgbG9va2luZyBm b3IgdGhlCj4gPiA+ICsJwqAqIGNvbXBsZXRpb24gb2Ygc2FpZCBidWZmZXJzIHdpbGwgd2FpdCBm b3JldmVyLgo+ID4gPiArCcKgKiBJbnN0ZWFkLCB1c2UgdGhlIGhhcmR3YXJlIHNlcW5vIGFzIHRo ZSBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucwo+ID4gPiArCcKgKiB0aGF0IHNvbWUgYnVmZmVy cyBtaWdodCBiZSBrZXB0IGFyb3VuZCBldmVuIGluIGEgY29tcGxldGVseSBpZGxlCj4gPiA+ICsJ wqAqIHN5c3RlbSBidXQgaXQgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IG5vLW9uZSBldmVyIGdldHMg Y29uZnVzZWQgd2hlbgo+ID4gPiArCcKgKiB3YWl0aW5nIGZvciBidWZmZXIgY29tcGxldGlvbi4K PiA+ID4gKwnCoCovCj4gPiA+ICsJbWluX3NlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcsIHRy dWUpOwo+ID4gPiArCj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVy LT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykgewo+ID4gPiArCQlpZiAoSTkxNV9TUVNfSVNf UVVFVUVEKG5vZGUpKQo+ID4gPiArCQkJcXVldWVkKys7Cj4gPiA+ICsJCWVsc2UgaWYgKEk5MTVf U1FTX0lTX0ZMWUlORyhub2RlKSkKPiA+ID4gKwkJCWZseWluZysrOwo+ID4gPiArCQllbHNlIGlm IChJOTE1X1NRU19JU19DT01QTEVURShub2RlKSkKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiAr Cj4gPiA+ICsJCWlmIChub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8gPT0gMCkKPiA+ID4gKwkJ CWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsJCWlmICghaTkxNV9zZXFub19wYXNzZWQobm9kZS0+ cGFyYW1zLnJlcXVlc3QtPnNlcW5vLCBtaW5fc2Vxbm8pKQo+ID4gPiArCQkJbWluX3NlcW5vID0g bm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vOwo+ID4gPiArCX0KPiA+IENvdWxkbid0IHRoZXNl IHZhbHVlcyBiZSBrZXB0IGNhY2hlZCwgaW5zdGVhZCBvZiBjb3VudGluZyB0aGVtIGF0IGVhY2gK PiA+IGZ1bmN0aW9uPwo+IFRoZSAncXVldWVkJyBhbmQgZmx5aW5nIHRvdGFscyBjb3VsZCBiZSBr ZXB0IGNhY2hlZCBidXQgbWluX3NlcW5vIGlzwqAKPiBkZXBlbmRlbnQgdXBvbiB0aGUgc3RhdGUg b2YgdGhlIGhhcmR3YXJlIHNvIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZC4gSW7CoAo+IHdoaWNo IGNhc2UgY2FsY3VsYXRpbmcgdGhlIHRvdGFscyBoZXJlIGlzIHRyaXZpYWwgYW5kIGF2b2lkcyBo YXZpbmfCoAo+IGV4dHJhIGNvZGUgZWxzZXdoZXJlIHRvIGtlZXAgdGhlbSB1cCB0byBkYXRlLgo+ IAoKT2suCgpCdHcsIGZvcl9lYWNoX3NjaGVkdWxlcl9ub2RlIG9yIHN1Y2ggd291bGQgYmUgYSBn cmVhdCBtYWNyby4gVGhvc2UgYXJlCnZlcnkgbXVjaCBwcmVmZXJyZWQgZm9yIHJlYWRhYmlsaXR5 LgoKJCBmZ3JlcCBmb3JfZWFjaF8gZHJpdmVycy9ncHUvZHJtL2k5MTUvKiB8IHdjIC1sCjUyNQoK PiA+IAo+ID4gPiArCj4gPiA+ICsJSU5JVF9MSVNUX0hFQUQoJnJlbW92ZSk7Cj4gPiA+ICsJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5vZGVfbmV4dCwgJnNjaGVkdWxlci0+bm9kZV9x dWV1ZVtyaW5nLT5pZF0sIGxpbmspIHsKPiA+ID4gKwkJLyoKPiA+ID4gKwkJwqAqIE9ubHkgcmVt b3ZlIGNvbXBsZXRlZCBub2RlcyB3aGljaCBoYXZlIGEgbG93ZXIgc2Vxbm8gdGhhbgo+ID4gPiAr CQnCoCogYWxsIHBlbmRpbmcgbm9kZXMuIFdoaWxlIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSBv ZiB0aGUKPiA+ID4gKwkJwqAqIHJpbmcncyBzZXFubyBjb3VudGluZyBiYWNrd2FyZHMsIGFsbCBo aWdoZXIgYnVmZmVycyBtdXN0Cj4gPiA+ICsJCcKgKiBiZSByZW1lbWJlcmVkIHNvIHRoYXQgdGhl ICdpOTE1X3NlcW5vX3Bhc3NlZCgpJyB0ZXN0IGNhbgo+ID4gPiArCQnCoCogcmVwb3J0IHRoYXQg dGhleSBoYXZlIGluIGZhY3QgcGFzc2VkLgo+ID4gPiArCQnCoCoKPiA+ID4gKwkJwqAqIE5COiBU aGlzIGlzIG5vdCB0cnVlIGZvciAnZGVhZCcgbm9kZXMuIFRoZSBHUFUgcmVzZXQgY2F1c2VzCj4g PiA+ICsJCcKgKiB0aGUgc29mdHdhcmUgc2Vxbm8gdG8gcmVzdGFydCBmcm9tIGl0cyBpbml0aWFs IHZhbHVlLiBUaHVzCj4gPiA+ICsJCcKgKiB0aGUgZGVhZCBub2RlcyBtdXN0IGJlIHJlbW92ZWQg ZXZlbiB0aG91Z2ggdGhlaXIgc2Vxbm8gdmFsdWVzCj4gPiA+ICsJCcKgKiBhcmUgcG90ZW50aWFs bHkgdmFzdGx5IGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCByaW5nIHNlcW5vLgo+ID4gPiArCQnC oCovCj4gPiA+ICsJCWlmICghSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkpCj4gPiA+ICsJCQlj b250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQlpZiAobm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX2Rl YWQpIHsKPiA+ID4gKwkJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChub2RlLT5wYXJhbXMucmVxdWVz dC0+c2Vxbm8sIG1pbl9zZXFubykgJiYKPiA+ID4gKwkJCcKgwqDCoMKgKG5vZGUtPnBhcmFtcy5y ZXF1ZXN0LT5zZXFubyAhPSBtaW5fc2Vxbm8pKQo+ID4gPiArCQkJCWNvbnRpbnVlOwo+ID4gPiAr CQl9Cj4gPiA+ICsKPiA+ID4gKwkJbGlzdF9kZWwoJm5vZGUtPmxpbmspOwo+ID4gPiArCQlsaXN0 X2FkZCgmbm9kZS0+bGluaywgJnJlbW92ZSk7Cj4gPiA+ICsKPiA+ID4gKwkJLyogU3RyaXAgdGhl IGRlcGVuZGVuY3kgaW5mbyB3aGlsZSB0aGUgbXV0ZXggaXMgc3RpbGwgbG9ja2VkICovCj4gPiA+ ICsJCWk5MTVfc2NoZWR1bGVyX3JlbW92ZV9kZXBlbmRlbnQoc2NoZWR1bGVyLCBub2RlKTsKPiA+ ID4gKwo+ID4gPiArCQljb250aW51ZTsKPiA+ID4gKwl9Cgo8U05JUD4KCj4gPiA+ICsJZG8gewo+ ID4gPiArCQlXQVJOX09OKCFub2RlKTsKPiA+ID4gKwkJV0FSTl9PTihub2RlLT5wYXJhbXMucmlu ZyAhPSByaW5nKTsKPiA+ID4gKwkJV0FSTl9PTihub2RlLT5zdGF0dXMgIT0gaTkxNV9zcXNfcG9w cGVkKTsKPiA+ID4gKwkJY291bnQrKzsKPiA+ID4gKwo+ID4gPiArCQkvKgo+ID4gPiArCQnCoCog VGhlIGNhbGwgdG8gcG9wIGFib3ZlIHdpbGwgaGF2ZSByZW1vdmVkIHRoZSBub2RlIGZyb20gdGhl Cj4gPiA+ICsJCcKgKiBsaXN0LiBTbyBhZGQgaXQgYmFjayBpbiBhbmQgbWFyayBpdCBhcyBpbiBm bGlnaHQuCj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJaTkxNV9zY2hlZHVsZXJfZmx5X25vZGUobm9k ZSk7Cj4gPiBXaHkgZG8gd2Ugd2FudCB0byBwdWxsIGFuIG9iamVjdCBvdXQgb2YgdGhlIGxpc3Qg aW5zaWRlIHNwaW4gbG9jayBhbmQKPiA+IHB1c2ggaXQgYmFjayBpbW1lZGlhdGVseSBpbiBvdXIg Y3JpdGljYWwgY29kZSBwYXRoPyBTZWVtcyBsaWtlIGEgd2FzdGUKPiA+IGZvciBubyBvYnZpb3Vz IGdhaW4gYXQgdGhpcyBwb2ludC4gV2h5IGRvIG5vdCB3ZSByYXRoZXIganVzdCBzZWxlY3QgYW4K PiA+IGVudHJ5IGFuZCBtb2RpZnkgaXQgaW4tcGxhY2UsIGlmIGl0J3MgZ29pbmcgdG8gc3RheSBp biB0aGUgc2FtZSBxdWV1ZQo+ID4gYW55d2F5Lgo+IFRoZSBsaXN0IG9yZGVyIGlzIHNpZ25pZmlj YW50LiBUaGUgZWxlbWVudCBtdXN0IGJlIG1vdmVkIHRvIHRoZSBmcm9udCB0b8KgCj4ga2VlcCB0 aGUgc3VibWl0dGVkIGl0ZW1zIGluIHN1Ym1pc3Npb24gb3JkZXIuIERvaW5nIGl0IHRoaXMgd2F5 IGFsc2/CoAo+IGtlZXBzIHRoZSBjb2RlIG5pY2VseSBwYXJ0aXRpb25lZCBhbmQgZWFzaWVyIHRv IHVuZGVyc3RhbmQvbWFpbnRhaW4uwqAKPiBQbHVzLCB0aGVyZSBpcyBhIHBsYW4gdG8gb3B0aW1p c2UgdGhlIGNvZGUgYnkgc3BsaXR0aW5nIHRoZSBvbmUgc2luZ2xlwqAKPiBsaXN0IGludG8gdGhy ZWUgc2VwYXJhdGUgb25lcyAtIHF1ZXVlZCwgZmx5aW5nLCBjb21wbGV0ZS4gSWYvd2hlbiB0aGF0 wqAKPiBoYXBwZW5zLCB0aGUgZWxlbWVudCB3aWxsIGhhdmUgdG8gYmUgcmVtb3ZlZCBmcm9tIG9u ZSBsaXN0IGFuZCBhZGRlZCB0b8KgCj4gYW5vdGhlci4KCk9rLgoKPiAKPiA+IAo+ID4gPiArCj4g PiA+ICsJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdIHw9IGk5MTVfc2Zfc3VibWl0dGluZzsK PiA+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7 Cj4gPiA+ICsJCXJldCA9IGRldl9wcml2LT5ndC5leGVjYnVmX2ZpbmFsKCZub2RlLT5wYXJhbXMp Owo+ID4gPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4g PiA+ICsJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICY9IH5pOTE1X3NmX3N1Ym1pdHRpbmc7 Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKHJldCkgewo+ID4gPiArCQkJaW50IHJlcXVldWUgPSAxOwo+ ID4gTXVsdGlwdXJwb3NlIHZhcmlhYmxlLCBub3QgcmVhbGx5IGEgZ29vZCBpZGVhLiBBbmQgYXMg Y29tbWVudGVkCj4gPiBmdXJ0aGVyLCBzaG91bGQgbm90IGV4aXN0IGF0IGFsbC4KPiA+IAo+ID4g PiArCj4gPiA+ICsJCQkvKgo+ID4gPiArCQkJwqAqIE9oIGRlYXIhIEVpdGhlciB0aGUgbm9kZSBp cyBicm9rZW4gb3IgdGhlIHJpbmcgaXMKPiA+ID4gKwkJCcKgKiBidXN5LiBTbyBuZWVkIHRvIGtp bGwgdGhlIG5vZGUgb3IgcmVxdWV1ZSBpdCBhbmQgdHJ5Cj4gPiA+ICsJCQnCoCogYWdhaW4gbGF0 ZXIgYXMgYXBwcm9wcmlhdGUuCj4gPiA+ICsJCQnCoCovCj4gPiA+ICsKPiA+ID4gKwkJCXN3aXRj aCAoLXJldCkgewo+ID4gPiArCQkJY2FzZSBFTk9ERVY6Cj4gPiA+ICsJCQljYXNlIEVOT0VOVDoK PiA+ID4gKwkJCQkvKiBGYXRhbCBlcnJvcnMuIEtpbGwgdGhlIG5vZGUuICovCj4gPiA+ICsJCQkJ cmVxdWV1ZSA9IC0xOwo+ID4gPiArCQkJYnJlYWs7Cj4gPiAiYnJlYWsiIGluZGVudCBpcyB3cm9u Zy4KPiA+IAo+ID4gPiArCj4gPiA+ICsJCQljYXNlIEVBR0FJTjoKPiA+ID4gKwkJCWNhc2UgRUJV U1k6Cj4gPiA+ICsJCQljYXNlIEVJTzoKPiA+ID4gKwkJCWNhc2UgRU5PTUVNOgo+ID4gPiArCQkJ Y2FzZSBFUkVTVEFSVFNZUzoKPiA+ID4gKwkJCWNhc2UgRUlOVFI6Cj4gPiA+ICsJCQkJLyogU3Vw cG9zZWRseSByZWNvdmVyYWJsZSBlcnJvcnMuICovCj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwo+ ID4gPiArCQkJZGVmYXVsdDoKPiA+ID4gKwkJCQkvKgo+ID4gPiArCQkJCcKgKiBBc3N1bWUgdGhl IGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCBob3BlCj4gPiA+ICsJCQkJwqAqIGZvciB0aGUgYmVz dC4KPiA+ID4gKwkJCQnCoCovCj4gPiA+ICsJCQkJRFJNX0RFQlVHX0RSSVZFUigiPCVzPiBHb3Qg dW5leHBlY3RlZCBlcnJvciBmcm9tIGV4ZWNmaW5hbCgpOiAlZCFcbiIsCj4gPiA+ICsJCQkJCQnC oHJpbmctPm5hbWUsIHJldCk7Cj4gPiBUaGVyZSdzIE1JU1NJTkdfQ0FTRSBtYWNybywgc2hvdWxk IHVzZSBpdC4KPiA+IAo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCQl9Cj4gPiA+ICsKPiA+IEp1 c3QgbW92ZSB0aGUgY29kZSBiZWxvdyB0aGlzIHBvaW50IHRvIHRoZSBzd2l0Y2gsIG5vIHBvaW50 IGhhdmluZyBhCj4gPiBzd2l0Y2ggdG8gY2F0ZWdvcml6ZSB5b3VyIG9wdGlvbnMgYW5kIHRoZW4g ZG9pbmcgYnVuY2ggb2YgaWZzIHRvCj4gPiBleGVjdXRlIGNvZGUgdGhhdCBjb3VsZCBiZSBpbiBz d2l0Y2guCj4gT25lIG9mIHRoZSAnaWYnIHBhdGhzIGlzIHRvIGJyZWFrIG91dCBvZiB0aGUgd2hp bGUgbG9vcC4gQ2FuJ3QgZG8gdGhhdMKgCj4gZnJvbSBpbnNpZGUgdGhlIHN3aXRjaC4KCkkgZG8g dGhpbmsgdGhlIGNvZGUgY291bGQgc3RpbGwgYmUgc2ltcGxpZmllZCwgZXZlbiBpZiBpdCBpbnZv bHZlZCBhCmNhcmVmdWxseSBwbGFjZWQgZ290by4KCj4gCj4gPiA+ICsJCQkvKgo+ID4gPiArCQkJ wqAqIENoZWNrIHRoYXQgdGhlIHdhdGNoZG9nL3Jlc2V0IGNvZGUgaGFzIG5vdCBudWtlZAo+ID4g PiArCQkJwqAqIHRoZSBub2RlIHdoaWxlIHdlIHdlcmVuJ3QgbG9va2luZzoKPiA+ID4gKwkJCcKg Ki8KPiA+ID4gKwkJCWlmIChub2RlLT5zdGF0dXMgPT0gaTkxNV9zcXNfZGVhZCkKPiA+ID4gKwkJ CQlyZXF1ZXVlID0gMDsKCkJ0dywganVzdCBub3RpY2VkLCBzaG91bGQgc29tZSBsb2NraW5nIG9m IG5vZGUgb2NjdXI/IElzIGl0IGhhbmRsZWQKZ3JhY2VmdWxseSBpZiByaWdodCBhZnRlciB0aGlz IGNoZWNrLCB0aGUgc3RhdHVzIGlzIGNoYW5nZWQsIG9yIGRvIHdlCmhhdmUgYSByYWNlIGNvbmRp dGlvbiBoZXJlPwoKPiAKLS0gCkpvb25hcyBMYWh0aW5lbgpPcGVuIFNvdXJjZSBUZWNobm9sb2d5 IENlbnRlcgpJbnRlbCBDb3Jwb3JhdGlvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK