From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v2] drm/i915/oa: Reconfigure contexts on the fly Date: Fri, 5 Jul 2019 16:29:46 +0300 Message-ID: <43c7eb49-9c4c-eb69-eb57-46d30db5ef3f@intel.com> References: <20190705123057.19346-1-chris@chris-wilson.co.uk> <20190705131642.9246-1-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 mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9CC886E4AF for ; Fri, 5 Jul 2019 13:29:49 +0000 (UTC) In-Reply-To: <20190705131642.9246-1-chris@chris-wilson.co.uk> Content-Language: en-US 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 TG9va3MgZ29vZCwgcHJvYmFibHkgYmVzdCB0byBoYXZlIHNvbWVvbmUgbW9yZSBmYW1pbGlhciB3 aXRoIHRoZSBpOTE1IApjb2RlYmFzZSBsb29rIGF0IGl0IHRvby4KClRoYW5rcyBhIGJ1bmNoIQoK UmV2aWV3ZWQtYnk6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVs LmNvbT4KCk9uIDA1LzA3LzIwMTkgMTY6MTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBdm9pZCBh IGdsb2JhbCBpZGxlIGJhcnJpZXIgYnkgcmVjb25maWd1cmluZyBlYWNoIGNvbnRleHQgYnkgcmV3 cml0aW5nCj4gdGhlbSB3aXRoIE1JX1NUT1JFX0RXT1JEIGZyb20gdGhlIGtlcm5lbCBjb250ZXh0 Lgo+Cj4gdjI6IFdlIG9ubHkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGRlc2lyZWQgcmVnaXN0ZXIg dmFsdWVzIG9uY2UsIHRoZXkgYXJlCj4gdGhlIHNhbWUgZm9yIGFsbCBjb250ZXh0cy4KPgo+IFNp Z25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENj OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+Cj4gQ2M6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jIHwgICAyICsKPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICAgICAgfCAyNDQgKysrKysrKysrKysr KysrLS0tLS0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTkwIGluc2VydGlvbnMoKyksIDYzIGRlbGV0 aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5j Cj4gaW5kZXggZTM2N2RjZTJhNjk2Li4xZjBkMTBiYjg4YzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtNjI0LDcgKzYyNCw5IEBAIGk5 MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2tlcm5lbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwgaW50IHByaW8pCj4gICAJY3R4LT5zY2hlZC5wcmlvcml0eSA9IEk5MTVfVVNFUl9QUklPUklU WShwcmlvKTsKPiAgIAljdHgtPnJpbmdfc2l6ZSA9IFBBR0VfU0laRTsKPiAgIAo+ICsJLyogSXNv bGF0ZSB0aGUga2VybmVsIGNvbnRleHQgZnJvbSBwcnlpbmcgZXllcyBhbmQgc3RpY2t5IGZpbmdl cnMgKi8KPiAgIAlHRU1fQlVHX09OKCFpOTE1X2dlbV9jb250ZXh0X2lzX2tlcm5lbChjdHgpKTsK PiArCWxpc3RfZGVsX2luaXQoJmN0eC0+bGluayk7Cj4gICAKPiAgIAlyZXR1cm4gY3R4Owo+ICAg fQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gaW5kZXggZTFhZTEzOTljNzJiLi45 Y2M1Mzc0NDAxZTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf bHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IEBAIC0x NTUyLDkgKzE1NTIsMTIgQEAgX19leGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UsCj4gICAJcmVnc1tDVFhfUklOR19UQUlMICsgMV0gPSByaW5nLT50YWls Owo+ICAgCj4gICAJLyogUlBDUyAqLwo+IC0JaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NM QVNTKQo+ICsJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7Cj4gICAJCXJlZ3Nb Q1RYX1JfUFdSX0NMS19TVEFURSArIDFdID0KPiAgIAkJCWludGVsX3NzZXVfbWFrZV9ycGNzKGVu Z2luZS0+aTkxNSwgJmNlLT5zc2V1KTsKPiArCj4gKwkJaTkxNV9vYV9pbml0X3JlZ19zdGF0ZShl bmdpbmUsIGNlLCByZWdzKTsKPiArCX0KPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludAo+IEBAIC0y OTY2LDggKzI5NjksNiBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMy ICpyZWdzLAo+ICAgCWlmIChyY3MpIHsKPiAgIAkJcmVnc1tDVFhfTFJJX0hFQURFUl8yXSA9IE1J X0xPQURfUkVHSVNURVJfSU1NKDEpOwo+ICAgCQlDVFhfUkVHKHJlZ3MsIENUWF9SX1BXUl9DTEtf U1RBVEUsIEdFTjhfUl9QV1JfQ0xLX1NUQVRFLCAwKTsKPiAtCj4gLQkJaTkxNV9vYV9pbml0X3Jl Z19zdGF0ZShlbmdpbmUsIGNlLCByZWdzKTsKPiAgIAl9Cj4gICAKPiAgIAlyZWdzW0NUWF9FTkRd ID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+IGluZGV4 IDM1N2U2M2JlYjM3My4uODM1MzU4OWVlMzFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGVyZi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJm LmMKPiBAQCAtMTYzMCw2ICsxNjMwLDI3IEBAIHN0YXRpYyB2b2lkIGhzd19kaXNhYmxlX21ldHJp Y19zZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCQkJCSAgICAgIH5H VF9OT0FfRU5BQkxFKSk7Cj4gICB9Cj4gICAKPiArc3RhdGljIHUzMiBvYV9jb25maWdfZmxleF9y ZWcoY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcsCj4gKwkJCSAgICAgIGk5 MTVfcmVnX3QgcmVnKQo+ICt7Cj4gKwl1MzIgbW1pbyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJl Zyk7Cj4gKwlpbnQgaTsKPiArCj4gKwkvKgo+ICsJICogVGhpcyBhcmJpdHJhcnkgZGVmYXVsdCB3 aWxsIHNlbGVjdCB0aGUgJ0VVIEZQVTAgUGlwZWxpbmUKPiArCSAqIEFjdGl2ZScgZXZlbnQuIElu IHRoZSBmdXR1cmUgaXQncyBhbnRpY2lwYXRlZCB0aGF0IHRoZXJlCj4gKwkgKiB3aWxsIGJlIGFu IGV4cGxpY2l0ICdObyBFdmVudCcgd2UgY2FuIHNlbGVjdCwgYnV0IG5vdCB5ZXQuLi4KPiArCSAq Lwo+ICsJaWYgKCFvYV9jb25maWcpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IG9hX2NvbmZpZy0+ZmxleF9yZWdzX2xlbjsgaSsrKSB7Cj4gKwkJaWYgKGk5MTVfbW1pb19y ZWdfb2Zmc2V0KG9hX2NvbmZpZy0+ZmxleF9yZWdzW2ldLmFkZHIpID09IG1taW8pCj4gKwkJCXJl dHVybiBvYV9jb25maWctPmZsZXhfcmVnc1tpXS52YWx1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICAgLyoKPiAgICAqIE5COiBJdCBtdXN0IGFsd2F5cyByZW1haW4gcG9pbnRlciBz YWZlIHRvIHJ1biB0aGlzIGV2ZW4gaWYgdGhlIE9BIHVuaXQKPiAgICAqIGhhcyBiZWVuIGRpc2Fi bGVkLgo+IEBAIC0xNjYzLDI4ICsxNjg0LDggQEAgZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9j a2VkKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJR0VOOF9PQV9DT1VOVEVSX1JFU1VN RSk7Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGV4X3JlZ3MpOyBpKysp IHsKPiAtCQl1MzIgc3RhdGVfb2Zmc2V0ID0gY3R4X2ZsZXhldTAgKyBpICogMjsKPiAtCQl1MzIg bW1pbyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KGZsZXhfcmVnc1tpXSk7Cj4gLQo+IC0JCS8qCj4g LQkJICogVGhpcyBhcmJpdHJhcnkgZGVmYXVsdCB3aWxsIHNlbGVjdCB0aGUgJ0VVIEZQVTAgUGlw ZWxpbmUKPiAtCQkgKiBBY3RpdmUnIGV2ZW50LiBJbiB0aGUgZnV0dXJlIGl0J3MgYW50aWNpcGF0 ZWQgdGhhdCB0aGVyZQo+IC0JCSAqIHdpbGwgYmUgYW4gZXhwbGljaXQgJ05vIEV2ZW50JyB3ZSBj YW4gc2VsZWN0LCBidXQgbm90IHlldC4uLgo+IC0JCSAqLwo+IC0JCXUzMiB2YWx1ZSA9IDA7Cj4g LQo+IC0JCWlmIChvYV9jb25maWcpIHsKPiAtCQkJdTMyIGo7Cj4gLQo+IC0JCQlmb3IgKGogPSAw OyBqIDwgb2FfY29uZmlnLT5mbGV4X3JlZ3NfbGVuOyBqKyspIHsKPiAtCQkJCWlmIChpOTE1X21t aW9fcmVnX29mZnNldChvYV9jb25maWctPmZsZXhfcmVnc1tqXS5hZGRyKSA9PSBtbWlvKSB7Cj4g LQkJCQkJdmFsdWUgPSBvYV9jb25maWctPmZsZXhfcmVnc1tqXS52YWx1ZTsKPiAtCQkJCQlicmVh azsKPiAtCQkJCX0KPiAtCQkJfQo+IC0JCX0KPiAtCj4gLQkJQ1RYX1JFRyhyZWdfc3RhdGUsIHN0 YXRlX29mZnNldCwgZmxleF9yZWdzW2ldLCB2YWx1ZSk7Cj4gKwkJQ1RYX1JFRyhyZWdfc3RhdGUs IGN0eF9mbGV4ZXUwICsgaSAqIDIsIGZsZXhfcmVnc1tpXSwKPiArCQkJb2FfY29uZmlnX2ZsZXhf cmVnKG9hX2NvbmZpZywgZmxleF9yZWdzW2ldKSk7Cj4gICAJfQo+ICAgCj4gICAJQ1RYX1JFRyhy ZWdfc3RhdGUsCj4gQEAgLTE2OTIsNiArMTY5MywxMDcgQEAgZ2VuOF91cGRhdGVfcmVnX3N0YXRl X3VubG9ja2VkKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJaW50ZWxfc3NldV9tYWtl X3JwY3MoaTkxNSwgJmNlLT5zc2V1KSk7Cj4gICB9Cj4gICAKPiArc3RydWN0IGZsZXggewo+ICsJ aTkxNV9yZWdfdCByZWc7Cj4gKwl1MzIgb2Zmc2V0Owo+ICsJdTMyIHZhbHVlOwo+ICt9Owo+ICsK PiArc3RhdGljIGludAo+ICtnZW44X3N0b3JlX2ZsZXgoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICsJCWNvbnN0IHN0cnVjdCBmbGV4ICpm bGV4LCB1bnNpZ25lZCBpbnQgY291bnQpCj4gK3sKPiArCXUzMiBvZmZzZXQ7Cj4gKwl1MzIgKmNz Owo+ICsKPiArCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCAqIGNvdW50KTsKPiArCWlmIChJ U19FUlIoY3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKGNzKTsKPiArCj4gKwlvZmZzZXQgPSBpOTE1 X2dndHRfb2Zmc2V0KGNlLT5zdGF0ZSkgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkU7Cj4gKwlk byB7Cj4gKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONCB8IE1JX1VTRV9HR1RUOwo+ ICsJCSpjcysrID0gb2Zmc2V0ICsgKGZsZXgtPm9mZnNldCArIDEpICogc2l6ZW9mKHUzMik7Cj4g KwkJKmNzKysgPSAwOwo+ICsJCSpjcysrID0gZmxleC0+dmFsdWU7Cj4gKwl9IHdoaWxlIChmbGV4 KyssIC0tY291bnQpOwo+ICsKPiArCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2dlbjhfbG9hZF9mbGV4KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLAo+ICsJICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwK PiArCSAgICAgICBjb25zdCBzdHJ1Y3QgZmxleCAqZmxleCwgdW5zaWduZWQgaW50IGNvdW50KQo+ ICt7Cj4gKwl1MzIgKmNzOwo+ICsKPiArCUdFTV9CVUdfT04oIWNvdW50IHx8IGNvdW50ID4gNjMp Owo+ICsKPiArCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgMiAqIGNvdW50ICsgMik7Cj4gKwlp ZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJKmNzKysgPSBN SV9MT0FEX1JFR0lTVEVSX0lNTShjb3VudCk7Cj4gKwlkbyB7Cj4gKwkJKmNzKysgPSBpOTE1X21t aW9fcmVnX29mZnNldChmbGV4LT5yZWcpOwo+ICsJCSpjcysrID0gZmxleC0+dmFsdWU7Cj4gKwl9 IHdoaWxlIChmbGV4KyssIC0tY291bnQpOwo+ICsJKmNzKysgPSBNSV9OT09QOwo+ICsKPiArCWlu dGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGdlbjhfbW9kaWZ5X2NvbnRleHQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGZsZXggKmZsZXgsIHVuc2lnbmVkIGludCBjb3VudCkK PiArewo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmNlLT5waW5fbXV0ZXgpOwo+ICsKPiArCXJxID0gaTkxNV9yZXF1 ZXN0X2NyZWF0ZShjZS0+ZW5naW5lLT5rZXJuZWxfY29udGV4dCk7Cj4gKwlpZiAoSVNfRVJSKHJx KSkKPiArCQlyZXR1cm4gUFRSX0VSUihycSk7Cj4gKwo+ICsJLyogU2VyaWFsaXNlIHdpdGggdGhl IHJlbW90ZSBjb250ZXh0ICovCj4gKwllcnIgPSBpOTE1X2FjdGl2ZV9yZXF1ZXN0X3NldCgmY2Ut PnJpbmctPnRpbWVsaW5lLT5sYXN0X3JlcXVlc3QsIHJxKTsKPiArCWlmIChlcnIpCj4gKwkJZ290 byBvdXRfYWRkOwo+ICsKPiArCS8qIEtlZXAgdGhlIHJlbW90ZSBjb250ZXh0IGFsaXZlIHVudGls IGFmdGVyIHdlIGZpbmlzaCBlZGl0aW5nICovCj4gKwllcnIgPSBpOTE1X2FjdGl2ZV9yZWYoJmNl LT5hY3RpdmUsIHJxLT5mZW5jZS5jb250ZXh0LCBycSk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8g b3V0X2FkZDsKPiArCj4gKwllcnIgPSBnZW44X3N0b3JlX2ZsZXgocnEsIGNlLCBmbGV4LCBjb3Vu dCk7Cj4gKwo+ICtvdXRfYWRkOgo+ICsJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gKwlyZXR1cm4g ZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdlbjhfbW9kaWZ5X3NlbGYoc3RydWN0IGludGVs X2NvbnRleHQgKmNlLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGZsZXggKmZsZXgsIHVuc2lnbmVk IGludCBjb3VudCkKPiArewo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwlpbnQgZXJy Owo+ICsKPiArCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7Cj4gKwlpZiAoSVNfRVJSKHJx KSkKPiArCQlyZXR1cm4gUFRSX0VSUihycSk7Cj4gKwo+ICsJZXJyID0gZ2VuOF9sb2FkX2ZsZXgo cnEsIGNlLCBmbGV4LCBjb3VudCk7Cj4gKwo+ICsJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gKwly ZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICAgLyoKPiAgICAqIE1hbmFnZXMgdXBkYXRpbmcgdGhlIHBl ci1jb250ZXh0IGFzcGVjdHMgb2YgdGhlIE9BIHN0cmVhbQo+ICAgICogY29uZmlndXJhdGlvbiBh Y3Jvc3MgYWxsIGNvbnRleHRzLgo+IEBAIC0xNzE2LDE1ICsxODE4LDQzIEBAIGdlbjhfdXBkYXRl X3JlZ19zdGF0ZV91bmxvY2tlZChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gICAgKgo+ICAg ICogTm90ZTogaXQncyBvbmx5IHRoZSBSQ1MvUmVuZGVyIGNvbnRleHQgdGhhdCBoYXMgYW55IE9B IHN0YXRlLgo+ICAgICovCj4gLXN0YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArc3RhdGljIGludCBnZW44X2Nv bmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJ CQkJICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2FfY29uZmlnKQo+ICAgewo+ IC0JdW5zaWduZWQgaW50IG1hcF90eXBlID0gaTkxNV9jb2hlcmVudF9tYXBfdHlwZShkZXZfcHJp dik7Cj4gKwkvKiBUaGUgTU1JTyBvZmZzZXRzIGZvciBGbGV4IEVVIHJlZ2lzdGVycyBhcmVuJ3Qg Y29udGlndW91cyAqLwo+ICsJY29uc3QgdTMyIGN0eF9mbGV4ZXUwID0gaTkxNS0+cGVyZi5vYS5j dHhfZmxleGV1MF9vZmZzZXQ7Cj4gKyNkZWZpbmUgY3R4X2ZsZXhldU4oTikgKGN0eF9mbGV4ZXUw ICsgMiAqIChOKSkKPiArCXN0cnVjdCBmbGV4IHJlZ3NbXSA9IHsKPiArCQl7Cj4gKwkJCUdFTjhf Ul9QV1JfQ0xLX1NUQVRFLAo+ICsJCQlDVFhfUl9QV1JfQ0xLX1NUQVRFLAo+ICsJCX0sCj4gKwkJ ewo+ICsJCQlHRU44X09BQ1RYQ09OVFJPTCwKPiArCQkJaTkxNS0+cGVyZi5vYS5jdHhfb2FjdHhj dHJsX29mZnNldCwKPiArCQkJKChpOTE1LT5wZXJmLm9hLnBlcmlvZF9leHBvbmVudCA8PCBHRU44 X09BX1RJTUVSX1BFUklPRF9TSElGVCkgfAo+ICsJCQkgKGk5MTUtPnBlcmYub2EucGVyaW9kaWMg PyBHRU44X09BX1RJTUVSX0VOQUJMRSA6IDApIHwKPiArCQkJIEdFTjhfT0FfQ09VTlRFUl9SRVNV TUUpCj4gKwkJfSwKPiArCQl7IEVVX1BFUkZfQ05UTDAsIGN0eF9mbGV4ZXVOKDApIH0sCj4gKwkJ eyBFVV9QRVJGX0NOVEwxLCBjdHhfZmxleGV1TigxKSB9LAo+ICsJCXsgRVVfUEVSRl9DTlRMMiwg Y3R4X2ZsZXhldU4oMikgfSwKPiArCQl7IEVVX1BFUkZfQ05UTDMsIGN0eF9mbGV4ZXVOKDMpIH0s Cj4gKwkJeyBFVV9QRVJGX0NOVEw0LCBjdHhfZmxleGV1Tig0KSB9LAo+ICsJCXsgRVVfUEVSRl9D TlRMNSwgY3R4X2ZsZXhldU4oNSkgfSwKPiArCQl7IEVVX1BFUkZfQ05UTDYsIGN0eF9mbGV4ZXVO KDYpIH0sCj4gKwl9Owo+ICsjdW5kZWYgY3R4X2ZsZXhldU4KPiArCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZTsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+IC0Jc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQlpbnQgcmV0Owo+ICsJZW51bSBpbnRlbF9lbmdpbmVf aWQgaWQ7Cj4gKwlpbnQgZXJyOwo+ICsJaW50IGk7Cj4gICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWZvciAoaSA9IDI7IGkgPCBBUlJB WV9TSVpFKHJlZ3MpOyBpKyspCj4gKwkJcmVnc1tpXS52YWx1ZSA9IG9hX2NvbmZpZ19mbGV4X3Jl ZyhvYV9jb25maWcsIHJlZ3NbaV0ucmVnKTsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ICAgCS8qCj4gICAJICogVGhlIE9BIHJlZ2lz dGVyIGNvbmZpZyBpcyBzZXR1cCB0aHJvdWdoIHRoZSBjb250ZXh0IGltYWdlLiBUaGlzIGltYWdl Cj4gQEAgLTE3MzUsNTkgKzE4NjUsNTMgQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxf Y29udGV4dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCSAqIFdlIGNv dWxkIGVtaXQgdGhlIE9BIHJlZ2lzdGVyIGNvbmZpZyB0aHJvdWdoIHRoZSBiYXRjaCBidWZmZXIg YnV0Cj4gICAJICogdGhpcyBtaWdodCBsZWF2ZSBzbWFsbCBpbnRlcnZhbCBvZiB0aW1lIHdoZXJl IHRoZSBPQSB1bml0IGlzCj4gICAJICogY29uZmlndXJlZCBhdCBhbiBpbnZhbGlkIHNhbXBsaW5n IHBlcmlvZC4KPiAtCSAqCj4gLQkgKiBTbyBmYXIgdGhlIGJlc3Qgd2F5IHRvIHdvcmsgYXJvdW5k IHRoaXMgaXNzdWUgc2VlbXMgdG8gYmUgZHJhaW5pbmcKPiAtCSAqIHRoZSBHUFUgZnJvbSBhbnkg c3VibWl0dGVkIHdvcmsuCj4gICAJICovCj4gLQlyZXQgPSBpOTE1X2dlbV93YWl0X2Zvcl9pZGxl KGRldl9wcml2LAo+IC0JCQkJICAgICBJOTE1X1dBSVRfTE9DS0VELAo+IC0JCQkJICAgICBNQVhf U0NIRURVTEVfVElNRU9VVCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0J LyogVXBkYXRlIGFsbCBjb250ZXh0cyBub3cgdGhhdCB3ZSd2ZSBzdGFsbGVkIHRoZSBzdWJtaXNz aW9uLiAqLwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZkZXZfcHJpdi0+Y29udGV4dHMu bGlzdCwgbGluaykgewo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZpOTE1LT5jb250ZXh0 cy5saXN0LCBsaW5rKSB7Cj4gICAJCXN0cnVjdCBpOTE1X2dlbV9lbmdpbmVzX2l0ZXIgaXQ7Cj4g ICAJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPiAgIAo+ICAgCQlmb3JfZWFjaF9nZW1fZW5n aW5lKGNlLAo+ICAgCQkJCSAgICBpOTE1X2dlbV9jb250ZXh0X2xvY2tfZW5naW5lcyhjdHgpLAo+ ICAgCQkJCSAgICBpdCkgewo+IC0JCQl1MzIgKnJlZ3M7Cj4gLQo+ICAgCQkJaWYgKGNlLT5lbmdp bmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPiAgIAkJCQljb250aW51ZTsKPiAgIAo+IC0JCQkv KiBPQSBzZXR0aW5ncyB3aWxsIGJlIHNldCB1cG9uIGZpcnN0IHVzZSAqLwo+IC0JCQlpZiAoIWNl LT5zdGF0ZSkKPiAtCQkJCWNvbnRpbnVlOwo+IC0KPiAtCQkJcmVncyA9IGk5MTVfZ2VtX29iamVj dF9waW5fbWFwKGNlLT5zdGF0ZS0+b2JqLAo+IC0JCQkJCQkgICAgICAgbWFwX3R5cGUpOwo+IC0J CQlpZiAoSVNfRVJSKHJlZ3MpKSB7Cj4gLQkJCQlpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdp bmVzKGN0eCk7Cj4gLQkJCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsKPiAtCQkJfQo+ICsJCQllcnIg PSBpbnRlbF9jb250ZXh0X2xvY2tfcGlubmVkKGNlKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWJy ZWFrOwo+ICAgCj4gLQkJCWNlLT5zdGF0ZS0+b2JqLT5tbS5kaXJ0eSA9IHRydWU7Cj4gLQkJCXJl Z3MgKz0gTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFIC8gc2l6ZW9mKCpyZWdzKTsKPiArCQkJcmVn c1swXS52YWx1ZSA9IGludGVsX3NzZXVfbWFrZV9ycGNzKGk5MTUsICZjZS0+c3NldSk7Cj4gICAK PiAtCQkJZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKGNlLCByZWdzLCBvYV9jb25maWcp Owo+ICsJCQkvKiBPdGhlcndpc2UgT0Egc2V0dGluZ3Mgd2lsbCBiZSBzZXQgdXBvbiBmaXJzdCB1 c2UgKi8KPiArCQkJaWYgKGludGVsX2NvbnRleHRfaXNfcGlubmVkKGNlKSkKPiArCQkJCWVyciA9 IGdlbjhfbW9kaWZ5X2NvbnRleHQoY2UsIHJlZ3MsIEFSUkFZX1NJWkUocmVncykpOwo+ICAgCj4g LQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2UtPnN0YXRlLT5vYmopOwo+ICsJCQlpbnRl bF9jb250ZXh0X3VubG9ja19waW5uZWQoY2UpOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJYnJlYWs7 Cj4gICAJCX0KPiAgIAkJaTkxNV9nZW1fY29udGV4dF91bmxvY2tfZW5naW5lcyhjdHgpOwo+ICsJ CWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gICAJfQo+ICAgCj4gICAJLyoKPiAtCSAqIEFw cGx5IHRoZSBjb25maWd1cmF0aW9uIGJ5IGRvaW5nIG9uZSBjb250ZXh0IHJlc3RvcmUgb2YgdGhl IGVkaXRlZAo+IC0JICogY29udGV4dCBpbWFnZS4KPiArCSAqIEFmdGVyIHVwZGF0aW5nIGFsbCBv dGhlciBjb250ZXh0cywgd2UgbmVlZCB0byBtb2RpZnkgb3Vyc2VsdmVzLgo+ICsJICogSWYgd2Ug ZG9uJ3QgbW9kaWZ5IHRoZSBrZXJuZWxfY29udGV4dCwgd2UgZG8gbm90IGdldCBldmVudHMgd2hp bGUKPiArCSAqIGlkbGUuCj4gICAJICovCj4gLQlycSA9IGk5MTVfcmVxdWVzdF9jcmVhdGUoZGV2 X3ByaXYtPmVuZ2luZVtSQ1MwXS0+a2VybmVsX2NvbnRleHQpOwo+IC0JaWYgKElTX0VSUihycSkp Cj4gLQkJcmV0dXJuIFBUUl9FUlIocnEpOwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkx NSwgaWQpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBlbmdpbmUtPmtlcm5lbF9j b250ZXh0Owo+ICAgCj4gLQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKPiArCQlpZiAoZW5naW5lLT5j bGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlyZWdzWzBdLnZh bHVlID0gaW50ZWxfc3NldV9tYWtlX3JwY3MoaTkxNSwgJmNlLT5zc2V1KTsKPiArCj4gKwkJZXJy ID0gZ2VuOF9tb2RpZnlfc2VsZihjZSwgcmVncywgQVJSQVlfU0laRShyZWdzKSk7Cj4gKwkJaWYg KGVycikKPiArCQkJcmV0dXJuIGVycjsKPiArCX0KPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==