From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 3/6] drm/i915/execlists: Process one CSB update at a time Date: Wed, 27 Jun 2018 13:58:00 +0100 Message-ID: References: <20180627113843.7257-1-chris@chris-wilson.co.uk> <20180627113843.7257-3-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5F1686E8F4 for ; Wed, 27 Jun 2018 12:58:18 +0000 (UTC) In-Reply-To: <20180627113843.7257-3-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 Ck9uIDI3LzA2LzIwMTggMTI6MzgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiB0aGUgbmV4dCBw YXRjaCwgd2Ugd2lsbCBwcm9jZXNzIHRoZSBDU0IgZXZlbnRzIGRpcmVjdGx5IGZyb20gdGhlCj4g c3VibWlzc2lvbiBwYXRoLCByYXRoZXIgdGhhbiBvbmx5IGFmdGVyIGEgQ1MgaW50ZXJydXB0LiBI ZW5jZSwgd2Ugd2lsbAo+IG5vIGxvbmdlciBoYXZlIHRoZSBuZWVkIGZvciBhIGxvb3AgdW50aWwg dGhlIGhhcy1pbnRlcnJ1cHQgYml0IGlzIGNsZWFyLAo+IGFuZCBpbiB0aGUgbWVhbnRpbWUgY2Fu IHJlbW92ZSB0aGF0IHNtYWxsIG9wdGltaXNhdGlvbi4KPiAKPiB2MjogVHZydGtvIHBvaW50ZWQg b3V0IGl0IHdhcyBzYWZlciB0byB1bmNvbmRpdGlvbmFsbHkga2ljayB0aGUgdGFza2xldAo+IGFm dGVyIGVhY2ggaXJxLCB3aGVuIGFzc3VtaW5nIHRoYXQgdGhlIHRhc2tsZXQgaXMgY2FsbGVkIGZv ciBlYWNoIGlycS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlz LXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4KPiBSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVs LmNvbT4gI3YxCgpPa2F5IEkgY2FuIHN3YWxsb3cgaXQuCgpSZXZpZXdlZC1ieTogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCj4gLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jICB8ICAgNyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmMgfCAyNzggKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ICAgMiBmaWxl cyBjaGFuZ2VkLCAxNDEgaW5zZXJ0aW9ucygrKSwgMTQ0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9pcnEuYwo+IGluZGV4IDQ2YWFlZjVjMTg1MS4uZDAyZjMwNTkxYzBiIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTE0NzMsOSArMTQ3MywxMCBAQCBnZW44X2Nz X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIGlpcikKPiAg IAlib29sIHRhc2tsZXQgPSBmYWxzZTsKPiAgIAo+ICAgCWlmIChpaXIgJiBHVF9DT05URVhUX1NX SVRDSF9JTlRFUlJVUFQpIHsKPiAtCQlpZiAoUkVBRF9PTkNFKGVuZ2luZS0+ZXhlY2xpc3RzLmFj dGl2ZSkpCj4gLQkJCXRhc2tsZXQgPSAhdGVzdF9hbmRfc2V0X2JpdChFTkdJTkVfSVJRX0VYRUNM SVNULAo+IC0JCQkJCQkgICAgJmVuZ2luZS0+aXJxX3Bvc3RlZCk7Cj4gKwkJaWYgKFJFQURfT05D RShlbmdpbmUtPmV4ZWNsaXN0cy5hY3RpdmUpKSB7Cj4gKwkJCXNldF9iaXQoRU5HSU5FX0lSUV9F WEVDTElTVCwgJmVuZ2luZS0+aXJxX3Bvc3RlZCk7Cj4gKwkJCXRhc2tsZXQgPSB0cnVlOwo+ICsJ CX0KPiAgIAl9Cj4gICAKPiAgIAlpZiAoaWlyICYgR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUKSB7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCA0YjMxZThmNDJhZWIuLjkxNjU2ZWIy ZjJkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAgLTk1NCwxNjYgKzk1NCwx NjIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3Rz ID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+ICAgCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0g ZXhlY2xpc3RzLT5wb3J0Owo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5n aW5lLT5pOTE1Owo+ICsKPiArCS8qIFRoZSBIV1NQIGNvbnRhaW5zIGEgKGNhY2hlYWJsZSkgbWly cm9yIG9mIHRoZSBDU0IgKi8KPiArCWNvbnN0IHUzMiAqYnVmID0KPiArCQkmZW5naW5lLT5zdGF0 dXNfcGFnZS5wYWdlX2FkZHJbSTkxNV9IV1NfQ1NCX0JVRjBfSU5ERVhdOwo+ICsJdW5zaWduZWQg aW50IGhlYWQsIHRhaWw7Cj4gICAJYm9vbCBmdyA9IGZhbHNlOwo+ICAgCj4gLQlkbyB7Cj4gLQkJ LyogVGhlIEhXU1AgY29udGFpbnMgYSAoY2FjaGVhYmxlKSBtaXJyb3Igb2YgdGhlIENTQiAqLwo+ IC0JCWNvbnN0IHUzMiAqYnVmID0KPiAtCQkJJmVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRy W0k5MTVfSFdTX0NTQl9CVUYwX0lOREVYXTsKPiAtCQl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsK PiAtCj4gLQkJLyogQ2xlYXIgYmVmb3JlIHJlYWRpbmcgdG8gY2F0Y2ggbmV3IGludGVycnVwdHMg Ki8KPiAtCQljbGVhcl9iaXQoRU5HSU5FX0lSUV9FWEVDTElTVCwgJmVuZ2luZS0+aXJxX3Bvc3Rl ZCk7Cj4gLQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKPiAtCj4gLQkJaWYgKHVubGlrZWx5KGV4 ZWNsaXN0cy0+Y3NiX3VzZV9tbWlvKSkgewo+IC0JCQlpZiAoIWZ3KSB7Cj4gLQkJCQlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX2dldChpOTE1LCBleGVjbGlzdHMtPmZ3X2RvbWFpbnMpOwo+IC0JCQkJ ZncgPSB0cnVlOwo+IC0JCQl9Cj4gKwkvKiBDbGVhciBiZWZvcmUgcmVhZGluZyB0byBjYXRjaCBu ZXcgaW50ZXJydXB0cyAqLwo+ICsJY2xlYXJfYml0KEVOR0lORV9JUlFfRVhFQ0xJU1QsICZlbmdp bmUtPmlycV9wb3N0ZWQpOwo+ICsJc21wX21iX19hZnRlcl9hdG9taWMoKTsKPiAgIAo+IC0JCQli dWYgPSAodTMyICogX19mb3JjZSkKPiAtCQkJCShpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19v ZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19CVUZfTE8oZW5naW5lLCAwKSkpOwo+ICsJaWYgKHVu bGlrZWx5KGV4ZWNsaXN0cy0+Y3NiX3VzZV9tbWlvKSkgewo+ICsJCWludGVsX3VuY29yZV9mb3Jj ZXdha2VfZ2V0KGk5MTUsIGV4ZWNsaXN0cy0+ZndfZG9tYWlucyk7Cj4gKwkJZncgPSB0cnVlOwo+ ICAgCj4gLQkJCWhlYWQgPSByZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQo UklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwo+IC0JCQl0YWlsID0gR0VOOF9DU0Jf V1JJVEVfUFRSKGhlYWQpOwo+IC0JCQloZWFkID0gR0VOOF9DU0JfUkVBRF9QVFIoaGVhZCk7Cj4g LQkJCWV4ZWNsaXN0cy0+Y3NiX2hlYWQgPSBoZWFkOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWNvbnN0 IGludCB3cml0ZV9pZHggPQo+IC0JCQkJaW50ZWxfaHdzX2NzYl93cml0ZV9pbmRleChpOTE1KSAt Cj4gLQkJCQlJOTE1X0hXU19DU0JfQlVGMF9JTkRFWDsKPiArCQlidWYgPSAodTMyICogX19mb3Jj ZSkKPiArCQkJKGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRf U1RBVFVTX0JVRl9MTyhlbmdpbmUsIDApKSk7Cj4gICAKPiAtCQkJaGVhZCA9IGV4ZWNsaXN0cy0+ Y3NiX2hlYWQ7Cj4gLQkJCXRhaWwgPSBSRUFEX09OQ0UoYnVmW3dyaXRlX2lkeF0pOwo+IC0JCQly bWIoKTsgLyogSG9wZWZ1bGx5IHBhaXJlZCB3aXRoIGEgd21iKCkgaW4gSFcgKi8KPiAtCQl9Cj4g LQkJR0VNX1RSQUNFKCIlcyBjcy1pcnEgaGVhZD0lZCBbJWQlc10sIHRhaWw9JWQgWyVkJXNdXG4i LAo+IC0JCQkgIGVuZ2luZS0+bmFtZSwKPiAtCQkJICBoZWFkLCBHRU44X0NTQl9SRUFEX1BUUihy ZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRV U19QVFIoZW5naW5lKSkpKSwgZncgPyAiIiA6ICI/IiwKPiAtCQkJICB0YWlsLCBHRU44X0NTQl9X UklURV9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09O VEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3ID8gIiIgOiAiPyIpOwo+ICsJCWhlYWQgPSBy ZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRV U19QVFIoZW5naW5lKSkpOwo+ICsJCXRhaWwgPSBHRU44X0NTQl9XUklURV9QVFIoaGVhZCk7Cj4g KwkJaGVhZCA9IEdFTjhfQ1NCX1JFQURfUFRSKGhlYWQpOwo+ICsJCWV4ZWNsaXN0cy0+Y3NiX2hl YWQgPSBoZWFkOwo+ICsJfSBlbHNlIHsKPiArCQljb25zdCBpbnQgd3JpdGVfaWR4ID0KPiArCQkJ aW50ZWxfaHdzX2NzYl93cml0ZV9pbmRleChpOTE1KSAtCj4gKwkJCUk5MTVfSFdTX0NTQl9CVUYw X0lOREVYOwo+ICAgCj4gLQkJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewo+IC0JCQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKPiAtCQkJdW5zaWduZWQgaW50IHN0YXR1czsKPiAtCQkJdW5zaWduZWQg aW50IGNvdW50Owo+ICsJCWhlYWQgPSBleGVjbGlzdHMtPmNzYl9oZWFkOwo+ICsJCXRhaWwgPSBS RUFEX09OQ0UoYnVmW3dyaXRlX2lkeF0pOwo+ICsJCXJtYigpOyAvKiBIb3BlZnVsbHkgcGFpcmVk IHdpdGggYSB3bWIoKSBpbiBIVyAqLwo+ICsJfQo+ICsJR0VNX1RSQUNFKCIlcyBjcy1pcnEgaGVh ZD0lZCBbJWQlc10sIHRhaWw9JWQgWyVkJXNdXG4iLAo+ICsJCSAgZW5naW5lLT5uYW1lLAo+ICsJ CSAgaGVhZCwgR0VOOF9DU0JfUkVBRF9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5MTVfbW1pb19y ZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3ID8gIiIgOiAi PyIsCj4gKwkJICB0YWlsLCBHRU44X0NTQl9XUklURV9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5 MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3 ID8gIiIgOiAiPyIpOwo+ICAgCj4gLQkJCWlmICgrK2hlYWQgPT0gR0VOOF9DU0JfRU5UUklFUykK PiAtCQkJCWhlYWQgPSAwOwo+ICsJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewo+ICsJCXN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxOwo+ICsJCXVuc2lnbmVkIGludCBzdGF0dXM7Cj4gKwkJdW5zaWduZWQg aW50IGNvdW50Owo+ICAgCj4gLQkJCS8qCj4gLQkJCSAqIFdlIGFyZSBmbHlpbmcgbmVhciBkcmFn b25zIGFnYWluLgo+IC0JCQkgKgo+IC0JCQkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBy ZXF1ZXN0IGluIGV4ZWNsaXN0X3BvcnRbXQo+IC0JCQkgKiBidXQgbm8gbW9yZSB0aGFuIHRoYXQu IFdlIGFyZSBvcGVyYXRpbmcgaW4gc29mdGlycQo+IC0JCQkgKiBjb250ZXh0IGFuZCBzbyBjYW5u b3QgaG9sZCBhbnkgbXV0ZXggb3Igc2xlZXAuIFRoYXQKPiAtCQkJICogcHJldmVudHMgdXMgc3Rv cHBpbmcgdGhlIHJlcXVlc3RzIHdlIGFyZSBwcm9jZXNzaW5nCj4gLQkJCSAqIGluIHBvcnRbXSBm cm9tIGJlaW5nIHJldGlyZWQgc2ltdWx0YW5lb3VzbHkgKHRoZQo+IC0JCQkgKiBicmVhZGNydW1i IHdpbGwgYmUgY29tcGxldGUgYmVmb3JlIHdlIHNlZSB0aGUKPiAtCQkJICogY29udGV4dC1zd2l0 Y2gpLiBBcyB3ZSBvbmx5IGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUKPiAtCQkJICogcmVxdWVz dCwgYW55IHBvaW50ZXIgY2hhc2luZyB1bmRlcm5lYXRoIHRoZSByZXF1ZXN0Cj4gLQkJCSAqIGlz IHN1YmplY3QgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIFRodXMgd2UKPiAtCQkJICog c3RvcmUgYWxsIG9mIHRoZSBib29ra2VlcGluZyB3aXRoaW4gcG9ydFtdIGFzCj4gLQkJCSAqIHJl cXVpcmVkLCBhbmQgYXZvaWQgdXNpbmcgdW5ndWFyZGVkIHBvaW50ZXJzIGJlbmVhdGgKPiAtCQkJ ICogcmVxdWVzdCBpdHNlbGYuIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGF0b21pYwo+IC0JCQkg KiBzdGF0dXMgbm90aWZpZXIuCj4gLQkJCSAqLwo+ICsJCWlmICgrK2hlYWQgPT0gR0VOOF9DU0Jf RU5UUklFUykKPiArCQkJaGVhZCA9IDA7Cj4gICAKPiAtCQkJc3RhdHVzID0gUkVBRF9PTkNFKGJ1 ZlsyICogaGVhZF0pOyAvKiBtYXliZSBtbWlvISAqLwo+IC0JCQlHRU1fVFJBQ0UoIiVzIGNzYlsl ZF06IHN0YXR1cz0weCUwOHg6MHglMDh4LCBhY3RpdmU9MHgleFxuIiwKPiAtCQkJCSAgZW5naW5l LT5uYW1lLCBoZWFkLAo+IC0JCQkJICBzdGF0dXMsIGJ1ZlsyKmhlYWQgKyAxXSwKPiAtCQkJCSAg ZXhlY2xpc3RzLT5hY3RpdmUpOwo+IC0KPiAtCQkJaWYgKHN0YXR1cyAmIChHRU44X0NUWF9TVEFU VVNfSURMRV9BQ1RJVkUgfAo+IC0JCQkJICAgICAgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkp Cj4gLQkJCQlleGVjbGlzdHNfc2V0X2FjdGl2ZShleGVjbGlzdHMsCj4gLQkJCQkJCSAgICAgRVhF Q0xJU1RTX0FDVElWRV9IV0FDSyk7Cj4gLQkJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNf QUNUSVZFX0lETEUpCj4gLQkJCQlleGVjbGlzdHNfY2xlYXJfYWN0aXZlKGV4ZWNsaXN0cywKPiAt CQkJCQkJICAgICAgIEVYRUNMSVNUU19BQ1RJVkVfSFdBQ0spOwo+IC0KPiAtCQkJaWYgKCEoc3Rh dHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLKSkKPiAtCQkJCWNvbnRpbnVlOwo+ ICsJCS8qCj4gKwkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdvbnMgYWdhaW4uCj4gKwkJICoK PiArCQkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IGluIGV4ZWNsaXN0X3Bv cnRbXQo+ICsJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJlIG9wZXJhdGluZyBpbiBz b2Z0aXJxCj4gKwkJICogY29udGV4dCBhbmQgc28gY2Fubm90IGhvbGQgYW55IG11dGV4IG9yIHNs ZWVwLiBUaGF0Cj4gKwkJICogcHJldmVudHMgdXMgc3RvcHBpbmcgdGhlIHJlcXVlc3RzIHdlIGFy ZSBwcm9jZXNzaW5nCj4gKwkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcgcmV0aXJlZCBzaW11bHRh bmVvdXNseSAodGhlCj4gKwkJICogYnJlYWRjcnVtYiB3aWxsIGJlIGNvbXBsZXRlIGJlZm9yZSB3 ZSBzZWUgdGhlCj4gKwkJICogY29udGV4dC1zd2l0Y2gpLiBBcyB3ZSBvbmx5IGhvbGQgdGhlIHJl ZmVyZW5jZSB0byB0aGUKPiArCQkgKiByZXF1ZXN0LCBhbnkgcG9pbnRlciBjaGFzaW5nIHVuZGVy bmVhdGggdGhlIHJlcXVlc3QKPiArCQkgKiBpcyBzdWJqZWN0IHRvIGEgcG90ZW50aWFsIHVzZS1h ZnRlci1mcmVlLiBUaHVzIHdlCj4gKwkJICogc3RvcmUgYWxsIG9mIHRoZSBib29ra2VlcGluZyB3 aXRoaW4gcG9ydFtdIGFzCj4gKwkJICogcmVxdWlyZWQsIGFuZCBhdm9pZCB1c2luZyB1bmd1YXJk ZWQgcG9pbnRlcnMgYmVuZWF0aAo+ICsJCSAqIHJlcXVlc3QgaXRzZWxmLiBUaGUgc2FtZSBhcHBs aWVzIHRvIHRoZSBhdG9taWMKPiArCQkgKiBzdGF0dXMgbm90aWZpZXIuCj4gKwkJICovCj4gICAK PiAtCQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIENPTVBMRVRFRCB8IElETEVfQUNUSVZFISAq Lwo+IC0JCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSk7 Cj4gKwkJc3RhdHVzID0gUkVBRF9PTkNFKGJ1ZlsyICogaGVhZF0pOyAvKiBtYXliZSBtbWlvISAq Lwo+ICsJCUdFTV9UUkFDRSgiJXMgY3NiWyVkXTogc3RhdHVzPTB4JTA4eDoweCUwOHgsIGFjdGl2 ZT0weCV4XG4iLAo+ICsJCQkgIGVuZ2luZS0+bmFtZSwgaGVhZCwKPiArCQkJICBzdGF0dXMsIGJ1 ZlsyKmhlYWQgKyAxXSwKPiArCQkJICBleGVjbGlzdHMtPmFjdGl2ZSk7Cj4gKwo+ICsJCWlmIChz dGF0dXMgJiAoR0VOOF9DVFhfU1RBVFVTX0lETEVfQUNUSVZFIHwKPiArCQkJICAgICAgR0VOOF9D VFhfU1RBVFVTX1BSRUVNUFRFRCkpCj4gKwkJCWV4ZWNsaXN0c19zZXRfYWN0aXZlKGV4ZWNsaXN0 cywKPiArCQkJCQkgICAgIEVYRUNMSVNUU19BQ1RJVkVfSFdBQ0spOwo+ICsJCWlmIChzdGF0dXMg JiBHRU44X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUpCj4gKwkJCWV4ZWNsaXN0c19jbGVhcl9hY3Rp dmUoZXhlY2xpc3RzLAo+ICsJCQkJCSAgICAgICBFWEVDTElTVFNfQUNUSVZFX0hXQUNLKTsKPiAr Cj4gKwkJaWYgKCEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLKSkKPiAr CQkJY29udGludWU7Cj4gICAKPiAtCQkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19DT01Q TEVURSAmJgo+IC0JCQkgICAgYnVmWzIqaGVhZCArIDFdID09IGV4ZWNsaXN0cy0+cHJlZW1wdF9j b21wbGV0ZV9zdGF0dXMpIHsKPiAtCQkJCUdFTV9UUkFDRSgiJXMgcHJlZW1wdC1pZGxlXG4iLCBl bmdpbmUtPm5hbWUpOwo+IC0JCQkJY29tcGxldGVfcHJlZW1wdF9jb250ZXh0KGV4ZWNsaXN0cyk7 Cj4gLQkJCQljb250aW51ZTsKPiAtCQkJfQo+ICsJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBD T01QTEVURUQgfCBJRExFX0FDVElWRSEgKi8KPiArCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhf Q1RYX1NUQVRVU19JRExFX0FDVElWRSk7Cj4gICAKPiAtCQkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RY X1NUQVRVU19QUkVFTVBURUQgJiYKPiAtCQkJICAgIGV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xp c3RzLAo+IC0JCQkJCQlFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpKQo+IC0JCQkJY29udGludWU7 Cj4gKwkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19DT01QTEVURSAmJgo+ICsJCSAgICBi dWZbMipoZWFkICsgMV0gPT0gZXhlY2xpc3RzLT5wcmVlbXB0X2NvbXBsZXRlX3N0YXR1cykgewo+ ICsJCQlHRU1fVFJBQ0UoIiVzIHByZWVtcHQtaWRsZVxuIiwgZW5naW5lLT5uYW1lKTsKPiArCQkJ Y29tcGxldGVfcHJlZW1wdF9jb250ZXh0KGV4ZWNsaXN0cyk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJ CX0KPiAgIAo+IC0JCQlHRU1fQlVHX09OKCFleGVjbGlzdHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywK PiAtCQkJCQkJCUVYRUNMSVNUU19BQ1RJVkVfVVNFUikpOwo+ICsJCWlmIChzdGF0dXMgJiBHRU44 X0NUWF9TVEFUVVNfUFJFRU1QVEVEICYmCj4gKwkJICAgIGV4ZWNsaXN0c19pc19hY3RpdmUoZXhl Y2xpc3RzLAo+ICsJCQkJCUVYRUNMSVNUU19BQ1RJVkVfUFJFRU1QVCkpCj4gKwkJCWNvbnRpbnVl Owo+ICAgCj4gLQkJCXJxID0gcG9ydF91bnBhY2socG9ydCwgJmNvdW50KTsKPiAtCQkJR0VNX1RS QUNFKCIlcyBvdXRbMF06IGN0eD0lZC4lZCwgZ2xvYmFsPSVkIChmZW5jZSAlbGx4OiVkKSAoY3Vy cmVudCAlZCksIHByaW89JWRcbiIsCj4gLQkJCQkgIGVuZ2luZS0+bmFtZSwKPiAtCQkJCSAgcG9y dC0+Y29udGV4dF9pZCwgY291bnQsCj4gLQkJCQkgIHJxID8gcnEtPmdsb2JhbF9zZXFubyA6IDAs Cj4gLQkJCQkgIHJxID8gcnEtPmZlbmNlLmNvbnRleHQgOiAwLAo+IC0JCQkJICBycSA/IHJxLT5m ZW5jZS5zZXFubyA6IDAsCj4gLQkJCQkgIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSwK PiAtCQkJCSAgcnEgPyBycV9wcmlvKHJxKSA6IDApOwo+ICsJCUdFTV9CVUdfT04oIWV4ZWNsaXN0 c19pc19hY3RpdmUoZXhlY2xpc3RzLAo+ICsJCQkJCQlFWEVDTElTVFNfQUNUSVZFX1VTRVIpKTsK PiAgIAo+IC0JCQkvKiBDaGVjayB0aGUgY29udGV4dC9kZXNjIGlkIGZvciB0aGlzIGV2ZW50IG1h dGNoZXMgKi8KPiAtCQkJR0VNX0RFQlVHX0JVR19PTihidWZbMiAqIGhlYWQgKyAxXSAhPSBwb3J0 LT5jb250ZXh0X2lkKTsKPiArCQlycSA9IHBvcnRfdW5wYWNrKHBvcnQsICZjb3VudCk7Cj4gKwkJ R0VNX1RSQUNFKCIlcyBvdXRbMF06IGN0eD0lZC4lZCwgZ2xvYmFsPSVkIChmZW5jZSAlbGx4OiVk KSAoY3VycmVudCAlZCksIHByaW89JWRcbiIsCj4gKwkJCSAgZW5naW5lLT5uYW1lLAo+ICsJCQkg IHBvcnQtPmNvbnRleHRfaWQsIGNvdW50LAo+ICsJCQkgIHJxID8gcnEtPmdsb2JhbF9zZXFubyA6 IDAsCj4gKwkJCSAgcnEgPyBycS0+ZmVuY2UuY29udGV4dCA6IDAsCj4gKwkJCSAgcnEgPyBycS0+ ZmVuY2Uuc2Vxbm8gOiAwLAo+ICsJCQkgIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSwK PiArCQkJICBycSA/IHJxX3ByaW8ocnEpIDogMCk7Cj4gKwo+ICsJCS8qIENoZWNrIHRoZSBjb250 ZXh0L2Rlc2MgaWQgZm9yIHRoaXMgZXZlbnQgbWF0Y2hlcyAqLwo+ICsJCUdFTV9ERUJVR19CVUdf T04oYnVmWzIgKiBoZWFkICsgMV0gIT0gcG9ydC0+Y29udGV4dF9pZCk7Cj4gKwo+ICsJCUdFTV9C VUdfT04oY291bnQgPT0gMCk7Cj4gKwkJaWYgKC0tY291bnQgPT0gMCkgewo+ICsJCQkvKgo+ICsJ CQkgKiBPbiB0aGUgZmluYWwgZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGUKPiArCQkJICogc3Vi bWlzc2lvbiBvZiB0aGlzIGNvbnRleHQsIHdlIGV4cGVjdCBlaXRoZXIKPiArCQkJICogYW4gZWxl bWVudC1zd2l0Y2ggZXZlbnQgb3IgYSBjb21wbGV0aW9uCj4gKwkJCSAqIGV2ZW50IChhbmQgb24g Y29tcGxldGlvbiwgdGhlIGFjdGl2ZS1pZGxlCj4gKwkJCSAqIG1hcmtlcikuIE5vIG1vcmUgcHJl ZW1wdGlvbnMsIGxpdGUtcmVzdG9yZQo+ICsJCQkgKiBvciBvdGhlcndpc2UuCj4gKwkJCSAqLwo+ ICsJCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQpOwo+ICsJ CQlHRU1fQlVHX09OKHBvcnRfaXNzZXQoJnBvcnRbMV0pICYmCj4gKwkJCQkgICAhKHN0YXR1cyAm IEdFTjhfQ1RYX1NUQVRVU19FTEVNRU5UX1NXSVRDSCkpOwo+ICsJCQlHRU1fQlVHX09OKCFwb3J0 X2lzc2V0KCZwb3J0WzFdKSAmJgo+ICsJCQkJICAgIShzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNf QUNUSVZFX0lETEUpKTsKPiAgIAo+IC0JCQlHRU1fQlVHX09OKGNvdW50ID09IDApOwo+IC0JCQlp ZiAoLS1jb3VudCA9PSAwKSB7Cj4gLQkJCQkvKgo+IC0JCQkJICogT24gdGhlIGZpbmFsIGV2ZW50 IGNvcnJlc3BvbmRpbmcgdG8gdGhlCj4gLQkJCQkgKiBzdWJtaXNzaW9uIG9mIHRoaXMgY29udGV4 dCwgd2UgZXhwZWN0IGVpdGhlcgo+IC0JCQkJICogYW4gZWxlbWVudC1zd2l0Y2ggZXZlbnQgb3Ig YSBjb21wbGV0aW9uCj4gLQkJCQkgKiBldmVudCAoYW5kIG9uIGNvbXBsZXRpb24sIHRoZSBhY3Rp dmUtaWRsZQo+IC0JCQkJICogbWFya2VyKS4gTm8gbW9yZSBwcmVlbXB0aW9ucywgbGl0ZS1yZXN0 b3JlCj4gLQkJCQkgKiBvciBvdGhlcndpc2UuCj4gLQkJCQkgKi8KPiAtCQkJCUdFTV9CVUdfT04o c3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCk7Cj4gLQkJCQlHRU1fQlVHX09OKHBv cnRfaXNzZXQoJnBvcnRbMV0pICYmCj4gLQkJCQkJICAgIShzdGF0dXMgJiBHRU44X0NUWF9TVEFU VVNfRUxFTUVOVF9TV0lUQ0gpKTsKPiAtCQkJCUdFTV9CVUdfT04oIXBvcnRfaXNzZXQoJnBvcnRb MV0pICYmCj4gLQkJCQkJICAgIShzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUp KTsKPiArCQkJLyoKPiArCQkJICogV2UgcmVseSBvbiB0aGUgaGFyZHdhcmUgYmVpbmcgc3Ryb25n bHkKPiArCQkJICogb3JkZXJlZCwgdGhhdCB0aGUgYnJlYWRjcnVtYiB3cml0ZSBpcwo+ICsJCQkg KiBjb2hlcmVudCAodmlzaWJsZSBmcm9tIHRoZSBDUFUpIGJlZm9yZSB0aGUKPiArCQkJICogdXNl ciBpbnRlcnJ1cHQgYW5kIENTQiBpcyBwcm9jZXNzZWQuCj4gKwkJCSAqLwo+ICsJCQlHRU1fQlVH X09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7Cj4gICAKPiAtCQkJCS8qCj4gLQkJCQkg KiBXZSByZWx5IG9uIHRoZSBoYXJkd2FyZSBiZWluZyBzdHJvbmdseQo+IC0JCQkJICogb3JkZXJl ZCwgdGhhdCB0aGUgYnJlYWRjcnVtYiB3cml0ZSBpcwo+IC0JCQkJICogY29oZXJlbnQgKHZpc2li bGUgZnJvbSB0aGUgQ1BVKSBiZWZvcmUgdGhlCj4gLQkJCQkgKiB1c2VyIGludGVycnVwdCBhbmQg Q1NCIGlzIHByb2Nlc3NlZC4KPiAtCQkJCSAqLwo+IC0JCQkJR0VNX0JVR19PTighaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlZChycSkpOwo+IC0KPiAtCQkJCWV4ZWNsaXN0c19jb250ZXh0X3NjaGVkdWxl X291dChycSwKPiAtCQkJCQkJCSAgICAgICBJTlRFTF9DT05URVhUX1NDSEVEVUxFX09VVCk7Cj4g LQkJCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAtCj4gLQkJCQlHRU1fVFJBQ0UoIiVzIGNvbXBs ZXRlZCBjdHg9JWRcbiIsCj4gLQkJCQkJICBlbmdpbmUtPm5hbWUsIHBvcnQtPmNvbnRleHRfaWQp Owo+IC0KPiAtCQkJCXBvcnQgPSBleGVjbGlzdHNfcG9ydF9jb21wbGV0ZShleGVjbGlzdHMsIHBv cnQpOwo+IC0JCQkJaWYgKHBvcnRfaXNzZXQocG9ydCkpCj4gLQkJCQkJZXhlY2xpc3RzX3VzZXJf YmVnaW4oZXhlY2xpc3RzLCBwb3J0KTsKPiAtCQkJCWVsc2UKPiAtCQkJCQlleGVjbGlzdHNfdXNl cl9lbmQoZXhlY2xpc3RzKTsKPiAtCQkJfSBlbHNlIHsKPiAtCQkJCXBvcnRfc2V0KHBvcnQsIHBv cnRfcGFjayhycSwgY291bnQpKTsKPiAtCQkJfQo+IC0JCX0KPiArCQkJZXhlY2xpc3RzX2NvbnRl eHRfc2NoZWR1bGVfb3V0KHJxLAo+ICsJCQkJCQkgICAgICAgSU5URUxfQ09OVEVYVF9TQ0hFRFVM RV9PVVQpOwo+ICsJCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAgIAo+IC0JCWlmIChoZWFkICE9 IGV4ZWNsaXN0cy0+Y3NiX2hlYWQpIHsKPiAtCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7 Cj4gLQkJCXdyaXRlbChfTUFTS0VEX0ZJRUxEKEdFTjhfQ1NCX1JFQURfUFRSX01BU0ssIGhlYWQg PDwgOCksCj4gLQkJCSAgICAgICBpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwo+ICsJCQlHRU1fVFJBQ0UoIiVzIGNvbXBs ZXRlZCBjdHg9JWRcbiIsCj4gKwkJCQkgIGVuZ2luZS0+bmFtZSwgcG9ydC0+Y29udGV4dF9pZCk7 Cj4gKwo+ICsJCQlwb3J0ID0gZXhlY2xpc3RzX3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0 KTsKPiArCQkJaWYgKHBvcnRfaXNzZXQocG9ydCkpCj4gKwkJCQlleGVjbGlzdHNfdXNlcl9iZWdp bihleGVjbGlzdHMsIHBvcnQpOwo+ICsJCQllbHNlCj4gKwkJCQlleGVjbGlzdHNfdXNlcl9lbmQo ZXhlY2xpc3RzKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlwb3J0X3NldChwb3J0LCBwb3J0X3BhY2so cnEsIGNvdW50KSk7Cj4gICAJCX0KPiAtCX0gd2hpbGUgKHRlc3RfYml0KEVOR0lORV9JUlFfRVhF Q0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpKTsKPiArCX0KPiArCj4gKwlpZiAoaGVhZCAhPSBl eGVjbGlzdHMtPmNzYl9oZWFkKSB7Cj4gKwkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Cj4g KwkJd3JpdGVsKF9NQVNLRURfRklFTEQoR0VOOF9DU0JfUkVBRF9QVFJfTUFTSywgaGVhZCA8PCA4 KSwKPiArCQkgICAgICAgaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09O VEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKTsKPiArCX0KPiAgIAo+ICAgCWlmICh1bmxpa2VseShm dykpCj4gICAJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGk5MTUsIGV4ZWNsaXN0cy0+Zndf ZG9tYWlucyk7Cj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=