From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v3 1/2] drm: bridge: Allow daisy chaining of bridges Date: Tue, 19 May 2015 16:37:44 +0530 Message-ID: <555B1980.3090202@codeaurora.org> References: <1432024505-4139-1-git-send-email-architt@codeaurora.org> <20150519093422.GL15256@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTP id EA56D720FC for ; Tue, 19 May 2015 04:07:50 -0700 (PDT) In-Reply-To: <20150519093422.GL15256@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@ffwll.ch, dri-devel@lists.freedesktop.org, airlied@redhat.com, andy.yan@rock-chips.com, ajaykumar.rs@samsung.com List-Id: dri-devel@lists.freedesktop.org SGksCgpPbiAwNS8xOS8yMDE1IDAzOjA0IFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+IE9uIFR1 ZSwgTWF5IDE5LCAyMDE1IGF0IDAyOjA1OjA0UE0gKzA1MzAsIEFyY2hpdCBUYW5lamEgd3JvdGU6 Cj4+IEFsbG93IGRybV9icmlkZ2Ugb2JqZWN0cyB0byBsaW5rIHRvIGVhY2ggb3RoZXIgaW4gb3Jk ZXIgdG8gZm9ybSBhbiBlbmNvZGVyCj4+IGNoYWluLiBUaGUgcmVxdWlyZW1lbnQgZm9yIGNyZWF0 aW5nIGEgY2hhaW4gb2YgYnJpZGdlcyBjb21lcyBiZWNhdXNlIHRoZQo+PiBNU00gZHJtIGRyaXZl ciB1c2VzIHVwIGl0cyBlbmNvZGVyIGFuZCBicmlkZ2Ugb2JqZWN0cyBmb3IgYmxvY2tzIHdpdGhp bgo+PiB0aGUgU29DIGl0c2VsZi4gVGhlcmUgaXNuJ3QgYW55dGhpbmcgbGVmdCB0byB1c2UgaWYg dGhlIFNvQyBkaXNwbGF5IG91dHB1dAo+PiBpcyBjb25uZWN0ZWQgdG8gYW4gZXh0ZXJuYWwgZW5j b2RlciBJQy4gSGF2aW5nIGFuIGFkZGl0aW9uYWwgYnJpZGdlCj4+IGNvbm5lY3RlZCB0byB0aGUg ZXhpc3RpbmcgYnJpZGdlIGhlbHBzIGhlcmUuIEluIGdlbmVyYWwsIGl0IGlzIHBvc3NpYmxlIGZv cgo+PiBwbGF0Zm9ybXMgdG8gaGF2ZSAgbXVsdGlwbGUgZGV2aWNlcyBiZXR3ZWVuIHRoZSBlbmNv ZGVyIGFuZCB0aGUKPj4gY29ubmVjdG9yL3BhbmVsIHRoYXQgcmVxdWlyZSBzb21lIHNvcnQgb2Yg Y29uZmlndXJhdGlvbi4KPj4KPj4gV2UgY3JlYXRlIGRybSBicmlkZ2UgaGVscGVyIGZ1bmN0aW9u cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb3AgaW4KPj4gJ2RybV9icmlkZ2VfZnVuY3MnLiBUaGVz ZSBoZWxwZXJzIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcKPj4gJ2RybV9icmlkZ2VfZnVuY3MnIG9w IGZvciB0aGUgZW50aXJlIGNoYWluIG9mIGJyaWRnZXMuIFRoZXNlIGhlbHBlcnMgYXJlCj4+IHVz ZWQgaW50ZXJuYWxseSBieSBkcm1fYXRvbWljX2hlbHBlci5jIGFuZCBkcm1fY3J0Y19oZWxwZXIu Yy4KPj4KPj4gVGhlIGRybV9icmlkZ2VfZW5hYmxlL3ByZV9lbmFibGUgaGVscGVycyBleGVjdXRl IGVuYWJsZS9wcmVfZW5hYmxlIG9wcyBvZgo+PiB0aGUgYnJpZGdlIGNsb3NldCB0byB0aGUgZW5j b2RlciwgYW5kIHByb2NlZWQgdW50aWwgdGhlIGxhc3QgYnJpZGdlIGluIHRoZQo+PiBjaGFpbiBp cyBlbmFibGVkLiBUaGUgc2FtZSBob2xkcyBmb3IgZHJtX2JyaWRnZV9tb2RlX3NldC9tb2RlX2Zp eHVwCj4+IGhlbHBlcnMuIFRoZSBkcm1fYnJpZGdlX2Rpc2FibGUvcG9zdF9kaXNhYmxlIGhlbHBl cnMgZGlzYWJsZSB0aGUgbGFzdAo+PiBicmlkZ2UgaW4gdGhlIGNoYWluIGZpcnN0LCBhbmQgcHJv Y2VlZCB1bnRpbCB0aGUgZmlyc3QgYnJpZGdlIGluIHRoZSBjaGFpbgo+PiBpcyBkaXNhYmxlZC4K Pj4KPj4gZHJtX2JyaWRnZV9hdHRhY2goKSByZW1haW5zIHRoZSBzYW1lLiBBcyBiZWZvcmUsIHRo ZSBkcml2ZXIgY2FsbGluZyB0aGlzCj4+IGZ1bmN0aW9uIHNob3VsZCBtYWtlIHN1cmUgaXQgaGFz IHNldCB0aGUgbGlua3MgY29ycmVjdGx5LiBUaGUgb3JkZXIgaW4KPj4gd2hpY2ggdGhlIGJyaWRn ZXMgYXJlIGNvbm5lY3RlZCB0byBlYWNoIG90aGVyIGRldGVybWluZXMgdGhlIG9yZGVyIGluIHdo aWNoCj4+IHRoZSBjYWxscyBhcmUgbWFkZS4gT25lIHJlcXVpcmVtZW50IGlzIHRoYXQgZXZlcnkg YnJpZGdlIGluIHRoZSBjaGFpbgo+PiBzaG91bGQgcG9pbnQgdGhlIHBhcmVudCBlbmNvZGVyIG9i amVjdC4gVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBicmlkZ2UKPj4gZHJpdmVycyBleHBlY3QgYSB2 YWxpZCBlbmNvZGVyIHBvaW50ZXIgaW4gZHJtX2JyaWRnZS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVy Cj4+IGEgY2hhaW4gd2hlcmUgYW4gZW5jb2RlcidzIG91dHB1dCBpcyBjb25uZWN0ZWQgdG8gYnJp ZGdlMSwgYW5kIGJyaWRnZTEncwo+PiBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIGJyaWRnZTI6Cj4+ Cj4+IAkvKiBMaWtlIGJlZm9yZSwgYXR0YWNoIGJyaWRnZSB0byBhbiBlbmNvZGVyICovCj4+IAli cmlkZ2UxLT5lbmNvZGVyID0gZW5jb2RlcjsKPj4gCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGRl diwgYnJpZGdlMSk7Cj4+IAkuLgo+Pgo+PiAJLyoKPj4gCSAqIHNldCB0aGUgZmlyc3QgYnJpZGdl J3MgJ25leHQnIGJyaWRnZSB0byBicmlkZ2UyLCBzZXQgaXRzIGVuY29kZXIKPj4gCSAqIGFzIGJy aWRnZTEncyBlbmNvZGVyCj4+IAkgKi8KPj4gCWJyaWRnZTEtPm5leHQgPSBicmlkZ2UyCj4+IAli cmlkZ2UyLT5lbmNvZGVyID0gYnJpZGdlMS0+ZW5jb2RlcjsKPj4gCXJldCA9IGRybV9icmlkZ2Vf YXR0YWNoKGRldiwgYnJpZGdlMik7Cj4+Cj4+IAkuLi4KPj4gCS4uLgo+Pgo+PiBUaGlzIG1ldGhv ZCBvZiBicmlkZ2UgY2hhaW5pbmcgaXNuJ3QgaW50cnVzaXZlIGFuZCBleGlzdGluZyBkcml2ZXJz IHRoYXQKPj4gdXNlIGRybV9icmlkZ2Ugd2lsbCBiZWhhdmUgdGhlIHNhbWUgd2F5IGFzIGJlZm9y ZS4gVGhlIGJyaWRnZSBoZWxwZXJzIGFsc28KPj4gY2xlYW5zIHVwIHRoZSBhdG9taWMgYW5kIGNy dGMgaGVscGVyIGZpbGVzIGEgYml0Lgo+Pgo+PiBSZXZpZXdlZC1ieTogSmFuaSBOaWt1bGEgPGph bmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IFJvYiBDbGFyayA8cm9i ZGNsYXJrQGdtYWlsLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0 dEBjb2RlYXVyb3JhLm9yZz4KPgo+IFR3byBjb21tZW50cyBiZWxvdyBhYm91dCB0aGUgbmVzdGlu ZyBvZiBjYWxsZXJzLiBsZ3RtIG90aGVyd2lzZS4KPiAtRGFuaWVsCj4KPj4gLS0tCj4+IHYzOgo+ PiAtIEFkZCBoZWFkZXJkb2NzIGZvciB0aGUgbmV3IGZ1bmN0aW9ucwo+Pgo+PiB2MjoKPj4gLSBB ZGQgRVhQT1JUX1NZTUJPTCBmb3IgdGhlIG5ldyBmdW5jdGlvbnMKPj4gLSBGaXggbG9naWMgaXNz dWUgaW4gbW9kZV9maXh1cCgpCj4+Cj4+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVs cGVyLmMgfCAgMjkgKysrLS0tLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jICAg ICAgICB8IDE0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICBkcml2 ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgICB8ICA1NCArKysrKy0tLS0tLS0tLQo+PiAg IGluY2x1ZGUvZHJtL2RybV9jcnRjLmggICAgICAgICAgICAgIHwgIDE0ICsrKysKPj4gICA0IGZp bGVzIGNoYW5nZWQsIDE4OCBpbnNlcnRpb25zKCspLCA1MyBkZWxldGlvbnMoLSkKPj4KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPj4gaW5kZXggMWQyY2E1Mi4uZDZjODVjMCAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPj4gQEAgLTI4MSwxNCArMjgxLDEx IEBAIG1vZGVfZml4dXAoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+PiAgIAkJZW5j b2RlciA9IGNvbm5fc3RhdGUtPmJlc3RfZW5jb2RlcjsKPj4gICAJCWZ1bmNzID0gZW5jb2Rlci0+ aGVscGVyX3ByaXZhdGU7Cj4+Cj4+IC0JCWlmIChlbmNvZGVyLT5icmlkZ2UgJiYgZW5jb2Rlci0+ YnJpZGdlLT5mdW5jcy0+bW9kZV9maXh1cCkgewo+PiAtCQkJcmV0ID0gZW5jb2Rlci0+YnJpZGdl LT5mdW5jcy0+bW9kZV9maXh1cCgKPj4gLQkJCQkJZW5jb2Rlci0+YnJpZGdlLCAmY3J0Y19zdGF0 ZS0+bW9kZSwKPj4gLQkJCQkJJmNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUpOwo+PiAtCQkJaWYg KCFyZXQpIHsKPj4gLQkJCQlEUk1fREVCVUdfQVRPTUlDKCJCcmlkZ2UgZml4dXAgZmFpbGVkXG4i KTsKPj4gLQkJCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJCX0KPj4gKwkJcmV0ID0gZHJtX2JyaWRn ZV9tb2RlX2ZpeHVwKGVuY29kZXItPmJyaWRnZSwgJmNydGNfc3RhdGUtPm1vZGUsCj4+ICsJCQkJ JmNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUpOwo+PiArCQlpZiAoIXJldCkgewo+PiArCQkJRFJN X0RFQlVHX0FUT01JQygiQnJpZGdlIGZpeHVwIGZhaWxlZFxuIik7Cj4+ICsJCQlyZXR1cm4gLUVJ TlZBTDsKPj4gICAJCX0KPj4KPj4gICAJCWlmIChmdW5jcy0+YXRvbWljX2NoZWNrKSB7Cj4+IEBA IC01NzgsOCArNTc1LDcgQEAgZGlzYWJsZV9vdXRwdXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4+ICAgCQkgKiBFYWNoIGVuY29k ZXIgaGFzIGF0IG1vc3Qgb25lIGNvbm5lY3RvciAoc2luY2Ugd2UgYWx3YXlzIHN0ZWFsCj4+ICAg CQkgKiBpdCBhd2F5KSwgc28gd2Ugd29uJ3QgY2FsbCBkaXNhYmxlIGhvb2tzIHR3aWNlLgo+PiAg IAkJICovCj4+IC0JCWlmIChlbmNvZGVyLT5icmlkZ2UpCj4+IC0JCQllbmNvZGVyLT5icmlkZ2Ut PmZ1bmNzLT5kaXNhYmxlKGVuY29kZXItPmJyaWRnZSk7Cj4+ICsJCWRybV9icmlkZ2VfZGlzYWJs ZShlbmNvZGVyLT5icmlkZ2UpOwo+Pgo+PiAgIAkJLyogUmlnaHQgZnVuY3Rpb24gZGVwZW5kcyB1 cG9uIHRhcmdldCBzdGF0ZS4gKi8KPj4gICAJCWlmIChjb25uZWN0b3ItPnN0YXRlLT5jcnRjICYm IGZ1bmNzLT5wcmVwYXJlKQo+PiBAQCAtNTg5LDggKzU4NSw3IEBAIGRpc2FibGVfb3V0cHV0cyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRl KQo+PiAgIAkJZWxzZQo+PiAgIAkJCWZ1bmNzLT5kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNf T0ZGKTsKPj4KPj4gLQkJaWYgKGVuY29kZXItPmJyaWRnZSkKPj4gLQkJCWVuY29kZXItPmJyaWRn ZS0+ZnVuY3MtPnBvc3RfZGlzYWJsZShlbmNvZGVyLT5icmlkZ2UpOwo+PiArCQlkcm1fYnJpZGdl X3Bvc3RfZGlzYWJsZShlbmNvZGVyLT5icmlkZ2UpOwo+PiAgIAl9Cj4+Cj4+ICAgCWZvcl9lYWNo X2NydGNfaW5fc3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkgewo+PiBA QCAtNzEzLDkgKzcwOCw3IEBAIGNydGNfc2V0X21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPj4gICAJCWlmIChmdW5jcy0+bW9k ZV9zZXQpCj4+ICAgCQkJZnVuY3MtPm1vZGVfc2V0KGVuY29kZXIsIG1vZGUsIGFkanVzdGVkX21v ZGUpOwo+Pgo+PiAtCQlpZiAoZW5jb2Rlci0+YnJpZGdlICYmIGVuY29kZXItPmJyaWRnZS0+ZnVu Y3MtPm1vZGVfc2V0KQo+PiAtCQkJZW5jb2Rlci0+YnJpZGdlLT5mdW5jcy0+bW9kZV9zZXQoZW5j b2Rlci0+YnJpZGdlLAo+PiAtCQkJCQkJCSBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKPj4gKwkJZHJt X2JyaWRnZV9tb2RlX3NldChlbmNvZGVyLT5icmlkZ2UsIG1vZGUsIGFkanVzdGVkX21vZGUpOwo+ PiAgIAl9Cj4+ICAgfQo+Pgo+PiBAQCAtODA5LDE2ICs4MDIsMTQgQEAgdm9pZCBkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ ICAgCQkgKiBFYWNoIGVuY29kZXIgaGFzIGF0IG1vc3Qgb25lIGNvbm5lY3RvciAoc2luY2Ugd2Ug YWx3YXlzIHN0ZWFsCj4+ICAgCQkgKiBpdCBhd2F5KSwgc28gd2Ugd29uJ3QgY2FsbCBlbmFibGUg aG9va3MgdHdpY2UuCj4+ICAgCQkgKi8KPj4gLQkJaWYgKGVuY29kZXItPmJyaWRnZSkKPj4gLQkJ CWVuY29kZXItPmJyaWRnZS0+ZnVuY3MtPnByZV9lbmFibGUoZW5jb2Rlci0+YnJpZGdlKTsKPj4g KwkJZHJtX2JyaWRnZV9wcmVfZW5hYmxlKGVuY29kZXItPmJyaWRnZSk7Cj4+Cj4+ICAgCQlpZiAo ZnVuY3MtPmVuYWJsZSkKPj4gICAJCQlmdW5jcy0+ZW5hYmxlKGVuY29kZXIpOwo+PiAgIAkJZWxz ZQo+PiAgIAkJCWZ1bmNzLT5jb21taXQoZW5jb2Rlcik7Cj4+Cj4+IC0JCWlmIChlbmNvZGVyLT5i cmlkZ2UpCj4+IC0JCQllbmNvZGVyLT5icmlkZ2UtPmZ1bmNzLT5lbmFibGUoZW5jb2Rlci0+YnJp ZGdlKTsKPj4gKwkJZHJtX2JyaWRnZV9lbmFibGUoZW5jb2Rlci0+YnJpZGdlKTsKPj4gICAJfQo+ PiAgIH0KPj4gICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0 X2VuYWJsZXMpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPj4gaW5kZXggZWFhNTc5MC4uZjcwZTYxNyAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jCj4+IEBAIC02Niw2ICs2NiwxNTAgQEAgaW50IGRybV9i cmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpCj4+ICAgfQo+PiAgIEVYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9hdHRhY2gpOwo+Pgo+ PiArLyoqCj4+ICsgKiBkcm1fYnJpZGdlX21vZGVfZml4dXAgLSBmaXh1cCBwcm9wb3NlZCBtb2Rl IGZvciBhbGwgYnJpZGdlcyBpbiB0aGUKPj4gKyAqCQkJICAgZW5jb2RlciBjaGFpbgo+PiArICog QGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJlCj4+ICsgKiBAbW9kZTogZGVzaXJlZCBt b2RlIHRvIGJlIHNldCBmb3IgdGhlIGJyaWRnZQo+PiArICogQGFkanVzdGVkX21vZGU6IHVwZGF0 ZWQgbW9kZSB0aGF0IHdvcmtzIGZvciB0aGlzIGJyaWRnZQo+PiArICoKPj4gKyAqIENhbGxzICdt b2RlX2ZpeHVwJyBkcm1fYnJpZGdlX2Z1bmNzIG9wIGZvciBhbGwgdGhlIGJyaWRnZXMgaW4gdGhl Cj4+ICsgKiBlbmNvZGVyIGNoYWluLCBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBicmlkZ2UgdG8g dGhlIGxhc3QuCj4+ICsgKgo+PiArICogTm90ZTogdGhlIGJyaWRnZSBwYXNzZWQgc2hvdWxkIGJl IHRoZSBvbmUgY2xvc2VzdCB0byB0aGUgZW5jb2Rlcgo+PiArICovCj4+ICtib29sIGRybV9icmlk Z2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+PiArCQkJY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4+ICsJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqdXN0ZWRfbW9kZSkKPj4gK3sKPj4gKwlib29sIHJldCA9IHRydWU7Cj4+ICsKPj4gKwlp ZiAoIWJyaWRnZSkKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsKPj4gKwlpZiAoYnJpZGdlLT5mdW5j cy0+bW9kZV9maXh1cCkKPj4gKwkJcmV0ID0gYnJpZGdlLT5mdW5jcy0+bW9kZV9maXh1cChicmlk Z2UsIG1vZGUsIGFkanVzdGVkX21vZGUpOwo+PiArCj4+ICsJcmV0ID0gcmV0ICYmIGRybV9icmlk Z2VfbW9kZV9maXh1cChicmlkZ2UtPm5leHQsIG1vZGUsIGFkanVzdGVkX21vZGUpOwo+PiArCj4+ ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9tb2RlX2Zp eHVwKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fYnJpZGdlX2Rpc2FibGUgLSBjYWxscyAnZGlz YWJsZScgZHJtX2JyaWRnZV9mdW5jcyBvcCBmb3IgYWxsCj4+ICsgKgkJCWJyaWRnZXMgaW4gdGhl IGVuY29kZXIgY2hhaW4uCj4+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1cmUK Pj4gKyAqCj4+ICsgKiBDYWxscyAnZGlzYWJsZScgZHJtX2JyaWRnZV9mdW5jcyBvcCBmb3IgYWxs IHRoZSBicmlkZ2VzIGluIHRoZSBlbmNvZGVyCj4+ICsgKiBjaGFpbiwgc3RhcnRpbmcgZnJvbSB0 aGUgbGFzdCBicmlkZ2UgdG8gdGhlIGZpcnN0LiBUaGVzZSBhcmUgY2FsbGVkIGJlZm9yZQo+PiAr ICogY2FsbGluZyB0aGUgZW5jb2RlcidzIHByZXBhcmUgb3AuCj4+ICsgKgo+PiArICogTm90ZTog dGhlIGJyaWRnZSBwYXNzZWQgc2hvdWxkIGJlIHRoZSBvbmUgY2xvc2VzdCB0byB0aGUgZW5jb2Rl cgo+PiArICovCj4+ICt2b2lkIGRybV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKQo+PiArewo+PiArCWlmICghYnJpZGdlKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlk cm1fYnJpZGdlX2Rpc2FibGUoYnJpZGdlLT5uZXh0KTsKPj4gKwo+PiArCWJyaWRnZS0+ZnVuY3Mt PmRpc2FibGUoYnJpZGdlKTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9kaXNh YmxlKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fYnJpZGdlX3Bvc3RfZGlzYWJsZSAtIGNhbGxz ICdwb3N0X2Rpc2FibGUnIGRybV9icmlkZ2VfZnVuY3Mgb3AgZm9yCj4+ICsgKgkJCSAgICAgYWxs IGJyaWRnZXMgaW4gdGhlIGVuY29kZXIgY2hhaW4uCj4+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29u dHJvbCBzdHJ1Y3R1cmUKPj4gKyAqCj4+ICsgKiBDYWxscyAncG9zdF9kaXNhYmxlJyBkcm1fYnJp ZGdlX2Z1bmNzIG9wIGZvciBhbGwgdGhlIGJyaWRnZXMgaW4gdGhlCj4+ICsgKiBlbmNvZGVyIGNo YWluLCBzdGFydGluZyBmcm9tIHRoZSBsYXN0IGJyaWRnZSB0byB0aGUgZmlyc3QuIFRoZXNlIGFy ZSBjYWxsZWQKPj4gKyAqIGFmdGVyIGNvbXBsZXRpbmcgdGhlIGVuY29kZXIncyBwcmVwYXJlIG9w Lgo+PiArICoKPj4gKyAqIE5vdGU6IHRoZSBicmlkZ2UgcGFzc2VkIHNob3VsZCBiZSB0aGUgb25l IGNsb3Nlc3QgdG8gdGhlIGVuY29kZXIKPj4gKyAqLwo+PiArdm9pZCBkcm1fYnJpZGdlX3Bvc3Rf ZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+PiArewo+PiArCWlmICghYnJpZGdl KQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlkcm1fYnJpZGdlX3Bvc3RfZGlzYWJsZShicmlkZ2Ut Pm5leHQpOwo+PiArCj4+ICsJYnJpZGdlLT5mdW5jcy0+cG9zdF9kaXNhYmxlKGJyaWRnZSk7Cj4K PiBGb3Igc3ltbWV0cnkgSSdkIGNhbGwgdGhlIHBvc3RfZGlzYWJsZSBob29rIGZvciB0aGUgbmV4 dCBicmlnZGUgX2FmdGVyXwo+IHRoaXMgb25lLiBPdGhlcndpc2Ugd2UgYnJlYWsgYWJzdHJhY3Rp b24uIEUuZy4gd2l0aCAxIGJyaWRnZSB3ZSdkIGhhdmUKPgo+IGJyaWRnZUFfZGlzYWJsZSgpOwo+ IGVuY29kZXJfZGlzYWJsZSgpOwo+IGJyaWRnZUFfcG9zdF9kaXNhYmxlKCk7Cj4KPiBCdXQgaWYg b24gc29tZSBvdGhlciBwYXJ0IGJyaWRnZSBBIGlzIGNvbm5lY3RlZCB0byBicmlkZ2UgQiAoaS5l LiB3ZQo+IHJlcGxhY2UgdGhlIGVuY29kZXIgd2l0aCBhIGNvbWJvIG9mIG90aGVyX2VuY29kZXIr YnJpZGdlQSkgd2l0aCB5b3VyIGNvZGUKPiB0aGUgcG9zdF9kaXNhYmxlIGlzIHN1ZGRlbmx5IGlu dGVybGVhdmVkIHdpdGggdGhlIHByZWNlZWRpbmcgc3RhZ2VzIGluIHRoZQo+IHBpcGVsaW5lOgo+ Cj4KPiBicmlkZ2VBX2Rpc2FibGUoKTsKPiBicmlkZ2VCX2Rpc2FibGUoKTsKPiBvdGhlcl9lbmNv ZGVyX2Rpc2FibGUoKTsKPiBicmlkZ2VBX3Bvc3RfZGlzYWJsZSgpOwo+IGJyaWRnZUJfcG9zdF9k aXNhYmxlKCk7Cj4KPiBXaGljaCBtZWFucyBmcm9tIHRoZSBwb3Ygb2YgYnJpZGdlQSB0aGVyZSdz IGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHdoZXRoZXIKPiBpdCdzIGNvbm5lY3RlZCB0byAiZW5jb2Rl ciIgb3IgIm90aGVyX2VuY29kZXIrYnJpZGdlQiIuIEJ1dCBpZiB3ZSByZW9yZGVyCj4gdGhlIHBv c3RfZGlzYWJsZSBzZXF1ZW5jZSBsaWtlIEkgc3VnZ2VzdCB3ZSdsbCBnZXQ6Cj4KPiBicmlkZ2VB X2Rpc2FibGUoKTsKPiBicmlkZ2VCX2Rpc2FibGUoKTsKPiBvdGhlcl9lbmNvZGVyX2Rpc2FibGUo KTsKPiBicmlkZ2VCX3Bvc3RfZGlzYWJsZSgpOwo+IGJyaWRnZUFfcG9zdF9kaXNhYmxlKCk7Cj4K PiBXaGljaCBtZWFucyB0aGF0ICJlbmNvZGVyIiBhbmQgIm90aGVyX2VuY29kZXIrYnJpZGdlQiIg bG9vayB0aGUgc2FtZSBmb3IKPiBicmlkZ2VBLiBUbyBhdm9pZCBjb25mdXNpb24gdGhlIHR3byBw aXBlbGluZXMgaW4gaHcgYXJlOgo+Cj4gZW5jb2RlciAtLS0+IGJyaWRnZUEKPgo+IG90aGVyX2Vu Y29kZXIgLS0tPiBicmlkZ2VCIC0tLT4gYnJpZGdlQQoKSSBhZ3JlZSB3aXRoIHRoaXMsIHRoYW5r cyBmb3IgdGhlIGV4cGxhbmF0aW9uLiBBbHRob3VnaCwgSSdtIG5vdCBzdXJlIAphYm91dCB0aGUg cHJlX2VuYWJsZSBwYXJ0IGJlbG93LgoKPHNuaXA+Cgo+PiArdm9pZCBkcm1fYnJpZGdlX3ByZV9l bmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlpZiAoIWJyaWRnZSkK Pj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJYnJpZGdlLT5mdW5jcy0+cHJlX2VuYWJsZShicmlkZ2Up Owo+PiArCj4+ICsJZHJtX2JyaWRnZV9wcmVfZW5hYmxlKGJyaWRnZS0+bmV4dCk7Cj4KPiBTYW1l IGFzIHdpdGggcG9zdF9kaXNhYmxlLCBwcmVfZW5hYmxlIGZvciBicmlkZ2UtPm5leHQgc2hvdWxk IGJlIGNhbGxlZAo+IF9iZWZvcmVfIHRoZSBwcmVfZW5hYmxlIGZvciB0aGlzIGJyaWRnZS4KCgpU aGUgb3JkZXIgb2YgbmVzdGluZyBzdWdnZXN0ZWQgYnkgeW91IGdpdmVzIHRoZSBzZXF1ZW5jZToK CmJyaWRnZUFfcHJlX2VuYWJsZSgpOwpicmlkZ2VCX3ByZV9lbmFibGUoKTsKb3RoZXJfZW5jb2Rl cl9lbmFibGUoKTsKYnJpZGdlQl9lbmFibGUoKTsKYnJpZGdlQV9lbmFibGUoKTsKClRoaXMgd29u J3Qgd29yayBpZiB0aGUgYnJpZGdlIEEgcmVsaWVzIG9uIGJyaWRnZSBCIHRvIGJlIGVuYWJsZWQg Zmlyc3QuIApUaGlzIGhhcHBlbnMgaW4gdGhlIGVuY29kZXIgcGF0aCBJJ20gd29ya2luZyBvbjoK Cm1zbSBtZHA1IGVuY29kZXIgLT4gZHNpIGJyaWRnZSAtPiBhZHY3NTExIGRzaSB0byBoZG1pIGJy aWRnZSBjaGlwCgoKVGhlIGFkdiBjaGlwIHJlbGllcyBvbiBkc2kncyBjbG9jayBmb3IgaXQgdG8g ZnVuY3Rpb24uIElmIGRzaSdzIApwcmVfZW5hYmxlKCkgaXNuJ3QgY2FsbGVkIGZpcnN0LCB0aGVu IGFkdidzIHByZV9lbmFibGUgd291bGQgZmFpbC4KCldlIGNvdWxkIG1vZGlmeSB0aGUgY2FsbCBv cmRlciBpbiBkcm1fYnJpZGdlX2VuYWJsZSgpIGluc3RlYWQgdG8gYWNoaWV2ZToKCmJyaWRnZUJf cHJlX2VuYWJsZSgpOwpicmlkZ2VBX3ByZV9lbmFibGUoKTsKb3RoZXJfZW5jb2Rlcl9lbmFibGUo KTsKYnJpZGdlQV9lbmFibGUoKTsKYnJpZGdlQl9lbmFibGUoKTsKClRoaXMgZml4ZXMgdGhlIHNl cXVlbmNlIGZvciBwcmVfZW5hYmxlKCkgY2FsbHMsIGJ1dCBhc3N1bWVzIHRoYXQgdGhlIApjb25m aWd1cmF0aW9ucyBpbiB0aGUgZW5hYmxlKCkgZG9uJ3QgbmVlZCB0byBmb2xsb3cgYSBzcGVjaWZp YyBzZXF1ZW5jZSAKdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvci4KCnByZV9lbmFibGUoKSBzaG91 bGQgaWRlYWxseSByZXByZXNlbnQgdGhpbmdzIHRvIGJlIGRvbmUgYmVmb3JlIHdlIGVuYWJsZSAK dGhlIG5leHQgZW5jb2RlciBpbiB0aGUgY2hhaW4uIFNvIHRoZSBzZXF1ZW5jZSByaWdodCBhYm92 ZSBzZWVtcyB0byBiZSAKYmV0dGVyLgoKQXJjaGl0CgotLSAKUXVhbGNvbW0gSW5ub3ZhdGlvbiBD ZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91 bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK