From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 08/13] PM: Add user-space wake lock api. Date: Wed, 4 Feb 2009 18:50:21 -0800 Message-ID: <1233802226-23386-9-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> <1233802226-23386-4-git-send-email-arve@android.com> <1233802226-23386-5-git-send-email-arve@android.com> <1233802226-23386-6-git-send-email-arve@android.com> <1233802226-23386-7-git-send-email-arve@android.com> <1233802226-23386-8-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-8-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 VGhpcyBhZGRzIC9zeXMvcG93ZXIvd2FrZV9sb2NrIGFuZCAvc3lzL3Bvd2VyL3dha2VfdW5sb2Nr LgpXcml0aW5nIGEgc3RyaW5nIHRvIHdha2VfbG9jayBjcmVhdGVzIGEgd2FrZSBsb2NrIHRoZQpm aXJzdCB0aW1lIGlzIHNlZXMgYSBzdHJpbmcgYW5kIGxvY2tzIGl0LiBPcHRpb25hbGx5LCB0aGUK c3RyaW5nIGNhbiBiZSBmb2xsb3dlZCBieSBhIHRpbWVvdXQuClRvIHVubG9jayB0aGUgd2FrZSBs b2NrLCB3cml0ZSB0aGUgc2FtZSBzdHJpbmcgdG8gd2FrZV91bmxvY2suCgpTaWduZWQtb2ZmLWJ5 OiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgotLS0KIGtlcm5lbC9wb3dlci9L Y29uZmlnICAgICAgICB8ICAgMTAgKysKIGtlcm5lbC9wb3dlci9NYWtlZmlsZSAgICAgICB8ICAg IDEgKwoga2VybmVsL3Bvd2VyL21haW4uYyAgICAgICAgIHwgICAgOSArKwoga2VybmVsL3Bvd2Vy L3Bvd2VyLmggICAgICAgIHwgICAxMSArKwoga2VybmVsL3Bvd2VyL3VzZXJ3YWtlbG9jay5jIHwg IDIxOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVz IGNoYW5nZWQsIDI0OSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGtlcm5lbC9wb3dlci91c2Vyd2FrZWxvY2suYwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9w b3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggNjg5YWJmZS4uYWVkZWE3 ZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tj b25maWcKQEAgLTE0Nyw2ICsxNDcsMTYgQEAgY29uZmlnIERJU0FCTEVfU1lTX1BPV0VSX1NUQVRF CiAJICB3YW50IHRvIHJ1biB1c2VyLXNwYWNlIGNvZGUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHdh a2Vsb2NrcywgZG8gbm90CiAJICBlbmFibGUgdGhpcyBvcHRpb24gc2luY2UgaXQgcmVtb3ZlcyB0 aGUgaW50ZXJmYWNlLgogCitjb25maWcgVVNFUl9XQUtFTE9DSworCWJvb2wgIlVzZXJzcGFjZSB3 YWtlIGxvY2tzIgorCWRlcGVuZHMgb24gV0FLRUxPQ0sKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0t CisJICBVc2VyLXNwYWNlIHdha2UgbG9jayBhcGkuIFdyaXRlICJsb2NrbmFtZSIgb3IgImxvY2tu YW1lIHRpbWVvdXQiCisJICB0byAvc3lzL3Bvd2VyL3dha2VfbG9jayBsb2NrIGFuZCBpZiBuZWVk ZWQgY3JlYXRlIGEgd2FrZSBsb2NrLgorCSAgV3JpdGUgImxvY2tuYW1lIiB0byAvc3lzL3Bvd2Vy L3dha2VfdW5sb2NrIHRvIHVubG9jayBhIHVzZXIgd2FrZQorCSAgbG9jay4KKwogY29uZmlnIEVB UkxZU1VTUEVORAogCWJvb2wgIkVhcmx5IHN1c3BlbmQiCiAJZGVwZW5kcyBvbiBXQUtFTE9DSwpk aWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01ha2VmaWxl CmluZGV4IDJmMTdlMWQuLmQzNDY3YjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9NYWtlZmls ZQorKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBAIG9iai15CQkJCTo9 IG1haW4ubwogb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gY29uc29sZS5vCiBvYmotJChDT05G SUdfRlJFRVpFUikJCSs9IHByb2Nlc3Mubwogb2JqLSQoQ09ORklHX1dBS0VMT0NLKQkJKz0gd2Fr ZWxvY2subworb2JqLSQoQ09ORklHX1VTRVJfV0FLRUxPQ0spCSs9IHVzZXJ3YWtlbG9jay5vCiBv YmotJChDT05GSUdfRUFSTFlTVVNQRU5EKQkrPSBlYXJseXN1c3BlbmQubwogb2JqLSQoQ09ORklH X0hJQkVSTkFUSU9OKQkrPSBzd3N1c3AubyBkaXNrLm8gc25hcHNob3QubyBzd2FwLm8gdXNlci5v CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5j CmluZGV4IDY3NmE4YjAuLmE0MDY1ZjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMK KysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtNjQxLDYgKzY0MSwxMSBAQCBwbV90cmFjZV9z dG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAog cG93ZXJfYXR0cihwbV90cmFjZSk7CiAjZW5kaWYgLyogQ09ORklHX1BNX1RSQUNFICovCiAKKyNp ZmRlZiBDT05GSUdfVVNFUl9XQUtFTE9DSworcG93ZXJfYXR0cih3YWtlX2xvY2spOworcG93ZXJf YXR0cih3YWtlX3VubG9jayk7CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBn W10gPSB7CiAjaWZuZGVmIENPTkZJR19ESVNBQkxFX1NZU19QT1dFUl9TVEFURQogCSZzdGF0ZV9h dHRyLmF0dHIsCkBAIC02NTQsNiArNjU5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICog Z1tdID0gewogI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiBkZWZpbmVkKENPTkZJR19Q TV9ERUJVRykKIAkmcG1fdGVzdF9hdHRyLmF0dHIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNF Ul9XQUtFTE9DSworCSZ3YWtlX2xvY2tfYXR0ci5hdHRyLAorCSZ3YWtlX3VubG9ja19hdHRyLmF0 dHIsCisjZW5kaWYKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2Vy LmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCBhY2JiMTNhLi4xYjAxMzI3IDEwMDY0NAot LS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAt MjMyLDYgKzIzMiwxNyBAQCBleHRlcm4gc3VzcGVuZF9zdGF0ZV90IHJlcXVlc3RlZF9zdXNwZW5k X3N0YXRlOwogZXh0ZXJuIGJvb2wgaWdub3JlX3N1c3BlbmRfd2FrZWxvY2tzOwogI2VuZGlmCiAK KyNpZmRlZiBDT05GSUdfVVNFUl9XQUtFTE9DSworc3NpemVfdCB3YWtlX2xvY2tfc2hvdyhzdHJ1 Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAq YnVmKTsKK3NzaXplX3Qgd2FrZV9sb2NrX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1 Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBuKTsK K3NzaXplX3Qgd2FrZV91bmxvY2tfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtv YmpfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKTsKK3NzaXplX3QgIHdha2VfdW5sb2Nr X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIs CisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBuKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklH X0VBUkxZU1VTUEVORAogLyoga2VybmVsL3Bvd2VyL2Vhcmx5c3VzcGVuZC5jICovCiB2b2lkIHJl cXVlc3Rfc3VzcGVuZF9zdGF0ZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwpkaWZmIC0tZ2l0IGEv a2VybmVsL3Bvd2VyL3VzZXJ3YWtlbG9jay5jIGIva2VybmVsL3Bvd2VyL3VzZXJ3YWtlbG9jay5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjQyZDkKLS0tIC9kZXYvbnVs bAorKysgYi9rZXJuZWwvcG93ZXIvdXNlcndha2Vsb2NrLmMKQEAgLTAsMCArMSwyMTggQEAKKy8q IGtlcm5lbC9wb3dlci91c2Vyd2FrZWxvY2suYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0y MDA4IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAy LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBt YXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1z LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j dHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dha2Vs b2NrLmg+CisKKyNpbmNsdWRlICJwb3dlci5oIgorCitlbnVtIHsKKwlERUJVR19GQUlMVVJFCT0g QklUKDApLAorCURFQlVHX0VSUk9SCT0gQklUKDEpLAorCURFQlVHX05FVwk9IEJJVCgyKSwKKwlE RUJVR19BQ0NFU1MJPSBCSVQoMyksCisJREVCVUdfTE9PS1VQCT0gQklUKDQpLAorfTsKK3N0YXRp YyBpbnQgZGVidWdfbWFzayA9IERFQlVHX0ZBSUxVUkU7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVi dWdfbWFzaywgZGVidWdfbWFzaywgaW50LCBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlApOwor CitzdGF0aWMgREVGSU5FX01VVEVYKHRyZWVfbG9jayk7CisKK3N0cnVjdCB1c2VyX3dha2VfbG9j ayB7CisJc3RydWN0IHJiX25vZGUJCW5vZGU7CisJc3RydWN0IHdha2VfbG9jawl3YWtlX2xvY2s7 CisJY2hhcgkJCW5hbWVbMF07Cit9Oworc3RydWN0IHJiX3Jvb3QgdXNlcl93YWtlX2xvY2tzOwor CitzdGF0aWMgc3RydWN0IHVzZXJfd2FrZV9sb2NrICpsb29rdXBfd2FrZV9sb2NrX25hbWUoCisJ Y29uc3QgY2hhciAqYnVmLCBpbnQgYWxsb2NhdGUsIGxvbmcgKnRpbWVvdXRwdHIpCit7CisJc3Ry dWN0IHJiX25vZGUgKipwID0gJnVzZXJfd2FrZV9sb2Nrcy5yYl9ub2RlOworCXN0cnVjdCByYl9u b2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCB1c2VyX3dha2VfbG9jayAqbDsKKwlpbnQgZGlm ZjsKKwl1NjQgdGltZW91dDsKKwlpbnQgbmFtZV9sZW47CisJY29uc3QgY2hhciAqYXJnOworCisJ LyogRmluZCBsZW5ndGggb2YgbG9jayBuYW1lIGFuZCBzdGFydCBvZiBvcHRpb25hbCB0aW1lb3V0 IHN0cmluZyAqLworCWFyZyA9IGJ1ZjsKKwl3aGlsZSAoKmFyZyAmJiAhaXNzcGFjZSgqYXJnKSkK KwkJYXJnKys7CisJbmFtZV9sZW4gPSBhcmcgLSBidWY7CisJaWYgKCFuYW1lX2xlbikKKwkJZ290 byBiYWRfYXJnOworCXdoaWxlIChpc3NwYWNlKCphcmcpKQorCQlhcmcrKzsKKworCS8qIFByb2Nl c3MgdGltZW91dCBzdHJpbmcgKi8KKwlpZiAodGltZW91dHB0ciAmJiAqYXJnKSB7CisJCXRpbWVv dXQgPSBzaW1wbGVfc3RydG91bGwoYXJnLCAoY2hhciAqKikmYXJnLCAwKTsKKwkJd2hpbGUgKGlz c3BhY2UoKmFyZykpCisJCQlhcmcrKzsKKwkJaWYgKCphcmcpCisJCQlnb3RvIGJhZF9hcmc7CisJ CS8qIGNvbnZlcnQgdGltZW91dCBmcm9tIG5hbm9zZWNvbmRzIHRvIGppZmZpZXMgPiAwICovCisJ CXRpbWVvdXQgKz0gKE5TRUNfUEVSX1NFQyAvIEhaKSAtIDE7CisJCWRvX2Rpdih0aW1lb3V0LCAo TlNFQ19QRVJfU0VDIC8gSFopKTsKKwkJaWYgKHRpbWVvdXQgPD0gMCkKKwkJCXRpbWVvdXQgPSAx OworCQkqdGltZW91dHB0ciA9IHRpbWVvdXQ7CisJfSBlbHNlIGlmICgqYXJnKQorCQlnb3RvIGJh ZF9hcmc7CisJZWxzZSBpZiAodGltZW91dHB0cikKKwkJKnRpbWVvdXRwdHIgPSAwOworCisJLyog TG9va3VwIHdha2UgbG9jayBpbiByYnRyZWUgKi8KKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0g KnA7CisJCWwgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB1c2VyX3dha2VfbG9jaywgbm9kZSk7 CisJCWRpZmYgPSBzdHJuY21wKGJ1ZiwgbC0+bmFtZSwgbmFtZV9sZW4pOworCQlpZiAoIWRpZmYg JiYgbC0+bmFtZVtuYW1lX2xlbl0pCisJCQlkaWZmID0gLTE7CisJCWlmIChkZWJ1Z19tYXNrICYg REVCVUdfRVJST1IpCisJCQlwcl9pbmZvKCJsb29rdXBfd2FrZV9sb2NrX25hbWU6IGNvbXBhcmUg JS4qcyAlcyAlZFxuIiwKKwkJCQluYW1lX2xlbiwgYnVmLCBsLT5uYW1lLCBkaWZmKTsKKworCQlp ZiAoZGlmZiA8IDApCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGRpZmYgPiAw KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIGw7CisJfQorCisJ LyogQWxsb2NhdGUgYW5kIGFkZCBuZXcgd2FrZWxvY2sgdG8gcmJ0cmVlICovCisJaWYgKCFhbGxv Y2F0ZSkgeworCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX0VSUk9SKQorCQkJcHJfaW5mbygibG9v a3VwX3dha2VfbG9ja19uYW1lOiAlLipzIG5vdCBmb3VuZFxuIiwKKwkJCQluYW1lX2xlbiwgYnVm KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCWwgPSBremFsbG9jKHNpemVvZigq bCkgKyBuYW1lX2xlbiArIDEsIEdGUF9LRVJORUwpOworCWlmIChsID09IE5VTEwpIHsKKwkJaWYg KGRlYnVnX21hc2sgJiBERUJVR19GQUlMVVJFKQorCQkJcHJfZXJyKCJsb29rdXBfd2FrZV9sb2Nr X25hbWU6IGZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkJIm1lbW9yeSBmb3IgJS4qc1xuIiwgbmFt ZV9sZW4sIGJ1Zik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwltZW1jcHkobC0+ bmFtZSwgYnVmLCBuYW1lX2xlbik7CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19ORVcpCisJCXBy X2luZm8oImxvb2t1cF93YWtlX2xvY2tfbmFtZTogbmV3IHdha2UgbG9jayAlc1xuIiwgbC0+bmFt ZSk7CisJd2FrZV9sb2NrX2luaXQoJmwtPndha2VfbG9jaywgV0FLRV9MT0NLX1NVU1BFTkQsIGwt Pm5hbWUpOworCXJiX2xpbmtfbm9kZSgmbC0+bm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRf Y29sb3IoJmwtPm5vZGUsICZ1c2VyX3dha2VfbG9ja3MpOworCXJldHVybiBsOworCitiYWRfYXJn OgorCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVJST1IpCisJCXByX2luZm8oImxvb2t1cF93YWtl X2xvY2tfbmFtZTogd2FrZSBsb2NrLCAlLipzLCBiYWQgYXJnLCAlc1xuIiwKKwkJCW5hbWVfbGVu LCBidWYsIGFyZyk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3NzaXplX3Qgd2Fr ZV9sb2NrX3Nob3coCisJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWNoYXIgKnMgPSBidWY7CisJY2hhciAqZW5kID0gYnVm ICsgUEFHRV9TSVpFOworCXN0cnVjdCByYl9ub2RlICpuOworCXN0cnVjdCB1c2VyX3dha2VfbG9j ayAqbDsKKworCW11dGV4X2xvY2soJnRyZWVfbG9jayk7CisKKwlmb3IgKG4gPSByYl9maXJzdCgm dXNlcl93YWtlX2xvY2tzKTsgbiAhPSBOVUxMOyBuID0gcmJfbmV4dChuKSkgeworCQlsID0gcmJf ZW50cnkobiwgc3RydWN0IHVzZXJfd2FrZV9sb2NrLCBub2RlKTsKKwkJaWYgKHdha2VfbG9ja19h Y3RpdmUoJmwtPndha2VfbG9jaykpCisJCQlzICs9IHNjbnByaW50ZihzLCBlbmQgLSBzLCAiJXMg IiwgbC0+bmFtZSk7CisJfQorCXMgKz0gc2NucHJpbnRmKHMsIGVuZCAtIHMsICJcbiIpOworCisJ bXV0ZXhfdW5sb2NrKCZ0cmVlX2xvY2spOworCXJldHVybiAocyAtIGJ1Zik7Cit9CisKK3NzaXpl X3Qgd2FrZV9sb2NrX3N0b3JlKAorCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9h dHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwlsb25nIHRp bWVvdXQ7CisJc3RydWN0IHVzZXJfd2FrZV9sb2NrICpsOworCisJbXV0ZXhfbG9jaygmdHJlZV9s b2NrKTsKKwlsID0gbG9va3VwX3dha2VfbG9ja19uYW1lKGJ1ZiwgMSwgJnRpbWVvdXQpOworCWlm IChJU19FUlIobCkpIHsKKwkJbiA9IFBUUl9FUlIobCk7CisJCWdvdG8gYmFkX25hbWU7CisJfQor CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19BQ0NFU1MpCisJCXByX2luZm8oIndha2VfbG9ja19z dG9yZTogJXMsIHRpbWVvdXQgJWxkXG4iLCBsLT5uYW1lLCB0aW1lb3V0KTsKKworCWlmICh0aW1l b3V0KQorCQl3YWtlX2xvY2tfdGltZW91dCgmbC0+d2FrZV9sb2NrLCB0aW1lb3V0KTsKKwllbHNl CisJCXdha2VfbG9jaygmbC0+d2FrZV9sb2NrKTsKK2JhZF9uYW1lOgorCW11dGV4X3VubG9jaygm dHJlZV9sb2NrKTsKKwlyZXR1cm4gbjsKK30KKworCitzc2l6ZV90IHdha2VfdW5sb2NrX3Nob3co CisJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQoreworCWNoYXIgKnMgPSBidWY7CisJY2hhciAqZW5kID0gYnVmICsgUEFHRV9TSVpF OworCXN0cnVjdCByYl9ub2RlICpuOworCXN0cnVjdCB1c2VyX3dha2VfbG9jayAqbDsKKworCW11 dGV4X2xvY2soJnRyZWVfbG9jayk7CisKKwlmb3IgKG4gPSByYl9maXJzdCgmdXNlcl93YWtlX2xv Y2tzKTsgbiAhPSBOVUxMOyBuID0gcmJfbmV4dChuKSkgeworCQlsID0gcmJfZW50cnkobiwgc3Ry dWN0IHVzZXJfd2FrZV9sb2NrLCBub2RlKTsKKwkJaWYgKCF3YWtlX2xvY2tfYWN0aXZlKCZsLT53 YWtlX2xvY2spKQorCQkJcyArPSBzY25wcmludGYocywgZW5kIC0gcywgIiVzICIsIGwtPm5hbWUp OworCX0KKwlzICs9IHNjbnByaW50ZihzLCBlbmQgLSBzLCAiXG4iKTsKKworCW11dGV4X3VubG9j aygmdHJlZV9sb2NrKTsKKwlyZXR1cm4gKHMgLSBidWYpOworfQorCitzc2l6ZV90IHdha2VfdW5s b2NrX3N0b3JlKAorCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUg KmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwlzdHJ1Y3QgdXNlcl93YWtl X2xvY2sgKmw7CisKKwltdXRleF9sb2NrKCZ0cmVlX2xvY2spOworCWwgPSBsb29rdXBfd2FrZV9s b2NrX25hbWUoYnVmLCAwLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGwpKSB7CisJCW4gPSBQVFJfRVJS KGwpOworCQlnb3RvIG5vdF9mb3VuZDsKKwl9CisKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX0FD Q0VTUykKKwkJcHJfaW5mbygid2FrZV91bmxvY2tfc3RvcmU6ICVzXG4iLCBsLT5uYW1lKTsKKwor CXdha2VfdW5sb2NrKCZsLT53YWtlX2xvY2spOworbm90X2ZvdW5kOgorCW11dGV4X3VubG9jaygm dHJlZV9sb2NrKTsKKwlyZXR1cm4gbjsKK30KKwotLSAKMS42LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXBtIG1haWxpbmcgbGlzdApsaW51 eC1wbUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4LWZvdW5k YXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcG0=