From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 2/4] drm/gem: Add drm_gem_object_funcs Date: Mon, 1 Oct 2018 09:44:27 +0200 Message-ID: <20181001074427.GN11082@phenom.ffwll.local> References: <20180926145933.22034-1-noralf@tronnes.org> <20180926145933.22034-3-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7BCFB89E35 for ; Mon, 1 Oct 2018 07:44:31 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id u23so13242609edx.10 for ; Mon, 01 Oct 2018 00:44:31 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180926145933.22034-3-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: sam@ravnborg.org, david@lechnology.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBTZXAgMjYsIDIwMTggYXQgMDQ6NTk6MzFQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgYWRkcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0YWJsZSBvbiBHRU0gb2Jq ZWN0cy4KPiBUaGUgbWFpbiBiZW5lZml0IGlzIGZvciBkcml2ZXJzIHRoYXQgc3VwcG9ydCBtb3Jl IHRoYW4gb25lIHR5cGUgb2YKPiBtZW1vcnkgKHNobWVtLHZyYW0sY21hKSBmb3IgdGhlaXIgYnVm ZmVycyBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGl0Cj4gcnVucyBvbi4gV2l0aCB0aGUgY2Fs bGJhY2tzIGF0dGFjaGVkIHRvIHRoZSBHRU0gb2JqZWN0IGl0c2VsZiwgaXQgaXMKPiBlYXNpZXIg dG8gaGF2ZSBjb3JlIGhlbHBlcnMgZm9yIHRoZSB0aGUgdmFyaW91cyBidWZmZXIgdHlwZXMuIFRo ZSBkcml2ZXIKPiBvbmx5IGhhcyB0byBtYWtlIHRoZSBkZWNpc2lvbiBhYm91dCBidWZmZXIgdHlw ZSBvbiBHRU0gb2JqZWN0IGNyZWF0aW9uCj4gYW5kIGFsbCBvdGhlciBjYWxsYmFja3MgY2FuIGJl IGhhbmRsZWQgYnkgdGhlIGNob3NlbiBoZWxwZXIuCj4gCj4gZHJtX2RyaXZlci0+Z2VtX3ByaW1l X3Jlc19vYmogaGFzIG5vdCBiZWVuIGFkZGVkIHNpbmNlIHRoZXJlJ3MgYSB0b2RvIHRvCj4gcHV0 IGEgcmVzZXJ2YXRpb25fb2JqZWN0IGludG8gZHJtX2dlbV9vYmplY3QuCj4gCj4gU2lnbmVkLW9m Zi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gLS0tCj4gCj4gQ2hh bmdlcyBzaW5jZSBSRkM6Cj4gLSBkcm1fZ2VtX29iamVjdF9mdW5jcy5tYXAgLT4gLnByaW1lX21h cCBsZXQgaXQgb25seSBkbyBQUklNRSBtbWFwIGxpa2UKPiAgIHRoZSBmdW5jdGlvbiBpdCBzdXBl cnNlZWRzIChEYW5pZWwgVmV0dGVyKQo+IC0gRmxpcCBhcm91bmQgdGhlIGlmIGxhZGRlcnMgYW5k IG1ha2Ugb2JqLT5mdW5jcyB0aGUgZmlyc3QgY2hvaWNlCj4gICBoaWdobGlnaHRpbmcgdGhlIGZh Y3QgdGhhdCB0aGlzIHRoZSBuZXcgZGVmYXVsdCB3YXkgb2YgZG9pbmcgaXQKPiAgIChEYW5pZWwg VmV0dGVyKQoKSSBrbm93IGV2ZXJ5IHN1YnN5dGVtIGlzIGRpZmZlcmVudCwgYnV0IEkgbGlrZSB0 byBrZWVwIHRoZSBwZXItcGF0Y2gKY2hhbmdlbG9nIG9uIHRoZSBwZXJtYW5lbiByZWNvcmQuIEl0 J3MgYWxyZWFkeSByZWFsbHkgaGFyZCB0byBzdGl0Y2gKdG9nZXRoZXIgdGhlIGV2b2x1dGlvbiBv ZiBhIHBhdGNoIGlkZWEgYWZ0ZXIgaXQncyBtZXJnZWQsIHRoaXMgaGVscHMgYQpsaXR0bGUgYml0 IGlmIGl0J3MgcmVhZGlseSBhdmFpbGFibGUuCgpPbiB0aGUgZmlyc3QgMiBwYXRjaGVzOgoKQWNr ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CgpPbmUgbml0IGJl bG93LgoKPiAKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYyAgICB8ICAxMiArKy0tCj4g IGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgfCAgIDggKystCj4gIGRyaXZlcnMvZ3B1 L2RybS9kcm1fZ2VtLmMgICAgICAgfCAxMDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMgICAgIHwgIDQyICsrKysrKy0tLS0tLQo+ ICBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgIHwgMTQwICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiAgNSBmaWxlcyBjaGFuZ2VkLCAyNzIgaW5zZXJ0aW9u cygrKSwgMzkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fY2xpZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCj4gaW5kZXggMTdkOWE2 NGU4ODVlLi5lY2E3MzMxNzYyZTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9j bGllbnQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKPiBAQCAtODAsOCAr ODAsNyBAQCBpbnQgZHJtX2NsaWVudF9uZXcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9jbGllbnRfZGV2ICpjbGllbnQsCj4gIHsKPiAgCWludCByZXQ7Cj4gIAo+IC0JaWYgKCFk cm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpIHx8Cj4gLQkgICAgIWRl di0+ZHJpdmVyLT5kdW1iX2NyZWF0ZSB8fCAhZGV2LT5kcml2ZXItPmdlbV9wcmltZV92bWFwKQo+ ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpIHx8ICFk ZXYtPmRyaXZlci0+ZHVtYl9jcmVhdGUpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAg CWlmIChmdW5jcyAmJiAhdHJ5X21vZHVsZV9nZXQoZnVuY3MtPm93bmVyKSkKPiBAQCAtMjEyLDgg KzIxMSw3IEBAIHN0YXRpYyB2b2lkIGRybV9jbGllbnRfYnVmZmVyX2RlbGV0ZShzdHJ1Y3QgZHJt X2NsaWVudF9idWZmZXIgKmJ1ZmZlcikKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGJ1ZmZlci0+Y2xpZW50LT5kZXY7Cj4gIAo+IC0JaWYgKGJ1ZmZlci0+dmFkZHIgJiYgZGV2LT5k cml2ZXItPmdlbV9wcmltZV92dW5tYXApCj4gLQkJZGV2LT5kcml2ZXItPmdlbV9wcmltZV92dW5t YXAoYnVmZmVyLT5nZW0sIGJ1ZmZlci0+dmFkZHIpOwo+ICsJZHJtX2dlbV92dW5tYXAoYnVmZmVy LT5nZW0sIGJ1ZmZlci0+dmFkZHIpOwo+ICAKPiAgCWlmIChidWZmZXItPmdlbSkKPiAgCQlkcm1f Z2VtX29iamVjdF9wdXRfdW5sb2NrZWQoYnVmZmVyLT5nZW0pOwo+IEBAIC0yNjYsOSArMjY0LDkg QEAgZHJtX2NsaWVudF9idWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50 LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsIHUKPiAgCSAqIGZkX2luc3RhbGwgc3RlcCBvdXQgb2Yg dGhlIGRyaXZlciBiYWNrZW5kIGhvb2tzLCB0byBtYWtlIHRoYXQKPiAgCSAqIGZpbmFsIHN0ZXAg b3B0aW9uYWwgZm9yIGludGVybmFsIHVzZXJzLgo+ICAJICovCj4gLQl2YWRkciA9IGRldi0+ZHJp dmVyLT5nZW1fcHJpbWVfdm1hcChvYmopOwo+IC0JaWYgKCF2YWRkcikgewo+IC0JCXJldCA9IC1F Tk9NRU07Cj4gKwl2YWRkciA9IGRybV9nZW1fdm1hcChvYmopOwo+ICsJaWYgKElTX0VSUih2YWRk cikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHZhZGRyKTsKPiAgCQlnb3RvIGVycl9kZWxldGU7Cj4g IAl9Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+IGluZGV4IGJmMjE5MGM1YWRkNS4uMGFm NDA1YmVjZWRhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gQEAgLTM4LDYgKzM4LDcg QEAKPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4K PiAgI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dl bS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWMuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+IEBA IC0zMDEwLDkgKzMwMTEsMTIgQEAgc3RhdGljIHZvaWQgZHJtX2ZiZGV2X2ZiX2Rlc3Ryb3koc3Ry dWN0IGZiX2luZm8gKmluZm8pCj4gIHN0YXRpYyBpbnQgZHJtX2ZiZGV2X2ZiX21tYXAoc3RydWN0 IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICB7Cj4gIAlzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOwo+ICsJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSBmYl9oZWxwZXItPmJ1ZmZlci0+Z2VtOwo+ICAKPiAtCWlmIChmYl9o ZWxwZXItPmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfbW1hcCkKPiAtCQlyZXR1cm4gZmJfaGVscGVy LT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX21tYXAoZmJfaGVscGVyLT5idWZmZXItPmdlbSwgdm1h KTsKPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnByaW1lX21tYXApCj4gKwkJcmV0 dXJuIG9iai0+ZnVuY3MtPnByaW1lX21tYXAob2JqLCB2bWEpOwo+ICsJZWxzZSBpZiAob2JqLT5k ZXYtPmRyaXZlci0+Z2VtX3ByaW1lX21tYXApCj4gKwkJcmV0dXJuIG9iai0+ZGV2LT5kcml2ZXIt PmdlbV9wcmltZV9tbWFwKG9iaiwgdm1hKTsKClRoaXMgaWYgbGFkZGVyIGV4aXN0cyB0d2ljZSwg d291bGQgYmUgZ29vZCB0byBleHRyYWN0IGludG8gYSBsaXR0bGUKaGVscGVyLgoKQ2hlZXJzLCBE YW5pZWwKCj4gIAllbHNlCj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiBp bmRleCA1MTIwNzhlYmQ5N2IuLmRjZWE2ZjgyMjlhNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwo+IEBAIC0y NTcsNyArMjU3LDkgQEAgZHJtX2dlbV9vYmplY3RfcmVsZWFzZV9oYW5kbGUoaW50IGlkLCB2b2lk ICpwdHIsIHZvaWQgKmRhdGEpCj4gIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsK PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKPiAgCj4gLQlpZiAoZGV2LT5k cml2ZXItPmdlbV9jbG9zZV9vYmplY3QpCj4gKwlpZiAob2JqLT5mdW5jcyAmJiBvYmotPmZ1bmNz LT5jbG9zZSkKPiArCQlvYmotPmZ1bmNzLT5jbG9zZShvYmosIGZpbGVfcHJpdik7Cj4gKwllbHNl IGlmIChkZXYtPmRyaXZlci0+Z2VtX2Nsb3NlX29iamVjdCkKPiAgCQlkZXYtPmRyaXZlci0+Z2Vt X2Nsb3NlX29iamVjdChvYmosIGZpbGVfcHJpdik7Cj4gIAo+ICAJaWYgKGRybV9jb3JlX2NoZWNr X2ZlYXR1cmUoZGV2LCBEUklWRVJfUFJJTUUpKQo+IEBAIC00MTAsNyArNDEyLDExIEBAIGRybV9n ZW1faGFuZGxlX2NyZWF0ZV90YWlsKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICAJaWYg KHJldCkKPiAgCQlnb3RvIGVycl9yZW1vdmU7Cj4gIAo+IC0JaWYgKGRldi0+ZHJpdmVyLT5nZW1f b3Blbl9vYmplY3QpIHsKPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPm9wZW4pIHsK PiArCQlyZXQgPSBvYmotPmZ1bmNzLT5vcGVuKG9iaiwgZmlsZV9wcml2KTsKPiArCQlpZiAocmV0 KQo+ICsJCQlnb3RvIGVycl9yZXZva2U7Cj4gKwl9IGVsc2UgaWYgKGRldi0+ZHJpdmVyLT5nZW1f b3Blbl9vYmplY3QpIHsKPiAgCQlyZXQgPSBkZXYtPmRyaXZlci0+Z2VtX29wZW5fb2JqZWN0KG9i aiwgZmlsZV9wcml2KTsKPiAgCQlpZiAocmV0KQo+ICAJCQlnb3RvIGVycl9yZXZva2U7Cj4gQEAg LTgzNSw3ICs4NDEsOSBAQCBkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQo+ ICAJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QsIHJlZmNvdW50KTsK PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKPiAgCj4gLQlpZiAoZGV2LT5k cml2ZXItPmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCkgewo+ICsJaWYgKG9iai0+ZnVuY3MpIHsK PiArCQlvYmotPmZ1bmNzLT5mcmVlKG9iaik7Cj4gKwl9IGVsc2UgaWYgKGRldi0+ZHJpdmVyLT5n ZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQpIHsKPiAgCQlkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2Jq ZWN0X3VubG9ja2VkKG9iaik7Cj4gIAl9IGVsc2UgaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9v YmplY3QpIHsKPiAgCQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4 KSk7Cj4gQEAgLTg2NCwxMyArODcyLDEzIEBAIGRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiAgCj4gIAlkZXYgPSBvYmotPmRldjsKPiAgCj4g LQlpZiAoZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCkgewo+IC0JCWtyZWZf cHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlKTsKPiAtCX0gZWxzZSB7Cj4g KwlpZiAoZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdCkgewo+ICAJCW1pZ2h0X2xvY2soJmRl di0+c3RydWN0X211dGV4KTsKPiAgCQlpZiAoa3JlZl9wdXRfbXV0ZXgoJm9iai0+cmVmY291bnQs IGRybV9nZW1fb2JqZWN0X2ZyZWUsCj4gIAkJCQkmZGV2LT5zdHJ1Y3RfbXV0ZXgpKQo+ICAJCQlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCX0gZWxzZSB7Cj4gKwkJa3JlZl9w dXQoJm9iai0+cmVmY291bnQsIGRybV9nZW1fb2JqZWN0X2ZyZWUpOwo+ICAJfQo+ICB9Cj4gIEVY UE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKTsKPiBAQCAtOTYwLDExICs5 NjgsMTQgQEAgaW50IGRybV9nZW1fbW1hcF9vYmooc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IHVuc2lnbmVkIGxvbmcgb2JqX3NpemUsCj4gIAlpZiAob2JqX3NpemUgPCB2bWEtPnZtX2VuZCAt IHZtYS0+dm1fc3RhcnQpCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+IC0JaWYgKCFkZXYtPmRy aXZlci0+Z2VtX3ZtX29wcykKPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnZtX29w cykKPiArCQl2bWEtPnZtX29wcyA9IG9iai0+ZnVuY3MtPnZtX29wczsKPiArCWVsc2UgaWYgKGRl di0+ZHJpdmVyLT5nZW1fdm1fb3BzKQo+ICsJCXZtYS0+dm1fb3BzID0gZGV2LT5kcml2ZXItPmdl bV92bV9vcHM7Cj4gKwllbHNlCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+ICAJdm1hLT52bV9m bGFncyB8PSBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUDsK PiAtCXZtYS0+dm1fb3BzID0gZGV2LT5kcml2ZXItPmdlbV92bV9vcHM7Cj4gIAl2bWEtPnZtX3By aXZhdGVfZGF0YSA9IG9iajsKPiAgCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29t YmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpKTsKPiAgCXZtYS0+dm1fcGFnZV9w cm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Cj4gQEAgLTEwNjYsNiAr MTA3Nyw4NiBAQCB2b2lkIGRybV9nZW1fcHJpbnRfaW5mbyhzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAs IHVuc2lnbmVkIGludCBpbmRlbnQsCj4gIAlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJp bXBvcnRlZD0lc1xuIiwKPiAgCQkJICBvYmotPmltcG9ydF9hdHRhY2ggPyAieWVzIiA6ICJubyIp Owo+ICAKPiAtCWlmIChvYmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbnRfaW5mbykKPiArCWlmIChv YmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnByaW50X2luZm8pCj4gKwkJb2JqLT5mdW5jcy0+cHJp bnRfaW5mbyhwLCBpbmRlbnQsIG9iaik7Cj4gKwllbHNlIGlmIChvYmotPmRldi0+ZHJpdmVyLT5n ZW1fcHJpbnRfaW5mbykKPiAgCQlvYmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbnRfaW5mbyhwLCBp bmRlbnQsIG9iaik7Cj4gIH0KPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3BpbiAtIFBpbiBiYWNr aW5nIGJ1ZmZlciBpbiBtZW1vcnkKPiArICogQG9iajogR0VNIG9iamVjdAo+ICsgKgo+ICsgKiBN YWtlIHN1cmUgdGhlIGJhY2tpbmcgYnVmZmVyIGlzIHBpbm5lZCBpbiBtZW1vcnkuCj4gKyAqCj4g KyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4KPiArICovCj4gK2ludCBkcm1fZ2VtX3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiArewo+ICsJaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+cGluKQo+ICsJ CXJldHVybiBvYmotPmZ1bmNzLT5waW4ob2JqKTsKPiArCWVsc2UgaWYgKG9iai0+ZGV2LT5kcml2 ZXItPmdlbV9wcmltZV9waW4pCj4gKwkJcmV0dXJuIG9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmlt ZV9waW4ob2JqKTsKPiArCWVsc2UKPiArCQlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9M KGRybV9nZW1fcGluKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2VtX3BpbiAtIFVucGluIGJhY2tp bmcgYnVmZmVyIGZyb20gbWVtb3J5Cj4gKyAqIEBvYmo6IEdFTSBvYmplY3QKPiArICoKPiArICog UmVsYXggdGhlIHJlcXVpcmVtZW50IHRoYXQgdGhlIGJhY2tpbmcgYnVmZmVyIGlzIHBpbm5lZCBp biBtZW1vcnkuCj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gK3sKPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnVucGluKQo+ ICsJCW9iai0+ZnVuY3MtPnVucGluKG9iaik7Cj4gKwllbHNlIGlmIChvYmotPmRldi0+ZHJpdmVy LT5nZW1fcHJpbWVfdW5waW4pCj4gKwkJb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3VucGlu KG9iaik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3VucGluKTsKPiArCj4gKy8qKgo+ ICsgKiBkcm1fZ2VtX3ZtYXAgLSBNYXAgYnVmZmVyIGludG8ga2VybmVsIHZpcnR1YWwgYWRkcmVz cyBzcGFjZQo+ICsgKiBAb2JqOiBHRU0gb2JqZWN0Cj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAq IEEgdmlydHVhbCBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0gb2JqZWN0IG9yIGFuIEVS Ul9QVFItZW5jb2RlZCBuZWdhdGl2ZQo+ICsgKiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAq Lwo+ICt2b2lkICpkcm1fZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sK PiArCXZvaWQgKnZhZGRyOwo+ICsKPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnZt YXApCj4gKwkJdmFkZHIgPSBvYmotPmZ1bmNzLT52bWFwKG9iaik7Cj4gKwllbHNlIGlmIChvYmot PmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdm1hcCkKPiArCQl2YWRkciA9IG9iai0+ZGV2LT5kcml2 ZXItPmdlbV9wcmltZV92bWFwKG9iaik7Cj4gKwllbHNlCj4gKwkJdmFkZHIgPSBFUlJfUFRSKC1F T1BOT1RTVVBQKTsKPiArCj4gKwlpZiAoIXZhZGRyKQo+ICsJCXZhZGRyID0gRVJSX1BUUigtRU5P TUVNKTsKPiArCj4gKwlyZXR1cm4gdmFkZHI7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2Vt X3ZtYXApOwo+ICsKPiArLyoqCj4gKyAqIGRybV9nZW1fdnVubWFwIC0gUmVtb3ZlIGJ1ZmZlciBt YXBwaW5nIGZyb20ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQo+ICsgKiBAb2JqOiBHRU0g b2JqZWN0Cj4gKyAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzIChjYW4gYmUgTlVMTCkKPiArICov Cj4gK3ZvaWQgZHJtX2dlbV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQg KnZhZGRyKQo+ICt7Cj4gKwlpZiAoIXZhZGRyKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAob2Jq LT5mdW5jcyAmJiBvYmotPmZ1bmNzLT52dW5tYXApCj4gKwkJb2JqLT5mdW5jcy0+dnVubWFwKG9i aiwgdmFkZHIpOwo+ICsJZWxzZSBpZiAob2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3Z1bm1h cCkKPiArCQlvYmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdnVubWFwKG9iaiwgdmFkZHIpOwo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92dW5tYXApOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMKPiBp bmRleCA2NzIxNTcxNzQ5ZmYuLmYyMzFjMTk5ZDM4ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX3ByaW1lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMKPiBA QCAtMTk5LDcgKzE5OSw2IEBAIGludCBkcm1fZ2VtX21hcF9hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYV9idWYsCj4gIHsKPiAgCXN0cnVjdCBkcm1fcHJpbWVfYXR0YWNobWVudCAqcHJpbWVfYXR0 YWNoOwo+ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2Owo+IC0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2Owo+ICAKPiAgCXByaW1lX2F0dGFjaCA9 IGt6YWxsb2Moc2l6ZW9mKCpwcmltZV9hdHRhY2gpLCBHRlBfS0VSTkVMKTsKPiAgCWlmICghcHJp bWVfYXR0YWNoKQo+IEBAIC0yMDgsMTAgKzIwNyw3IEBAIGludCBkcm1fZ2VtX21hcF9hdHRhY2go c3RydWN0IGRtYV9idWYgKmRtYV9idWYsCj4gIAlwcmltZV9hdHRhY2gtPmRpciA9IERNQV9OT05F Owo+ICAJYXR0YWNoLT5wcml2ID0gcHJpbWVfYXR0YWNoOwo+ICAKPiAtCWlmICghZGV2LT5kcml2 ZXItPmdlbV9wcmltZV9waW4pCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0dXJuIGRldi0+ZHJp dmVyLT5nZW1fcHJpbWVfcGluKG9iaik7Cj4gKwlyZXR1cm4gZHJtX2dlbV9waW4ob2JqKTsKPiAg fQo+ICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fbWFwX2F0dGFjaCk7Cj4gIAo+IEBAIC0yMjgsNyAr MjI0LDYgQEAgdm9pZCBkcm1fZ2VtX21hcF9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9idWYs Cj4gIHsKPiAgCXN0cnVjdCBkcm1fcHJpbWVfYXR0YWNobWVudCAqcHJpbWVfYXR0YWNoID0gYXR0 YWNoLT5wcml2Owo+ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2 Owo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2Owo+ICAKPiAgCWlmIChwcmlt ZV9hdHRhY2gpIHsKPiAgCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IHByaW1lX2F0dGFjaC0+c2d0 Owo+IEBAIC0yNDcsOCArMjQyLDcgQEAgdm9pZCBkcm1fZ2VtX21hcF9kZXRhY2goc3RydWN0IGRt YV9idWYgKmRtYV9idWYsCj4gIAkJYXR0YWNoLT5wcml2ID0gTlVMTDsKPiAgCX0KPiAgCj4gLQlp ZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV91bnBpbikKPiAtCQlkZXYtPmRyaXZlci0+Z2VtX3By aW1lX3VucGluKG9iaik7Cj4gKwlkcm1fZ2VtX3VucGluKG9iaik7Cj4gIH0KPiAgRVhQT1JUX1NZ TUJPTChkcm1fZ2VtX21hcF9kZXRhY2gpOwo+ICAKPiBAQCAtMzEwLDcgKzMwNCwxMCBAQCBzdHJ1 Y3Qgc2dfdGFibGUgKmRybV9nZW1fbWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAJaWYgKFdBUk5fT04ocHJpbWVfYXR0YWNoLT5kaXIgIT0gRE1BX05PTkUp KQo+ICAJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Cj4gIAo+IC0Jc2d0ID0gb2JqLT5kZXYtPmRy aXZlci0+Z2VtX3ByaW1lX2dldF9zZ190YWJsZShvYmopOwo+ICsJaWYgKG9iai0+ZnVuY3MpCj4g KwkJc2d0ID0gb2JqLT5mdW5jcy0+Z2V0X3NnX3RhYmxlKG9iaik7Cj4gKwllbHNlCj4gKwkJc2d0 ID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2dldF9zZ190YWJsZShvYmopOwo+ICAKPiAg CWlmICghSVNfRVJSKHNndCkpIHsKPiAgCQlpZiAoIWRtYV9tYXBfc2dfYXR0cnMoYXR0YWNoLT5k ZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLCBkaXIsCj4gQEAgLTQwNiwxMiArNDAzLDEzIEBAIEVY UE9SVF9TWU1CT0woZHJtX2dlbV9kbWFidWZfcmVsZWFzZSk7Cj4gIHZvaWQgKmRybV9nZW1fZG1h YnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBvYmotPmRldjsKPiArCXZvaWQgKnZhZGRyOwo+ICAKPiAtCWlmIChkZXYtPmRyaXZlci0+Z2Vt X3ByaW1lX3ZtYXApCj4gLQkJcmV0dXJuIGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdm1hcChvYmop Owo+IC0JZWxzZQo+IC0JCXJldHVybiBOVUxMOwo+ICsJdmFkZHIgPSBkcm1fZ2VtX3ZtYXAob2Jq KTsKPiArCWlmIChJU19FUlIodmFkZHIpKQo+ICsJCXZhZGRyID0gTlVMTDsKPiArCj4gKwlyZXR1 cm4gdmFkZHI7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2RtYWJ1Zl92bWFwKTsKPiAg Cj4gQEAgLTQyNiwxMCArNDI0LDggQEAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2RtYWJ1Zl92bWFw KTsKPiAgdm9pZCBkcm1fZ2VtX2RtYWJ1Zl92dW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYs IHZvaWQgKnZhZGRyKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IGRtYV9i dWYtPnByaXY7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Cj4gIAo+IC0J aWYgKGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdnVubWFwKQo+IC0JCWRldi0+ZHJpdmVyLT5nZW1f cHJpbWVfdnVubWFwKG9iaiwgdmFkZHIpOwo+ICsJZHJtX2dlbV92dW5tYXAob2JqLCB2YWRkcik7 Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2RtYWJ1Zl92dW5tYXApOwo+ICAKPiBAQCAt NDc2LDEwICs0NzIsMTIgQEAgaW50IGRybV9nZW1fZG1hYnVmX21tYXAoc3RydWN0IGRtYV9idWYg KmRtYV9idWYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICAJc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmogPSBkbWFfYnVmLT5wcml2Owo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IG9iai0+ZGV2Owo+ICAKPiAtCWlmICghZGV2LT5kcml2ZXItPmdlbV9wcmltZV9tbWFwKQo+ICsJ aWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+cHJpbWVfbW1hcCkKPiArCQlyZXR1cm4gb2Jq LT5mdW5jcy0+cHJpbWVfbW1hcChvYmosIHZtYSk7Cj4gKwllbHNlIGlmIChkZXYtPmRyaXZlci0+ Z2VtX3ByaW1lX21tYXApCj4gKwkJcmV0dXJuIGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfbW1hcChv YmosIHZtYSk7Cj4gKwllbHNlCj4gIAkJcmV0dXJuIC1FTk9TWVM7Cj4gLQo+IC0JcmV0dXJuIGRl di0+ZHJpdmVyLT5nZW1fcHJpbWVfbW1hcChvYmosIHZtYSk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJP TChkcm1fZ2VtX2RtYWJ1Zl9tbWFwKTsKPiAgCj4gQEAgLTU1OSw3ICs1NTcsOSBAQCBzdGF0aWMg c3RydWN0IGRtYV9idWYgKmV4cG9ydF9hbmRfcmVnaXN0ZXJfb2JqZWN0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gIAkJcmV0dXJuIGRtYWJ1ZjsKPiAgCX0KPiAgCj4gLQlpZiAoZGV2LT5kcml2 ZXItPmdlbV9wcmltZV9leHBvcnQpCj4gKwlpZiAob2JqLT5mdW5jcyAmJiBvYmotPmZ1bmNzLT5l eHBvcnQpCj4gKwkJZG1hYnVmID0gb2JqLT5mdW5jcy0+ZXhwb3J0KG9iaiwgZmxhZ3MpOwo+ICsJ ZWxzZSBpZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV9leHBvcnQpCj4gIAkJZG1hYnVmID0gZGV2 LT5kcml2ZXItPmdlbV9wcmltZV9leHBvcnQoZGV2LCBvYmosIGZsYWdzKTsKPiAgCWVsc2UKPiAg CQlkbWFidWYgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydChkZXYsIG9iaiwgZmxhZ3MpOwo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBp bmRleCAzNTgzYjk4YTE3MTguLmJhNWZlOGFmOTJjZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Ry bS9kcm1fZ2VtLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiBAQCAtMzgsNiArMzgs MTMwIEBACj4gIAo+ICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ICAKPiArc3Ry dWN0IGRybV9nZW1fb2JqZWN0Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBkcm1fZ2VtX29iamVj dF9mdW5jcyAtIEdFTSBvYmplY3QgZnVuY3Rpb25zCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2dlbV9v YmplY3RfZnVuY3Mgewo+ICsJLyoqCj4gKwkgKiBAZnJlZToKPiArCSAqCj4gKwkgKiBEZWNvbnN0 cnVjdG9yIGZvciBkcm1fZ2VtX29iamVjdHMuCj4gKwkgKgo+ICsJICogVGhpcyBjYWxsYmFjayBp cyBtYW5kYXRvcnkuCj4gKwkgKi8KPiArCXZvaWQgKCpmcmVlKShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaik7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAb3BlbjoKPiArCSAqCj4gKwkgKiBDYWxsZWQg dXBvbiBHRU0gaGFuZGxlIGNyZWF0aW9uLgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMg b3B0aW9uYWwuCj4gKwkgKi8KPiArCWludCAoKm9wZW4pKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICsKPiArCS8qKgo+ICsJICogQGNsb3NlOgo+ ICsJICoKPiArCSAqIENhbGxlZCB1cG9uIEdFTSBoYW5kbGUgcmVsZWFzZS4KPiArCSAqCj4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwl2b2lkICgqY2xvc2UpKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICsKPiAr CS8qKgo+ICsJICogQHByaW50X2luZm86Cj4gKwkgKgo+ICsJICogSWYgZHJpdmVyIHN1YmNsYXNz ZXMgc3RydWN0ICZkcm1fZ2VtX29iamVjdCwgaXQgY2FuIGltcGxlbWVudCB0aGlzCj4gKwkgKiBv cHRpb25hbCBob29rIGZvciBwcmludGluZyBhZGRpdGlvbmFsIGRyaXZlciBzcGVjaWZpYyBpbmZv Lgo+ICsJICoKPiArCSAqIGRybV9wcmludGZfaW5kZW50KCkgc2hvdWxkIGJlIHVzZWQgaW4gdGhl IGNhbGxiYWNrIHBhc3NpbmcgaXQgdGhlCj4gKwkgKiBpbmRlbnQgYXJndW1lbnQuCj4gKwkgKgo+ ICsJICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgZnJvbSBkcm1fZ2VtX3ByaW50X2luZm8oKS4K PiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwl2b2lk ICgqcHJpbnRfaW5mbykoc3RydWN0IGRybV9wcmludGVyICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50 LAo+ICsJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gKwo+ICsJLyoq Cj4gKwkgKiBAZXhwb3J0Ogo+ICsJICoKPiArCSAqIEV4cG9ydCBiYWNraW5nIGJ1ZmZlciBhcyBh ICZkbWFfYnVmLgo+ICsJICogSWYgdGhpcyBpcyBub3Qgc2V0IGRybV9nZW1fcHJpbWVfZXhwb3J0 KCkgaXMgdXNlZC4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJ ICovCj4gKwlzdHJ1Y3QgZG1hX2J1ZiAqKCpleHBvcnQpKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqLCBpbnQgZmxhZ3MpOwo+ICsKPiArCS8qKgo+ICsJICogQHBpbjoKPiArCSAqCj4gKwkgKiBQ aW4gYmFja2luZyBidWZmZXIgaW4gbWVtb3J5Lgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwuCj4gKwkgKi8KPiArCWludCAoKnBpbikoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwo+ICsKPiArCS8qKgo+ICsJICogQHVucGluOgo+ICsJICoKPiArCSAqIFVucGluIGJh Y2tpbmcgYnVmZmVyLgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuCj4g KwkgKi8KPiArCXZvaWQgKCp1bnBpbikoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsK PiArCS8qKgo+ICsJICogQGdldF9zZ190YWJsZToKPiArCSAqCj4gKwkgKiBSZXR1cm5zIGEgU2Nh dHRlci1HYXRoZXIgdGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJ1ZmZlci4KPiArCSAqIFVz ZWQgd2hlbiBleHBvcnRpbmcgYSBidWZmZXIuCj4gKwkgKgo+ICsJICogVGhpcyBjYWxsYmFjayBp cyBtYW5kYXRvcnkgaWYgYnVmZmVyIGV4cG9ydCBpcyBzdXBwb3J0ZWQuCj4gKwkgKi8KPiArCXN0 cnVjdCBzZ190YWJsZSAqKCpnZXRfc2dfdGFibGUpKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq KTsKPiArCj4gKwkvKioKPiArCSAqIEBwcmltZV9tbWFwOgo+ICsJICoKPiArCSAqIFNldHVwIHVz ZXJzcGFjZSBtYXBwaW5nIGZvciBhIFBSSU1FIGV4cG9ydGVkIGJ1ZmZlci4KPiArCSAqCj4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwlpbnQgKCpwcmltZV9tbWFw KShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Owo+ICsKPiArCS8qKgo+ICsJICogQHZtYXA6Cj4gKwkgKgo+ICsJICogUmV0dXJucyBhIHZpcnR1 YWwgYWRkcmVzcyBmb3IgdGhlIGJ1ZmZlci4KPiArCSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlz IG9wdGlvbmFsLgo+ICsJICovCj4gKwl2b2lkICooKnZtYXApKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKTsKPiArCj4gKwkvKioKPiArCSAqIEB2dW5tYXA6Cj4gKwkgKgo+ICsJICogUmVsZWFz ZXMgdGhlIHRoZSBhZGRyZXNzIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgQHZtYXAuCj4gKwkgKgo+ ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiArCSAqLwo+ICsJdm9pZCAoKnZ1bm1h cCkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiArCj4gKwkvKioK PiArCSAqIEB2bV9vcHM6Cj4gKwkgKgo+ICsJICogVmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyB1 c2VkIHdpdGggbW1hcC4KPiArCSAqCj4gKwkgKiBUaGlzIGlzIG9wdGlvbmFsIGJ1dCBuZWNlc3Nh cnkgZm9yIG1tYXAgc3VwcG9ydC4KPiArCSAqLwo+ICsJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlv bnNfc3RydWN0ICp2bV9vcHM7Cj4gK307Cj4gKwo+ICAvKioKPiAgICogc3RydWN0IGRybV9nZW1f b2JqZWN0IC0gR0VNIGJ1ZmZlciBvYmplY3QKPiAgICoKPiBAQCAtMTQ2LDYgKzI3MCwxNyBAQCBz dHJ1Y3QgZHJtX2dlbV9vYmplY3Qgewo+ICAJICogc2ltcGx5IGxlYXZlIGl0IGFzIE5VTEwuCj4g IAkgKi8KPiAgCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmltcG9ydF9hdHRhY2g7Cj4gKwo+ ICsJLyoqCj4gKwkgKiBAZnVuY3M6Cj4gKwkgKgo+ICsJICogT3B0aW9uYWwgR0VNIG9iamVjdCBm dW5jdGlvbnMuIElmIHRoaXMgaXMgc2V0LCBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUK PiArCSAqIGNvcnJlc3BvbmRpbmcgJmRybV9kcml2ZXIgR0VNIGNhbGxiYWNrcy4KPiArCSAqCj4g KwkgKiBOZXcgZHJpdmVycyBzaG91bGQgdXNlIHRoaXMuCj4gKwkgKgo+ICsJICovCj4gKwljb25z dCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgKmZ1bmNzOwo+ICB9Owo+ICAKPiAgLyoqCj4g QEAgLTI5Myw0ICs0MjgsOSBAQCBpbnQgZHJtX2dlbV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9m aWxlICpmaWxlLAo+ICAJCQkgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJIHVpbnQzMl90 IGhhbmRsZSk7Cj4gIAo+ICtpbnQgZHJtX2dlbV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopOwo+ICt2b2lkIGRybV9nZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ ICt2b2lkICpkcm1fZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICt2b2lk IGRybV9nZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2YWRkcik7 Cj4gKwo+ICAjZW5kaWYgLyogX19EUk1fR0VNX0hfXyAqLwo+IC0tIAo+IDIuMTUuMQo+IAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVs IG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRh bmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9i bG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=