From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH 1/4] drm/i915: Add support for DP link training compliance Date: Mon, 23 Jan 2017 15:54:01 -0800 Message-ID: <20170123235401.GA16212@intel.com> References: <1484893418-11309-1-git-send-email-manasi.d.navare@intel.com> <1484893418-11309-2-git-send-email-manasi.d.navare@intel.com> <87bmv1db6o.fsf@intel.com> <20170123205007.GB12226@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Description: Re: [Intel-gfx] [PATCH 1/4] drm/i915: Add support for DP link training compliance Content-Disposition: inline In-Reply-To: <20170123205007.GB12226@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKYW4gMjMsIDIwMTcgYXQgMTI6NTA6MDdQTSAtMDgwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBUaGFua3MgSmFuaSBmb3IgcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIGZvciB5b3Vy IGZlZWRiYWNrLgo+IEl0cyB2ZXJ5IHVzZWZ1bCBmZWVkYmFjayBhbmQgYmVsb3cgYXJlIHNvbWUg b2YgbXkgY29tbWVudHM6Cj4gCj4gT24gRnJpLCBKYW4gMjAsIDIwMTcgYXQgMDU6MDU6MDNQTSAr MDIwMCwgSmFuaSBOaWt1bGEgd3JvdGU6Cj4gPiBPbiBGcmksIDIwIEphbiAyMDE3LCBNYW5hc2kg TmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPiB3cm90ZToKPiA+ID4gVGhpcyBwYXRj aCBhZGRzIHN1cHBvcnQgdG8gaGFuZGxlIGF1dG9tYXRlZCBEUCBjb21wbGlhbmNlCj4gPiA+IGxp bmsgdHJhaW5pbmcgdGVzdCByZXF1ZXN0cy4gVGhpcyBwYXRjaCBoYXMgYmVlbiB0ZXN0ZWQgd2l0 aAo+ID4gPiBVbmlncmFmIERQUi0xMjAgRFAgQ29tcGxpYW5jZSBkZXZpY2UgZm9yIHRlc3Rpbmcg TGluawo+ID4gPiBUcmFpbmluZyBDb21wbGlhbmNlLgo+ID4gPiBBZnRlciB3ZSBnZXQgYSBzaG9y dCBwdWxzZSBDb21wbGlhbmNlIHRlc3QgcmVxdWVzdCwgdGVzdAo+ID4gPiByZXF1ZXN0IHZhbHVl cyBhcmUgcmVhZCBhbmQgaG90cGx1ZyB1ZXZlbnQgaXMgc2VudCBpbiBvcmRlcgo+ID4gPiB0byB0 cmlnZ2VyIGFub3RoZXIgbW9kZXNldCBkdXJpbmcgd2hpY2ggdGhlIHBpcGUgaXMgY29uZmlndXJl ZAo+ID4gPiBhbmQgbGluayBpcyByZXRyYWluZWQgYW5kIGVuYWJsZWQgZm9yIGxpbmsgcGFyYW1l dGVycyByZXF1ZXN0ZWQKPiA+ID4gYnkgdGhlIHRlc3QuCj4gPiA+Cj4gPiA+IHYzOgo+ID4gPiAq IFZhbGlkYXRlIHRoZSB0ZXN0IGxpbmsgcmF0ZSBhbmQgbGFuZSBjb3VudCBhcyBzb29uIGFzCj4g PiA+IHRoZSBlcnF1ZXN0IGNvbWVzIChKYW5pIE5pa3VsYSkKPiA+ID4gdjI6Cj4gPiA+ICogVmFs aWRhdGUgdGhlIHRlc3QgbGFuZSBjb3VudCBiZWZvcmUgdXNpbmcgaXQgaW4KPiA+ID4gaW50ZWxf ZHBfY29tcHV0ZV9jb25maWcgKEphbmkgTmlrdWxhKQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBNYW5h c2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+ID4gPiBDYzogSmFuaSBOaWt1 bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgo+ID4gPiBDYzogVmlsbGUgU3lyamFsYSA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHAuYyAgfCA2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCB8ICAyICsrCj4g PiA+ICAyIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4g PiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPiBpbmRleCBlODBkNjIwLi4zZTc2 YjYzIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ID4gQEAgLTE2MTMs NiArMTYxMyw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfZHBfY29tcHV0ZV9icHAoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwKPiA+ID4gIAkvKiBDb252ZW5pZW50bHksIHRoZSBsaW5rIEJXIGNvbnN0 YW50cyBiZWNvbWUgaW5kaWNlcyB3aXRoIGEgc2hpZnQuLi4qLwo+ID4gPiAgCWludCBtaW5fY2xv Y2sgPSAwOwo+ID4gPiAgCWludCBtYXhfY2xvY2s7Cj4gPiA+ICsJaW50IGxpbmtfcmF0ZV9pbmRl eDsKPiA+ID4gIAlpbnQgYnBwLCBtb2RlX3JhdGU7Cj4gPiA+ICAJaW50IGxpbmtfYXZhaWwsIGxp bmtfY2xvY2s7Cj4gPiA+ICAJaW50IGNvbW1vbl9yYXRlc1tEUF9NQVhfU1VQUE9SVEVEX1JBVEVT XSA9IHt9Owo+ID4gPiBAQCAtMTY1NCw2ICsxNjU1LDE1IEBAIHN0YXRpYyBpbnQgaW50ZWxfZHBf Y29tcHV0ZV9icHAoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ID4gIAlpZiAoYWRqdXN0 ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTENMSykKPiA+ID4gIAkJcmV0dXJuIGZh bHNlOwo+ID4gPiAgCj4gPiA+ICsJLyogVXNlIHZhbHVlcyByZXF1ZXN0ZWQgYnkgQ29tcGxpYW5j ZSBUZXN0IFJlcXVlc3QgKi8KPiA+ID4gKwlpZiAoaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF90 eXBlID09IERQX1RFU1RfTElOS19UUkFJTklORykgewo+ID4gPiArCQlsaW5rX3JhdGVfaW5kZXgg PSBpbnRlbF9kcF9saW5rX3JhdGVfaW5kZXgoaW50ZWxfZHAsCj4gPiA+ICsJCQkJCQkJICAgY29t bW9uX3JhdGVzLAo+ID4gPiArCQkJCQkJCSAgIGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShp bnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X2xpbmtfcmF0ZSkpOwo+ID4gCj4gPiBZb3Ugc2hvdWxk IHByb2JhYmx5IHN0b3JlIHRoZSBsaW5rICpyYXRlKiBpbnN0ZWFkIG9mIHRoZSBsaW5rIHJhdGUK PiA+ICpjb2RlKiB0byBpbnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X2xpbmtfcmF0ZSBpbgo+ID4g aW50ZWxfZHBfYXV0b3Rlc3RfbGlua190cmFpbmluZygpLgo+ID4gCj4gCj4gSSB0b3RhbGx5IGFn cmVlIGFuZCB0aGlzIGlzIGhvdyBpdCBpcyBhZGRyZXNzZWQgaW4gdGhlIG5ldyByZXZpc2lvbi4K PiBJIGhhdmUgZGVjbGFyZWQgYSBsb2NhbCB2YXJpYWJsZSB0ZXN0X2xpbmtfYncgdGhhdCBzdG9y ZXMgdGhlIEJXIGNvZGUKPiByZWFkIGZyb20gdGhlIERQQ0QgdGVzdCByZWdpc3RlcnMuIFRoaXMg QlcgY29kZSBpcyB0aGVuIHZhbGlkYXRlZCB0byBzZWUKPiB0aGF0IGl0IGNvcnJlc3BvbmRzIHRv IHRoZSB2YWxpZCBsaW5rIHJhdGUgdmFsdWVzLiBJZiBpdCBpcyBpbnZhbGlkIHRoZW4gSSByZXR1 cm4KPiBhIFRFU1RfTkFLIGFuZCBpZiBpdCBpcyB2YWxpZCB0aGVuIEkgY29udmVydCB0aGlzIEJX IGNvZGUgdG8gbGlua19yYXRlCj4gYW5kIHN0b3JlIHRoZSBsaW5rX3JhdGUgaW4gaW50ZWxfZHAt PmNvbXBsaWFuY2UudGVzdF9saW5rX3JhdGUuCj4gCj4gPiA+ICsJCWlmIChsaW5rX3JhdGVfaW5k ZXggPj0gMCkKPiA+ID4gKwkJCW1pbl9jbG9jayA9IG1heF9jbG9jayA9IGxpbmtfcmF0ZV9pbmRl eDsKPiA+ID4gKwkJbWluX2xhbmVfY291bnQgPSBtYXhfbGFuZV9jb3VudCA9IGludGVsX2RwLT5j b21wbGlhbmNlLnRlc3RfbGFuZV9jb3VudDsKPiA+ID4gKwl9Cj4gPiA+ICAJRFJNX0RFQlVHX0tN UygiRFAgbGluayBjb21wdXRhdGlvbiB3aXRoIG1heCBsYW5lIGNvdW50ICVpICIKPiA+ID4gIAkJ ICAgICAgIm1heCBidyAlZCBwaXhlbCBjbG9jayAlaUtIelxuIiwKPiA+ID4gIAkJICAgICAgbWF4 X2xhbmVfY291bnQsIGNvbW1vbl9yYXRlc1ttYXhfY2xvY2tdLAo+ID4gPiBAQCAtMzkyMCw3ICsz OTMwLDQyIEBAIGludCBpbnRlbF9kcF9zaW5rX2NyYyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LCB1OCAqY3JjKQo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgdWludDhfdCBpbnRlbF9kcF9hdXRvdGVz dF9saW5rX3RyYWluaW5nKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+ICB7Cj4gPiA+ IC0JdWludDhfdCB0ZXN0X3Jlc3VsdCA9IERQX1RFU1RfQUNLOwo+ID4gPiArCXVpbnQ4X3QgdGVz dF9yZXN1bHQgPSBEUF9URVNUX05BSzsKPiA+ID4gKwlpbnQgc3RhdHVzID0gMDsKPiA+ID4gKwlp bnQgbWluX2xhbmVfY291bnQgPSAxOwo+ID4gPiArCWludCBjb21tb25fcmF0ZXNbRFBfTUFYX1NV UFBPUlRFRF9SQVRFU10gPSB7fTsKPiA+ID4gKwlpbnQgbGlua19yYXRlX2luZGV4Owo+ID4gPiAr CS8qIChEUCBDVFMgMS4yKQo+ID4gPiArCSAqIDQuMy4xLjExCj4gPiA+ICsJICovCj4gPiA+ICsJ LyogUmVhZCB0aGUgVEVTVF9MQU5FX0NPVU5UIGFuZCBURVNUX0xJTktfUlRBRSBmaWVsZHMgKERQ IENUUyAzLjEuNCkgKi8KPiA+ID4gKwlzdGF0dXMgPSBkcm1fZHBfZHBjZF9yZWFkYigmaW50ZWxf ZHAtPmF1eCwgRFBfVEVTVF9MQU5FX0NPVU5ULAo+ID4gPiArCQkJCSAgJmludGVsX2RwLT5jb21w bGlhbmNlLnRlc3RfbGFuZV9jb3VudCk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoc3RhdHVzIDw9IDAp IHsKPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygiTGFuZSBjb3VudCByZWFkIGZhaWxlZFxuIik7Cj4g PiA+ICsJCXJldHVybiAwOwo+ID4gCj4gPiBTbyBpZiB5b3UgZmFpbCB0byByZWFkIHRoZSBsYW5l IGNvdW50LCB5b3UgcmV0dXJuIDAsIHdyaXRlIHRoYXQgdG8KPiA+IFRFU1RfUkVTUE9OU0UsIHdo aWNoIGlzIHN1cHBvc2VkIHRvIGhhdmUgbm8gZWZmZWN0IG9uIFRFU1RfUkVRIHN0YXRlIHBlcgo+ ID4gdGhlIHNwZWMsIGkuZS4gd3JpdGluZyAwIGlzIHVzZWxlc3MuIGludGVsX2RwLT5jb21wbGlh bmNlLnRlc3RfdHlwZSBpcwo+ID4gc2V0IGFueXdheSwgd2hpY2ggd2lsbCB0cnkgdG8gdXNlIHRo ZSAoc3RhbGUpIGxhbmUgY291bnQgYW5kIGxpbmsgcmF0ZQo+ID4gdmFsdWVzLgo+ID4gCj4gCj4g SSBhZ3JlZSB0aGF0IHdyaXRpbmcgYSAwIHRvIHRlc3RfcmVzdWx0IGhhcyBubyBlZmZlY3QgdG8g dGhlIHRlc3QgcmVzcG9uc2UgYW5kCj4gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZiB1c2luZyBz dGFsZSB2YWx1ZXMgb2YgbGFuZSBjb3VudCBhbmQgbGluayByYXRlLgo+IFNvIG5vdyBpbiB0aGUg bmV3IHJldmlzaW9uLCBJIGFtIHJldHVybmluZyBhIFRFU1RfTkFLIGluIGNhc2Ugb2YgYm90aCBy ZWFkIGZhaWx1cmVzCj4gYXMgd2VsbCBhcyB0aGUgaW52YWxpZCB2YWx1ZXMuCj4gQXMgcGVyIHRo ZSBuZXcgcGF0Y2ggeW91IGhhdmUgc3VibWl0dGVkLCBvbmNlIGludGVsX2RwX2hhbmRsZV90ZXN0 X3JlcXVlc3QoKSByZWNpZXZlcwo+IGEgVEVTVF9OQUsgaXQgc2hvdWxkIG5vdCBzZXQgdGhlIHRl c3RfdHlwZSBhbmQgaXQgd2lsbCBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5Cj4gb2YgdXNpbmcg c3RhbGUgdmFsdWVzIG9mIGxpbmsgcmF0ZSBhbmQgbGFuZSBjb3VudC4KPiAKPiAKPiA+ID4gKwl9 Cj4gPiA+ICsJaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9sYW5lX2NvdW50ICY9IERQX01BWF9M QU5FX0NPVU5UX01BU0s7Cj4gPiA+ICsJLyogVmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBsYW5lIGNv dW50ICovCj4gPiA+ICsJaWYgKGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfbGFuZV9jb3VudCA8 IG1pbl9sYW5lX2NvdW50IHx8Cj4gPiA+ICsJICAgIGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3Rf bGFuZV9jb3VudCA+IGludGVsX2RwLT5tYXhfc2lua19sYW5lX2NvdW50KQo+ID4gPiArCQlyZXR1 cm4gdGVzdF9yZXN1bHQ7Cj4gPiAKPiA+IEJ1dCBpZiB0aGUgbGFuZSBjb3VudCBpcyBvdXQgb2Yg Ym91bmRzLCB5b3UgcmV0dXJuIE5BSyBhbmQgd3JpdGUgdGhhdCB0bwo+ID4gVEVTVF9SRVNQT05T RSwgKmJ1dCogc2V0IGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSBhbmQKPiA+IGludGVs X2RwLT5jb21wbGlhbmNlLnRlc3RfbGFuZV9jb3VudCBhbnl3YXksIGFuZCB3aWxsIHRyeSB0byB1 c2UgdGhlCj4gPiB2YWx1ZXMgbGF0ZXIgb24gYW55d2F5Lgo+ID4gCj4gCj4gVGhpcyBoYXMgYmVl biBhZGRyZXNzZWQgaW4gdGhlIG5ldyByZXZpc2lvbiBieSBzdG9yaW5nIHRoZSBsYW5lIGNvdW50 IHJlYWQKPiBmcm9tIERQQ0QgdGVzdCByZWdpc3RlcnMgZmlyc3QgaW50byBhIGxvY2FsIHRlc3Rf bGFuZV9jb3VudCB2YXJpYWJsZS4gVGhpcwo+IHZhbHVlcyBpcyB0aGVuIHZhbGlkYXRlZCBhbmQg bWFkZSBzdXJlIGl0IGlzIG5vdCBvdXQgb2YgYm91bmRzLiBJZiBpdCBpcyBpbnZhbGlkLAo+IEkg cmV0dXJuIGEgVEVTVF9OQUsgc28gdGVzdF90eXBlIHdpbGwgbm90IGJlIHNldCBhbmQgdGhpcyB2 YWx1ZXMgd2lsbCBub3QgYmUgd3JpdHRlbiB0bwo+IGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3Rf bGFuZV9jb3VudC4gSWYgdGhpcyB2YWx1ZSBpcyB3aXRoaW4gYm91bmRzLCBvbmx5IHRoZW4KPiBJ IGdvIGFoZWFkIGFuZCBwb3B1bGF0ZSB0aGUgaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9sYW5l X2NvdW50IGZpZWxkLgo+IAo+IAo+ID4gPiArCj4gPiA+ICsJc3RhdHVzID0gZHJtX2RwX2RwY2Rf cmVhZGIoJmludGVsX2RwLT5hdXgsIERQX1RFU1RfTElOS19SQVRFLAo+ID4gPiArCQkJCSAgICZp bnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X2xpbmtfcmF0ZSk7Cj4gPiA+ICsJaWYgKHN0YXR1cyA8 PSAwKSB7Cj4gPiA+ICsJCURSTV9ERUJVR19LTVMoIkxpbmsgUmF0ZSByZWFkIGZhaWxlZFxuIik7 Cj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCX0KPiA+ID4gKwkvKiBWYWxpZGF0ZSB0aGUgcmVx dWVzdGVkIGxpbmsgcmF0ZSAqLwo+ID4gPiArCWxpbmtfcmF0ZV9pbmRleCA9IGludGVsX2RwX2xp bmtfcmF0ZV9pbmRleChpbnRlbF9kcCwKPiA+ID4gKwkJCQkJCSAgIGNvbW1vbl9yYXRlcywKPiA+ ID4gKwkJCQkJCSAgIGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShpbnRlbF9kcC0+Y29tcGxp YW5jZS50ZXN0X2xpbmtfcmF0ZSkpOwo+ID4gPiArCWlmIChsaW5rX3JhdGVfaW5kZXggPCAwKQo+ ID4gPiArCQlyZXR1cm4gdGVzdF9yZXN1bHQ7Cj4gPiAKPiA+IFNhbWUgYXMgYWJvdmUgZm9yIGxh bmUgY291bnQsIGluIGJvdGggZXJyb3Igc2NlbmFyaW9zLgo+ID4gCj4gPiBZb3Ugc2hvdWxkIHBy b2JhYmx5IHJlYWQgYm90aCBsYW5lIGNvdW50IGFuZCBsaW5rIHJhdGUgdG8gbG9jYWwKPiA+IHZh cmlhYmxlcyBmaXJzdCwgYmFpbCBvdXQgb24gcmVhZCBmYWlsdXJlcywgY2hlY2sgdGhlIHZhbHVl cywgYmFpbCBvdXQKPiA+IG9uIGludmFsaWQgdmFsdWVzLCB0aGVuIHNldCB0aGUgdmFsdWVzIGlu IGludGVsX2RwLT5jb21wbGlhbmNlLgo+ID4KPiAKPiBZZXMgdGhpcyBpcyBleGFjdGx5IHdoYXQg dGhlIG5ldyByZXZpc2lvbiBkb2VzLgo+CgpUYWtpbmcgb25lIG1vcmUgbG9vayBhdCBpdCwgSSB0 aGluayBJIHNob3VsZCBkZWZlciBwb3B1bGF0aW5nIGNvbXBsaWFuY2UgdGVzdCB2YWx1ZXMKdW50 aWwgYWxsIHRoZSB2YWxpZGF0aW5nIGlzIGRvbmUuIFNvIEkgY2FuIG1vdmUgc2V0dGluZyB0aGUg Y29tcGxpYW5jZS50ZXN0X2xhbmVfY291bnQKYW5kIGNvbXBsaWFuY2UudGVzdF9saW5rX3JhdGUg dG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24ganVzdCBiZWZvcmUgcmV0dXJuaW5nIGEgVEVTVF9B Q0suClRoZSByZWFzb24gdGhhdCB0aGlzIHdhcyBub3QgYWRkcmVzc2VkIGVhcmxpZXIgd2FzIGJl Y2F1c2UgSSBhc3N1bWVkIHRoYXQgd2Ugd2VyZSBpbnZhbGlkYXRpbmcKdGhlIGNvbXBsaWFuY2Ug c3RhdGUgb24gTkFLcyBhbnl3YXkgYnkgbm90IHNldHRpbmcgdGVzdF90eXBlLiBCdXQgdG8gYmUg b24gdGhlIHNhZmUgc2lkZQpJIHdpbGwgbW92ZSBhbGwgdGhlIGNvbXBsaWFuY2UgdGVzdCBkYXRh IHNldHRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCgpUaGlzIG1lYW5zIGV2ZW4gZm9y IHZpZGVvIHBhdHRlcm4gdGVzdCBoYW5kbGVyIEkgc2hvdWxkIHJlYWQgYWxsIHRoZSB2aWRlbyBw YXR0ZXJuIGRhdGEKaW50byBsb2NhbCB2YXJpYWJsZXMgZmlyc3QgYW5kIHRoZW4gc2V0IHRoZSBj b21wbGlhbmNlIHZpZGVvIHBhdHRlcm4gdGVzdCBkYXRhIHZhbHVlcyBvbmx5CmF0IHRoZSBlbmQg b2YgdGhlIGZ1bmN0aW9uIGp1c3QgYmVmb3JlIHJldHVybmluZyBhIFRFU1QgQUNLLgoKUmVnYXJk cwpNYW5hc2kKCiAgCj4gPiBpbnRlbF9kcF9oYW5kbGVfdGVzdF9yZXF1ZXN0KCkgc2hvdWxkIHBy b2JhYmx5IGJlIGZpeGVkIHRvIG5vdCBzZXQKPiA+IGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3Rf dHlwZSBvbiBlcnJvcnMuIFByZXN1bWFibHkgaXQgc2hvdWxkIG5vdCB3cml0ZQo+ID4gemVybyB2 YWx1ZXMgdG8gVEVTVF9SRVNQT05TRSBiZWNhdXNlIGl0IHNob3VsZCBoYXZlIG5vIGVmZmVjdCBh bnl3YXk7Cj4gPiBidXQgSSdtIG5vdCBzdXJlIGlmIHdlIHNob3VsZCByZXR1cm4gMCBmcm9tIHRo ZSBhdXRvdGVzdCBmdW5jdGlvbnMKPiA+IGFueXdheS4KPiA+Cj4gCj4gWWVzLCB3ZSBzaG91bGQg bm90IHJldHVybiAwIGZyb20gdGhlIGF1dG90ZXN0IGZ1bmN0aW9ucy4gU28gSSBhbSBvbmx5IHJl dHVybmluZwo+IGVpdGhlciBhIE5BSyBvbiByZWFkIGZhaWx1cmVzIG9yIGludmFsaWQgdmFsdWVz IG9yIGEgVEVTVF9BQ0sgaW4gY2FzZSBvZiBzdWNjZXNzLgo+IAo+ICAKPiA+ID4gKwo+ID4gPiAr CXRlc3RfcmVzdWx0ID0gRFBfVEVTVF9BQ0s7Cj4gPiA+ICAJcmV0dXJuIHRlc3RfcmVzdWx0Owo+ ID4gCj4gPiBQbGVhc2UgdGVsbCBtZSB3aGF0IHB1cnBvc2UgZG9lcyB0aGUgdGVzdF9yZXN1bHQg dmFyaWFibGUgaGF2ZSBpbiB0aGlzCj4gPiBmdW5jdGlvbi4gSSB0aG91Z2h0IEkgc2FpZCB5b3Ug Y291bGQgZ2V0IHJpZCBvZiB0aGUgdmFyaWFibGUuCj4gPiAKPiA+IEJSLAo+ID4gSmFuaS4KPiA+ Cj4gCj4gVGhlIHdob2xlIHB1cnBvc2Ugb2YgYWRkaW5nIGEgdmFyaWFibGUgbmFtZWQgdGVzdF9y ZXN1bHQgZm9yIHJlYWRhYmlsaXR5Lgo+IEkgdGhpbmsgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmlu ZyBOQUsgYW5kIEFDSyBpbiBkaWZmZXJudCBzY2VuYXJpb3MsIGl0cyBtb3JlCj4gcmVhZGFibGUg dG8gcmV0dXJuIHRlc3RfcmVzdWx0IGluc3RlYWQuIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0 byBOQUsgb3IgQUNLCj4gYXMgcGVyIHRoZSBmYWlsdXJlcyBvciBzdWNjZXNzLgo+IFRoYXQgaXMg dGhlIHJlYXNvbiB3aHkgSSBoYXZlIHN0aWxsIGtlcHQgdGhpcyB2YXJpYWJsZS4KPiAKPiBSZWdh cmRzCj4gTWFuYXNpCj4gCj4gCj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gQEAgLTQxMzUsOSArNDE4 MCw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3Qoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiA+ID4gIAlpZiAoIWludGVsX2RwLT5sYW5lX2NvdW50KQo+ID4g PiAgCQlyZXR1cm47Cj4gPiA+ICAKPiA+ID4gLQkvKiBpZiBsaW5rIHRyYWluaW5nIGlzIHJlcXVl c3RlZCB3ZSBzaG91bGQgcGVyZm9ybSBpdCBhbHdheXMgKi8KPiA+ID4gLQlpZiAoKGludGVsX2Rw LT5jb21wbGlhbmNlLnRlc3RfdHlwZSA9PSBEUF9URVNUX0xJTktfVFJBSU5JTkcpIHx8Cj4gPiA+ IC0JICAgICghZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5l X2NvdW50KSkpIHsKPiA+ID4gKwkvKiBSZXRyYWluIGlmIENoYW5uZWwgRVEgb3IgQ1Igbm90IG9r ICovCj4gPiA+ICsJaWYgKCFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaW50ZWxf ZHAtPmxhbmVfY291bnQpKSB7Cj4gPiA+ICAJCURSTV9ERUJVR19LTVMoIiVzOiBjaGFubmVsIEVR IG5vdCBvaywgcmV0cmFpbmluZ1xuIiwKPiA+ID4gIAkJCSAgICAgIGludGVsX2VuY29kZXItPmJh c2UubmFtZSk7Cj4gPiA+ICAKPiA+ID4gQEAgLTQxNjIsNiArNDIwNiw3IEBAIHN0YXRpYyB2b2lk IGludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiA+ID4gIGludGVsX2RwX3Nob3J0X3B1bHNlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4g PiA+ICB7Cj4gPiA+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2Rldihp bnRlbF9kcCk7Cj4gPiA+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSAm ZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlOwo+ID4gPiAgCXU4IHNpbmtfaXJxX3ZlY3Rv ciA9IDA7Cj4gPiA+ICAJdTggb2xkX3NpbmtfY291bnQgPSBpbnRlbF9kcC0+c2lua19jb3VudDsK PiA+ID4gIAlib29sIHJldDsKPiA+ID4gQEAgLTQxOTUsNyArNDI0MCw3IEBAIHN0YXRpYyB2b2lk IGludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiA+ID4gIAkJCQkgICBzaW5rX2lycV92ZWN0b3IpOwo+ID4gPiAgCj4gPiA+ICAJCWlmIChzaW5r X2lycV92ZWN0b3IgJiBEUF9BVVRPTUFURURfVEVTVF9SRVFVRVNUKQo+ID4gPiAtCQkJRFJNX0RF QlVHX0RSSVZFUigiVGVzdCByZXF1ZXN0IGluIHNob3J0IHB1bHNlIG5vdCBoYW5kbGVkXG4iKTsK PiA+ID4gKwkJCWludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3QoaW50ZWxfZHApOwo+ID4gPiAg CQlpZiAoc2lua19pcnFfdmVjdG9yICYgKERQX0NQX0lSUSB8IERQX1NJTktfU1BFQ0lGSUNfSVJR KSkKPiA+ID4gIAkJCURSTV9ERUJVR19EUklWRVIoIkNQIG9yIHNpbmsgc3BlY2lmaWMgaXJxIHVu aGFuZGxlZFxuIik7Cj4gPiA+ICAJfQo+ID4gPiBAQCAtNDIwMyw2ICs0MjQ4LDExIEBAIHN0YXRp YyB2b2lkIGludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiA+ID4gIAlkcm1fbW9kZXNldF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rp b25fbXV0ZXgsIE5VTEwpOwo+ID4gPiAgCWludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKGludGVs X2RwKTsKPiA+ID4gIAlkcm1fbW9kZXNldF91bmxvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVj dGlvbl9tdXRleCk7Cj4gPiA+ICsJaWYgKGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSA9 PSBEUF9URVNUX0xJTktfVFJBSU5JTkcpIHsKPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygiTGluayBU cmFpbmluZyBDb21wbGlhbmNlIFRlc3QgcmVxdWVzdGVkXG4iKTsKPiA+ID4gKwkJLyogU2VuZCBh IEhvdHBsdWcgVWV2ZW50IHRvIHVzZXJzcGFjZSB0byBzdGFydCBtb2Rlc2V0ICovCj4gPiA+ICsJ CWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoaW50ZWxfZW5jb2Rlci0+YmFzZS5kZXYpOwo+ ID4gPiArCX0KPiA+ID4gIAo+ID4gPiAgCXJldHVybiB0cnVlOwo+ID4gPiAgfQo+ID4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiBpbmRleCAwY2VjMDAxLi4xNTg2YTAyIDEwMDY0NAo+ ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiBAQCAtODk0LDYgKzg5NCw4IEBA IHN0cnVjdCBpbnRlbF9kcF9jb21wbGlhbmNlIHsKPiA+ID4gIAl1bnNpZ25lZCBsb25nIHRlc3Rf dHlwZTsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZHBfY29tcGxpYW5jZV9kYXRhIHRlc3RfZGF0YTsK PiA+ID4gIAlib29sIHRlc3RfYWN0aXZlOwo+ID4gPiArCXU4IHRlc3RfbGlua19yYXRlOwo+ID4g PiArCXU4IHRlc3RfbGFuZV9jb3VudDsKPiA+ID4gIH07Cj4gPiA+ICAKPiA+ID4gIHN0cnVjdCBp bnRlbF9kcCB7Cj4gPiAKPiA+IC0tIAo+ID4gSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNl IFRlY2hub2xvZ3kgQ2VudGVyCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=