From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/2] drm: add SimpleDRM driver Date: Thu, 4 Aug 2016 16:45:00 +0200 Message-ID: <20160804144500.GK6232@phenom.ffwll.local> References: <1470319400-14625-1-git-send-email-noralf@tronnes.org> <1470319400-14625-2-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 86AAF6E9B4 for ; Thu, 4 Aug 2016 14:45:07 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id x83so45145300wma.3 for ; Thu, 04 Aug 2016 07:45:07 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1470319400-14625-2-git-send-email-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: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBBdWcgMDQsIDIwMTYgYXQgMDQ6MDM6MTlQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoZSBTaW1wbGVEUk0gZHJpdmVyIGJpbmRzIHRvIHNpbXBsZS1mcmFtZWJ1ZmZl ciBkZXZpY2VzIGFuZCBwcm92aWRlcyBhCj4gRFJNL0tNUyBBUEkuIEl0IHByb3ZpZGVzIG9ubHkg YSBzaW5nbGUgQ1JUQytlbmNvZGVyK2Nvbm5lY3RvciBjb21iaW5hdGlvbgo+IHBsdXMgb25lIGlu aXRpYWwgbW9kZS4KPiAKPiBVc2Vyc3BhY2UgY2FuIGNyZWF0ZSBkdW1iLWJ1ZmZlcnMgd2hpY2gg Y2FuIGJlIGJsaXQgaW50byB0aGUgcmVhbAo+IGZyYW1lYnVmZmVyIHNpbWlsYXIgdG8gVURMLiBO byBhY2Nlc3MgdG8gdGhlIHJlYWwgZnJhbWVidWZmZXIgaXMgYWxsb3dlZAo+IChjb21wYXJlZCB0 byBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBkcml2ZXIpIHRvIGF2b2lkIHNlY3VyaXR5IGlzc3Vl cy4KPiBGdXJ0aGVybW9yZSwgdGhpcyB3YXkgd2UgY2FuIHN1cHBvcnQgYXJiaXRyYXJ5IG1vZGVz IGFzIGxvbmcgYXMgd2UgaGF2ZSBhCj4gY29udmVyc2lvbi1oZWxwZXIuCj4gCj4gVGhlIGRyaXZl ciB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IERhdmlkIEhlcnJtYW5uIGluIDIwMTQuCj4gTXkg bWFpbiBjb250cmlidXRpb24gaXMgdG8gbWFrZSB1c2Ugb2YgZHJtX3NpbXBsZV9rbXNfaGVscGVy IGFuZAo+IHJld29yayB0aGUgcHJvYmUgcGF0aCB0byBhdm9pZCB1c2Ugb2YgdGhlIGRlcHJlY2F0 ZWQgZHJtX3BsYXRmb3JtX2luaXQoKQo+IGFuZCBkcm1fZHJpdmVyLntsb2FkLHVubG9hZH0oKS4K PiAKPiBDYzogZGguaGVycm1hbm5AZ21haWwuY29tCj4gU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRy w7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpTY3JvbGxlZCB0aHJvdWdoIGl0LCBvbmx5IHNw b3R0ZWQgdGhlIGJlbG93IG5pdCAocGx1cyByZW1vdmluZyB0aGUgbGVnYWN5Cm1tYXAgc3R1ZmYp LiBCdXQgSSdkIGxpa2UgYXQgbGVhc3QgYW4gYWNrIGZyb20gRGF2ZS4KCj4gK3N0YXRpYyBpbnQg c2RybV9zaW1wbGVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4g KwlzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm07Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsK PiArCWludCByZXQ7Cj4gKwo+ICsJZGRldiA9IGRybV9kZXZfYWxsb2MoJnNkcm1fZHJtX2RyaXZl ciwgJnBkZXYtPmRldik7Cj4gKwlpZiAoIWRkZXYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJc2RybSA9IGt6YWxsb2Moc2l6ZW9mKCpzZHJtKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXNk cm0pCj4gKwkJZ290byBlcnJfZnJlZTsKPiArCj4gKwlkZGV2LT5wbGF0Zm9ybWRldiA9IHBkZXY7 Cj4gKwlkZGV2LT5kZXZfcHJpdmF0ZSA9IHNkcm07Cj4gKwlzZHJtLT5kZGV2ID0gZGRldjsKPiAr Cj4gKwlyZXQgPSBzZHJtX3BkZXZfaW5pdChzZHJtKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnJfZnJlZTsKPiArCj4gKwlyZXQgPSBzZHJtX2RybV9tb2Rlc2V0X2luaXQoc2RybSk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyX2Rlc3Ryb3k7Cj4gKwo+ICsJcmV0ID0gZHJtX2Rldl9yZWdp c3RlcihkZGV2LCAwKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY2xlYW51cDsKCmRybV9k ZXZfcmVnaXN0ZXIgbmVlZHMgdG8gYmUgbGFzdCwgYWZ0ZXIgc2V0dGluZyB0aGUgZHJ2ZGF0YS4K LURhbmllbAoKCj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRldik7Cj4gKwo+ ICsJRFJNX0lORk8oIkluaXRpYWxpemVkICVzIG9uIG1pbm9yICVkXG4iLCBkZGV2LT5kcml2ZXIt Pm5hbWUsCj4gKwkJIGRkZXYtPnByaW1hcnktPmluZGV4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr Cj4gK2Vycl9jbGVhbnVwOgo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGRldik7Cj4gK2Vy cl9kZXN0cm95Ogo+ICsJc2RybV9wZGV2X2Rlc3Ryb3koc2RybSk7Cj4gK2Vycl9mcmVlOgo+ICsJ ZHJtX2Rldl91bnJlZihkZGV2KTsKPiArCWtmcmVlKHNkcm0pOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2RybV9zaW1wbGVmYl9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCXN0cnVjdCBzZHJtX2RldmljZSAqc2RybSA9IGRk ZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWRybV9kZXZfdW5yZWdpc3RlcihkZGV2KTsKPiArCWRy bV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRkZXYpOwo+ICsKPiArCS8qIHByb3RlY3QgZmJfbWFwIHJl bW92YWwgYWdhaW5zdCBzZHJtX2JsaXQoKSAqLwo+ICsJZHJtX21vZGVzZXRfbG9ja19hbGwoZGRl dik7Cj4gKwlzZHJtX3BkZXZfZGVzdHJveShzZHJtKTsKPiArCWRybV9tb2Rlc2V0X3VubG9ja19h bGwoZGRldik7Cj4gKwo+ICsJZHJtX2Rldl91bnJlZihkZGV2KTsKPiArCWtmcmVlKHNkcm0pOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBzaW1wbGVmYl9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUt ZnJhbWVidWZmZXIiLCB9LAo+ICsJeyB9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBzaW1wbGVmYl9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBzZHJtX3NpbXBsZWZiX2RyaXZlciA9IHsKPiArCS5wcm9iZSA9IHNkcm1fc2ltcGxlZmJfcHJv YmUsCj4gKwkucmVtb3ZlID0gc2RybV9zaW1wbGVmYl9yZW1vdmUsCj4gKwkuZHJpdmVyID0gewo+ ICsJCS5uYW1lID0gInNpbXBsZS1mcmFtZWJ1ZmZlciIsCj4gKwkJLm1vZF9uYW1lID0gS0JVSUxE X01PRE5BTUUsCj4gKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gKwkJLm9mX21hdGNoX3RhYmxl ID0gc2ltcGxlZmJfb2ZfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2lu aXQgc2RybV9pbml0KHZvaWQpCj4gK3sKPiArCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0 ZXIoJnNkcm1fc2ltcGxlZmJfZHJpdmVyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19leGl0 IHNkcm1fZXhpdCh2b2lkKQo+ICt7Cj4gKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2Ry bV9zaW1wbGVmYl9kcml2ZXIpOwo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdChzZHJtX2luaXQpOwo+ ICttb2R1bGVfZXhpdChzZHJtX2V4aXQpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gK01P RFVMRV9BVVRIT1IoIkRhdmlkIEhlcnJtYW5uIDxkaC5oZXJybWFubkBnbWFpbC5jb20+Iik7Cj4g K01PRFVMRV9ERVNDUklQVElPTigiU2ltcGxlIGZpcm13YXJlIGZyYW1lYnVmZmVyIERSTSBkcml2 ZXIiKTsKPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaW1wbGUtZnJhbWVidWZmZXIiKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NpbXBsZWRybS9zaW1wbGVkcm1fZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9nZW0uYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMmQ1OTYzMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJtL3NpbXBsZWRybV9nZW0uYwo+IEBAIC0wLDAgKzEsMjc2 IEBACj4gKy8qCj4gKyAqIFNpbXBsZURSTSBmaXJtd2FyZSBmcmFtZWJ1ZmZlciBkcml2ZXIKPiAr ICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgRGF2aWQgSGVycm1hbm4gPGRoLmhlcnJtYW5uQGdt YWlsLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPiArICogdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUKPiArICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQo+ICsgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJy bm8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW0u aD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5n Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9sZWdhY3ku aD4KPiArI2luY2x1ZGUgInNpbXBsZWRybS5oIgo+ICsKPiAraW50IHNkcm1fZ2VtX2dldF9wYWdl cyhzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXNpemVfdCBudW0sIGk7Cj4g Kwo+ICsJaWYgKG9iai0+dm1hcHBpbmcpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKG9iai0+ YmFzZS5pbXBvcnRfYXR0YWNoKSB7Cj4gKwkJb2JqLT52bWFwcGluZyA9IGRtYV9idWZfdm1hcChv YmotPmJhc2UuaW1wb3J0X2F0dGFjaC0+ZG1hYnVmKTsKPiArCQlyZXR1cm4gIW9iai0+dm1hcHBp bmcgPyAtRU5PTUVNIDogMDsKPiArCX0KPiArCj4gKwludW0gPSBvYmotPmJhc2Uuc2l6ZSA+PiBQ QUdFX1NISUZUOwo+ICsJb2JqLT5wYWdlcyA9IGRybV9tYWxsb2NfYWIobnVtLCBzaXplb2YoKm9i ai0+cGFnZXMpKTsKPiArCWlmICghb2JqLT5wYWdlcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKPiArCQlvYmotPnBhZ2VzW2ldID0gYWxs b2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwkJaWYgKCFvYmotPnBhZ2VzW2ld KQo+ICsJCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCW9iai0+dm1hcHBpbmcgPSB2bWFwKG9i ai0+cGFnZXMsIG51bSwgMCwgUEFHRV9LRVJORUwpOwo+ICsJaWYgKCFvYmotPnZtYXBwaW5nKQo+ ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJvcjoKPiArCXdoaWxl IChpID4gMCkKPiArCQlfX2ZyZWVfcGFnZXMob2JqLT5wYWdlc1stLWldLCAwKTsKPiArCj4gKwlk cm1fZnJlZV9sYXJnZShvYmotPnBhZ2VzKTsKPiArCW9iai0+cGFnZXMgPSBOVUxMOwo+ICsJcmV0 dXJuIC1FTk9NRU07Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNkcm1fZ2VtX3B1dF9wYWdlcyhz dHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXNpemVfdCBudW0sIGk7Cj4gKwo+ ICsJaWYgKCFvYmotPnZtYXBwaW5nKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAob2JqLT5iYXNl LmltcG9ydF9hdHRhY2gpIHsKPiArCQlkbWFfYnVmX3Z1bm1hcChvYmotPmJhc2UuaW1wb3J0X2F0 dGFjaC0+ZG1hYnVmLCBvYmotPnZtYXBwaW5nKTsKPiArCQlvYmotPnZtYXBwaW5nID0gTlVMTDsK PiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJdnVubWFwKG9iai0+dm1hcHBpbmcpOwo+ICsJb2Jq LT52bWFwcGluZyA9IE5VTEw7Cj4gKwo+ICsJbnVtID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9T SElGVDsKPiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkKPiArCQlfX2ZyZWVfcGFnZXMob2Jq LT5wYWdlc1tpXSwgMCk7Cj4gKwo+ICsJZHJtX2ZyZWVfbGFyZ2Uob2JqLT5wYWdlcyk7Cj4gKwlv YmotPnBhZ2VzID0gTlVMTDsKPiArfQo+ICsKPiArc3RydWN0IHNkcm1fZ2VtX29iamVjdCAqc2Ry bV9nZW1fYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LAo+ICsJCQkJCSAgICAg IHNpemVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ ICsJV0FSTl9PTighc2l6ZSB8fCAoc2l6ZSAmIH5QQUdFX01BU0spICE9IDApOwo+ICsKPiArCW9i aiA9IGt6YWxsb2Moc2l6ZW9mKCpvYmopLCBHRlBfS0VSTkVMKTsKPiArCWlmICghb2JqKQo+ICsJ CXJldHVybiBOVUxMOwo+ICsKPiArCWRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdChkZGV2LCAm b2JqLT5iYXNlLCBzaXplKTsKPiArCXJldHVybiBvYmo7Cj4gK30KPiArCj4gK3ZvaWQgc2RybV9n ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKQo+ICt7Cj4gKwlzdHJ1 Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmogPSB0b19zZHJtX2JvKGdvYmopOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRkZXYgPSBnb2JqLT5kZXY7Cj4gKwo+ICsJaWYgKG9iai0+cGFnZXMpIHsKPiAr CQkvKiBraWxsIGFsbCB1c2VyLXNwYWNlIG1hcHBpbmdzICovCj4gKwkJZHJtX3ZtYV9ub2RlX3Vu bWFwKCZnb2JqLT52bWFfbm9kZSwKPiArCQkJCSAgIGRkZXYtPmFub25faW5vZGUtPmlfbWFwcGlu Zyk7Cj4gKwkJc2RybV9nZW1fcHV0X3BhZ2VzKG9iaik7Cj4gKwl9Cj4gKwo+ICsJaWYgKGdvYmot PmltcG9ydF9hdHRhY2gpCj4gKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KGdvYmosIG9iai0+c2cp Owo+ICsKPiArCWRybV9nZW1fZnJlZV9tbWFwX29mZnNldChnb2JqKTsKPiArCWRybV9nZW1fb2Jq ZWN0X3JlbGVhc2UoZ29iaik7Cj4gKwlrZnJlZShvYmopOwo+ICt9Cj4gKwo+ICtpbnQgc2RybV9k dW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmRmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGRl diwKPiArCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPiArewo+ICsJ c3RydWN0IHNkcm1fZ2VtX29iamVjdCAqb2JqOwo+ICsJaW50IHI7Cj4gKwo+ICsJaWYgKGFyZ3Mt PmZsYWdzKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCS8qIG92ZXJmbG93IGNoZWNrcyBh cmUgZG9uZSBieSBEUk0gY29yZSAqLwo+ICsJYXJncy0+cGl0Y2ggPSAoYXJncy0+YnBwICsgNykg LyA4ICogYXJncy0+d2lkdGg7Cj4gKwlhcmdzLT5zaXplID0gUEFHRV9BTElHTihhcmdzLT5waXRj aCAqIGFyZ3MtPmhlaWdodCk7Cj4gKwo+ICsJb2JqID0gc2RybV9nZW1fYWxsb2Nfb2JqZWN0KGRk ZXYsIGFyZ3MtPnNpemUpOwo+ICsJaWYgKCFvYmopCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShkZmlsZSwgJm9iai0+YmFzZSwgJmFyZ3MtPmhh bmRsZSk7Cj4gKwlpZiAocikgewo+ICsJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9j a2VkKCZvYmotPmJhc2UpOwo+ICsJCXJldHVybiByOwo+ICsJfQo+ICsKPiArCS8qIGhhbmRsZSBv d25zIGEgcmVmZXJlbmNlICovCj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tl ZCgmb2JqLT5iYXNlKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgc2RybV9kdW1iX2Rl c3Ryb3koc3RydWN0IGRybV9maWxlICpkZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsCj4g KwkJICAgICAgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2dlbV9oYW5kbGVf ZGVsZXRlKGRmaWxlLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ICtpbnQgc2RybV9kdW1iX21hcF9vZmZz ZXQoc3RydWN0IGRybV9maWxlICpkZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsCj4gKwkJ CSB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpCj4gK3sKPiArCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ29iajsKPiArCWludCByOwo+ICsKPiArCW11dGV4X2xvY2soJmRkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gKwo+ICsJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZmlsZSwg aGFuZGxlKTsKPiArCWlmICghZ29iaikgewo+ICsJCXIgPSAtRU5PRU5UOwo+ICsJCWdvdG8gb3V0 X3VubG9jazsKPiArCX0KPiArCj4gKwlyID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQoZ29i aik7Cj4gKwlpZiAocikKPiArCQlnb3RvIG91dF91bnJlZjsKPiArCj4gKwkqb2Zmc2V0ID0gZHJt X3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnb2JqLT52bWFfbm9kZSk7Cj4gKwo+ICtvdXRfdW5yZWY6 Cj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKPiArb3V0X3VubG9jazoKPiAr CW11dGV4X3VubG9jaygmZGRldi0+c3RydWN0X211dGV4KTsKPiArCXJldHVybiByOwo+ICt9Cj4g Kwo+ICtpbnQgc2RybV9kcm1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCj4gK3sKPiArCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZh dGVfZGF0YTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2Owo+ ICsJc3RydWN0IGRybV92bWFfb2Zmc2V0X25vZGUgKm5vZGU7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdvYmo7Cj4gKwlzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzaXplX3Qg c2l6ZSwgaSwgbnVtOwo+ICsJaW50IHI7Cj4gKwo+ICsJaWYgKGRybV9kZXZpY2VfaXNfdW5wbHVn Z2VkKGRldikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZHJtX3ZtYV9vZmZzZXRfbG9j a19sb29rdXAoZGV2LT52bWFfb2Zmc2V0X21hbmFnZXIpOwo+ICsJbm9kZSA9IGRybV92bWFfb2Zm c2V0X2V4YWN0X2xvb2t1cF9sb2NrZWQoZGV2LT52bWFfb2Zmc2V0X21hbmFnZXIsCj4gKwkJCQkJ CSAgdm1hLT52bV9wZ29mZiwKPiArCQkJCQkJICB2bWFfcGFnZXModm1hKSk7Cj4gKwlkcm1fdm1h X29mZnNldF91bmxvY2tfbG9va3VwKGRldi0+dm1hX29mZnNldF9tYW5hZ2VyKTsKPiArCj4gKwlp ZiAoIW5vZGUpCj4gKwkJcmV0dXJuIGRybV9sZWdhY3lfbW1hcChmaWxwLCB2bWEpOwo+ICsJZWxz ZSBpZiAoIWRybV92bWFfbm9kZV9pc19hbGxvd2VkKG5vZGUsIGZpbHApKQo+ICsJCXJldHVybiAt RUFDQ0VTOwo+ICsKPiArCWdvYmogPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9nZW1f b2JqZWN0LCB2bWFfbm9kZSk7Cj4gKwlvYmogPSB0b19zZHJtX2JvKGdvYmopOwo+ICsJc2l6ZSA9 IGRybV92bWFfbm9kZV9zaXplKG5vZGUpIDw8IFBBR0VfU0hJRlQ7Cj4gKwlpZiAoc2l6ZSA8IHZt YS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkKPiArCQlyZXR1cm4gcjsKPiArCj4gKwlyID0gc2Ry bV9nZW1fZ2V0X3BhZ2VzKG9iaik7Cj4gKwlpZiAociA8IDApCj4gKwkJcmV0dXJuIHI7Cj4gKwo+ ICsJLyogcHJldmVudCBkbWFidWYtaW1wb3J0ZWQgbW1hcCB0byB1c2VyLXNwYWNlICovCj4gKwlp ZiAoIW9iai0+cGFnZXMpCj4gKwkJcmV0dXJuIC1FQUNDRVM7Cj4gKwo+ICsJdm1hLT52bV9mbGFn cyB8PSBWTV9ET05URVhQQU5EOwo+ICsJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVj b21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOwo+ICsKPiArCW51bSA9ICh2 bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7Cj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtOyArK2kpIHsKPiArCQlyID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCB2bWEtPnZtX3N0 YXJ0ICsgaSAqIFBBR0VfU0laRSwKPiArCQkJCSAgIG9iai0+cGFnZXNbaV0pOwo+ICsJCWlmIChy IDwgMCkgewo+ICsJCQlpZiAoaSA+IDApCj4gKwkJCQl6YXBfdm1hX3B0ZXModm1hLCB2bWEtPnZt X3N0YXJ0LCBpICogUEFHRV9TSVpFKTsKPiArCQkJcmV0dXJuIHI7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnNkcm1fZ2Vt X3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKPiArCQkJCQkgICAgIHN0cnVj dCBkbWFfYnVmICpkbWFfYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICph dHRhY2g7Cj4gKwlzdHJ1Y3Qgc2RybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3Qgc2dfdGFi bGUgKnNnOwo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBuZWVkIHRvIGF0dGFjaCAqLwo+ICsJYXR0 YWNoID0gZG1hX2J1Zl9hdHRhY2goZG1hX2J1ZiwgZGRldi0+ZGV2KTsKPiArCWlmIChJU19FUlIo YXR0YWNoKSkKPiArCQlyZXR1cm4gRVJSX0NBU1QoYXR0YWNoKTsKPiArCj4gKwlnZXRfZG1hX2J1 ZihkbWFfYnVmKTsKPiArCj4gKwlzZyA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBE TUFfQklESVJFQ1RJT05BTCk7Cj4gKwlpZiAoSVNfRVJSKHNnKSkgewo+ICsJCXJldCA9IFBUUl9F UlIoc2cpOwo+ICsJCWdvdG8gZmFpbF9kZXRhY2g7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIGRt YV9idWZfdm1hcCgpIGdpdmVzIHVzIGEgcGFnZS1hbGlnbmVkIG1hcHBpbmcsIHNvIGxldHMgYnVt cCB0aGUKPiArCSAqIHNpemUgb2YgdGhlIGRtYS1idWYgdG8gdGhlIG5leHQgcGFnZS1ib3VuZGFy eQo+ICsJICovCj4gKwlvYmogPSBzZHJtX2dlbV9hbGxvY19vYmplY3QoZGRldiwgUEFHRV9BTElH TihkbWFfYnVmLT5zaXplKSk7Cj4gKwlpZiAoIW9iaikgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4g KwkJZ290byBmYWlsX3VubWFwOwo+ICsJfQo+ICsKPiArCW9iai0+c2cgPSBzZzsKPiArCW9iai0+ YmFzZS5pbXBvcnRfYXR0YWNoID0gYXR0YWNoOwo+ICsKPiArCXJldHVybiAmb2JqLT5iYXNlOwo+ ICsKPiArZmFpbF91bm1hcDoKPiArCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIHNn LCBETUFfQklESVJFQ1RJT05BTCk7Cj4gK2ZhaWxfZGV0YWNoOgo+ICsJZG1hX2J1Zl9kZXRhY2go ZG1hX2J1ZiwgYXR0YWNoKTsKPiArCWRtYV9idWZfcHV0KGRtYV9idWYpOwo+ICsJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2ltcGxlZHJt L3NpbXBsZWRybV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2tt cy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42Mjk1YTlmCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaW1wbGVkcm0vc2ltcGxlZHJtX2tt cy5jCj4gQEAgLTAsMCArMSwyNzYgQEAKPiArLyoKPiArICogU2ltcGxlRFJNIGZpcm13YXJlIGZy YW1lYnVmZmVyIGRyaXZlcgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBEYXZpZCBIZXJy bWFubiA8ZGguaGVycm1hbm5AZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAo+ ICsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZQo+ICsgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCj4gKyAqIGFueSBs YXRlciB2ZXJzaW9uLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+ICsj aW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tbS5oPgo+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hl bHBlci5oPgo+ICsjaW5jbHVkZSAic2ltcGxlZHJtLmgiCj4gKwo+ICtzdGF0aWMgY29uc3QgdWlu dDMyX3Qgc2RybV9mb3JtYXRzW10gPSB7Cj4gKwlEUk1fRk9STUFUX1JHQjU2NSwKPiArCURSTV9G T1JNQVRfQVJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCBzZHJtX2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQo+ ICt7Cj4gKwlzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0gPSBjb25uLT5kZXYtPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwo+ICsJbW9kZSA9IGRybV9j dnRfbW9kZShzZHJtLT5kZGV2LCBzZHJtLT5mYl93aWR0aCwgc2RybS0+ZmJfaGVpZ2h0LAo+ICsJ CQkgICAgNjAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwo+ICsJaWYgKCFtb2RlKQo+ICsJCXJldHVy biAwOwo+ICsKPiArCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RF X1RZUEVfUFJFRkVSUkVEOwo+ICsJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4gKwlkcm1fbW9k ZV9wcm9iZWRfYWRkKGNvbm4sIG1vZGUpOwo+ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHNkcm1fY29ubl9o ZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVzID0gc2RybV9jb25uX2dldF9tb2RlcywKPiArCS5iZXN0 X2VuY29kZXIgPSBkcm1fYXRvbWljX2hlbHBlcl9iZXN0X2VuY29kZXIsCj4gK307Cj4gKwo+ICtz dGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzZHJtX2Nvbm5fZGV0ZWN0KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uLAo+ICsJCQkJCQkgIGJvb2wgZm9yY2UpCj4gK3sKPiArCS8qCj4g KwkgKiBXZSBzaW11bGF0ZSBhbiBhbHdheXMgY29ubmVjdGVkIG1vbml0b3IuIHNpbXBsZS1mYiBk b2Vzbid0Cj4gKwkgKiBwcm92aWRlIGFueSB3YXkgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIGNvbm5l Y3RvciBpcyBhY3RpdmUuIEhlbmNlLAo+ICsJICogc2lnbmFsIERSTSBjb3JlIHRoYXQgaXQgaXMg YWx3YXlzIGNvbm5lY3RlZC4KPiArCSAqLwo+ICsKPiArCXJldHVybiBjb25uZWN0b3Jfc3RhdHVz X2Nvbm5lY3RlZDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X2Z1bmNzIHNkcm1fY29ubl9vcHMgPSB7Cj4gKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kcG1zLAo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jl c2V0LAo+ICsJLmRldGVjdCA9IHNkcm1fY29ubl9kZXRlY3QsCj4gKwkuZmlsbF9tb2RlcyA9IGRy bV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiArCS5kZXN0cm95ID0gZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwLAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4gK307 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBzZHJtX2RldmljZSAqCj4gK3BpcGVfdG9fc2Ry bShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUpCj4gK3sKPiArCXJldHVybiBj b250YWluZXJfb2YocGlwZSwgc3RydWN0IHNkcm1fZGV2aWNlLCBwaXBlKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBzZHJtX2Rpc3BsYXlfcGlwZV9jaGVjayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGUgKnBpcGUsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsKPiAr CXN0cnVjdCBzZHJtX2RldmljZSAqc2RybSA9IHBpcGVfdG9fc2RybShwaXBlKTsKPiArCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmZiOwo+ICsJdTMyIHggPSBwbGFu ZV9zdGF0ZS0+c3JjX3ggPj4gMTY7Cj4gKwl1MzIgeSA9IHBsYW5lX3N0YXRlLT5zcmNfeSA+PiAx NjsKPiArCj4gKwlpZiAobW9kZS0+aGRpc3BsYXkgIT0gc2RybS0+ZmJfd2lkdGggfHwKPiArCSAg ICBtb2RlLT52ZGlzcGxheSAhPSBzZHJtLT5mYl9oZWlnaHQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwlpZiAoZmItPndpZHRoIDw9IHggfHwgZmItPmhlaWdodCA8PSB5IHx8Cj4gKwkgICAgZmIt PndpZHRoIC0geCA8IHNkcm0tPmZiX3dpZHRoIHx8IGZiLT5oZWlnaHQgLSB5IDwgc2RybS0+ZmJf aGVpZ2h0KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICt2b2lkIHNkcm1fZGlzcGxheV9waXBlX3VwZGF0ZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5 X3BpcGUgKnBpcGUsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBpcGUtPnBsYW5lLnN0 YXRlLT5mYjsKPiArCXN0cnVjdCBzZHJtX2RldmljZSAqc2RybSA9IHBpcGVfdG9fc2RybShwaXBl KTsKPiArCj4gKwlpZiAoZmIpCj4gKwkJc2RybV9kaXJ0eV9hbGxfbG9ja2VkKHNkcm0pOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoc3RydWN0IGRy bV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlpZiAoY3J0Yy0+c3RhdGUgJiYgY3J0Yy0+c3RhdGUtPmV2 ZW50KSB7Cj4gKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKPiArCQlk cm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBjcnRjLT5zdGF0ZS0+ZXZlbnQpOwo+ICsJ CXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKPiArCQljcnRjLT5zdGF0 ZS0+ZXZlbnQgPSBOVUxMOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZHJtX2Rpc3Bs YXlfcGlwZV9lbmFibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAo+ICsJ CQkJICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXNkcm1f Y3J0Y19zZW5kX3ZibGFua19ldmVudCgmcGlwZS0+Y3J0Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHNkcm1fZGlzcGxheV9waXBlX2Rpc2FibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9w aXBlICpwaXBlKQo+ICt7Cj4gKwlzZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoJnBpcGUtPmNy dGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9w aXBlX2Z1bmNzIHNkcm1fcGlwZV9mdW5jcyA9IHsKPiArCS5jaGVjayA9IHNkcm1fZGlzcGxheV9w aXBlX2NoZWNrLAo+ICsJLnVwZGF0ZSA9IHNkcm1fZGlzcGxheV9waXBlX3VwZGF0ZSwKPiArCS5l bmFibGUgPSBzZHJtX2Rpc3BsYXlfcGlwZV9lbmFibGUsCj4gKwkuZGlzYWJsZSA9IHNkcm1fZGlz cGxheV9waXBlX2Rpc2FibGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHNkcm1fZmJfY3JlYXRl X2hhbmRsZShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiArCQkJCSBzdHJ1Y3QgZHJtX2Zp bGUgKmRmaWxlLAo+ICsJCQkJIHVuc2lnbmVkIGludCAqaGFuZGxlKQo+ICt7Cj4gKwlzdHJ1Y3Qg c2RybV9mcmFtZWJ1ZmZlciAqc2ZiID0gdG9fc2RybV9mYihmYik7Cj4gKwo+ICsJcmV0dXJuIGRy bV9nZW1faGFuZGxlX2NyZWF0ZShkZmlsZSwgJnNmYi0+b2JqLT5iYXNlLCBoYW5kbGUpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZHJtX2ZiX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCj4gK3sKPiArCXN0cnVjdCBzZHJtX2ZyYW1lYnVmZmVyICpzZmIgPSB0b19zZHJtX2Zi KGZiKTsKPiArCj4gKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7Cj4gKwlkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmc2ZiLT5vYmotPmJhc2UpOwo+ICsJa2ZyZWUoc2Zi KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3Mg c2RybV9mYl9vcHMgPSB7Cj4gKwkuY3JlYXRlX2hhbmRsZSA9IHNkcm1fZmJfY3JlYXRlX2hhbmRs ZSwKPiArCS5kaXJ0eSA9IHNkcm1fZGlydHksCj4gKwkuZGVzdHJveSA9IHNkcm1fZmJfZGVzdHJv eSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpzZHJtX2ZiX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKPiArCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2Zp bGUgKmRmaWxlLAo+ICsJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpj bWQpCj4gK3sKPiArCXN0cnVjdCBzZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiArCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqZ29iajsKPiArCXUzMiBicHAsIHNpemU7Cj4gKwlpbnQgcmV0Owo+ICsJdm9p ZCAqZXJyOwo+ICsKPiArCWlmIChjbWQtPmZsYWdzKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwo+ICsKPiArCWdvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGZpbGUsIGNtZC0+aGFu ZGxlc1swXSk7Cj4gKwlpZiAoIWdvYmopCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4g Kwo+ICsJZmIgPSBremFsbG9jKHNpemVvZigqZmIpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZmIp IHsKPiArCQllcnIgPSBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJCWdvdG8gZXJyX3VucmVmOwo+ICsJ fQo+ICsJZmItPm9iaiA9IHRvX3Nkcm1fYm8oZ29iaik7Cj4gKwo+ICsJZmItPmJhc2UucGl0Y2hl c1swXSA9IGNtZC0+cGl0Y2hlc1swXTsKPiArCWZiLT5iYXNlLm9mZnNldHNbMF0gPSBjbWQtPm9m ZnNldHNbMF07Cj4gKwlmYi0+YmFzZS53aWR0aCA9IGNtZC0+d2lkdGg7Cj4gKwlmYi0+YmFzZS5o ZWlnaHQgPSBjbWQtPmhlaWdodDsKPiArCWZiLT5iYXNlLnBpeGVsX2Zvcm1hdCA9IGNtZC0+cGl4 ZWxfZm9ybWF0Owo+ICsJZHJtX2ZiX2dldF9icHBfZGVwdGgoY21kLT5waXhlbF9mb3JtYXQsICZm Yi0+YmFzZS5kZXB0aCwKPiArCQkJICAgICAmZmItPmJhc2UuYml0c19wZXJfcGl4ZWwpOwo+ICsK PiArCS8qCj4gKwkgKiB3aWR0aC9oZWlnaHQgYXJlIGFscmVhZHkgY2xhbXBlZCBpbnRvIG1pbi9t YXhfd2lkdGgvaGVpZ2h0IHJhbmdlLAo+ICsJICogc28gb3ZlcmZsb3dzIGFyZSBub3QgcG9zc2li bGUKPiArCSAqLwo+ICsKPiArCWJwcCA9IChmYi0+YmFzZS5iaXRzX3Blcl9waXhlbCArIDcpIC8g ODsKPiArCXNpemUgPSBjbWQtPnBpdGNoZXNbMF0gKiBjbWQtPmhlaWdodDsKPiArCWlmICghYnBw IHx8Cj4gKwkgICAgYnBwID4gNCB8fAo+ICsJICAgIGNtZC0+cGl0Y2hlc1swXSA8IGJwcCAqIGZi LT5iYXNlLndpZHRoIHx8Cj4gKwkgICAgY21kLT5waXRjaGVzWzBdID4gMHhmZmZmVSB8fAo+ICsJ ICAgIHNpemUgKyBmYi0+YmFzZS5vZmZzZXRzWzBdIDwgc2l6ZSB8fAo+ICsJICAgIHNpemUgKyBm Yi0+YmFzZS5vZmZzZXRzWzBdID4gZmItPm9iai0+YmFzZS5zaXplKSB7Cj4gKwkJZXJyID0gRVJS X1BUUigtRUlOVkFMKTsKPiArCQlnb3RvIGVycl9mcmVlOwo+ICsJfQo+ICsKPiArCXJldCA9IGRy bV9mcmFtZWJ1ZmZlcl9pbml0KGRkZXYsICZmYi0+YmFzZSwgJnNkcm1fZmJfb3BzKTsKPiArCWlm IChyZXQgPCAwKSB7Cj4gKwkJZXJyID0gRVJSX1BUUihyZXQpOwo+ICsJCWdvdG8gZXJyX2ZyZWU7 Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiW0ZCOiVkXSBwaXhlbF9mb3JtYXQ6ICVzXG4i LCBmYi0+YmFzZS5iYXNlLmlkLAo+ICsJCSAgICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZmItPmJh c2UucGl4ZWxfZm9ybWF0KSk7Cj4gKwo+ICsJcmV0dXJuICZmYi0+YmFzZTsKPiArCj4gK2Vycl9m cmVlOgo+ICsJa2ZyZWUoZmIpOwo+ICtlcnJfdW5yZWY6Cj4gKwlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBzZHJtX21vZGVfY29uZmln X29wcyA9IHsKPiArCS5mYl9jcmVhdGUgPSBzZHJtX2ZiX2NyZWF0ZSwKPiArCS5hdG9taWNfY2hl Y2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0 b21pY19oZWxwZXJfY29tbWl0LAo+ICt9Owo+ICsKPiAraW50IHNkcm1fZHJtX21vZGVzZXRfaW5p dChzdHJ1Y3Qgc2RybV9kZXZpY2UgKnNkcm0pCj4gK3sKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uID0gJnNkcm0tPmNvbm47Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHNkcm0t PmRkZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRkZXYpOwo+ ICsJZGRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMTsKPiArCWRkZXYtPm1vZGVfY29uZmln Lm1pbl9oZWlnaHQgPSAxOwo+ICsJZGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gODE5MjsK PiArCWRkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA4MTkyOwo+ICsJZGRldi0+bW9kZV9j b25maWcucHJlZmVycmVkX2RlcHRoID0gc2RybS0+ZmJfYnBwOwo+ICsJZGRldi0+bW9kZV9jb25m aWcuZnVuY3MgPSAmc2RybV9tb2RlX2NvbmZpZ19vcHM7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfYWRkKGNvbm4sICZzZHJtX2Nvbm5faGZ1bmNzKTsKPiArCXJldCA9IGRybV9jb25uZWN0 b3JfaW5pdChkZGV2LCBjb25uLCAmc2RybV9jb25uX29wcywKPiArCQkJCSBEUk1fTU9ERV9DT05O RUNUT1JfVklSVFVBTCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NsZWFudXA7Cj4gKwo+ ICsJcmV0ID0gZHJtX21vZGVfY3JlYXRlX2RpcnR5X2luZm9fcHJvcGVydHkoZGRldik7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NsZWFudXA7Cj4gKwo+ICsJZHJtX29iamVjdF9hdHRhY2hf cHJvcGVydHkoJmNvbm4tPmJhc2UsCj4gKwkJCQkgICBkZGV2LT5tb2RlX2NvbmZpZy5kaXJ0eV9p bmZvX3Byb3BlcnR5LAo+ICsJCQkJICAgRFJNX01PREVfRElSVFlfT04pOwo+ICsKPiArCXJldCA9 IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoZGRldiwgJnNkcm0tPnBpcGUsICZzZHJtX3Bp cGVfZnVuY3MsCj4gKwkJCQkJICAgc2RybV9mb3JtYXRzLAo+ICsJCQkJCSAgIEFSUkFZX1NJWkUo c2RybV9mb3JtYXRzKSwgY29ubik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NsZWFudXA7 Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRkZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ ICsKPiArZXJyX2NsZWFudXA6Cj4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZGV2KTsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gLS0KPiAyLjguMgo+IAo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29m dHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=