From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 8/9] PM: suspend_block: Add timeout support. Date: Tue, 5 May 2009 21:18:48 -0700 Message-ID: <1241583529-5092-9-git-send-email-arve@android.com> References: <1241583529-5092-1-git-send-email-arve@android.com> <1241583529-5092-2-git-send-email-arve@android.com> <1241583529-5092-3-git-send-email-arve@android.com> <1241583529-5092-4-git-send-email-arve@android.com> <1241583529-5092-5-git-send-email-arve@android.com> <1241583529-5092-6-git-send-email-arve@android.com> <1241583529-5092-7-git-send-email-arve@android.com> <1241583529-5092-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: <1241583529-5092-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 QWRkIHN1c3BlbmRfYmxvY2tfdGltZW91dCB0byBibG9jayBzdXNwZW5kIGZvciBhIGxpbWl0ZWQg dGltZS4KClNpZ25lZC1vZmYtYnk6IEFydmUgSGrDuG5uZXbDpWcgPGFydmVAYW5kcm9pZC5jb20+ Ci0tLQogRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJsb2NrZXJzLnR4dCB8ICAgMTAgKysK IGluY2x1ZGUvbGludXgvc3VzcGVuZF9ibG9ja2VyLmggICAgICAgICAgfCAgICA3ICstCiBrZXJu ZWwvcG93ZXIvc3VzcGVuZF9ibG9ja2VyLmMgICAgICAgICAgIHwgIDIzNSArKysrKysrKysrKysr KysrKysrKysrKysrLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMTggaW5zZXJ0aW9ucygrKSwgMzQg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJs b2NrZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQKaW5k ZXggOWQ3OGQ0ZS4uYmM5ZDU3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNw ZW5kLWJsb2NrZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tl cnMudHh0CkBAIC05Miw2ICs5MiwxNiBAQCBpZiAobGlzdF9lbXB0eSgmc3RhdGUtPnBlbmRpbmdf d29yaykpCiBlbHNlCiAJc3VzcGVuZF9ibG9jaygmc3RhdGUtPnN1c3BlbmRfYmxvY2tlcik7CiAK K0EgZHJpdmVyIGNhbiBhbHNvIGNhbGwgc3VzcGVuZF9ibG9ja190aW1lb3V0IHRvIHJlbGVhc2Ug dGhlIHN1c3BlbmRfYmxvY2tlcgorYWZ0ZXIgYSBkZWxheToKKwlzdXNwZW5kX2Jsb2NrX3RpbWVv dXQoJnN0YXRlLT5zdXNwZW5kX2Jsb2NrZXIsIEhaKTsKKworVGhpcyB3b3JrcyB3aGV0aGVyIHRo ZSBzdXNwZW5kX2Jsb2NrZXIgaXMgYWxyZWFkeSBhY3RpdmUgb3Igbm90LiBJdCBpcyB1c2VmdWwg aWYKK3RoZSBkcml2ZXIgd29rZSB1cCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRoYXQgZG8g bm90IHVzZSBzdXNwZW5kX2Jsb2NrZXJzCitidXQgc3RpbGwgbmVlZCB0byBydW4uIEF2b2lkIHRo aXMgd2hlbiBwb3NzaWJsZSwgc2luY2UgaXQgd2lsbCB3YXN0ZSBwb3dlcgoraWYgdGhlIHRpbWVv dXQgaXMgbG9uZyBvciBtYXkgZmFpbCB0byBmaW5pc2ggbmVlZGVkIHdvcmsgaWYgdGhlIHRpbWVv dXQgaXMKK3Nob3J0LiBDYWxsaW5nIHN1c3BlbmRfYmxvY2sgb3Igc3VzcGVuZF91bmJsb2NrIHdp bGwgY2FuY2VsIHRoZSB0aW1lb3V0LgorCiBVc2VyLXNwYWNlIEFQSQogPT09PT09PT09PT09PT0K IApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrZXIuaCBiL2luY2x1ZGUv bGludXgvc3VzcGVuZF9ibG9ja2VyLmgKaW5kZXggM2JiOGE2YS4uZTNhZTEzNiAxMDA3NTUKLS0t IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1 c3BlbmRfYmxvY2tlci5oCkBAIC0yMiw4ICsyMiw5IEBACiAvKioKICAqIHN0cnVjdCBzdXNwZW5k X2Jsb2NrZXIgLSB0aGUgYmFzaWMgc3VzcGVuZF9ibG9ja2VyIHN0cnVjdHVyZQogICogQGxpbms6 CUxpc3QgZW50cnkgZm9yIGFjdGl2ZSBvciBpbmFjdGl2ZSBsaXN0LgotICogQGZsYWdzOglUcmFj a3MgaW5pdGlhbGl6ZWQsIGFjdGl2ZSBhbmQgc3RhdHMgc3RhdGUuCisgKiBAZmxhZ3M6CVRyYWNr cyBpbml0aWFsaXplZCwgYWN0aXZlLCBzdGF0cyBhbmQgYXV0b2V4cGlyZSBzdGF0ZS4KICAqIEBu YW1lOglOYW1lIHVzZWQgZm9yIGRlYnVnZ2luZy4KKyAqIEBleHBpcmVzOglUaW1lLCBpbiBqaWZm aWVzLCB0byB1bmJsb2NrIHN1c3BlbmQuCiAgKiBAY291bnQ6CU51bWJlciBvZiB0aW1lcyB0aGlz IGJsb2NrZXIgaGFzIGJlZW4gZGVhY2l2YXRlZAogICogQHdha2V1cF9jb3VudDogTnVtYmVyIG9m IHRpbWVzIHRoaXMgYmxvY2tlciB3YXMgdGhlIGZpcnN0IHRvIGJsb2NrIHN1c3BlbmQKICAqCQlh ZnRlciByZXN1bWUuCkBAIC00NCw5ICs0NSwxMSBAQCBzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyIHsK IAlzdHJ1Y3QgbGlzdF9oZWFkICAgIGxpbms7CiAJaW50ICAgICAgICAgICAgICAgICBmbGFnczsK IAljb25zdCBjaGFyICAgICAgICAgKm5hbWU7CisJdW5zaWduZWQgbG9uZyAgICAgICBleHBpcmVz OwogI2lmZGVmIENPTkZJR19TVVNQRU5EX0JMT0NLRVJfU1RBVFMKIAlzdHJ1Y3QgewogCQlpbnQg ICAgICAgICAgICAgY291bnQ7CisJCWludCAgICAgICAgICAgICBleHBpcmVfY291bnQ7CiAJCWlu dCAgICAgICAgICAgICB3YWtldXBfY291bnQ7CiAJCWt0aW1lX3QgICAgICAgICB0b3RhbF90aW1l OwogCQlrdGltZV90ICAgICAgICAgcHJldmVudF9zdXNwZW5kX3RpbWU7CkBAIC02Miw2ICs2NSw3 IEBAIHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgewogdm9pZCBzdXNwZW5kX2Jsb2NrZXJfaW5pdChz dHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyLCBjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQg c3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7 CiB2b2lkIHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7Cit2 b2lkIHN1c3BlbmRfYmxvY2tfdGltZW91dChzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2Vy LCBsb25nIHRpbWVvdXQpOwogdm9pZCBzdXNwZW5kX3VuYmxvY2soc3RydWN0IHN1c3BlbmRfYmxv Y2tlciAqYmxvY2tlcik7CiBib29sIHN1c3BlbmRfYmxvY2tlcl9pc19hY3RpdmUoc3RydWN0IHN1 c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7CiBib29sIHN1c3BlbmRfaXNfYmxvY2tlZCh2b2lkKTsK QEAgLTcyLDYgKzc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfYmxvY2tlcl9pbml0 KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUp IHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koc3RydWN0IHN1 c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kX2Js b2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpIHt9CitzdGF0aWMgaW5saW5lIHZv aWQgc3VzcGVuZF9ibG9ja190aW1lb3V0KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsLCBsb25n IHQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF91bmJsb2NrKHN0cnVjdCBzdXNwZW5k X2Jsb2NrZXIgKmJsb2NrZXIpIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgc3VzcGVuZF9ibG9ja2Vy X2lzX2FjdGl2ZShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibCkKIAkJCQkJCQkJeyByZXR1cm4g MDsgfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2tlci5jIGIva2VybmVs L3Bvd2VyL3N1c3BlbmRfYmxvY2tlci5jCmluZGV4IGI1Y2UyOTUuLjI3MjUxNTggMTAwNjQ0Ci0t LSBhL2tlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrZXIuYworKysgYi9rZXJuZWwvcG93ZXIvc3Vz cGVuZF9ibG9ja2VyLmMKQEAgLTI2LDEzICsyNiwxNSBAQCBlbnVtIHsKIAlERUJVR19VU0VSX1NU QVRFID0gMVUgPDwgMiwKIAlERUJVR19TVVNQRU5EID0gMVUgPDwgMywKIAlERUJVR19TVVNQRU5E X0JMT0NLRVIgPSAxVSA8PCA0LAorCURFQlVHX0VYUElSRSA9IDFVIDw8IDUsCiB9Owogc3RhdGlj IGludCBkZWJ1Z19tYXNrID0gREVCVUdfRVhJVF9TVVNQRU5EIHwgREVCVUdfV0FLRVVQIHwgREVC VUdfVVNFUl9TVEFURTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19tYXNrLCBkZWJ1Z19tYXNr LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCk7CiAKICNkZWZpbmUgU0JfSU5JVElB TElaRUQgICAgICAgICAgICAoMVUgPDwgOCkKICNkZWZpbmUgU0JfQUNUSVZFICAgICAgICAgICAg ICAgICAoMVUgPDwgOSkKLSNkZWZpbmUgU0JfUFJFVkVOVElOR19TVVNQRU5EICAgICAoMVUgPDwg MTApCisjZGVmaW5lIFNCX0FVVE9fRVhQSVJFICAgICAgICAgICAgKDFVIDw8IDEwKQorI2RlZmlu ZSBTQl9QUkVWRU5USU5HX1NVU1BFTkQgICAgICgxVSA8PCAxMSkKIAogc3RhdGljIERFRklORV9T UElOTE9DSyhsaXN0X2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhzdGF0ZV9sb2NrKTsK QEAgLTYzLDIwICs2NSw1MyBAQCBzdGF0aWMgc3RydWN0IHN1c3BlbmRfYmxvY2tlciBkZWxldGVk X3N1c3BlbmRfYmxvY2tlcnM7CiBzdGF0aWMga3RpbWVfdCBsYXN0X3NsZWVwX3RpbWVfdXBkYXRl Owogc3RhdGljIGJvb2wgd2FpdF9mb3Jfd2FrZXVwOwogCitzdGF0aWMgYm9vbCBzdGF0c19nZXRf ZXhwaXJlZF90aW1lKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsCisJCQkJICAga3Rp bWVfdCAqZXhwaXJlX3RpbWUpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCB0aW1l c3BlYyBrdDsKKwlzdHJ1Y3QgdGltZXNwZWMgdG9tb25vOworCXN0cnVjdCB0aW1lc3BlYyBkZWx0 YTsKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlsb25nIHRpbWVvdXQ7CisKKwlpZiAoIShibG9ja2Vy LT5mbGFncyAmIFNCX0FVVE9fRVhQSVJFKSkKKwkJcmV0dXJuIGZhbHNlOworCWRvIHsKKwkJc2Vx ID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisJCXRpbWVvdXQgPSBibG9ja2VyLT5leHBp cmVzIC0gamlmZmllczsKKwkJaWYgKHRpbWVvdXQgPiAwKQorCQkJcmV0dXJuIGZhbHNlOworCQlr dCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKKwkJdG9tb25vID0gd2FsbF90b19tb25vdG9uaWM7 CisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisJamlmZmllc190 b190aW1lc3BlYygtdGltZW91dCwgJmRlbHRhKTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygm dHMsIGt0LnR2X3NlYyArIHRvbW9uby50dl9zZWMgLSBkZWx0YS50dl9zZWMsCisJCQkJa3QudHZf bnNlYyArIHRvbW9uby50dl9uc2VjIC0gZGVsdGEudHZfbnNlYyk7CisJKmV4cGlyZV90aW1lID0g dGltZXNwZWNfdG9fa3RpbWUodHMpOworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgaW50IHBy aW50X2Jsb2NrZXJfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkgICAgICBzdHJ1Y3Qgc3Vz cGVuZF9ibG9ja2VyICpibG9ja2VyKQogewogCWludCBsb2NrX2NvdW50ID0gYmxvY2tlci0+c3Rh dC5jb3VudDsKKwlpbnQgZXhwaXJlX2NvdW50ID0gYmxvY2tlci0+c3RhdC5leHBpcmVfY291bnQ7 CiAJa3RpbWVfdCBhY3RpdmVfdGltZSA9IGt0aW1lX3NldCgwLCAwKTsKIAlrdGltZV90IHRvdGFs X3RpbWUgPSBibG9ja2VyLT5zdGF0LnRvdGFsX3RpbWU7CiAJa3RpbWVfdCBtYXhfdGltZSA9IGJs b2NrZXItPnN0YXQubWF4X3RpbWU7CiAJa3RpbWVfdCBwcmV2ZW50X3N1c3BlbmRfdGltZSA9IGJs b2NrZXItPnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWU7CiAJaWYgKGJsb2NrZXItPmZsYWdzICYg U0JfQUNUSVZFKSB7CiAJCWt0aW1lX3Qgbm93LCBhZGRfdGltZTsKLQkJbm93ID0ga3RpbWVfZ2V0 KCk7CisJCWJvb2wgZXhwaXJlZCA9IHN0YXRzX2dldF9leHBpcmVkX3RpbWUoYmxvY2tlciwgJm5v dyk7CisJCWlmICghZXhwaXJlZCkKKwkJCW5vdyA9IGt0aW1lX2dldCgpOwogCQlhZGRfdGltZSA9 IGt0aW1lX3N1Yihub3csIGJsb2NrZXItPnN0YXQubGFzdF90aW1lKTsKIAkJbG9ja19jb3VudCsr OwotCQlhY3RpdmVfdGltZSA9IGFkZF90aW1lOworCQlpZiAoIWV4cGlyZWQpCisJCQlhY3RpdmVf dGltZSA9IGFkZF90aW1lOworCQllbHNlCisJCQlleHBpcmVfY291bnQrKzsKIAkJdG90YWxfdGlt ZSA9IGt0aW1lX2FkZCh0b3RhbF90aW1lLCBhZGRfdGltZSk7CiAJCWlmIChibG9ja2VyLT5mbGFn cyAmIFNCX1BSRVZFTlRJTkdfU1VTUEVORCkKIAkJCXByZXZlbnRfc3VzcGVuZF90aW1lID0ga3Rp bWVfYWRkKHByZXZlbnRfc3VzcGVuZF90aW1lLApAQCAtODUsOSArMTIwLDEwIEBAIHN0YXRpYyBp bnQgcHJpbnRfYmxvY2tlcl9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCW1heF90aW1lID0g YWRkX3RpbWU7CiAJfQogCi0JcmV0dXJuIHNlcV9wcmludGYobSwgIlwiJXNcIlx0JWRcdCVkXHQl bGxkXHQlbGxkXHQlbGxkXHQlbGxkXHQlbGxkXG4iLAotCQkgICAgICAgYmxvY2tlci0+bmFtZSwg bG9ja19jb3VudCwgYmxvY2tlci0+c3RhdC53YWtldXBfY291bnQsCi0JCSAgICAgICBrdGltZV90 b19ucyhhY3RpdmVfdGltZSksIGt0aW1lX3RvX25zKHRvdGFsX3RpbWUpLAorCXJldHVybiBzZXFf cHJpbnRmKG0sICJcIiVzXCJcdCVkXHQlZFx0JWRcdCVsbGRcdCVsbGRcdCVsbGRcdCVsbGRcdCIK KwkJICAgICAgICIlbGxkXG4iLCBibG9ja2VyLT5uYW1lLCBsb2NrX2NvdW50LCBleHBpcmVfY291 bnQsCisJCSAgICAgICBibG9ja2VyLT5zdGF0Lndha2V1cF9jb3VudCwga3RpbWVfdG9fbnMoYWN0 aXZlX3RpbWUpLAorCQkgICAgICAga3RpbWVfdG9fbnModG90YWxfdGltZSksCiAJCSAgICAgICBr dGltZV90b19ucyhwcmV2ZW50X3N1c3BlbmRfdGltZSksIGt0aW1lX3RvX25zKG1heF90aW1lKSwK IAkJICAgICAgIGt0aW1lX3RvX25zKGJsb2NrZXItPnN0YXQubGFzdF90aW1lKSk7CiB9CkBAIC05 OCw3ICsxMzQsNyBAQCBzdGF0aWMgaW50IHN1c3BlbmRfYmxvY2tlcl9zdGF0c19zaG93KHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJ c3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcjsKIAotCXNlcV9wdXRzKG0sICJuYW1lXHRj b3VudFx0d2FrZV9jb3VudFx0YWN0aXZlX3NpbmNlIgorCXNlcV9wdXRzKG0sICJuYW1lXHRjb3Vu dFx0ZXhwaXJlX2NvdW50XHR3YWtlX2NvdW50XHRhY3RpdmVfc2luY2UiCiAJCSAiXHR0b3RhbF90 aW1lXHRzbGVlcF90aW1lXHRtYXhfdGltZVx0bGFzdF9jaGFuZ2VcbiIpOwogCXNwaW5fbG9ja19p cnFzYXZlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2Nr ZXIsICZpbmFjdGl2ZV9ibG9ja2VycywgbGluaykKQEAgLTExMiw2ICsxNDgsNyBAQCBzdGF0aWMg aW50IHN1c3BlbmRfYmxvY2tlcl9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq dW51c2VkKQogc3RhdGljIHZvaWQgc3VzcGVuZF9ibG9ja2VyX3N0YXRfaW5pdF9sb2NrZWQoc3Ry dWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikKIHsKIAlibG9ja2VyLT5zdGF0LmNvdW50ID0g MDsKKwlibG9ja2VyLT5zdGF0LmV4cGlyZV9jb3VudCA9IDA7CiAJYmxvY2tlci0+c3RhdC53YWtl dXBfY291bnQgPSAwOwogCWJsb2NrZXItPnN0YXQudG90YWxfdGltZSA9IGt0aW1lX3NldCgwLCAw KTsKIAlibG9ja2VyLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lID0ga3RpbWVfc2V0KDAsIDAp OwpAQCAtMTI0LDYgKzE2MSw3IEBAIHN0YXRpYyB2b2lkIHN1c3BlbmRfYmxvY2tlcl9zdGF0X2Rl c3Ryb3lfbG9ja2VkKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsKQogCWlmICghYmwtPnN0YXQu Y291bnQpCiAJCXJldHVybjsKIAlkZWxldGVkX3N1c3BlbmRfYmxvY2tlcnMuc3RhdC5jb3VudCAr PSBibC0+c3RhdC5jb3VudDsKKwlkZWxldGVkX3N1c3BlbmRfYmxvY2tlcnMuc3RhdC5leHBpcmVf Y291bnQgKz0gYmwtPnN0YXQuZXhwaXJlX2NvdW50OwogCWRlbGV0ZWRfc3VzcGVuZF9ibG9ja2Vy cy5zdGF0LnRvdGFsX3RpbWUgPSBrdGltZV9hZGQoCiAJCWRlbGV0ZWRfc3VzcGVuZF9ibG9ja2Vy cy5zdGF0LnRvdGFsX3RpbWUsIGJsLT5zdGF0LnRvdGFsX3RpbWUpOwogCWRlbGV0ZWRfc3VzcGVu ZF9ibG9ja2Vycy5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lID0ga3RpbWVfYWRkKApAQCAtMTMz LDE0ICsxNzEsMjAgQEAgc3RhdGljIHZvaWQgc3VzcGVuZF9ibG9ja2VyX3N0YXRfZGVzdHJveV9s b2NrZWQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmwpCiAJCWRlbGV0ZWRfc3VzcGVuZF9ibG9j a2Vycy5zdGF0Lm1heF90aW1lLCBibC0+c3RhdC5tYXhfdGltZSk7CiB9CiAKLXN0YXRpYyB2b2lk IHN1c3BlbmRfdW5ibG9ja19zdGF0X2xvY2tlZChzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9j a2VyKQorc3RhdGljIHZvaWQgc3VzcGVuZF91bmJsb2NrX3N0YXRfbG9ja2VkKHN0cnVjdCBzdXNw ZW5kX2Jsb2NrZXIgKmJsb2NrZXIsCisJCQkJCWJvb2wgZXhwaXJlZCkKIHsKIAlrdGltZV90IGR1 cmF0aW9uOwogCWt0aW1lX3Qgbm93OwogCWlmICghKGJsb2NrZXItPmZsYWdzICYgU0JfQUNUSVZF KSkKIAkJcmV0dXJuOwotCW5vdyA9IGt0aW1lX2dldCgpOworCWlmIChzdGF0c19nZXRfZXhwaXJl ZF90aW1lKGJsb2NrZXIsICZub3cpKQorCQlleHBpcmVkID0gdHJ1ZTsKKwllbHNlCisJCW5vdyA9 IGt0aW1lX2dldCgpOwogCWJsb2NrZXItPnN0YXQuY291bnQrKzsKKwlpZiAoZXhwaXJlZCkKKwkJ YmxvY2tlci0+c3RhdC5leHBpcmVfY291bnQrKzsKIAlkdXJhdGlvbiA9IGt0aW1lX3N1Yihub3cs IGJsb2NrZXItPnN0YXQubGFzdF90aW1lKTsKIAlibG9ja2VyLT5zdGF0LnRvdGFsX3RpbWUgPQog CQlrdGltZV9hZGQoYmxvY2tlci0+c3RhdC50b3RhbF90aW1lLCBkdXJhdGlvbik7CkBAIC0xNjMs NiArMjA3LDEyIEBAIHN0YXRpYyB2b2lkIHN1c3BlbmRfYmxvY2tfc3RhdF9sb2NrZWQoc3RydWN0 IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikKIAkJd2FpdF9mb3Jfd2FrZXVwID0gZmFsc2U7CiAJ CWJsb2NrZXItPnN0YXQud2FrZXVwX2NvdW50Kys7CiAJfQorCWlmICgoYmxvY2tlci0+ZmxhZ3Mg JiBTQl9BVVRPX0VYUElSRSkgJiYKKwkgICAgdGltZV9pc19iZWZvcmVfZXFfamlmZmllcyhibG9j a2VyLT5leHBpcmVzKSkgeworCQlzdXNwZW5kX3VuYmxvY2tfc3RhdF9sb2NrZWQoYmxvY2tlciwg ZmFsc2UpOworCQlibG9ja2VyLT5zdGF0Lmxhc3RfdGltZSA9IGt0aW1lX2dldCgpOworCX0KKwog CWlmICghKGJsb2NrZXItPmZsYWdzICYgU0JfQUNUSVZFKSkKIAkJYmxvY2tlci0+c3RhdC5sYXN0 X3RpbWUgPSBrdGltZV9nZXQoKTsKIH0KQEAgLTE3MCwxNyArMjIwLDIyIEBAIHN0YXRpYyB2b2lk IHN1c3BlbmRfYmxvY2tfc3RhdF9sb2NrZWQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tl cikKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZChib29sIGRvbmUp CiB7CiAJc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcjsKLQlrdGltZV90IG5vdywgZWxh cHNlZCwgYWRkOworCWt0aW1lX3Qgbm93LCBldGltZSwgZWxhcHNlZCwgYWRkOworCWJvb2wgZXhw aXJlZDsKIAogCW5vdyA9IGt0aW1lX2dldCgpOwogCWVsYXBzZWQgPSBrdGltZV9zdWIobm93LCBs YXN0X3NsZWVwX3RpbWVfdXBkYXRlKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2NrZXIsICZh Y3RpdmVfYmxvY2tlcnMsIGxpbmspIHsKKwkJZXhwaXJlZCA9IHN0YXRzX2dldF9leHBpcmVkX3Rp bWUoYmxvY2tlciwgJmV0aW1lKTsKIAkJaWYgKGJsb2NrZXItPmZsYWdzICYgU0JfUFJFVkVOVElO R19TVVNQRU5EKSB7Ci0JCQlhZGQgPSBlbGFwc2VkOworCQkJaWYgKGV4cGlyZWQpCisJCQkJYWRk ID0ga3RpbWVfc3ViKGV0aW1lLCBsYXN0X3NsZWVwX3RpbWVfdXBkYXRlKTsKKwkJCWVsc2UKKwkJ CQlhZGQgPSBlbGFwc2VkOwogCQkJYmxvY2tlci0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSA9 IGt0aW1lX2FkZCgKIAkJCQlibG9ja2VyLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lLCBhZGQp OwogCQl9Ci0JCWlmIChkb25lKQorCQlpZiAoZG9uZSB8fCBleHBpcmVkKQogCQkJYmxvY2tlci0+ ZmxhZ3MgJj0gflNCX1BSRVZFTlRJTkdfU1VTUEVORDsKIAkJZWxzZQogCQkJYmxvY2tlci0+Zmxh Z3MgfD0gU0JfUFJFVkVOVElOR19TVVNQRU5EOwpAQCAtMjAxLDggKzI1Niw4IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBzdXNwZW5kX2Jsb2NrZXJfc3RhdF9kZXN0cm95X2xvY2tlZCgKIAkJCQkJc3Ry dWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXNw ZW5kX2Jsb2NrX3N0YXRfbG9ja2VkKAogCQkJCQlzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9j a2VyKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfdW5ibG9ja19zdGF0X2xvY2tlZCgK LQkJCQkJc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KK3N0YXRpYyBpbmxpbmUg dm9pZCBzdXNwZW5kX3VuYmxvY2tfc3RhdF9sb2NrZWQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAq YmxvY2tlciwKKwkJCQkJICAgYm9vbCBleHBpcmVkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHVw ZGF0ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZChib29sIGRvbmUpIHt9CiAKIHN0YXRpYyBpbnQg c3VzcGVuZF9ibG9ja2VyX3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVz ZWQpCkBAIC0yMjIsMTIgKzI3Nyw1MCBAQCBzdGF0aWMgaW50IHN1c3BlbmRfYmxvY2tlcl9zdGF0 c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCiAjZW5kaWYKIAorc3Rh dGljIHZvaWQgZXhwaXJlX3N1c3BlbmRfYmxvY2tlcihzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpi bG9ja2VyKQoreworCXN1c3BlbmRfdW5ibG9ja19zdGF0X2xvY2tlZChibG9ja2VyLCB0cnVlKTsK KwlibG9ja2VyLT5mbGFncyAmPSB+KFNCX0FDVElWRSB8IFNCX0FVVE9fRVhQSVJFKTsKKwlsaXN0 X2RlbCgmYmxvY2tlci0+bGluayk7CisJbGlzdF9hZGQoJmJsb2NrZXItPmxpbmssICZpbmFjdGl2 ZV9ibG9ja2Vycyk7CisJaWYgKGRlYnVnX21hc2sgJiAoREVCVUdfU1VTUEVORF9CTE9DS0VSIHwg REVCVUdfRVhQSVJFKSkKKwkJcHJfaW5mbygiZXhwaXJlZCBzdXNwZW5kIGJsb2NrZXIgJXNcbiIs IGJsb2NrZXItPm5hbWUpOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9hY3RpdmVfYmxvY2tlcnNf bG9ja2VkKHZvaWQpCiB7CiAJc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcjsKIAotCWxp c3RfZm9yX2VhY2hfZW50cnkoYmxvY2tlciwgJmFjdGl2ZV9ibG9ja2VycywgbGluaykKLQkJcHJf aW5mbygiYWN0aXZlIHN1c3BlbmQgYmxvY2tlciAlc1xuIiwgYmxvY2tlci0+bmFtZSk7CisJbGlz dF9mb3JfZWFjaF9lbnRyeShibG9ja2VyLCAmYWN0aXZlX2Jsb2NrZXJzLCBsaW5rKSB7CisJCWlm IChibG9ja2VyLT5mbGFncyAmIFNCX0FVVE9fRVhQSVJFKSB7CisJCQlsb25nIHRpbWVvdXQgPSBi bG9ja2VyLT5leHBpcmVzIC0gamlmZmllczsKKwkJCWlmICh0aW1lb3V0IDw9IDApCisJCQkJcHJf aW5mbygic3VzcGVuZCBibG9ja2VyICVzLCBleHBpcmVkXG4iLAorCQkJCQlibG9ja2VyLT5uYW1l KTsKKwkJCWVsc2UKKwkJCQlwcl9pbmZvKCJhY3RpdmUgc3VzcGVuZCBibG9ja2VyICVzLCB0aW1l IGxlZnQgIgorCQkJCQkiJWxkXG4iLCBibG9ja2VyLT5uYW1lLCB0aW1lb3V0KTsKKwkJfSBlbHNl CisJCQlwcl9pbmZvKCJhY3RpdmUgc3VzcGVuZCBibG9ja2VyICVzXG4iLCBibG9ja2VyLT5uYW1l KTsKKwl9Cit9CisKK3N0YXRpYyBsb25nIG1heF9zdXNwZW5kX2Jsb2NrZXJfdGltZW91dF9sb2Nr ZWQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyLCAqbjsKKwlsb25n IG1heF90aW1lb3V0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9ja2VyLCBu LCAmYWN0aXZlX2Jsb2NrZXJzLCBsaW5rKSB7CisJCWlmIChibG9ja2VyLT5mbGFncyAmIFNCX0FV VE9fRVhQSVJFKSB7CisJCQlsb25nIHRpbWVvdXQgPSBibG9ja2VyLT5leHBpcmVzIC0gamlmZmll czsKKwkJCWlmICh0aW1lb3V0IDw9IDApCisJCQkJZXhwaXJlX3N1c3BlbmRfYmxvY2tlcihibG9j a2VyKTsKKwkJCWVsc2UgaWYgKHRpbWVvdXQgPiBtYXhfdGltZW91dCkKKwkJCQltYXhfdGltZW91 dCA9IHRpbWVvdXQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbWF4X3Rp bWVvdXQ7CiB9CiAKIC8qKgpAQCAtMjQxLDkgKzMzNCwxNCBAQCBzdGF0aWMgdm9pZCBwcmludF9h Y3RpdmVfYmxvY2tlcnNfbG9ja2VkKHZvaWQpCiAgKi8KIGJvb2wgc3VzcGVuZF9pc19ibG9ja2Vk KHZvaWQpCiB7CisJbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlpZiAoIWVu YWJsZV9zdXNwZW5kX2Jsb2NrZXJzKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gIWxpc3RfZW1wdHko JmFjdGl2ZV9ibG9ja2Vycyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3RfbG9jaywgaXJxZmxh Z3MpOworCXJldCA9ICEhbWF4X3N1c3BlbmRfYmxvY2tlcl90aW1lb3V0X2xvY2tlZCgpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOworCXJldHVybiByZXQ7 CiB9CiAKIHN0YXRpYyB2b2lkIHN1c3BlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKQEAgLTI2OCwxNCArMzY2LDQ5IEBAIHN0YXRpYyB2b2lkIHN1c3BlbmRfd29ya2VyKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKIAlpZiAoY3VycmVudF9ldmVudF9udW0gPT0gZW50cnlfZXZl bnRfbnVtKSB7CiAJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKIAkJCXByX2luZm8o InN1c3BlbmQ6IHBtX3N1c3BlbmQgcmV0dXJuZWQgd2l0aCBubyBldmVudFxuIik7Ci0JCXN1c3Bl bmRfYmxvY2soJnVua25vd25fd2FrZXVwKTsKLQkJc3VzcGVuZF91bmJsb2NrKCZ1bmtub3duX3dh a2V1cCk7CisJCXN1c3BlbmRfYmxvY2tfdGltZW91dCgmdW5rbm93bl93YWtldXAsIEhaIC8gMik7 CiAJfQogYWJvcnQ6CiAJZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnMgPSBmYWxzZTsKIH0KIHN0YXRp YyBERUNMQVJFX1dPUksoc3VzcGVuZF93b3JrLCBzdXNwZW5kX3dvcmtlcik7CiAKK3N0YXRpYyB2 b2lkIGV4cGlyZV9zdXNwZW5kX2Jsb2NrZXJzKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlsb25n IHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpZiAoZGVidWdfbWFzayAmIERF QlVHX0VYUElSRSkKKwkJcHJfaW5mbygiZXhwaXJlX3N1c3BlbmRfYmxvY2tlcnM6IHN0YXJ0XG4i KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7CisJaWYgKGRlYnVn X21hc2sgJiBERUJVR19TVVNQRU5EKQorCQlwcmludF9hY3RpdmVfYmxvY2tlcnNfbG9ja2VkKCk7 CisJdGltZW91dCA9IG1heF9zdXNwZW5kX2Jsb2NrZXJfdGltZW91dF9sb2NrZWQoKTsKKwlpZiAo ZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkKKwkJcHJfaW5mbygiZXhwaXJlX3N1c3BlbmRfYmxv Y2tlcnM6IGRvbmUsIHRpbWVvdXQgJWxkXG4iLAorCQkJdGltZW91dCk7CisJaWYgKHRpbWVvdXQg PT0gMCkKKwkJcXVldWVfd29yayhzdXNwZW5kX3dvcmtfcXVldWUsICZzdXNwZW5kX3dvcmspOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOworfQorc3RhdGlj IERFRklORV9USU1FUihleHBpcmVfdGltZXIsIGV4cGlyZV9zdXNwZW5kX2Jsb2NrZXJzLCAwLCAw KTsKKworc3RhdGljIHZvaWQgdXBkYXRlX3N1c3BlbmQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAq YmxvY2tlciwgbG9uZyBtYXhfdGltZW91dCkKK3sKKwlpZiAobWF4X3RpbWVvdXQgPiAwKSB7CisJ CWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQorCQkJcHJfaW5mbygic3VzcGVuZF9ibG9j a2VyOiAlcywgc3RhcnQgZXhwaXJlIHRpbWVyLCAiCisJCQkJIiVsZFxuIiwgYmxvY2tlci0+bmFt ZSwgbWF4X3RpbWVvdXQpOworCQltb2RfdGltZXIoJmV4cGlyZV90aW1lciwgamlmZmllcyArIG1h eF90aW1lb3V0KTsKKwl9IGVsc2UgeworCQlpZiAoZGVsX3RpbWVyKCZleHBpcmVfdGltZXIpKQor CQkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUpCisJCQkJcHJfaW5mbygic3VzcGVuZF9i bG9ja2VyOiAlcywgc3RvcCBleHBpcmUgIgorCQkJCQkidGltZXJcbiIsIGJsb2NrZXItPm5hbWUp OworCQlpZiAobWF4X3RpbWVvdXQgPT0gMCkKKwkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1 ZXVlLCAmc3VzcGVuZF93b3JrKTsKKwl9Cit9CisKIC8qKgogICogc3VzcGVuZF9ibG9ja2VyX2lu aXQoKSAtIEluaXRpYWxpemUgYSBzdXNwZW5kIGJsb2NrZXIKICAqIEBibG9ja2VyOglUaGUgc3Vz cGVuZCBibG9ja2VyIHRvIGluaXRpYWxpemUuCkBAIC0zMTksMTcgKzQ1MiwxNCBAQCB2b2lkIHN1 c3BlbmRfYmxvY2tlcl9kZXN0cm95KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCiAJ c3VzcGVuZF9ibG9ja2VyX3N0YXRfZGVzdHJveV9sb2NrZWQoYmxvY2tlcik7CiAJYmxvY2tlci0+ ZmxhZ3MgJj0gflNCX0lOSVRJQUxJWkVEOwogCWxpc3RfZGVsKCZibG9ja2VyLT5saW5rKTsKLQlp ZiAoKGJsb2NrZXItPmZsYWdzICYgU0JfQUNUSVZFKSAmJiBsaXN0X2VtcHR5KCZhY3RpdmVfYmxv Y2tlcnMpKQotCQlxdWV1ZV93b3JrKHN1c3BlbmRfd29ya19xdWV1ZSwgJnN1c3BlbmRfd29yayk7 CisJaWYgKGJsb2NrZXItPmZsYWdzICYgU0JfQUNUSVZFKQorCQl1cGRhdGVfc3VzcGVuZChibG9j a2VyLCBtYXhfc3VzcGVuZF9ibG9ja2VyX3RpbWVvdXRfbG9ja2VkKCkpOwogCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChzdXNw ZW5kX2Jsb2NrZXJfZGVzdHJveSk7CiAKLS8qKgotICogc3VzcGVuZF9ibG9jaygpIC0gQmxvY2sg c3VzcGVuZAotICogQGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gdXNlCi0gKi8KLXZv aWQgc3VzcGVuZF9ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQorc3RhdGlj IHZvaWQgX19zdXNwZW5kX2Jsb2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsIGxv bmcgdGltZW91dCwKKwkJCSAgICBib29sIGhhc190aW1lb3V0KQogewogCXVuc2lnbmVkIGxvbmcg aXJxZmxhZ3M7CiAKQEAgLTM0MCwyMCArNDcwLDU2IEBAIHZvaWQgc3VzcGVuZF9ibG9jayhzdHJ1 Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQogCXN1c3BlbmRfYmxvY2tfc3RhdF9sb2NrZWQo YmxvY2tlcik7CiAJYmxvY2tlci0+ZmxhZ3MgfD0gU0JfQUNUSVZFOwogCWxpc3RfZGVsKCZibG9j a2VyLT5saW5rKTsKLQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikKLQkJ cHJfaW5mbygic3VzcGVuZF9ibG9jazogJXNcbiIsIGJsb2NrZXItPm5hbWUpOwotCWxpc3RfYWRk KCZibG9ja2VyLT5saW5rLCAmYWN0aXZlX2Jsb2NrZXJzKTsKKwlpZiAoaGFzX3RpbWVvdXQpIHsK KwkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19TVVNQRU5EX0JMT0NLRVIpCisJCQlwcl9pbmZvKCJz dXNwZW5kX2Jsb2NrOiAlcywgdGltZW91dCAlbGQuJTAzbHVcbiIsCisJCQkJYmxvY2tlci0+bmFt ZSwgdGltZW91dCAvIEhaLAorCQkJCSh0aW1lb3V0ICUgSFopICogTVNFQ19QRVJfU0VDIC8gSFop OworCQlibG9ja2VyLT5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJCWJsb2NrZXItPmZs YWdzIHw9IFNCX0FVVE9fRVhQSVJFOworCQlsaXN0X2FkZF90YWlsKCZibG9ja2VyLT5saW5rLCAm YWN0aXZlX2Jsb2NrZXJzKTsKKwl9IGVsc2UgeworCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NV U1BFTkRfQkxPQ0tFUikKKwkJCXByX2luZm8oInN1c3BlbmRfYmxvY2s6ICVzXG4iLCBibG9ja2Vy LT5uYW1lKTsKKwkJYmxvY2tlci0+ZXhwaXJlcyA9IExPTkdfTUFYOworCQlibG9ja2VyLT5mbGFn cyAmPSB+U0JfQVVUT19FWFBJUkU7CisJCS8qIEFkZCB0byBoZWFkIHNvIHN1c3BlbmRfaXNfYmxv Y2tlZCBvbmx5IGhhcyB0byBleGFtaW5lICovCisJCS8qIG9uZSBlbnRyeSAqLworCQlsaXN0X2Fk ZCgmYmxvY2tlci0+bGluaywgJmFjdGl2ZV9ibG9ja2Vycyk7CisJfQogCiAJY3VycmVudF9ldmVu dF9udW0rKzsKIAlpZiAoYmxvY2tlciA9PSAmbWFpbl9zdXNwZW5kX2Jsb2NrZXIpCiAJCXVwZGF0 ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZCh0cnVlKTsKIAllbHNlIGlmICghc3VzcGVuZF9ibG9j a2VyX2lzX2FjdGl2ZSgmbWFpbl9zdXNwZW5kX2Jsb2NrZXIpKQogCQl1cGRhdGVfc2xlZXBfd2Fp dF9zdGF0c19sb2NrZWQoZmFsc2UpOworCXVwZGF0ZV9zdXNwZW5kKGJsb2NrZXIsIGhhc190aW1l b3V0ID8KKwkJCW1heF9zdXNwZW5kX2Jsb2NrZXJfdGltZW91dF9sb2NrZWQoKSA6IC0xKTsKIAlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKIH0KKworLyoqCisg KiBzdXNwZW5kX2Jsb2NrKCkgLSBCbG9jayBzdXNwZW5kCisgKiBAYmxvY2tlcjoJVGhlIHN1c3Bl bmQgYmxvY2tlciB0byB1c2UKKyAqLwordm9pZCBzdXNwZW5kX2Jsb2NrKHN0cnVjdCBzdXNwZW5k X2Jsb2NrZXIgKmJsb2NrZXIpCit7CisJX19zdXNwZW5kX2Jsb2NrKGJsb2NrZXIsIDAsIGZhbHNl KTsKK30KIEVYUE9SVF9TWU1CT0woc3VzcGVuZF9ibG9jayk7CiAKIC8qKgorICogc3VzcGVuZF9i bG9ja190aW1lb3V0KCkgLSBCbG9jayBzdXNwZW5kIGZvciBhIGxpbWl0ZWQgdGltZQorICogQGJs b2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gdXNlLgorICogQHRpbWVvdXQ6CVRpbWVvdXQg aW4gamlmZmllcyBiZWZvcmUgdGhlIHN1c3BlbmQgYmxvY2tlciBhdXRvLXVuYmxvY2sKKyAqLwor dm9pZCBzdXNwZW5kX2Jsb2NrX3RpbWVvdXQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tl ciwgbG9uZyB0aW1lb3V0KQoreworCV9fc3VzcGVuZF9ibG9jayhibG9ja2VyLCB0aW1lb3V0LCB0 cnVlKTsKK30KK0VYUE9SVF9TWU1CT0woc3VzcGVuZF9ibG9ja190aW1lb3V0KTsKKworLyoqCiAg KiBzdXNwZW5kX3VuYmxvY2soKSAtIFVuYmxvY2sgc3VzcGVuZAogICogQGJsb2NrZXI6CVRoZSBz dXNwZW5kIGJsb2NrZXIgdG8gdW5ibG9jay4KICAqCkBAIC0zNjgsMTYgKzUzNCwxNSBAQCB2b2lk IHN1c3BlbmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQogCiAJc3Bp bl9sb2NrX2lycXNhdmUoJmxpc3RfbG9jaywgaXJxZmxhZ3MpOwogCi0Jc3VzcGVuZF91bmJsb2Nr X3N0YXRfbG9ja2VkKGJsb2NrZXIpOworCXN1c3BlbmRfdW5ibG9ja19zdGF0X2xvY2tlZChibG9j a2VyLCBmYWxzZSk7CiAKIAlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikK IAkJcHJfaW5mbygic3VzcGVuZF91bmJsb2NrOiAlc1xuIiwgYmxvY2tlci0+bmFtZSk7CisJYmxv Y2tlci0+ZmxhZ3MgJj0gfihTQl9BQ1RJVkUgfCBTQl9BVVRPX0VYUElSRSk7CiAJbGlzdF9kZWwo JmJsb2NrZXItPmxpbmspOwogCWxpc3RfYWRkKCZibG9ja2VyLT5saW5rLCAmaW5hY3RpdmVfYmxv Y2tlcnMpOwogCi0JaWYgKChibG9ja2VyLT5mbGFncyAmIFNCX0FDVElWRSkgJiYgbGlzdF9lbXB0 eSgmYWN0aXZlX2Jsb2NrZXJzKSkKLQkJcXVldWVfd29yayhzdXNwZW5kX3dvcmtfcXVldWUsICZz dXNwZW5kX3dvcmspOwotCWJsb2NrZXItPmZsYWdzICY9IH4oU0JfQUNUSVZFKTsKKwl1cGRhdGVf c3VzcGVuZChibG9ja2VyLCBtYXhfc3VzcGVuZF9ibG9ja2VyX3RpbWVvdXRfbG9ja2VkKCkpOwog CWlmIChibG9ja2VyID09ICZtYWluX3N1c3BlbmRfYmxvY2tlcikgewogCQlpZiAoZGVidWdfbWFz ayAmIERFQlVHX1NVU1BFTkQpCiAJCQlwcmludF9hY3RpdmVfYmxvY2tlcnNfbG9ja2VkKCk7CkBA IC0zOTIsNiArNTU3LDEwIEBAIEVYUE9SVF9TWU1CT0woc3VzcGVuZF91bmJsb2NrKTsKICAqIEBi bG9ja2VyOglUaGUgc3VzcGVuZCBibG9ja2VyIHRvIGNoZWNrLgogICoKICAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgc3VzcGVuZF9ibG9ja2VyIGlzIGN1cnJlbnRseSBhY3RpdmUuCisgKgorICogSWYg dGhlIHN1c3BlbmRfYmxvY2tlciBoYXMgYSB0aW1lb3V0LCBpdCBkb2VzIG5vdCBjaGVjayB0aGUg dGltZW91dCwgYnV0IGlmCisgKiB0aGUgdGltZW91dCBoYWQgYWxyZWFkeSBleHBpcmVkIHdoZW4g aXQgd2FzIGNoZWNrZWQgZWxzZXdoZXJlIHRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgcmV0dXJuIGZh bHNlLgogICovCiBib29sIHN1c3BlbmRfYmxvY2tlcl9pc19hY3RpdmUoc3RydWN0IHN1c3BlbmRf YmxvY2tlciAqYmxvY2tlcikKIHsKLS0gCjEuNi4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgtcG1AbGlz dHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBt