From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 03/13] PM: Implement wakelock api. Date: Wed, 4 Feb 2009 18:50:16 -0800 Message-ID: <1233802226-23386-4-git-send-email-arve@android.com> References: <1233802226-23386-1-git-send-email-arve@android.com> <1233802226-23386-2-git-send-email-arve@android.com> <1233802226-23386-3-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-3-git-send-email-arve@android.com> 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: linux-pm@lists.linux-foundation.org Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com List-Id: linux-pm@vger.kernel.org U2lnbmVkLW9mZi1ieTogQXJ2ZSBIasO4bm5ldsOlZyA8YXJ2ZUBhbmRyb2lkLmNvbT4KLS0tCiBr ZXJuZWwvcG93ZXIvS2NvbmZpZyAgICB8ICAgMTkgKysKIGtlcm5lbC9wb3dlci9NYWtlZmlsZSAg IHwgICAgMSArCiBrZXJuZWwvcG93ZXIvcG93ZXIuaCAgICB8ICAgIDcgKwoga2VybmVsL3Bvd2Vy L3dha2Vsb2NrLmMgfCAgNTk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDYyNSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGtlcm5lbC9wb3dlci93YWtlbG9jay5jCgpkaWZmIC0t Z2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCAy M2JkNGRhLi42ZTNkYTZlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9r ZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMTE2LDYgKzExNiwyNSBAQCBjb25maWcgU1VTUEVORF9G UkVFWkVSCiAKIAkgIFR1cm5pbmcgT0ZGIHRoaXMgc2V0dGluZyBpcyBOT1QgcmVjb21tZW5kZWQh IElmIGluIGRvdWJ0LCBzYXkgWS4KIAorY29uZmlnIEhBU19XQUtFTE9DSworCWJvb2wKKworY29u ZmlnIFdBS0VMT0NLCisJYm9vbCAiV2FrZSBsb2NrIgorCWRlcGVuZHMgb24gUE0gJiYgUlRDX0NM QVNTCisJZGVmYXVsdCBuCisJc2VsZWN0IEhBU19XQUtFTE9DSworCS0tLWhlbHAtLS0KKwkgIEVu YWJsZSB3YWtlbG9ja3MuIFdoZW4gdXNlciBzcGFjZSByZXF1ZXN0IGEgc2xlZXAgc3RhdGUgdGhl CisJICBzbGVlcCByZXF1ZXN0IHdpbGwgYmUgZGVsYXllZCB1bnRpbCBubyB3YWtlIGxvY2tzIGFy ZSBoZWxkLgorCitjb25maWcgV0FLRUxPQ0tfU1RBVAorCWJvb2wgIldha2UgbG9jayBzdGF0cyIK KwlkZXBlbmRzIG9uIFdBS0VMT0NLCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgUmVwb3J0 IHdha2UgbG9jayBzdGF0cyBpbiAvcHJvYy93YWtlbG9ja3MKKwogY29uZmlnIEhJQkVSTkFUSU9O CiAJYm9vbCAiSGliZXJuYXRpb24gKGFrYSAnc3VzcGVuZCB0byBkaXNrJykiCiAJZGVwZW5kcyBv biBQTSAmJiBTV0FQICYmIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUKZGlmZiAtLWdpdCBhL2tl cm5lbC9wb3dlci9NYWtlZmlsZSBiL2tlcm5lbC9wb3dlci9NYWtlZmlsZQppbmRleCBkN2ExMDE2 Li44ZDg2NzJiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKKysrIGIva2VybmVs L3Bvd2VyL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQCBlbmRpZgogb2JqLXkJCQkJOj0gbWFpbi5v CiBvYmotJChDT05GSUdfUE1fU0xFRVApCQkrPSBjb25zb2xlLm8KIG9iai0kKENPTkZJR19GUkVF WkVSKQkJKz0gcHJvY2Vzcy5vCitvYmotJChDT05GSUdfV0FLRUxPQ0spCQkrPSB3YWtlbG9jay5v CiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vIGRpc2subyBzbmFwc2hvdC5v IHN3YXAubyB1c2VyLm8KIAogb2JqLSQoQ09ORklHX01BR0lDX1NZU1JRKQkrPSBwb3dlcm9mZi5v CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5o CmluZGV4IDQ2YjVlYzcuLjE1MjcxNzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5o CisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC0yMjMsMyArMjIzLDEwIEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBzdXNwZW5kX3RoYXdfcHJvY2Vzc2VzKHZvaWQpCiB7CiB9CiAjZW5kaWYKKwor I2lmZGVmIENPTkZJR19XQUtFTE9DSworLyoga2VybmVsL3Bvd2VyL3dha2Vsb2NrLmMgKi8KK2V4 dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3VzcGVuZF93b3JrX3F1ZXVlOworZXh0ZXJu IHN0cnVjdCB3YWtlX2xvY2sgbWFpbl93YWtlX2xvY2s7CitleHRlcm4gc3VzcGVuZF9zdGF0ZV90 IHJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlOworI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93 ZXIvd2FrZWxvY2suYyBiL2tlcm5lbC9wb3dlci93YWtlbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTIyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcG93 ZXIvd2FrZWxvY2suYwpAQCAtMCwwICsxLDU5OCBAQAorLyoga2VybmVsL3Bvd2VyL3dha2Vsb2Nr LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBHb29nbGUsIEluYy4KKyAqCisgKiBU aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQs IGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGlu dXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+IC8qIHN5c19zeW5jICov CisjaW5jbHVkZSA8bGludXgvd2FrZWxvY2suaD4KKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RB VAorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNlbmRpZgorI2luY2x1ZGUgInBvd2VyLmgi CisKK2VudW0geworCURFQlVHX0VYSVRfU1VTUEVORCA9IDFVIDw8IDAsCisJREVCVUdfV0FLRVVQ ID0gMVUgPDwgMSwKKwlERUJVR19TVVNQRU5EID0gMVUgPDwgMiwKKwlERUJVR19FWFBJUkUgPSAx VSA8PCAzLAorCURFQlVHX1dBS0VfTE9DSyA9IDFVIDw8IDQsCit9Oworc3RhdGljIGludCBkZWJ1 Z19tYXNrID0gREVCVUdfRVhJVF9TVVNQRU5EIHwgREVCVUdfV0FLRVVQOworbW9kdWxlX3BhcmFt X25hbWVkKGRlYnVnX21hc2ssIGRlYnVnX21hc2ssIGludCwgU19JUlVHTyB8IFNfSVdVU1IgfCBT X0lXR1JQKTsKKworI2RlZmluZSBXQUtFX0xPQ0tfVFlQRV9NQVNLICAgICAgICAgICAgICAoMHgw ZikKKyNkZWZpbmUgV0FLRV9MT0NLX0lOSVRJQUxJWkVEICAgICAgICAgICAgKDFVIDw8IDgpCisj ZGVmaW5lIFdBS0VfTE9DS19BQ1RJVkUgICAgICAgICAgICAgICAgICgxVSA8PCA5KQorI2RlZmlu ZSBXQUtFX0xPQ0tfQVVUT19FWFBJUkUgICAgICAgICAgICAoMVUgPDwgMTApCisjZGVmaW5lIFdB S0VfTE9DS19QUkVWRU5USU5HX1NVU1BFTkQgICAgICgxVSA8PCAxMSkKKworc3RhdGljIERFRklO RV9TUElOTE9DSyhsaXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChpbmFjdGl2ZV9sb2Nrcyk7 CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfd2FrZV9sb2Nrc1tXQUtFX0xPQ0tfVFlQ RV9DT1VOVF07CitzdGF0aWMgaW50IGN1cnJlbnRfZXZlbnRfbnVtOworc3RydWN0IHdvcmtxdWV1 ZV9zdHJ1Y3QgKnN1c3BlbmRfd29ya19xdWV1ZTsKK3N0cnVjdCB3YWtlX2xvY2sgbWFpbl93YWtl X2xvY2s7CitzdXNwZW5kX3N0YXRlX3QgcmVxdWVzdGVkX3N1c3BlbmRfc3RhdGUgPSBQTV9TVVNQ RU5EX01FTTsKK3N0YXRpYyBzdHJ1Y3Qgd2FrZV9sb2NrIHVua25vd25fd2FrZXVwOworCisjaWZk ZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKK3N0YXRpYyBzdHJ1Y3Qgd2FrZV9sb2NrIGRlbGV0ZWRf d2FrZV9sb2NrczsKK3N0YXRpYyBrdGltZV90IGxhc3Rfc2xlZXBfdGltZV91cGRhdGU7CitzdGF0 aWMgaW50IHdhaXRfZm9yX3dha2V1cDsKKworaW50IGdldF9leHBpcmVkX3RpbWUoc3RydWN0IHdh a2VfbG9jayAqbG9jaywga3RpbWVfdCAqZXhwaXJlX3RpbWUpCit7CisJc3RydWN0IHRpbWVzcGVj IHRzOworCXN0cnVjdCB0aW1lc3BlYyBrdDsKKwlzdHJ1Y3QgdGltZXNwZWMgdG9tb25vOworCXN0 cnVjdCB0aW1lc3BlYyBkZWx0YTsKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlsb25nIHRpbWVvdXQ7 CisKKwlpZiAoIShsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19BVVRPX0VYUElSRSkpCisJCXJldHVy biAwOworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisJCXRpbWVv dXQgPSBsb2NrLT5leHBpcmVzIC0gamlmZmllczsKKwkJaWYgKHRpbWVvdXQgPiAwKQorCQkJcmV0 dXJuIDA7CisJCWt0ID0gY3VycmVudF9rZXJuZWxfdGltZSgpOworCQl0b21vbm8gPSB3YWxsX3Rv X21vbm90b25pYzsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsK KwlqaWZmaWVzX3RvX3RpbWVzcGVjKC10aW1lb3V0LCAmZGVsdGEpOworCXNldF9ub3JtYWxpemVk X3RpbWVzcGVjKCZ0cywga3QudHZfc2VjICsgdG9tb25vLnR2X3NlYyAtIGRlbHRhLnR2X3NlYywK KwkJCQlrdC50dl9uc2VjICsgdG9tb25vLnR2X25zZWMgLSBkZWx0YS50dl9uc2VjKTsKKwkqZXhw aXJlX3RpbWUgPSB0aW1lc3BlY190b19rdGltZSh0cyk7CisJcmV0dXJuIDE7Cit9CisKKworc3Rh dGljIGludCBwcmludF9sb2NrX3N0YXQoY2hhciAqYnVmLCBzdHJ1Y3Qgd2FrZV9sb2NrICpsb2Nr KQoreworCWludCBsb2NrX2NvdW50ID0gbG9jay0+c3RhdC5jb3VudDsKKwlpbnQgZXhwaXJlX2Nv dW50ID0gbG9jay0+c3RhdC5leHBpcmVfY291bnQ7CisJa3RpbWVfdCBhY3RpdmVfdGltZSA9IGt0 aW1lX3NldCgwLCAwKTsKKwlrdGltZV90IHRvdGFsX3RpbWUgPSBsb2NrLT5zdGF0LnRvdGFsX3Rp bWU7CisJa3RpbWVfdCBtYXhfdGltZSA9IGxvY2stPnN0YXQubWF4X3RpbWU7CisJa3RpbWVfdCBw cmV2ZW50X3N1c3BlbmRfdGltZSA9IGxvY2stPnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWU7CisJ aWYgKGxvY2stPmZsYWdzICYgV0FLRV9MT0NLX0FDVElWRSkgeworCQlrdGltZV90IG5vdywgYWRk X3RpbWU7CisJCWludCBleHBpcmVkID0gZ2V0X2V4cGlyZWRfdGltZShsb2NrLCAmbm93KTsKKwkJ aWYgKCFleHBpcmVkKQorCQkJbm93ID0ga3RpbWVfZ2V0KCk7CisJCWFkZF90aW1lID0ga3RpbWVf c3ViKG5vdywgbG9jay0+c3RhdC5sYXN0X3RpbWUpOworCQlsb2NrX2NvdW50Kys7CisJCWlmICgh ZXhwaXJlZCkKKwkJCWFjdGl2ZV90aW1lID0gYWRkX3RpbWU7CisJCWVsc2UKKwkJCWV4cGlyZV9j b3VudCsrOworCQl0b3RhbF90aW1lID0ga3RpbWVfYWRkKHRvdGFsX3RpbWUsIGFkZF90aW1lKTsK KwkJaWYgKGxvY2stPmZsYWdzICYgV0FLRV9MT0NLX1BSRVZFTlRJTkdfU1VTUEVORCkKKwkJCXBy ZXZlbnRfc3VzcGVuZF90aW1lID0ga3RpbWVfYWRkKHByZXZlbnRfc3VzcGVuZF90aW1lLAorCQkJ CQlrdGltZV9zdWIobm93LCBsYXN0X3NsZWVwX3RpbWVfdXBkYXRlKSk7CisJCWlmIChhZGRfdGlt ZS50djY0ID4gbWF4X3RpbWUudHY2NCkKKwkJCW1heF90aW1lID0gYWRkX3RpbWU7CisJfQorCisJ cmV0dXJuIHNwcmludGYoYnVmLCAiXCIlc1wiXHQlZFx0JWRcdCVkXHQlbGxkXHQlbGxkXHQlbGxk XHQlbGxkXHQiCisJCSAgICAgICAiJWxsZFxuIiwgbG9jay0+bmFtZSwgbG9ja19jb3VudCwgZXhw aXJlX2NvdW50LAorCQkgICAgICAgbG9jay0+c3RhdC53YWtldXBfY291bnQsIGt0aW1lX3RvX25z KGFjdGl2ZV90aW1lKSwKKwkJICAgICAgIGt0aW1lX3RvX25zKHRvdGFsX3RpbWUpLAorCQkgICAg ICAga3RpbWVfdG9fbnMocHJldmVudF9zdXNwZW5kX3RpbWUpLCBrdGltZV90b19ucyhtYXhfdGlt ZSksCisJCSAgICAgICBrdGltZV90b19ucyhsb2NrLT5zdGF0Lmxhc3RfdGltZSkpOworfQorCisK K3N0YXRpYyBpbnQgd2FrZWxvY2tzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQs IG9mZl90IG9mZiwKKwkJCSAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQor eworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3RydWN0IHdha2VfbG9jayAqbG9jazsKKwlp bnQgbGVuID0gMDsKKwljaGFyICpwID0gcGFnZTsKKwlpbnQgdHlwZTsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKKworCXAgKz0gc3ByaW50ZihwLCAibmFtZVx0 Y291bnRcdGV4cGlyZV9jb3VudFx0d2FrZV9jb3VudFx0YWN0aXZlX3NpbmNlIgorCQkgICAgICJc dHRvdGFsX3RpbWVcdHNsZWVwX3RpbWVcdG1heF90aW1lXHRsYXN0X2NoYW5nZVxuIik7CisJbGlz dF9mb3JfZWFjaF9lbnRyeShsb2NrLCAmaW5hY3RpdmVfbG9ja3MsIGxpbmspIHsKKwkJcCArPSBw cmludF9sb2NrX3N0YXQocCwgbG9jayk7CisJfQorCWZvciAodHlwZSA9IDA7IHR5cGUgPCBXQUtF X0xPQ0tfVFlQRV9DT1VOVDsgdHlwZSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobG9jaywg JmFjdGl2ZV93YWtlX2xvY2tzW3R5cGVdLCBsaW5rKQorCQkJcCArPSBwcmludF9sb2NrX3N0YXQo cCwgbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxh Z3MpOworCisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKworCWxlbiA9IHAgLSBwYWdlOworCWlmIChs ZW4gPiBvZmYpCisJCWxlbiAtPSBvZmY7CisJZWxzZQorCQlsZW4gPSAwOworCisJcmV0dXJuIGxl biA8IGNvdW50ID8gbGVuICA6IGNvdW50OworfQorCitzdGF0aWMgdm9pZCB3YWtlX3VubG9ja19z dGF0X2xvY2tlZChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBpbnQgZXhwaXJlZCkKK3sKKwlrdGlt ZV90IGR1cmF0aW9uOworCWt0aW1lX3Qgbm93OworCWlmICghKGxvY2stPmZsYWdzICYgV0FLRV9M T0NLX0FDVElWRSkpCisJCXJldHVybjsKKwlpZiAoZ2V0X2V4cGlyZWRfdGltZShsb2NrLCAmbm93 KSkKKwkJZXhwaXJlZCA9IDE7CisJZWxzZQorCQlub3cgPSBrdGltZV9nZXQoKTsKKwlsb2NrLT5z dGF0LmNvdW50Kys7CisJaWYgKGV4cGlyZWQpCisJCWxvY2stPnN0YXQuZXhwaXJlX2NvdW50Kys7 CisJZHVyYXRpb24gPSBrdGltZV9zdWIobm93LCBsb2NrLT5zdGF0Lmxhc3RfdGltZSk7CisJbG9j ay0+c3RhdC50b3RhbF90aW1lID0ga3RpbWVfYWRkKGxvY2stPnN0YXQudG90YWxfdGltZSwgZHVy YXRpb24pOworCWlmIChrdGltZV90b19ucyhkdXJhdGlvbikgPiBrdGltZV90b19ucyhsb2NrLT5z dGF0Lm1heF90aW1lKSkKKwkJbG9jay0+c3RhdC5tYXhfdGltZSA9IGR1cmF0aW9uOworCWxvY2st PnN0YXQubGFzdF90aW1lID0ga3RpbWVfZ2V0KCk7CisJaWYgKGxvY2stPmZsYWdzICYgV0FLRV9M T0NLX1BSRVZFTlRJTkdfU1VTUEVORCkgeworCQlkdXJhdGlvbiA9IGt0aW1lX3N1Yihub3csIGxh c3Rfc2xlZXBfdGltZV91cGRhdGUpOworCQlsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1l ID0ga3RpbWVfYWRkKAorCQkJbG9jay0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSwgZHVyYXRp b24pOworCQlsb2NrLT5mbGFncyAmPSB+V0FLRV9MT0NLX1BSRVZFTlRJTkdfU1VTUEVORDsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZChpbnQgZG9u ZSkKK3sKKwlzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrOworCWt0aW1lX3Qgbm93LCBldGltZSwgZWxh cHNlZCwgYWRkOworCWludCBleHBpcmVkOworCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJZWxhcHNl ZCA9IGt0aW1lX3N1Yihub3csIGxhc3Rfc2xlZXBfdGltZV91cGRhdGUpOworCWxpc3RfZm9yX2Vh Y2hfZW50cnkobG9jaywgJmFjdGl2ZV93YWtlX2xvY2tzW1dBS0VfTE9DS19TVVNQRU5EXSwgbGlu aykgeworCQlleHBpcmVkID0gZ2V0X2V4cGlyZWRfdGltZShsb2NrLCAmZXRpbWUpOworCQlpZiAo bG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EKSB7CisJCQlpZiAoZXhw aXJlZCkKKwkJCQlhZGQgPSBrdGltZV9zdWIoZXRpbWUsIGxhc3Rfc2xlZXBfdGltZV91cGRhdGUp OworCQkJZWxzZQorCQkJCWFkZCA9IGVsYXBzZWQ7CisJCQlsb2NrLT5zdGF0LnByZXZlbnRfc3Vz cGVuZF90aW1lID0ga3RpbWVfYWRkKAorCQkJCWxvY2stPnN0YXQucHJldmVudF9zdXNwZW5kX3Rp bWUsIGFkZCk7CisJCX0KKwkJaWYgKGRvbmUgfHwgZXhwaXJlZCkKKwkJCWxvY2stPmZsYWdzICY9 IH5XQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EOworCQllbHNlCisJCQlsb2NrLT5mbGFncyB8 PSBXQUtFX0xPQ0tfUFJFVkVOVElOR19TVVNQRU5EOworCX0KKwlsYXN0X3NsZWVwX3RpbWVfdXBk YXRlID0gbm93OworfQorI2VuZGlmCisKKworc3RhdGljIHZvaWQgZXhwaXJlX3dha2VfbG9jayhz dHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKQoreworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJ d2FrZV91bmxvY2tfc3RhdF9sb2NrZWQobG9jaywgMSk7CisjZW5kaWYKKwlsb2NrLT5mbGFncyAm PSB+KFdBS0VfTE9DS19BQ1RJVkUgfCBXQUtFX0xPQ0tfQVVUT19FWFBJUkUpOworCWxpc3RfZGVs KCZsb2NrLT5saW5rKTsKKwlsaXN0X2FkZCgmbG9jay0+bGluaywgJmluYWN0aXZlX2xvY2tzKTsK KwlpZiAoZGVidWdfbWFzayAmIChERUJVR19XQUtFX0xPQ0sgfCBERUJVR19FWFBJUkUpKQorCQlw cl9pbmZvKCJleHBpcmVkIHdha2UgbG9jayAlc1xuIiwgbG9jay0+bmFtZSk7Cit9CisKK3N0YXRp YyB2b2lkIHByaW50X2FjdGl2ZV9sb2NrcyhpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGly cWZsYWdzOworCXN0cnVjdCB3YWtlX2xvY2sgKmxvY2s7CisKKwlCVUdfT04odHlwZSA+PSBXQUtF X0xPQ0tfVFlQRV9DT1VOVCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3RfbG9jaywgaXJxZmxh Z3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9jaywgJmFjdGl2ZV93YWtlX2xvY2tzW3R5cGVd LCBsaW5rKSB7CisJCWlmIChsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19BVVRPX0VYUElSRSkgewor CQkJbG9uZyB0aW1lb3V0ID0gbG9jay0+ZXhwaXJlcyAtIGppZmZpZXM7CisJCQlpZiAodGltZW91 dCA8PSAwKQorCQkJCXByX2luZm8oIndha2UgbG9jayAlcywgZXhwaXJlZFxuIiwgbG9jay0+bmFt ZSk7CisJCQllbHNlCisJCQkJcHJfaW5mbygiYWN0aXZlIHdha2UgbG9jayAlcywgdGltZSBsZWZ0 ICVsZFxuIiwKKwkJCQkJbG9jay0+bmFtZSwgdGltZW91dCk7CisJCX0gZWxzZQorCQkJcHJfaW5m bygiYWN0aXZlIHdha2UgbG9jayAlc1xuIiwgbG9jay0+bmFtZSk7CisJfQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgbG9uZyBoYXNf d2FrZV9sb2NrX2xvY2tlZChpbnQgdHlwZSkKK3sKKwlzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCAq bjsKKwlsb25nIG1heF90aW1lb3V0ID0gMDsKKworCUJVR19PTih0eXBlID49IFdBS0VfTE9DS19U WVBFX0NPVU5UKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobG9jaywgbiwgJmFjdGl2ZV93 YWtlX2xvY2tzW3R5cGVdLCBsaW5rKSB7CisJCWlmIChsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19B VVRPX0VYUElSRSkgeworCQkJbG9uZyB0aW1lb3V0ID0gbG9jay0+ZXhwaXJlcyAtIGppZmZpZXM7 CisJCQlpZiAodGltZW91dCA8PSAwKQorCQkJCWV4cGlyZV93YWtlX2xvY2sobG9jayk7CisJCQll bHNlIGlmICh0aW1lb3V0ID4gbWF4X3RpbWVvdXQpCisJCQkJbWF4X3RpbWVvdXQgPSB0aW1lb3V0 OworCQl9IGVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIG1heF90aW1lb3V0OworfQor Citsb25nIGhhc193YWtlX2xvY2soaW50IHR5cGUpCit7CisJbG9uZyByZXQ7CisJdW5zaWduZWQg bG9uZyBpcnFmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7 CisJcmV0ID0gaGFzX3dha2VfbG9ja19sb2NrZWQodHlwZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgc3VzcGVuZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJldDsKKwlpbnQg ZW50cnlfZXZlbnRfbnVtOworCisJaWYgKGhhc193YWtlX2xvY2soV0FLRV9MT0NLX1NVU1BFTkQp KSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKKwkJCXByX2luZm8oInN1c3Bl bmQ6IGFib3J0IHN1c3BlbmRcbiIpOworCQlyZXR1cm47CisJfQorCisJZW50cnlfZXZlbnRfbnVt ID0gY3VycmVudF9ldmVudF9udW07CisJc3lzX3N5bmMoKTsKKwlpZiAoZGVidWdfbWFzayAmIERF QlVHX1NVU1BFTkQpCisJCXByX2luZm8oInN1c3BlbmQ6IGVudGVyIHN1c3BlbmRcbiIpOworCXJl dCA9IHBtX3N1c3BlbmQocmVxdWVzdGVkX3N1c3BlbmRfc3RhdGUpOworCWlmIChkZWJ1Z19tYXNr ICYgREVCVUdfRVhJVF9TVVNQRU5EKSB7CisJCXN0cnVjdCB0aW1lc3BlYyB0czsKKwkJc3RydWN0 IHJ0Y190aW1lIHRtOworCQlnZXRuc3RpbWVvZmRheSgmdHMpOworCQlydGNfdGltZV90b190bSh0 cy50dl9zZWMsICZ0bSk7CisJCXByX2luZm8oInN1c3BlbmQ6IGV4aXQgc3VzcGVuZCwgcmV0ID0g JWQgIgorCQkJIiglZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQuJTA5bHUgVVRDKVxuIiwgcmV0 LAorCQkJdG0udG1feWVhciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCisJCQl0 bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYywgdHMudHZfbnNlYyk7CisJfQorCWlmIChj dXJyZW50X2V2ZW50X251bSA9PSBlbnRyeV9ldmVudF9udW0pIHsKKwkJaWYgKGRlYnVnX21hc2sg JiBERUJVR19TVVNQRU5EKQorCQkJcHJfaW5mbygic3VzcGVuZDogcG1fc3VzcGVuZCByZXR1cm5l ZCB3aXRoIG5vIGV2ZW50XG4iKTsKKwkJd2FrZV9sb2NrX3RpbWVvdXQoJnVua25vd25fd2FrZXVw LCBIWiAvIDIpOworCX0KK30KK3N0YXRpYyBERUNMQVJFX1dPUksoc3VzcGVuZF93b3JrLCBzdXNw ZW5kKTsKKworc3RhdGljIHZvaWQgZXhwaXJlX3dha2VfbG9ja3ModW5zaWduZWQgbG9uZyBkYXRh KQoreworCWxvbmcgaGFzX2xvY2s7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpZiAoZGVi dWdfbWFzayAmIERFQlVHX0VYUElSRSkKKwkJcHJfaW5mbygiZXhwaXJlX3dha2VfbG9ja3M6IHN0 YXJ0XG4iKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkQpCisJCXByaW50X2FjdGl2 ZV9sb2NrcyhXQUtFX0xPQ0tfU1VTUEVORCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3RfbG9j aywgaXJxZmxhZ3MpOworCWhhc19sb2NrID0gaGFzX3dha2VfbG9ja19sb2NrZWQoV0FLRV9MT0NL X1NVU1BFTkQpOworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQorCQlwcl9pbmZvKCJl eHBpcmVfd2FrZV9sb2NrczogZG9uZSwgaGFzX2xvY2sgJWxkXG4iLCBoYXNfbG9jayk7CisJaWYg KGhhc19sb2NrID09IDApCisJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1ZXVlLCAmc3VzcGVu ZF93b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsK K30KK3N0YXRpYyBERUZJTkVfVElNRVIoZXhwaXJlX3RpbWVyLCBleHBpcmVfd2FrZV9sb2Nrcywg MCwgMCk7CisKK3N0YXRpYyBpbnQgcG93ZXJfc3VzcGVuZF9sYXRlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQgcmV0ID0gaGFzX3dha2Vf bG9jayhXQUtFX0xPQ0tfU1VTUEVORCkgPyAtRUFHQUlOIDogMDsKKyNpZmRlZiBDT05GSUdfV0FL RUxPQ0tfU1RBVAorCXdhaXRfZm9yX3dha2V1cCA9IDE7CisjZW5kaWYKKwlpZiAoZGVidWdfbWFz ayAmIERFQlVHX1NVU1BFTkQpCisJCXByX2luZm8oInBvd2VyX3N1c3BlbmRfbGF0ZSByZXR1cm4g JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgcG93ZXJfZHJpdmVyID0geworCS5kcml2ZXIubmFtZSA9ICJwb3dlciIsCisJLnN1c3Bl bmRfbGF0ZSA9IHBvd2VyX3N1c3BlbmRfbGF0ZSwKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RldmljZSBwb3dlcl9kZXZpY2UgPSB7CisJLm5hbWUgPSAicG93ZXIiLAorfTsKKwordm9pZCB3 YWtlX2xvY2tfaW5pdChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBpbnQgdHlwZSwgY29uc3QgY2hh ciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gMDsKKworCWlmIChuYW1lKQor CQlsb2NrLT5uYW1lID0gbmFtZTsKKwlCVUdfT04oIWxvY2stPm5hbWUpOworCisJaWYgKGRlYnVn X21hc2sgJiBERUJVR19XQUtFX0xPQ0spCisJCXByX2luZm8oIndha2VfbG9ja19pbml0IG5hbWU9 JXNcbiIsIGxvY2stPm5hbWUpOworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJbG9jay0+ c3RhdC5jb3VudCA9IDA7CisJbG9jay0+c3RhdC5leHBpcmVfY291bnQgPSAwOworCWxvY2stPnN0 YXQud2FrZXVwX2NvdW50ID0gMDsKKwlsb2NrLT5zdGF0LnRvdGFsX3RpbWUgPSBrdGltZV9zZXQo MCwgMCk7CisJbG9jay0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSA9IGt0aW1lX3NldCgwLCAw KTsKKwlsb2NrLT5zdGF0Lm1heF90aW1lID0ga3RpbWVfc2V0KDAsIDApOworCWxvY2stPnN0YXQu bGFzdF90aW1lID0ga3RpbWVfc2V0KDAsIDApOworI2VuZGlmCisJbG9jay0+ZmxhZ3MgPSAodHlw ZSAmIFdBS0VfTE9DS19UWVBFX01BU0spIHwgV0FLRV9MT0NLX0lOSVRJQUxJWkVEOworCisJSU5J VF9MSVNUX0hFQUQoJmxvY2stPmxpbmspOworCXNwaW5fbG9ja19pcnFzYXZlKCZsaXN0X2xvY2ss IGlycWZsYWdzKTsKKwlsaXN0X2FkZCgmbG9jay0+bGluaywgJmluYWN0aXZlX2xvY2tzKTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKK30KK0VYUE9SVF9T WU1CT0wod2FrZV9sb2NrX2luaXQpOworCit2b2lkIHdha2VfbG9ja19kZXN0cm95KHN0cnVjdCB3 YWtlX2xvY2sgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpZiAoZGVidWdf bWFzayAmIERFQlVHX1dBS0VfTE9DSykKKwkJcHJfaW5mbygid2FrZV9sb2NrX2Rlc3Ryb3kgbmFt ZT0lc1xuIiwgbG9jay0+bmFtZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3RfbG9jaywgaXJx ZmxhZ3MpOworCWxvY2stPmZsYWdzICY9IH5XQUtFX0xPQ0tfSU5JVElBTElaRUQ7CisjaWZkZWYg Q09ORklHX1dBS0VMT0NLX1NUQVQKKwlpZiAobG9jay0+c3RhdC5jb3VudCkgeworCQlkZWxldGVk X3dha2VfbG9ja3Muc3RhdC5jb3VudCArPSBsb2NrLT5zdGF0LmNvdW50OworCQlkZWxldGVkX3dh a2VfbG9ja3Muc3RhdC5leHBpcmVfY291bnQgKz0gbG9jay0+c3RhdC5leHBpcmVfY291bnQ7CisJ CWRlbGV0ZWRfd2FrZV9sb2Nrcy5zdGF0LnRvdGFsX3RpbWUgPQorCQkJa3RpbWVfYWRkKGRlbGV0 ZWRfd2FrZV9sb2Nrcy5zdGF0LnRvdGFsX3RpbWUsCisJCQkJICBsb2NrLT5zdGF0LnRvdGFsX3Rp bWUpOworCQlkZWxldGVkX3dha2VfbG9ja3Muc3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSA9CisJ CQlrdGltZV9hZGQoZGVsZXRlZF93YWtlX2xvY2tzLnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWUs CisJCQkJICBsb2NrLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lKTsKKwkJZGVsZXRlZF93YWtl X2xvY2tzLnN0YXQubWF4X3RpbWUgPQorCQkJa3RpbWVfYWRkKGRlbGV0ZWRfd2FrZV9sb2Nrcy5z dGF0Lm1heF90aW1lLAorCQkJCSAgbG9jay0+c3RhdC5tYXhfdGltZSk7CisJfQorI2VuZGlmCisJ bGlzdF9kZWwoJmxvY2stPmxpbmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9j aywgaXJxZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTCh3YWtlX2xvY2tfZGVzdHJveSk7CisKK3N0 YXRpYyB2b2lkIHdha2VfbG9ja19pbnRlcm5hbCgKKwlzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBs b25nIHRpbWVvdXQsIGludCBoYXNfdGltZW91dCkKK3sKKwlpbnQgdHlwZTsKKwl1bnNpZ25lZCBs b25nIGlycWZsYWdzOworCWxvbmcgZXhwaXJlX2luOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxp c3RfbG9jaywgaXJxZmxhZ3MpOworCXR5cGUgPSBsb2NrLT5mbGFncyAmIFdBS0VfTE9DS19UWVBF X01BU0s7CisJQlVHX09OKHR5cGUgPj0gV0FLRV9MT0NLX1RZUEVfQ09VTlQpOworCUJVR19PTigh KGxvY2stPmZsYWdzICYgV0FLRV9MT0NLX0lOSVRJQUxJWkVEKSk7CisjaWZkZWYgQ09ORklHX1dB S0VMT0NLX1NUQVQKKwlpZiAodHlwZSA9PSBXQUtFX0xPQ0tfU1VTUEVORCAmJiB3YWl0X2Zvcl93 YWtldXApIHsKKwkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19XQUtFVVApCisJCQlwcl9pbmZvKCJ3 YWtldXAgd2FrZSBsb2NrOiAlc1xuIiwgbG9jay0+bmFtZSk7CisJCXdhaXRfZm9yX3dha2V1cCA9 IDA7CisJCWxvY2stPnN0YXQud2FrZXVwX2NvdW50Kys7CisJfQorCWlmICgobG9jay0+ZmxhZ3Mg JiBXQUtFX0xPQ0tfQVVUT19FWFBJUkUpICYmCisJICAgIChsb25nKShsb2NrLT5leHBpcmVzIC0g amlmZmllcykgPD0gMCkgeworCQl3YWtlX3VubG9ja19zdGF0X2xvY2tlZChsb2NrLCAwKTsKKwkJ bG9jay0+c3RhdC5sYXN0X3RpbWUgPSBrdGltZV9nZXQoKTsKKwl9CisjZW5kaWYKKwlpZiAoIShs b2NrLT5mbGFncyAmIFdBS0VfTE9DS19BQ1RJVkUpKSB7CisJCWxvY2stPmZsYWdzIHw9IFdBS0Vf TE9DS19BQ1RJVkU7CisjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKKwkJbG9jay0+c3RhdC5s YXN0X3RpbWUgPSBrdGltZV9nZXQoKTsKKyNlbmRpZgorCX0KKwlsaXN0X2RlbCgmbG9jay0+bGlu ayk7CisJaWYgKGhhc190aW1lb3V0KSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfV0FLRV9M T0NLKQorCQkJcHJfaW5mbygid2FrZV9sb2NrOiAlcywgdHlwZSAlZCwgdGltZW91dCAlbGQuJTAz bHVcbiIsCisJCQkJbG9jay0+bmFtZSwgdHlwZSwgdGltZW91dCAvIEhaLAorCQkJCSh0aW1lb3V0 ICUgSFopICogTVNFQ19QRVJfU0VDIC8gSFopOworCQlsb2NrLT5leHBpcmVzID0gamlmZmllcyAr IHRpbWVvdXQ7CisJCWxvY2stPmZsYWdzIHw9IFdBS0VfTE9DS19BVVRPX0VYUElSRTsKKwkJbGlz dF9hZGRfdGFpbCgmbG9jay0+bGluaywgJmFjdGl2ZV93YWtlX2xvY2tzW3R5cGVdKTsKKwl9IGVs c2UgeworCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1dBS0VfTE9DSykKKwkJCXByX2luZm8oIndh a2VfbG9jazogJXMsIHR5cGUgJWRcbiIsIGxvY2stPm5hbWUsIHR5cGUpOworCQlsb2NrLT5leHBp cmVzID0gTE9OR19NQVg7CisJCWxvY2stPmZsYWdzICY9IH5XQUtFX0xPQ0tfQVVUT19FWFBJUkU7 CisJCWxpc3RfYWRkKCZsb2NrLT5saW5rLCAmYWN0aXZlX3dha2VfbG9ja3NbdHlwZV0pOworCX0K KwlpZiAodHlwZSA9PSBXQUtFX0xPQ0tfU1VTUEVORCkgeworCQljdXJyZW50X2V2ZW50X251bSsr OworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJCWlmIChsb2NrID09ICZtYWluX3dha2Vf bG9jaykKKwkJCXVwZGF0ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZCgxKTsKKwkJZWxzZSBpZiAo IXdha2VfbG9ja19hY3RpdmUoJm1haW5fd2FrZV9sb2NrKSkKKwkJCXVwZGF0ZV9zbGVlcF93YWl0 X3N0YXRzX2xvY2tlZCgwKTsKKyNlbmRpZgorCQlpZiAoaGFzX3RpbWVvdXQpCisJCQlleHBpcmVf aW4gPSBoYXNfd2FrZV9sb2NrX2xvY2tlZCh0eXBlKTsKKwkJZWxzZQorCQkJZXhwaXJlX2luID0g LTE7CisJCWlmIChleHBpcmVfaW4gPiAwKSB7CisJCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX0VY UElSRSkKKwkJCQlwcl9pbmZvKCJ3YWtlX2xvY2s6ICVzLCBzdGFydCBleHBpcmUgdGltZXIsICIK KwkJCQkJIiVsZFxuIiwgbG9jay0+bmFtZSwgZXhwaXJlX2luKTsKKwkJCW1vZF90aW1lcigmZXhw aXJlX3RpbWVyLCBqaWZmaWVzICsgZXhwaXJlX2luKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZWxf dGltZXIoJmV4cGlyZV90aW1lcikpCisJCQkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUp CisJCQkJCXByX2luZm8oIndha2VfbG9jazogJXMsIHN0b3AgZXhwaXJlICIKKwkJCQkJCSJ0aW1l clxuIiwgbG9jay0+bmFtZSk7CisJCQlpZiAoZXhwaXJlX2luID09IDApCisJCQkJcXVldWVfd29y ayhzdXNwZW5kX3dvcmtfcXVldWUsICZzdXNwZW5kX3dvcmspOworCQl9CisJfQorCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOworfQorCit2b2lkIHdha2VfbG9j ayhzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKQoreworCXdha2VfbG9ja19pbnRlcm5hbChsb2NrLCAw LCAwKTsKK30KK0VYUE9SVF9TWU1CT0wod2FrZV9sb2NrKTsKKwordm9pZCB3YWtlX2xvY2tfdGlt ZW91dChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBsb25nIHRpbWVvdXQpCit7CisJd2FrZV9sb2Nr X2ludGVybmFsKGxvY2ssIHRpbWVvdXQsIDEpOworfQorRVhQT1JUX1NZTUJPTCh3YWtlX2xvY2tf dGltZW91dCk7CisKK3ZvaWQgd2FrZV91bmxvY2soc3RydWN0IHdha2VfbG9jayAqbG9jaykKK3sK KwlpbnQgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZl KCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKKwl0eXBlID0gbG9jay0+ZmxhZ3MgJiBXQUtFX0xPQ0tf VFlQRV9NQVNLOworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJd2FrZV91bmxvY2tfc3Rh dF9sb2NrZWQobG9jaywgMCk7CisjZW5kaWYKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1dBS0Vf TE9DSykKKwkJcHJfaW5mbygid2FrZV91bmxvY2s6ICVzXG4iLCBsb2NrLT5uYW1lKTsKKwlsb2Nr LT5mbGFncyAmPSB+KFdBS0VfTE9DS19BQ1RJVkUgfCBXQUtFX0xPQ0tfQVVUT19FWFBJUkUpOwor CWxpc3RfZGVsKCZsb2NrLT5saW5rKTsKKwlsaXN0X2FkZCgmbG9jay0+bGluaywgJmluYWN0aXZl X2xvY2tzKTsKKwlpZiAodHlwZSA9PSBXQUtFX0xPQ0tfU1VTUEVORCkgeworCQlsb25nIGhhc19s b2NrID0gaGFzX3dha2VfbG9ja19sb2NrZWQodHlwZSk7CisJCWlmIChoYXNfbG9jayA+IDApIHsK KwkJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQorCQkJCXByX2luZm8oIndha2VfdW5s b2NrOiAlcywgc3RhcnQgZXhwaXJlIHRpbWVyLCAiCisJCQkJCSIlbGRcbiIsIGxvY2stPm5hbWUs IGhhc19sb2NrKTsKKwkJCW1vZF90aW1lcigmZXhwaXJlX3RpbWVyLCBqaWZmaWVzICsgaGFzX2xv Y2spOworCQl9IGVsc2UgeworCQkJaWYgKGRlbF90aW1lcigmZXhwaXJlX3RpbWVyKSkKKwkJCQlp ZiAoZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkKKwkJCQkJcHJfaW5mbygid2FrZV91bmxvY2s6 ICVzLCBzdG9wIGV4cGlyZSAiCisJCQkJCQkidGltZXJcbiIsIGxvY2stPm5hbWUpOworCQkJaWYg KGhhc19sb2NrID09IDApCisJCQkJcXVldWVfd29yayhzdXNwZW5kX3dvcmtfcXVldWUsICZzdXNw ZW5kX3dvcmspOworCQl9CisJCWlmIChsb2NrID09ICZtYWluX3dha2VfbG9jaykgeworCQkJaWYg KGRlYnVnX21hc2sgJiBERUJVR19TVVNQRU5EKQorCQkJCXByaW50X2FjdGl2ZV9sb2NrcyhXQUtF X0xPQ0tfU1VTUEVORCk7CisjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKKwkJCXVwZGF0ZV9z bGVlcF93YWl0X3N0YXRzX2xvY2tlZCgwKTsKKyNlbmRpZgorCQl9CisJfQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTCh3YWtl X3VubG9jayk7CisKK2ludCB3YWtlX2xvY2tfYWN0aXZlKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2sp Cit7CisJcmV0dXJuICEhKGxvY2stPmZsYWdzICYgV0FLRV9MT0NLX0FDVElWRSk7Cit9CitFWFBP UlRfU1lNQk9MKHdha2VfbG9ja19hY3RpdmUpOworCitzdGF0aWMgaW50IF9faW5pdCB3YWtlbG9j a3NfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShhY3RpdmVfd2FrZV9sb2Nrcyk7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmFj dGl2ZV93YWtlX2xvY2tzW2ldKTsKKworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJd2Fr ZV9sb2NrX2luaXQoJmRlbGV0ZWRfd2FrZV9sb2NrcywgV0FLRV9MT0NLX1NVU1BFTkQsCisJCQki ZGVsZXRlZF93YWtlX2xvY2tzIik7CisjZW5kaWYKKwl3YWtlX2xvY2tfaW5pdCgmbWFpbl93YWtl X2xvY2ssIFdBS0VfTE9DS19TVVNQRU5ELCAibWFpbiIpOworCXdha2VfbG9jaygmbWFpbl93YWtl X2xvY2spOworCXdha2VfbG9ja19pbml0KCZ1bmtub3duX3dha2V1cCwgV0FLRV9MT0NLX1NVU1BF TkQsICJ1bmtub3duX3dha2V1cHMiKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rl cigmcG93ZXJfZGV2aWNlKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigid2FrZWxvY2tzX2luaXQ6 IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9wbGF0Zm9y bV9kZXZpY2VfcmVnaXN0ZXI7CisJfQorCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigm cG93ZXJfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigid2FrZWxvY2tzX2luaXQ6IHBs YXRmb3JtX2RyaXZlcl9yZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9wbGF0Zm9ybV9k cml2ZXJfcmVnaXN0ZXI7CisJfQorCisJc3VzcGVuZF93b3JrX3F1ZXVlID0gY3JlYXRlX3Npbmds ZXRocmVhZF93b3JrcXVldWUoInN1c3BlbmQiKTsKKwlpZiAoc3VzcGVuZF93b3JrX3F1ZXVlID09 IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3VzcGVuZF93b3JrX3F1ZXVl OworCX0KKworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFUCisJY3JlYXRlX3Byb2NfcmVhZF9l bnRyeSgid2FrZWxvY2tzIiwgU19JUlVHTywgTlVMTCwKKwkJCQl3YWtlbG9ja3NfcmVhZF9wcm9j LCBOVUxMKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7CisKK2Vycl9zdXNwZW5kX3dvcmtfcXVldWU6 CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBvd2VyX2RyaXZlcik7CitlcnJfcGxhdGZv cm1fZHJpdmVyX3JlZ2lzdGVyOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwb3dlcl9k ZXZpY2UpOworZXJyX3BsYXRmb3JtX2RldmljZV9yZWdpc3RlcjoKKwl3YWtlX2xvY2tfZGVzdHJv eSgmdW5rbm93bl93YWtldXApOworCXdha2VfbG9ja19kZXN0cm95KCZtYWluX3dha2VfbG9jayk7 CisjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKKwl3YWtlX2xvY2tfZGVzdHJveSgmZGVsZXRl ZF93YWtlX2xvY2tzKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICBf X2V4aXQgd2FrZWxvY2tzX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RB VAorCXJlbW92ZV9wcm9jX2VudHJ5KCJ3YWtlbG9ja3MiLCBOVUxMKTsKKyNlbmRpZgorCWRlc3Ry b3lfd29ya3F1ZXVlKHN1c3BlbmRfd29ya19xdWV1ZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVn aXN0ZXIoJnBvd2VyX2RyaXZlcik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBvd2Vy X2RldmljZSk7CisJd2FrZV9sb2NrX2Rlc3Ryb3koJnVua25vd25fd2FrZXVwKTsKKwl3YWtlX2xv Y2tfZGVzdHJveSgmbWFpbl93YWtlX2xvY2spOworI2lmZGVmIENPTkZJR19XQUtFTE9DS19TVEFU CisJd2FrZV9sb2NrX2Rlc3Ryb3koJmRlbGV0ZWRfd2FrZV9sb2Nrcyk7CisjZW5kaWYKK30KKwor Y29yZV9pbml0Y2FsbCh3YWtlbG9ja3NfaW5pdCk7Cittb2R1bGVfZXhpdCh3YWtlbG9ja3NfZXhp dCk7Ci0tIAoxLjYuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtcG0gbWFpbGluZyBsaXN0CmxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRp b24ub3JnCmh0dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1wbQ==