From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: Re: [RFC 1/7] drm/atomic: initial support for asynchronous plane update Date: Wed, 12 Apr 2017 15:17:41 -0300 Message-ID: <20170412181741.GA6904@joana> References: <20170410002448.12460-1-gustavo@padovan.org> <20170410002448.12460-2-gustavo@padovan.org> <87mvboujey.fsf@eliezer.anholt.net> <20170411202339.46uso62ptbc24w6z@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by gabe.freedesktop.org (Postfix) with ESMTPS id A7A0A6E21E for ; Wed, 12 Apr 2017 18:17:45 +0000 (UTC) Received: by mail-qk0-f196.google.com with SMTP id k139so5131546qke.2 for ; Wed, 12 Apr 2017 11:17:45 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170411202339.46uso62ptbc24w6z@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Daniel Vetter , dri-devel@lists.freedesktop.org, Gustavo Padovan List-Id: dri-devel@lists.freedesktop.org MjAxNy0wNC0xMSBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OgoKPiBPbiBNb24sIEFw ciAxMCwgMjAxNyBhdCAxMjo1NTozM1BNIC0wNzAwLCBFcmljIEFuaG9sdCB3cm90ZToKPiA+IEd1 c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2b0BwYWRvdmFuLm9yZz4gd3JpdGVzOgo+ID4gCj4gPiA+IEZy b206IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5jb20+Cj4gPiA+ Cj4gPiA+IEluIHNvbWUgY2FzZXMsIGxpa2UgY3Vyc29yIHVwZGF0ZXMsIGl0IGlzIGludGVyZXN0 aW5nIHRvIHVwZGF0ZSB0aGUKPiA+ID4gcGxhbmUgaW4gYW4gYXN5bmNocm9ub3VzIGZhc2hpb24g dG8gYXZvaWQgYmlnIGRlbGF5cy4KPiA+ID4KPiA+ID4gVGhlIGN1cnJlbnQgcXVldWVkIHVwZGF0 ZSBjb3VsZCBiZSBzdGlsbCB3YWl0aW5nIGZvciBhIGZlbmNlIHRvIHNpZ25hbCBhbmQKPiA+ID4g dGh1cyBibG9jayBhbmQgc3Vic2VxdWVudCB1cGRhdGUgdW50aWwgaXRzIHNjYW4gb3V0LiBJbiBj YXNlcyBsaWtlIHRoaXMgaWYKPiA+ID4gd2UgdXBkYXRlIHRoZSBjdXJzb3Igc3luY2hyb25vdXNs eSBpdCB3aWxsIGNhdXNlIHNpZ25pZmljYW50IGRlbGF5cyBvbgo+ID4gPiBzb21lIHBsYXRmb3Jt cyB0aGF0IHdvdWxkIGJlIG5vdGljZWQgYnkgdGhlIGZpbmFsIHVzZXIuCj4gPiA+Cj4gPiA+IFRo aXMgcGF0Y2ggY3JlYXRlcyBhIGZhc3QgcGF0aCB0byBqdW1wIGFoZWFkIHRoZSBjdXJyZW50IHF1 ZXVlZCBzdGF0ZSBhbmQKPiA+ID4gZG8gc2luZ2xlIHBsYW5lcyB1cGRhdGVzIHdpdGhvdXQgZ29p bmcgdGhyb3VnaCBhbGwgYXRvbWljIHN0ZXAgaW4KPiA+ID4gZHJtX2F0b21pY19oZWxwZXJfY29t bWl0KCkuCj4gPiA+Cj4gPiA+IEZvciBub3cgb25seSBzaW5nbGUgcGxhbmUgdXBkYXRlcyBhcmUg c3VwcG9ydGVkIGFuZCBvbmx5IGlmIHRoZXJlIGlzIG5vCj4gPiA+IHVwZGF0ZSB0byB0aGF0IHBs YW5lIGluIHRoZSBxdWV1ZWQgc3RhdGUuCj4gPiA+Cj4gPiA+IFdlIHBsYW4gdG8gc3VwcG9ydCBh c3luYyBQYWdlRmxpcHMgdGhyb3VnaCB0aGlzIGludGVyZmFjZSBhcyB3ZWxsIGluIHRoZQo+ID4g PiBuZWFyIGZ1dHVyZS4KPiA+IAo+ID4gVGhpcyBsb29rcyByZWFsbHkgbmljZSAtLSB0aGUgdmM0 IGNvZGUgZm9yIGN1cnNvcnMgd2FzIHJlYWxseSBncm9zcyB0bwo+ID4gd3JpdGUsIGFuZCBJIGdv dCBpdCB3cm9uZyBhIGNvdXBsZSBvZiB0aW1lcy4gIENvdXBsZSBvZiBjb21tZW50cyBpbmxpbmUu Cj4gCj4gU29tZSBtb3JlIGNvbW1lbnRzIGJlbG93Lgo+IC1EYW5pZWwKPiAKPiA+IAo+ID4gPiAt LS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgICAgICAgICAgICAgfCA3NSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWNfaGVscGVyLmMgICAgICB8IDQxICsrKysrKysrKysrKysrKysrCj4gPiA+ICBpbmNs dWRlL2RybS9kcm1fYXRvbWljLmggICAgICAgICAgICAgICAgIHwgIDQgKysKPiA+ID4gIGluY2x1 ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmggICAgICAgICAgfCAgMiArCj4gPiA+ICBpbmNsdWRl L2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oIHwgNDcgKysrKysrKysrKysrKysrKysr KysKPiA+ID4gIDUgZmlsZXMgY2hhbmdlZCwgMTY5IGluc2VydGlvbnMoKykKPiA+ID4KPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pYy5jCj4gPiA+IGluZGV4IGYzMjUwNmEuLmNhZTAxMjIgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiA+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9hdG9taWMuYwo+ID4gPiBAQCAtNjMxLDYgKzYzMSw3OSBAQCBzdGF0aWMgaW50 IGRybV9hdG9taWNfY3J0Y19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiA+ICAJcmV0 dXJuIDA7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gK3N0YXRpYyBib29sIGRybV9hdG9taWNfYXN5 bmNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiArewo+ID4gPiAr CXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9jcnRjX2NvbW1pdCAqY29tbWl0Owo+ID4gPiAr CXN0cnVjdCBkcm1fcGxhbmUgKl9fcGxhbmUsICpwbGFuZSA9IE5VTEw7Cj4gPiA+ICsJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqX19wbGFuZV9zdGF0ZSwgKnBsYW5lX3N0YXRlID0gTlVMTDsKPiA+ ID4gKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gPiA+ICsJ aW50IGksIG5fcGxhbmVzID0gMDsKPiA+ID4gKwo+ID4gPiArCWZvcl9lYWNoX25ld19jcnRjX2lu X3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gPiA+ICsJCWlmIChkcm1fYXRv bWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKPiA+ID4gKwkJCXJldHVybiBmYWxz ZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlmb3JfZWFjaF9uZXdfcGxhbmVfaW5fc3RhdGUo c3RhdGUsIF9fcGxhbmUsIF9fcGxhbmVfc3RhdGUsIGkpIHsKPiA+ID4gKwkJbl9wbGFuZXMrKzsK PiA+ID4gKwkJcGxhbmUgPSBfX3BsYW5lOwo+ID4gPiArCQlwbGFuZV9zdGF0ZSA9IF9fcGxhbmVf c3RhdGU7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKCFwbGFuZSB8fCBuX3BsYW5lcyAh PSAxKQo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoIXBsYW5lLT5z dGF0ZS0+Y3J0YykKPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCj4gPiA+ICsJaWYgKHBs YW5lX3N0YXRlLT5mZW5jZSkKPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCj4gPiA+ICsJ Zm9yX2VhY2hfbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsK PiA+ID4gKwkJaWYgKHBsYW5lLT5jcnRjICE9IGNydGMpCj4gPiA+ICsJCQljb250aW51ZTsKPiA+ ID4gKwo+ID4gPiArCQlzcGluX2xvY2soJmNydGMtPmNvbW1pdF9sb2NrKTsKPiA+ID4gKwkJY29t bWl0ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZjcnRjLT5jb21taXRfbGlzdCwKPiA+ID4g KwkJCQkJCSAgc3RydWN0IGRybV9jcnRjX2NvbW1pdCwKPiA+ID4gKwkJCQkJCSAgY29tbWl0X2Vu dHJ5KTsKPiA+ID4gKwkJaWYgKCFjb21taXQpIHsKPiA+ID4gKwkJCXNwaW5fdW5sb2NrKCZjcnRj LT5jb21taXRfbG9jayk7Cj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gKwkJfQo+ID4gPiArCQlz cGluX3VubG9jaygmY3J0Yy0+Y29tbWl0X2xvY2spOwo+ID4gPiArCj4gPiA+ICsJCWZvcl9lYWNo X3BsYW5lX2luX3N0YXRlKGNydGNfc3RhdGUtPnN0YXRlLCBfX3BsYW5lLAo+ID4gPiArCQkJCQlf X3BsYW5lX3N0YXRlLCBpKSB7Cj4gPiA+ICsJCQlpZiAoX19wbGFuZSA9PSBwbGFuZSkgewo+ID4g PiArCQkJCXJldHVybiBmYWxzZTsKPiA+ID4gKwkJCX0KPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ ID4gKwo+ID4gPiArCS8qIE5vdCBjb25maWd1cmluZyBuZXcgc2NhbGluZyBpbiB0aGUgYXN5bmMg cGF0aC4gKi8KPiA+IAo+ID4gcy9Ob3QvTm8vCj4gPiAKPiA+ID4gKwlpZiAocGxhbmUtPnN0YXRl LT5jcnRjX3cgIT0gcGxhbmVfc3RhdGUtPmNydGNfdyB8fAo+ID4gPiArCSAgICBwbGFuZS0+c3Rh dGUtPmNydGNfaCAhPSBwbGFuZV9zdGF0ZS0+Y3J0Y19oIHx8Cj4gPiA+ICsJICAgIHBsYW5lLT5z dGF0ZS0+c3JjX3cgIT0gcGxhbmVfc3RhdGUtPnNyY193IHx8Cj4gPiA+ICsJICAgIHBsYW5lLT5z dGF0ZS0+c3JjX2ggIT0gcGxhbmVfc3RhdGUtPnNyY19oKSB7Cj4gPiA+ICsJCXJldHVybiBmYWxz ZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlmdW5jcyA9IHBsYW5lLT5oZWxwZXJfcHJpdmF0 ZTsKPiA+ID4gKwo+ID4gPiArCWlmICghZnVuY3MtPmF0b21pY19hc3luY191cGRhdGUpCj4gPiA+ ICsJCXJldHVybiBmYWxzZTsKPiAKPiBJIGtpbmRhIGZlZWwgbGlrZSB3ZSBzaG91bGQgY2hlY2sg dGhpcyBmaXJzdCwgdG8gYmFpbCBvdXQgZm9yIGFsbCB0aGUKPiBkcml2ZXJzIHRoYXQgZG9uJ3Qg aW1wbGVtZW50IHRoaXMgYmVmb3JlIGFueSBvZiB0aGUgbW9yZSBleHBlbnNpdmUgY2hlY2tzLgo+ ID4gPiArCj4gPiA+ICsJaWYgKGZ1bmNzLT5hdG9taWNfYXN5bmNfY2hlY2spIHsKPiAKPiBUaGlz IGlzIHJlZHVuZGFudC4KPiAKPiA+ID4gKwkJaWYgKGZ1bmNzLT5hdG9taWNfYXN5bmNfY2hlY2so cGxhbmUsIHBsYW5lX3N0YXRlKSA8IDApCj4gPiA+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gCj4gT2Yg Y291cnNlIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgc3RpbGwgY2FsbGVkIGF0IHRoZSBlbmQsIHNv IGl0IGRvZXNuJ3QKPiBoYXZlIHRvIGNoZWNrIHN0dWZmLgo+IAo+ID4gPiArCX0KPiA+ID4gKwo+ ID4gPiArCXJldHVybiB0cnVlOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICBzdGF0aWMgdm9pZCBk cm1fYXRvbWljX2NydGNfcHJpbnRfc3RhdGUoc3RydWN0IGRybV9wcmludGVyICpwLAo+ID4gPiAg CQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ID4gPiAgewo+ID4gPiBAQCAt MTU5MSw2ICsxNjY0LDggQEAgaW50IGRybV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCj4gPiA+ICAJCX0KPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gKwlz dGF0ZS0+YXN5bmNfdXBkYXRlID0gZHJtX2F0b21pY19hc3luY19jaGVjayhzdGF0ZSk7Cj4gPiA+ ICsKPiA+ID4gIAlyZXR1cm4gcmV0Owo+ID4gPiAgfQo+ID4gCj4gPiBUaGUgcHJvbW90aW9uIG9m IGFueSBtb2Rlc2V0IHRoYXQgcGFzc2VzIHRoZSBhc3luY19jaGVjayB0ZXN0IHRvIGFzeW5jCj4g PiBzZWVtcyB3ZWlyZCAtLSBzaG91bGRuJ3Qgd2Ugb25seSBiZSBkb2luZyB0aGF0IGlmIHVzZXJz cGFjZSByZXF1ZXN0ZWQKPiA+IGFzeW5jPyAgUmlnaHQgbm93IGl0IHNlZW1zIGxpa2Ugd2UncmUg anVzdCBnZXR0aW5nIGx1Y2t5IGJlY2F1c2Ugb25seQo+ID4gY3Vyc29yIHBsYW5lcyBoYXZlIGl0 IHNldCwgYW5kIHRoZSBjdXJzb3IgdXBkYXRlIGlvY3RscyBpbXBseSBhc3luYy4KPiAKPiBZZWFo LCB3ZSBzaG91bGQgb25seSBkbyB0aGlzIHdoZW4gdGhlIGFzeW5jIGZsYWcgaXMgc2V0LCBhbmQg c2V0IHRoYXQgYm90aAo+IGluIHRoZSBwYWdlX2ZsaXAgaGVscGVycyBhbmQgdGhlIGN1cnNvciBo ZWxwZXJzLgo+IAo+IE9uZSB0aGluZyBJIHdvbmRlciBpcyB3aGV0aGVyIHdlIG5lZWQgdG8gZGlm ZmVyZW50aWF0ZSBiZXR3ZWVuICJwbHMgZG8KPiBhc3luYyBpZiB5b3UgY2FuIiBhbmQgIkkgd2Fu dCBhc3luYyBvciBsZXQgdGhlIHVwZGF0ZSBmYWlsIi4gQ3Vyc29ycyB3b3VsZAo+IGJlIHRoZSBm b3JtZXIsIHBhZ2VfZmxpcHMgcHJvYmFibHkgdG9vLCBidXQgZm9yIGFzeW5jIHRocm91Z2ggYXRv bWljIHdlCj4gbWlnaHQgYWxzbyBuZWVkIHRoZSBsYXRlci4gQnV0IHRoYXQncyBqdXN0IGFuIGFz aWRlLCB3ZSBjYW4gZWFzaWx5IHdpcmUKPiB0aGlzIHVwIHdoZW4gd2UgaGF2ZSB1c2Vyc3BhY2Ug YXNraW5nIGZvciBpdCAoaXQgbWlnaHQgY29tZSByZWFsIGhhbmR5IGZvcgo+IFZSKS4KCkFkZGlu ZyBhIGZsYWcgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIEknbGwgaGF2ZSB0aGF0IGNoYW5nZWQgZm9y IHYyLgoKPiAKPiA+IAo+ID4gPiAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2NoZWNrX29ubHkp Owo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ID4gPiBpbmRleCA4YmU5NzE5 Li5hNzllMDZjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19o ZWxwZXIuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ ID4gPiBAQCAtMTIzNSw2ICsxMjM1LDM2IEBAIHN0YXRpYyB2b2lkIGNvbW1pdF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAgLyoqCj4gPiA+ICsg KiBkcm1fYXRvbWljX2hlbHBlcl9hc3luY19jb21taXQgLSBjb21taXQgc3RhdGUgYXN5bmNocm9u b3VzbHkKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgYSBzdGF0ZSBh c3luY2hyb25vdXNseS4gSXQgc2hvdWxkIGJlIHVzZWQKPiA+ID4gKyAqIG9uIGEgc3RhdGUgb25s eSB3aGVuIGRybV9hdG9taWNfYXN5bmNfY2hlY2soKSBzdWNjZWRzLiBBc3luYwo+ID4gPiArICog Y29tbWl0cyBhcmUgbm90IHN1cHBvc2VkIHRvIHN3YXAgdGhlIHN0YXRlcyBsaWtlIG5vcm1hbCBz eW5jIGNvbW1pdHMsCj4gPiA+ICsgKiBidXQganVzdCBkbyBpbi1wbGFjZSBjaGFuZ2Ugb24gdGhl IGN1cnJlbnQgc3RhdGUuCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJf YXN5bmNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiA+ICsJCQkJICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsK PiA+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gPiA+ ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlmb3JfZWFjaF9uZXdfcGxhbmVfaW5fc3RhdGUoc3Rh dGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkgewo+ID4gPiArCQlmdW5jcyA9IHBsYW5lLT5oZWxw ZXJfcHJpdmF0ZTsKPiA+ID4gKwo+ID4gPiArCQlwbGFuZS0+c3RhdGUtPnNyY194ID0gcGxhbmVf c3RhdGUtPnNyY194Owo+ID4gPiArCQlwbGFuZS0+c3RhdGUtPnNyY195ID0gcGxhbmVfc3RhdGUt PnNyY195Owo+ID4gPiArCQlwbGFuZS0+c3RhdGUtPmNydGNfeCA9IHBsYW5lX3N0YXRlLT5jcnRj X3g7Cj4gPiA+ICsJCXBsYW5lLT5zdGF0ZS0+Y3J0Y195ID0gcGxhbmVfc3RhdGUtPmNydGNfeTsK PiA+ID4gKwo+ID4gPiArCQlpZiAoZnVuY3MgJiYgZnVuY3MtPmF0b21pY19hc3luY191cGRhdGUp Cj4gPiA+ICsJCQlmdW5jcy0+YXRvbWljX2FzeW5jX3VwZGF0ZShwbGFuZSwgcGxhbmVfc3RhdGUp Owo+ID4gPiArCX0KPiA+ID4gK30KPiA+IAo+ID4gSXQgc2VlbXMgc3RyYW5nZSB0byBtZSB0aGF0 IHRoZSBhc3luY191cGRhdGUoKSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUKPiA+IGRyaXZlciBuZWVk cyB0byB1cGRhdGUgdGhlIHN0YXRlLT5mYiBidXQgbm90IHRoZSB4L3kuICBDb3VsZCB3ZSBtb3Zl IHRoZQo+ID4gY29yZSdzIHgveSB1cGRhdGUgYWZ0ZXIgdGhlIGNhbGwgaW50byB0aGUgZHJpdmVy LCBhbmQgdGhlbiB1cGRhdGUKPiA+IHBsYW5lLT5zdGF0ZS0+ZmIgaW4gdGhlIGNvcmUgaW5zdGVh ZCBvZiB0aGUgZHJpdmVyPwo+IAo+IFllYWgsIGNvbnNpc3RlbmN5IHdvdWxkIGJlIHJlYWwgZ29v ZCBoZXJlIC4uLgoKUmlndGgsIEkgZGlkbid0IHRoaW5rIGFib3V0IHRoaXMgbGFjayBvZiBjb25z aXN0ZW5jeS4KCj4gCj4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2FzeW5j X2NvbW1pdCk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiAgICogZHJtX2F0b21pY19oZWxwZXJf Y29tbWl0IC0gY29tbWl0IHZhbGlkYXRlZCBzdGF0ZSBvYmplY3QKPiA+ID4gICAqIEBkZXY6IERS TSBkZXZpY2UKPiA+ID4gICAqIEBzdGF0ZTogdGhlIGRyaXZlciBzdGF0ZSBvYmplY3QKPiA+ID4g QEAgLTEyNTgsNiArMTI4OCwxNyBAQCBpbnQgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gPiA+ICB7Cj4gPiA+ICAJaW50IHJldDsKPiA+ID4gIAo+ID4g PiArCWlmIChzdGF0ZS0+YXN5bmNfdXBkYXRlKSB7Cj4gPiA+ICsJCXJldCA9IGRybV9hdG9taWNf aGVscGVyX3ByZXBhcmVfcGxhbmVzKGRldiwgc3RhdGUpOwo+ID4gPiArCQlpZiAocmV0KQo+ID4g PiArCQkJcmV0dXJuIHJldDsKPiA+ID4gKwo+ID4gPiArCQlkcm1fYXRvbWljX2hlbHBlcl9hc3lu Y19jb21taXQoZGV2LCBzdGF0ZSk7Cj4gPiA+ICsJCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBf cGxhbmVzKGRldiwgc3RhdGUpOwo+IAo+IFNvbWUgYXN5bmMgY3Vyc29yIHVwZGF0ZXMgYXJlIG5v dCAxMDAlIGFzeW5jLCBhcyBpbiB0aGUgaHcgbWlnaHQgc3RpbGwKPiBzY2FuIG91dCB0aGUgb2xk IGJ1ZmZlciB1bnRpbCB0aGUgbmV4dCB2YmxhbmsuIENvdWxkL3Nob3VsZCB3ZSBoYW5kbGUgdGhp cwo+IGluIGNvcmU/IE9yIGFyZSB3ZSBnb2luZyB0byBzaHJ1ZyB0aGlzIG9mZiB3aXRoICJtZWgs IHlvdSBhc2tlZCBmb3IKPiB0ZWFyaW5nLCB5b3UgZ290IHRlYXJpbmciPwoKT2theS4gSXQgd2ls bCBiZSBnb29kIHRvIGF2b2lkIGFueSBzb3J0IG9mIHRlYXJpbmcuIEZvciB0aGF0IHdlIG1heSBu ZWVkCnRvIG1vdmUgdGhlIGNsZWFudXAgcGhhc2UgdG8gdGhlIGRyaXZlciBJIHRoaW5rIG9yIGhh dmUgc29tZSBzb3J0IG9mCmNhbGxiYWNrLgoKR3VzdGF2bwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK