From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm/vgem: implement virtual GEM Date: Fri, 21 Nov 2014 09:17:56 +0100 Message-ID: <20141121081756.GN25711@phenom.ffwll.local> References: <1416529576-20471-1-git-send-email-zachr@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f178.google.com (mail-wi0-f178.google.com [209.85.212.178]) by gabe.freedesktop.org (Postfix) with ESMTP id 5634C6E11E for ; Fri, 21 Nov 2014 00:17:35 -0800 (PST) Received: by mail-wi0-f178.google.com with SMTP id hi2so7904689wib.11 for ; Fri, 21 Nov 2014 00:17:32 -0800 (PST) Content-Disposition: inline In-Reply-To: <1416529576-20471-1-git-send-email-zachr@google.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Zach Reizner Cc: =?iso-8859-1?Q?St=E9phane?= Marchesin , Ben Widawsky , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBOb3YgMjAsIDIwMTQgYXQgMDQ6MjY6MTZQTSAtMDgwMCwgWmFjaCBSZWl6bmVyIHdy b3RlOgo+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgdmlydHVhbCBHRU0gZHJpdmVyIHdpdGgg UFJJTUUgc2hhcmluZyB3aGljaAo+IGFsbG93cyB2Z2VtIHRvIGltcG9ydCBhIGdlbSBvYmplY3Qg ZnJvbSBvdGhlciBkcml2ZXJzIGZvciB0aGUgcHVycG9zZQo+IG9mIG1tYXAtaW5nIHRoZW0gdG8g dXNlcnNwYWNlLgo+IAo+IFJldmlld2VkLWJ5OiBTdMOpcGhhbmUgTWFyY2hlc2luIDxtYXJjaGV1 QGNocm9taXVtLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0 LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4g U2lnbmVkLW9mZi1ieTogWmFjaCBSZWl6bmVyIDx6YWNockBnb29nbGUuY29tPgoKQXdlc29tZSB0 aGF0IHNvbWVvbmUgcmVzdXJyZWN0cyB0aGlzLCBJIHN0aWxsIGxpa2UgdGhlIGlkZWEgKGFmdGVy IGFsbApJJ3ZlIHN1Z2dlc3RlZCB0aGlzIHRvIEJlbiBhZ2VzIGFnbykuIEJ1bmNoIG9mIGNvbW1l bnRzIGJlbG93IHRvIHVwZGF0ZQp0aGUgZHJpdmVyIHRvIGxhdGVzdCBkcm0gY2hhbmdlcy4gV2hp dCB0aG9zZSBhZGRyZXNzIHRoaXMgbG9va3MgZ29vZC4KCkNoZWVycywgRGFuaWVsCgo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICB8ICAgOSArCj4gIGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL3Zn ZW0vTWFrZWZpbGUgICAgICAgfCAgIDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rt YV9idWYuYyB8IDE2OSArKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdl bV9kcnYuYyAgICAgfCA0MDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmggICAgIHwgIDYyICsrKysrKwo+ICA2IGZp bGVzIGNoYW5nZWQsIDY1MiBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdmdlbS9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZnZW0vdmdlbV9kbWFfYnVmLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS92Z2VtL3ZnZW1fZHJ2LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IGUzYjRiMGYuLjM5OTA5YmMg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwo+IEBAIC0xNjUsNiArMTY1LDE1IEBAIGNvbmZpZyBEUk1fU0FWQUdFCj4g IAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFNhdmFnZTNELzQvU3VwZXJTYXZh Z2UvUHJvL1R3aXN0ZXIKPiAgCSAgY2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIHNhdmFnZS4KPiAgCj4gK2NvbmZpZyBEUk1fVkdFTQo+ICsJdHJpc3Rh dGUgIlZpcnR1YWwgR0VNIHByb3ZpZGVyIgo+ICsJZGVwZW5kcyBvbiBEUk0KPiArCWhlbHAKPiAr CSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGdldCBhIHZpcnR1YWwgZ3JhcGhpY3MgbWVtb3J5IG1h bmFnZXIsCj4gKwkgIGFzIHVzZWQgYnkgTWVzYSdzIHNvZnR3YXJlIHJlbmRlcmVyIGZvciBlbmhh bmNlZCBwZXJmb3JtYW5jZS4KPiArCSAgSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwg YmUgY2FsbGVkIHZnZW0uCj4gKwo+ICsKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vZXh5bm9z L0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92bXdnZngvS2NvbmZpZyIK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCj4gaW5kZXggYzNjZjY0Yy4uYzFlNGEwZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAt NDcsNiArNDcsNyBAQCBvYmotJChDT05GSUdfRFJNX1NJUykgICArPSBzaXMvCj4gIG9iai0kKENP TkZJR19EUk1fU0FWQUdFKSs9IHNhdmFnZS8KPiAgb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpKz0g dm13Z2Z4Lwo+ICBvYmotJChDT05GSUdfRFJNX1ZJQSkJKz12aWEvCj4gK29iai0kKENPTkZJR19E Uk1fVkdFTSkJKz0gdmdlbS8KPiAgb2JqLSQoQ09ORklHX0RSTV9OT1VWRUFVKSArPW5vdXZlYXUv Cj4gIG9iai0kKENPTkZJR19EUk1fRVhZTk9TKSArPWV4eW5vcy8KPiAgb2JqLSQoQ09ORklHX0RS TV9HTUE1MDApICs9IGdtYTUwMC8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0v TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTA1NWNiNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdmdlbS9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsNCBAQAo+ICtjY2ZsYWdz LXkgOj0gLUlpbmNsdWRlL2RybQo+ICt2Z2VtLXkgOj0gdmdlbV9kcnYubyB2Z2VtX2RtYV9idWYu bwo+ICsKPiArb2JqLSQoQ09ORklHX0RSTV9WR0VNKQkrPSB2Z2VtLm8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmdl bS92Z2VtX2RtYV9idWYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u ODQ1MDEyNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2Vt X2RtYV9idWYuYwo+IEBAIC0wLDAgKzEsMTY5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAy MDEyIEludGVsIENvcnBvcmF0aW9uCj4gKyAqIENvcHlyaWdodCDCqSAyMDE0IFRoZSBDaHJvbWl1 bSBPUyBBdXRob3JzCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhv cnM6Cj4gKyAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KPiArICoKPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5jbHVkZSAidmdlbV9kcnYu aCIKPiArCj4gKyNkZWZpbmUgVkdFTV9GRF9QRVJNUyAwNjAwCj4gKwo+ICtzdGF0aWMgc3RydWN0 IHNnX3RhYmxlICp2Z2VtX2dlbV9tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICphdHRhY2gsCj4gKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCj4gK3sK PiArCXN0cnVjdCBkcm1fdmdlbV9nZW1fb2JqZWN0ICpvYmogPSBhdHRhY2gtPmRtYWJ1Zi0+cHJp djsKPiArCXN0cnVjdCBzZ190YWJsZSAqc2c7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHZn ZW1fZ2VtX2dldF9wYWdlcyhvYmopOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihy ZXQpOwo+ICsKPiArCS8qIFZHRU0gYXNzdW1lcyBjYWNoZSBjb2hlcmVudCBhY2Nlc3MuIE5vcm1h bGx5IHdlIG1pZ2h0IGhhdmUgdG8gZmx1c2gKPiArCSAqIGNhY2hlcyBoZXJlICovCj4gKwo+ICsJ QlVHX09OKG9iai0+cGFnZXMgPT0gTlVMTCk7Cj4gKwo+ICsJc2cgPSBkcm1fcHJpbWVfcGFnZXNf dG9fc2cob2JqLT5wYWdlcywgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkUpOwo+ICsJaWYgKCFz Zykgewo+ICsJCXZnZW1fZ2VtX3B1dF9wYWdlcyhvYmopOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJ fQo+ICsKPiArCXJldHVybiBzZzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmdlbV9nZW1fdW5t YXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gKwkJCSAgICBz dHJ1Y3Qgc2dfdGFibGUgKnNnLAo+ICsJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGF0 YV9kaXJlY3Rpb24pCj4gK3sKPiArCXNnX2ZyZWVfdGFibGUoc2cpOwo+ICsJa2ZyZWUoc2cpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqdmdlbV9rbWFwX2F0b21pY19kbWFfYnVmKHN0cnVjdCBk bWFfYnVmICpkbWFfYnVmLAo+ICsJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX251bSkKPiAr ewo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICp2Z2VtX2ttYXBfZG1h X2J1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiArCQkJICAgICAgIHVuc2lnbmVkIGxvbmcg cGFnZV9udW0pCj4gK3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZn ZW1fbW1hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+ICsJCQkgICAgIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICt7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKCnZtYXAgc3Vw cG9ydCAodXNlZCBieSB1ZGwpIG1pZ2h0IGJlIHVzZWZ1bC4gUXVpY2sgcGVhayBhdCBpOTE1IHNo b3VsZCBiZQpzdWZmaWNpZW50LiBCdXQganVzdCBhIHN1Z2dlc3Rpb24sIEknbSBvayBpZiB5b3Ug bGVhdmUgaXQgb3V0LgoKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkbWFfYnVmX29wcyB2Z2Vt X2RtYWJ1Zl9vcHMgPSB7Cj4gKwkubWFwX2RtYV9idWYJPSB2Z2VtX2dlbV9tYXBfZG1hX2J1ZiwK PiArCS51bm1hcF9kbWFfYnVmCT0gdmdlbV9nZW1fdW5tYXBfZG1hX2J1ZiwKPiArCS5yZWxlYXNl CT0gZHJtX2dlbV9kbWFidWZfcmVsZWFzZSwKPiArCS5rbWFwX2F0b21pYwk9IHZnZW1fa21hcF9h dG9taWNfZG1hX2J1ZiwKPiArCS5rbWFwCQk9IHZnZW1fa21hcF9kbWFfYnVmLAo+ICsJLm1tYXAJ CT0gdmdlbV9tbWFwX2RtYV9idWYsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZG1hX2J1ZiAqdmdlbV9n ZW1fcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgICAgICBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCSAgICAgIGludCBmbGFncykKPiArewo+ICsJ cmV0dXJuIGRtYV9idWZfZXhwb3J0KG9iaiwgJnZnZW1fZG1hYnVmX29wcywgb2JqLT5zaXplLCBm bGFncywgTlVMTCk7Cj4gK30KPiArCj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmdlbV9nZW1f cHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICBzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1ZikKPiArewo+ICsJc3RydWN0IGRybV92Z2VtX2dlbV9vYmplY3QgKm9i aiA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2ggPSBOVUxMOwo+ ICsJc3RydWN0IHNnX3RhYmxlICpzZyA9IE5VTEw7Cj4gKwlpbnQgbnVtX3BhZ2VzOwo+ICsJaW50 IHJldDsKPiArCj4gKwlhdHRhY2ggPSBkbWFfYnVmX2F0dGFjaChkbWFfYnVmLCBkZXYtPmRldik7 Cj4gKwlpZiAoSVNfRVJSKGF0dGFjaCkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGF0dGFjaCk7Cj4g KwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWdldF9kbWFfYnVmKGRtYV9idWYpOwo+ICsKPiAr CXNnID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIERNQV9CSURJUkVDVElPTkFMKTsK PiArCWlmIChJU19FUlIoc2cpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihzZyk7Cj4gKwkJZ290byBm YWlsX2RldGFjaDsKPiArCX0KPiArCj4gKwlvYmogPSBremFsbG9jKHNpemVvZigqb2JqKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAob2JqID09IE5VTEwpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJ CWdvdG8gZmFpbF91bm1hcDsKPiArCX0KPiArCj4gKwlvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCA9 IGF0dGFjaDsKPiArCW9iai0+c2cgPSBzZzsKPiArCj4gKwkvKiBBcyBhIHJlc3VsdCBvZiB0aGlz IG1tYXAgd2lsbCBub3Qgd29yayAteWV0LSAqLwo+ICsJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5p dChkZXYsICZvYmotPmJhc2UsIGRtYV9idWYtPnNpemUpOwo+ICsJaWYgKHJldCkgewo+ICsJCXJl dCA9IC1FTk9NRU07Cj4gKwkJZ290byBmYWlsX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJbnVtX3BhZ2Vz ID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7Cj4gKwo+ICsJb2JqLT5wYWdlcyA9IGRybV9t YWxsb2NfYWIobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwo+ICsJaWYgKCFvYmot PnBhZ2VzKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGZhaWxfZ2VtX3JlbGVhc2U7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMoc2cs IG9iai0+cGFnZXMsIE5VTEwsIG51bV9wYWdlcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcmV0ID0g LUVOT01FTTsKPiArCQlnb3RvIGZhaWxfZnJlZV9wYWdlczsKPiArCX0KPiArCj4gKwlyZXR1cm4g Jm9iai0+YmFzZTsKPiArCj4gK2ZhaWxfZnJlZV9wYWdlczoKPiArCWRybV9mcmVlX2xhcmdlKG9i ai0+cGFnZXMpOwo+ICtmYWlsX2dlbV9yZWxlYXNlOgo+ICsJZHJtX2dlbV9vYmplY3RfcmVsZWFz ZSgmb2JqLT5iYXNlKTsKPiArZmFpbF9mcmVlOgo+ICsJa2ZyZWUob2JqKTsKPiArZmFpbF91bm1h cDoKPiArCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIHNnLCBETUFfQklESVJFQ1RJ T05BTCk7Cj4gK2ZhaWxfZGV0YWNoOgo+ICsJZG1hX2J1Zl9kZXRhY2goZG1hX2J1ZiwgYXR0YWNo KTsKPiArCWRtYV9idWZfcHV0KGRtYV9idWYpOwo+ICtmYWlsOgo+ICsJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPiArfQoKR2VuZXJhbCBjb21tZW50OiBNaWdodCBiZSBnb29kIHRvIGxvb2sgaW50byB0 aGUgZ2VtIHByaW1lIGhlbHBlcnMsIHRoYXQKc2hvdWxkIHNpbXBsaWZ5IHRoaXMgY29kZSBxdWl0 ZSBhIGJpdC4gVGhlIHByaW1lIGhlbHBlcnMgYXJlIGEgbmV3CmFkZGl0aW9uIHNpbmNlIEJlbiB3 cm90ZSB0aGlzIGNvZGUgbWFueSBhZW9ucyBhZ286CgpodHRwOi8vcGVvcGxlLmZyZWVkZXNrdG9w Lm9yZy9+ZGFudmV0L2RybS9kcm0tbWVtb3J5LW1hbmFnZW1lbnQuaHRtbCNkcm0tcHJpbWUtc3Vw cG9ydAoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLmIwMDMyYzkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZnZW0vdmdlbV9kcnYuYwo+IEBAIC0wLDAgKzEsNDA3IEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAyMDExIFJlZCBIYXQsIEluYy4KPiArICogQ29weXJpZ2h0IMKpIDIwMTQgVGhlIENocm9t aXVtIE9TIEF1dGhvcnMKPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKQo+ICsgKiB0byBkZWFsIGluIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIG9uIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIKPiArICogbGlj ZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20KPiArICogdGhlbSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTLCBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKPiArICogSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JULCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCj4g KyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqCUFkYW0gSmFj a3NvbiA8YWpheEByZWRoYXQuY29tPgo+ICsgKglCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5u ZXQ+Cj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIFRoaXMgaXMgdmdlbSwgYSAobm9uLWhhcmR3YXJl LWJhY2tlZCkgR0VNIHNlcnZpY2UuICBUaGlzIGlzIHVzZWQgYnkgTWVzYSdzCj4gKyAqIHNvZnR3 YXJlIHJlbmRlcmVyIGFuZCB0aGUgWCBzZXJ2ZXIgZm9yIGVmZmljaWVudCBidWZmZXIgc2hhcmlu Zy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9yYW1mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KPiArI2luY2x1ZGUg InZnZW1fZHJ2LmgiCj4gKwo+ICsjZGVmaW5lIERSSVZFUl9OQU1FCSJ2Z2VtIgo+ICsjZGVmaW5l IERSSVZFUl9ERVNDCSJWaXJ0dWFsIEdFTSBwcm92aWRlciIKPiArI2RlZmluZSBEUklWRVJfREFU RQkiMjAxMjAxMTIiCj4gKyNkZWZpbmUgRFJJVkVSX01BSk9SCTEKPiArI2RlZmluZSBEUklWRVJf TUlOT1IJMAo+ICsKPiArc3RhdGljIGludCB2Z2VtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgbG9uZyBmbGFncykKPiArewo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2 LT5wbGF0Zm9ybWRldiwgZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHZnZW1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZnZW1fb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2Z2VtX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2Z2VtX2xhc3RjbG9zZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gK30KCklmIHlvdSByZXdvcmsgdGhlIGRldmlj ZSBsb2FkIHNlcXVlbmNlIGFzIHN1Z2dlc3RlZCBiZWxvdyB5b3VyIGxvYWQKZnVuY3Rpb24gaXMg ZW1wdHkuIEFuZCBhbGwgNSBvZiB0aGUgYWJvdmUgY2FsbGJhY2tzIGFyZSBvcHRpb25hbCwgc28g eW91CmNhbiBsZWF2ZSB0aGVtYSBsbCBvdXQuCgo+ICsKPiArdm9pZCB2Z2VtX2dlbV9wdXRfcGFn ZXMoc3RydWN0IGRybV92Z2VtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJaW50IG51bV9wYWdl cyA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7Cj4gKwkJaWYgKG9iai0+cGFnZXNbaV0gPT0gTlVM TCkKPiArCQkJYnJlYWs7Cj4gKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG9iai0+cGFnZXNbaV0pOwo+ ICsJfQo+ICsKPiArCWRybV9mcmVlX2xhcmdlKG9iai0+cGFnZXMpOwo+ICsJb2JqLT5wYWdlcyA9 IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZnZW1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVj dCAqdmdlbV9vYmogPSB0b192Z2VtX2JvKG9iaik7Cj4gKwo+ICsJZHJtX2dlbV9mcmVlX21tYXBf b2Zmc2V0KG9iaik7Cj4gKwo+ICsJaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+ICsJCWRybV9w cmltZV9nZW1fZGVzdHJveShvYmosIHZnZW1fb2JqLT5zZyk7Cj4gKwkJdmdlbV9vYmotPnBhZ2Vz ID0gTlVMTDsKPiArCX0KPiArCj4gKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7Cj4gKwo+ ICsJaWYgKHZnZW1fb2JqLT5wYWdlcykKPiArCQl2Z2VtX2dlbV9wdXRfcGFnZXModmdlbV9vYmop Owo+ICsKPiArCXZnZW1fb2JqLT5wYWdlcyA9IE5VTEw7Cj4gKwo+ICsJa2ZyZWUodmdlbV9vYmop Owo+ICt9Cj4gKwo+ICtpbnQgdmdlbV9nZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fdmdlbV9nZW1f b2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwo+ICsJ Z2ZwX3QgZ2ZwbWFzayA9IEdGUF9LRVJORUw7Cj4gKwlpbnQgbnVtX3BhZ2VzLCBpLCByZXQgPSAw Owo+ICsKPiArCW51bV9wYWdlcyA9IG9iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOwo+ICsKPiAr CWlmICghb2JqLT5wYWdlcykgewo+ICsJCW9iai0+cGFnZXMgPSBkcm1fbWFsbG9jX2FiKG51bV9w YWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKPiArCQlpZiAob2JqLT5wYWdlcyA9PSBOVUxM KQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCX0gZWxzZSB7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9 Cj4gKwo+ICsJbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2Rl LT5pX21hcHBpbmc7Cj4gKwlnZnBtYXNrIHw9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7Cj4gKwkJc3RydWN0IHBhZ2Ug KnBhZ2U7Cj4gKwkJb2JqLT5wYWdlc1tpXSA9IE5VTEw7Cj4gKwkJcGFnZSA9IHNobWVtX3JlYWRf bWFwcGluZ19wYWdlX2dmcChtYXBwaW5nLCBpLCBnZnBtYXNrKTsKPiArCQlpZiAoSVNfRVJSKHBh Z2UpKSB7Cj4gKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7Cj4gKwkJCWdvdG8gZXJyX291dDsKPiAr CQl9Cj4gKwkJb2JqLT5wYWdlc1tpXSA9IHBhZ2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArCj4gK2Vycl9vdXQ6Cj4gKwl2Z2VtX2dlbV9wdXRfcGFnZXMob2JqKTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmdlbV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3Zn ZW1fZ2VtX29iamVjdCAqb2JqID0gdG9fdmdlbV9ibyh2bWEtPnZtX3ByaXZhdGVfZGF0YSk7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiArCWxvZmZfdCBudW1f cGFnZXM7Cj4gKwlwZ29mZl90IHBhZ2Vfb2Zmc2V0Owo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBX ZSBkb24ndCB1c2Ugdm1mLT5wZ29mZiBzaW5jZSB0aGF0IGhhcyB0aGUgZmFrZSBvZmZzZXQgKi8K PiArCXBhZ2Vfb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0g dm1hLT52bV9zdGFydCkgPj4KPiArCQlQQUdFX1NISUZUOwo+ICsKPiArCW51bV9wYWdlcyA9IERJ Vl9ST1VORF9VUChvYmotPmJhc2Uuc2l6ZSwgUEFHRV9TSVpFKTsKPiArCj4gKwlpZiAocGFnZV9v ZmZzZXQgPiBudW1fcGFnZXMpCj4gKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKPiArCj4gKwlt dXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJcmV0ID0gdm1faW5zZXJ0X3Bh Z2Uodm1hLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywKPiArCQkJICAgICBv YmotPnBhZ2VzW3BhZ2Vfb2Zmc2V0XSk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gKwlzd2l0Y2ggKHJldCkgewo+ICsJY2FzZSAwOgo+ICsJCXJldHVybiBWTV9G QVVMVF9OT1BBR0U7Cj4gKwljYXNlIC1FTk9NRU06Cj4gKwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsK PiArCWNhc2UgLUVCVVNZOgo+ICsJCXJldHVybiBWTV9GQVVMVF9SRVRSWTsKPiArCWNhc2UgLUVG QVVMVDoKPiArCWNhc2UgLUVJTlZBTDoKPiArCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwo+ICsJ ZGVmYXVsdDoKPiArCQlXQVJOX09OKDEpOwo+ICsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmdlbV9n ZW1fdm1fb3BzID0gewo+ICsJLmZhdWx0ID0gdmdlbV9nZW1fZmF1bHQsCj4gKwkub3BlbiA9IGRy bV9nZW1fdm1fb3BlbiwKPiArCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCj4gK307Cj4gKwo+ ICsvKiBpb2N0bHMgKi8KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZnZW1f Z2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCSAgICAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKPiArCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSwKPiArCQkJ CQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCj4gK3sKPiArCXN0cnVjdCBkcm1fdmdlbV9nZW1f b2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmplY3Q7Cj4gKwlp bnQgZXJyOwo+ICsKPiArCXNpemUgPSByb3VuZHVwKHNpemUsIFBBR0VfU0laRSk7Cj4gKwo+ICsJ b2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFvYmopCj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJZ2VtX29iamVjdCA9ICZvYmotPmJh c2U7Cj4gKwo+ICsJZXJyID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsIGdlbV9vYmplY3QsIHNp emUpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIG91dDsKPiArCj4gKwllcnIgPSBkcm1fZ2VtX2hh bmRsZV9jcmVhdGUoZmlsZSwgZ2VtX29iamVjdCwgaGFuZGxlKTsKPiArCWlmIChlcnIpCj4gKwkJ Z290byBoYW5kbGVfb3V0Owo+ICsKPiArCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9j a2VkKGdlbV9vYmplY3QpOwo+ICsKPiArCXJldHVybiBnZW1fb2JqZWN0Owo+ICsKPiAraGFuZGxl X291dDoKPiArCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoZ2VtX29iamVjdCk7Cj4gK291dDoKPiAr CWtmcmVlKG9iaik7Cj4gKwlyZXR1cm4gRVJSX1BUUihlcnIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHZnZW1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiArCQkJCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykK PiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqZWN0Owo+ICsJdWludDY0X3Qg c2l6ZTsKPiArCj4gKwlzaXplID0gYXJncy0+aGVpZ2h0ICogYXJncy0+d2lkdGggKiBESVZfUk9V TkRfVVAoYXJncy0+YnBwLCA4KTsKPiArCWlmIChzaXplID09IDApCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJZ2VtX29iamVjdCA9IHZnZW1fZ2VtX2NyZWF0ZShkZXYsIGZpbGUsICZhcmdz LT5oYW5kbGUsIHNpemUpOwo+ICsKPiArCWlmIChJU19FUlIoZ2VtX29iamVjdCkpIHsKPiArCQlE Uk1fREVCVUdfRFJJVkVSKCJvYmplY3QgY3JlYXRpb24gZmFpbGVkXG4iKTsKPiArCQlyZXR1cm4g UFRSX0VSUihnZW1fb2JqZWN0KTsKPiArCX0KPiArCj4gKwlhcmdzLT5zaXplID0gZ2VtX29iamVj dC0+c2l6ZTsKPiArCWFyZ3MtPnBpdGNoID0gYXJncy0+d2lkdGg7Cj4gKwo+ICsJRFJNX0RFQlVH X0RSSVZFUigiQ3JlYXRlZCBvYmplY3Qgb2Ygc2l6ZSAlbGxkXG4iLCBzaXplKTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IHZnZW1fZ2VtX2R1bWJfbWFwKHN0cnVjdCBkcm1fZmls ZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkgICAgICB1aW50MzJfdCBoYW5k bGUsIHVpbnQ2NF90ICpvZmZzZXQpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp Owo+ICsJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgaGFuZGxlKTsKPiAr CWlmICghb2JqKSB7Cj4gKwkJcmV0ID0gLUVOT0VOVDsKPiArCQlnb3RvIHVubG9jazsKPiArCX0K PiArCj4gKwlpZiAoIWRybV92bWFfbm9kZV9oYXNfb2Zmc2V0KCZvYmotPnZtYV9ub2RlKSkgewo+ ICsJCXJldCA9IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7Cj4gKwkJaWYgKHJldCkK PiArCQkJZ290byB1bnJlZjsKPiArCX0KPiArCj4gKwlCVUdfT04oIW9iai0+ZmlscCk7Cj4gKwo+ ICsJb2JqLT5maWxwLT5wcml2YXRlX2RhdGEgPSBvYmo7Cj4gKwo+ICsJcmV0ID0gdmdlbV9nZW1f Z2V0X3BhZ2VzKHRvX3ZnZW1fYm8ob2JqKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFpbF9n ZXRfcGFnZXM7Cj4gKwo+ICsJKm9mZnNldCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmb2Jq LT52bWFfbm9kZSk7Cj4gKwo+ICsJZ290byB1bnJlZjsKPiArCj4gK2ZhaWxfZ2V0X3BhZ2VzOgo+ ICsJZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7Cj4gK3VucmVmOgo+ICsJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgdmdlbV9kcm1f Z2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOwo+ ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXZtYS0+dm1fZmxhZ3MgJj0gflZN X1BGTk1BUDsKPiArCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURNQVA7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgdmdlbV9p b2N0bHNbXSA9IHsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHZnZW1fZHJpdmVyX2ZvcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwku b3BlbgkJPSBkcm1fb3BlbiwKPiArCS5tbWFwCQk9IHZnZW1fZHJtX2dlbV9tbWFwLAo+ICsJLnBv bGwJCT0gZHJtX3BvbGwsCj4gKwkucmVhZAkJPSBkcm1fcmVhZCwKPiArCS51bmxvY2tlZF9pb2N0 bCA9IGRybV9pb2N0bCwKPiArCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCj4gK307Cj4gKwo+ICtz dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdmdlbV9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyX2ZlYXR1 cmVzCT0gRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSwKPiArCS5sb2FkCQkJPSB2Z2VtX2xvYWQs Cj4gKwkudW5sb2FkCQkJPSB2Z2VtX3VubG9hZCwKPiArCS5vcGVuCQkJPSB2Z2VtX29wZW4sCj4g KwkucHJlY2xvc2UJCT0gdmdlbV9wcmVjbG9zZSwKPiArCS5sYXN0Y2xvc2UJCT0gdmdlbV9sYXN0 Y2xvc2UsCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0CT0gdmdlbV9nZW1fZnJlZV9vYmplY3QsCj4gKwku Z2VtX3ZtX29wcwkJPSAmdmdlbV9nZW1fdm1fb3BzLAo+ICsJLmlvY3RscwkJCT0gdmdlbV9pb2N0 bHMsCj4gKwkuZm9wcwkJCT0gJnZnZW1fZHJpdmVyX2ZvcHMsCj4gKwkuZHVtYl9jcmVhdGUJCT0g dmdlbV9nZW1fZHVtYl9jcmVhdGUsCj4gKwkuZHVtYl9tYXBfb2Zmc2V0CT0gdmdlbV9nZW1fZHVt Yl9tYXAsCj4gKwkucHJpbWVfaGFuZGxlX3RvX2ZkCT0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9f ZmQsCj4gKwkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUs Cj4gKwkuZ2VtX3ByaW1lX2V4cG9ydAk9IHZnZW1fZ2VtX3ByaW1lX2V4cG9ydCwKPiArCS5nZW1f cHJpbWVfaW1wb3J0CT0gdmdlbV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLm5hbWUJPSBEUklWRVJf TkFNRSwKPiArCS5kZXNjCT0gRFJJVkVSX0RFU0MsCj4gKwkuZGF0ZQk9IERSSVZFUl9EQVRFLAo+ ICsJLm1ham9yCT0gRFJJVkVSX01BSk9SLAo+ICsJLm1pbm9yCT0gRFJJVkVSX01JTk9SLAo+ICt9 Owo+ICsKPiArc3RhdGljIGludCB2Z2VtX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCXZnZW1fZHJpdmVyLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpF KHZnZW1faW9jdGxzKTsKPiArCj4gKwlyZXR1cm4gZHJtX3BsYXRmb3JtX2luaXQoJnZnZW1fZHJp dmVyLCBwZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2Z2VtX3BsYXRmb3JtX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlkcm1fcHV0X2RldihwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmdlbV9wbGF0Zm9ybV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJ CT0gdmdlbV9wbGF0Zm9ybV9wcm9iZSwKPiArCS5yZW1vdmUJCT0gdmdlbV9wbGF0Zm9ybV9yZW1v dmUsCj4gKwkuZHJpdmVyCQk9IHsKPiArCQkub3duZXIJPSBUSElTX01PRFVMRSwKPiArCQkubmFt ZQk9IERSSVZFUl9OQU1FLAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICp2Z2VtX2RldmljZTsKPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IHZnZW1faW5p dCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9y ZWdpc3RlcigmdmdlbV9wbGF0Zm9ybV9kcml2ZXIpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91 dDsKPiArCj4gKwl2Z2VtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidmdlbSIsIC0x KTsKPiArCWlmICghdmdlbV9kZXZpY2UpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8g dW5yZWdpc3Rlcl9vdXQ7Cj4gKwl9Cj4gKwo+ICsJdmdlbV9kZXZpY2UtPmRldi5jb2hlcmVudF9k bWFfbWFzayA9IH4wVUxMOwo+ICsJdmdlbV9kZXZpY2UtPmRldi5kbWFfbWFzayA9ICZ2Z2VtX2Rl dmljZS0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrOwo+ICsKPiArCXJldCA9IHBsYXRmb3JtX2Rldmlj ZV9hZGQodmdlbV9kZXZpY2UpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIHB1dF9vdXQ7CgpXaXRo IHRoZSBuZXcgZHJtX2Rldl9hbGxvYy9yZWdpc3RlciBmdW5jdGlvbnMgeW91IHNob3VsZCBiZSBh YmxlIHRvIHNldCB1cAphIHZpcnR1YWwgZHJtIGRldmljZSB3aXRob3V0IGFueSByZWFsIHN0cnVj dCBkZXZpY2UgYXMgYmFja2luZyBvYmplY3QuClRoYXQgd291bGQgYWxzbyBhbGxvdyB5b3UgdG8g ZGl0Y2ggdGhlIGFsbW9zdC1kdW1teSAtPmxvYWQgZnVuY3Rpb24sIHNpbmNlCi0+bG9hZCBpcyBz b21ld2hhdCBkZXByZWNhdGVkLiB0ZWdyYSBpcyBhbHJlYWR5IGNvbnZlcnRlZCwgYnV0IHRoZSAy IG5ldwpkcm0gZHJpdmVycyBhbHNvIGluaXRpYWxpemUgdGhlIG5ldyB3YXkgc28gdGhlcmUncyBh IGJ1bmNoIG9mIGV4YW1wbGVzLgoKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK3B1dF9vdXQ6Cj4g KwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHZnZW1fZGV2aWNlKTsKPiArdW5yZWdpc3Rlcl9vdXQ6Cj4g KwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmdlbV9wbGF0Zm9ybV9kcml2ZXIpOwo+ICtv dXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgdmdlbV9l eGl0KHZvaWQpCj4gK3sKPiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHZnZW1fZGV2aWNl KTsKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2Z2VtX3BsYXRmb3JtX2RyaXZlcik7 Cj4gK30KPiArCj4gK21vZHVsZV9pbml0KHZnZW1faW5pdCk7Cj4gK21vZHVsZV9leGl0KHZnZW1f ZXhpdCk7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJSZWQgSGF0LCBJbmMuIik7Cj4gK01PRFVMRV9E RVNDUklQVElPTihEUklWRVJfREVTQyk7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0 aW9uYWwgcmlnaHRzIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1f ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi42ZDg4OWEyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmgKPiBAQCAtMCwwICsxLDYyIEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCDCqSAyMDEyIEludGVsIENvcnBvcmF0aW9uCj4gKyAqIENvcHlyaWdodCDC qSAyMDE0IFRoZSBDaHJvbWl1bSBPUyBBdXRob3JzCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdh cmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3Nr Lm5ldD4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9WR0VNX0RSVl9IXwo+ICsjZGVmaW5l IF9WR0VNX0RSVl9IXwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2dlbS5oPgo+ICsKPiArI2RlZmluZSB0b192Z2VtX2JvKHgpIGNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCwgYmFzZSkKPiArc3RydWN0IGRybV92Z2VtX2dl bV9vYmplY3Qgewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7Cj4gKwlzdHJ1Y3QgcGFn ZSAqKnBhZ2VzOwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZzsKPiArfTsKPiArCj4gKy8qIHZnZW1f ZHJ2LmMgKi8KPiArZXh0ZXJuIHZvaWQgdmdlbV9nZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fdmdl bV9nZW1fb2JqZWN0ICpvYmopOwo+ICtleHRlcm4gaW50IHZnZW1fZ2VtX2dldF9wYWdlcyhzdHJ1 Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAqb2JqKTsKPiArCj4gKy8qIHZnZW1fZG1hX2J1Zi5jICov Cj4gK2V4dGVybiBpbnQgdmdlbV9wcmltZV90b19mZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICsJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJCSAgICB1aW50MzJfdCBo YW5kbGUsIGludCAqcHJpbWVfZmQpOwo+ICsKPiArZXh0ZXJuIGludCB2Z2VtX3ByaW1lX3RvX2hh bmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCj4gKwkJCQlpbnQgcHJpbWVfZmQsIHVpbnQzMl90ICpoYW5kbGUpOwo+ICsKPiArZXh0 ZXJuIHN0cnVjdCBkbWFfYnVmICp2Z2VtX2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiArCQkJCQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJ CSAgICAgaW50IGZsYWdzKTsKPiArCj4gK2V4dGVybiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnZn ZW1fZ2VtX3ByaW1lX2ltcG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCQkgICAg c3RydWN0IGRtYV9idWYgKmRtYV9idWYpOwo+ICsKPiArI2VuZGlmCj4gLS0gCj4gMi4xLjAucmMy LjIwNi5nZWRiMDNlNQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwg Q29ycG9yYXRpb24KKzQxICgwKSA3OSAzNjUgNTcgNDggLSBodHRwOi8vYmxvZy5mZndsbC5jaApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=