From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: Re: [PATCH 1/5] drm: introduce sync objects (v2) Date: Fri, 12 May 2017 00:51:21 -0400 Message-ID: References: <20170512003457.24936-1-airlied@gmail.com> <20170512003457.24936-2-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170512003457.24936-2-airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org CgpPbiAyMDE3LTA1LTExIDA4OjM0IFBNLCBEYXZlIEFpcmxpZSB3cm90ZToKPiBGcm9tOiBEYXZl IEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+Cj4gU3luYyBvYmplY3RzIGFyZSBuZXcgdG9w bGV2ZWwgZHJtIG9iamVjdCwgdGhhdCBjb250YWluIGEKPiBwb2ludGVyIHRvIGEgZmVuY2UuIFRo aXMgZmVuY2UgY2FuIGJlIHVwZGF0ZWQgdmlhIGNvbW1hbmQKPiBzdWJtaXNzaW9uIGlvY3RscyB2 aWEgZHJpdmVycy4KPgo+IFRoZXJlIGlzIGFsc28gYSBnZW5lcmljIHdhaXQgb2JqIEFQSSBtb2Rl bGxlZCBvbiB0aGUgdnVsa2FuCj4gd2FpdCBBUEkgKHdpdGggY29kZSBtb2RlbGxlZCBvbiBzb21l IGFtZGdwdSBjb2RlKS4KPgo+IFRoZXNlIG9iamVjdHMgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiBv cGFxdWUgZmQgdGhhdCBjYW4gYmUKPiBwYXNzZXMgYmV0d2VlbiBwcm9jZXNzZXMuCj4KPiB2Mjog cmVuYW1lIHJlZmVyZW5jZS91bnJlZmVyZW5jZSB0byBwdXQvZ2V0IChDaHJpcykKPiBmaXggbGVh a2VkIHJlZmVyZW5jZSAoRGF2aWQgWmhvdSkKPiBkcm9wIG11dGV4IGluIGZhdm91ciBvZiBjbXB4 Y2hnIChDaHJpcykKPiBkb2N1bWVudCBkcm1fc3luY29ial9mZW5jZV9nZXQKPiB1c2UgRU5PRU5U IGZvciBzeW5jb2JqIGxvb2t1cC4KPgo+IFNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJs aWVkQHJlZGhhdC5jb20+Cj4KPiBmaXh1cAoKU2VlbXMgbGlrZSBhIHNtYWxsIGBnaXQgcmViYXNl IC1pYCBhcnRpZmFjdCBpcyBsZWZ0b3ZlciBoZXJlLgoKPiAtLS0KPiAgRG9jdW1lbnRhdGlvbi9n cHUvZHJtLWludGVybmFscy5yc3QgfCAgIDMgKwo+ICBEb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0u cnN0ICAgICAgICB8ICAgNiArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAg IHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jICAgICAgICAgIHwgICA4ICsK PiAgZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oICAgICAgfCAgMTMgKysKPiAgZHJpdmVy cy9ncHUvZHJtL2RybV9pb2N0bC5jICAgICAgICAgfCAgMTIgKysKPiAgZHJpdmVycy9ncHUvZHJt L2RybV9zeW5jb2JqLmMgICAgICAgfCAzODUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gIGluY2x1ZGUvZHJtL2RybVAuaCAgICAgICAgICAgICAgICAgIHwgICA1ICsKPiAg aW5jbHVkZS9kcm0vZHJtX2Rydi5oICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBpbmNsdWRlL2Ry bS9kcm1fc3luY29iai5oICAgICAgICAgICB8ICA4NyArKysrKysrKwo+ICBpbmNsdWRlL3VhcGkv ZHJtL2RybS5oICAgICAgICAgICAgICB8ICAyNSArKysKPiAgMTEgZmlsZXMgY2hhbmdlZCwgNTQ2 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9kcm1fc3luY29iai5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2Ry bS9kcm1fc3luY29iai5oCj4KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWlu dGVybmFscy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0taW50ZXJuYWxzLnJzdAo+IGluZGV4 IGUzNTkyMGQuLjJlYTNiY2UgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWlu dGVybmFscy5yc3QKPiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0taW50ZXJuYWxzLnJzdAo+ IEBAIC05OCw2ICs5OCw5IEBAIERSSVZFUl9BVE9NSUMKPiAgICAgIGltcGxlbWVudCBhcHByb3By aWF0ZSBvYmotPmF0b21pY19nZXRfcHJvcGVydHkoKSB2ZnVuY3MgZm9yIGFueQo+ICAgICAgbW9k ZXNldCBvYmplY3RzIHdpdGggZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCj4KPiArRFJJVkVS X1NZTkNPQkoKPiArICAgIERyaXZlciBzdXBwb3J0IGRybSBzeW5jIG9iamVjdHMuCj4gKwo+ICBN YWpvciwgTWlub3IgYW5kIFBhdGNobGV2ZWwKPiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ Cj4KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdCBiL0RvY3VtZW50 YXRpb24vZ3B1L2RybS1tbS5yc3QKPiBpbmRleCBmNTc2MGIxLi4yOGFlYmU4IDEwMDY0NAo+IC0t LSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKPiArKysgYi9Eb2N1bWVudGF0aW9uL2dw dS9kcm0tbW0ucnN0Cj4gQEAgLTQ4MywzICs0ODMsOSBAQCBEUk0gQ2FjaGUgSGFuZGxpbmcKPgo+ ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCj4gICAgIDpleHBv cnQ6Cj4gKwo+ICtEUk0gU3luYyBPYmplY3RzCj4gKz09PT09PT09PT09PT09PT09PT09PT09PT09 PQo+ICsKPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCj4g KyAgIDpleHBvcnQ6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGluZGV4IDNlZTk1NzkuLmI1ZTU2NWMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlCj4gQEAgLTE2LDcgKzE2LDcgQEAgZHJtLXkgICAgICAgOj0JZHJtX2F1dGgubyBkcm1f YnVmcy5vIGRybV9jYWNoZS5vIFwKPiAgCQlkcm1fZnJhbWVidWZmZXIubyBkcm1fY29ubmVjdG9y Lm8gZHJtX2JsZW5kLm8gXAo+ICAJCWRybV9lbmNvZGVyLm8gZHJtX21vZGVfb2JqZWN0Lm8gZHJt X3Byb3BlcnR5Lm8gXAo+ICAJCWRybV9wbGFuZS5vIGRybV9jb2xvcl9tZ210Lm8gZHJtX3ByaW50 Lm8gXAo+IC0JCWRybV9kdW1iX2J1ZmZlcnMubyBkcm1fbW9kZV9jb25maWcubwo+ICsJCWRybV9k dW1iX2J1ZmZlcnMubyBkcm1fbW9kZV9jb25maWcubyBkcm1fc3luY29iai5vCj4KPiAgZHJtLSQo Q09ORklHX0RSTV9MSUJfUkFORE9NKSArPSBsaWIvZHJtX3JhbmRvbS5vCj4gIGRybS0kKENPTkZJ R19EUk1fVk0pICs9IGRybV92bS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f Zm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKPiBpbmRleCBhZmRmNWIxLi45YTYx ZGYyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9mb3BzLmMKPiBAQCAtMjE5LDYgKzIxOSw5IEBAIHN0YXRpYyBpbnQg ZHJtX29wZW5faGVscGVyKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZHJtX21pbm9yICptaW5v cikKPiAgCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0dFTSkpCj4gIAkJ ZHJtX2dlbV9vcGVuKGRldiwgcHJpdik7Cj4KPiArCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJl KGRldiwgRFJJVkVSX1NZTkNPQkopKQo+ICsJCWRybV9zeW5jb2JqX29wZW4ocHJpdik7Cj4gKwo+ ICAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfUFJJTUUpKQo+ICAJCWRy bV9wcmltZV9pbml0X2ZpbGVfcHJpdmF0ZSgmcHJpdi0+cHJpbWUpOwo+Cj4gQEAgLTI2Niw2ICsy NjksOCBAQCBzdGF0aWMgaW50IGRybV9vcGVuX2hlbHBlcihzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IGRybV9taW5vciAqbWlub3IpCj4gIG91dF9wcmltZV9kZXN0cm95Ogo+ICAJaWYgKGRybV9j b3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfUFJJTUUpKQo+ICAJCWRybV9wcmltZV9kZXN0 cm95X2ZpbGVfcHJpdmF0ZSgmcHJpdi0+cHJpbWUpOwo+ICsJaWYgKGRybV9jb3JlX2NoZWNrX2Zl YXR1cmUoZGV2LCBEUklWRVJfU1lOQ09CSikpCj4gKwkJZHJtX3N5bmNvYmpfcmVsZWFzZShwcml2 KTsKPiAgCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0dFTSkpCj4gIAkJ ZHJtX2dlbV9yZWxlYXNlKGRldiwgcHJpdik7Cj4gIAlwdXRfcGlkKHByaXYtPnBpZCk7Cj4gQEAg LTQwMCw2ICs0MDUsOSBAQCBpbnQgZHJtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbHApCj4gIAkJZHJtX3Byb3BlcnR5X2Rlc3Ryb3lfdXNlcl9ibG9icyhkZXYs IGZpbGVfcHJpdik7Cj4gIAl9Cj4KPiArCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwg RFJJVkVSX1NZTkNPQkopKQo+ICsJCWRybV9zeW5jb2JqX3JlbGVhc2UoZmlsZV9wcml2KTsKPiAr Cj4gIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9HRU0pKQo+ICAJCWRy bV9nZW1fcmVsZWFzZShkZXYsIGZpbGVfcHJpdik7Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9pbnRlcm5hbC5oIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCj4g aW5kZXggZjM3Mzg4Yy4uNDRlZjkwMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2ludGVybmFsLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKPiBAQCAt MTQyLDQgKzE0MiwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBkcm1fZGVidWdmc19jcnRjX2NyY19h ZGQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICB7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICsKPiAg I2VuZGlmCj4gKwo+ICsvKiBkcm1fc3luY29iai5jICovCj4gK3ZvaWQgZHJtX3N5bmNvYmpfb3Bl bihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4gK3ZvaWQgZHJtX3N5bmNvYmpfcmVs ZWFzZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4gK2ludCBkcm1fc3luY29ial9j cmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJICAg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4gK2ludCBkcm1fc3luY29ial9kZXN0 cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCSAgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKPiAraW50IGRybV9zeW5jb2JqX2hhbmRs ZV90b19mZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQkJ ICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+ICtpbnQgZHJtX3N5bmNvYmpfZmRf dG9faGFuZGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJ CQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kcm1faW9jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYwo+IGlu ZGV4IGE3YzYxYzIuLjZkYTdhZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9p b2N0bC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCj4gQEAgLTI0MCw2ICsy NDAsOSBAQCBzdGF0aWMgaW50IGRybV9nZXRjYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlXwo+ICAJCXJlcS0+dmFsdWUgfD0gZGV2LT5k cml2ZXItPnByaW1lX2ZkX3RvX2hhbmRsZSA/IERSTV9QUklNRV9DQVBfSU1QT1JUIDogMDsKPiAg CQlyZXEtPnZhbHVlIHw9IGRldi0+ZHJpdmVyLT5wcmltZV9oYW5kbGVfdG9fZmQgPyBEUk1fUFJJ TUVfQ0FQX0VYUE9SVCA6IDA7Cj4gIAkJcmV0dXJuIDA7Cj4gKwljYXNlIERSTV9DQVBfU1lOQ09C SjoKPiArCQlyZXEtPnZhbHVlID0gZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9T WU5DT0JKKTsKPiArCQlyZXR1cm4gMDsKPiAgCX0KPgo+ICAJLyogT3RoZXIgY2FwcyBvbmx5IHdv cmsgd2l0aCBLTVMgZHJpdmVycyAqLwo+IEBAIC02NDEsNiArNjQ0LDE1IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgZHJtX2lvY3Rsc1tdID0gewo+ICAJRFJNX0lPQ1RMX0RF RihEUk1fSU9DVExfTU9ERV9BVE9NSUMsIGRybV9tb2RlX2F0b21pY19pb2N0bCwgRFJNX01BU1RF UnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAo+ICAJRFJNX0lPQ1RMX0RFRihEUk1f SU9DVExfTU9ERV9DUkVBVEVQUk9QQkxPQiwgZHJtX21vZGVfY3JlYXRlYmxvYl9pb2N0bCwgRFJN X0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKPiAgCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RM X01PREVfREVTVFJPWVBST1BCTE9CLCBkcm1fbW9kZV9kZXN0cm95YmxvYl9pb2N0bCwgRFJNX0NP TlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKPiArCj4gKwlEUk1fSU9DVExfREVGKERSTV9JT0NU TF9TWU5DT0JKX0NSRUFURSwgZHJtX3N5bmNvYmpfY3JlYXRlX2lvY3RsLAo+ICsJCSAgICAgIERS TV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RM X1NZTkNPQkpfREVTVFJPWSwgZHJtX3N5bmNvYmpfZGVzdHJveV9pb2N0bCwKPiArCQkgICAgICBE Uk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gKwlEUk1fSU9DVExfREVGKERSTV9JT0NU TF9TWU5DT0JKX0hBTkRMRV9UT19GRCwgZHJtX3N5bmNvYmpfaGFuZGxlX3RvX2ZkX2lvY3RsLAo+ ICsJCSAgICAgIERSTV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9E RUYoRFJNX0lPQ1RMX1NZTkNPQkpfRkRfVE9fSEFORExFLCBkcm1fc3luY29ial9mZF90b19oYW5k bGVfaW9jdGwsCj4gKwkJICAgICAgRFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAo+ICB9 Owo+Cj4gICNkZWZpbmUgRFJNX0NPUkVfSU9DVExfQ09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3Rs cyApCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9zeW5jb2JqLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLjgzNWU5ODcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9zeW5jb2JqLmMKPiBAQCAtMCwwICsxLDM4NSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgMjAx NyBSZWQgSGF0Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6 Cj4gKyAqCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIERPQzogT3ZlcnZpZXcKPiArICoKPiArICog RFJNIHN5bmNocm9uaXNhdGlvbiBvYmplY3RzIChzeW5jb2JqKSBhcmUgYSBwZXJzaXN0ZW50IG9i amVjdHMsCj4gKyAqIHRoYXQgY29udGFpbiBhbiBvcHRpb25hbCBmZW5jZS4gVGhlIGZlbmNlIGNh biBiZSB1cGRhdGVkIHdpdGggYSBuZXcKPiArICogZmVuY2UsIG9yIGJlIE5VTEwuCj4gKyAqCj4g KyAqIHN5bmNvYmoncyBjYW4gYmUgZXhwb3J0IHRvIGZkJ3MgYW5kIGJhY2ssIHRoZXNlIGZkJ3Mg YXJlIG9wYXF1ZSBhbmQKPiArICogaGF2ZSBubyBvdGhlciB1c2UgY2FzZSwgZXhjZXB0IHBhc3Np bmcgdGhlIHN5bmNvYmogYmV0d2VlbiBwcm9jZXNzZXMuCj4gKyAqCj4gKyAqIFRPRE86IHN5bmNf ZmlsZSBpbnRlcmFjdGlvbnMsIHdhaXRpbmcKPiArICoKPiArICogVGhlaXIgcHJpbWFyeSB1c2Ut Y2FzZSBpcyB0byBpbXBsZW1lbnQgVnVsa2FuIGZlbmNlcyBhbmQgc2VtYXBob3Jlcy4KPiArICoK PiArICogc3luY29iaiBoYXZlIGEga3JlZiByZWZlcmVuY2UgY291bnQsIGJ1dCBhbHNvIGhhdmUg YW4gb3B0aW9uYWwgZmlsZS4KPiArICogVGhlIGZpbGUgaXMgb25seSBjcmVhdGVkIG9uY2UgdGhl IHN5bmNvYmogaXMgZXhwb3J0ZWQuCj4gKyAqIFRoZSBmaWxlIHRha2VzIGEgcmVmZXJlbmNlIG9u IHRoZSBrcmVmLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZmlsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZnMuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2Fub25faW5vZGVzLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZHJtX2ludGVybmFsLmgiCj4gKyNp bmNsdWRlIDxkcm0vZHJtX3N5bmNvYmouaD4KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3N5bmNv YmogKmRybV9zeW5jb2JqX2ZpbmQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJ CQkJICAgdTMyIGhhbmRsZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqOwo+ ICsKPiArCXNwaW5fbG9jaygmZmlsZV9wcml2YXRlLT5zeW5jb2JqX3RhYmxlX2xvY2spOwo+ICsK PiArCS8qIENoZWNrIGlmIHdlIGN1cnJlbnRseSBoYXZlIGEgcmVmZXJlbmNlIG9uIHRoZSBvYmpl Y3QgKi8KPiArCXN5bmNvYmogPSBpZHJfZmluZCgmZmlsZV9wcml2YXRlLT5zeW5jb2JqX2lkciwg aGFuZGxlKTsKPiArCWlmIChzeW5jb2JqKQo+ICsJCWRybV9zeW5jb2JqX2dldChzeW5jb2JqKTsK PiArCj4gKwlzcGluX3VubG9jaygmZmlsZV9wcml2YXRlLT5zeW5jb2JqX3RhYmxlX2xvY2spOwo+ ICsKPiArCXJldHVybiBzeW5jb2JqOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX3N5bmNvYmpf cmVwbGFjZV9mZW5jZSAtIGxvb2t1cCBhbmQgcmVwbGFjZSBmZW5jZSBpbiBhIHN5bmMgb2JqZWN0 Lgo+ICsgKiBAZmlsZV9wcml2YXRlIC0gZHJtIGZpbGUgcHJpdmF0ZSBwb2ludGVyLgo+ICsgKiBA aGFuZGxlIC0gc3luY29iaiBoYW5kbGUgdG8gbG9va3VwCj4gKyAqIEBmZW5jZSAtIGZlbmNlIHRv IGluc3RhbGwgaW4gc3luYyBmaWxlLgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Ms IG9yIC1FTk9FTlQgd2hlbiB0aGUgaGFuZGxlIGRvZXNuJ3QgcG9pbnQgYXQgYSB2YWxpZCBzZW0g ZmlsZS4KPiArICoKPiArICogVGhpcyBsb29rcyB1cCBhIHN5bmMgb2JqZWN0IGFuZCByZXBsYWNl cyB0aGUgZmVuY2Ugb24gaXQsIGZyZWVpbmcKPiArICogdGhlIG9sZCBvbmUuCj4gKyAqLwo+ICtp bnQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0 ZSwKPiArCQkJICAgICAgdTMyIGhhbmRsZSwKPiArCQkJICAgICAgc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGRybV9zeW5jb2Jq X2ZpbmQoZmlsZV9wcml2YXRlLCBoYW5kbGUpOwo+ICsJc3RydWN0IGRtYV9mZW5jZSAqb2xkX2Zl bmNlID0gTlVMTDsKPiArCj4gKwlpZiAoIXN5bmNvYmopCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4g Kwo+ICsJaWYgKGZlbmNlKQo+ICsJCWRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+ICsJb2xkX2ZlbmNl ID0geGNoZygmc3luY29iai0+ZmVuY2UsIGZlbmNlKTsKPiArCj4gKwlkbWFfZmVuY2VfcHV0KG9s ZF9mZW5jZSk7Cj4gKwlkcm1fc3luY29ial9wdXQoc3luY29iaik7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKTsKPiArCj4g Ky8qKgo+ICsgKiBkcm1fc3luY29ial9mZW5jZV9nZXQgLSBsb29rdXAgc3luYyBvYmplY3QgYW5k IHJlZmVyZW5jZSBmZW5jZQo+ICsgKiBAZmlsZV9wcml2YXRlIC0gZHJtIGZpbGUgcHJpdmF0ZSBw b2ludGVyLgo+ICsgKiBAaGFuZGxlIC0gc3luY29iaiBoYW5kbGUgdG8gbG9va3VwCj4gKyAqIEBm ZW5jZSAtIHJldHVybmVkIHJlZmVyZW5jZWQgZmVuY2UKPiArICogUmV0dXJuczoKPiArICogMCBv biBzdWNjZXNzLCBvciAtRU5PRU5UIHdoZXJlIHN5bmNvYmogaXMgaW52YWxpZCwKPiArICogb3Ig LUVJTlZBTCB3aGVuIHRoZSBzeW5jb2JqIGhhcyBubyBmZW5jZS4KPiArICoKPiArICogVGhpcyBy ZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHVuZGVybHlpbmcgZmVuY2UgYmFja2luZyB0aGUKPiArICog c3luY29iaiBpZiBvbmUgZXhpc3RzLgo+ICsgKi8KPiAraW50IGRybV9zeW5jb2JqX2ZlbmNlX2dl dChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSwKPiArCQkJICB1MzIgaGFuZGxlLAo+ICsJ CQkgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2Jq ICpzeW5jb2JqID0gZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXZhdGUsIGhhbmRsZSk7Cj4gKwlp bnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIXN5bmNvYmopCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4g Kwo+ICsJKmZlbmNlID0gZG1hX2ZlbmNlX2dldChzeW5jb2JqLT5mZW5jZSk7Cj4gKwlpZiAoISpm ZW5jZSkgewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwlkcm1fc3luY29ial9wdXQoc3lu Y29iaik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX3N5bmNvYmpf ZmVuY2VfZ2V0KTsKPiArCj4gK3ZvaWQgZHJtX3N5bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAqa3Jl ZikKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqID0gY29udGFpbmVyX29mKGty ZWYsCj4gKwkJCQkJCSAgIHN0cnVjdCBkcm1fc3luY29iaiwKPiArCQkJCQkJICAgcmVmY291bnQp Owo+ICsJZG1hX2ZlbmNlX3B1dChzeW5jb2JqLT5mZW5jZSk7Cj4gKwlrZnJlZShzeW5jb2JqKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fc3luY29ial9jcmVhdGUoc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXZhdGUsCj4gKwkJCSAgICAgIHUzMiAqaGFuZGxlKQo+ICt7Cj4gKwlpbnQgcmV0 Owo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqOwo+ICsKPiArCXN5bmNvYmogPSBremFs bG9jKHNpemVvZihzdHJ1Y3QgZHJtX3N5bmNvYmopLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc3lu Y29iaikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlrcmVmX2luaXQoJnN5bmNvYmotPnJl ZmNvdW50KTsKPiArCj4gKwlpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTsKPiArCXNwaW5fbG9jaygm ZmlsZV9wcml2YXRlLT5zeW5jb2JqX3RhYmxlX2xvY2spOwo+ICsJcmV0ID0gaWRyX2FsbG9jKCZm aWxlX3ByaXZhdGUtPnN5bmNvYmpfaWRyLCBzeW5jb2JqLCAxLCAwLCBHRlBfTk9XQUlUKTsKPiAr CXNwaW5fdW5sb2NrKCZmaWxlX3ByaXZhdGUtPnN5bmNvYmpfdGFibGVfbG9jayk7Cj4gKwo+ICsJ aWRyX3ByZWxvYWRfZW5kKCk7Cj4gKwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkcm1fc3luY29i al9wdXQoc3luY29iaik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkqaGFuZGxlID0g cmV0Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfZGVz dHJveShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSwKPiArCQkJICAgICAgIHUzMiBoYW5k bGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iajsKPiArCj4gKwlzcGluX2xv Y2soJmZpbGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCXN5bmNvYmogPSBpZHJf cmVtb3ZlKCZmaWxlX3ByaXZhdGUtPnN5bmNvYmpfaWRyLCBoYW5kbGUpOwo+ICsJc3Bpbl91bmxv Y2soJmZpbGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCj4gKwlpZiAoIXN5bmNv YmopCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4gKwo+ICsJZHJtX3N5bmNvYmpfcHV0KHN5bmNvYmop Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfZmlsZV9y ZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsJ ZHJtX3N5bmNvYmpfcHV0KHN5bmNvYmopOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9zeW5jb2JqX2ZpbGVfZm9wcyA9IHsK PiArCS5yZWxlYXNlID0gZHJtX3N5bmNvYmpfZmlsZV9yZWxlYXNlLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCBkcm1fc3luY29ial9hbGxvY19maWxlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29i aikKPiArewo+ICsJc3RydWN0IGZpbGUgKmZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoInN5bmNv YmpfZmlsZSIsCj4gKwkJCQkJICAgICAgICZkcm1fc3luY29ial9maWxlX2ZvcHMsCj4gKwkJCQkJ ICAgICAgIHN5bmNvYmosIDApOwo+ICsJaWYgKElTX0VSUihmaWxlKSkKPiArCQlyZXR1cm4gUFRS X0VSUihmaWxlKTsKPiArCj4gKwlkcm1fc3luY29ial9nZXQoc3luY29iaik7Cj4gKwlpZiAoY21w eGNoZygmc3luY29iai0+ZmlsZSwgTlVMTCwgZmlsZSkpIHsKPiArCQkvKiBsb3N0IHRoZSByYWNl ICovCj4gKwkJZnB1dChmaWxlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkcm1fc3luY29ial9oYW5kbGVfdG9fZmQoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXZhdGUsCj4gKwkJCQkgICAgdTMyIGhhbmRsZSwgaW50ICpwX2ZkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJpdmF0ZSwg aGFuZGxlKTsKPiArCWludCByZXQ7Cj4gKwlpbnQgZmQ7Cj4gKwo+ICsJaWYgKCFzeW5jb2JqKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NM T0VYRUMpOwo+ICsJaWYgKGZkIDwgMCkgewo+ICsJCWRybV9zeW5jb2JqX3B1dChzeW5jb2JqKTsK PiArCQlyZXR1cm4gZmQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFzeW5jb2JqLT5maWxlKSB7Cj4gKwkJ cmV0ID0gZHJtX3N5bmNvYmpfYWxsb2NfZmlsZShzeW5jb2JqKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlnb3RvIG91dF9wdXRfZmQ7Cj4gKwl9Cj4gKwlmZF9pbnN0YWxsKGZkLCBzeW5jb2JqLT5maWxl KTsKPiArCWRybV9zeW5jb2JqX3B1dChzeW5jb2JqKTsKPiArCSpwX2ZkID0gZmQ7Cj4gKwlyZXR1 cm4gMDsKPiArb3V0X3B1dF9mZDoKPiArCXB1dF91bnVzZWRfZmQoZmQpOwo+ICsJZHJtX3N5bmNv YmpfcHV0KHN5bmNvYmopOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBkcm1fc3luY29iaiAqZHJtX3N5bmNvYmpfZmRnZXQoaW50IGZkKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZmlsZSAqZmlsZSA9IGZnZXQoZmQpOwo+ICsKPiArCWlmICghZmlsZSkKPiArCQlyZXR1cm4gTlVM TDsKPiArCWlmIChmaWxlLT5mX29wICE9ICZkcm1fc3luY29ial9maWxlX2ZvcHMpCj4gKwkJZ290 byBlcnI7Cj4gKwo+ICsJcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YTsKPiArZXJyOgo+ICsJZnB1 dChmaWxlKTsKPiArCXJldHVybiBOVUxMOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBkcm1fc3lu Y29ial9mZF90b19oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4gKwkJCQkg ICAgaW50IGZkLCB1MzIgKmhhbmRsZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5j b2JqID0gZHJtX3N5bmNvYmpfZmRnZXQoZmQpOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXN5 bmNvYmopCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogdGFrZSBhIHJlZmVyZW5jZSB0 byBwdXQgaW4gdGhlIGlkciAqLwo+ICsJZHJtX3N5bmNvYmpfZ2V0KHN5bmNvYmopOwo+ICsKPiAr CWlkcl9wcmVsb2FkKEdGUF9LRVJORUwpOwo+ICsJc3Bpbl9sb2NrKCZmaWxlX3ByaXZhdGUtPnN5 bmNvYmpfdGFibGVfbG9jayk7Cj4gKwlyZXQgPSBpZHJfYWxsb2MoJmZpbGVfcHJpdmF0ZS0+c3lu Y29ial9pZHIsIHN5bmNvYmosIDEsIDAsIEdGUF9OT1dBSVQpOwo+ICsJc3Bpbl91bmxvY2soJmZp bGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArCWlkcl9wcmVsb2FkX2VuZCgpOwo+ ICsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZnB1dChzeW5jb2JqLT5maWxlKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsJKmhhbmRsZSA9IHJldDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogZHJtX3N5bmNvYmpfb3BlbiAtIGluaXRhbGl6ZXMgc3luY29iaiBmaWxlLXBy aXZhdGUgc3RydWN0dXJlcyBhdCBkZXZub2RlIG9wZW4gdGltZQo+ICsgKiBAZGV2OiBkcm1fZGV2 aWNlIHdoaWNoIGlzIGJlaW5nIG9wZW5lZCBieSB1c2Vyc3BhY2UKPiArICogQGZpbGVfcHJpdmF0 ZTogZHJtIGZpbGUtcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gc2V0IHVwCj4gKyAqCj4gKyAqIENhbGxl ZCBhdCBkZXZpY2Ugb3BlbiB0aW1lLCBzZXRzIHVwIHRoZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5n IHJlZmNvdW50aW5nCj4gKyAqIG9mIHN5bmMgb2JqZWN0cy4KPiArICovCj4gK3ZvaWQKPiArZHJt X3N5bmNvYmpfb3BlbihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJaWRy X2luaXQoJmZpbGVfcHJpdmF0ZS0+c3luY29ial9pZHIpOwo+ICsJc3Bpbl9sb2NrX2luaXQoJmZp bGVfcHJpdmF0ZS0+c3luY29ial90YWJsZV9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ ICtkcm1fc3luY29ial9yZWxlYXNlX2hhbmRsZShpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0 YSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqID0gcHRyOwo+ICsKPiArCWRy bV9zeW5jb2JqX3B1dChzeW5jb2JqKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogZHJtX3N5bmNvYmpfcmVsZWFzZSAtIHJlbGVhc2UgZmlsZS1wcml2YXRlIHN5bmMgb2JqZWN0 IHJlc291cmNlcwo+ICsgKiBAZGV2OiBkcm1fZGV2aWNlIHdoaWNoIGlzIGJlaW5nIGNsb3NlZCBi eSB1c2Vyc3BhY2UKPiArICogQGZpbGVfcHJpdmF0ZTogZHJtIGZpbGUtcHJpdmF0ZSBzdHJ1Y3R1 cmUgdG8gY2xlYW4gdXAKPiArICoKPiArICogQ2FsbGVkIGF0IGNsb3NlIHRpbWUgd2hlbiB0aGUg ZmlscCBpcyBnb2luZyBhd2F5Lgo+ICsgKgo+ICsgKiBSZWxlYXNlcyBhbnkgcmVtYWluaW5nIHJl ZmVyZW5jZXMgb24gb2JqZWN0cyBieSB0aGlzIGZpbHAuCj4gKyAqLwo+ICt2b2lkCj4gK2RybV9z eW5jb2JqX3JlbGVhc2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCWlk cl9mb3JfZWFjaCgmZmlsZV9wcml2YXRlLT5zeW5jb2JqX2lkciwKPiArCQkgICAgICZkcm1fc3lu Y29ial9yZWxlYXNlX2hhbmRsZSwgZmlsZV9wcml2YXRlKTsKPiArCWlkcl9kZXN0cm95KCZmaWxl X3ByaXZhdGUtPnN5bmNvYmpfaWRyKTsKPiArfQo+ICsKPiAraW50Cj4gK2RybV9zeW5jb2JqX2Ny ZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQkgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial9j cmVhdGUgKmFyZ3MgPSBkYXRhOwo+ICsKPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShk ZXYsIERSSVZFUl9TWU5DT0JKKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwkvKiBubyB2 YWxpZCBmbGFncyB5ZXQgKi8KPiArCWlmIChhcmdzLT5mbGFncykKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwlyZXR1cm4gZHJtX3N5bmNvYmpfY3JlYXRlKGZpbGVfcHJpdmF0ZSwKPiArCQkJ CSAgJmFyZ3MtPmhhbmRsZSk7Cj4gK30KPiArCj4gK2ludAo+ICtkcm1fc3luY29ial9kZXN0cm95 X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCSAgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial9kZXN0 cm95ICphcmdzID0gZGF0YTsKPiArCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2 LCBEUklWRVJfU1lOQ09CSikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJLyogbWFrZSBz dXJlIHBhZGRpbmcgaXMgZW1wdHkgKi8KPiArCWlmIChhcmdzLT5wYWQpCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwlyZXR1cm4gZHJtX3N5bmNvYmpfZGVzdHJveShmaWxlX3ByaXZhdGUsIGFyZ3Mt PmhhbmRsZSk7Cj4gK30KPiArCj4gK2ludAo+ICtkcm1fc3luY29ial9oYW5kbGVfdG9fZmRfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJCSAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxl ICphcmdzID0gZGF0YTsKPiArCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBE UklWRVJfU1lOQ09CSikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJcmV0dXJuIGRybV9z eW5jb2JqX2hhbmRsZV90b19mZChmaWxlX3ByaXZhdGUsIGFyZ3MtPmhhbmRsZSwKPiArCQkJCQkm YXJncy0+ZmQpOwo+ICt9Cj4gKwo+ICtpbnQKPiArZHJtX3N5bmNvYmpfZmRfdG9faGFuZGxlX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCQkgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9zeW5jb2JqX2hhbmRs ZSAqYXJncyA9IGRhdGE7Cj4gKwo+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwg RFJJVkVSX1NZTkNPQkopKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJldHVybiBkcm1f c3luY29ial9mZF90b19oYW5kbGUoZmlsZV9wcml2YXRlLCBhcmdzLT5mZCwKPiArCQkJCQkmYXJn cy0+aGFuZGxlKTsKPiArfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNs dWRlL2RybS9kcm1QLmgKPiBpbmRleCA2MTA1YzA1Li4xZDQ4ZjZmIDEwMDY0NAo+IC0tLSBhL2lu Y2x1ZGUvZHJtL2RybVAuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybVAuaAo+IEBAIC00MDUsNiAr NDA1LDExIEBAIHN0cnVjdCBkcm1fZmlsZSB7Cj4gIAkvKiogTG9jayBmb3Igc3luY2hyb25pemF0 aW9uIG9mIGFjY2VzcyB0byBvYmplY3RfaWRyLiAqLwo+ICAJc3BpbmxvY2tfdCB0YWJsZV9sb2Nr Owo+Cj4gKwkvKiogTWFwcGluZyBvZiBzeW5jIG9iamVjdCBoYW5kbGVzIHRvIG9iamVjdCBwb2lu dGVycy4gKi8KPiArCXN0cnVjdCBpZHIgc3luY29ial9pZHI7Cj4gKwkvKiogTG9jayBmb3Igc3lu Y2hyb25pemF0aW9uIG9mIGFjY2VzcyB0byBzeW5jb2JqX2lkci4gKi8KPiArCXNwaW5sb2NrX3Qg c3luY29ial90YWJsZV9sb2NrOwo+ICsKPiAgCXN0cnVjdCBmaWxlICpmaWxwOwo+ICAJdm9pZCAq ZHJpdmVyX3ByaXY7Cj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Rydi5oIGIvaW5j bHVkZS9kcm0vZHJtX2Rydi5oCj4gaW5kZXggNTY5OWY0Mi4uNDhmZjA2YiAxMDA2NDQKPiAtLS0g YS9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKPiBA QCAtNTMsNiArNTMsNyBAQCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7Cj4gICNkZWZpbmUg RFJJVkVSX1JFTkRFUgkJCTB4ODAwMAo+ICAjZGVmaW5lIERSSVZFUl9BVE9NSUMJCQkweDEwMDAw Cj4gICNkZWZpbmUgRFJJVkVSX0tNU19MRUdBQ1lfQ09OVEVYVAkweDIwMDAwCj4gKyNkZWZpbmUg RFJJVkVSX1NZTkNPQkogICAgICAgICAgICAgICAgICAweDQwMDAwCj4KPiAgLyoqCj4gICAqIHN0 cnVjdCBkcm1fZHJpdmVyIC0gRFJNIGRyaXZlciBzdHJ1Y3R1cmUKPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX3N5bmNvYmouaCBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjMxOTY3NDUKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+IEBAIC0wLDAgKzEsODcgQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTcgUmVkIEhhdAo+ICsgKgo+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAr ICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNv ZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRX QVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKgo+ICsgKi8KPiArI2lmbmRlZiBfX0RSTV9T WU5DT0JKX0hfXwo+ICsjZGVmaW5lIF9fRFJNX1NZTkNPQkpfSF9fCj4gKwo+ICsjaW5jbHVkZSAi bGludXgvZG1hLWZlbmNlLmgiCj4gKwo+ICsvKioKPiArICogc3RydWN0IGRybV9zeW5jb2JqIC0g c3luYyBvYmplY3QuCj4gKyAqCj4gKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYSBnZW5lcmlj IHN5bmMgb2JqZWN0IHdoaWNoIHdyYXBzIGEgZG1hIGZlbmNlLgo+ICsgKi8KPiArc3RydWN0IGRy bV9zeW5jb2JqIHsKPiArCS8qKgo+ICsJICogQHJlZmNvdW50Ogo+ICsJICoKPiArCSAqIFJlZmVy ZW5jZSBjb3VudCBvZiB0aGlzIG9iamVjdC4KPiArCSAqLwo+ICsJc3RydWN0IGtyZWYgcmVmY291 bnQ7Cj4gKwkvKioKPiArCSAqIEBmZW5jZToKPiArCSAqIE5VTEwgb3IgYSBwb2ludGVyIHRvIHRo ZSBmZW5jZSBib3VuZCB0byB0aGlzIG9iamVjdC4KPiArCSAqLwo+ICsJc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2U7Cj4gKwkvKioKPiArCSAqIEBmaWxlCj4gKwkgKiBhIGZpbGUgYmFja2luZyBmb3Ig dGhpcyBzeW5jb2JqLgo+ICsJICovCj4gKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKPiArfTsKPiArCj4g K3ZvaWQgZHJtX3N5bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gKwo+ICsvKioKPiAr ICogZHJtX3N5bmNvYmpfZ2V0IC0gYWNxdWlyZSBhIHN5bmNvYmogcmVmZXJlbmNlCj4gKyAqIEBv Ymo6IHN5bmMgb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMgYWNxdWlyZXMgYWRkaXRpb25hbCByZWZl cmVuY2UgdG8gQG9iai4gSXQgaXMgaWxsZWdhbCB0byBjYWxsIHRoaXMKPiArICogd2l0aG91dCBh bHJlYWR5IGhvbGRpbmcgYSByZWZlcmVuY2UuIE5vIGxvY2tzIHJlcXVpcmVkLgo+ICsgKi8KPiAr c3RhdGljIGlubGluZSB2b2lkCj4gK2RybV9zeW5jb2JqX2dldChzdHJ1Y3QgZHJtX3N5bmNvYmog Km9iaikKPiArewo+ICsJa3JlZl9nZXQoJm9iai0+cmVmY291bnQpOwo+ICt9Cj4gKwo+ICsvKioK PiArICogZHJtX3N5bmNvYmpfcHV0IC0gcmVsZWFzZSBhIHJlZmVyZW5jZSB0byBhIHN5bmMgb2Jq ZWN0Lgo+ICsgKiBAb2JqOiBzeW5jIG9iamVjdC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZAo+ICtkcm1fc3luY29ial9wdXQoc3RydWN0IGRybV9zeW5jb2JqICpvYmopCj4gK3sKPiArCWty ZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fc3luY29ial9mcmVlKTsKPiArfQo+ICsKPiAraW50 IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSwKPiAr CQkJICB1MzIgaGFuZGxlLAo+ICsJCQkgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSk7Cj4gK2lu dCBkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRl LAo+ICsJCQkgICAgICB1MzIgaGFuZGxlLAo+ICsJCQkgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZSk7Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm0u aCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPiBpbmRleCBiMmM1Mjg0Li5kZDBiOTljIDEwMDY0 NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPiArKysgYi9pbmNsdWRlL3VhcGkvZHJt L2RybS5oCj4gQEAgLTY0Nyw2ICs2NDcsNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vcGVuIHsKPiAgI2Rl ZmluZSBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQJCTB4OQo+ICAjZGVmaW5lIERSTV9DQVBfQURERkIy X01PRElGSUVSUwkweDEwCj4gICNkZWZpbmUgRFJNX0NBUF9QQUdFX0ZMSVBfVEFSR0VUCTB4MTEK PiArI2RlZmluZSBEUk1fQ0FQX1NZTkNPQkoJCTB4MTMKPgo+ICAvKiogRFJNX0lPQ1RMX0dFVF9D QVAgaW9jdGwgYXJndW1lbnQgdHlwZSAqLwo+ICBzdHJ1Y3QgZHJtX2dldF9jYXAgewo+IEBAIC02 OTYsNiArNjk3LDI1IEBAIHN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIHsKPiAgCV9fczMyIGZkOwo+ ICB9Owo+Cj4gK3N0cnVjdCBkcm1fc3luY29ial9jcmVhdGUgewo+ICsJX191MzIgaGFuZGxlOwo+ ICsJX191MzIgZmxhZ3M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX3N5bmNvYmpfZGVzdHJveSB7 Cj4gKwlfX3UzMiBoYW5kbGU7Cj4gKwlfX3UzMiBwYWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJt X3N5bmNvYmpfaGFuZGxlIHsKPiArCV9fdTMyIGhhbmRsZTsKPiArCS8qKiBGbGFncy4uIG9ubHkg YXBwbGljYWJsZSBmb3IgaGFuZGxlLT5mZCAqLwo+ICsJX191MzIgZmxhZ3M7Cj4gKwo+ICsJX19z MzIgZmQ7Cj4gKwlfX3UzMiBwYWQ7Cj4gK307Cj4gKwo+ICAjaWYgZGVmaW5lZChfX2NwbHVzcGx1 cykKPiAgfQo+ICAjZW5kaWYKPiBAQCAtODE0LDYgKzgzNCwxMSBAQCBleHRlcm4gIkMiIHsKPiAg I2RlZmluZSBEUk1fSU9DVExfTU9ERV9DUkVBVEVQUk9QQkxPQglEUk1fSU9XUigweEJELCBzdHJ1 Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IpCj4gICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfREVTVFJP WVBST1BCTE9CCURSTV9JT1dSKDB4QkUsIHN0cnVjdCBkcm1fbW9kZV9kZXN0cm95X2Jsb2IpCj4K PiArI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9DUkVBVEUJRFJNX0lPV1IoMHhCRiwgc3RydWN0 IGRybV9zeW5jb2JqX2NyZWF0ZSkKPiArI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9ERVNUUk9Z CURSTV9JT1dSKDB4QzAsIHN0cnVjdCBkcm1fc3luY29ial9kZXN0cm95KQo+ICsjZGVmaW5lIERS TV9JT0NUTF9TWU5DT0JKX0hBTkRMRV9UT19GRAlEUk1fSU9XUigweEMxLCBzdHJ1Y3QgZHJtX3N5 bmNvYmpfaGFuZGxlKQo+ICsjZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JKX0ZEX1RPX0hBTkRMRQlE Uk1fSU9XUigweEMyLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlKQo+ICsKPiAgLyoqCj4gICAq IERldmljZSBzcGVjaWZpYyBpb2N0bHMgc2hvdWxkIG9ubHkgYmUgaW4gdGhlaXIgcmVzcGVjdGl2 ZSBoZWFkZXJzCj4gICAqIFRoZSBkZXZpY2Ugc3BlY2lmaWMgaW9jdGwgcmFuZ2UgaXMgZnJvbSAw eDQwIHRvIDB4OWYuCj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==