From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/4] drm/i915: Enable asynchronous nuclear flips Date: Mon, 2 Feb 2015 10:36:05 +0100 Message-ID: <20150202093605.GO14009@phenom.ffwll.local> References: <1422663759-21589-1-git-send-email-matthew.d.roper@intel.com> <1422663759-21589-4-git-send-email-matthew.d.roper@intel.com> <20150131093028.GK14009@phenom.ffwll.local> <20150131200756.GA30483@mattrope.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 26D9989D87 for ; Mon, 2 Feb 2015 01:34:46 -0800 (PST) Received: by mail-wi0-f177.google.com with SMTP id r20so13859991wiv.4 for ; Mon, 02 Feb 2015 01:34:45 -0800 (PST) Content-Disposition: inline In-Reply-To: <20150131200756.GA30483@mattrope.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gU2F0LCBKYW4gMzEsIDIwMTUgYXQgMTI6MDc6NTZQTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBPbiBTYXQsIEphbiAzMSwgMjAxNSBhdCAxMDozMDoyOUFNICswMTAwLCBEYW5pZWwgVmV0 dGVyIHdyb3RlOgo+ID4gT24gRnJpLCBKYW4gMzAsIDIwMTUgYXQgMDQ6MjI6MzhQTSAtMDgwMCwg TWF0dCBSb3BlciB3cm90ZToKPiA+ID4gVGhlIGluaXRpYWwgaTkxNSBudWNsZWFyIHBhZ2VmbGlw IHN1cHBvcnQgcmVqZWN0ZWQgYXN5bmNocm9ub3VzIHVwZGF0ZXMuCj4gPiA+IEFsbG93IGFsbCB3 b3JrIGFmdGVyIHdlIHN3YXAgaW4gdGhlIG5ldyBzdGF0ZSBzdHJ1Y3R1cmVzIHRvIHJ1bgo+ID4g PiBhc3luY2hyb25vdXNseS4gIFdlIGFsc28gbmVlZCB0byBzdGFydCBzZW5kaW5nIGNvbXBsZXRp b24gZXZlbnRzIHRvCj4gPiA+IHVzZXJzcGFjZSBpZiB0aGV5IHdlcmUgcmVxdWVzdGVkLgo+ID4g PiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVs LmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAg ICB8ICAgMyArCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYyB8IDE2 MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oICAgIHwgICA4ICsrCj4gPiA+ICAzIGZpbGVzIGNoYW5nZWQs IDE1MCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+ID4gPiBpbmRleCA4ZmFkNzAyLi5jN2E1MjBhIDEwMDY0NAo+ID4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+ID4gQEAgLTE3NzcsNiArMTc3Nyw5IEBAIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2NydGMgKnBpcGVfdG9fY3J0 Y19tYXBwaW5nW0k5MTVfTUFYX1BJUEVTXTsKPiA+ID4gIAl3YWl0X3F1ZXVlX2hlYWRfdCBwZW5k aW5nX2ZsaXBfcXVldWU7Cj4gPiA+ICAKPiA+ID4gKwkvKiBDUlRDIG1hc2sgb2YgcGVuZGluZyBh dG9taWMgZmxpcHMgKi8KPiA+ID4gKwl1aW50MzJfdCBwZW5kaW5nX2F0b21pYzsKPiA+ID4gKwo+ ID4gPiAgI2lmZGVmIENPTkZJR19ERUJVR19GUwo+ID4gPiAgCXN0cnVjdCBpbnRlbF9waXBlX2Ny YyBwaXBlX2NyY1tJOTE1X01BWF9QSVBFU107Cj4gPiA+ICAjZW5kaWYKPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfYXRvbWljLmMKPiA+ID4gaW5kZXggMTlhOWRkNS4uNWRkNzg5NyAxMDA2NDQK PiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiA+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPiA+ID4gQEAgLTc2LDYgKzc2 LDggQEAgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4g PiAgCXN0YXRlLT5hbGxvd19tb2Rlc2V0ID0gZmFsc2U7Cj4gPiA+ICAJZm9yIChpID0gMDsgaSA8 IG5jcnRjczsgaSsrKSB7Cj4gPiA+ICAJCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50 ZWxfY3J0YyhzdGF0ZS0+Y3J0Y3NbaV0pOwo+ID4gPiArCQlpZiAoY3J0YykKPiA+ID4gKwkJCXN0 YXRlLT5jcnRjX3N0YXRlc1tpXS0+ZW5hYmxlID0gY3J0Yy0+YWN0aXZlOwo+ID4gPiAgCQlpZiAo Y3J0YyAmJiBjcnRjLT5waXBlICE9IG51Y2xlYXJfcGlwZSkKPiA+ID4gIAkJCW5vdF9udWNsZWFy ID0gdHJ1ZTsKPiA+ID4gIAl9Cj4gPiA+IEBAIC05Niw2ICs5OCw4NyBAQCBpbnQgaW50ZWxfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4g IAo+ID4gPiArLyoKPiA+ID4gKyAqIFdhaXQgdW50aWwgQ1JUQydzIGhhdmUgbm8gcGVuZGluZyBm bGlwLCB0aGVuIGF0b21pY2FsbHkgbWFyayB0aG9zZSBDUlRDJ3MKPiA+ID4gKyAqIGFzIGJ1c3ku Cj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyBpbnQgd2FpdF9mb3JfcGVuZGluZ19mbGlwKHVpbnQz Ml90IGNydGNfbWFzaywKPiA+ID4gKwkJCQkgc3RydWN0IGludGVsX3BlbmRpbmdfYXRvbWljICpj b21taXQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gY29tbWl0LT5kZXYtPmRldl9wcml2YXRlOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ ID4gKwlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlLmxvY2spOwo+ ID4gPiArCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9sb2NrZWQoZGV2X3ByaXYtPnBl bmRpbmdfZmxpcF9xdWV1ZSwKPiA+ID4gKwkJCQkJICAgICAgIShkZXZfcHJpdi0+cGVuZGluZ19h dG9taWMgJiBjcnRjX21hc2spKTsKPiA+ID4gKwlpZiAocmV0ID09IDApCj4gPiA+ICsJCWRldl9w cml2LT5wZW5kaW5nX2F0b21pYyB8PSBjcnRjX21hc2s7Cj4gPiA+ICsJc3Bpbl91bmxvY2tfaXJx KCZkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlLmxvY2spOwo+ID4gPiArCj4gPiA+ICsJcmV0 dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyogRmluaXNoIHBlbmRpbmcgZmxpcCBv cGVyYXRpb24gb24gc3BlY2lmaWVkIENSVEMncyAqLwo+ID4gPiArc3RhdGljIHZvaWQgZmxpcF9j b21wbGV0aW9uKHN0cnVjdCBpbnRlbF9wZW5kaW5nX2F0b21pYyAqY29tbWl0KQo+ID4gPiArewo+ ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbW1pdC0+ZGV2LT5k ZXZfcHJpdmF0ZTsKPiA+ID4gKwo+ID4gPiArCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5wZW5k aW5nX2ZsaXBfcXVldWUubG9jayk7Cj4gPiA+ICsJZGV2X3ByaXYtPnBlbmRpbmdfYXRvbWljICY9 IH5jb21taXQtPmNydGNfbWFzazsKPiA+ID4gKwl3YWtlX3VwX2FsbF9sb2NrZWQoJmRldl9wcml2 LT5wZW5kaW5nX2ZsaXBfcXVldWUpOwo+ID4gPiArCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYt PnBlbmRpbmdfZmxpcF9xdWV1ZS5sb2NrKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoKPiA+ ID4gKyAqIEZpbmlzaCBhbiBhdG9taWMgY29tbWl0LiAgVGhlIHdvcmsgaGVyZSBjYW4gYmUgcGVy Zm9ybWVkIGFzeW5jaHJvbm91c2x5Cj4gPiA+ICsgKiBpZiBkZXNpcmVkLiAgVGhlIG5ldyBzdGF0 ZSBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgdG8gdGhlIERSTSBvYmplY3RzCj4gPiA+ICsgKiBh bmQgbm8gbW9kZXNldCBsb2NrcyBhcmUgbmVlZGVkLgo+ID4gPiArICovCj4gPiA+ICtzdGF0aWMg dm9pZCBmaW5pc2hfYXRvbWljX2NvbW1pdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ ICt7Cj4gPiA+ICsJc3RydWN0IGludGVsX3BlbmRpbmdfYXRvbWljICpjb21taXQgPQo+ID4gPiAr CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGludGVsX3BlbmRpbmdfYXRvbWljLCB3b3JrKTsK PiA+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29tbWl0LT5kZXY7Cj4gPiA+ICsJc3Ry dWN0IGRybV9jcnRjICpjcnRjOwo+ID4gPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSA9IGNvbW1pdC0+c3RhdGU7Cj4gPiA+ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4g PiArCSAqIEZJWE1FOiAgVGhlIHByb3BlciBzZXF1ZW5jZSBoZXJlIHdpbGwgZXZlbnR1YWxseSBi ZToKPiA+ID4gKwkgKgo+ID4gPiArCSAqIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wcmVfcGxh bmVzKGRldiwgc3RhdGUpOwo+ID4gPiArCSAqIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFu ZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+ICsJICogZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3Bvc3Rf cGxhbmVzKGRldiwgc3RhdGUpOwo+ID4gPiArCSAqIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9y X3ZibGFua3MoZGV2LCBzdGF0ZSk7Cj4gPiA+ICsJICogZHJtX2F0b21pY19oZWxwZXJfY2xlYW51 cF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+ICsJICogZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0 YXRlKTsKPiA+ID4gKwkgKgo+ID4gPiArCSAqIG9uY2Ugd2UgaGF2ZSBmdWxsIGF0b21pYyBtb2Rl c2V0LiAgRm9yIG5vdywganVzdCBtYW51YWxseSB1cGRhdGUKPiA+ID4gKwkgKiBwbGFuZSBzdGF0 ZXMgdG8gYXZvaWQgY2xvYmJlcmluZyBnb29kIHN0YXRlcyB3aXRoIGR1bW15IHN0YXRlcwo+ID4g PiArCSAqIHdoaWxlIG51Y2xlYXIgcGFnZWZsaXBwaW5nLgo+ID4gPiArCSAqLwo+ID4gPiArCWRy bV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0 b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIHN0YXRlKTsKPiA+ID4gKwo+ID4gPiAr CS8qIFNlbmQgQ1JUQyBjb21wbGV0aW9uIGV2ZW50cy4gKi8KPiA+ID4gKwlmb3IgKGkgPSAwOyBp IDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsgaSsrKSB7Cj4gPiA+ICsJCWNydGMgPSBzdGF0 ZS0+Y3J0Y3NbaV07Cj4gPiA+ICsJCWlmIChjcnRjICYmIGNydGMtPnN0YXRlLT5ldmVudCkgewo+ ID4gPiArCQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKPiA+ID4gKwkJCWRybV9z ZW5kX3ZibGFua19ldmVudChkZXYsIHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGUsCj4gPiA+ICsJ CQkJCSAgICAgIGNydGMtPnN0YXRlLT5ldmVudCk7Cj4gPiA+ICsJCQlzcGluX3VubG9ja19pcnEo JmRldi0+ZXZlbnRfbG9jayk7Cj4gPiA+ICsJCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ ID4gPiArCQl9Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfY2xl YW51cF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+ICsJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0 YXRlKTsKPiA+ID4gKwo+ID4gPiArCWZsaXBfY29tcGxldGlvbihjb21taXQpOwo+ID4gPiArCWtm cmVlKGNvbW1pdCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gIC8qKgo+ID4gPiAgICogaW50ZWxf YXRvbWljX2NvbW1pdCAtIGNvbW1pdCB2YWxpZGF0ZWQgc3RhdGUgb2JqZWN0Cj4gPiA+ICAgKiBA ZGV2OiBEUk0gZGV2aWNlCj4gPiA+IEBAIC0xMTYsMzQgKzE5OSw0OCBAQCBpbnQgaW50ZWxfYXRv bWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gPiAgCQkJc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAgCQkJYm9vbCBhc3luYykKPiA+ID4gIHsKPiA+ID4g KwlzdHJ1Y3QgaW50ZWxfcGVuZGluZ19hdG9taWMgKmNvbW1pdDsKPiA+ID4gIAlpbnQgcmV0Owo+ ID4gPiAgCWludCBpOwo+ID4gPiAgCj4gPiA+IC0JaWYgKGFzeW5jKSB7Cj4gPiA+IC0JCURSTV9E RUJVR19LTVMoImk5MTUgZG9lcyBub3QgeWV0IHN1cHBvcnQgYXN5bmMgY29tbWl0XG4iKTsKPiA+ ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+IC0JfQo+ID4gPiAtCj4gPiA+ICAJcmV0ID0gZHJt X2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+ICAJaWYgKHJl dCkKPiA+ID4gIAkJcmV0dXJuIHJldDsKPiA+ID4gIAo+ID4gPiAtCS8qIFBvaW50IG9mIG5vIHJl dHVybiAqLwo+ID4gPiArCWNvbW1pdCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21taXQpLCBHRlBfS0VS TkVMKTsKPiA+ID4gKwlpZiAoIWNvbW1pdCkKPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ ICsKPiA+ID4gKwljb21taXQtPmRldiA9IGRldjsKPiA+ID4gKwljb21taXQtPnN0YXRlID0gc3Rh dGU7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tb2RlX2NvbmZpZy5udW1f Y3J0YzsgaSsrKQo+ID4gPiArCQlpZiAoc3RhdGUtPmNydGNzW2ldKQo+ID4gPiArCQkJY29tbWl0 LT5jcnRjX21hc2sgfD0KPiA+ID4gKwkJCQkoMSA8PCBkcm1fY3J0Y19pbmRleChzdGF0ZS0+Y3J0 Y3NbaV0pKTsKPiA+ID4gIAo+ID4gPiAgCS8qCj4gPiA+IC0JICogRklYTUU6ICBUaGUgcHJvcGVy IHNlcXVlbmNlIGhlcmUgd2lsbCBldmVudHVhbGx5IGJlOgo+ID4gPiAtCSAqCj4gPiA+IC0JICog ZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZShkZXYsIHN0YXRlKQo+ID4gPiAtCSAqIGRybV9h dG9taWNfaGVscGVyX2NvbW1pdF9wcmVfcGxhbmVzKGRldiwgc3RhdGUpOwo+ID4gPiAtCSAqIGRy bV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+IC0JICogZHJt X2F0b21pY19oZWxwZXJfY29tbWl0X3Bvc3RfcGxhbmVzKGRldiwgc3RhdGUpOwo+ID4gPiAtCSAq IGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZGV2LCBzdGF0ZSk7Cj4gPiA+IC0J ICogZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiA+IC0J ICogZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsKPiA+ID4gLQkgKgo+ID4gPiAtCSAqIG9u Y2Ugd2UgaGF2ZSBmdWxsIGF0b21pYyBtb2Rlc2V0LiAgRm9yIG5vdywganVzdCBtYW51YWxseSB1 cGRhdGUKPiA+ID4gLQkgKiBwbGFuZSBzdGF0ZXMgdG8gYXZvaWQgY2xvYmJlcmluZyBnb29kIHN0 YXRlcyB3aXRoIGR1bW15IHN0YXRlcwo+ID4gPiAtCSAqIHdoaWxlIG51Y2xlYXIgcGFnZWZsaXBw aW5nLgo+ID4gPiArCSAqIElmIHRoZXJlJ3MgYWxyZWFkeSBhIGZsaXAgcGVuZGluZywgd2Ugd29u J3Qgc2NoZWR1bGUgYW5vdGhlciBvbmUKPiA+ID4gKwkgKiB1bnRpbCBpdCBjb21wbGV0ZXMuICBX ZSBtYXkgcmVsYXggdGhpcyBpbiB0aGUgZnV0dXJlLCBidXQgZm9yIG5vdwo+ID4gPiArCSAqIHRo aXMgbWF0Y2hlcyB0aGUgbGVnYWN5IHBhZ2VmbGlwIGJlaGF2aW9yLgo+ID4gPiArCSAqLwo+ID4g PiArCXJldCA9IHdhaXRfZm9yX3BlbmRpbmdfZmxpcChjb21taXQtPmNydGNfbWFzaywgY29tbWl0 KTsKPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ICsJCWtmcmVlKGNvbW1pdCk7Cj4gPiA+ICsJCXJl dHVybiByZXQ7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBQb2ludCBv ZiBubyByZXR1cm47IGV2ZXJ5dGhpbmcgZnJvbSBoZXJlIG9uIGNhbid0IGZhaWwsIHNvIHN3YXAK PiA+ID4gKwkgKiB0aGUgbmV3IHN0YXRlIGludG8gdGhlIERSTSBvYmplY3RzLgo+ID4gPiArCSAq Lwo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBGSVhNRTogIFNob3VsZCBldmVudHVhbGx5 IHVzZSBkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKCkuCj4gPiA+ICsJICogSG93ZXZlciBz aW5jZSB3ZSBvbmx5IGhhbmRsZSBwbGFuZXMgYXQgdGhlIG1vbWVudCwgd2UgZG9uJ3QKPiA+ID4g KwkgKiB3YW50IHRvIGNsb2JiZXIgb3VyIGdvb2QgY3J0YyBzdGF0ZSB3aXRoIHNvbWV0aGluZyBi b2d1cywKPiA+ID4gKwkgKiBzbyBqdXN0IG1hbnVhbGx5IHN3YXAgdGhlIHBsYW5lIHN0YXRlcyBh bmQgY29weSBvdmVyIGFueSBjb21wbGV0aW9uCj4gPiA+ICsJICogZXZlbnRzIGZvciBDUlRDJ3Mu Cj4gPiA+ICAJICovCj4gPiA+ICAJZm9yIChpID0gMDsgaSA8IGRldi0+bW9kZV9jb25maWcubnVt X3RvdGFsX3BsYW5lOyBpKyspIHsKPiA+ID4gIAkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBz dGF0ZS0+cGxhbmVzW2ldOwo+ID4gPiBAQCAtMTU1LDEwICsyNTIsMjkgQEAgaW50IGludGVsX2F0 b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ID4gIAkJc3dhcChzdGF0ZS0+ cGxhbmVfc3RhdGVzW2ldLCBwbGFuZS0+c3RhdGUpOwo+ID4gPiAgCQlwbGFuZS0+c3RhdGUtPnN0 YXRlID0gTlVMTDsKPiA+ID4gIAl9Cj4gPiA+IC0JZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3Bs YW5lcyhkZXYsIHN0YXRlKTsKPiA+ID4gLQlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxh bmtzKGRldiwgc3RhdGUpOwo+ID4gPiAtCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVz KGRldiwgc3RhdGUpOwo+ID4gPiAtCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gPiA+ ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsgaSsr KSB7Cj4gPiA+ICsJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5jcnRjc1tpXTsKPiA+ ID4gKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gc3RhdGUtPmNydGNfc3Rh dGVzW2ldOwo+ID4gPiArCj4gPiA+ICsJCWlmICghY3J0YyB8fCAhY3J0Y19zdGF0ZSkKPiA+ID4g KwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsJCS8qIG4uYi4sIHdlIG9ubHkgY29weSB0aGUg ZXZlbnQgYW5kIGVuYWJsZWQgZmxhZyBmb3Igbm93ICovCj4gPiA+ICsJCXN3YXAoY3J0Yy0+c3Rh dGUtPmV2ZW50LCBjcnRjX3N0YXRlLT5ldmVudCk7Cj4gPiA+ICsJCXN3YXAoY3J0Yy0+c3RhdGUt PmVuYWJsZSwgY3J0Y19zdGF0ZS0+ZW5hYmxlKTsKPiA+ID4gKwl9Cj4gPiAKPiA+IEJlZm9yZSB3 ZSBjYW4gc3dhcCBpbiB0aGUgbmV3IHN0YXRlIHdlIG5lZWQgdG8gc3RhbGwgZm9yIGFueSBvdXN0 YW5kaW5nCj4gPiBhc3luYyBmbGlwIHRvIGNvbXBsZXRlLiBBdCBsZWFzdCB1bnRpbCB3ZSBoYXZl IGEgZnVsbC1ibG93biBmbGlwIHF1ZXVlLgo+IAo+IEkgdGhpbmsgdGhlIHdhaXRfZm9yX3BlbmRp bmdfZmxpcCgpIGNhbGwgYWJvdmUgdGhlIHR3byBjb21tZW50IGJsb2Nrcwo+IGJlZm9yZSB0aGUg bG9vcCBzaG91bGQgdGFrZSBjYXJlIG9mIHRoYXQgLS0tIGl0IHdhaXRzIHVudGlsIGFsbCB0aGUK PiBDUlRDJ3MgaW4gY29tbWl0LT5jcnRjX21hc2sgaGF2ZSBubyBwZW5kaW5nIGZsaXAsIHRoZW4g YXRvbWljYWxseSBtYXJrcwo+IHRoZW0gYXMgYnVzeSBiZWZvcmUgcHJvY2VlZGluZy4KClJpZ2h0 LCBjb21wbGV0ZWx5IG1pc3NlZCB0aGF0IG9uZSwgbXVzdCBoYXZlIGJlZW4gYmxpbmQuIExvb2tz IHNlbnNpYmxlLgoKQW5vdGhlciBsZXNzb24gbGVhcm5lZCBmcm9tIHRoZSBvbGQgcGFnZWZsaXAg Y29kZSB0byBjb25zaWRlciBpcyB0aGF0CmZyZWUtc3RhbmRpbmcgZmxpcC91bnBpbiB3b3JrcyB3 aGljaCBvbmx5IGNvbW11bmljYXRlIHRoZWlyIGNvbXBsZXRpb24Kc3RhdHVzIHRvIHRoZSBjb3Jl IG9mIHRoZSBkcml2ZXIgdGhyb3VnaCBzb21lIGJpdG1hc2tzIGFyZSBhIHBhaW4gdG8KaW50ZWdy YXRlIGludG8gdGhlIHNocmlua2VyLiBBbmQgZXZlbiBtb3JlIHNvIHdpdGggYXRvbWljIGZsaXBz IHdlIG11c3QgYmUKYWJsZSB0byBzdGFsbCBmb3IgdGhlIHVucGluIHRvIGNvbXBsZXRlIG9uIGFu eSBvdXRzdGFuZGluZyBmbGlwcyBpZiB3ZSBydW4Kb3V0IG9mIGdndHQgc3BhY2UuCgpDdXJyZW50 bHkgdGhhdCdzIGhhbmRsZWQgYnkgcmVzdGFydGluZyB0aGUgZW50aXJlIGlvY3RsIGZyb20gdGhl IGV2aWN0aW9uCmNvZGUgKHNlZSB0aGUgRUFHQUlOIGluIGk5MTVfZ2VtX2V2aWN0LmMpLCB3aGlj aCBpc24ndCB0ZXJyaWJsZSBwcmV0dHkuCkltbyBzb21lIGV4cGxpY2l0IHF1ZXVlIHdoaWNoIHRo ZSBzaHJpbmtlciBjb3VsZCBzdGFsbCBvbiBkaXJlY3RseSAoYW5kCm1heWJlIGV2ZW4gcHJvY2Vz cyBzeW5jaHJvbm91c2x5IGlmIG5lZWRlZCkgd291bGQgYmUgbXVjaCBiZXR0ZXIuIFdpdGgKYXRv bWljIGl0IHNob3VsZCBiZSBwb3NzaWJsZSBzaW5jZSB0aGUgYXN5bmMgd29ya2VyIGRvZXNuJ3Qg bmVlZCBhbnkKbW9kZXNldCBsb2Nrcywgb25seSB0aGUgZGV2LT5zdHJ1Y3RfbXV0ZXggdG8gdW5w aW4gb2JqZWN0cy4KCkFueXdheSBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBidXQgbWF5YmUg b25seSBvbmNlIHdlIGhhdmUgdGhlIGZ1bGwKZmxpcCBxdWV1ZSBpbiBwbGFjZS4gRm9yIG5vdyB0 aGUgaW1wb3J0YW50IHBhcnQgaXMgbm90IHRvIGJyZWFrIHRoaW5ncywKYnV0IEkgdGhpbmsgd2Ug c2hvdWxkIGhhdmUgZnVsbCBjb3ZlcmFnZSBmb3IgZXZlcnl0aGluZyBpbiBpZ3QgKGJ1dCBtYXli ZQpub3QgaW4gdGhlIGxpbWl0ZWQgcHJ0cyBzdWJzZXQpLgoKQW5vdGhlciB0aGluZyBJIG1pZ2h0 IG9yIG1pZ2h0IG5vdCBoYXZlIG1pc3NlZCBpcyB0aGUgYXN5bmMgd2FpdGluZy4KQ3VycmVudGx5 IHByZXBhcmVfcGxhbmVfZmIgZG9lcyBhIHN5bmNocm9ub3VzIHN0YWxsIGZvciByZW5kZXJpbmcs IHdoaWNoCm5lZWRzIHRvIGJlIHNwbGl0IGxpa2Ugd2l0aCB0aGUgbW1pb19mbGlwIGNvZGUgd2hp Y2ggaGFzIGFuIGV4cGxpY2l0CndhaXRfcmVxdWVzdCBpbiB0aGUgd29yayBmdW5jdGlvbi4gTG9u Zy10ZXJtIEknZCBsaWtlIHRvIHVzZSB0aGUKcGxhbmVfc3RhdGUtPmZlbmNlIHBvaW50ZXIsIGJ1 dCB1bmZvcnR1bmF0ZWx5IGk5MTUgcmVxZXVzdHMgaGF2ZW4ndCBiZWVuCnN1YmNsYXNzZWQgcHJv cGVybHkgeWV0LiBTbyB3ZSdkIG5lZWQgb3VyIG93biByZXF1ZXN0IHBvaW50ZXIgZm9yIG5vdyAt IGF0CmxlYXN0IHRob3NlIGFyZSByZWZjb3VudGVkIGFscmVhZHkuCgpBbmQgb25lIG1vcmUgd2lz aGxpc3Q6IFdvdWxkIGl0IGJlIGZlYXNpYmxlIHRvIGJ1aWxkIHVwIHRoZSBhdG9taWMgYXN5bmMK c3R1ZmYgZnJvbSB0aGUgbW1pb19mbGlwIGNvZGU/IEp1c3QgZm9yIGFkZGl0aW9uYWwgY29udGlu dWl0eSBhbmQgdGVzdGluZwouLi4KLURhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBF bmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KKzQxICgwKSA3OSAzNjUgNTcgNDggLSBodHRwOi8v YmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=