From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 2/3] drm/gem: Add drm_gem_object_funcs Date: Mon, 24 Sep 2018 16:54:52 +0200 Message-ID: <20180924145452.GT11082@phenom.ffwll.local> References: <20180921164230.51838-1-noralf@tronnes.org> <20180921164230.51838-3-noralf@tronnes.org> <20180922104148.GQ11082@phenom.ffwll.local> <1e7cbf02-b3b3-aabe-88a7-538a1de105ab@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 87F0F89895 for ; Mon, 24 Sep 2018 14:54:57 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id k14-v6so16520947edr.13 for ; Mon, 24 Sep 2018 07:54:57 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1e7cbf02-b3b3-aabe-88a7-538a1de105ab@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: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gU2F0LCBTZXAgMjIsIDIwMTggYXQgMDY6MDE6NTVQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAyMi4wOS4yMDE4IDEyLjQxLCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gRnJpLCBTZXAgMjEsIDIwMTggYXQgMDY6NDI6MjlQTSArMDIwMCwgTm9yYWxmIFRyw7hu bmVzIHdyb3RlOgo+ID4gPiBUaGlzIGFkZHMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGFibGUgb24g R0VNIG9iamVjdHMuCj4gPiA+IFRoZSBtYWluIGJlbmVmaXQgaXMgZm9yIGRyaXZlcnMgdGhhdCBz dXBwb3J0IG1vcmUgdGhhbiBvbmUgdHlwZSBvZgo+ID4gPiBtZW1vcnkgKHNobWVtLHZyYW0sY21h KSBmb3IgdGhlaXIgYnVmZmVycyBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGl0Cj4gPiA+IHJ1 bnMgb24uIFdpdGggdGhlIGNhbGxiYWNrcyBhdHRhY2hlZCB0byB0aGUgR0VNIG9iamVjdCBpdHNl bGYsIGl0IGlzCj4gPiA+IGVhc2llciB0byBoYXZlIGNvcmUgaGVscGVycyBmb3IgdGhlIHRoZSB2 YXJpb3VzIGJ1ZmZlciB0eXBlcy4gVGhlIGRyaXZlcgo+ID4gPiBvbmx5IGhhcyB0byBtYWtlIHRo ZSBkZWNpc2lvbiBhYm91dCBidWZmZXIgdHlwZSBvbiBHRU0gb2JqZWN0IGNyZWF0aW9uCj4gPiA+ IGFuZCBhbGwgb3RoZXIgY2FsbGJhY2tzIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBjaG9zZW4gaGVs cGVyLgo+ID4gPiAKPiA+ID4gZHJtX2RyaXZlci0+Z2VtX3ByaW1lX3Jlc19vYmogaGFzIG5vdCBi ZWVuIGFkZGVkIHNpbmNlIHRoZXJlJ3MgYSB0b2RvIHRvCj4gPiA+IHB1dCBhIHJlc2VydmF0aW9u X29iamVjdCBpbnRvIGRybV9nZW1fb2JqZWN0Lgo+ID4gPiAKPiA+ID4gVGhlIGluZGl2aWR1YWwg ZHJtX2RyaXZlciBjYWxsYmFja3MgdGFrZSBwcmlvcml0eSBvdmVyIHRoZSBHRU0gYXR0YWNoZWQK PiA+ID4gY2FsbGJhY2tzLgo+ID4gSSdkIGRvIHRoaXMgdGhlIG90aGVyIHdheSByb3VuZCwgbWFr ZSB0aGUgbmV3IGdlbSBjYWxsYmFja3MgdGhlIGNsZWFybHkKPiA+IGZhdm91cmVkIG9wdGlvbi4K PiAKPiBUaGUgcmVhc29uIEkgZGlkIGl0IGxpa2UgdGhpcyBpcyB0aGF0IEkgdGhvdWdodCBpdCB3 b3VsZCBiZSBlYXNpZXIgdG8KPiBjb252ZXJ0IHRoZSBDTUEgaGVscGVyIHRoaXMgd2F5LiBJJ3Zl IHRha2VuIGEgY2xvc2VyIGxvb2sgYXQgdGhpcywgYW5kCj4gdGhlIHNvbHV0aW9uIGlzIHRvIGNv bnZlcnQgdGhlIGRyaXZlcnMgdGhhdCBvdmVycmlkZSB0aGUgZGVmYXVsdHMgZmlyc3QsCj4gYW5k IHRoZW4gY29udmVydCB0aGUgaGVscGVyIGFzIGEgd2hvbGUgd2hlbiB0aGF0J3MgZG9uZS4KPiAK PiBJJ2xsIGZsaXAgaXQgYXJvdW5kLgoKSWYgaXQncyBlYXNpZXIgZm9yIGNvbnZlcnNpb24sIHRo ZW4ga2VlcCBhcy1pcyAoYnV0IHByb2JhYmx5IHdpdGggYSBwbGFuCnRvIGNoYW5nZSB0aGUgZGVm YXVsdHMgbGF0ZXIgb24pLiBVcCB0byB5b3UuCgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYg VHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPiA+ID4gLS0tCj4gPiA+ICAgZHJpdmVycy9n cHUvZHJtL2RybV9jbGllbnQuYyAgICB8ICAxMiArKy0tCj4gPiA+ICAgZHJpdmVycy9ncHUvZHJt L2RybV9mYl9oZWxwZXIuYyB8ICAgOCArKy0KPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dl bS5jICAgICAgIHwgMTA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPiA+ID4gICBk cml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMgICAgIHwgIDQwICsrKysrKy0tLS0tLQo+ID4gPiAg IGluY2x1ZGUvZHJtL2RybV9nZW0uaCAgICAgICAgICAgfCAxMzggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAgIDUgZmlsZXMgY2hhbmdlZCwgMjcyIGluc2Vy dGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kcm1fY2xpZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCj4g PiA+IGluZGV4IDE3ZDlhNjRlODg1ZS4uZWNhNzMzMTc2MmU0IDEwMDY0NAo+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fY2xpZW50LmMKPiA+ID4gQEAgLTgwLDggKzgwLDcgQEAgaW50IGRybV9jbGllbnRfbmV3KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ID4g PiAgIHsKPiA+ID4gICAJaW50IHJldDsKPiA+ID4gLQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1 cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkgfHwKPiA+ID4gLQkgICAgIWRldi0+ZHJpdmVyLT5kdW1i X2NyZWF0ZSB8fCAhZGV2LT5kcml2ZXItPmdlbV9wcmltZV92bWFwKQo+ID4gPiArCWlmICghZHJt X2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSB8fCAhZGV2LT5kcml2ZXIt PmR1bWJfY3JlYXRlKQo+ID4gPiAgIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ID4gSSBndWVzcyB0 aGUgLT5nZW1fcHJpbWVfdm1hcCBjaGVjayBnb3QgbG9zdCwgbmVlZHMgdG8gYmUgcmVhZGRlZCBz b21ld2hlcmUKPiA+IEkgdGhpbmsuCj4gCj4gSXQgaGFwcGVucyBpbiBkcm1fY2xpZW50X2J1ZmZl cl9jcmVhdGUoKSB3aGVuIGRybV9nZW1fdm1hcCgpIGlzIGNhbGxlZC4KPiBJdCByZXR1cm5zIC1F T1BOT1RTVVBQIGlmIG5vIGNhbGxiYWNrIGlzIHNldC4KCkFoLCBtaXNzZWQgdGhhdC4KCj4gPiAK PiA+ID4gICAJaWYgKGZ1bmNzICYmICF0cnlfbW9kdWxlX2dldChmdW5jcy0+b3duZXIpKQo+ID4g PiBAQCAtMjEyLDggKzIxMSw3IEBAIHN0YXRpYyB2b2lkIGRybV9jbGllbnRfYnVmZmVyX2RlbGV0 ZShzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcikKPiA+ID4gICB7Cj4gPiA+ICAgCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBidWZmZXItPmNsaWVudC0+ZGV2Owo+ID4gPiAtCWlmIChi dWZmZXItPnZhZGRyICYmIGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdnVubWFwKQo+ID4gPiAtCQlk ZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3Z1bm1hcChidWZmZXItPmdlbSwgYnVmZmVyLT52YWRkcik7 Cj4gPiA+ICsJZHJtX2dlbV92dW5tYXAoYnVmZmVyLT5nZW0sIGJ1ZmZlci0+dmFkZHIpOwo+ID4g PiAgIAlpZiAoYnVmZmVyLT5nZW0pCj4gPiA+ICAgCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2Nr ZWQoYnVmZmVyLT5nZW0pOwo+ID4gPiBAQCAtMjY2LDkgKzI2NCw5IEBAIGRybV9jbGllbnRfYnVm ZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgdTMyIHdpZHRoLCB1MzIg aGVpZ2h0LCB1Cj4gPiA+ICAgCSAqIGZkX2luc3RhbGwgc3RlcCBvdXQgb2YgdGhlIGRyaXZlciBi YWNrZW5kIGhvb2tzLCB0byBtYWtlIHRoYXQKPiA+ID4gICAJICogZmluYWwgc3RlcCBvcHRpb25h bCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4gPiA+ICAgCSAqLwo+ID4gPiAtCXZhZGRyID0gZGV2LT5k cml2ZXItPmdlbV9wcmltZV92bWFwKG9iaik7Cj4gPiA+IC0JaWYgKCF2YWRkcikgewo+ID4gPiAt CQlyZXQgPSAtRU5PTUVNOwo+ID4gPiArCXZhZGRyID0gZHJtX2dlbV92bWFwKG9iaik7Cj4gPiA+ ICsJaWYgKElTX0VSUih2YWRkcikpIHsKPiA+ID4gKwkJcmV0ID0gUFRSX0VSUih2YWRkcik7Cj4g PiA+ICAgCQlnb3RvIGVycl9kZWxldGU7Cj4gPiA+ICAgCX0KPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hl bHBlci5jCj4gPiA+IGluZGV4IDhlOTVkMGY3YzcxZC4uNjY5NjlmMGZhY2JiIDEwMDY0NAo+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiA+ID4gQEAgLTM4LDYgKzM4LDcgQEAKPiA+ID4g ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+ Cj4gPiA+ICAgI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9nZW0uaD4KPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ ID4gPiAgICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ID4gPiAgICNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KPiA+ID4gQEAgLTMwMTAsOSArMzAxMSwxMiBAQCBzdGF0aWMg dm9pZCBkcm1fZmJkZXZfZmJfZGVzdHJveShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiA+ID4gICBz dGF0aWMgaW50IGRybV9mYmRldl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ID4gICB7Cj4gPiA+ICAgCXN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7Cj4gPiA+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmogPSBmYl9oZWxwZXItPmJ1ZmZlci0+Z2VtOwo+ID4gPiAtCWlmIChmYl9oZWxwZXItPmRl di0+ZHJpdmVyLT5nZW1fcHJpbWVfbW1hcCkKPiA+ID4gLQkJcmV0dXJuIGZiX2hlbHBlci0+ZGV2 LT5kcml2ZXItPmdlbV9wcmltZV9tbWFwKGZiX2hlbHBlci0+YnVmZmVyLT5nZW0sIHZtYSk7Cj4g PiA+ICsJaWYgKG9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmltZV9tbWFwKQo+ID4gPiArCQlyZXR1 cm4gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX21tYXAob2JqLCB2bWEpOwo+ID4gPiArCWVs c2UgaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+bW1hcCkKPiA+ID4gKwkJcmV0dXJuIGRy bV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7Cj4gPiA+ICAgCWVsc2UKPiA+ID4g ICAJCXJldHVybiAtRU5PREVWOwo+ID4gPiAgIH0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gPiA+IGluZGV4 IDUxMjA3OGViZDk3Yi4uN2RhMjU0OTY2N2NlIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiA+ ID4gQEAgLTI1OSw2ICsyNTksOCBAQCBkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZShpbnQg aWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKPiA+ID4gICAJaWYgKGRldi0+ZHJpdmVyLT5nZW1f Y2xvc2Vfb2JqZWN0KQo+ID4gPiAgIAkJZGV2LT5kcml2ZXItPmdlbV9jbG9zZV9vYmplY3Qob2Jq LCBmaWxlX3ByaXYpOwo+ID4gPiArCWVsc2UgaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+ Y2xvc2UpCj4gPiA+ICsJCW9iai0+ZnVuY3MtPmNsb3NlKG9iaiwgZmlsZV9wcml2KTsKPiA+ID4g ICAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfUFJJTUUpKQo+ID4gPiAg IAkJZHJtX2dlbV9yZW1vdmVfcHJpbWVfaGFuZGxlcyhvYmosIGZpbGVfcHJpdik7Cj4gPiA+IEBA IC00MTQsNiArNDE2LDEwIEBAIGRybV9nZW1faGFuZGxlX2NyZWF0ZV90YWlsKHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAo+ID4gPiAgIAkJcmV0ID0gZGV2LT5kcml2ZXItPmdlbV9vcGVuX29i amVjdChvYmosIGZpbGVfcHJpdik7Cj4gPiA+ICAgCQlpZiAocmV0KQo+ID4gPiAgIAkJCWdvdG8g ZXJyX3Jldm9rZTsKPiA+ID4gKwl9IGVsc2UgaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+ b3Blbikgewo+ID4gPiArCQlyZXQgPSBvYmotPmZ1bmNzLT5vcGVuKG9iaiwgZmlsZV9wcml2KTsK PiA+ID4gKwkJaWYgKHJldCkKPiA+ID4gKwkJCWdvdG8gZXJyX3Jldm9rZTsKPiA+ID4gICAJfQo+ ID4gPiAgIAkqaGFuZGxlcCA9IGhhbmRsZTsKPiA+ID4gQEAgLTg0MSw2ICs4NDcsOCBAQCBkcm1f Z2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQo+ID4gPiAgIAkJV0FSTl9PTighbXV0 ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ID4gPiAgIAkJZGV2LT5kcml2ZXIt PmdlbV9mcmVlX29iamVjdChvYmopOwo+ID4gPiArCX0gZWxzZSBpZiAob2JqLT5mdW5jcykgewo+ ID4gPiArCQlvYmotPmZ1bmNzLT5mcmVlKG9iaik7Cj4gPiA+ICAgCX0KPiA+ID4gICB9Cj4gPiA+ ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9mcmVlKTsKPiA+ID4gQEAgLTg2NCwxMyAr ODcyLDEzIEBAIGRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaikKPiA+ID4gICAJZGV2ID0gb2JqLT5kZXY7Cj4gPiA+IC0JaWYgKGRldi0+ZHJpdmVy LT5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQpIHsKPiA+ID4gLQkJa3JlZl9wdXQoJm9iai0+cmVm Y291bnQsIGRybV9nZW1fb2JqZWN0X2ZyZWUpOwo+ID4gPiAtCX0gZWxzZSB7Cj4gPiA+ICsJaWYg KGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3QpIHsKPiA+ID4gICAJCW1pZ2h0X2xvY2soJmRl di0+c3RydWN0X211dGV4KTsKPiA+ID4gICAJCWlmIChrcmVmX3B1dF9tdXRleCgmb2JqLT5yZWZj b3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSwKPiA+ID4gICAJCQkJJmRldi0+c3RydWN0X211dGV4 KSkKPiA+ID4gICAJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gKwl9 IGVsc2Ugewo+ID4gPiArCQlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3Rf ZnJlZSk7Cj4gPiA+ICAgCX0KPiA+ID4gICB9Cj4gPiA+ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2Vt X29iamVjdF9wdXRfdW5sb2NrZWQpOwo+ID4gPiBAQCAtOTU1LDIwICs5NjMsMzAgQEAgaW50IGRy bV9nZW1fbW1hcF9vYmooc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGxvbmcg b2JqX3NpemUsCj4gPiA+ICAgCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ID4g PiAgIHsKPiA+ID4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2Owo+ID4gPiAr CWludCByZXQ7Cj4gPiA+ICAgCS8qIENoZWNrIGZvciB2YWxpZCBzaXplLiAqLwo+ID4gPiAgIAlp ZiAob2JqX3NpemUgPCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpCj4gPiA+ICAgCQlyZXR1 cm4gLUVJTlZBTDsKPiA+ID4gLQlpZiAoIWRldi0+ZHJpdmVyLT5nZW1fdm1fb3BzKQo+ID4gPiAr CWlmIChkZXYtPmRyaXZlci0+Z2VtX3ZtX29wcykKPiA+ID4gKwkJdm1hLT52bV9vcHMgPSBkZXYt PmRyaXZlci0+Z2VtX3ZtX29wczsKPiA+ID4gKwllbHNlIGlmIChvYmotPmZ1bmNzICYmIG9iai0+ ZnVuY3MtPnZtX29wcykKPiA+ID4gKwkJdm1hLT52bV9vcHMgPSBvYmotPmZ1bmNzLT52bV9vcHM7 Cj4gPiA+ICsJZWxzZQo+ID4gPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiBBIGJpdCBhIGJpa2Vz aGVkLCBidXQgaWYgd2UgZ28gd2l0aCB0aGVzZSBuZXcgb3BzLCBJJ2QgcHV0IHRoZW0gZmlyc3Qg aW4KPiA+IGFsbCB0aGUgaWYgbGFkZGVycy4gTWFrZXMgaXQgYSBiaXQgY2xlYXJlciB3aGlsZSBy ZWFkaW5nIHRoYXQgdGhleSdyZSB0aGUKPiA+IHJlY29tbWVuZGVkIG9wdGlvbi4KPiA+ID4gICAJ dm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX0RPTlRFWFBBTkQgfCBWTV9E T05URFVNUDsKPiA+ID4gLQl2bWEtPnZtX29wcyA9IGRldi0+ZHJpdmVyLT5nZW1fdm1fb3BzOwo+ ID4gPiAgIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG9iajsKPiA+ID4gICAJdm1hLT52bV9wYWdl X3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFn cykpOwo+ID4gPiAgIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLT52 bV9wYWdlX3Byb3QpOwo+ID4gPiArCWlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPm1tYXAp IHsKPiA+ID4gKwkJcmV0ID0gb2JqLT5mdW5jcy0+bW1hcChvYmosIHZtYSk7Cj4gPiA+ICsJCWlm IChyZXQpCj4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gPiArCX0KPiA+IEknbSBjb25mdXNlZCBh Ym91dCB0aGlzIG9uZSBoZXJlIC4uLiB0aGlzIGlzIGZvciBwcmltZSBtbWFwIG9ubHkgaWlyYy4K PiAKPiBUaGUgc21hbGxlciBkcml2ZXJzIHRoYXQgSSd2ZSBsb29rZWQgYXQgY29tYmluZSB0aGUg RFJNIG1tYXAgYW5kIFBSSU1FCj4gbW1hcCBwYXRocyBnb2luZyBpbnRvIGEgc2hhcmVkICpfbW1h cF9vYmooKSBmdW5jdGlvbi4KPiAKPiBUaGlzIGlzIHdoYXQgSSdtIGRvaW5nOgo+IAo+IERSTSBm ZDogZm9wcy0+bW1hcCA9IGRybV9nZW1fbW1hcAo+IMKgwqDCoCAtPiBkcm1fZ2VtX21tYXBfb2Jq Cj4gwqDCoMKgwqDCoMKgwqAgLT4gZ2VtLT5mdW5jcy0+bW1hcAo+IAo+IGRtYWJ1ZiBmZDogZm9w cy0+bW1hcCA9IGRtYV9idWZfbW1hcF9pbnRlcm5hbAo+IMKgwqDCoCAtPiBkbWFidWYtPm9wcy0+ bW1hcCA9IGRybV9nZW1fZG1hYnVmX21tYXAKPiDCoMKgwqDCoMKgwqDCoCAtPiBkcm1fZ2VtX21t YXBfb2JqCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtPiBnZW0tPmZ1bmNzLT5tbWFwCj4gCj4g SXMgdGhlcmUgYSBkaWZmZXJlbmNlIHRvIHRoZSBtYXBwaW5nIG9wZXJhdGlvbiBpdHNlbGYgd2hl dGhlciB0aGUgbW1hcAo+IGhhcHBlbnMgdGhyb3VnaCBEUk0gZGV2IG9yIHRocm91Z2ggZG1hYnVm PwoKUHJpbWUgZ2l2ZXMgeW91IHRoZSBhZGRpdGlvbmFsIHN5bmMgaW9jdGwgc3R1ZmYuIFdoaWNo IGlzbid0IHdpcmVkIHVwIGF0CmFsbCBmb3IgdGhpcyBnZW0gbWlkbGF5ZXIsIHNvIGR1bm5vLiBU YmggSSB3b3VsZG4ndCBhZGQgbW9yZSBmdW5jdGlvbnMgdG8KZ2VtX2Z1bmNzIHRoYXQgbWFwIHRv IGRtYV9idWYgZnVuY3Rpb25zIDE6MSwgdGhhdCdzIGp1c3QgaW5kaXJlY3Rpb24gZm9yIG5vCmdh aW4gKHRoZSBvbmx5IHJlYXNvbiB3ZSBoYXZlIHRoZXNlIGlzIEVYUE9SVF9TWU1CT0xfR1BMIG5v dCB3b3JraW5nIHdlbGwKd2l0aCB0aGUgbnZpZGlhIGJsb2IsIHdoaWNoIEkgc3RpbGwgaGF2ZSBh IGdydWRnZSB3aXRoIERhdmUgQWlybGllIGFib3V0KS4KCkkgdGhpbmsgYSBkZWZhdWx0IGltcGxl bWVudGF0aW9uIHRoYXQganVzdCByZW1hcHMgZG1hLWJ1ZiBtbWFwIHRvIGdlbSBtbWFwCmZvciBl dmVyeW9uZSBpcyBwZXJmZWN0bHkgZmluZS4gRm9yIGFueW9uZSBkb2luZyB3cml0ZS1jb21iaW5l ZCBtbWFwIChvcgpkdW1iIGJ1ZmZlcnMgaW4gZ2VuZXJhbCkgaXQncyB0aGUgcmlnaHQgdGhpbmcg dG8gZG8uCgpUaGUgcHJvYmxlbSBJJ20gc2VlaW5nIGhlcmUgaXMgdGhhdCB3ZSBub3cgaGF2ZSAy IHdheXMgdG8gZG8gZ2VtIG1tYXA6ClRocm91Z2ggeW91ciBnZW1fZnVuY3MtPm1tYXAgY2FsbGJh Y2ssIGFuZCB0aHJvdWdoIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nCmNhbGxiYWNrIChpbiB2bV9v cHMpLiBUaGF0J3MgYSBiaXQgY29uZnVzaW9uIC4uLiBNYXliZSB3b3J0aCBpdCB0byB0YWNrbGUK dGhlIG1tYXAgc3Rvcnkgc2VwYXJhdGVseSAoYm90aCBnZW1fZnVuY3MtPm1tYXAgYW5kIGRtYS1i dWYgbW1hcCksIHNvCnRoYXQgaXQncyBjbGVhcmVyIHdoYXQgeW91J3JlIGFpbWluZyBmb3IsIGFu ZCBjbGVhcmVyIHRoYXQgaXQncyBhIHdpbj8KCk9uIHRoZSBnZW1fZnVuY3MtPm1tYXAgaXRzZWxm OiBDYW4ndCB5b3UgdXNlIGZvcHMtPm1tYXAsIHdpdGggYWRqdXN0ZWQKb2Zmc2V0cz8gVGhhdCdz IHdoYXQgZS5nLiBtc20gZG9lcywgYWZhaXVpLiBNb3JlIGNhbGxiYWNrcyBkb2Vzbid0IHNvdW5k Cmxpa2UgYSBncmVhdCBpZGVhIHRvIG1lIC4uLgoKQ2hlZXJzLCBEYW5pZWwKCj4gTm9yYWxmLgo+ IAo+ID4gPiArCj4gPiA+ICAgCS8qIFRha2UgYSByZWYgZm9yIHRoaXMgbWFwcGluZyBvZiB0aGUg b2JqZWN0LCBzbyB0aGF0IHRoZSBmYXVsdAo+ID4gPiAgIAkgKiBoYW5kbGVyIGNhbiBkZXJlZmVy ZW5jZSB0aGUgbW1hcCBvZmZzZXQncyBwb2ludGVyIHRvIHRoZSBvYmplY3QuCj4gPiA+ICAgCSAq IFRoaXMgcmVmZXJlbmNlIGlzIGNsZWFuZWQgdXAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgdm1fY2xv c2UKPiA+ID4gQEAgLTEwNjgsNCArMTA4Niw4NCBAQCB2b2lkIGRybV9nZW1fcHJpbnRfaW5mbyhz dHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIHVuc2lnbmVkIGludCBpbmRlbnQsCj4gPiA+ICAgCWlmIChv YmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbnRfaW5mbykKPiA+ID4gICAJCW9iai0+ZGV2LT5kcml2 ZXItPmdlbV9wcmludF9pbmZvKHAsIGluZGVudCwgb2JqKTsKPiA+ID4gKwllbHNlIGlmIChvYmot PmZ1bmNzICYmIG9iai0+ZnVuY3MtPnByaW50X2luZm8pCj4gPiA+ICsJCW9iai0+ZnVuY3MtPnBy aW50X2luZm8ocCwgaW5kZW50LCBvYmopOwo+ID4gPiAgIH0KPiA+ID4gKwo+ID4gPiArLyoqCj4g PiA+ICsgKiBkcm1fZ2VtX3BpbiAtIFBpbiBiYWNraW5nIGJ1ZmZlciBpbiBtZW1vcnkKPiA+ID4g KyAqIEBvYmo6IEdFTSBvYmplY3QKPiA+ID4gKyAqCj4gPiA+ICsgKiBNYWtlIHN1cmUgdGhlIGJh Y2tpbmcgYnVmZmVyIGlzIHBpbm5lZCBpbiBtZW1vcnkuCj4gPiA+ICsgKgo+ID4gPiArICogUmV0 dXJuczoKPiA+ID4gKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24g ZmFpbHVyZS4KPiA+ID4gKyAqLwo+ID4gPiAraW50IGRybV9nZW1fcGluKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQo+ID4gPiArewo+ID4gPiArCWlmIChvYmotPmRldi0+ZHJpdmVyLT5nZW1f cHJpbWVfcGluKQo+ID4gPiArCQlyZXR1cm4gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3Bp bihvYmopOwo+ID4gPiArCWVsc2UgaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+cGluKQo+ ID4gPiArCQlyZXR1cm4gb2JqLT5mdW5jcy0+cGluKG9iaik7Cj4gPiA+ICsJZWxzZQo+ID4gPiAr CQlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9waW4pOwo+ ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9nZW1fcGluIC0gVW5waW4gYmFja2luZyBi dWZmZXIgZnJvbSBtZW1vcnkKPiA+ID4gKyAqIEBvYmo6IEdFTSBvYmplY3QKPiA+ID4gKyAqCj4g PiA+ICsgKiBSZWxheCB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGUgYmFja2luZyBidWZmZXIgaXMg cGlubmVkIGluIG1lbW9yeS4KPiA+ID4gKyAqLwo+ID4gPiArdm9pZCBkcm1fZ2VtX3VucGluKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ID4gPiArewo+ID4gPiArCWlmIChvYmotPmRldi0+ ZHJpdmVyLT5nZW1fcHJpbWVfdW5waW4pCj4gPiA+ICsJCW9iai0+ZGV2LT5kcml2ZXItPmdlbV9w cmltZV91bnBpbihvYmopOwo+ID4gPiArCWVsc2UgaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5j cy0+dW5waW4pCj4gPiA+ICsJCW9iai0+ZnVuY3MtPnVucGluKG9iaik7Cj4gPiA+ICt9Cj4gPiA+ ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdW5waW4pOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4g KyAqIGRybV9nZW1fdm1hcCAtIE1hcCBidWZmZXIgaW50byBrZXJuZWwgdmlydHVhbCBhZGRyZXNz IHNwYWNlCj4gPiA+ICsgKiBAb2JqOiBHRU0gb2JqZWN0Cj4gPiA+ICsgKgo+ID4gPiArICogUmV0 dXJuczoKPiA+ID4gKyAqIEEgdmlydHVhbCBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0g b2JqZWN0IG9yIGFuIEVSUl9QVFItZW5jb2RlZCBuZWdhdGl2ZQo+ID4gPiArICogZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgo+ID4gPiArICovCj4gPiA+ICt2b2lkICpkcm1fZ2VtX3ZtYXAoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gPiA+ICt7Cj4gPiA+ICsJdm9pZCAqdmFkZHI7Cj4gPiA+ ICsKPiA+ID4gKwlpZiAob2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3ZtYXApCj4gPiA+ICsJ CXZhZGRyID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3ZtYXAob2JqKTsKPiA+ID4gKwll bHNlIGlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPnZtYXApCj4gPiA+ICsJCXZhZGRyID0g b2JqLT5mdW5jcy0+dm1hcChvYmopOwo+ID4gPiArCWVsc2UKPiA+ID4gKwkJdmFkZHIgPSBFUlJf UFRSKC1FT1BOT1RTVVBQKTsKPiA+ID4gKwo+ID4gPiArCWlmICghdmFkZHIpCj4gPiA+ICsJCXZh ZGRyID0gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiB2YWRkcjsKPiA+ ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92bWFwKTsKPiA+ID4gKwo+ID4gPiAr LyoqCj4gPiA+ICsgKiBkcm1fZ2VtX3Z1bm1hcCAtIFJlbW92ZSBidWZmZXIgbWFwcGluZyBmcm9t IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKPiA+ID4gKyAqIEBvYmo6IEdFTSBvYmplY3QK PiA+ID4gKyAqIEB2YWRkcjogVmlydHVhbCBhZGRyZXNzIChjYW4gYmUgTlVMTCkKPiA+ID4gKyAq Lwo+ID4gPiArdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwg dm9pZCAqdmFkZHIpCj4gPiA+ICt7Cj4gPiA+ICsJaWYgKCF2YWRkcikKPiA+ID4gKwkJcmV0dXJu Owo+ID4gPiArCj4gPiA+ICsJaWYgKG9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmltZV92dW5tYXAp Cj4gPiA+ICsJCW9iai0+ZGV2LT5kcml2ZXItPmdlbV9wcmltZV92dW5tYXAob2JqLCB2YWRkcik7 Cj4gPiA+ICsJZWxzZSBpZiAob2JqLT5mdW5jcyAmJiBvYmotPmZ1bmNzLT52dW5tYXApCj4gPiA+ ICsJCW9iai0+ZnVuY3MtPnZ1bm1hcChvYmosIHZhZGRyKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2dlbV92dW5tYXApOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcmltZS5jCj4gPiA+IGluZGV4 IDY3MjE1NzE3NDlmZi4uN2Y1Yzk1MDAxMzZiIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX3ByaW1lLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcmltZS5j Cj4gPiA+IEBAIC0xOTksNyArMTk5LDYgQEAgaW50IGRybV9nZW1fbWFwX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1ZiwKPiA+ID4gICB7Cj4gPiA+ICAgCXN0cnVjdCBkcm1fcHJpbWVfYXR0 YWNobWVudCAqcHJpbWVfYXR0YWNoOwo+ID4gPiAgIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiA9IGRtYV9idWYtPnByaXY7Cj4gPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ ZGV2Owo+ID4gPiAgIAlwcmltZV9hdHRhY2ggPSBremFsbG9jKHNpemVvZigqcHJpbWVfYXR0YWNo KSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICAgCWlmICghcHJpbWVfYXR0YWNoKQo+ID4gPiBAQCAtMjA4 LDEwICsyMDcsNyBAQCBpbnQgZHJtX2dlbV9tYXBfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFf YnVmLAo+ID4gPiAgIAlwcmltZV9hdHRhY2gtPmRpciA9IERNQV9OT05FOwo+ID4gPiAgIAlhdHRh Y2gtPnByaXYgPSBwcmltZV9hdHRhY2g7Cj4gPiA+IC0JaWYgKCFkZXYtPmRyaXZlci0+Z2VtX3By aW1lX3BpbikKPiA+ID4gLQkJcmV0dXJuIDA7Cj4gPiA+IC0KPiA+ID4gLQlyZXR1cm4gZGV2LT5k cml2ZXItPmdlbV9wcmltZV9waW4ob2JqKTsKPiA+ID4gKwlyZXR1cm4gZHJtX2dlbV9waW4ob2Jq KTsKPiA+ID4gICB9Cj4gPiA+ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9hdHRhY2gpOwo+ ID4gPiBAQCAtMjI4LDcgKzIyNCw2IEBAIHZvaWQgZHJtX2dlbV9tYXBfZGV0YWNoKHN0cnVjdCBk bWFfYnVmICpkbWFfYnVmLAo+ID4gPiAgIHsKPiA+ID4gICAJc3RydWN0IGRybV9wcmltZV9hdHRh Y2htZW50ICpwcmltZV9hdHRhY2ggPSBhdHRhY2gtPnByaXY7Cj4gPiA+ICAgCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gb2JqLT5kZXY7Cj4gPiA+ICAgCWlmIChwcmltZV9hdHRhY2gpIHsKPiA+ID4gICAJ CXN0cnVjdCBzZ190YWJsZSAqc2d0ID0gcHJpbWVfYXR0YWNoLT5zZ3Q7Cj4gPiA+IEBAIC0yNDcs OCArMjQyLDcgQEAgdm9pZCBkcm1fZ2VtX21hcF9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9i dWYsCj4gPiA+ICAgCQlhdHRhY2gtPnByaXYgPSBOVUxMOwo+ID4gPiAgIAl9Cj4gPiA+IC0JaWYg KGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdW5waW4pCj4gPiA+IC0JCWRldi0+ZHJpdmVyLT5nZW1f cHJpbWVfdW5waW4ob2JqKTsKPiA+ID4gKwlkcm1fZ2VtX3VucGluKG9iaik7Cj4gPiA+ICAgfQo+ ID4gPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9tYXBfZGV0YWNoKTsKPiA+ID4gQEAgLTMxMCw3 ICszMDQsMTAgQEAgc3RydWN0IHNnX3RhYmxlICpkcm1fZ2VtX21hcF9kbWFfYnVmKHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiA+ID4gICAJaWYgKFdBUk5fT04ocHJpbWVfYXR0 YWNoLT5kaXIgIT0gRE1BX05PTkUpKQo+ID4gPiAgIAkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsK PiA+ID4gLQlzZ3QgPSBvYmotPmRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKG9i aik7Cj4gPiBJIHRoaW5rIGlmIHdlIGp1c3QgY2hlY2sgZm9yIG9iai0+ZnVuY3MgaGVyZSBhbmQg dGhlbiB1bmNvbmRpdGlvbmFsbHkKPiA+IGNhbGwsIHdlIGF2b2lkIGEgYnVuY2ggb2YgcG9pbnRl ciBjaGFzaW5nIGZvciB0aGUgbmV3IHJlY29tbWVuZGVkIHBhdGggOi0pCj4gPiAKPiA+ID4gKwlp ZiAob2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2dldF9zZ190YWJsZSkKPiA+ID4gKwkJc2d0 ID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2dldF9zZ190YWJsZShvYmopOwo+ID4gPiAr CWVsc2UKPiA+ID4gKwkJc2d0ID0gb2JqLT5mdW5jcy0+Z2V0X3NnX3RhYmxlKG9iaik7Cj4gPiA+ ICAgCWlmICghSVNfRVJSKHNndCkpIHsKPiA+ID4gICAJCWlmICghZG1hX21hcF9zZ19hdHRycyhh dHRhY2gtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsIGRpciwKPiA+ID4gQEAgLTQwNiwxMiAr NDAzLDEzIEBAIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9kbWFidWZfcmVsZWFzZSk7Cj4gPiA+ICAg dm9pZCAqZHJtX2dlbV9kbWFidWZfdm1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKPiA+ID4g ICB7Cj4gPiA+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsK PiA+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Cj4gPiA+ICsJdm9pZCAq dmFkZHI7Cj4gPiA+IC0JaWYgKGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdm1hcCkKPiA+ID4gLQkJ cmV0dXJuIGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfdm1hcChvYmopOwo+ID4gPiAtCWVsc2UKPiA+ ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiA+ICsJdmFkZHIgPSBkcm1fZ2VtX3ZtYXAob2JqKTsKPiA+ ID4gKwlpZiAoSVNfRVJSKHZhZGRyKSkKPiA+ID4gKwkJdmFkZHIgPSBOVUxMOwo+ID4gPiArCj4g PiA+ICsJcmV0dXJuIHZhZGRyOwo+ID4gPiAgIH0KPiA+ID4gICBFWFBPUlRfU1lNQk9MKGRybV9n ZW1fZG1hYnVmX3ZtYXApOwo+ID4gPiBAQCAtNDI2LDEwICs0MjQsOCBAQCBFWFBPUlRfU1lNQk9M KGRybV9nZW1fZG1hYnVmX3ZtYXApOwo+ID4gPiAgIHZvaWQgZHJtX2dlbV9kbWFidWZfdnVubWFw KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLCB2b2lkICp2YWRkcikKPiA+ID4gICB7Cj4gPiA+ICAg CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKPiA+ID4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Cj4gPiA+IC0JaWYgKGRldi0+ZHJpdmVyLT5n ZW1fcHJpbWVfdnVubWFwKQo+ID4gPiAtCQlkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3Z1bm1hcChv YmosIHZhZGRyKTsKPiA+ID4gKwlkcm1fZ2VtX3Z1bm1hcChvYmosIHZhZGRyKTsKPiA+ID4gICB9 Cj4gPiA+ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2RtYWJ1Zl92dW5tYXApOwo+ID4gPiBAQCAt NDc2LDEwICs0NzIsMTIgQEAgaW50IGRybV9nZW1fZG1hYnVmX21tYXAoc3RydWN0IGRtYV9idWYg KmRtYV9idWYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ID4gPiAgIAlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiA9IGRtYV9idWYtPnByaXY7Cj4gPiA+ICAgCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBvYmotPmRldjsKPiA+ID4gLQlpZiAoIWRldi0+ZHJpdmVyLT5nZW1fcHJpbWVf bW1hcCkKPiA+ID4gKwlpZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV9tbWFwKQo+ID4gPiArCQly ZXR1cm4gZGV2LT5kcml2ZXItPmdlbV9wcmltZV9tbWFwKG9iaiwgdm1hKTsKPiA+ID4gKwllbHNl IGlmIChvYmotPmZ1bmNzICYmIG9iai0+ZnVuY3MtPm1tYXApCj4gPiA+ICsJCXJldHVybiBkcm1f Z2VtX21tYXBfb2JqKG9iaiwgb2JqLT5zaXplLCB2bWEpOwo+ID4gPiArCWVsc2UKPiA+ID4gICAJ CXJldHVybiAtRU5PU1lTOwo+ID4gPiAtCj4gPiA+IC0JcmV0dXJuIGRldi0+ZHJpdmVyLT5nZW1f cHJpbWVfbW1hcChvYmosIHZtYSk7Cj4gPiA+ICAgfQo+ID4gPiAgIEVYUE9SVF9TWU1CT0woZHJt X2dlbV9kbWFidWZfbW1hcCk7Cj4gPiA+IEBAIC01NjEsNiArNTU5LDggQEAgc3RhdGljIHN0cnVj dCBkbWFfYnVmICpleHBvcnRfYW5kX3JlZ2lzdGVyX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ID4gPiAgIAlpZiAoZGV2LT5kcml2ZXItPmdlbV9wcmltZV9leHBvcnQpCj4gPiA+ICAg CQlkbWFidWYgPSBkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2V4cG9ydChkZXYsIG9iaiwgZmxhZ3Mp Owo+ID4gPiArCWVsc2UgaWYgKG9iai0+ZnVuY3MgJiYgb2JqLT5mdW5jcy0+ZXhwb3J0KQo+ID4g PiArCQlkbWFidWYgPSBvYmotPmZ1bmNzLT5leHBvcnQob2JqLCBmbGFncyk7Cj4gPiA+ICAgCWVs c2UKPiA+ID4gICAJCWRtYWJ1ZiA9IGRybV9nZW1fcHJpbWVfZXhwb3J0KGRldiwgb2JqLCBmbGFn cyk7Cj4gPiA+ICAgCWlmIChJU19FUlIoZG1hYnVmKSkgewo+ID4gPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX2dlbS5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCj4gPiA+IGluZGV4IDM1 ODNiOThhMTcxOC4uM2FlMzY2NWJmNGU3IDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNsdWRlL2RybS9k cm1fZ2VtLmgKPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCj4gPiA+IEBAIC0zOCw2 ICszOCwxMzAgQEAKPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFuYWdlci5oPgo+ID4g PiArc3RydWN0IGRybV9nZW1fb2JqZWN0Owo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIHN0 cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcyAtIEdFTSBvYmplY3QgZnVuY3Rpb25zCj4gPiA+ICsg Ki8KPiA+ID4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5jcyB7Cj4gPiA+ICsJLyoqCj4gPiA+ ICsJICogQGZyZWU6Cj4gPiA+ICsJICoKPiA+ID4gKwkgKiBEZWNvbnN0cnVjdG9yIGZvciBkcm1f Z2VtX29iamVjdHMuCj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG1hbmRh dG9yeS4KPiA+ID4gKwkgKi8KPiA+ID4gKwl2b2lkICgqZnJlZSkoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopOwo+ID4gPiArCj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQG9wZW46Cj4gPiA+ICsJ ICoKPiA+ID4gKwkgKiBDYWxsZWQgdXBvbiBHRU0gaGFuZGxlIGNyZWF0aW9uLgo+ID4gPiArCSAq Cj4gPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiA+ID4gKwkgKi8KPiA+ID4g KwlpbnQgKCpvcGVuKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxl ICpmaWxlKTsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ID4gPiArCSAqIEBjbG9zZV9vYmplY3Q6Cj4g PiBAY2xvc2U6Cj4gPiAKPiA+ID4gKwkgKgo+ID4gPiArCSAqIENhbGxlZCB1cG9uIEdFTSBoYW5k bGUgcmVsZWFzZS4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9u YWwuCj4gPiA+ICsJICovCj4gPiA+ICsJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ID4g PiArCSAqIEBwcmludF9pbmZvOgo+ID4gPiArCSAqCj4gPiA+ICsJICogSWYgZHJpdmVyIHN1YmNs YXNzZXMgc3RydWN0ICZkcm1fZ2VtX29iamVjdCwgaXQgY2FuIGltcGxlbWVudCB0aGlzCj4gPiA+ ICsJICogb3B0aW9uYWwgaG9vayBmb3IgcHJpbnRpbmcgYWRkaXRpb25hbCBkcml2ZXIgc3BlY2lm aWMgaW5mby4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIGRybV9wcmludGZfaW5kZW50KCkgc2hvdWxk IGJlIHVzZWQgaW4gdGhlIGNhbGxiYWNrIHBhc3NpbmcgaXQgdGhlCj4gPiA+ICsJICogaW5kZW50 IGFyZ3VtZW50Lgo+ID4gPiArCSAqCj4gPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQg ZnJvbSBkcm1fZ2VtX3ByaW50X2luZm8oKS4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgY2Fs bGJhY2sgaXMgb3B0aW9uYWwuCj4gPiA+ICsJICovCj4gPiA+ICsJdm9pZCAoKnByaW50X2luZm8p KHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgdW5zaWduZWQgaW50IGluZGVudCwKPiA+ID4gKwkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ ID4gPiArCSAqIEBleHBvcnQ6Cj4gPiA+ICsJICoKPiA+ID4gKwkgKiBFeHBvcnQgYmFja2luZyBi dWZmZXIgYXMgYSAmZG1hX2J1Zi4KPiA+ID4gKwkgKiBJZiB0aGlzIGlzIG5vdCBzZXQgZHJtX2dl bV9wcmltZV9leHBvcnQoKSBpcyB1c2VkLgo+ID4gPiArCSAqCj4gPiA+ICsJICogVGhpcyBjYWxs YmFjayBpcyBvcHRpb25hbC4KPiA+ID4gKwkgKi8KPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1ZiAqKCpl eHBvcnQpKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpOwo+ID4gPiArCj4g PiA+ICsJLyoKPiA+ID4gKwkgKiBAcGluOgo+ID4gPiArCSAqCj4gPiA+ICsJICogUGluIGJhY2tp bmcgYnVmZmVyIGluIG1lbW9yeS4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwuCj4gPiA+ICsJICovCj4gPiA+ICsJaW50ICgqcGluKShzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaik7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIEB1bnBpbjoKPiA+ ID4gKwkgKgo+ID4gPiArCSAqIFVucGluIGJhY2tpbmcgYnVmZmVyLgo+ID4gPiArCSAqCj4gPiA+ ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiA+ID4gKwkgKi8KPiA+ID4gKwl2b2lk ICgqdW5waW4pKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ID4gKwo+ID4gPiArCS8q Cj4gPiA+ICsJICogQGdldF9zZ190YWJsZToKPiA+ID4gKwkgKgo+ID4gPiArCSAqIFJldHVybnMg YSBTY2F0dGVyLUdhdGhlciB0YWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYnVmZmVyLgo+ID4g PiArCSAqIFVzZWQgd2hlbiBleHBvcnRpbmcgYSBidWZmZXIuCj4gPiA+ICsJICoKPiA+ID4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeSBpZiBidWZmZXIgZXhwb3J0IGlzIHN1cHBvcnRl ZC4KPiA+ID4gKwkgKi8KPiA+ID4gKwlzdHJ1Y3Qgc2dfdGFibGUgKigqZ2V0X3NnX3RhYmxlKShz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAq IEB2bWFwOgo+ID4gPiArCSAqCj4gPiA+ICsJICogUmV0dXJucyBhIHZpcnR1YWwgYWRkcmVzcyBm b3IgdGhlIGJ1ZmZlci4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuCj4gPiA+ICsJICovCj4gPiA+ICsJdm9pZCAqKCp2bWFwKShzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaik7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIEB2dW5tYXA6Cj4gPiA+ ICsJICoKPiA+ID4gKwkgKiBSZWxlYXNlcyB0aGUgdGhlIGFkZHJlc3MgcHJldmlvdXNseSByZXR1 cm5lZCBieSBAdm1hcC4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuCj4gPiA+ICsJICovCj4gPiA+ICsJdm9pZCAoKnZ1bm1hcCkoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJICog QG1tYXA6Cj4gPiA+ICsJICoKPiA+ID4gKwkgKiBTZXR1cCB1c2Vyc3BhY2UgbWFwcGluZyB3aXRo IHRoZSBnaXZlbiB2bWEuCj4gPiA+ICsJICoKPiA+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9w dGlvbmFsLgo+ID4gPiArCSAqLwo+ID4gPiArCWludCAoKm1tYXApKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gPiA+ICsKPiA+ID4gKwkv KioKPiA+ID4gKwkgKiBAdm1fb3BzOgo+ID4gPiArCSAqCj4gPiA+ICsJICogVmlydHVhbCBtZW1v cnkgb3BlcmF0aW9ucyB1c2VkIHdpdGggbW1hcC4KPiA+ID4gKwkgKgo+ID4gPiArCSAqIFRoaXMg aXMgb3B0aW9uYWwgYnV0IG5lY2Vzc2FyeSBmb3IgbW1hcCBzdXBwb3J0Lgo+ID4gPiArCSAqLwo+ ID4gPiArCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwo+ID4gPiAr fTsKPiA+IEkgdGhpbmsgZmxlc2hpbmcgb3V0IHRoZSBkb2NzIGEgYml0IGlzIGEgZ29vZCBvcHBv cnR1bml0eSBoZXJlIChhbmQgYWRkaW5nCj4gPiBsaW5rcyB0byB0aGUgb2xkIHBsYWNlIHRoYXQg dGhlIG5ldyBvbmVzIHJlY29tbWVuZGVkKS4gQnV0IHByb2JhYmx5IGJlc3QKPiA+IGluIGZvbGxv dy11cCBwYXRjaGVzLgo+ID4gCj4gPiA+ICsKPiA+ID4gICAvKioKPiA+ID4gICAgKiBzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgLSBHRU0gYnVmZmVyIG9iamVjdAo+ID4gPiAgICAqCj4gPiA+IEBAIC0x NDYsNiArMjcwLDE1IEBAIHN0cnVjdCBkcm1fZ2VtX29iamVjdCB7Cj4gPiA+ICAgCSAqIHNpbXBs eSBsZWF2ZSBpdCBhcyBOVUxMLgo+ID4gPiAgIAkgKi8KPiA+ID4gICAJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqaW1wb3J0X2F0dGFjaDsKPiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJICog QGZ1bmNzOgo+ID4gPiArCSAqCj4gPiA+ICsJICogT3B0aW9uYWwgR0VNIG9iamVjdCBmdW5jdGlv bnMuIElmIHRoaXMgaXMgc2V0LCBpdCB3aWxsIGJlIHVzZWQgaWYgdGhlCj4gPiA+ICsJICogY29y cmVzcG9uZGluZyAmZHJtX2RyaXZlciBHRU0gY2FsbGJhY2sgaXMgbm90IHNldC4KPiA+IE1heWJl IGFsc28gaGVyZSBhIG5vdGUgdGhhdCB0aGlzIGlzIHJlY29tbWVuZGVkIG92ZXIgdGhlIGNhbGxi YWNrcyBpbgo+ID4gJmRybV9kcml2ZXIuCj4gPiAKPiA+IEFzaWRlIGZyb20gYWxsIHRoZSB0aW55 IHN0eWxlIHN1Z2dlc3Rpb25zLCBJIHJlYWxseSBsaWtlIHRoaXMuCj4gPiAtRGFuaWVsCj4gPiAK PiA+ID4gKwkgKgo+ID4gPiArCSAqLwo+ID4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVj dF9mdW5jcyAqZnVuY3M7Cj4gPiA+ICAgfTsKPiA+ID4gICAvKioKPiA+ID4gQEAgLTI5Myw0ICs0 MjYsOSBAQCBpbnQgZHJtX2dlbV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxlICpmaWxlLAo+ ID4gPiAgIAkJCSBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gPiAgIAkJCSB1aW50MzJfdCBo YW5kbGUpOwo+ID4gPiAraW50IGRybV9nZW1fcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq KTsKPiA+ID4gK3ZvaWQgZHJtX2dlbV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7 Cj4gPiA+ICt2b2lkICpkcm1fZ2VtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ ID4gPiArdm9pZCBkcm1fZ2VtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9p ZCAqdmFkZHIpOwo+ID4gPiArCj4gPiA+ICAgI2VuZGlmIC8qIF9fRFJNX0dFTV9IX18gKi8KPiA+ ID4gLS0gCj4gPiA+IDIuMTUuMQo+ID4gPiAKPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiA+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4g PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiA+IGh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4gCgotLSAKRGFuaWVsIFZl dHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3 bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==