From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH v18 2/2] drm/i915/selftests: Introduce live tests of private PAT management Date: Fri, 22 Sep 2017 13:34:16 +0300 Message-ID: <1506076456.6232.46.camel@linux.intel.com> References: <1506014935-2012-1-git-send-email-zhi.a.wang@intel.com> <1506014935-2012-2-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1506014935-2012-2-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org Cc: Rodrigo Vivi , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE3LTA5LTIyIGF0IDAxOjI4ICswODAwLCBaaGkgV2FuZyB3cm90ZToKPiBJbnRy b2R1Y2UgdHdvIGxpdmUgdGVzdHMgb2YgcHJpdmF0ZSBQQVQgbWFuYWdlbWVudDoKPiAKPiBpZ3Rf cHBhdF9pbml0IC0gVGhpcyB0ZXN0IGlzIHRvIGNoZWNrIGlmIGFsbCB0aGUgUFBBVCBjb25maWd1 cmF0aW9ucyBhcmUKPiB3cml0dGVuIGludG8gSFcuCj4gCj4gaWd0X3BwYXRfZ2V0IC0gVGhpcyB0 ZXN0IHBlcmZvcm1zIHNldmVyYWwgc3ViLXRlc3RzIG9uIGludGVsX3BwYXRfZ2V0KCkKPiBhbmQg aW50ZWxfcHBhdF9wdXQoKS4KPiAKPiBUaGUgInBlcmZlY3QgbWF0Y2giIHRlc3QgY2FzZSB3aWxs IHRyeSB0byBnZXQgYSBQUEFUIGVudHJ5IHdpdGggYW4gZXhpc3RpbmcKPiB2YWx1ZSwgdGhlbiBj aGVjayBpZiB0aGUgcmV0dXJuZWQgUFBBVCBlbnRyeSBpcyB0aGUgc2FtZSBvbmUuCj4gCj4gVGhl ICJhbGxvYyBlbnRyaWVzIiB0ZXN0IGNhc2Ugd2lsbCBydW4gb3V0IG9mIFBQQVQgdGFibGUsIGFu ZCBjaGVjayBpZiBhbGwKPiB0aGUgcmVxdWVzdGVkIHZhbHVlcyBhcmUgcHV0IGludG8gdGhlIG5l d2x5IGFsbG9jYXRlZCBQUEFUIGVudHJpZXMuCj4gCj4gVGhlIG5lZ2F0aXZlIHRlc3QgY2FzZSB3 aWxsIHRyeSB0byBnZW5lcmF0ZSBhIG5ldyBQUEFUIHZhbHVlLCBhbmQgZ2V0IGl0Cj4gd2hlbiBQ UEFUIHRhYmxlIGlzIGZ1bGwuCj4gCj4gVGhlICJwYXJ0aWFsIG1hdGNoIiB0ZXN0IGNhc2Ugd2ls bCBnZW5lcmF0ZSBhIHBhcml0YWwgbWF0Y2hlZCB2YWx1ZSBmcm9tCj4gdGhlIGV4aXN0aW5nIFBQ QVQgdGFibGUgYW5kIHRyeSB0byBtYXRjaCBpdC4KPiAKPiBUaGUgInJlLWFsbG9jIiB0ZXN0IGNh c2Ugd2lsbCB0cnkgdG8gZnJlZSBhbmQgdGhlbiBhbGxvY2F0ZSBhIG5ldyBlbnRyeQo+IHdoZW4g dGhlIFBQQVQgdGFibGUgaXMgZnVsbC4KPiAKPiBUaGUgInB1dCBlbnRyaWVzIiB0ZXN0IGNhc2Ug d2lsbCBmcmVlIGFsbCB0aGUgUFBBVCBlbnRyaWVzIHRoYXQgYWxsb2NhdGVkCj4gaW4gImFsbG9j IGVudHJpZXMiIHRlc3QgY2FzZS4gSXQgd2lsbCBjaGVjayBpZiB0aGUgdmFsdWVzIG9mIGZyZWVk IFBQQVQKPiBlbnRyaWVzIHR1cm4gaW50byBwcGF0LT5jbGVhcl92YWx1ZS4KPiAKPiB2MTg6Cj4g Cj4gLSBSZWZpbmUgdGhlIHRlc3QgdG8gY2F0Y2ggYSBjb3JuZXIgY2FzZS4KPiAKPiB2MTA6Cj4g Cj4gLSBSZWZpbmUgY29kZSBzdHJ1Y3R1cmUuCj4gLSBJbnRyb2R1Y2UgInJlLWFsbG9jIiB0ZXN0 IGNhc2UuIChDaHJpcykKPiAKPiB2OToKPiAKPiAtIFJlZmluZSBnZW5lcmF0ZV9uZXdfdmFsdWUo KS4gKENocmlzKQo+IC0gUmVmaW5lIGZhaWx1cmUgb3V0cHV0LiAoQ2hyaXMpCj4gLSBSZWZpbmUg dGVzdCBmbG93IG9mICJwZXJmZWN0IG1hdGNoIi4gKENocmlzKQo+IC0gSW50cm9kdWNlIGFub3Ro ZXIgbmVnYXRpdmUgdGVzdCBjYXNlIGFmdGVyICJwYXJ0aWFsIG1hdGNoIi4gKENocmlzKQo+IAo+ IHY4Ogo+IAo+IC0gUmVtb3ZlIG5vaXN5IG91dHB1dC4gKENocmlzKQo+IC0gQWRkIG5lZ2F0aXZl IHRlc3QgY2FzZS4gKENocmlzKQo+IAo+IENjOiBCZW4gV2lkYXdza3kgPGJlbmphbWluLndpZGF3 c2t5QGludGVsLmNvbT4KPiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29t Pgo+IENjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+ Cj4gU3VnZ2VzdGVkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K PiBTaWduZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+Cgo8U05JUD4K Cj4gK3N0YXRpYyBpbnQgaWd0X3BwYXRfY2hlY2sodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFp OTE1LT5wcGF0Lm1heF9lbnRyaWVzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gMTApCj4gKwkJcmV0ID0gY2hlY2tfY25sX3BwYXQoaTkxNSk7Cj4gKwllbHNl Cj4gKwkJcmV0ID0gY2hlY2tfYmR3X3BwYXQoaTkxNSk7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlw cl9lcnIoImNoZWNrIFBQQVQgZmFpbGVkXG4iKTsKClRoaXMgaXMganVzdCBleHRyYSBub2lzZSwg Ym90aCBpbmRpdmlkdWFsIGRlc3QgYWxyZWFkeSBzYXkgY2hlY2sgUFBBVApmYWlsZWQuCgo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHZhbHVlX2lzX25ldyhzdHJ1 Y3QgaW50ZWxfcHBhdCAqcHBhdCwgdTggdmFsdWUpCgpCaXQgb3Zlcmx5IGdlbmVyaWMgbmFtZSBm b3Igc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jLCBob3cgYWJvdXQKJ3BwYXRfaXNfbmV3JyBvciAn cHBhdF9maW5kX21hdGNoX2FsbCcuCgo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3JfZWFjaF9z ZXRfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4gKwkJaWYgKHZhbHVl ICE9IHBwYXQtPmVudHJpZXNbaV0udmFsdWUpCgoJCWlmICh2YWx1ZSA9PSBwcGF0LT5lbnRyaWVz W2ldKQoJCQlyZXR1cm4gaTsKCkFuZCBkcm9wIHRoZSBicmFjZXMgYXJvdW5kIGZvci4KCglyZXR1 cm4gLUVOT0VOVDsKCj4gK3N0YXRpYyBib29sIHZhbHVlX2Zvcl9wYXJ0aWFsX3Rlc3Qoc3RydWN0 IGludGVsX3BwYXQgKnBwYXQsIHU4IHZhbHVlKQoKTWF5YmUgJ3BwYXRfZmluZF9tYXRjaF9jYScs IHNpbWlsYXIgY2hhbmdlcyB0byBhYm92ZSBmdW5jdGlvbiB0byByZXR1cm4KaW5kZXguCgo+ICt7 Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAoIXZhbHVlX2lzX25ldyhwcGF0LCB2YWx1ZSkpCj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qCj4gKwkgKiBBdCBsZWFzdCwgdGhlcmUgc2hvdWxkIGJl IG9uZSBlbnRyeSB3aG9zZSBjYWNoZSBhdHRyaWJ1dGUgaXMKPiArCSAqIHNhbWUgd2l0aCB0aGUg cmVxdWlyZWQgdmFsdWUuCj4gKwkgKi8KCkNvbW1lbnQgc2F5cyB3aGF0IHRoZSBjb2RlIGRvZXMs IHNvIGNhbiBiZSBkcm9wcGVkLgoKPiArCWZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+dXNlZCwg cHBhdC0+bWF4X2VudHJpZXMpIHsKPiArCQlpZiAoR0VOOF9QUEFUX0dFVF9DQSh2YWx1ZSkgIT0K PiArCQkgICAgR0VOOF9QUEFUX0dFVF9DQShwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKSkKCkFnYWlu ICc9PScgYW5kIHJldHVybiB0cnVlLgoKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXJldHVybiB0 cnVlOwo+ICsJfQo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2YWx1 ZV9mb3JfbmVnYXRpdmVfdGVzdChzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCwgdTggdmFsdWUpCgpN YXliZSAncHBhdF9maW5kX25vdF9tYXRjaF9jYScsIHNhbWUgd2l0aCByZXR1cm5pbmcgaW5kZXgg LyAtRU5PRU5ULgoKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKCF2YWx1ZV9pc19uZXcocHBh dCwgdmFsdWUpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwkvKgo+ICsJICogY2FjaGUgYXR0 cmlidXRlIGhhcyB0byBiZSBkaWZmZXJlbnQsIHNvIGk5MTVfcHBhdF9nZXQoKSB3b3VsZAo+ICsJ ICogYWxsb2NhdGUgYSBuZXcgZW50cnkuCj4gKwkgKi8KCkRpdHRvLgoKPiArCWZvcl9lYWNoX3Nl dF9iaXQoaSwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpIHsKPiArCQlpZiAoR0VOOF9Q UEFUX0dFVF9DQSh2YWx1ZSkgPT0KPiArCQkgICAgR0VOOF9QUEFUX0dFVF9DQShwcGF0LT5lbnRy aWVzW2ldLnZhbHVlKSkKPiArCQkJcmV0dXJuIGZhbHNlOwoKWW91IGNhbiBkcm9wIHRoZSBicmFj ZXMsIGhlcmUgdG9vLgoKPiArCX0KPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dTggZ2VuZXJhdGVfbmV3X3ZhbHVlKHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0LAo+ICsJCQkgICAg IGJvb2wgKCpjaGVja192YWx1ZSkoc3RydWN0IGludGVsX3BwYXQgKiwgdTgpKQoKJ3BwYXRfZ2Vu ZXJhdGVfbmV3JyBvciBzby4gQWxzbywgYnkgZGVmaW5pdGlvbiBvZiBfbmV3LCB0aGlzIGZ1bmN0 aW9uCnNob3VsZCBiZSBkb2luZyB0aGUgY2hlY2sgaWYgaXQgYWxyZWFkeSBleGlzdHMsIG5vdCB0 aGUgZmlsdGVyIGZ1bmN0aW9uCih1bm5lY2Vzc2FyeSBjb2RlIGR1cGxpY2F0aW9uKS4KCj4gK3sK PiArCXU4IGNhW10gPSB7IEdFTjhfUFBBVF9XQiwgR0VOOF9QUEFUX1dULCBHRU44X1BQQVRfVUMs IEdFTjhfUFBBVF9XQyB9Owo+ICsJdTggdGNbXSA9IHsgR0VOOF9QUEFUX0xMQywgR0VOOF9QUEFU X0xMQ0VMTEMsIEdFTjhfUFBBVF9MTENlTExDIH07Cj4gKwl1OCBhZ2VbXSA9IHsgR0VOOF9QUEFU X0FHRSgzKSwgR0VOOF9QUEFUX0FHRSgyKSwgR0VOOF9QUEFUX0FHRSgxKSwKPiArCQkgICAgIEdF TjhfUFBBVF9BR0UoMCkgfTsKPiArCWludCBjYV9pbmRleCwgdGNfaW5kZXgsIGFnZV9pbmRleDsK PiArCXU4IHZhbHVlOwo+ICsKPiArI2RlZmluZSBmb3JfZWFjaF9wcGF0X2F0dHIoY2FfaW5kZXgs IHRjX2luZGV4LCBhZ2VfaW5kZXgpIFwKPiArCWZvciAoKGNhX2luZGV4KSA9IDAgOyAoY2FfaW5k ZXgpIDwgQVJSQVlfU0laRShjYSk7IChjYV9pbmRleCkrKykgXAo+ICsJZm9yICgodGNfaW5kZXgp ID0gMDsgKHRjX2luZGV4KSA8IEFSUkFZX1NJWkUodGMpOyAodGNfaW5kZXgpKyspIFwKPiArCWZv ciAoKGFnZV9pbmRleCkgPSAwOyAoYWdlX2luZGV4KSA8IEFSUkFZX1NJWkUoYWdlKTsgKGFnZV9p bmRleCkrKykKPiArCj4gKwlmb3JfZWFjaF9wcGF0X2F0dHIoY2FfaW5kZXgsIHRjX2luZGV4LCBh Z2VfaW5kZXgpIHsKPiArCQl2YWx1ZSA9IGFnZVthZ2VfaW5kZXhdIHwgY2FbY2FfaW5kZXhdIHwg dGNbdGNfaW5kZXhdOwo+ICsJCWlmIChjaGVja192YWx1ZShwcGF0LCB2YWx1ZSkpCj4gKwkJCXJl dHVybiB2YWx1ZTsKPiArCX0KPiArI3VuZGVmIGZvcl9lYWNoX3BwYXRfYXR0cgo+ICsJcmV0dXJu IDA7CgoJLUVOT1NQQz8KCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfcHBh dF9lbnRyeSAqCj4gK2dlbmVyYXRlX2FuZF9jaGVja19uZXdfdmFsdWUoc3RydWN0IGludGVsX3Bw YXQgKnBwYXQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBhdC0+ aTkxNTsKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeTsKPiArCXU4IHZh bHVlOwoKTWF5YmUgc3dhcCB0aGVzZSB0d28gZGVjbGFyYXRpb25zIGZvciBleHRyYSBmaW5lIHR1 bmUuCgo+ICsJREVDTEFSRV9CSVRNQVAodXNlZCwgSU5URUxfTUFYX1BQQVRfRU5UUklFUyk7Cj4g Kwo+ICsJdmFsdWUgPSBnZW5lcmF0ZV9uZXdfdmFsdWUocHBhdCwgdmFsdWVfaXNfbmV3KTsKPiAr CWlmICghdmFsdWUpIHsKPiArCQlwcl9lcnIoImZhaWwgdG8gZ2VuZXJhdGUgbmV3IHZhbHVlXG4i KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCX0KCkl0J3MgYmV0dGVyIHRvIHBy b3BhZ2F0ZSBlcnJvcnMsIGFzIG11Y2ggYXMgcG9zc2libGUsIHdpbGwgYmUgZWFzaWVyCmZvciB0 aGUgbmV4dCBwZXJzb24gdG8gZXh0ZW5kIHRoZSB0ZXN0cywgcG9zc2libHkgYWRkaW5nIG5ldyBl cnJvcgpjb25kaXRpb25zLgoKCXZhbHVlID0gcHBhdF9nZW5lcmF0ZV9uZXcoLi4pOwoJaWYgKElT X0VSUih2YWx1ZSkpIHsKCQkuLgoJCXJldHVybiBFUlJfUFRSKHZhbHVlKTsKCX0KCgo+ICsJYml0 bWFwX2NvcHkodXNlZCwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpOwo+ICsKPiArCWVu dHJ5ID0gaW50ZWxfcHBhdF9nZXQoaTkxNSwgdmFsdWUpOwo+ICsJaWYgKElTX0VSUihlbnRyeSkp IHsKPiArCQlwcl9lcnIoImZhaWwgdG8gZ2V0IG5ldyBlbnRyeVxuIik7Cj4gKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7Cj4gKwl9CgpTaG91bGRuJ3QgdGhlIHNlbGZ0ZXN0IHZlcnkgc3RyaWN0 bHkgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuLCAidW5hYmxlIHRvCnJ1biB0ZXN0IiAocmVzb3VyY2Vz IGFyZSBpbiB1c2UsIGZvciBleGFtcGxlKSBhbmQgImk5MTUgZHJpdmVyIGZhaWxlZAp0aGUgdGVz dCIuIEhlcmUgYm90aCBwcm9ibGVtcyB0cmFuc2xhdGUgaW50byAtRUlOVkFMLiBQbGVhc2UgY2hl Y2sgdGhlCmRybV9tbSB0ZXN0cyBmb3IgZXhhbXBsZXMuCgo+ICsKPiArCWlmIChlbnRyeS0+dmFs dWUgIT0gdmFsdWUpIHsKPiArCQlwcl9lcnIoInZhbHVlIGlzIG5vdCBleHBlY3RlZCwgZXhwZWN0 ZWQgJXggZm91bmQgJXhcbiIsCj4gKwkJCQl2YWx1ZSwgZW50cnktPnZhbHVlKTsKPiArCQlnb3Rv IGVycjsKPiArCX0KPiArCj4gKwlpZiAoYml0bWFwX2VxdWFsKHVzZWQsIHBwYXQtPnVzZWQsIHBw YXQtPm1heF9lbnRyaWVzKSkgewo+ICsJCXByX2VycigiZmFpbCB0byBhbGxvYyBhIG5ldyBlbnRy eVxuIik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9CgpUaGlzIHdvdWxkIGJlIHRoZSBtb3JlIGxvZ2lj YWwgdGVzdCB0byBkbyBmaXJzdCwgSSBkb24ndCB0aGluayBpdCBnZXRzCnRyaWdnZXJlZCBvdGhl cndpc2UuCgo+ICsKPiArCXJldHVybiBlbnRyeTsKCk5ld2xpbmUgaGVyZS4KCj4gK2VycjoKPiAr CWludGVsX3BwYXRfcHV0KGVudHJ5KTsKClVzdWFsbHkgaGVyZSB0b28uCgo+ICsJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcHV0X2FuZF9jaGVja19lbnRy eShjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpCgphZGQgd29yZCAncHBhdCcg c29tZXdoZXJlLgoKPiArewo+ICsJaW50ZWxfcHBhdF9wdXQoZW50cnkpOwo+ICsKPiArCWlmIChl bnRyeS0+dmFsdWUgIT0gZW50cnktPnBwYXQtPmNsZWFyX3ZhbHVlKSB7Cj4gKwkJcHJfZXJyKCJm YWlsIHRvIHB1dCBwcGF0IHZhbHVlXG4iKTsKCldvdWxkbid0ICdwcGF0IHZhbHVlIHdhcyBub3Qg Y2xlYXJlZCcgYmUgbW9yZSBpbmZvcm1hdGl2ZSwgaWYKaW50ZWxfcHBhdF9wdXQgcmV0dXJuZWQg ZXJyb3IsIHRoaXMgd291bGQgYmUgYXBwcm9wcmlhdGUuCgo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGVyZm9ybV9wZXJmZWN0 X21hdGNoX3Rlc3Qoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCgpzL3BlcmZvcm0vcHBhdC8KCj4g K3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBhdC0+aTkxNTsKPiArCWNv bnN0IHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeTsKPiArCWludCBpOwo+ICsKPiArCWZv cl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpIHsKPiArCQll bnRyeSA9IGludGVsX3BwYXRfZ2V0KGk5MTUsIHBwYXQtPmVudHJpZXNbaV0udmFsdWUpOwo+ICsJ CWlmIChJU19FUlIoZW50cnkpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihlbnRyeSk7Cj4gKwoKSXQn cyBub3Qgb2J2aW91cyB3aXRob3V0IGxvb2tpbmcgZWxzZXdoZXJlIGluIHRoZSBjb2RlLCBzbyBp dCBtaWdodCBiZQp3b3J0aCBtZW50aW9uaW5nIHRoYXQgYWxsIGVudHJpZXMgaGF2ZSBiZWVuIGdl bmVyYXRlZCB0byBiZSB1bmlxdWUuCgoJCS8qIEFsbCBnZW5lcmF0ZWQgUFBBVCBlbnRyaWVzIGFy ZSB1bmlxdWUgKi8KCj4gKwkJaWYgKGVudHJ5ICE9ICZwcGF0LT5lbnRyaWVzW2ldKSB7Cj4gKwkJ CXByX2VycigiZW50cnkgaXMgbm90IGV4cGVjdGVkXG4iKTsKCkRvIGFkZCAiZ290byBlcnIiIGFu ZCB0aGlzIGJlY29tZXMuCgoJCWlmIChlbnRyeSAhPSAuLikKCQkJZ290byBlcnI7CgpKdXN0IGJ5 IGdsYW5jaW5nIGF0IHRoZSBjb2RlLCB5b3UgY2FuIHNlZSB3ZSdyZSBkb2luZyBhbiBleHRyZW1l bHkgCnNpbXBsZSB0ZXN0LiBUaGVuLCB3aXRob3V0IGRpc3J1cHRpbmcgdGhlIGNvZGUgZmxvdywg YXQgZXJyOiBsYWJlbCwgeW91CmNhbiBhZGQgZGV0YWlscyBhYm91dCB3aGF0IHdhcyBleHBlY3Rl ZCBhbmQgd2hhdCB3ZSBnb3QuCgoKPiArCQkJaW50ZWxfcHBhdF9wdXQoZW50cnkpOwo+ICsJCQly ZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwkJaW50ZWxfcHBhdF9wdXQoZW50cnkpOwo+ICsJfQo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGVyZm9ybV9uZWdhdGl2ZV90ZXN0 KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHBwYXQtPmk5MTU7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAq ZW50cnk7Cj4gKwl1OCB2YWx1ZTsKPiArCj4gKwl2YWx1ZSA9IGdlbmVyYXRlX25ld192YWx1ZShw cGF0LCB2YWx1ZV9mb3JfbmVnYXRpdmVfdGVzdCk7Cj4gKwlpZiAoIXZhbHVlKSB7Cj4gKwkJcHJf ZXJyKCJmYWlsIHRvIGdlbmVyYXRlIG5ldyB2YWx1ZSBmb3IgbmVnYXRpdmUgdGVzdCAyXG4iKTsK CQkKCQlEcm9wICd0ZXN0IDInLgoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwll bnRyeSA9IGludGVsX3BwYXRfZ2V0KGk5MTUsIHZhbHVlKTsKPiArCWlmICghSVNfRVJSKGVudHJ5 KSB8fCBQVFJfRVJSKGVudHJ5KSAhPSAtRU5PU1BDKSB7Cj4gKwkJcHJfZXJyKCJmYWlsIG9uIG5l Z2F0aXZlIHRlc3RcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQoKQWdhaW4sIGRpZmZl cmVudGlhdGUgImNvdWxkIG5vdCBydW4gbG9naWMiIHZzLiAiZmFpbHVyZSBpbiBsb2dpYyIuIExl dHMKdHJ5IHRvIHByb3BhZ2F0ZSB0aGUgZXJyb3IgdG8gdGhlIHRvcG1vc3QgZnVuY3Rpb24sIGFu ZCB3ZSBoYXZlCnBvc3NpYmlsaXR5IHRvIHJlcG9ydCBTS0lQIHZzIEZBSUxVUkUgdG8gSS1HLVQu Cgo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGVyZm9ybV9wYXJ0aWFsX21h dGNoX3Rlc3Qoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gcHBhdC0+aTkxNTsKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9wcGF0 X2VudHJ5ICplbnRyeTsKPiArCXU4IHZhbHVlOwo+ICsKPiArCXZhbHVlID0gZ2VuZXJhdGVfbmV3 X3ZhbHVlKHBwYXQsIHZhbHVlX2Zvcl9wYXJ0aWFsX3Rlc3QpOwoKVGhlc2Ugd2lsbCByZWFkIG11 Y2ggYmV0dGVyIHdoZW4gdGhlIGZpbHRlciBmdW5jdGlvbiBoYXMgbWVhbmluZ2Z1bApuYW1lLgoK PiArCWlmICghdmFsdWUpIHsKPiArCQlwcl9lcnIoImZhaWwgdG8gZ2VuZXJhdGUgbmV3IHZhbHVl IGZvciBwYXJ0aWFsIHRlc3RcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwoKVGhpcyB3b3VsZCBi ZSBhICdjb3VsZCBub3QgcGVyZm9ybSB0ZXN0JyBpbnN0ZWFkIG9mIHRlc3QgZmFpbHVyZS4KCj4g Kwl9Cj4gKwo+ICsJZW50cnkgPSBpbnRlbF9wcGF0X2dldChpOTE1LCB2YWx1ZSk7Cj4gKwlpZiAo SVNfRVJSKGVudHJ5KSkgewo+ICsJCXByX2VycigiZmFpbCB0byBnZXQgbmV3IGVudHJ5XG4iKTsK PiArCQlyZXR1cm4gUFRSX0VSUihlbnRyeSk7CgpUaGlzIHdvdWxkIGJlIHRvbyBhICdkb24ndCBo YXZlIHNwYWNlIHRvIGV4ZWN1dGUgdGVzdCBlcnJvcicsIHNvIGhlcmUKcHJvcGFnYXRpbmcgdGhl IGVycm9yIHdvdWxkIGJlIGdvb2QgaWRlYS4KCj4gKwl9Cj4gKwo+ICsJaWYgKCEoZW50cnktPnZh bHVlICE9IHZhbHVlICYmCj4gKwkgICAgR0VOOF9QUEFUX0dFVF9DQShlbnRyeS0+dmFsdWUpID09 IEdFTjhfUFBBVF9HRVRfQ0EodmFsdWUpKSkgewoKV3JvbmcgaW5kZW50LCB5b3UncmUgbmVnYXRp bmcgYm90aCwgc28gbmVlZCB0byBpbmRlbnQgdG8gdGhlIGlubmVyICcoJwoKSW5zdGVhZCwgbmVn YXRpbmcgdGhlIHdob2xlIHRoaW5nIGFsbG93cyBkcm9wcGluZyB0aGUgZmFuY3kgaW5kZW50IGFu ZAptYWtlcyB0aGUgY29uZGl0aW9uIG11Y2ggbW9yZSB1bmRlcnN0YW5kYWJsZToKCQoJaWYgKGVu dHJ5LT52YWx1ZSA9PSB2YWx1ZSB8fCAuLl9DQSAhPSBfQ0EKCidXZSBzaG91bGQgbm90IGdldCBl cXVhbCB2YWx1ZSwgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGRpZmZlcmVudCBfQ0EnCgpUaGF0J3Mg d2hhdCBwYXJ0aWFsIG1hdGNoIGlzIGFib3V0IDopCgoKPiArCQlwcl9lcnIoInZhbHVlIGlzIG5v dCBleHBlY3RlZCwgZXhwZWN0ZWQgJXggZm91bmQgJXhcbiIsCj4gKwkJCQl2YWx1ZSwgZW50cnkt PnZhbHVlKTsKPiArCQlpbnRlbF9wcGF0X3B1dChlbnRyeSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfcHBhdF9wdXQoZW50cnkpOwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaWd0X3BwYXRfZ2V0KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBh dCA9ICZpOTE1LT5wcGF0Owo+ICsJY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKiplbnRy aWVzLCAqKnA7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnk7Cj4gKwl1 bnNpZ25lZCBpbnQgc2l6ZSA9IDA7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCWlmICghcHBhdC0+ bWF4X2VudHJpZXMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gaWd0X3BwYXRfY2hlY2so aTkxNSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyogY2FzZSAxOiBh bGxvYyBuZXcgZW50cmllcyAqLwo+ICsJZW50cmllcyA9IE5VTEw7Cj4gKwlyZXQgPSAwOwoKVGhp cyByZXQgPSAwIGlzIG5vdCBuZWVkZWQsIHdlIGFscmVhZHkgaGF2ZSBwcmVjZWRpbmcKJ2lmIChy ZXQpIHJldHVybiByZXQ7JwoKVGhlbiBkcm9wIHRoZSBleHRyYSBuZXdsaW5lLCB3ZSdyZSBsb29w aW5nIHRvIGNoYW5nZSBlbnRyaWVzLCBpdCBzaG91bGQKYmUgY2xvc2UgdG8gdGhlIGJlZ2lubmlu ZyBvZiBsb29wLgoKPiArCj4gKwl3aGlsZSAoIWJpdG1hcF9mdWxsKHBwYXQtPnVzZWQsIHBwYXQt Pm1heF9lbnRyaWVzKSkgewo+ICsJCXAgPSBrcmVhbGxvYyhlbnRyaWVzLCAoc2l6ZSArIDEpICoK PiArCQkJCSAgIHNpemVvZihzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqKSwKPiArCQkJCSAgIEdG UF9LRVJORUwpOwoKV2VpcmQgaW5kZW50LCB5b3UgY2FuIGV2ZW4gcmVkdWNlIGxpbmUgbGVuZ3Ro IHdpdGgKKHNpemUgKyAxKSpzaXplb2YoKmVudHJpZXMpLiAKCj4gKwkJaWYgKCFwKSB7Cj4gKwkJ CXJldCA9IC1FTk9NRU07Cj4gKwkJCWdvdG8gcHBhdF9wdXQ7Cj4gKwkJfQo+ICsKPiArCQllbnRy aWVzID0gcDsKPiArCj4gKwkJcCA9ICZlbnRyaWVzW3NpemUrK107Cj4gKwkJKnAgPSBOVUxMOwoK SSB0aGluayB3ZSBjb3VsZCBhbGxvY2F0ZSBhdCBvbmUgZ28sIGl0J3MgbGl0ZXJhbGx5IGEgY291 cGxlIG9mCnBvaW50ZXJzIChwcGF0LT5tYXhfZW50cmllcyksIEkgdGhpbmsgdGhpcyBpcyBiaXQg bXVjaCBmb3IgYWxsb2NhdGluZwpwb2ludGVycy4KCj4gKwo+ICsJCWVudHJ5ID0gZ2VuZXJhdGVf YW5kX2NoZWNrX25ld192YWx1ZShwcGF0KTsKPiArCQlpZiAoSVNfRVJSKGVudHJ5KSkgewo+ICsJ CQlyZXQgPSBQVFJfRVJSKGVudHJ5KTsKPiArCQkJcHJfZXJyKCJmYWlsIG9uIGFsbG9jIG5ldyBl bnRyaWVzIHRlc3RcbiIpOwo+ICsJCQlnb3RvIHBwYXRfcHV0Owo+ICsJCX0KPiArCQkqcCA9IGVu dHJ5Owo+ICsJfQo+ICsKPiArCS8qIGNhc2UgMjogcGVyZmVjdCBtYXRjaCAqLwo+ICsJcmV0ID0g cGVyZm9ybV9wZXJmZWN0X21hdGNoX3Rlc3QocHBhdCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJf ZXJyKCJmYWlsIG9uIHBlcmZlY3QgbWF0Y2ggdGVzdFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwkvKiBjYXNlIDM6IG5lZ2F0aXZlIHRlc3QgMSwgc3VwcG9zZSBQUEFUIHRhYmxl IGlzIGZ1bGwgbm93ICovCj4gKwlyZXQgPSBwZXJmb3JtX25lZ2F0aXZlX3Rlc3QocHBhdCk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJmYWlsIG9uIG5lZ2F0aXZlIHRlc3QgMVxuIik7Cj4g KwkJZ290byBwcGF0X3B1dDsKPiArCX0KPiArCj4gKwkvKiBjYXNlIDQ6IHBhcnRpYWwgbWF0Y2gg Ki8KPiArCXJldCA9IHBlcmZvcm1fcGFydGlhbF9tYXRjaF90ZXN0KHBwYXQpOwo+ICsJaWYgKHJl dCkgewo+ICsJCXByX2VycigiZmFpbCBvbiBwYXJ0aWFsIG1hdGNoIHRlc3RcbiIpOwo+ICsJCWdv dG8gcHBhdF9wdXQ7Cj4gKwl9Cj4gKwo+ICsJLyogY2FzZSAzOiBuZWdhdGl2ZSB0ZXN0IDIsIHN1 cHBvc2UgUFBBVCB0YWJsZSBpcyBzdGlsbCBmdWxsIG5vdyAqLwo+ICsJcmV0ID0gcGVyZm9ybV9u ZWdhdGl2ZV90ZXN0KHBwYXQpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiZmFpbCBvbiBu ZWdhdGl2ZSB0ZXN0IDJcbiIpOwo+ICsJCWdvdG8gcHBhdF9wdXQ7Cj4gKwl9Cj4gKwo+ICsJLyog Y2FzZSA1OiByZS1hbGxvYyB0ZXN0LCBtYWtlIGEgaG9sZSBhbmQgaXQgc2hvdWxkIHdvcmsgYWdh aW4gKi8KPiArCWlmIChlbnRyaWVzKSB7CgplbnRyaWVzIHNob3VsZCBub3QgYmUgTlVMTCBoZXJl LCB3ZSdyZSBza2lwcGluZyBmdW5jdGlvbiBrcmVhbGxvYwpmYWlscy4gU28gY2F1c2VzIGV4dHJh IGluZGVudC4KCj4gKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewo+ICsJCQllbnRyeSA9 IGVudHJpZXNbaV07Cj4gKwo+ICsJCQlyZXQgPSBwdXRfYW5kX2NoZWNrX2VudHJ5KGVudHJ5KTsK PiArCQkJZW50cmllc1tpXSA9IE5VTEw7Cj4gKwkJCWlmIChyZXQpIHsKPiArCQkJCXByX2Vycigi ZmFpbCBvbiByZS1hbGxvYyB0ZXN0XG4iKTsKPiArCQkJCWdvdG8gcHBhdF9wdXQ7Cj4gKwkJCX0K PiArCj4gKwkJCWVudHJ5ID0gZ2VuZXJhdGVfYW5kX2NoZWNrX25ld192YWx1ZShwcGF0KTsKPiAr CQkJaWYgKElTX0VSUihlbnRyeSkpIHsKPiArCQkJCXJldCA9IFBUUl9FUlIoZW50cnkpOwo+ICsJ CQkJcHJfZXJyKCJmYWlsIG9uIHJlLWFsbG9jIHRlc3RcbiIpOwo+ICsJCQkJZ290byBwcGF0X3B1 dDsKPiArCQkJfQo+ICsJCQllbnRyaWVzW2ldID0gZW50cnk7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr cHBhdF9wdXQ6Cj4gKwlpZiAoZW50cmllcykgewoKVGhpcyBleHRyYSBpbmRlbnQgY2FuIGdvIHdo ZW4gd2Ugd2UgaGF2ZSBnb3RvIG91dDsgYXQgdGhlIGFsbG9jYXRpb24KZXJyb3IgZm9yIGVudHJp ZXMuCgo+ICsJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKPiArCQkJaWYgKElTX0VSUihl bnRyaWVzW2ldKSB8fCAhZW50cmllc1tpXSkKCklTX0VSUl9PUl9OVUxMCgo+ICsJCQkJY29udGlu dWU7Cj4gKwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJaW50ZWxfcHBhdF9wdXQoZW50cnkpOwo+ICsJ CQllbHNlCj4gKwkJCQlyZXQgPSBwdXRfYW5kX2NoZWNrX2VudHJ5KGVudHJpZXNbaV0pOwo+ICsJ CX0KPiArCQlrZnJlZShlbnRyaWVzKTsKPiArCQllbnRyaWVzID0gTlVMTDsKPiArCX0KCm91dDoK Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIGlndF9wcGF0X2No ZWNrKGk5MTUpOwo+ICt9Cj4gKwoKV2l0aCB0aGUgbW9kaWZpY2F0aW9ucyB3ZSBzaG91bGQgYmUg dmVyeSBtdWNoIHJlYWR5IHdpdGggdGhlIGtzZWxmdGVzdCwKYXMgSSBzZWUgaXQuCgpSZWdhcmRz LCBKb29uYXMKLS0gCkpvb25hcyBMYWh0aW5lbgpPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRl cgpJbnRlbCBDb3Jwb3JhdGlvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK