From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 05/11] drm/i915/execlists: Process one CSB interrupt at a time Date: Mon, 4 Jun 2018 15:27:34 +0100 Message-ID: <43d9fa42-241c-d513-2552-d97ca0bc91b2@linux.intel.com> References: <20180531185204.19520-1-chris@chris-wilson.co.uk> <20180531185204.19520-6-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 560B46EB3A for ; Mon, 4 Jun 2018 14:27:36 +0000 (UTC) In-Reply-To: <20180531185204.19520-6-chris@chris-wilson.co.uk> Content-Language: en-GB 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 Ck9uIDMxLzA1LzIwMTggMTk6NTEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiB0aGUgbmV4dCBw YXRjaCwgd2Ugd2lsbCBwcm9jZXNzIHRoZSBDU0IgZXZlbnRzIGRpcmVjdGx5IGZyb20gdGhlIENT Cj4gaW50ZXJydXB0IGhhbmRsZXIsIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBpbnRlcnJ1cHQuIEhl bmNlLCB3ZSB3aWxsIG5vCgpDb3JyZWN0IHRvIGV4cGxhaW4gaXQgaXMgdGhlIHVzZXIgaW50ZXJy dXB0IGhhbmRsZXIuCgo+IGxvbmdlciBoYXZlIHRoZSBuZWVkIGZvciBhIGxvb3AgdW50aWwgdGhl IGhhcy1pbnRlcnJ1cHQgYml0IGlzIGNsZWFyLAo+IGFuZCBpbiB0aGUgbWVhbnRpbWUgY2FuIHJl bW92ZSB0aGF0IHNtYWxsIG9wdGltaXNhdGlvbi4KCkhtLCBpc24ndCB0aGlzIGFzc3VtaW5nIHRo ZSBvcHRpbWlzdGljIGNzYiBwcm9jZXNzaW5nIGZyb20gdXNlciAKaW50ZXJydXB0IHNlZXMgdGhl IGV2ZW50PyBJZiBpdCBkb2Vzbid0LCBjb3VsZG4ndCB3ZSBzdGlsbCBlbmQgdXAgCm5lZWRpbmcg dGhlIGxvb3AgaGVyZT8KClJlZ2FyZHMsCgpUdnJ0a28KCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYyB8IDI3NCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tCj4gICAxIGZpbGUgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDEzOSBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGluZGV4IGVjNTRjMjliNjEwZi4uZGYy YjcwMDVkZjY1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtOTU0LDE2NiAr OTU0LDE2MiBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gICAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVj bGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gICAJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBv cnQgPSBleGVjbGlzdHMtPnBvcnQ7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBlbmdpbmUtPmk5MTU7Cj4gKwo+ICsJLyogVGhlIEhXU1AgY29udGFpbnMgYSAoY2FjaGVhYmxl KSBtaXJyb3Igb2YgdGhlIENTQiAqLwo+ICsJY29uc3QgdTMyICpidWYgPQo+ICsJCSZlbmdpbmUt PnN0YXR1c19wYWdlLnBhZ2VfYWRkcltJOTE1X0hXU19DU0JfQlVGMF9JTkRFWF07Cj4gKwl1bnNp Z25lZCBpbnQgaGVhZCwgdGFpbDsKPiAgIAlib29sIGZ3ID0gZmFsc2U7Cj4gICAKPiAtCWRvIHsK PiAtCQkvKiBUaGUgSFdTUCBjb250YWlucyBhIChjYWNoZWFibGUpIG1pcnJvciBvZiB0aGUgQ1NC ICovCj4gLQkJY29uc3QgdTMyICpidWYgPQo+IC0JCQkmZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdl X2FkZHJbSTkxNV9IV1NfQ1NCX0JVRjBfSU5ERVhdOwo+IC0JCXVuc2lnbmVkIGludCBoZWFkLCB0 YWlsOwo+ICsJLyogQ2xlYXIgYmVmb3JlIHJlYWRpbmcgdG8gY2F0Y2ggbmV3IGludGVycnVwdHMg Ki8KPiArCWNsZWFyX2JpdChFTkdJTkVfSVJRX0VYRUNMSVNULCAmZW5naW5lLT5pcnFfcG9zdGVk KTsKPiArCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7Cj4gICAKPiAtCQkvKiBDbGVhciBiZWZvcmUg cmVhZGluZyB0byBjYXRjaCBuZXcgaW50ZXJydXB0cyAqLwo+IC0JCWNsZWFyX2JpdChFTkdJTkVf SVJRX0VYRUNMSVNULCAmZW5naW5lLT5pcnFfcG9zdGVkKTsKPiAtCQlzbXBfbWJfX2FmdGVyX2F0 b21pYygpOwo+ICsJaWYgKHVubGlrZWx5KGV4ZWNsaXN0cy0+Y3NiX3VzZV9tbWlvKSkgewo+ICsJ CWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGk5MTUsIGV4ZWNsaXN0cy0+ZndfZG9tYWlucyk7 Cj4gKwkJZncgPSB0cnVlOwo+ICAgCj4gLQkJaWYgKHVubGlrZWx5KGV4ZWNsaXN0cy0+Y3NiX3Vz ZV9tbWlvKSkgewo+IC0JCQlpZiAoIWZ3KSB7Cj4gLQkJCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X2dldChpOTE1LCBleGVjbGlzdHMtPmZ3X2RvbWFpbnMpOwo+IC0JCQkJZncgPSB0cnVlOwo+IC0J CQl9Cj4gKwkJYnVmID0gKHUzMiAqIF9fZm9yY2UpCj4gKwkJCShpOTE1LT5yZWdzICsgaTkxNV9t bWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19CVUZfTE8oZW5naW5lLCAwKSkpOwo+ ICAgCj4gLQkJCWJ1ZiA9ICh1MzIgKiBfX2ZvcmNlKQo+IC0JCQkJKGk5MTUtPnJlZ3MgKyBpOTE1 X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRl9MTyhlbmdpbmUsIDApKSk7 Cj4gKwkJaGVhZCA9IHJlYWRsKGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5H X0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSk7Cj4gKwkJdGFpbCA9IEdFTjhfQ1NCX1dSSVRF X1BUUihoZWFkKTsKPiArCQloZWFkID0gR0VOOF9DU0JfUkVBRF9QVFIoaGVhZCk7Cj4gKwkJZXhl Y2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Cj4gKwl9IGVsc2Ugewo+ICsJCWNvbnN0IGludCB3cml0 ZV9pZHggPQo+ICsJCQlpbnRlbF9od3NfY3NiX3dyaXRlX2luZGV4KGk5MTUpIC0KPiArCQkJSTkx NV9IV1NfQ1NCX0JVRjBfSU5ERVg7Cj4gICAKPiAtCQkJaGVhZCA9IHJlYWRsKGk5MTUtPnJlZ3Mg KyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSk7 Cj4gLQkJCXRhaWwgPSBHRU44X0NTQl9XUklURV9QVFIoaGVhZCk7Cj4gLQkJCWhlYWQgPSBHRU44 X0NTQl9SRUFEX1BUUihoZWFkKTsKPiAtCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Cj4g LQkJfSBlbHNlIHsKPiAtCQkJY29uc3QgaW50IHdyaXRlX2lkeCA9Cj4gLQkJCQlpbnRlbF9od3Nf Y3NiX3dyaXRlX2luZGV4KGk5MTUpIC0KPiAtCQkJCUk5MTVfSFdTX0NTQl9CVUYwX0lOREVYOwo+ ICsJCWhlYWQgPSBleGVjbGlzdHMtPmNzYl9oZWFkOwo+ICsJCXRhaWwgPSBSRUFEX09OQ0UoYnVm W3dyaXRlX2lkeF0pOwo+ICsJCXJtYigpOyAvKiBIb3BlZnVsbHkgcGFpcmVkIHdpdGggYSB3bWIo KSBpbiBIVyAqLwo+ICsJfQo+ICsJR0VNX1RSQUNFKCIlcyBjcy1pcnEgaGVhZD0lZCBbJWQlc10s IHRhaWw9JWQgWyVkJXNdXG4iLAo+ICsJCSAgZW5naW5lLT5uYW1lLAo+ICsJCSAgaGVhZCwgR0VO OF9DU0JfUkVBRF9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3ID8gIiIgOiAiPyIsCj4gKwkJICB0 YWlsLCBHRU44X0NTQl9XUklURV9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdf b2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3ID8gIiIgOiAiPyIp Owo+ICAgCj4gLQkJCWhlYWQgPSBleGVjbGlzdHMtPmNzYl9oZWFkOwo+IC0JCQl0YWlsID0gUkVB RF9PTkNFKGJ1Zlt3cml0ZV9pZHhdKTsKPiAtCQkJcm1iKCk7IC8qIEhvcGVmdWxseSBwYWlyZWQg d2l0aCBhIHdtYigpIGluIEhXICovCj4gLQkJfQo+IC0JCUdFTV9UUkFDRSgiJXMgY3MtaXJxIGhl YWQ9JWQgWyVkJXNdLCB0YWlsPSVkIFslZCVzXVxuIiwKPiAtCQkJICBlbmdpbmUtPm5hbWUsCj4g LQkJCSAgaGVhZCwgR0VOOF9DU0JfUkVBRF9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5MTVfbW1p b19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3ID8gIiIg OiAiPyIsCj4gLQkJCSAgdGFpbCwgR0VOOF9DU0JfV1JJVEVfUFRSKHJlYWRsKGk5MTUtPnJlZ3Mg KyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSkp LCBmdyA/ICIiIDogIj8iKTsKPiArCXdoaWxlIChoZWFkICE9IHRhaWwpIHsKPiArCQlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycTsKPiArCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwo+ICsJCXVuc2lnbmVk IGludCBjb3VudDsKPiAgIAo+IC0JCXdoaWxlIChoZWFkICE9IHRhaWwpIHsKPiAtCQkJc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQkJCXVuc2lnbmVkIGludCBzdGF0dXM7Cj4gLQkJCXVuc2ln bmVkIGludCBjb3VudDsKPiArCQlpZiAoKytoZWFkID09IEdFTjhfQ1NCX0VOVFJJRVMpCj4gKwkJ CWhlYWQgPSAwOwo+ICAgCj4gLQkJCWlmICgrK2hlYWQgPT0gR0VOOF9DU0JfRU5UUklFUykKPiAt CQkJCWhlYWQgPSAwOwo+ICsJCS8qCj4gKwkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdvbnMg YWdhaW4uCj4gKwkJICoKPiArCQkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0 IGluIGV4ZWNsaXN0X3BvcnRbXQo+ICsJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJl IG9wZXJhdGluZyBpbiBzb2Z0aXJxCj4gKwkJICogY29udGV4dCBhbmQgc28gY2Fubm90IGhvbGQg YW55IG11dGV4IG9yIHNsZWVwLiBUaGF0Cj4gKwkJICogcHJldmVudHMgdXMgc3RvcHBpbmcgdGhl IHJlcXVlc3RzIHdlIGFyZSBwcm9jZXNzaW5nCj4gKwkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcg cmV0aXJlZCBzaW11bHRhbmVvdXNseSAodGhlCj4gKwkJICogYnJlYWRjcnVtYiB3aWxsIGJlIGNv bXBsZXRlIGJlZm9yZSB3ZSBzZWUgdGhlCj4gKwkJICogY29udGV4dC1zd2l0Y2gpLiBBcyB3ZSBv bmx5IGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUKPiArCQkgKiByZXF1ZXN0LCBhbnkgcG9pbnRl ciBjaGFzaW5nIHVuZGVybmVhdGggdGhlIHJlcXVlc3QKPiArCQkgKiBpcyBzdWJqZWN0IHRvIGEg cG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLiBUaHVzIHdlCj4gKwkJICogc3RvcmUgYWxsIG9mIHRo ZSBib29ra2VlcGluZyB3aXRoaW4gcG9ydFtdIGFzCj4gKwkJICogcmVxdWlyZWQsIGFuZCBhdm9p ZCB1c2luZyB1bmd1YXJkZWQgcG9pbnRlcnMgYmVuZWF0aAo+ICsJCSAqIHJlcXVlc3QgaXRzZWxm LiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBhdG9taWMKPiArCQkgKiBzdGF0dXMgbm90aWZpZXIu Cj4gKwkJICovCj4gICAKPiAtCQkJLyoKPiAtCQkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdv bnMgYWdhaW4uCj4gLQkJCSAqCj4gLQkJCSAqIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHJl cXVlc3QgaW4gZXhlY2xpc3RfcG9ydFtdCj4gLQkJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4g V2UgYXJlIG9wZXJhdGluZyBpbiBzb2Z0aXJxCj4gLQkJCSAqIGNvbnRleHQgYW5kIHNvIGNhbm5v dCBob2xkIGFueSBtdXRleCBvciBzbGVlcC4gVGhhdAo+IC0JCQkgKiBwcmV2ZW50cyB1cyBzdG9w cGluZyB0aGUgcmVxdWVzdHMgd2UgYXJlIHByb2Nlc3NpbmcKPiAtCQkJICogaW4gcG9ydFtdIGZy b20gYmVpbmcgcmV0aXJlZCBzaW11bHRhbmVvdXNseSAodGhlCj4gLQkJCSAqIGJyZWFkY3J1bWIg d2lsbCBiZSBjb21wbGV0ZSBiZWZvcmUgd2Ugc2VlIHRoZQo+IC0JCQkgKiBjb250ZXh0LXN3aXRj aCkuIEFzIHdlIG9ubHkgaG9sZCB0aGUgcmVmZXJlbmNlIHRvIHRoZQo+IC0JCQkgKiByZXF1ZXN0 LCBhbnkgcG9pbnRlciBjaGFzaW5nIHVuZGVybmVhdGggdGhlIHJlcXVlc3QKPiAtCQkJICogaXMg c3ViamVjdCB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS4gVGh1cyB3ZQo+IC0JCQkgKiBz dG9yZSBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIHdpdGhpbiBwb3J0W10gYXMKPiAtCQkJICogcmVx dWlyZWQsIGFuZCBhdm9pZCB1c2luZyB1bmd1YXJkZWQgcG9pbnRlcnMgYmVuZWF0aAo+IC0JCQkg KiByZXF1ZXN0IGl0c2VsZi4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgYXRvbWljCj4gLQkJCSAq IHN0YXR1cyBub3RpZmllci4KPiAtCQkJICovCj4gKwkJc3RhdHVzID0gUkVBRF9PTkNFKGJ1Zlsy ICogaGVhZF0pOyAvKiBtYXliZSBtbWlvISAqLwo+ICsJCUdFTV9UUkFDRSgiJXMgY3NiWyVkXTog c3RhdHVzPTB4JTA4eDoweCUwOHgsIGFjdGl2ZT0weCV4XG4iLAo+ICsJCQkgIGVuZ2luZS0+bmFt ZSwgaGVhZCwKPiArCQkJICBzdGF0dXMsIGJ1ZlsyKmhlYWQgKyAxXSwKPiArCQkJICBleGVjbGlz dHMtPmFjdGl2ZSk7Cj4gKwo+ICsJCWlmIChzdGF0dXMgJiAoR0VOOF9DVFhfU1RBVFVTX0lETEVf QUNUSVZFIHwKPiArCQkJICAgICAgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkpCj4gKwkJCWV4 ZWNsaXN0c19zZXRfYWN0aXZlKGV4ZWNsaXN0cywKPiArCQkJCQkgICAgIEVYRUNMSVNUU19BQ1RJ VkVfSFdBQ0spOwo+ICsJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUp Cj4gKwkJCWV4ZWNsaXN0c19jbGVhcl9hY3RpdmUoZXhlY2xpc3RzLAo+ICsJCQkJCSAgICAgICBF WEVDTElTVFNfQUNUSVZFX0hXQUNLKTsKPiArCj4gKwkJaWYgKCEoc3RhdHVzICYgR0VOOF9DVFhf U1RBVFVTX0NPTVBMRVRFRF9NQVNLKSkKPiArCQkJY29udGludWU7Cj4gICAKPiAtCQkJc3RhdHVz ID0gUkVBRF9PTkNFKGJ1ZlsyICogaGVhZF0pOyAvKiBtYXliZSBtbWlvISAqLwo+IC0JCQlHRU1f VFJBQ0UoIiVzIGNzYlslZF06IHN0YXR1cz0weCUwOHg6MHglMDh4LCBhY3RpdmU9MHgleFxuIiwK PiAtCQkJCSAgZW5naW5lLT5uYW1lLCBoZWFkLAo+IC0JCQkJICBzdGF0dXMsIGJ1ZlsyKmhlYWQg KyAxXSwKPiAtCQkJCSAgZXhlY2xpc3RzLT5hY3RpdmUpOwo+IC0KPiAtCQkJaWYgKHN0YXR1cyAm IChHRU44X0NUWF9TVEFUVVNfSURMRV9BQ1RJVkUgfAo+IC0JCQkJICAgICAgR0VOOF9DVFhfU1RB VFVTX1BSRUVNUFRFRCkpCj4gLQkJCQlleGVjbGlzdHNfc2V0X2FjdGl2ZShleGVjbGlzdHMsCj4g LQkJCQkJCSAgICAgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSyk7Cj4gLQkJCWlmIChzdGF0dXMgJiBH RU44X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUpCj4gLQkJCQlleGVjbGlzdHNfY2xlYXJfYWN0aXZl KGV4ZWNsaXN0cywKPiAtCQkJCQkJICAgICAgIEVYRUNMSVNUU19BQ1RJVkVfSFdBQ0spOwo+IC0K PiAtCQkJaWYgKCEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLKSkKPiAt CQkJCWNvbnRpbnVlOwo+ICsJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBDT01QTEVURUQgfCBJ RExFX0FDVElWRSEgKi8KPiArCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19J RExFX0FDVElWRSk7Cj4gICAKPiAtCQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIENPTVBMRVRF RCB8IElETEVfQUNUSVZFISAqLwo+IC0JCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NU QVRVU19JRExFX0FDVElWRSk7Cj4gKwkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19DT01Q TEVURSAmJgo+ICsJCSAgICBidWZbMipoZWFkICsgMV0gPT0gZXhlY2xpc3RzLT5wcmVlbXB0X2Nv bXBsZXRlX3N0YXR1cykgewo+ICsJCQlHRU1fVFJBQ0UoIiVzIHByZWVtcHQtaWRsZVxuIiwgZW5n aW5lLT5uYW1lKTsKPiArCQkJY29tcGxldGVfcHJlZW1wdF9jb250ZXh0KGV4ZWNsaXN0cyk7Cj4g KwkJCWNvbnRpbnVlOwo+ICsJCX0KPiAgIAo+IC0JCQlpZiAoc3RhdHVzICYgR0VOOF9DVFhfU1RB VFVTX0NPTVBMRVRFICYmCj4gLQkJCSAgICBidWZbMipoZWFkICsgMV0gPT0gZXhlY2xpc3RzLT5w cmVlbXB0X2NvbXBsZXRlX3N0YXR1cykgewo+IC0JCQkJR0VNX1RSQUNFKCIlcyBwcmVlbXB0LWlk bGVcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQkJCQljb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoZXhl Y2xpc3RzKTsKPiAtCQkJCWNvbnRpbnVlOwo+IC0JCQl9Cj4gKwkJaWYgKHN0YXR1cyAmIEdFTjhf Q1RYX1NUQVRVU19QUkVFTVBURUQgJiYKPiArCQkgICAgZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVj bGlzdHMsCj4gKwkJCQkJRVhFQ0xJU1RTX0FDVElWRV9QUkVFTVBUKSkKPiArCQkJY29udGludWU7 Cj4gICAKPiAtCQkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQgJiYKPiAt CQkJICAgIGV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLAo+IC0JCQkJCQlFWEVDTElTVFNf QUNUSVZFX1BSRUVNUFQpKQo+IC0JCQkJY29udGludWU7Cj4gKwkJR0VNX0JVR19PTighZXhlY2xp c3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsCj4gKwkJCQkJCUVYRUNMSVNUU19BQ1RJVkVfVVNFUikp Owo+ICAgCj4gLQkJCUdFTV9CVUdfT04oIWV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLAo+ IC0JCQkJCQkJRVhFQ0xJU1RTX0FDVElWRV9VU0VSKSk7Cj4gKwkJcnEgPSBwb3J0X3VucGFjayhw b3J0LCAmY291bnQpOwo+ICsJCUdFTV9UUkFDRSgiJXMgb3V0WzBdOiBjdHg9JWQuJWQsIGdsb2Jh bD0lZCAoZmVuY2UgJWxseDolZCkgKGN1cnJlbnQgJWQpLCBwcmlvPSVkXG4iLAo+ICsJCQkgIGVu Z2luZS0+bmFtZSwKPiArCQkJICBwb3J0LT5jb250ZXh0X2lkLCBjb3VudCwKPiArCQkJICBycSA/ IHJxLT5nbG9iYWxfc2Vxbm8gOiAwLAo+ICsJCQkgIHJxID8gcnEtPmZlbmNlLmNvbnRleHQgOiAw LAo+ICsJCQkgIHJxID8gcnEtPmZlbmNlLnNlcW5vIDogMCwKPiArCQkJICBpbnRlbF9lbmdpbmVf Z2V0X3NlcW5vKGVuZ2luZSksCj4gKwkJCSAgcnEgPyBycV9wcmlvKHJxKSA6IDApOwo+ICsKPiAr CQkvKiBDaGVjayB0aGUgY29udGV4dC9kZXNjIGlkIGZvciB0aGlzIGV2ZW50IG1hdGNoZXMgKi8K PiArCQlHRU1fREVCVUdfQlVHX09OKGJ1ZlsyICogaGVhZCArIDFdICE9IHBvcnQtPmNvbnRleHRf aWQpOwo+ICsKPiArCQlHRU1fQlVHX09OKGNvdW50ID09IDApOwo+ICsJCWlmICgtLWNvdW50ID09 IDApIHsKPiArCQkJLyoKPiArCQkJICogT24gdGhlIGZpbmFsIGV2ZW50IGNvcnJlc3BvbmRpbmcg dG8gdGhlCj4gKwkJCSAqIHN1Ym1pc3Npb24gb2YgdGhpcyBjb250ZXh0LCB3ZSBleHBlY3QgZWl0 aGVyCj4gKwkJCSAqIGFuIGVsZW1lbnQtc3dpdGNoIGV2ZW50IG9yIGEgY29tcGxldGlvbgo+ICsJ CQkgKiBldmVudCAoYW5kIG9uIGNvbXBsZXRpb24sIHRoZSBhY3RpdmUtaWRsZQo+ICsJCQkgKiBt YXJrZXIpLiBObyBtb3JlIHByZWVtcHRpb25zLCBsaXRlLXJlc3RvcmUKPiArCQkJICogb3Igb3Ro ZXJ3aXNlLgo+ICsJCQkgKi8KPiArCQkJR0VNX0JVR19PTihzdGF0dXMgJiBHRU44X0NUWF9TVEFU VVNfUFJFRU1QVEVEKTsKPiArCQkJR0VNX0JVR19PTihwb3J0X2lzc2V0KCZwb3J0WzFdKSAmJgo+ ICsJCQkJICAgIShzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfRUxFTUVOVF9TV0lUQ0gpKTsKPiAr CQkJR0VNX0JVR19PTighcG9ydF9pc3NldCgmcG9ydFsxXSkgJiYKPiArCQkJCSAgICEoc3RhdHVz ICYgR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9JRExFKSk7Cj4gICAKPiAtCQkJcnEgPSBwb3J0X3Vu cGFjayhwb3J0LCAmY291bnQpOwo+IC0JCQlHRU1fVFJBQ0UoIiVzIG91dFswXTogY3R4PSVkLiVk LCBnbG9iYWw9JWQgKGZlbmNlICVsbHg6JWQpIChjdXJyZW50ICVkKSwgcHJpbz0lZFxuIiwKPiAt CQkJCSAgZW5naW5lLT5uYW1lLAo+IC0JCQkJICBwb3J0LT5jb250ZXh0X2lkLCBjb3VudCwKPiAt CQkJCSAgcnEgPyBycS0+Z2xvYmFsX3NlcW5vIDogMCwKPiAtCQkJCSAgcnEgPyBycS0+ZmVuY2Uu Y29udGV4dCA6IDAsCj4gLQkJCQkgIHJxID8gcnEtPmZlbmNlLnNlcW5vIDogMCwKPiAtCQkJCSAg aW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpLAo+IC0JCQkJICBycSA/IHJxX3ByaW8ocnEp IDogMCk7Cj4gKwkJCS8qCj4gKwkJCSAqIFdlIHJlbHkgb24gdGhlIGhhcmR3YXJlIGJlaW5nIHN0 cm9uZ2x5Cj4gKwkJCSAqIG9yZGVyZWQsIHRoYXQgdGhlIGJyZWFkY3J1bWIgd3JpdGUgaXMKPiAr CQkJICogY29oZXJlbnQgKHZpc2libGUgZnJvbSB0aGUgQ1BVKSBiZWZvcmUgdGhlCj4gKwkJCSAq IHVzZXIgaW50ZXJydXB0IGFuZCBDU0IgaXMgcHJvY2Vzc2VkLgo+ICsJCQkgKi8KPiArCQkJR0VN X0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpOwo+ICAgCj4gLQkJCS8qIENoZWNr IHRoZSBjb250ZXh0L2Rlc2MgaWQgZm9yIHRoaXMgZXZlbnQgbWF0Y2hlcyAqLwo+IC0JCQlHRU1f REVCVUdfQlVHX09OKGJ1ZlsyICogaGVhZCArIDFdICE9IHBvcnQtPmNvbnRleHRfaWQpOwo+ICsJ CQlleGVjbGlzdHNfY29udGV4dF9zY2hlZHVsZV9vdXQocnEsCj4gKwkJCQkJCSAgICAgICBJTlRF TF9DT05URVhUX1NDSEVEVUxFX09VVCk7Cj4gKwkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICAg Cj4gLQkJCUdFTV9CVUdfT04oY291bnQgPT0gMCk7Cj4gLQkJCWlmICgtLWNvdW50ID09IDApIHsK PiAtCQkJCS8qCj4gLQkJCQkgKiBPbiB0aGUgZmluYWwgZXZlbnQgY29ycmVzcG9uZGluZyB0byB0 aGUKPiAtCQkJCSAqIHN1Ym1pc3Npb24gb2YgdGhpcyBjb250ZXh0LCB3ZSBleHBlY3QgZWl0aGVy Cj4gLQkJCQkgKiBhbiBlbGVtZW50LXN3aXRjaCBldmVudCBvciBhIGNvbXBsZXRpb24KPiAtCQkJ CSAqIGV2ZW50IChhbmQgb24gY29tcGxldGlvbiwgdGhlIGFjdGl2ZS1pZGxlCj4gLQkJCQkgKiBt YXJrZXIpLiBObyBtb3JlIHByZWVtcHRpb25zLCBsaXRlLXJlc3RvcmUKPiAtCQkJCSAqIG9yIG90 aGVyd2lzZS4KPiAtCQkJCSAqLwo+IC0JCQkJR0VNX0JVR19PTihzdGF0dXMgJiBHRU44X0NUWF9T VEFUVVNfUFJFRU1QVEVEKTsKPiAtCQkJCUdFTV9CVUdfT04ocG9ydF9pc3NldCgmcG9ydFsxXSkg JiYKPiAtCQkJCQkgICAhKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19FTEVNRU5UX1NXSVRDSCkp Owo+IC0JCQkJR0VNX0JVR19PTighcG9ydF9pc3NldCgmcG9ydFsxXSkgJiYKPiAtCQkJCQkgICAh KHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkpOwo+ICsJCQlHRU1fVFJBQ0Uo IiVzIGNvbXBsZXRlZCBjdHg9JWRcbiIsCj4gKwkJCQkgIGVuZ2luZS0+bmFtZSwgcG9ydC0+Y29u dGV4dF9pZCk7Cj4gICAKPiAtCQkJCS8qCj4gLQkJCQkgKiBXZSByZWx5IG9uIHRoZSBoYXJkd2Fy ZSBiZWluZyBzdHJvbmdseQo+IC0JCQkJICogb3JkZXJlZCwgdGhhdCB0aGUgYnJlYWRjcnVtYiB3 cml0ZSBpcwo+IC0JCQkJICogY29oZXJlbnQgKHZpc2libGUgZnJvbSB0aGUgQ1BVKSBiZWZvcmUg dGhlCj4gLQkJCQkgKiB1c2VyIGludGVycnVwdCBhbmQgQ1NCIGlzIHByb2Nlc3NlZC4KPiAtCQkJ CSAqLwo+IC0JCQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpOwo+IC0K PiAtCQkJCWV4ZWNsaXN0c19jb250ZXh0X3NjaGVkdWxlX291dChycSwKPiAtCQkJCQkJCSAgICAg ICBJTlRFTF9DT05URVhUX1NDSEVEVUxFX09VVCk7Cj4gLQkJCQlpOTE1X3JlcXVlc3RfcHV0KHJx KTsKPiAtCj4gLQkJCQlHRU1fVFJBQ0UoIiVzIGNvbXBsZXRlZCBjdHg9JWRcbiIsCj4gLQkJCQkJ ICBlbmdpbmUtPm5hbWUsIHBvcnQtPmNvbnRleHRfaWQpOwo+IC0KPiAtCQkJCXBvcnQgPSBleGVj bGlzdHNfcG9ydF9jb21wbGV0ZShleGVjbGlzdHMsIHBvcnQpOwo+IC0JCQkJaWYgKHBvcnRfaXNz ZXQocG9ydCkpCj4gLQkJCQkJZXhlY2xpc3RzX3VzZXJfYmVnaW4oZXhlY2xpc3RzLCBwb3J0KTsK PiAtCQkJCWVsc2UKPiAtCQkJCQlleGVjbGlzdHNfdXNlcl9lbmQoZXhlY2xpc3RzKTsKPiAtCQkJ fSBlbHNlIHsKPiAtCQkJCXBvcnRfc2V0KHBvcnQsIHBvcnRfcGFjayhycSwgY291bnQpKTsKPiAt CQkJfQo+ICsJCQlwb3J0ID0gZXhlY2xpc3RzX3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0 KTsKPiArCQkJaWYgKHBvcnRfaXNzZXQocG9ydCkpCj4gKwkJCQlleGVjbGlzdHNfdXNlcl9iZWdp bihleGVjbGlzdHMsIHBvcnQpOwo+ICsJCQllbHNlCj4gKwkJCQlleGVjbGlzdHNfdXNlcl9lbmQo ZXhlY2xpc3RzKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlwb3J0X3NldChwb3J0LCBwb3J0X3BhY2so cnEsIGNvdW50KSk7Cj4gICAJCX0KPiArCX0KPiAgIAo+IC0JCWlmIChoZWFkICE9IGV4ZWNsaXN0 cy0+Y3NiX2hlYWQpIHsKPiAtCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Cj4gLQkJCXdy aXRlbChfTUFTS0VEX0ZJRUxEKEdFTjhfQ1NCX1JFQURfUFRSX01BU0ssIGhlYWQgPDwgOCksCj4g LQkJCSAgICAgICBpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhU X1NUQVRVU19QVFIoZW5naW5lKSkpOwo+IC0JCX0KPiAtCX0gd2hpbGUgKHRlc3RfYml0KEVOR0lO RV9JUlFfRVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpKTsKPiArCWlmIChoZWFkICE9IGV4 ZWNsaXN0cy0+Y3NiX2hlYWQpIHsKPiArCQlleGVjbGlzdHMtPmNzYl9oZWFkID0gaGVhZDsKPiAr CQl3cml0ZWwoX01BU0tFRF9GSUVMRChHRU44X0NTQl9SRUFEX1BUUl9NQVNLLCBoZWFkIDw8IDgp LAo+ICsJCSAgICAgICBpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05U RVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwo+ICsJfQo+ICAgCj4gICAJaWYgKHVubGlrZWx5KGZ3 KSkKPiAgIAkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoaTkxNSwgZXhlY2xpc3RzLT5md19k b21haW5zKTsKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==