From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rafael J. Wysocki" Subject: Re: [PATCH 03/13] PM: Implement wakelock api. Date: Sat, 7 Feb 2009 23:27:10 +0100 Message-ID: <200902072327.11251.rjw@sisk.pl> References: <1233802226-23386-1-git-send-email-arve@android.com> <1233802226-23386-3-git-send-email-arve@android.com> <1233802226-23386-4-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1233802226-23386-4-git-send-email-arve@android.com> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: Arve =?utf-8?q?Hj=C3=B8nnev=C3=A5g?= Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com, linux-pm@lists.linux-foundation.org List-Id: linux-pm@vger.kernel.org T24gVGh1cnNkYXkgMDUgRmVicnVhcnkgMjAwOSwgQXJ2ZSBIasO4bm5ldsOlZyB3cm90ZToKPiBT aWduZWQtb2ZmLWJ5OiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgo+IC0tLQo+ ICBrZXJuZWwvcG93ZXIvS2NvbmZpZyAgICB8ICAgMTkgKysKPiAga2VybmVsL3Bvd2VyL01ha2Vm aWxlICAgfCAgICAxICsKPiAga2VybmVsL3Bvd2VyL3Bvd2VyLmggICAgfCAgICA3ICsKPiAga2Vy bmVsL3Bvd2VyL3dha2Vsb2NrLmMgfCAgNTk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwgNjI1IGluc2VydGlvbnMoKyks IDAgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXJuZWwvcG93ZXIvd2FrZWxv Y2suYwo+IAo+IGRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dl ci9LY29uZmlnCj4gaW5kZXggMjNiZDRkYS4uNmUzZGE2ZSAxMDA2NDQKPiAtLS0gYS9rZXJuZWwv cG93ZXIvS2NvbmZpZwo+ICsrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCj4gQEAgLTExNiw2ICsx MTYsMjUgQEAgY29uZmlnIFNVU1BFTkRfRlJFRVpFUgo+ICAKPiAgCSAgVHVybmluZyBPRkYgdGhp cyBzZXR0aW5nIGlzIE5PVCByZWNvbW1lbmRlZCEgSWYgaW4gZG91YnQsIHNheSBZLgo+ICAKPiAr Y29uZmlnIEhBU19XQUtFTE9DSwo+ICsJYm9vbAo+ICsKPiArY29uZmlnIFdBS0VMT0NLCj4gKwli b29sICJXYWtlIGxvY2siCj4gKwlkZXBlbmRzIG9uIFBNICYmIFJUQ19DTEFTUwo+ICsJZGVmYXVs dCBuCj4gKwlzZWxlY3QgSEFTX1dBS0VMT0NLCj4gKwktLS1oZWxwLS0tCj4gKwkgIEVuYWJsZSB3 YWtlbG9ja3MuIFdoZW4gdXNlciBzcGFjZSByZXF1ZXN0IGEgc2xlZXAgc3RhdGUgdGhlCj4gKwkg IHNsZWVwIHJlcXVlc3Qgd2lsbCBiZSBkZWxheWVkIHVudGlsIG5vIHdha2UgbG9ja3MgYXJlIGhl bGQuCj4gKwo+ICtjb25maWcgV0FLRUxPQ0tfU1RBVAo+ICsJYm9vbCAiV2FrZSBsb2NrIHN0YXRz Igo+ICsJZGVwZW5kcyBvbiBXQUtFTE9DSwo+ICsJZGVmYXVsdCB5Cj4gKwktLS1oZWxwLS0tCj4g KwkgIFJlcG9ydCB3YWtlIGxvY2sgc3RhdHMgaW4gL3Byb2Mvd2FrZWxvY2tzCj4gKwo+ICBjb25m aWcgSElCRVJOQVRJT04KPiAgCWJvb2wgIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlz aycpIgo+ICAJZGVwZW5kcyBvbiBQTSAmJiBTV0FQICYmIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lC TEUKPiBkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01h a2VmaWxlCj4gaW5kZXggZDdhMTAxNi4uOGQ4NjcyYiAxMDA2NDQKPiAtLS0gYS9rZXJuZWwvcG93 ZXIvTWFrZWZpbGUKPiArKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKPiBAQCAtNiw2ICs2LDcg QEAgZW5kaWYKPiAgb2JqLXkJCQkJOj0gbWFpbi5vCj4gIG9iai0kKENPTkZJR19QTV9TTEVFUCkJ CSs9IGNvbnNvbGUubwo+ICBvYmotJChDT05GSUdfRlJFRVpFUikJCSs9IHByb2Nlc3Mubwo+ICtv YmotJChDT05GSUdfV0FLRUxPQ0spCQkrPSB3YWtlbG9jay5vCj4gIG9iai0kKENPTkZJR19ISUJF Uk5BVElPTikJKz0gc3dzdXNwLm8gZGlzay5vIHNuYXBzaG90Lm8gc3dhcC5vIHVzZXIubwo+ICAK PiAgb2JqLSQoQ09ORklHX01BR0lDX1NZU1JRKQkrPSBwb3dlcm9mZi5vCj4gZGlmZiAtLWdpdCBh L2tlcm5lbC9wb3dlci9wb3dlci5oIGIva2VybmVsL3Bvd2VyL3Bvd2VyLmgKPiBpbmRleCA0NmI1 ZWM3Li4xNTI3MTc0IDEwMDY0NAo+IC0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCj4gKysrIGIv a2VybmVsL3Bvd2VyL3Bvd2VyLmgKPiBAQCAtMjIzLDMgKzIyMywxMCBAQCBzdGF0aWMgaW5saW5l IHZvaWQgc3VzcGVuZF90aGF3X3Byb2Nlc3Nlcyh2b2lkKQo+ICB7Cj4gIH0KPiAgI2VuZGlmCj4g Kwo+ICsjaWZkZWYgQ09ORklHX1dBS0VMT0NLCj4gKy8qIGtlcm5lbC9wb3dlci93YWtlbG9jay5j ICovCj4gK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3VzcGVuZF93b3JrX3F1ZXVl Owo+ICtleHRlcm4gc3RydWN0IHdha2VfbG9jayBtYWluX3dha2VfbG9jazsKPiArZXh0ZXJuIHN1 c3BlbmRfc3RhdGVfdCByZXF1ZXN0ZWRfc3VzcGVuZF9zdGF0ZTsKPiArI2VuZGlmCj4gZGlmZiAt LWdpdCBhL2tlcm5lbC9wb3dlci93YWtlbG9jay5jIGIva2VybmVsL3Bvd2VyL3dha2Vsb2NrLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmM5ZTIyZjkKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIva2VybmVsL3Bvd2VyL3dha2Vsb2NrLmMKPiBAQCAtMCwwICsxLDU5OCBA QAo+ICsvKiBrZXJuZWwvcG93ZXIvd2FrZWxvY2suYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMDUtMjAwOCBHb29nbGUsIEluYy4KPiArICoKPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNl bnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNl bnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVu ZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsg Kgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcnRjLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9zdXNwZW5kLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPiAvKiBz eXNfc3luYyAqLwo+ICsjaW5jbHVkZSA8bGludXgvd2FrZWxvY2suaD4KPiArI2lmZGVmIENPTkZJ R19XQUtFTE9DS19TVEFUCj4gKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Cj4gKyNlbmRpZgo+ ICsjaW5jbHVkZSAicG93ZXIuaCIKPiArCj4gK2VudW0gewo+ICsJREVCVUdfRVhJVF9TVVNQRU5E ID0gMVUgPDwgMCwKPiArCURFQlVHX1dBS0VVUCA9IDFVIDw8IDEsCj4gKwlERUJVR19TVVNQRU5E ID0gMVUgPDwgMiwKPiArCURFQlVHX0VYUElSRSA9IDFVIDw8IDMsCj4gKwlERUJVR19XQUtFX0xP Q0sgPSAxVSA8PCA0LAo+ICt9Owo+ICtzdGF0aWMgaW50IGRlYnVnX21hc2sgPSBERUJVR19FWElU X1NVU1BFTkQgfCBERUJVR19XQUtFVVA7Cj4gK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19tYXNr LCBkZWJ1Z19tYXNrLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCk7Cj4gKwo+ICsj ZGVmaW5lIFdBS0VfTE9DS19UWVBFX01BU0sgICAgICAgICAgICAgICgweDBmKQo+ICsjZGVmaW5l IFdBS0VfTE9DS19JTklUSUFMSVpFRCAgICAgICAgICAgICgxVSA8PCA4KQo+ICsjZGVmaW5lIFdB S0VfTE9DS19BQ1RJVkUgICAgICAgICAgICAgICAgICgxVSA8PCA5KQo+ICsjZGVmaW5lIFdBS0Vf TE9DS19BVVRPX0VYUElSRSAgICAgICAgICAgICgxVSA8PCAxMCkKPiArI2RlZmluZSBXQUtFX0xP Q0tfUFJFVkVOVElOR19TVVNQRU5EICAgICAoMVUgPDwgMTEpCj4gKwo+ICtzdGF0aWMgREVGSU5F X1NQSU5MT0NLKGxpc3RfbG9jayk7Cj4gK3N0YXRpYyBMSVNUX0hFQUQoaW5hY3RpdmVfbG9ja3Mp Owo+ICtzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfd2FrZV9sb2Nrc1tXQUtFX0xPQ0tf VFlQRV9DT1VOVF07Cj4gK3N0YXRpYyBpbnQgY3VycmVudF9ldmVudF9udW07Cj4gK3N0cnVjdCB3 b3JrcXVldWVfc3RydWN0ICpzdXNwZW5kX3dvcmtfcXVldWU7Cj4gK3N0cnVjdCB3YWtlX2xvY2sg bWFpbl93YWtlX2xvY2s7Cj4gK3N1c3BlbmRfc3RhdGVfdCByZXF1ZXN0ZWRfc3VzcGVuZF9zdGF0 ZSA9IFBNX1NVU1BFTkRfTUVNOwo+ICtzdGF0aWMgc3RydWN0IHdha2VfbG9jayB1bmtub3duX3dh a2V1cDsKPiArCj4gKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAo+ICtzdGF0aWMgc3RydWN0 IHdha2VfbG9jayBkZWxldGVkX3dha2VfbG9ja3M7Cj4gK3N0YXRpYyBrdGltZV90IGxhc3Rfc2xl ZXBfdGltZV91cGRhdGU7Cj4gK3N0YXRpYyBpbnQgd2FpdF9mb3Jfd2FrZXVwOwoKQ2FyZSB0byBh ZGQga2VybmVsZG9jIGNvbW1lbnRzIHRvIHRoZSBmdW5jdGlvbnM/Cgo+ICtpbnQgZ2V0X2V4cGly ZWRfdGltZShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBrdGltZV90ICpleHBpcmVfdGltZSkKCkkg d291bGQgdXNlICdib29sJy4KCj4gK3sKPiArCXN0cnVjdCB0aW1lc3BlYyB0czsKPiArCXN0cnVj dCB0aW1lc3BlYyBrdDsKPiArCXN0cnVjdCB0aW1lc3BlYyB0b21vbm87Cj4gKwlzdHJ1Y3QgdGlt ZXNwZWMgZGVsdGE7Cj4gKwl1bnNpZ25lZCBsb25nIHNlcTsKPiArCWxvbmcgdGltZW91dDsKPiAr Cj4gKwlpZiAoIShsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19BVVRPX0VYUElSRSkpCj4gKwkJcmV0 dXJuIDA7Cj4gKwlkbyB7Cj4gKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7Cj4g KwkJdGltZW91dCA9IGxvY2stPmV4cGlyZXMgLSBqaWZmaWVzOwoKQ2FuIGl0IG92ZXJmbG93PwoK QW55d2F5LCB5b3UgYXJlIHVzaW5nIHN0cnVjdCB0aW1lc3BlYyBpbiBjb21wdXRhdGlvbnMsIHNv IHdoeSBkb24ndCB5b3UKc3RvcmUgaXQgaW4gdGhlIGxvY2sgc3RydWN0dXJlPwoKPiArCQlpZiAo dGltZW91dCA+IDApCj4gKwkJCXJldHVybiAwOwo+ICsJCWt0ID0gY3VycmVudF9rZXJuZWxfdGlt ZSgpOwo+ICsJCXRvbW9ubyA9IHdhbGxfdG9fbW9ub3RvbmljOwo+ICsJfSB3aGlsZSAocmVhZF9z ZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7Cj4gKwlqaWZmaWVzX3RvX3RpbWVzcGVjKC10aW1l b3V0LCAmZGVsdGEpOwo+ICsJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnRzLCBrdC50dl9zZWMg KyB0b21vbm8udHZfc2VjIC0gZGVsdGEudHZfc2VjLAo+ICsJCQkJa3QudHZfbnNlYyArIHRvbW9u by50dl9uc2VjIC0gZGVsdGEudHZfbnNlYyk7Cj4gKwkqZXhwaXJlX3RpbWUgPSB0aW1lc3BlY190 b19rdGltZSh0cyk7Cj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBpbnQgcHJp bnRfbG9ja19zdGF0KGNoYXIgKmJ1Ziwgc3RydWN0IHdha2VfbG9jayAqbG9jaykKPiArewo+ICsJ aW50IGxvY2tfY291bnQgPSBsb2NrLT5zdGF0LmNvdW50Owo+ICsJaW50IGV4cGlyZV9jb3VudCA9 IGxvY2stPnN0YXQuZXhwaXJlX2NvdW50Owo+ICsJa3RpbWVfdCBhY3RpdmVfdGltZSA9IGt0aW1l X3NldCgwLCAwKTsKPiArCWt0aW1lX3QgdG90YWxfdGltZSA9IGxvY2stPnN0YXQudG90YWxfdGlt ZTsKPiArCWt0aW1lX3QgbWF4X3RpbWUgPSBsb2NrLT5zdGF0Lm1heF90aW1lOwo+ICsJa3RpbWVf dCBwcmV2ZW50X3N1c3BlbmRfdGltZSA9IGxvY2stPnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWU7 Cj4gKwlpZiAobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfQUNUSVZFKSB7Cj4gKwkJa3RpbWVfdCBu b3csIGFkZF90aW1lOwo+ICsJCWludCBleHBpcmVkID0gZ2V0X2V4cGlyZWRfdGltZShsb2NrLCAm bm93KTsKPiArCQlpZiAoIWV4cGlyZWQpCj4gKwkJCW5vdyA9IGt0aW1lX2dldCgpOwo+ICsJCWFk ZF90aW1lID0ga3RpbWVfc3ViKG5vdywgbG9jay0+c3RhdC5sYXN0X3RpbWUpOwo+ICsJCWxvY2tf Y291bnQrKzsKPiArCQlpZiAoIWV4cGlyZWQpCj4gKwkJCWFjdGl2ZV90aW1lID0gYWRkX3RpbWU7 Cj4gKwkJZWxzZQo+ICsJCQlleHBpcmVfY291bnQrKzsKPiArCQl0b3RhbF90aW1lID0ga3RpbWVf YWRkKHRvdGFsX3RpbWUsIGFkZF90aW1lKTsKPiArCQlpZiAobG9jay0+ZmxhZ3MgJiBXQUtFX0xP Q0tfUFJFVkVOVElOR19TVVNQRU5EKQo+ICsJCQlwcmV2ZW50X3N1c3BlbmRfdGltZSA9IGt0aW1l X2FkZChwcmV2ZW50X3N1c3BlbmRfdGltZSwKPiArCQkJCQlrdGltZV9zdWIobm93LCBsYXN0X3Ns ZWVwX3RpbWVfdXBkYXRlKSk7Cj4gKwkJaWYgKGFkZF90aW1lLnR2NjQgPiBtYXhfdGltZS50djY0 KQo+ICsJCQltYXhfdGltZSA9IGFkZF90aW1lOwo+ICsJfQo+ICsKPiArCXJldHVybiBzcHJpbnRm KGJ1ZiwgIlwiJXNcIlx0JWRcdCVkXHQlZFx0JWxsZFx0JWxsZFx0JWxsZFx0JWxsZFx0Igo+ICsJ CSAgICAgICAiJWxsZFxuIiwgbG9jay0+bmFtZSwgbG9ja19jb3VudCwgZXhwaXJlX2NvdW50LAo+ ICsJCSAgICAgICBsb2NrLT5zdGF0Lndha2V1cF9jb3VudCwga3RpbWVfdG9fbnMoYWN0aXZlX3Rp bWUpLAo+ICsJCSAgICAgICBrdGltZV90b19ucyh0b3RhbF90aW1lKSwKPiArCQkgICAgICAga3Rp bWVfdG9fbnMocHJldmVudF9zdXNwZW5kX3RpbWUpLCBrdGltZV90b19ucyhtYXhfdGltZSksCj4g KwkJICAgICAgIGt0aW1lX3RvX25zKGxvY2stPnN0YXQubGFzdF90aW1lKSk7Cj4gK30KPiArCgpX aHkgZGlkIHlvdSBkZWNpZGUgdG8gcHV0IHRoYXQgaW4gL3Byb2MgPwoKPiArc3RhdGljIGludCB3 YWtlbG9ja3NfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAo+ ICsJCQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKPiArewo+ICsJdW5z aWduZWQgbG9uZyBpcnFmbGFnczsKPiArCXN0cnVjdCB3YWtlX2xvY2sgKmxvY2s7Cj4gKwlpbnQg bGVuID0gMDsKPiArCWNoYXIgKnAgPSBwYWdlOwo+ICsJaW50IHR5cGU7Cj4gKwo+ICsJc3Bpbl9s b2NrX2lycXNhdmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCXAgKz0gc3ByaW50Zihw LCAibmFtZVx0Y291bnRcdGV4cGlyZV9jb3VudFx0d2FrZV9jb3VudFx0YWN0aXZlX3NpbmNlIgo+ ICsJCSAgICAgIlx0dG90YWxfdGltZVx0c2xlZXBfdGltZVx0bWF4X3RpbWVcdGxhc3RfY2hhbmdl XG4iKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkobG9jaywgJmluYWN0aXZlX2xvY2tzLCBsaW5r KSB7Cj4gKwkJcCArPSBwcmludF9sb2NrX3N0YXQocCwgbG9jayk7Cj4gKwl9Cj4gKwlmb3IgKHR5 cGUgPSAwOyB0eXBlIDwgV0FLRV9MT0NLX1RZUEVfQ09VTlQ7IHR5cGUrKykgewo+ICsJCWxpc3Rf Zm9yX2VhY2hfZW50cnkobG9jaywgJmFjdGl2ZV93YWtlX2xvY2tzW3R5cGVdLCBsaW5rKQo+ICsJ CQlwICs9IHByaW50X2xvY2tfc3RhdChwLCBsb2NrKTsKPiArCX0KPiArCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCSpzdGFydCA9IHBhZ2UgKyBv ZmY7Cj4gKwo+ICsJbGVuID0gcCAtIHBhZ2U7Cj4gKwlpZiAobGVuID4gb2ZmKQo+ICsJCWxlbiAt PSBvZmY7Cj4gKwllbHNlCj4gKwkJbGVuID0gMDsKPiArCj4gKwlyZXR1cm4gbGVuIDwgY291bnQg PyBsZW4gIDogY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHdha2VfdW5sb2NrX3N0YXRf bG9ja2VkKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGludCBleHBpcmVkKQo+ICt7Cj4gKwlrdGlt ZV90IGR1cmF0aW9uOwo+ICsJa3RpbWVfdCBub3c7Cj4gKwlpZiAoIShsb2NrLT5mbGFncyAmIFdB S0VfTE9DS19BQ1RJVkUpKQo+ICsJCXJldHVybjsKPiArCWlmIChnZXRfZXhwaXJlZF90aW1lKGxv Y2ssICZub3cpKQo+ICsJCWV4cGlyZWQgPSAxOwoKSSdkIHVzZSAndHJ1ZScuCgo+ICsJZWxzZQo+ ICsJCW5vdyA9IGt0aW1lX2dldCgpOwo+ICsJbG9jay0+c3RhdC5jb3VudCsrOwo+ICsJaWYgKGV4 cGlyZWQpCj4gKwkJbG9jay0+c3RhdC5leHBpcmVfY291bnQrKzsKPiArCWR1cmF0aW9uID0ga3Rp bWVfc3ViKG5vdywgbG9jay0+c3RhdC5sYXN0X3RpbWUpOwo+ICsJbG9jay0+c3RhdC50b3RhbF90 aW1lID0ga3RpbWVfYWRkKGxvY2stPnN0YXQudG90YWxfdGltZSwgZHVyYXRpb24pOwo+ICsJaWYg KGt0aW1lX3RvX25zKGR1cmF0aW9uKSA+IGt0aW1lX3RvX25zKGxvY2stPnN0YXQubWF4X3RpbWUp KQo+ICsJCWxvY2stPnN0YXQubWF4X3RpbWUgPSBkdXJhdGlvbjsKPiArCWxvY2stPnN0YXQubGFz dF90aW1lID0ga3RpbWVfZ2V0KCk7Cj4gKwlpZiAobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfUFJF VkVOVElOR19TVVNQRU5EKSB7Cj4gKwkJZHVyYXRpb24gPSBrdGltZV9zdWIobm93LCBsYXN0X3Ns ZWVwX3RpbWVfdXBkYXRlKTsKPiArCQlsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lID0g a3RpbWVfYWRkKAo+ICsJCQlsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lLCBkdXJhdGlv bik7Cj4gKwkJbG9jay0+ZmxhZ3MgJj0gfldBS0VfTE9DS19QUkVWRU5USU5HX1NVU1BFTkQ7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tl ZChpbnQgZG9uZSkKPiArewo+ICsJc3RydWN0IHdha2VfbG9jayAqbG9jazsKPiArCWt0aW1lX3Qg bm93LCBldGltZSwgZWxhcHNlZCwgYWRkOwo+ICsJaW50IGV4cGlyZWQ7Cj4gKwo+ICsJbm93ID0g a3RpbWVfZ2V0KCk7Cj4gKwllbGFwc2VkID0ga3RpbWVfc3ViKG5vdywgbGFzdF9zbGVlcF90aW1l X3VwZGF0ZSk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssICZhY3RpdmVfd2FrZV9sb2Nr c1tXQUtFX0xPQ0tfU1VTUEVORF0sIGxpbmspIHsKPiArCQlleHBpcmVkID0gZ2V0X2V4cGlyZWRf dGltZShsb2NrLCAmZXRpbWUpOwo+ICsJCWlmIChsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19QUkVW RU5USU5HX1NVU1BFTkQpIHsKPiArCQkJaWYgKGV4cGlyZWQpCj4gKwkJCQlhZGQgPSBrdGltZV9z dWIoZXRpbWUsIGxhc3Rfc2xlZXBfdGltZV91cGRhdGUpOwo+ICsJCQllbHNlCj4gKwkJCQlhZGQg PSBlbGFwc2VkOwo+ICsJCQlsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lID0ga3RpbWVf YWRkKAo+ICsJCQkJbG9jay0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSwgYWRkKTsKPiArCQl9 Cj4gKwkJaWYgKGRvbmUgfHwgZXhwaXJlZCkKPiArCQkJbG9jay0+ZmxhZ3MgJj0gfldBS0VfTE9D S19QUkVWRU5USU5HX1NVU1BFTkQ7Cj4gKwkJZWxzZQo+ICsJCQlsb2NrLT5mbGFncyB8PSBXQUtF X0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EOwo+ICsJfQo+ICsJbGFzdF9zbGVlcF90aW1lX3VwZGF0 ZSA9IG5vdzsKPiArfQo+ICsjZW5kaWYKPiArCj4gKwo+ICtzdGF0aWMgdm9pZCBleHBpcmVfd2Fr ZV9sb2NrKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spCj4gK3sKPiArI2lmZGVmIENPTkZJR19XQUtF TE9DS19TVEFUCj4gKwl3YWtlX3VubG9ja19zdGF0X2xvY2tlZChsb2NrLCAxKTsKPiArI2VuZGlm Cj4gKwlsb2NrLT5mbGFncyAmPSB+KFdBS0VfTE9DS19BQ1RJVkUgfCBXQUtFX0xPQ0tfQVVUT19F WFBJUkUpOwo+ICsJbGlzdF9kZWwoJmxvY2stPmxpbmspOwo+ICsJbGlzdF9hZGQoJmxvY2stPmxp bmssICZpbmFjdGl2ZV9sb2Nrcyk7Cj4gKwlpZiAoZGVidWdfbWFzayAmIChERUJVR19XQUtFX0xP Q0sgfCBERUJVR19FWFBJUkUpKQo+ICsJCXByX2luZm8oImV4cGlyZWQgd2FrZSBsb2NrICVzXG4i LCBsb2NrLT5uYW1lKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHJpbnRfYWN0aXZlX2xvY2tz KGludCB0eXBlKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ICsJc3RydWN0IHdh a2VfbG9jayAqbG9jazsKPiArCj4gKwlCVUdfT04odHlwZSA+PSBXQUtFX0xPQ0tfVFlQRV9DT1VO VCk7Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGxvY2ssICZhY3RpdmVfd2FrZV9sb2Nrc1t0eXBlXSwgbGluaykgewo+ ICsJCWlmIChsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19BVVRPX0VYUElSRSkgewo+ICsJCQlsb25n IHRpbWVvdXQgPSBsb2NrLT5leHBpcmVzIC0gamlmZmllczsKPiArCQkJaWYgKHRpbWVvdXQgPD0g MCkKPiArCQkJCXByX2luZm8oIndha2UgbG9jayAlcywgZXhwaXJlZFxuIiwgbG9jay0+bmFtZSk7 Cj4gKwkJCWVsc2UKPiArCQkJCXByX2luZm8oImFjdGl2ZSB3YWtlIGxvY2sgJXMsIHRpbWUgbGVm dCAlbGRcbiIsCj4gKwkJCQkJbG9jay0+bmFtZSwgdGltZW91dCk7Cj4gKwkJfSBlbHNlCj4gKwkJ CXByX2luZm8oImFjdGl2ZSB3YWtlIGxvY2sgJXNcbiIsIGxvY2stPm5hbWUpOwo+ICsJfQo+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4g K3N0YXRpYyBsb25nIGhhc193YWtlX2xvY2tfbG9ja2VkKGludCB0eXBlKQoKSSdkIGNoYW5nZSB0 aGUgbmFtZSwgaXQgc3VnZ2VzdHMgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHdoYXQgdGhlIGZ1 bmN0aW9uCmRvZXMuCgo+ICt7Cj4gKwlzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCAqbjsKPiArCWxv bmcgbWF4X3RpbWVvdXQgPSAwOwo+ICsKPiArCUJVR19PTih0eXBlID49IFdBS0VfTE9DS19UWVBF X0NPVU5UKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsb2NrLCBuLCAmYWN0aXZlX3dh a2VfbG9ja3NbdHlwZV0sIGxpbmspIHsKPiArCQlpZiAobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tf QVVUT19FWFBJUkUpIHsKPiArCQkJbG9uZyB0aW1lb3V0ID0gbG9jay0+ZXhwaXJlcyAtIGppZmZp ZXM7CgpJIHRoaW5rIHRpbWVfYWZ0ZXIoKSBpcyBmb3IgdGhpbmdzIGxpa2UgdGhpcy4KCj4gKwkJ CWlmICh0aW1lb3V0IDw9IDApCj4gKwkJCQlleHBpcmVfd2FrZV9sb2NrKGxvY2spOwo+ICsJCQll bHNlIGlmICh0aW1lb3V0ID4gbWF4X3RpbWVvdXQpCj4gKwkJCQltYXhfdGltZW91dCA9IHRpbWVv dXQ7Cj4gKwkJfSBlbHNlCj4gKwkJCXJldHVybiAtMTsKPiArCX0KPiArCXJldHVybiBtYXhfdGlt ZW91dDsKPiArfQo+ICsKPiArbG9uZyBoYXNfd2FrZV9sb2NrKGludCB0eXBlKQo+ICt7Cj4gKwls b25nIHJldDsKPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gKwlyZXQgPSBoYXNfd2FrZV9sb2NrX2xvY2tlZCh0 eXBlKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3VzcGVuZChzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCWludCByZXQ7Cj4gKwlpbnQgZW50cnlfZXZlbnRfbnVt Owo+ICsKPiArCWlmIChoYXNfd2FrZV9sb2NrKFdBS0VfTE9DS19TVVNQRU5EKSkgewo+ICsJCWlm IChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKPiArCQkJcHJfaW5mbygic3VzcGVuZDogYWJv cnQgc3VzcGVuZFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWVudHJ5X2V2ZW50X251 bSA9IGN1cnJlbnRfZXZlbnRfbnVtOwo+ICsJc3lzX3N5bmMoKTsKCnBtX3N1c3BlbmQoKSB3aWxs IGRvIGl0LCB5b3UgZG9uJ3QgbmVlZCB0by4KCj4gKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NV U1BFTkQpCj4gKwkJcHJfaW5mbygic3VzcGVuZDogZW50ZXIgc3VzcGVuZFxuIik7CgpTaG91bGRu J3QgdGhhdCBjaGVjayBpZiBzb21lb25lIGhhcyB0YWtlbiBhIHdha2Vsb2NrIGluIHRoZSBtZWFu dGltZT8KCj4gKwlyZXQgPSBwbV9zdXNwZW5kKHJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlKTsKPiAr CWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhJVF9TVVNQRU5EKSB7Cj4gKwkJc3RydWN0IHRpbWVz cGVjIHRzOwo+ICsJCXN0cnVjdCBydGNfdGltZSB0bTsKPiArCQlnZXRuc3RpbWVvZmRheSgmdHMp Owo+ICsJCXJ0Y190aW1lX3RvX3RtKHRzLnR2X3NlYywgJnRtKTsKPiArCQlwcl9pbmZvKCJzdXNw ZW5kOiBleGl0IHN1c3BlbmQsIHJldCA9ICVkICIKPiArCQkJIiglZC0lMDJkLSUwMmQgJTAyZDol MDJkOiUwMmQuJTA5bHUgVVRDKVxuIiwgcmV0LAo+ICsJCQl0bS50bV95ZWFyICsgMTkwMCwgdG0u dG1fbW9uICsgMSwgdG0udG1fbWRheSwKPiArCQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50 bV9zZWMsIHRzLnR2X25zZWMpOwo+ICsJfQo+ICsJaWYgKGN1cnJlbnRfZXZlbnRfbnVtID09IGVu dHJ5X2V2ZW50X251bSkgewo+ICsJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKPiAr CQkJcHJfaW5mbygic3VzcGVuZDogcG1fc3VzcGVuZCByZXR1cm5lZCB3aXRoIG5vIGV2ZW50XG4i KTsKPiArCQl3YWtlX2xvY2tfdGltZW91dCgmdW5rbm93bl93YWtldXAsIEhaIC8gMik7Cj4gKwl9 Cj4gK30KPiArc3RhdGljIERFQ0xBUkVfV09SSyhzdXNwZW5kX3dvcmssIHN1c3BlbmQpOwo+ICsK PiArc3RhdGljIHZvaWQgZXhwaXJlX3dha2VfbG9ja3ModW5zaWduZWQgbG9uZyBkYXRhKQo+ICt7 Cj4gKwlsb25nIGhhc19sb2NrOwo+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiArCWlmIChk ZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQo+ICsJCXByX2luZm8oImV4cGlyZV93YWtlX2xvY2tz OiBzdGFydFxuIik7Cj4gKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCj4gKwkJcHJp bnRfYWN0aXZlX2xvY2tzKFdBS0VfTE9DS19TVVNQRU5EKTsKPiArCXNwaW5fbG9ja19pcnFzYXZl KCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKPiArCWhhc19sb2NrID0gaGFzX3dha2VfbG9ja19sb2Nr ZWQoV0FLRV9MT0NLX1NVU1BFTkQpOwo+ICsJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUp Cj4gKwkJcHJfaW5mbygiZXhwaXJlX3dha2VfbG9ja3M6IGRvbmUsIGhhc19sb2NrICVsZFxuIiwg aGFzX2xvY2spOwo+ICsJaWYgKGhhc19sb2NrID09IDApCj4gKwkJcXVldWVfd29yayhzdXNwZW5k X3dvcmtfcXVldWUsICZzdXNwZW5kX3dvcmspOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm bGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArc3RhdGljIERFRklORV9USU1FUihleHBpcmVf dGltZXIsIGV4cGlyZV93YWtlX2xvY2tzLCAwLCAwKTsKPiArCj4gK3N0YXRpYyBpbnQgcG93ZXJf c3VzcGVuZF9sYXRlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBz dGF0ZSkKPiArewo+ICsJaW50IHJldCA9IGhhc193YWtlX2xvY2soV0FLRV9MT0NLX1NVU1BFTkQp ID8gLUVBR0FJTiA6IDA7Cj4gKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAo+ICsJd2FpdF9m b3Jfd2FrZXVwID0gMTsKPiArI2VuZGlmCj4gKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BF TkQpCj4gKwkJcHJfaW5mbygicG93ZXJfc3VzcGVuZF9sYXRlIHJldHVybiAlZFxuIiwgcmV0KTsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHBvd2VyX2RyaXZlciA9IHsKPiArCS5kcml2ZXIubmFtZSA9ICJwb3dlciIsCj4gKwkuc3VzcGVu ZF9sYXRlID0gcG93ZXJfc3VzcGVuZF9sYXRlLAo+ICt9Owo+ICtzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RldmljZSBwb3dlcl9kZXZpY2UgPSB7Cj4gKwkubmFtZSA9ICJwb3dlciIsCj4gK307CgpX aGF0J3MgdGhpcyBhbmQgd2hhdCdzIGl0IGZvcj8KCj4gKwo+ICt2b2lkIHdha2VfbG9ja19pbml0 KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQo+ICt7 Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gMDsKPiArCj4gKwlpZiAobmFtZSkKPiArCQls b2NrLT5uYW1lID0gbmFtZTsKCkhtLiAgSSdkIHJhdGhlciByZXNlcnZlIG1lbW9yeSBmb3IgdGhl IG5hbWUgYW5kIGNvcHkgaXQgZnJvbSB0aGUgYWRkcmVzcwpwcm92aWRlZCBieSB0aGUgY2FsbGVy LgoKPiArCUJVR19PTighbG9jay0+bmFtZSk7CgpJc24ndCBpdCBhIGJpdCB0b28gZHJhc3RpYz8g IFBlcmhhcHMgbWFrZSBpdCByZXR1cm4gYSB2YWx1ZSBzbyB0aGF0IHRoZSBjYWxsZXIKY2FuIGNo ZWNrIGlmIGl0IGhhcyB0aGUgbG9jaz8KCj4gKwo+ICsJaWYgKGRlYnVnX21hc2sgJiBERUJVR19X QUtFX0xPQ0spCj4gKwkJcHJfaW5mbygid2FrZV9sb2NrX2luaXQgbmFtZT0lc1xuIiwgbG9jay0+ bmFtZSk7Cj4gKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAo+ICsJbG9jay0+c3RhdC5jb3Vu dCA9IDA7Cj4gKwlsb2NrLT5zdGF0LmV4cGlyZV9jb3VudCA9IDA7Cj4gKwlsb2NrLT5zdGF0Lndh a2V1cF9jb3VudCA9IDA7Cj4gKwlsb2NrLT5zdGF0LnRvdGFsX3RpbWUgPSBrdGltZV9zZXQoMCwg MCk7Cj4gKwlsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lID0ga3RpbWVfc2V0KDAsIDAp Owo+ICsJbG9jay0+c3RhdC5tYXhfdGltZSA9IGt0aW1lX3NldCgwLCAwKTsKPiArCWxvY2stPnN0 YXQubGFzdF90aW1lID0ga3RpbWVfc2V0KDAsIDApOwo+ICsjZW5kaWYKPiArCWxvY2stPmZsYWdz ID0gKHR5cGUgJiBXQUtFX0xPQ0tfVFlQRV9NQVNLKSB8IFdBS0VfTE9DS19JTklUSUFMSVpFRDsK PiArCj4gKwlJTklUX0xJU1RfSEVBRCgmbG9jay0+bGluayk7Cj4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gKwlsaXN0X2FkZCgmbG9jay0+bGluaywgJmluYWN0 aXZlX2xvY2tzKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxh Z3MpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wod2FrZV9sb2NrX2luaXQpOwo+ICsKPiArdm9pZCB3 YWtlX2xvY2tfZGVzdHJveShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKQo+ICt7Cj4gKwl1bnNpZ25l ZCBsb25nIGlycWZsYWdzOwo+ICsJaWYgKGRlYnVnX21hc2sgJiBERUJVR19XQUtFX0xPQ0spCj4g KwkJcHJfaW5mbygid2FrZV9sb2NrX2Rlc3Ryb3kgbmFtZT0lc1xuIiwgbG9jay0+bmFtZSk7Cj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gKwlsb2NrLT5mbGFn cyAmPSB+V0FLRV9MT0NLX0lOSVRJQUxJWkVEOwo+ICsjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NU QVQKPiArCWlmIChsb2NrLT5zdGF0LmNvdW50KSB7Cj4gKwkJZGVsZXRlZF93YWtlX2xvY2tzLnN0 YXQuY291bnQgKz0gbG9jay0+c3RhdC5jb3VudDsKPiArCQlkZWxldGVkX3dha2VfbG9ja3Muc3Rh dC5leHBpcmVfY291bnQgKz0gbG9jay0+c3RhdC5leHBpcmVfY291bnQ7Cj4gKwkJZGVsZXRlZF93 YWtlX2xvY2tzLnN0YXQudG90YWxfdGltZSA9Cj4gKwkJCWt0aW1lX2FkZChkZWxldGVkX3dha2Vf bG9ja3Muc3RhdC50b3RhbF90aW1lLAo+ICsJCQkJICBsb2NrLT5zdGF0LnRvdGFsX3RpbWUpOwo+ ICsJCWRlbGV0ZWRfd2FrZV9sb2Nrcy5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lID0KPiArCQkJ a3RpbWVfYWRkKGRlbGV0ZWRfd2FrZV9sb2Nrcy5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lLAo+ ICsJCQkJICBsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lKTsKPiArCQlkZWxldGVkX3dh a2VfbG9ja3Muc3RhdC5tYXhfdGltZSA9Cj4gKwkJCWt0aW1lX2FkZChkZWxldGVkX3dha2VfbG9j a3Muc3RhdC5tYXhfdGltZSwKPiArCQkJCSAgbG9jay0+c3RhdC5tYXhfdGltZSk7Cj4gKwl9Cj4g KyNlbmRpZgo+ICsJbGlzdF9kZWwoJmxvY2stPmxpbmspOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTCh3YWtlX2xv Y2tfZGVzdHJveSk7Cj4gKwo+ICtzdGF0aWMgdm9pZCB3YWtlX2xvY2tfaW50ZXJuYWwoCgpXaGF0 ICBhYm91dCBfX3dha2VfbG9jaygpID8KCj4gKwlzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBsb25n IHRpbWVvdXQsIGludCBoYXNfdGltZW91dCkKCldoYXQncyB0aGUgcG9pbnQgb2YgdGhlIGxhc3Qg YXJndW1lbnQ/ICBXb3VsZG4ndCB0aW1lb3V0ID09IDAgYmUgc3VmZmljaWVudD8KCkFsc28sIGRv ZXMgaXQgbWFrZSBzZW5zZSB0byBwYXNzIG5lZ2F0aXZlIHRpbWVvdXQgdG8gaXQ/Cgo+ICt7Cj4g KwlpbnQgdHlwZTsKPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwlsb25nIGV4cGlyZV9p bjsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gKwl0 eXBlID0gbG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfVFlQRV9NQVNLOwo+ICsJQlVHX09OKHR5cGUg Pj0gV0FLRV9MT0NLX1RZUEVfQ09VTlQpOwo+ICsJQlVHX09OKCEobG9jay0+ZmxhZ3MgJiBXQUtF X0xPQ0tfSU5JVElBTElaRUQpKTsKCkkgZG9uJ3QgbGlrZSB0aGVzZSBCVUdfT04oKXMuICBQbGVh c2UgZG8gc29tZXRoaW5nIGxlc3MgZHJhc3RpYyBpbnN0ZWFkLgoKPiArI2lmZGVmIENPTkZJR19X QUtFTE9DS19TVEFUCj4gKwlpZiAodHlwZSA9PSBXQUtFX0xPQ0tfU1VTUEVORCAmJiB3YWl0X2Zv cl93YWtldXApIHsKPiArCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1dBS0VVUCkKPiArCQkJcHJf aW5mbygid2FrZXVwIHdha2UgbG9jazogJXNcbiIsIGxvY2stPm5hbWUpOwo+ICsJCXdhaXRfZm9y X3dha2V1cCA9IDA7Cj4gKwkJbG9jay0+c3RhdC53YWtldXBfY291bnQrKzsKPiArCX0KPiArCWlm ICgobG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfQVVUT19FWFBJUkUpICYmCj4gKwkgICAgKGxvbmcp KGxvY2stPmV4cGlyZXMgLSBqaWZmaWVzKSA8PSAwKSB7Cj4gKwkJd2FrZV91bmxvY2tfc3RhdF9s b2NrZWQobG9jaywgMCk7Cj4gKwkJbG9jay0+c3RhdC5sYXN0X3RpbWUgPSBrdGltZV9nZXQoKTsK PiArCX0KPiArI2VuZGlmCj4gKwlpZiAoIShsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19BQ1RJVkUp KSB7Cj4gKwkJbG9jay0+ZmxhZ3MgfD0gV0FLRV9MT0NLX0FDVElWRTsKPiArI2lmZGVmIENPTkZJ R19XQUtFTE9DS19TVEFUCj4gKwkJbG9jay0+c3RhdC5sYXN0X3RpbWUgPSBrdGltZV9nZXQoKTsK PiArI2VuZGlmCj4gKwl9Cj4gKwlsaXN0X2RlbCgmbG9jay0+bGluayk7Cj4gKwlpZiAoaGFzX3Rp bWVvdXQpIHsKPiArCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1dBS0VfTE9DSykKPiArCQkJcHJf aW5mbygid2FrZV9sb2NrOiAlcywgdHlwZSAlZCwgdGltZW91dCAlbGQuJTAzbHVcbiIsCj4gKwkJ CQlsb2NrLT5uYW1lLCB0eXBlLCB0aW1lb3V0IC8gSFosCj4gKwkJCQkodGltZW91dCAlIEhaKSAq IE1TRUNfUEVSX1NFQyAvIEhaKTsKPiArCQlsb2NrLT5leHBpcmVzID0gamlmZmllcyArIHRpbWVv dXQ7Cj4gKwkJbG9jay0+ZmxhZ3MgfD0gV0FLRV9MT0NLX0FVVE9fRVhQSVJFOwo+ICsJCWxpc3Rf YWRkX3RhaWwoJmxvY2stPmxpbmssICZhY3RpdmVfd2FrZV9sb2Nrc1t0eXBlXSk7Cj4gKwl9IGVs c2Ugewo+ICsJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfV0FLRV9MT0NLKQo+ICsJCQlwcl9pbmZv KCJ3YWtlX2xvY2s6ICVzLCB0eXBlICVkXG4iLCBsb2NrLT5uYW1lLCB0eXBlKTsKPiArCQlsb2Nr LT5leHBpcmVzID0gTE9OR19NQVg7Cj4gKwkJbG9jay0+ZmxhZ3MgJj0gfldBS0VfTE9DS19BVVRP X0VYUElSRTsKPiArCQlsaXN0X2FkZCgmbG9jay0+bGluaywgJmFjdGl2ZV93YWtlX2xvY2tzW3R5 cGVdKTsKPiArCX0KCldoeSBub3QgdG8gdXNlIGxpc3RfYWRkX3RhaWwoKSBpbiBib3RoIGNhc2Vz PwoKPiArCWlmICh0eXBlID09IFdBS0VfTE9DS19TVVNQRU5EKSB7Cj4gKwkJY3VycmVudF9ldmVu dF9udW0rKzsKPiArI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCj4gKwkJaWYgKGxvY2sgPT0g Jm1haW5fd2FrZV9sb2NrKQo+ICsJCQl1cGRhdGVfc2xlZXBfd2FpdF9zdGF0c19sb2NrZWQoMSk7 Cj4gKwkJZWxzZSBpZiAoIXdha2VfbG9ja19hY3RpdmUoJm1haW5fd2FrZV9sb2NrKSkKPiArCQkJ dXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9ja2VkKDApOwo+ICsjZW5kaWYKPiArCQlpZiAoaGFz X3RpbWVvdXQpCj4gKwkJCWV4cGlyZV9pbiA9IGhhc193YWtlX2xvY2tfbG9ja2VkKHR5cGUpOwo+ ICsJCWVsc2UKPiArCQkJZXhwaXJlX2luID0gLTE7CgoJZXhwaXJlX2kgPSBoYXNfdGltZW91dCA/ IGhhc193YWtlX2xvY2tfbG9ja2VkKHR5cGUpIDogLTE7CgoodGhlcmUgaXMgc29tZXRoaW5nIGxp a2UgdGhpcyBhYm92ZSB0b28pLgoKPiArCQlpZiAoZXhwaXJlX2luID4gMCkgewo+ICsJCQlpZiAo ZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkKPiArCQkJCXByX2luZm8oIndha2VfbG9jazogJXMs IHN0YXJ0IGV4cGlyZSB0aW1lciwgIgo+ICsJCQkJCSIlbGRcbiIsIGxvY2stPm5hbWUsIGV4cGly ZV9pbik7Cj4gKwkJCW1vZF90aW1lcigmZXhwaXJlX3RpbWVyLCBqaWZmaWVzICsgZXhwaXJlX2lu KTsKCldoYXQgZXhhY3RseSBhcmUgeW91IHRyeWluZyB0byBhY2hpZXZlIGhlcmU/Cgo+ICsJCX0g ZWxzZSB7Cj4gKwkJCWlmIChkZWxfdGltZXIoJmV4cGlyZV90aW1lcikpCj4gKwkJCQlpZiAoZGVi dWdfbWFzayAmIERFQlVHX0VYUElSRSkKPiArCQkJCQlwcl9pbmZvKCJ3YWtlX2xvY2s6ICVzLCBz dG9wIGV4cGlyZSAiCj4gKwkJCQkJCSJ0aW1lclxuIiwgbG9jay0+bmFtZSk7Cj4gKwkJCWlmIChl eHBpcmVfaW4gPT0gMCkKPiArCQkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1ZXVlLCAmc3Vz cGVuZF93b3JrKTsKClRoaXMgYXBwZWFycyB0byBvbmx5IGhhcHBlbiBpZiB0aW1lb3V0ID0gMCBp cyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiB3aGlsZQpoYXNfdGltZW91dCA9PSB0cnVlLiAgSXMg aXQgY29ycmVjdD8KCj4gKwkJfQo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlz dF9sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4gK3ZvaWQgd2FrZV9sb2NrKHN0cnVjdCB3YWtl X2xvY2sgKmxvY2spCj4gK3sKPiArCXdha2VfbG9ja19pbnRlcm5hbChsb2NrLCAwLCAwKTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MKHdha2VfbG9jayk7Cj4gKwo+ICt2b2lkIHdha2VfbG9ja190aW1l b3V0KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGxvbmcgdGltZW91dCkKPiArewo+ICsJd2FrZV9s b2NrX2ludGVybmFsKGxvY2ssIHRpbWVvdXQsIDEpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wod2Fr ZV9sb2NrX3RpbWVvdXQpOwo+ICsKPiArdm9pZCB3YWtlX3VubG9jayhzdHJ1Y3Qgd2FrZV9sb2Nr ICpsb2NrKQo+ICt7Cj4gKwlpbnQgdHlwZTsKPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7Cj4gKwl0eXBlID0gbG9j ay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfVFlQRV9NQVNLOwo+ICsjaWZkZWYgQ09ORklHX1dBS0VMT0NL X1NUQVQKPiArCXdha2VfdW5sb2NrX3N0YXRfbG9ja2VkKGxvY2ssIDApOwo+ICsjZW5kaWYKPiAr CWlmIChkZWJ1Z19tYXNrICYgREVCVUdfV0FLRV9MT0NLKQo+ICsJCXByX2luZm8oIndha2VfdW5s b2NrOiAlc1xuIiwgbG9jay0+bmFtZSk7Cj4gKwlsb2NrLT5mbGFncyAmPSB+KFdBS0VfTE9DS19B Q1RJVkUgfCBXQUtFX0xPQ0tfQVVUT19FWFBJUkUpOwo+ICsJbGlzdF9kZWwoJmxvY2stPmxpbmsp Owo+ICsJbGlzdF9hZGQoJmxvY2stPmxpbmssICZpbmFjdGl2ZV9sb2Nrcyk7Cj4gKwlpZiAodHlw ZSA9PSBXQUtFX0xPQ0tfU1VTUEVORCkgewo+ICsJCWxvbmcgaGFzX2xvY2sgPSBoYXNfd2FrZV9s b2NrX2xvY2tlZCh0eXBlKTsKPiArCQlpZiAoaGFzX2xvY2sgPiAwKSB7Cj4gKwkJCWlmIChkZWJ1 Z19tYXNrICYgREVCVUdfRVhQSVJFKQo+ICsJCQkJcHJfaW5mbygid2FrZV91bmxvY2s6ICVzLCBz dGFydCBleHBpcmUgdGltZXIsICIKPiArCQkJCQkiJWxkXG4iLCBsb2NrLT5uYW1lLCBoYXNfbG9j ayk7Cj4gKwkJCW1vZF90aW1lcigmZXhwaXJlX3RpbWVyLCBqaWZmaWVzICsgaGFzX2xvY2spOwo+ ICsJCX0gZWxzZSB7Cj4gKwkJCWlmIChkZWxfdGltZXIoJmV4cGlyZV90aW1lcikpCj4gKwkJCQlp ZiAoZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkKPiArCQkJCQlwcl9pbmZvKCJ3YWtlX3VubG9j azogJXMsIHN0b3AgZXhwaXJlICIKPiArCQkJCQkJInRpbWVyXG4iLCBsb2NrLT5uYW1lKTsKPiAr CQkJaWYgKGhhc19sb2NrID09IDApCj4gKwkJCQlxdWV1ZV93b3JrKHN1c3BlbmRfd29ya19xdWV1 ZSwgJnN1c3BlbmRfd29yayk7Cj4gKwkJfQo+ICsJCWlmIChsb2NrID09ICZtYWluX3dha2VfbG9j aykgewo+ICsJCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCj4gKwkJCQlwcmludF9h Y3RpdmVfbG9ja3MoV0FLRV9MT0NLX1NVU1BFTkQpOwo+ICsjaWZkZWYgQ09ORklHX1dBS0VMT0NL X1NUQVQKPiArCQkJdXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9ja2VkKDApOwo+ICsjZW5kaWYK PiArCQl9Cj4gKwl9Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZs YWdzKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKHdha2VfdW5sb2NrKTsKPiArCj4gK2ludCB3YWtl X2xvY2tfYWN0aXZlKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spCj4gK3sKPiArCXJldHVybiAhIShs b2NrLT5mbGFncyAmIFdBS0VfTE9DS19BQ1RJVkUpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wod2Fr ZV9sb2NrX2FjdGl2ZSk7Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCB3YWtlbG9ja3NfaW5pdCh2 b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoYWN0aXZlX3dha2VfbG9ja3MpOyBpKyspCj4gKwkJSU5JVF9MSVNUX0hFQUQo JmFjdGl2ZV93YWtlX2xvY2tzW2ldKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RB VAo+ICsJd2FrZV9sb2NrX2luaXQoJmRlbGV0ZWRfd2FrZV9sb2NrcywgV0FLRV9MT0NLX1NVU1BF TkQsCj4gKwkJCSJkZWxldGVkX3dha2VfbG9ja3MiKTsKPiArI2VuZGlmCj4gKwl3YWtlX2xvY2tf aW5pdCgmbWFpbl93YWtlX2xvY2ssIFdBS0VfTE9DS19TVVNQRU5ELCAibWFpbiIpOwo+ICsJd2Fr ZV9sb2NrKCZtYWluX3dha2VfbG9jayk7Cj4gKwl3YWtlX2xvY2tfaW5pdCgmdW5rbm93bl93YWtl dXAsIFdBS0VfTE9DS19TVVNQRU5ELCAidW5rbm93bl93YWtldXBzIik7Cj4gKwo+ICsJcmV0ID0g cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwb3dlcl9kZXZpY2UpOwo+ICsJaWYgKHJldCkgewo+ ICsJCXByX2Vycigid2FrZWxvY2tzX2luaXQ6IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlciBmYWls ZWRcbiIpOwo+ICsJCWdvdG8gZXJyX3BsYXRmb3JtX2RldmljZV9yZWdpc3RlcjsKPiArCX0KPiAr CXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcG93ZXJfZHJpdmVyKTsKPiArCWlmIChy ZXQpIHsKPiArCQlwcl9lcnIoIndha2Vsb2Nrc19pbml0OiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0 ZXIgZmFpbGVkXG4iKTsKPiArCQlnb3RvIGVycl9wbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXI7Cj4g Kwl9CgpJcyB0aGlzIHJlYWxseSBhIHBsYXRmb3JtIHRoaW5nPwoKV2hhdCBleGFjdGx5IGlzIHRo ZSBiZW5lZml0IG9mIGhhdmluZyB0aGUgJ3Bvd2VyX2RldmljZScgYW5kICdwb3dlcl9kcml2ZXIn CnJlZ2lzdGVyZWQ/LgoKPiArCj4gKwlzdXNwZW5kX3dvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xl dGhyZWFkX3dvcmtxdWV1ZSgic3VzcGVuZCIpOwo+ICsJaWYgKHN1c3BlbmRfd29ya19xdWV1ZSA9 PSBOVUxMKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9zdXNwZW5kX3dvcmtf cXVldWU7Cj4gKwl9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKPiArCWNyZWF0 ZV9wcm9jX3JlYWRfZW50cnkoIndha2Vsb2NrcyIsIFNfSVJVR08sIE5VTEwsCj4gKwkJCQl3YWtl bG9ja3NfcmVhZF9wcm9jLCBOVUxMKTsKPiArI2VuZGlmCj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtlcnJfc3VzcGVuZF93b3JrX3F1ZXVlOgo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo JnBvd2VyX2RyaXZlcik7Cj4gK2Vycl9wbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXI6Cj4gKwlwbGF0 Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmcG93ZXJfZGV2aWNlKTsKPiArZXJyX3BsYXRmb3JtX2Rl dmljZV9yZWdpc3RlcjoKPiArCXdha2VfbG9ja19kZXN0cm95KCZ1bmtub3duX3dha2V1cCk7Cj4g Kwl3YWtlX2xvY2tfZGVzdHJveSgmbWFpbl93YWtlX2xvY2spOwo+ICsjaWZkZWYgQ09ORklHX1dB S0VMT0NLX1NUQVQKPiArCXdha2VfbG9ja19kZXN0cm95KCZkZWxldGVkX3dha2VfbG9ja3MpOwo+ ICsjZW5kaWYKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICBfX2V4aXQg d2FrZWxvY2tzX2V4aXQodm9pZCkKPiArewo+ICsjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQK PiArCXJlbW92ZV9wcm9jX2VudHJ5KCJ3YWtlbG9ja3MiLCBOVUxMKTsKPiArI2VuZGlmCj4gKwlk ZXN0cm95X3dvcmtxdWV1ZShzdXNwZW5kX3dvcmtfcXVldWUpOwo+ICsJcGxhdGZvcm1fZHJpdmVy X3VucmVnaXN0ZXIoJnBvd2VyX2RyaXZlcik7Cj4gKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rl cigmcG93ZXJfZGV2aWNlKTsKPiArCXdha2VfbG9ja19kZXN0cm95KCZ1bmtub3duX3dha2V1cCk7 Cj4gKwl3YWtlX2xvY2tfZGVzdHJveSgmbWFpbl93YWtlX2xvY2spOwo+ICsjaWZkZWYgQ09ORklH X1dBS0VMT0NLX1NUQVQKPiArCXdha2VfbG9ja19kZXN0cm95KCZkZWxldGVkX3dha2VfbG9ja3Mp Owo+ICsjZW5kaWYKPiArfQo+ICsKPiArY29yZV9pbml0Y2FsbCh3YWtlbG9ja3NfaW5pdCk7Cj4g K21vZHVsZV9leGl0KHdha2Vsb2Nrc19leGl0KTsKCkluIGdlbmVyYWwsIEkgZm91bmQgdGhpcyBt ZWNoYW5pc20gb3Zlcmx5IGNvbXBsaWNhdGVkLgoKQXMgSSBzYWlkIHByZXZpb3VzbHksIEkgZG9u J3QgcmVhbGx5IHNlZSBhIGJlbmVmaXQgb2YgdXNpbmcgbXVsdGlwbGUgd2FrZWxvY2tzCm92ZXIg dXNpbmcgYSBzaW5nbGUgcmVmZXJlbmNlIGNvdW50ZXIgd2l0aCBjZXJ0YWluIHRpbWVyIG1lY2hh bmlzbSB0cmlnZ2VyaW5nCnN1c3BlbmQgaW4gdGhlIGNvdW50ZXIgaXMgMC4KCkFsc28sIEknZCBy ZWFsbHkgcHJlZmVyIHRvIHNlZSB0aGUgcGF0Y2ggd2l0aG91dCB0aGUgQ09ORklHX1dBS0VMT0NL X1NUQVQKdGhpbmcgaW5jbHVkZWQsIGZpcnN0LiAgSXQgd291bGQgaGF2ZSBiZWVuIG11Y2ggZWFz aWVyIHRvIHJlYWQuCgpUaGFua3MsClJhZmFlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgtcG1AbGlzdHMu bGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBt