From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v2 3/8] drm: Add helper for simple kms drivers Date: Mon, 2 May 2016 22:20:10 +0200 Message-ID: <20160502202010.GV14148@phenom.ffwll.local> References: <1460135110-24121-1-git-send-email-noralf@tronnes.org> <1460135110-24121-4-git-send-email-noralf@tronnes.org> <20160413110553.GY2510@phenom.ffwll.local> <57277863.5020100@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x229.google.com (mail-wm0-x229.google.com [IPv6:2a00:1450:400c:c09::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2500E6E02D for ; Mon, 2 May 2016 20:20:14 +0000 (UTC) Received: by mail-wm0-x229.google.com with SMTP id a17so4807453wme.0 for ; Mon, 02 May 2016 13:20:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <57277863.5020100@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: thomas.petazzoni@free-electrons.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBNYXkgMDIsIDIwMTYgYXQgMDU6NTU6MTVQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAxMy4wNC4yMDE2IDEzOjA1LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID5PbiBGcmksIEFwciAwOCwgMjAxNiBhdCAwNzowNTowNVBNICswMjAwLCBOb3JhbGYgVHLDuG5u ZXMgd3JvdGU6Cj4gPj5Qcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBkcml2ZXJzIHRoYXQg aGF2ZSBhIHNpbXBsZSBkaXNwbGF5Cj4gPj5waXBlbGluZS4gUGxhbmUsIGNydGMgYW5kIGVuY29k ZXIgYXJlIGNvbGxhcHNlZCBpbnRvIG9uZSBlbnRpdHkuCj4gPj4KPiA+PlNpZ25lZC1vZmYtYnk6 IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+IAo+IFsuLi5dCj4gCj4gPj4r c3RhdGljIHZvaWQgZHJtX3NpbXBsZV9rbXNfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKPiA+Pit7Cj4gPj4rfQo+ID4+Kwo+ID4+K3N0YXRpYyB2b2lkIGRybV9z aW1wbGVfa21zX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiA+ Pit7Cj4gPj4rfQo+ID4+Kwo+ID4+K3N0YXRpYyBpbnQgZHJtX3NpbXBsZV9rbXNfZW5jb2Rlcl9h dG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ID4+KwkJCQkJc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4+KwkJCQkJc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gPj4rewo+ID4+KwlyZXR1cm4gMDsKPiA+Pit9Cj4gPkFi b3ZlIGR1bW15IGZ1bmN0aW9ucyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5Lgo+IAo+IEkgY291bGQg cmVtb3ZlIC5hdG9taWNfY2hlY2ssIGJ1dCBub3QgLmRpc2FibGUgYW5kIC5lbmFibGUgd2hpY2gg Z2F2ZSBtZQo+IE5VTEwgcG9pbnRlciBlcnJvcnMuIEkgbmVlZCAuZW5hYmxlIG9yIC5jb21taXQs IGFuZCAuZGlzYWJsZSBvciAuZHBtcy4KPiAKPiBHaXN0Ogo+IAo+IHZvaWQgZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZQo+ICpvbGRfc3RhdGUpCj4gewo+ICAgICAgICAgZm9yX2VhY2hfY29ubmVjdG9y X2luX3N0YXRlKG9sZF9zdGF0ZSwgY29ubmVjdG9yLCBvbGRfY29ubl9zdGF0ZSwgaSkKPiB7Cj4g ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmZ1 bmNzOwo+IAo+ICAgICAgICAgICAgICAgICBmdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRl Owo+IAo+ICAgICAgICAgICAgICAgICBpZiAoZnVuY3MtPmVuYWJsZSkKPiAgICAgICAgICAgICAg ICAgICAgICAgICBmdW5jcy0+ZW5hYmxlKGVuY29kZXIpOwo+ICAgICAgICAgICAgICAgICBlbHNl Cj4gICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MtPmNvbW1pdChlbmNvZGVyKTsKPiAKPiBz dGF0aWMgdm9pZAo+IGRpc2FibGVfb3V0cHV0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+IHsKPiAgICAgICAgIGZvcl9lYWNoX2Nv bm5lY3Rvcl9pbl9zdGF0ZShvbGRfc3RhdGUsIGNvbm5lY3Rvciwgb2xkX2Nvbm5fc3RhdGUsIGkp Cj4gewo+ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1 bmNzICpmdW5jczsKPiAKPiAgICAgICAgICAgICAgICAgZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJf cHJpdmF0ZTsKPiAKPiAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rvci0+c3RhdGUtPmNydGMg JiYgZnVuY3MtPnByZXBhcmUpCj4gICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MtPnByZXBh cmUoZW5jb2Rlcik7Cj4gICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmNzLT5kaXNhYmxlKQo+ ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNzLT5kaXNhYmxlKGVuY29kZXIpOwo+ICAgICAg ICAgICAgICAgICBlbHNlCj4gICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3MtPmRwbXMoZW5j b2RlciwgRFJNX01PREVfRFBNU19PRkYpOwoKSG0gcmlnaHQuIEknbSB2b3RpbmcgdGhhdCB3ZSBt YWtlIHRoZW0gYWxsIG9wdGlvbmFsLCB0aGVyZSdzIGJlZW4gYW4KZWZmb3J0IGFsbCBvdmVyIHRo ZSBwbGFjZSB0byBub3QgZm9yY2UgZHJpdmVycyB0byB0eXBlIGluIHNpbGx5IGR1bW15CmZ1bmNz LgoKPiA+PisKPiA+PitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cyBkcm1fc2ltcGxlX2ttc19lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKPiA+PisJLmRpc2FibGUg PSBkcm1fc2ltcGxlX2ttc19lbmNvZGVyX2Rpc2FibGUsCj4gPj4rCS5lbmFibGUgPSBkcm1fc2lt cGxlX2ttc19lbmNvZGVyX2VuYWJsZSwKPiA+PisJLmF0b21pY19jaGVjayA9IGRybV9zaW1wbGVf a21zX2VuY29kZXJfYXRvbWljX2NoZWNrLAo+ID4+K307Cj4gPj4rCj4gPj4rc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkcm1fc2ltcGxlX2ttc19lbmNvZGVyX2Z1bmNzID0g ewo+ID4+KwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCj4gPj4rfTsKPiA+PisKPiA+ PitzdGF0aWMgdm9pZCBkcm1fc2ltcGxlX2ttc19jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCj4gPj4rewo+ID4+KwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGU7 Cj4gPj4rCj4gPj4rCXBpcGUgPSBjb250YWluZXJfb2YoY3J0Yywgc3RydWN0IGRybV9zaW1wbGVf ZGlzcGxheV9waXBlLCBjcnRjKTsKPiA+PisJaWYgKCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ZnVu Y3MtPmVuYWJsZSkKPiA+PisJCXJldHVybjsKPiA+PisKPiA+PisJcGlwZS0+ZnVuY3MtPmVuYWJs ZShwaXBlLCBjcnRjLT5zdGF0ZSk7Cj4gPj4rfQo+ID4+Kwo+ID4+K3N0YXRpYyB2b2lkIGRybV9z aW1wbGVfa21zX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPj4rewo+ID4+ KwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGU7Cj4gPj4rCj4gPj4rCXBpcGUg PSBjb250YWluZXJfb2YoY3J0Yywgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlLCBjcnRj KTsKPiA+PisJaWYgKCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ZnVuY3MtPmRpc2FibGUpCj4gPj4r CQlyZXR1cm47Cj4gPj4rCj4gPj4rCXBpcGUtPmZ1bmNzLT5kaXNhYmxlKHBpcGUpOwo+ID4+K30K PiA+PisKPiA+PitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBkcm1f c2ltcGxlX2ttc19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiA+PisJLmRpc2FibGUgPSBkcm1fc2lt cGxlX2ttc19jcnRjX2Rpc2FibGUsCj4gPj4rCS5lbmFibGUgPSBkcm1fc2ltcGxlX2ttc19jcnRj X2VuYWJsZSwKPiA+Pit9Owo+ID4+Kwo+ID4+K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNf ZnVuY3MgZHJtX3NpbXBsZV9rbXNfY3J0Y19mdW5jcyA9IHsKPiA+PisJLnJlc2V0ID0gZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiA+PisJLmRlc3Ryb3kgPSBkcm1fY3J0Y19jbGVhbnVw LAo+ID4+Kwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCj4gPj4r CS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gPj4rCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUs Cj4gPj4rCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVz dHJveV9zdGF0ZSwKPiA+Pit9Owo+ID4+Kwo+ID4+K3N0YXRpYyB2b2lkIGRybV9zaW1wbGVfa21z X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPj4rCQkJCQlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCj4gPj4rewo+ID4+KwlzdHJ1Y3QgZHJt X3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGU7Cj4gPj4rCj4gPj4rCXBpcGUgPSBjb250YWluZXJf b2YocGxhbmUsIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSwgcGxhbmUpOwo+ID4+Kwlp ZiAoIXBpcGUtPmZ1bmNzIHx8ICFwaXBlLT5mdW5jcy0+cGxhbmVfdXBkYXRlKQo+ID4+KwkJcmV0 dXJuOwo+ID4+Kwo+ID4+KwlwaXBlLT5mdW5jcy0+cGxhbmVfdXBkYXRlKHBpcGUsIG9sZF9zdGF0 ZSk7Cj4gPj4rfQo+ID4+Kwo+ID4+K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBl cl9mdW5jcyBkcm1fc2ltcGxlX2ttc19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7Cj4gPj4rCS5hdG9t aWNfdXBkYXRlID0gZHJtX3NpbXBsZV9rbXNfcGxhbmVfYXRvbWljX3VwZGF0ZSwKPiA+Pit9Owo+ ID4+Kwo+ID4+K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGRybV9zaW1wbGVf a21zX3BsYW5lX2Z1bmNzID0gewo+ID4+KwkudXBkYXRlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVs cGVyX3VwZGF0ZV9wbGFuZSwKPiA+PisJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxw ZXJfZGlzYWJsZV9wbGFuZSwKPiA+PisJLmRlc3Ryb3kJCT0gZHJtX3BsYW5lX2NsZWFudXAsCj4g Pj4rCS5yZXNldAkJCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCj4gPj4rCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0 YXRlLAo+ID4+KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFu ZV9kZXN0cm95X3N0YXRlLAo+ID4+K307Cj4gPj4rCj4gPj4rLyoqCj4gPj4rICogZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGVfaW5pdCAtIEluaXRpYWxpemUgYSBzaW1wbGUgZGlzcGxheSBwaXBlCj4g Pj4rICogQGRldjogRFJNIGRldmljZQo+ID4+KyAqIEBwaXBlOiBzaW1wbGUgZGlzcGxheSBwaXBl IG9iamVjdCB0byBpbml0aWFsaXplCj4gPj4rICogQGZ1bmNzOiBjYWxsYmFja3MgZm9yIHRoZSBk aXNwbGF5IHBpcGUKPiA+PisgKiBAZm9ybWF0czogYXJyYXkgb2Ygc3VwcG9ydGVkIGZvcm1hdHMg KCVEUk1fRk9STUFUXyopCj4gPj4rICogQGZvcm1hdF9jb3VudDogbnVtYmVyIG9mIGVsZW1lbnRz IGluIEBmb3JtYXRzCj4gPj4rICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHRvIGF0dGFjaCBhbmQg cmVnaXN0ZXIKPiA+PisgKgo+ID4+KyAqIFNldHMgdXAgYSBkaXNwbGF5IHBpcGUgd2hpY2ggY29u c2lzdCBvZiBhIHJlYWxseSBzaW1wbGUgcGxhbmUtY3J0Yy1lbmNvZGVyCj4gPj4rICogcGlwZSBj b3VwbGVkIHdpdGggdGhlIHByb3ZpZGVkIGNvbm5lY3Rvci4KPiA+PisgKgo+ID4+KyAqIFJldHVy bnM6Cj4gPj4rICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPj4r ICovCj4gPj4raW50IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiA+PisJCQkJIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwK PiA+PisJCQkJIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyAqZnVuY3MsCj4g Pj4rCQkJCSBjb25zdCB1aW50MzJfdCAqZm9ybWF0cywgdW5zaWduZWQgaW50IGZvcm1hdF9jb3Vu dCwKPiA+PisJCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPj4rewo+ID4+ KwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmcGlwZS0+ZW5jb2RlcjsKPiA+PisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmcGlwZS0+cGxhbmU7Cj4gPj4rCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9ICZwaXBlLT5jcnRjOwo+ID4+KwlpbnQgcmV0Owo+ID4+Kwo+ID4+KwlwaXBlLT5m dW5jcyA9IGZ1bmNzOwo+ID4+Kwo+ID4+Kwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmRy bV9zaW1wbGVfa21zX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gPj4rCXJldCA9IGRybV91bml2ZXJz YWxfcGxhbmVfaW5pdChkZXYsIHBsYW5lLCAwLCAmZHJtX3NpbXBsZV9rbXNfcGxhbmVfZnVuY3Ms Cj4gPj4rCQkJCSAgICAgICBmb3JtYXRzLCBmb3JtYXRfY291bnQsCj4gPj4rCQkJCSAgICAgICBE Uk1fUExBTkVfVFlQRV9QUklNQVJZLCBOVUxMKTsKPiA+PisJaWYgKHJldCkKPiA+PisJCXJldHVy biByZXQ7Cj4gPj4rCj4gPj4rCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJmRybV9zaW1wbGVf a21zX2NydGNfaGVscGVyX2Z1bmNzKTsKPiA+PisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3Bs YW5lcyhkZXYsIGNydGMsIHBsYW5lLCBOVUxMLAo+ID4+KwkJCQkJJmRybV9zaW1wbGVfa21zX2Ny dGNfZnVuY3MsIE5VTEwpOwo+ID4+KwlpZiAocmV0KQo+ID4+KwkJcmV0dXJuIHJldDsKPiA+PisK PiA+PisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAxIDw8IGRybV9jcnRjX2luZGV4KGNydGMp Owo+ID4+Kwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZkcm1fc2ltcGxlX2ttc19l bmNvZGVyX2hlbHBlcl9mdW5jcyk7Cj4gPj4rCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZGV2LCBl bmNvZGVyLCAmZHJtX3NpbXBsZV9rbXNfZW5jb2Rlcl9mdW5jcywKPiA+PisJCQkgICAgICAgRFJN X01PREVfRU5DT0RFUl9OT05FLCBOVUxMKTsKPiA+PisJaWYgKHJldCkKPiA+PisJCXJldHVybiBy ZXQ7Cj4gPj4rCj4gPj4rCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihj b25uZWN0b3IsIGVuY29kZXIpOwo+ID4+KwlpZiAocmV0KQo+ID4+KwkJcmV0dXJuIHJldDsKPiA+ PisKPiA+PisJcmV0dXJuIGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoY29ubmVjdG9yKTsKPiA+Pit9 Cj4gPj4rRVhQT1JUX1NZTUJPTChkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0KTsKPiA+PisK PiA+PitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPj5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0v ZHJtX3NpbXBsZV9rbXNfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fc2ltcGxlX2ttc19oZWxw ZXIuaAo+ID4+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+PmluZGV4IDAwMDAwMDAuLjBmNzQ2MWIK PiA+Pi0tLSAvZGV2L251bGwKPiA+PisrKyBiL2luY2x1ZGUvZHJtL2RybV9zaW1wbGVfa21zX2hl bHBlci5oCj4gPj5AQCAtMCwwICsxLDQ0IEBACj4gPj4rLyoKPiA+PisgKiBDb3B5cmlnaHQgKEMp IDIwMTYgTm9yYWxmIFRyw7hubmVzCj4gPj4rICoKPiA+PisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ID4+KyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Cj4gPj4rICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiA+PisgKiAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgo+ID4+KyAqLwo+ID4+Kwo+ID4+KyNpZm5kZWYgX19MSU5VWF9EUk1f U0lNUExFX0tNU19IRUxQRVJfSAo+ID4+KyNkZWZpbmUgX19MSU5VWF9EUk1fU0lNUExFX0tNU19I RUxQRVJfSAo+ID4+Kwo+ID4+K3N0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZTsKPiA+PisK PiA+PitzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVuY3Mgewo+ID4+Kwl2b2lkICgq ZW5hYmxlKShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gPj4rCQkgICAg ICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiA+PisJdm9pZCAoKmRpc2Fi bGUpKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSk7Cj4gPj4rCXZvaWQgKCpw bGFuZV91cGRhdGUpKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiA+PisJ CQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKPiA+T24gMm5kIHRo b3VnaHQgbWF5YmUgd2Ugd2FudCBhbiBhdG9taWNfY2hlY2sgaW4gaGVyZSB0b28sIHdpdGggc2Ft ZQo+ID5wYXJhbWV0ZXJzICpwaXBlLCAqY3J0Y19zdGF0ZSBhbmQgKnBsYW5lX3N0YXRlIChzbyB0 aGF0IGl0J3MgdXNlZnVsIGZvcgo+ID5ib3RoIHBsYW5lLW9ubHkgdXBkYXRlcyBhbmQgbW9kZXNl dCBjaGFuZ2VzKS4KPiAKPiBJIGNvdWxkIGRvIHRoaXMgZm9yIHRoZSBwbGFuZToKPiAKPiBzdHJ1 Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVuY3Mgewo+ICAgICAgdm9pZCAoKnBsYW5lX2No ZWNrKShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKPiB9Cj4g Cj4gc3RhdGljIHZvaWQgZHJtX3NpbXBsZV9rbXNfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiB7Cj4gICAgICAgICBzdHJ1Y3QgZHJt X3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGU7Cj4gCj4gICAgICAgICBwaXBlID0gY29udGFpbmVy X29mKHBsYW5lLCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUsIHBsYW5lKTsKPiAgICAg ICAgIGlmICghcGlwZS0+ZnVuY3MgfHwgIXBpcGUtPmZ1bmNzLT5wbGFuZV9jaGVjaykKPiAgICAg ICAgICAgICAgICAgcmV0dXJuOwo+IAo+ICAgICAgICAgcGlwZS0+ZnVuY3MtPnBsYW5lX2NoZWNr KHBpcGUsIHN0YXRlKTsKPiB9Cj4gCj4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVs cGVyX2Z1bmNzIGRybV9zaW1wbGVfa21zX3BsYW5lX2hlbHBlcl9mdW5jcwo+ID0gewo+ICAgICAg ICAgLmF0b21pY19jaGVjayA9IGRybV9zaW1wbGVfa21zX3BsYW5lX2F0b21pY19jaGVjaywKPiB9 Owo+IAo+IEJ1dCBob3cgc2hvdWxkIEkgZG8gY3J0Y19zdGF0ZSA/CgpBdG9taWMgY29yZSBndWFy YW50ZWVzIHRoYXQgaWYgeW91IGhhdmUgYSBwbGFuZSBzdGF0ZSwgdGhlbiB0aGUgY3J0YyBzdGF0 ZQpmb3IgdGhhdCBwbGFuZSBpcyBhbHdheXMgaGFuZ2luZyBhcm91bmQuIFlvdSBzaG91bGQgYmUg YWJsZSB0byBnZXQgYXQgaXQKKGJ1dCBvbmx5IGZvciBhdG9taWNfY2hlY2sgZnVuY3Rpb25zLCB0 aGVyZSdzIGEgZGlmZmVyZW50IHdheSBpbiB0aGUKY29tbWl0IGhvb2tzKSB1c2luZzoKCmRybV9h dG9taWNfZ2V0X2V4aXN0aW5nX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlLT5zdGF0ZSwKCQkJCSAg ICBwbGFuZV9zdGF0ZS0+Y3J0Yyk7CgoKWWVzIEkga25vdyBJIHNob3VsZCBnZXQgYXJvdW5kIHRv IGRvY3VtZXRpbmcgYWxsIHRoZSBzdHJ1Y3R1cmVzIHdlIGhhdmUKLi4uIFVuZm9ydHVuYXRlbHkg aXQncyBhIGJpdCBhIG1lc3MgYW5kIEknZCBsaWtlIHRvIGNsZWFuIHVwIHRoZSBjb2RlCm9yZ2Fu aXphdGlvbiBmaXJzdCBhIGJpdC4KCkNoZWVycywgRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNv ZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK