From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 06/11] PM: Add user-space wake lock api. Date: Tue, 13 Jan 2009 17:27:51 -0800 Message-ID: <1231896476-22445-7-git-send-email-arve@android.com> References: <1231896476-22445-1-git-send-email-arve@android.com> <1231896476-22445-2-git-send-email-arve@android.com> <1231896476-22445-3-git-send-email-arve@android.com> <1231896476-22445-4-git-send-email-arve@android.com> <1231896476-22445-5-git-send-email-arve@android.com> <1231896476-22445-6-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: <1231896476-22445-6-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: swetland@google.com List-Id: linux-pm@vger.kernel.org VGhpcyBhZGRzIC9zeXMvcG93ZXIvd2FrZV9sb2NrIGFuZCAvc3lzL3Bvd2VyL3dha2VfdW5sb2Nr LgpXcml0aW5nIGEgc3RyaW5nIHRvIHdha2VfbG9jayBjcmVhdGVzIGEgd2FrZSBsb2NrIHRoZQpm aXJzdCB0aW1lIGlzIHNlZXMgYSBzdHJpbmcgYW5kIGxvY2tzIGl0LiBPcHRpb25hbGx5LCB0aGUK c3RyaW5nIGNhbiBiZSBmb2xsb3dlZCBieSBhIHRpbWVvdXQuClRvIHVubG9jayB0aGUgd2FrZSBs b2NrLCB3cml0ZSB0aGUgc2FtZSBzdHJpbmcgdG8gd2FrZV91bmxvY2suCgpTaWduZWQtb2ZmLWJ5 OiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgotLS0KIGtlcm5lbC9wb3dlci9L Y29uZmlnICAgICAgICB8ICAgMTAgKysKIGtlcm5lbC9wb3dlci9NYWtlZmlsZSAgICAgICB8ICAg IDEgKwoga2VybmVsL3Bvd2VyL21haW4uYyAgICAgICAgIHwgICAgOSArKwoga2VybmVsL3Bvd2Vy L3Bvd2VyLmggICAgICAgIHwgICAxMSArKwoga2VybmVsL3Bvd2VyL3VzZXJ3YWtlbG9jay5jIHwg IDIxOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVz IGNoYW5nZWQsIDI0OSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGtlcm5lbC9wb3dlci91c2Vyd2FrZWxvY2suYwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9w b3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggNTA2OTBkOC4uZGQ2OTEw ZCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tj b25maWcKQEAgLTEzOCw2ICsxMzgsMTYgQEAgY29uZmlnIFdBS0VMT0NLX1NUQVQKIAktLS1oZWxw LS0tCiAJICBSZXBvcnQgd2FrZSBsb2NrIHN0YXRzIGluIC9wcm9jL3dha2Vsb2NrcwogCitjb25m aWcgVVNFUl9XQUtFTE9DSworCWJvb2wgIlVzZXJzcGFjZSB3YWtlIGxvY2tzIgorCWRlcGVuZHMg b24gV0FLRUxPQ0sKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBVc2VyLXNwYWNlIHdha2Ug bG9jayBhcGkuIFdyaXRlICJsb2NrbmFtZSIgb3IgImxvY2tuYW1lIHRpbWVvdXQiCisJICB0byAv c3lzL3Bvd2VyL3dha2VfbG9jayBsb2NrIGFuZCBpZiBuZWVkZWQgY3JlYXRlIGEgd2FrZSBsb2Nr LgorCSAgV3JpdGUgImxvY2tuYW1lIiB0byAvc3lzL3Bvd2VyL3dha2VfdW5sb2NrIHRvIHVubG9j ayBhIHVzZXIgd2FrZQorCSAgbG9jay4KKwogY29uZmlnIEVBUkxZU1VTUEVORAogCWJvb2wgIkVh cmx5IHN1c3BlbmQiCiAJZGVwZW5kcyBvbiBXQUtFTE9DSwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bv d2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01ha2VmaWxlCmluZGV4IGYwZjdiMTUuLjRkODM4 Y2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9NYWtlZmlsZQorKysgYi9rZXJuZWwvcG93ZXIv TWFrZWZpbGUKQEAgLTYsNiArNiw3IEBAIGVuZGlmCiBvYmoteQkJCQk6PSBtYWluLm8KIG9iai0k KENPTkZJR19QTV9TTEVFUCkJCSs9IHByb2Nlc3MubyBjb25zb2xlLm8KIG9iai0kKENPTkZJR19X QUtFTE9DSykJCSs9IHdha2Vsb2NrLm8KK29iai0kKENPTkZJR19VU0VSX1dBS0VMT0NLKQkrPSB1 c2Vyd2FrZWxvY2subwogb2JqLSQoQ09ORklHX0VBUkxZU1VTUEVORCkJKz0gZWFybHlzdXNwZW5k Lm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gc3dzdXNwLm8gZGlzay5vIHNuYXBzaG90 Lm8gc3dhcC5vIHVzZXIubwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2Vy bmVsL3Bvd2VyL21haW4uYwppbmRleCBmMjEzOWNhLi41ODdmODgxIDEwMDY0NAotLS0gYS9rZXJu ZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTU3NSw2ICs1NzUs MTEgQEAgcG1fdHJhY2Vfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0 dHJpYnV0ZSAqYXR0ciwKIHBvd2VyX2F0dHIocG1fdHJhY2UpOwogI2VuZGlmIC8qIENPTkZJR19Q TV9UUkFDRSAqLwogCisjaWZkZWYgQ09ORklHX1VTRVJfV0FLRUxPQ0sKK3Bvd2VyX2F0dHIod2Fr ZV9sb2NrKTsKK3Bvd2VyX2F0dHIod2FrZV91bmxvY2spOworI2VuZGlmCisKIHN0YXRpYyBzdHJ1 Y3QgYXR0cmlidXRlICogZ1tdID0gewogCSZzdGF0ZV9hdHRyLmF0dHIsCiAjaWZkZWYgQ09ORklH X1BNX1RSQUNFCkBAIC01ODMsNiArNTg4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICog Z1tdID0gewogI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiBkZWZpbmVkKENPTkZJR19Q TV9ERUJVRykKIAkmcG1fdGVzdF9hdHRyLmF0dHIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNF Ul9XQUtFTE9DSworCSZ3YWtlX2xvY2tfYXR0ci5hdHRyLAorCSZ3YWtlX3VubG9ja19hdHRyLmF0 dHIsCisjZW5kaWYKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2Vy LmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCA3Y2U5NjM3Li5kMWIxOWZjIDEwMDY0NAot LS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAt MjMxLDYgKzIzMSwxNyBAQCBleHRlcm4gc3RydWN0IHdha2VfbG9jayBtYWluX3dha2VfbG9jazsK IGV4dGVybiBzdXNwZW5kX3N0YXRlX3QgcmVxdWVzdGVkX3N1c3BlbmRfc3RhdGU7CiAjZW5kaWYK IAorI2lmZGVmIENPTkZJR19VU0VSX1dBS0VMT0NLCitzc2l6ZV90IHdha2VfbG9ja19zaG93KHN0 cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFy ICpidWYpOworc3NpemVfdCB3YWtlX2xvY2tfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0 cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4p Oworc3NpemVfdCB3YWtlX3VubG9ja19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qg a29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpOworc3NpemVfdCAgd2FrZV91bmxv Y2tfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0 ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pOworI2VuZGlmCisKICNpZmRlZiBDT05G SUdfRUFSTFlTVVNQRU5ECiAvKiBrZXJuZWwvcG93ZXIvZWFybHlzdXNwZW5kLmMgKi8KIHZvaWQg cmVxdWVzdF9zdXNwZW5kX3N0YXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CmRpZmYgLS1naXQg YS9rZXJuZWwvcG93ZXIvdXNlcndha2Vsb2NrLmMgYi9rZXJuZWwvcG93ZXIvdXNlcndha2Vsb2Nr LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyNDJkOQotLS0gL2Rldi9u dWxsCisrKyBiL2tlcm5lbC9wb3dlci91c2Vyd2FrZWxvY2suYwpAQCAtMCwwICsxLDIxOCBAQAor Lyoga2VybmVsL3Bvd2VyL3VzZXJ3YWtlbG9jay5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1 LTIwMDggR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAq IG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVy bXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvd2Fr ZWxvY2suaD4KKworI2luY2x1ZGUgInBvd2VyLmgiCisKK2VudW0geworCURFQlVHX0ZBSUxVUkUJ PSBCSVQoMCksCisJREVCVUdfRVJST1IJPSBCSVQoMSksCisJREVCVUdfTkVXCT0gQklUKDIpLAor CURFQlVHX0FDQ0VTUwk9IEJJVCgzKSwKKwlERUJVR19MT09LVVAJPSBCSVQoNCksCit9Oworc3Rh dGljIGludCBkZWJ1Z19tYXNrID0gREVCVUdfRkFJTFVSRTsKK21vZHVsZV9wYXJhbV9uYW1lZChk ZWJ1Z19tYXNrLCBkZWJ1Z19tYXNrLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCk7 CisKK3N0YXRpYyBERUZJTkVfTVVURVgodHJlZV9sb2NrKTsKKworc3RydWN0IHVzZXJfd2FrZV9s b2NrIHsKKwlzdHJ1Y3QgcmJfbm9kZQkJbm9kZTsKKwlzdHJ1Y3Qgd2FrZV9sb2NrCXdha2VfbG9j azsKKwljaGFyCQkJbmFtZVswXTsKK307CitzdHJ1Y3QgcmJfcm9vdCB1c2VyX3dha2VfbG9ja3M7 CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcl93YWtlX2xvY2sgKmxvb2t1cF93YWtlX2xvY2tfbmFtZSgK Kwljb25zdCBjaGFyICpidWYsIGludCBhbGxvY2F0ZSwgbG9uZyAqdGltZW91dHB0cikKK3sKKwlz dHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdXNlcl93YWtlX2xvY2tzLnJiX25vZGU7CisJc3RydWN0IHJi X25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHVzZXJfd2FrZV9sb2NrICpsOworCWludCBk aWZmOworCXU2NCB0aW1lb3V0OworCWludCBuYW1lX2xlbjsKKwljb25zdCBjaGFyICphcmc7CisK KwkvKiBGaW5kIGxlbmd0aCBvZiBsb2NrIG5hbWUgYW5kIHN0YXJ0IG9mIG9wdGlvbmFsIHRpbWVv dXQgc3RyaW5nICovCisJYXJnID0gYnVmOworCXdoaWxlICgqYXJnICYmICFpc3NwYWNlKCphcmcp KQorCQlhcmcrKzsKKwluYW1lX2xlbiA9IGFyZyAtIGJ1ZjsKKwlpZiAoIW5hbWVfbGVuKQorCQln b3RvIGJhZF9hcmc7CisJd2hpbGUgKGlzc3BhY2UoKmFyZykpCisJCWFyZysrOworCisJLyogUHJv Y2VzcyB0aW1lb3V0IHN0cmluZyAqLworCWlmICh0aW1lb3V0cHRyICYmICphcmcpIHsKKwkJdGlt ZW91dCA9IHNpbXBsZV9zdHJ0b3VsbChhcmcsIChjaGFyICoqKSZhcmcsIDApOworCQl3aGlsZSAo aXNzcGFjZSgqYXJnKSkKKwkJCWFyZysrOworCQlpZiAoKmFyZykKKwkJCWdvdG8gYmFkX2FyZzsK KwkJLyogY29udmVydCB0aW1lb3V0IGZyb20gbmFub3NlY29uZHMgdG8gamlmZmllcyA+IDAgKi8K KwkJdGltZW91dCArPSAoTlNFQ19QRVJfU0VDIC8gSFopIC0gMTsKKwkJZG9fZGl2KHRpbWVvdXQs IChOU0VDX1BFUl9TRUMgLyBIWikpOworCQlpZiAodGltZW91dCA8PSAwKQorCQkJdGltZW91dCA9 IDE7CisJCSp0aW1lb3V0cHRyID0gdGltZW91dDsKKwl9IGVsc2UgaWYgKCphcmcpCisJCWdvdG8g YmFkX2FyZzsKKwllbHNlIGlmICh0aW1lb3V0cHRyKQorCQkqdGltZW91dHB0ciA9IDA7CisKKwkv KiBMb29rdXAgd2FrZSBsb2NrIGluIHJidHJlZSAqLworCXdoaWxlICgqcCkgeworCQlwYXJlbnQg PSAqcDsKKwkJbCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHVzZXJfd2FrZV9sb2NrLCBub2Rl KTsKKwkJZGlmZiA9IHN0cm5jbXAoYnVmLCBsLT5uYW1lLCBuYW1lX2xlbik7CisJCWlmICghZGlm ZiAmJiBsLT5uYW1lW25hbWVfbGVuXSkKKwkJCWRpZmYgPSAtMTsKKwkJaWYgKGRlYnVnX21hc2sg JiBERUJVR19FUlJPUikKKwkJCXByX2luZm8oImxvb2t1cF93YWtlX2xvY2tfbmFtZTogY29tcGFy ZSAlLipzICVzICVkXG4iLAorCQkJCW5hbWVfbGVuLCBidWYsIGwtPm5hbWUsIGRpZmYpOworCisJ CWlmIChkaWZmIDwgMCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoZGlmZiA+ IDApCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gbDsKKwl9CisK KwkvKiBBbGxvY2F0ZSBhbmQgYWRkIG5ldyB3YWtlbG9jayB0byByYnRyZWUgKi8KKwlpZiAoIWFs bG9jYXRlKSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVJST1IpCisJCQlwcl9pbmZvKCJs b29rdXBfd2FrZV9sb2NrX25hbWU6ICUuKnMgbm90IGZvdW5kXG4iLAorCQkJCW5hbWVfbGVuLCBi dWYpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJbCA9IGt6YWxsb2Moc2l6ZW9m KCpsKSArIG5hbWVfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKGwgPT0gTlVMTCkgeworCQlp ZiAoZGVidWdfbWFzayAmIERFQlVHX0ZBSUxVUkUpCisJCQlwcl9lcnIoImxvb2t1cF93YWtlX2xv Y2tfbmFtZTogZmFpbGVkIHRvIGFsbG9jYXRlICIKKwkJCQkibWVtb3J5IGZvciAlLipzXG4iLCBu YW1lX2xlbiwgYnVmKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCW1lbWNweShs LT5uYW1lLCBidWYsIG5hbWVfbGVuKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX05FVykKKwkJ cHJfaW5mbygibG9va3VwX3dha2VfbG9ja19uYW1lOiBuZXcgd2FrZSBsb2NrICVzXG4iLCBsLT5u YW1lKTsKKwl3YWtlX2xvY2tfaW5pdCgmbC0+d2FrZV9sb2NrLCBXQUtFX0xPQ0tfU1VTUEVORCwg bC0+bmFtZSk7CisJcmJfbGlua19ub2RlKCZsLT5ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2Vy dF9jb2xvcigmbC0+bm9kZSwgJnVzZXJfd2FrZV9sb2Nrcyk7CisJcmV0dXJuIGw7CisKK2JhZF9h cmc6CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FUlJPUikKKwkJcHJfaW5mbygibG9va3VwX3dh a2VfbG9ja19uYW1lOiB3YWtlIGxvY2ssICUuKnMsIGJhZCBhcmcsICVzXG4iLAorCQkJbmFtZV9s ZW4sIGJ1ZiwgYXJnKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3NpemVfdCB3 YWtlX2xvY2tfc2hvdygKKwlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCit7CisJY2hhciAqcyA9IGJ1ZjsKKwljaGFyICplbmQgPSBi dWYgKyBQQUdFX1NJWkU7CisJc3RydWN0IHJiX25vZGUgKm47CisJc3RydWN0IHVzZXJfd2FrZV9s b2NrICpsOworCisJbXV0ZXhfbG9jaygmdHJlZV9sb2NrKTsKKworCWZvciAobiA9IHJiX2ZpcnN0 KCZ1c2VyX3dha2VfbG9ja3MpOyBuICE9IE5VTEw7IG4gPSByYl9uZXh0KG4pKSB7CisJCWwgPSBy Yl9lbnRyeShuLCBzdHJ1Y3QgdXNlcl93YWtlX2xvY2ssIG5vZGUpOworCQlpZiAod2FrZV9sb2Nr X2FjdGl2ZSgmbC0+d2FrZV9sb2NrKSkKKwkJCXMgKz0gc2NucHJpbnRmKHMsIGVuZCAtIHMsICIl cyAiLCBsLT5uYW1lKTsKKwl9CisJcyArPSBzY25wcmludGYocywgZW5kIC0gcywgIlxuIik7CisK KwltdXRleF91bmxvY2soJnRyZWVfbG9jayk7CisJcmV0dXJuIChzIC0gYnVmKTsKK30KKworc3Np emVfdCB3YWtlX2xvY2tfc3RvcmUoCisJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2Jq X2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCWxvbmcg dGltZW91dDsKKwlzdHJ1Y3QgdXNlcl93YWtlX2xvY2sgKmw7CisKKwltdXRleF9sb2NrKCZ0cmVl X2xvY2spOworCWwgPSBsb29rdXBfd2FrZV9sb2NrX25hbWUoYnVmLCAxLCAmdGltZW91dCk7CisJ aWYgKElTX0VSUihsKSkgeworCQluID0gUFRSX0VSUihsKTsKKwkJZ290byBiYWRfbmFtZTsKKwl9 CisKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX0FDQ0VTUykKKwkJcHJfaW5mbygid2FrZV9sb2Nr X3N0b3JlOiAlcywgdGltZW91dCAlbGRcbiIsIGwtPm5hbWUsIHRpbWVvdXQpOworCisJaWYgKHRp bWVvdXQpCisJCXdha2VfbG9ja190aW1lb3V0KCZsLT53YWtlX2xvY2ssIHRpbWVvdXQpOworCWVs c2UKKwkJd2FrZV9sb2NrKCZsLT53YWtlX2xvY2spOworYmFkX25hbWU6CisJbXV0ZXhfdW5sb2Nr KCZ0cmVlX2xvY2spOworCXJldHVybiBuOworfQorCisKK3NzaXplX3Qgd2FrZV91bmxvY2tfc2hv dygKKwlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCit7CisJY2hhciAqcyA9IGJ1ZjsKKwljaGFyICplbmQgPSBidWYgKyBQQUdFX1NJ WkU7CisJc3RydWN0IHJiX25vZGUgKm47CisJc3RydWN0IHVzZXJfd2FrZV9sb2NrICpsOworCisJ bXV0ZXhfbG9jaygmdHJlZV9sb2NrKTsKKworCWZvciAobiA9IHJiX2ZpcnN0KCZ1c2VyX3dha2Vf bG9ja3MpOyBuICE9IE5VTEw7IG4gPSByYl9uZXh0KG4pKSB7CisJCWwgPSByYl9lbnRyeShuLCBz dHJ1Y3QgdXNlcl93YWtlX2xvY2ssIG5vZGUpOworCQlpZiAoIXdha2VfbG9ja19hY3RpdmUoJmwt Pndha2VfbG9jaykpCisJCQlzICs9IHNjbnByaW50ZihzLCBlbmQgLSBzLCAiJXMgIiwgbC0+bmFt ZSk7CisJfQorCXMgKz0gc2NucHJpbnRmKHMsIGVuZCAtIHMsICJcbiIpOworCisJbXV0ZXhfdW5s b2NrKCZ0cmVlX2xvY2spOworCXJldHVybiAocyAtIGJ1Zik7Cit9CisKK3NzaXplX3Qgd2FrZV91 bmxvY2tfc3RvcmUoCisJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0 ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCXN0cnVjdCB1c2VyX3dh a2VfbG9jayAqbDsKKworCW11dGV4X2xvY2soJnRyZWVfbG9jayk7CisJbCA9IGxvb2t1cF93YWtl X2xvY2tfbmFtZShidWYsIDAsIE5VTEwpOworCWlmIChJU19FUlIobCkpIHsKKwkJbiA9IFBUUl9F UlIobCk7CisJCWdvdG8gbm90X2ZvdW5kOworCX0KKworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdf QUNDRVNTKQorCQlwcl9pbmZvKCJ3YWtlX3VubG9ja19zdG9yZTogJXNcbiIsIGwtPm5hbWUpOwor CisJd2FrZV91bmxvY2soJmwtPndha2VfbG9jayk7Citub3RfZm91bmQ6CisJbXV0ZXhfdW5sb2Nr KCZ0cmVlX2xvY2spOworCXJldHVybiBuOworfQorCi0tIAoxLjYuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcG0gbWFpbGluZyBsaXN0Cmxp bnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1wbQ==