From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 7/8] PM: suspend_block: Add timeout support. Date: Tue, 14 Apr 2009 18:41:31 -0700 Message-ID: <1239759692-28617-8-git-send-email-arve@android.com> References: <1239759692-28617-1-git-send-email-arve@android.com> <1239759692-28617-2-git-send-email-arve@android.com> <1239759692-28617-3-git-send-email-arve@android.com> <1239759692-28617-4-git-send-email-arve@android.com> <1239759692-28617-5-git-send-email-arve@android.com> <1239759692-28617-6-git-send-email-arve@android.com> <1239759692-28617-7-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: <1239759692-28617-7-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, r-woodruff2@ti.comrjw, @sisk.pl List-Id: linux-pm@vger.kernel.org QWRkIHN1c3BlbmRfYmxvY2tfdGltZW91dCB0byBibG9jayBzdXNwZW5kIGZvciBhIGxpbWl0ZWQg dGltZS4KClNpZ25lZC1vZmYtYnk6IEFydmUgSGrDuG5uZXbDpWcgPGFydmVAYW5kcm9pZC5jb20+ Ci0tLQogRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJsb2NrZXJzLnR4dCB8ICAgMTAgKysK IGluY2x1ZGUvbGludXgvc3VzcGVuZF9ibG9jay5oICAgICAgICAgICAgfCAgICA3ICsKIGtlcm5l bC9wb3dlci9zdXNwZW5kX2Jsb2NrLmMgICAgICAgICAgICAgfCAgMjMyICsrKysrKysrKysrKysr KysrKysrKysrKystLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgMzMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNwZW5kLWJs b2NrZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQKaW5k ZXggMzViYzcxMy4uMjc4MWUwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zdXNw ZW5kLWJsb2NrZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tl cnMudHh0CkBAIC03NCw2ICs3NCwxNiBAQCBpZiAobGlzdF9lbXB0eSgmc3RhdGUtPnBlbmRpbmdf d29yaykpCiBlbHNlCiAJc3VzcGVuZF9ibG9jaygmc3RhdGUtPnN1c3BlbmRfYmxvY2tlcik7CiAK K0EgZHJpdmVyIGNhbiBhbHNvIGNhbGwgc3VzcGVuZF9ibG9ja190aW1lb3V0IHRvIHJlbGVhc2Ug dGhlIHN1c3BlbmRfYmxvY2tlcgorYWZ0ZXIgYSBkZWxheToKKwlzdXNwZW5kX2Jsb2NrX3RpbWVv dXQoJnN0YXRlLT5zdXNwZW5kX2Jsb2NrZXIsIEhaKTsKKworVGhpcyB3b3JrcyB3aGV0aGVyIHRo ZSBzdXNwZW5kX2Jsb2NrZXIgaXMgYWxyZWFkeSBhY3RpdmUgb3Igbm90LiBJdCBpcyB1c2VmdWwg aWYKK3RoZSBkcml2ZXIgd29rZSB1cCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRoYXQgZG8g bm90IHVzZSBzdXNwZW5kX2Jsb2NrZXJzCitidXQgc3RpbGwgbmVlZCB0byBydW4uIEF2b2lkIHRo aXMgd2hlbiBwb3NzaWJsZSwgc2luY2UgaXQgd2lsbCB3YXN0ZSBwb3dlcgoraWYgdGhlIHRpbWVv dXQgaXMgbG9uZyBvciBtYXkgZmFpbCB0byBmaW5pc2ggbmVlZGVkIHdvcmsgaWYgdGhlIHRpbWVv dXQgaXMKK3Nob3J0LiBDYWxsaW5nIHN1c3BlbmRfYmxvY2sgb3Igc3VzcGVuZF91bmJsb2NrIHdp bGwgY2FuY2VsIHRoZSB0aW1lb3V0LgorCiBVc2VyLXNwYWNlIEFQSQogPT09PT09PT09PT09PT0K IApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrLmggYi9pbmNsdWRlL2xp bnV4L3N1c3BlbmRfYmxvY2suaAppbmRleCAzMTIyNWM1Li45Y2VhNzcyIDEwMDc1NQotLS0gYS9p bmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRf YmxvY2suaApAQCAtMjcsOSArMjcsMTEgQEAgc3RydWN0IHN1c3BlbmRfYmxvY2tlciB7CiAJc3Ry dWN0IGxpc3RfaGVhZCAgICBsaW5rOwogCWludCAgICAgICAgICAgICAgICAgZmxhZ3M7CiAJY29u c3QgY2hhciAgICAgICAgICpuYW1lOworCXVuc2lnbmVkIGxvbmcgICAgICAgZXhwaXJlczsKICNp ZmRlZiBDT05GSUdfU1VTUEVORF9CTE9DS19TVEFUCiAJc3RydWN0IHsKIAkJaW50ICAgICAgICAg ICAgIGNvdW50OworCQlpbnQgICAgICAgICAgICAgZXhwaXJlX2NvdW50OwogCQlpbnQgICAgICAg ICAgICAgd2FrZXVwX2NvdW50OwogCQlrdGltZV90ICAgICAgICAgdG90YWxfdGltZTsKIAkJa3Rp bWVfdCAgICAgICAgIHByZXZlbnRfc3VzcGVuZF90aW1lOwpAQCAtNDUsOSArNDcsMTMgQEAgc3Ry dWN0IHN1c3BlbmRfYmxvY2tlciB7CiB2b2lkIHN1c3BlbmRfYmxvY2tlcl9pbml0KHN0cnVjdCBz dXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsIGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBzdXNwZW5k X2Jsb2NrZXJfZGVzdHJveShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKTsKIHZvaWQg c3VzcGVuZF9ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKTsKK3ZvaWQgc3Vz cGVuZF9ibG9ja190aW1lb3V0KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsIGxvbmcg dGltZW91dCk7CiB2b2lkIHN1c3BlbmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpi bG9ja2VyKTsKIAogLyogaXNfYmxvY2tpbmdfc3VzcGVuZCByZXR1cm5zIHRydWUgaWYgdGhlIHN1 c3BlbmRfYmxvY2tlciBpcyBjdXJyZW50bHkgYWN0aXZlLgorICogSWYgdGhlIHN1c3BlbmRfYmxv Y2tlciBoYXMgYSB0aW1lb3V0LCBpdCBkb2VzIG5vdCBjaGVjayB0aGUgdGltZW91dCwgYnV0IGlm CisgKiB0aGUgdGltZW91dCBoYWQgYWxyZWFkeSBleHBpcmVkIHdoZW4gaXQgd2FzIGNoZWNrZWQg ZWxzZXdoZXJlIHRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgcmV0dXJuIGZhbHNlLgogICovCiBib29s IGlzX2Jsb2NraW5nX3N1c3BlbmQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcik7CiAK QEAgLTY1LDYgKzcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfYmxvY2tlcl9pbml0 KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUp IHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koc3RydWN0IHN1 c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kX2Js b2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpIHt9CitzdGF0aWMgaW5saW5lIHZv aWQgc3VzcGVuZF9ibG9ja190aW1lb3V0KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsLCBsb25n IHQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF91bmJsb2NrKHN0cnVjdCBzdXNwZW5k X2Jsb2NrZXIgKmJsb2NrZXIpIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfYmxvY2tpbmdfc3Vz cGVuZChzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlu bGluZSBib29sIHN1c3BlbmRfaXNfYmxvY2tlZCh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1n aXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9jay5jIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRf YmxvY2suYwppbmRleCA3OGQ1ODgwLi45NDE0NDU1IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIv c3VzcGVuZF9ibG9jay5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrLmMKQEAgLTI5 LDEzICsyOSwxNSBAQCBlbnVtIHsKIAlERUJVR19VU0VSX1NUQVRFID0gMVUgPDwgMiwKIAlERUJV R19TVVNQRU5EID0gMVUgPDwgMywKIAlERUJVR19TVVNQRU5EX0JMT0NLRVIgPSAxVSA8PCA0LAor CURFQlVHX0VYUElSRSA9IDFVIDw8IDUsCiB9Owogc3RhdGljIGludCBkZWJ1Z19tYXNrID0gREVC VUdfRVhJVF9TVVNQRU5EIHwgREVCVUdfV0FLRVVQIHwgREVCVUdfVVNFUl9TVEFURTsKIG1vZHVs ZV9wYXJhbV9uYW1lZChkZWJ1Z19tYXNrLCBkZWJ1Z19tYXNrLCBpbnQsIFNfSVJVR08gfCBTX0lX VVNSIHwgU19JV0dSUCk7CiAKICNkZWZpbmUgU0JfSU5JVElBTElaRUQgICAgICAgICAgICAoMVUg PDwgOCkKICNkZWZpbmUgU0JfQUNUSVZFICAgICAgICAgICAgICAgICAoMVUgPDwgOSkKLSNkZWZp bmUgU0JfUFJFVkVOVElOR19TVVNQRU5EICAgICAoMVUgPDwgMTApCisjZGVmaW5lIFNCX0FVVE9f RVhQSVJFICAgICAgICAgICAgKDFVIDw8IDEwKQorI2RlZmluZSBTQl9QUkVWRU5USU5HX1NVU1BF TkQgICAgICgxVSA8PCAxMSkKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhsaXN0X2xvY2spOwog c3RhdGljIERFRklORV9TUElOTE9DSyhzdGF0ZV9sb2NrKTsKQEAgLTUzLDE5ICs1NSw1MyBAQCBz dGF0aWMgc3RydWN0IHN1c3BlbmRfYmxvY2tlciBkZWxldGVkX3N1c3BlbmRfYmxvY2tlcnM7CiBz dGF0aWMga3RpbWVfdCBsYXN0X3NsZWVwX3RpbWVfdXBkYXRlOwogc3RhdGljIGJvb2wgd2FpdF9m b3Jfd2FrZXVwOwogCitzdGF0aWMgYm9vbCBzdGF0c19nZXRfZXhwaXJlZF90aW1lKHN0cnVjdCBz dXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsCisJCQkJICAga3RpbWVfdCAqZXhwaXJlX3RpbWUpCit7 CisJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCB0aW1lc3BlYyBrdDsKKwlzdHJ1Y3QgdGlt ZXNwZWMgdG9tb25vOworCXN0cnVjdCB0aW1lc3BlYyBkZWx0YTsKKwl1bnNpZ25lZCBsb25nIHNl cTsKKwlsb25nIHRpbWVvdXQ7CisKKwlpZiAoIShibG9ja2VyLT5mbGFncyAmIFNCX0FVVE9fRVhQ SVJFKSkKKwkJcmV0dXJuIGZhbHNlOworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRp bWVfbG9jayk7CisJCXRpbWVvdXQgPSBibG9ja2VyLT5leHBpcmVzIC0gamlmZmllczsKKwkJaWYg KHRpbWVvdXQgPiAwKQorCQkJcmV0dXJuIGZhbHNlOworCQlrdCA9IGN1cnJlbnRfa2VybmVsX3Rp bWUoKTsKKwkJdG9tb25vID0gd2FsbF90b19tb25vdG9uaWM7CisJfSB3aGlsZSAocmVhZF9zZXFy ZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisJamlmZmllc190b190aW1lc3BlYygtdGltZW91dCwg JmRlbHRhKTsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdHMsIGt0LnR2X3NlYyArIHRvbW9u by50dl9zZWMgLSBkZWx0YS50dl9zZWMsCisJCQkJa3QudHZfbnNlYyArIHRvbW9uby50dl9uc2Vj IC0gZGVsdGEudHZfbnNlYyk7CisJKmV4cGlyZV90aW1lID0gdGltZXNwZWNfdG9fa3RpbWUodHMp OworCXJldHVybiB0cnVlOworfQorCisKIHN0YXRpYyBpbnQgcHJpbnRfYmxvY2tlcl9zdGF0KGNo YXIgKmJ1Ziwgc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikKIHsKIAlpbnQgbG9ja19j b3VudCA9IGJsb2NrZXItPnN0YXQuY291bnQ7CisJaW50IGV4cGlyZV9jb3VudCA9IGJsb2NrZXIt PnN0YXQuZXhwaXJlX2NvdW50OwogCWt0aW1lX3QgYWN0aXZlX3RpbWUgPSBrdGltZV9zZXQoMCwg MCk7CiAJa3RpbWVfdCB0b3RhbF90aW1lID0gYmxvY2tlci0+c3RhdC50b3RhbF90aW1lOwogCWt0 aW1lX3QgbWF4X3RpbWUgPSBibG9ja2VyLT5zdGF0Lm1heF90aW1lOwogCWt0aW1lX3QgcHJldmVu dF9zdXNwZW5kX3RpbWUgPSBibG9ja2VyLT5zdGF0LnByZXZlbnRfc3VzcGVuZF90aW1lOwogCWlm IChibG9ja2VyLT5mbGFncyAmIFNCX0FDVElWRSkgewogCQlrdGltZV90IG5vdywgYWRkX3RpbWU7 Ci0JCW5vdyA9IGt0aW1lX2dldCgpOworCQlib29sIGV4cGlyZWQgPSBzdGF0c19nZXRfZXhwaXJl ZF90aW1lKGJsb2NrZXIsICZub3cpOworCQlpZiAoIWV4cGlyZWQpCisJCQlub3cgPSBrdGltZV9n ZXQoKTsKIAkJYWRkX3RpbWUgPSBrdGltZV9zdWIobm93LCBibG9ja2VyLT5zdGF0Lmxhc3RfdGlt ZSk7CiAJCWxvY2tfY291bnQrKzsKLQkJYWN0aXZlX3RpbWUgPSBhZGRfdGltZTsKKwkJaWYgKCFl eHBpcmVkKQorCQkJYWN0aXZlX3RpbWUgPSBhZGRfdGltZTsKKwkJZWxzZQorCQkJZXhwaXJlX2Nv dW50Kys7CiAJCXRvdGFsX3RpbWUgPSBrdGltZV9hZGQodG90YWxfdGltZSwgYWRkX3RpbWUpOwog CQlpZiAoYmxvY2tlci0+ZmxhZ3MgJiBTQl9QUkVWRU5USU5HX1NVU1BFTkQpCiAJCQlwcmV2ZW50 X3N1c3BlbmRfdGltZSA9IGt0aW1lX2FkZChwcmV2ZW50X3N1c3BlbmRfdGltZSwKQEAgLTc0LDkg KzExMCwxMCBAQCBzdGF0aWMgaW50IHByaW50X2Jsb2NrZXJfc3RhdChjaGFyICpidWYsIHN0cnVj dCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCiAJCQltYXhfdGltZSA9IGFkZF90aW1lOwogCX0K IAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlwiJXNcIlx0JWRcdCVkXHQlbGxkXHQlbGxkXHQlbGxk XHQlbGxkXHQlbGxkXG4iLAotCQkgICAgICAgYmxvY2tlci0+bmFtZSwgbG9ja19jb3VudCwgYmxv Y2tlci0+c3RhdC53YWtldXBfY291bnQsCi0JCSAgICAgICBrdGltZV90b19ucyhhY3RpdmVfdGlt ZSksIGt0aW1lX3RvX25zKHRvdGFsX3RpbWUpLAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlwiJXNc Ilx0JWRcdCVkXHQlZFx0JWxsZFx0JWxsZFx0JWxsZFx0JWxsZFx0IgorCQkgICAgICAgIiVsbGRc biIsIGJsb2NrZXItPm5hbWUsIGxvY2tfY291bnQsIGV4cGlyZV9jb3VudCwKKwkJICAgICAgIGJs b2NrZXItPnN0YXQud2FrZXVwX2NvdW50LCBrdGltZV90b19ucyhhY3RpdmVfdGltZSksCisJCSAg ICAgICBrdGltZV90b19ucyh0b3RhbF90aW1lKSwKIAkJICAgICAgIGt0aW1lX3RvX25zKHByZXZl bnRfc3VzcGVuZF90aW1lKSwga3RpbWVfdG9fbnMobWF4X3RpbWUpLAogCQkgICAgICAga3RpbWVf dG9fbnMoYmxvY2tlci0+c3RhdC5sYXN0X3RpbWUpKTsKIH0KQEAgLTkyLDcgKzEyOSw3IEBAIHN0 YXRpYyBpbnQgc3VzcGVuZF9ibG9ja2VyX3N0YXRzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFy ICoqc3RhcnQsIG9mZl90IG9mZiwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsaXN0X2xvY2ssIGly cWZsYWdzKTsKIAotCXAgKz0gc3ByaW50ZihwLCAibmFtZVx0Y291bnRcdHdha2VfY291bnRcdGFj dGl2ZV9zaW5jZSIKKwlwICs9IHNwcmludGYocCwgIm5hbWVcdGNvdW50XHRleHBpcmVfY291bnRc dHdha2VfY291bnRcdGFjdGl2ZV9zaW5jZSIKIAkJICAgICAiXHR0b3RhbF90aW1lXHRzbGVlcF90 aW1lXHRtYXhfdGltZVx0bGFzdF9jaGFuZ2VcbiIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxv Y2tlciwgJmluYWN0aXZlX2Jsb2NrZXJzLCBsaW5rKSB7CiAJCXAgKz0gcHJpbnRfYmxvY2tlcl9z dGF0KHAsIGJsb2NrZXIpOwpAQCAtMTE1LDYgKzE1Miw3IEBAIHN0YXRpYyBpbnQgc3VzcGVuZF9i bG9ja2VyX3N0YXRzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9m ZiwKIHN0YXRpYyB2b2lkIHN1c3BlbmRfYmxvY2tlcl9zdGF0X2luaXRfbG9ja2VkKHN0cnVjdCBz dXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCiB7CiAJYmxvY2tlci0+c3RhdC5jb3VudCA9IDA7CisJ YmxvY2tlci0+c3RhdC5leHBpcmVfY291bnQgPSAwOwogCWJsb2NrZXItPnN0YXQud2FrZXVwX2Nv dW50ID0gMDsKIAlibG9ja2VyLT5zdGF0LnRvdGFsX3RpbWUgPSBrdGltZV9zZXQoMCwgMCk7CiAJ YmxvY2tlci0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSA9IGt0aW1lX3NldCgwLCAwKTsKQEAg LTEyNyw2ICsxNjUsNyBAQCBzdGF0aWMgdm9pZCBzdXNwZW5kX2Jsb2NrZXJfc3RhdF9kZXN0cm95 X2xvY2tlZChzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibCkKIAlpZiAoIWJsLT5zdGF0LmNvdW50 KQogCQlyZXR1cm47CiAJZGVsZXRlZF9zdXNwZW5kX2Jsb2NrZXJzLnN0YXQuY291bnQgKz0gYmwt PnN0YXQuY291bnQ7CisJZGVsZXRlZF9zdXNwZW5kX2Jsb2NrZXJzLnN0YXQuZXhwaXJlX2NvdW50 ICs9IGJsLT5zdGF0LmV4cGlyZV9jb3VudDsKIAlkZWxldGVkX3N1c3BlbmRfYmxvY2tlcnMuc3Rh dC50b3RhbF90aW1lID0ga3RpbWVfYWRkKAogCQlkZWxldGVkX3N1c3BlbmRfYmxvY2tlcnMuc3Rh dC50b3RhbF90aW1lLCBibC0+c3RhdC50b3RhbF90aW1lKTsKIAlkZWxldGVkX3N1c3BlbmRfYmxv Y2tlcnMuc3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSA9IGt0aW1lX2FkZCgKQEAgLTEzNiwxNCAr MTc1LDIwIEBAIHN0YXRpYyB2b2lkIHN1c3BlbmRfYmxvY2tlcl9zdGF0X2Rlc3Ryb3lfbG9ja2Vk KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsKQogCQlkZWxldGVkX3N1c3BlbmRfYmxvY2tlcnMu c3RhdC5tYXhfdGltZSwgYmwtPnN0YXQubWF4X3RpbWUpOwogfQogCi1zdGF0aWMgdm9pZCBzdXNw ZW5kX3VuYmxvY2tfc3RhdF9sb2NrZWQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikK K3N0YXRpYyB2b2lkIHN1c3BlbmRfdW5ibG9ja19zdGF0X2xvY2tlZChzdHJ1Y3Qgc3VzcGVuZF9i bG9ja2VyICpibG9ja2VyLAorCQkJCQlib29sIGV4cGlyZWQpCiB7CiAJa3RpbWVfdCBkdXJhdGlv bjsKIAlrdGltZV90IG5vdzsKIAlpZiAoIShibG9ja2VyLT5mbGFncyAmIFNCX0FDVElWRSkpCiAJ CXJldHVybjsKLQlub3cgPSBrdGltZV9nZXQoKTsKKwlpZiAoc3RhdHNfZ2V0X2V4cGlyZWRfdGlt ZShibG9ja2VyLCAmbm93KSkKKwkJZXhwaXJlZCA9IHRydWU7CisJZWxzZQorCQlub3cgPSBrdGlt ZV9nZXQoKTsKIAlibG9ja2VyLT5zdGF0LmNvdW50Kys7CisJaWYgKGV4cGlyZWQpCisJCWJsb2Nr ZXItPnN0YXQuZXhwaXJlX2NvdW50Kys7CiAJZHVyYXRpb24gPSBrdGltZV9zdWIobm93LCBibG9j a2VyLT5zdGF0Lmxhc3RfdGltZSk7CiAJYmxvY2tlci0+c3RhdC50b3RhbF90aW1lID0KIAkJa3Rp bWVfYWRkKGJsb2NrZXItPnN0YXQudG90YWxfdGltZSwgZHVyYXRpb24pOwpAQCAtMTY2LDYgKzIx MSwxMiBAQCBzdGF0aWMgdm9pZCBzdXNwZW5kX2Jsb2NrX3N0YXRfbG9ja2VkKHN0cnVjdCBzdXNw ZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCiAJCXdhaXRfZm9yX3dha2V1cCA9IGZhbHNlOwogCQlibG9j a2VyLT5zdGF0Lndha2V1cF9jb3VudCsrOwogCX0KKwlpZiAoKGJsb2NrZXItPmZsYWdzICYgU0Jf QVVUT19FWFBJUkUpICYmCisJICAgIHRpbWVfaXNfYmVmb3JlX2VxX2ppZmZpZXMoYmxvY2tlci0+ ZXhwaXJlcykpIHsKKwkJc3VzcGVuZF91bmJsb2NrX3N0YXRfbG9ja2VkKGJsb2NrZXIsIGZhbHNl KTsKKwkJYmxvY2tlci0+c3RhdC5sYXN0X3RpbWUgPSBrdGltZV9nZXQoKTsKKwl9CisKIAlpZiAo IShibG9ja2VyLT5mbGFncyAmIFNCX0FDVElWRSkpCiAJCWJsb2NrZXItPnN0YXQubGFzdF90aW1l ID0ga3RpbWVfZ2V0KCk7CiB9CkBAIC0xNzMsMTcgKzIyNCwyMiBAQCBzdGF0aWMgdm9pZCBzdXNw ZW5kX2Jsb2NrX3N0YXRfbG9ja2VkKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCiBz dGF0aWMgdm9pZCB1cGRhdGVfc2xlZXBfd2FpdF9zdGF0c19sb2NrZWQoYm9vbCBkb25lKQogewog CXN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXI7Ci0Ja3RpbWVfdCBub3csIGVsYXBzZWQs IGFkZDsKKwlrdGltZV90IG5vdywgZXRpbWUsIGVsYXBzZWQsIGFkZDsKKwlib29sIGV4cGlyZWQ7 CiAKIAlub3cgPSBrdGltZV9nZXQoKTsKIAllbGFwc2VkID0ga3RpbWVfc3ViKG5vdywgbGFzdF9z bGVlcF90aW1lX3VwZGF0ZSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja2VyLCAmYWN0aXZl X2Jsb2NrZXJzLCBsaW5rKSB7CisJCWV4cGlyZWQgPSBzdGF0c19nZXRfZXhwaXJlZF90aW1lKGJs b2NrZXIsICZldGltZSk7CiAJCWlmIChibG9ja2VyLT5mbGFncyAmIFNCX1BSRVZFTlRJTkdfU1VT UEVORCkgewotCQkJYWRkID0gZWxhcHNlZDsKKwkJCWlmIChleHBpcmVkKQorCQkJCWFkZCA9IGt0 aW1lX3N1YihldGltZSwgbGFzdF9zbGVlcF90aW1lX3VwZGF0ZSk7CisJCQllbHNlCisJCQkJYWRk ID0gZWxhcHNlZDsKIAkJCWJsb2NrZXItPnN0YXQucHJldmVudF9zdXNwZW5kX3RpbWUgPSBrdGlt ZV9hZGQoCiAJCQkJYmxvY2tlci0+c3RhdC5wcmV2ZW50X3N1c3BlbmRfdGltZSwgYWRkKTsKIAkJ fQotCQlpZiAoZG9uZSkKKwkJaWYgKGRvbmUgfHwgZXhwaXJlZCkKIAkJCWJsb2NrZXItPmZsYWdz ICY9IH5TQl9QUkVWRU5USU5HX1NVU1BFTkQ7CiAJCWVsc2UKIAkJCWJsb2NrZXItPmZsYWdzIHw9 IFNCX1BSRVZFTlRJTkdfU1VTUEVORDsKQEAgLTE5OSwyNiArMjU1LDY5IEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBzdXNwZW5kX2Jsb2NrZXJfc3RhdF9kZXN0cm95X2xvY2tlZCgKIAkJCQkJc3RydWN0 IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5k X2Jsb2NrX3N0YXRfbG9ja2VkKAogCQkJCQlzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2Vy KSB7fQotc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfdW5ibG9ja19zdGF0X2xvY2tlZCgKLQkJ CQkJc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikge30KK3N0YXRpYyBpbmxpbmUgdm9p ZCBzdXNwZW5kX3VuYmxvY2tfc3RhdF9sb2NrZWQoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxv Y2tlciwKKwkJCQkJICAgYm9vbCBleHBpcmVkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0 ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZChib29sIGRvbmUpIHt9CiAKICNlbmRpZgogCiAKK3N0 YXRpYyB2b2lkIGV4cGlyZV9zdXNwZW5kX2Jsb2NrZXIoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAq YmxvY2tlcikKK3sKKwlzdXNwZW5kX3VuYmxvY2tfc3RhdF9sb2NrZWQoYmxvY2tlciwgdHJ1ZSk7 CisJYmxvY2tlci0+ZmxhZ3MgJj0gfihTQl9BQ1RJVkUgfCBTQl9BVVRPX0VYUElSRSk7CisJbGlz dF9kZWwoJmJsb2NrZXItPmxpbmspOworCWxpc3RfYWRkKCZibG9ja2VyLT5saW5rLCAmaW5hY3Rp dmVfYmxvY2tlcnMpOworCWlmIChkZWJ1Z19tYXNrICYgKERFQlVHX1NVU1BFTkRfQkxPQ0tFUiB8 IERFQlVHX0VYUElSRSkpCisJCXByX2luZm8oImV4cGlyZWQgc3VzcGVuZCBibG9ja2VyICVzXG4i LCBibG9ja2VyLT5uYW1lKTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfYWN0aXZlX2Jsb2NrZXJz X2xvY2tlZCh2b2lkKQogewogCXN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXI7CiAKLQls aXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2NrZXIsICZhY3RpdmVfYmxvY2tlcnMsIGxpbmspCi0JCXBy X2luZm8oImFjdGl2ZSBzdXNwZW5kIGJsb2NrZXIgJXNcbiIsIGJsb2NrZXItPm5hbWUpOworCWxp c3RfZm9yX2VhY2hfZW50cnkoYmxvY2tlciwgJmFjdGl2ZV9ibG9ja2VycywgbGluaykgeworCQlp ZiAoYmxvY2tlci0+ZmxhZ3MgJiBTQl9BVVRPX0VYUElSRSkgeworCQkJbG9uZyB0aW1lb3V0ID0g YmxvY2tlci0+ZXhwaXJlcyAtIGppZmZpZXM7CisJCQlpZiAodGltZW91dCA8PSAwKQorCQkJCXBy X2luZm8oInN1c3BlbmQgYmxvY2tlciAlcywgZXhwaXJlZFxuIiwKKwkJCQkJYmxvY2tlci0+bmFt ZSk7CisJCQllbHNlCisJCQkJcHJfaW5mbygiYWN0aXZlIHN1c3BlbmQgYmxvY2tlciAlcywgdGlt ZSBsZWZ0ICIKKwkJCQkJIiVsZFxuIiwgYmxvY2tlci0+bmFtZSwgdGltZW91dCk7CisJCX0gZWxz ZQorCQkJcHJfaW5mbygiYWN0aXZlIHN1c3BlbmQgYmxvY2tlciAlc1xuIiwgYmxvY2tlci0+bmFt ZSk7CisJfQorfQorCitzdGF0aWMgbG9uZyBtYXhfc3VzcGVuZF9ibG9ja2VyX3RpbWVvdXRfbG9j a2VkKHZvaWQpCit7CisJc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlciwgKm47CisJbG9u ZyBtYXhfdGltZW91dCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmxvY2tlciwg biwgJmFjdGl2ZV9ibG9ja2VycywgbGluaykgeworCQlpZiAoYmxvY2tlci0+ZmxhZ3MgJiBTQl9B VVRPX0VYUElSRSkgeworCQkJbG9uZyB0aW1lb3V0ID0gYmxvY2tlci0+ZXhwaXJlcyAtIGppZmZp ZXM7CisJCQlpZiAodGltZW91dCA8PSAwKQorCQkJCWV4cGlyZV9zdXNwZW5kX2Jsb2NrZXIoYmxv Y2tlcik7CisJCQllbHNlIGlmICh0aW1lb3V0ID4gbWF4X3RpbWVvdXQpCisJCQkJbWF4X3RpbWVv dXQgPSB0aW1lb3V0OworCQl9IGVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIG1heF90 aW1lb3V0OwogfQogCiBib29sIHN1c3BlbmRfaXNfYmxvY2tlZCh2b2lkKQogeworCWxvbmcgcmV0 OworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaWYgKFdBUk5fT05DRSghZW5hYmxlX3N1c3Bl bmRfYmxvY2tlcnMsICJpZ25vcmluZyBzdXNwZW5kIGJsb2NrZXJzXG4iKSkKIAkJcmV0dXJuIDA7 Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZhY3RpdmVfYmxvY2tlcnMpOworCXNwaW5fbG9ja19pcnFz YXZlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKKwlyZXQgPSAhIW1heF9zdXNwZW5kX2Jsb2NrZXJf dGltZW91dF9sb2NrZWQoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGly cWZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBzdXNwZW5kX3dvcmtlcihz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yNTEsMTQgKzM1MCw0OSBAQCBzdGF0aWMgdm9p ZCBzdXNwZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJaWYgKGN1cnJlbnRf ZXZlbnRfbnVtID09IGVudHJ5X2V2ZW50X251bSkgewogCQlpZiAoZGVidWdfbWFzayAmIERFQlVH X1NVU1BFTkQpCiAJCQlwcl9pbmZvKCJzdXNwZW5kOiBwbV9zdXNwZW5kIHJldHVybmVkIHdpdGgg bm8gZXZlbnRcbiIpOwotCQlzdXNwZW5kX2Jsb2NrKCZ1bmtub3duX3dha2V1cCk7Ci0JCXN1c3Bl bmRfdW5ibG9jaygmdW5rbm93bl93YWtldXApOworCQlzdXNwZW5kX2Jsb2NrX3RpbWVvdXQoJnVu a25vd25fd2FrZXVwLCBIWiAvIDIpOwogCX0KIGFib3J0OgogCWVuYWJsZV9zdXNwZW5kX2Jsb2Nr ZXJzID0gMDsKIH0KIHN0YXRpYyBERUNMQVJFX1dPUksoc3VzcGVuZF93b3JrLCBzdXNwZW5kX3dv cmtlcik7CiAKK3N0YXRpYyB2b2lkIGV4cGlyZV9zdXNwZW5kX2Jsb2NrZXJzKHVuc2lnbmVkIGxv bmcgZGF0YSkKK3sKKwlsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlp ZiAoZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkKKwkJcHJfaW5mbygiZXhwaXJlX3N1c3BlbmRf YmxvY2tlcnM6IHN0YXJ0XG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFm bGFncyk7CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19TVVNQRU5EKQorCQlwcmludF9hY3RpdmVf YmxvY2tlcnNfbG9ja2VkKCk7CisJdGltZW91dCA9IG1heF9zdXNwZW5kX2Jsb2NrZXJfdGltZW91 dF9sb2NrZWQoKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX0VYUElSRSkKKwkJcHJfaW5mbygi ZXhwaXJlX3N1c3BlbmRfYmxvY2tlcnM6IGRvbmUsIHRpbWVvdXQgJWxkXG4iLAorCQkJdGltZW91 dCk7CisJaWYgKHRpbWVvdXQgPT0gMCkKKwkJcXVldWVfd29yayhzdXNwZW5kX3dvcmtfcXVldWUs ICZzdXNwZW5kX3dvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJx ZmxhZ3MpOworfQorc3RhdGljIERFRklORV9USU1FUihleHBpcmVfdGltZXIsIGV4cGlyZV9zdXNw ZW5kX2Jsb2NrZXJzLCAwLCAwKTsKKworc3RhdGljIHZvaWQgdXBkYXRlX3N1c3BlbmQoc3RydWN0 IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlciwgbG9uZyBtYXhfdGltZW91dCkKK3sKKwlpZiAobWF4 X3RpbWVvdXQgPiAwKSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfRVhQSVJFKQorCQkJcHJf aW5mbygic3VzcGVuZF9ibG9ja2VyOiAlcywgc3RhcnQgZXhwaXJlIHRpbWVyLCAiCisJCQkJIiVs ZFxuIiwgYmxvY2tlci0+bmFtZSwgbWF4X3RpbWVvdXQpOworCQltb2RfdGltZXIoJmV4cGlyZV90 aW1lciwgamlmZmllcyArIG1heF90aW1lb3V0KTsKKwl9IGVsc2UgeworCQlpZiAoZGVsX3RpbWVy KCZleHBpcmVfdGltZXIpKQorCQkJaWYgKGRlYnVnX21hc2sgJiBERUJVR19FWFBJUkUpCisJCQkJ cHJfaW5mbygic3VzcGVuZF9ibG9ja2VyOiAlcywgc3RvcCBleHBpcmUgIgorCQkJCQkidGltZXJc biIsIGJsb2NrZXItPm5hbWUpOworCQlpZiAobWF4X3RpbWVvdXQgPT0gMCkKKwkJCXF1ZXVlX3dv cmsoc3VzcGVuZF93b3JrX3F1ZXVlLCAmc3VzcGVuZF93b3JrKTsKKwl9Cit9CisKIHN0YXRpYyBp bnQgc3VzcGVuZF9ibG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3Nh Z2VfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gc3VzcGVuZF9pc19ibG9ja2VkKCkgPyAtRUFHQUlO IDogMDsKQEAgLTMxOCwxNyArNDUyLDE0IEBAIHZvaWQgc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3ko c3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikKIAlzdXNwZW5kX2Jsb2NrZXJfc3RhdF9k ZXN0cm95X2xvY2tlZChibG9ja2VyKTsKIAlibG9ja2VyLT5mbGFncyAmPSB+U0JfSU5JVElBTEla RUQ7CiAJbGlzdF9kZWwoJmJsb2NrZXItPmxpbmspOwotCWlmICgoYmxvY2tlci0+ZmxhZ3MgJiBT Ql9BQ1RJVkUpICYmIGxpc3RfZW1wdHkoJmFjdGl2ZV9ibG9ja2VycykpCi0JCXF1ZXVlX3dvcmso c3VzcGVuZF93b3JrX3F1ZXVlLCAmc3VzcGVuZF93b3JrKTsKKwlpZiAoYmxvY2tlci0+ZmxhZ3Mg JiBTQl9BQ1RJVkUpCisJCXVwZGF0ZV9zdXNwZW5kKGJsb2NrZXIsIG1heF9zdXNwZW5kX2Jsb2Nr ZXJfdGltZW91dF9sb2NrZWQoKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdF9sb2Nr LCBpcnFmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKHN1c3BlbmRfYmxvY2tlcl9kZXN0cm95KTsK IAotLyoqCi0gKiBzdXNwZW5kX2Jsb2NrKCkgLSBCbG9jayBzdXNwZW5kCi0gKiBAYmxvY2tlcjoJ VGhlIHN1c3BlbmQgYmxvY2tlciB0byB1c2UKLSAqLwotdm9pZCBzdXNwZW5kX2Jsb2NrKHN0cnVj dCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCitzdGF0aWMgdm9pZCBfX3N1c3BlbmRfYmxvY2so c3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlciwgbG9uZyB0aW1lb3V0LAorCQkJICAgIGJv b2wgaGFzX3RpbWVvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIApAQCAtMzM4LDIw ICs0NjksNTYgQEAgdm9pZCBzdXNwZW5kX2Jsb2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJs b2NrZXIpCiAJc3VzcGVuZF9ibG9ja19zdGF0X2xvY2tlZChibG9ja2VyKTsKIAlibG9ja2VyLT5m bGFncyB8PSBTQl9BQ1RJVkU7CiAJbGlzdF9kZWwoJmJsb2NrZXItPmxpbmspOwotCWlmIChkZWJ1 Z19tYXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQotCQlwcl9pbmZvKCJzdXNwZW5kX2Jsb2Nr OiAlc1xuIiwgYmxvY2tlci0+bmFtZSk7Ci0JbGlzdF9hZGQoJmJsb2NrZXItPmxpbmssICZhY3Rp dmVfYmxvY2tlcnMpOworCWlmIChoYXNfdGltZW91dCkgeworCQlpZiAoZGVidWdfbWFzayAmIERF QlVHX1NVU1BFTkRfQkxPQ0tFUikKKwkJCXByX2luZm8oInN1c3BlbmRfYmxvY2s6ICVzLCB0aW1l b3V0ICVsZC4lMDNsdVxuIiwKKwkJCQlibG9ja2VyLT5uYW1lLCB0aW1lb3V0IC8gSFosCisJCQkJ KHRpbWVvdXQgJSBIWikgKiBNU0VDX1BFUl9TRUMgLyBIWik7CisJCWJsb2NrZXItPmV4cGlyZXMg PSBqaWZmaWVzICsgdGltZW91dDsKKwkJYmxvY2tlci0+ZmxhZ3MgfD0gU0JfQVVUT19FWFBJUkU7 CisJCWxpc3RfYWRkX3RhaWwoJmJsb2NrZXItPmxpbmssICZhY3RpdmVfYmxvY2tlcnMpOworCX0g ZWxzZSB7CisJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQorCQkJcHJf aW5mbygic3VzcGVuZF9ibG9jazogJXNcbiIsIGJsb2NrZXItPm5hbWUpOworCQlibG9ja2VyLT5l eHBpcmVzID0gTE9OR19NQVg7CisJCWJsb2NrZXItPmZsYWdzICY9IH5TQl9BVVRPX0VYUElSRTsK KwkJLyogQWRkIHRvIGhlYWQgc28gc3VzcGVuZF9pc19ibG9ja2VkIG9ubHkgaGFzIHRvIGV4YW1p bmUgKi8KKwkJLyogb25lIGVudHJ5ICovCisJCWxpc3RfYWRkKCZibG9ja2VyLT5saW5rLCAmYWN0 aXZlX2Jsb2NrZXJzKTsKKwl9CiAKIAljdXJyZW50X2V2ZW50X251bSsrOwogCWlmIChibG9ja2Vy ID09ICZtYWluX3N1c3BlbmRfYmxvY2tlcikKIAkJdXBkYXRlX3NsZWVwX3dhaXRfc3RhdHNfbG9j a2VkKHRydWUpOwogCWVsc2UgaWYgKCFpc19ibG9ja2luZ19zdXNwZW5kKCZtYWluX3N1c3BlbmRf YmxvY2tlcikpCiAJCXVwZGF0ZV9zbGVlcF93YWl0X3N0YXRzX2xvY2tlZChmYWxzZSk7CisJdXBk YXRlX3N1c3BlbmQoYmxvY2tlciwgaGFzX3RpbWVvdXQgPworCQkJbWF4X3N1c3BlbmRfYmxvY2tl cl90aW1lb3V0X2xvY2tlZCgpIDogLTEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3Rf bG9jaywgaXJxZmxhZ3MpOwogfQorCisvKioKKyAqIHN1c3BlbmRfYmxvY2soKSAtIEJsb2NrIHN1 c3BlbmQKKyAqIEBibG9ja2VyOglUaGUgc3VzcGVuZCBibG9ja2VyIHRvIHVzZQorICovCit2b2lk IHN1c3BlbmRfYmxvY2soc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikKK3sKKwlfX3N1 c3BlbmRfYmxvY2soYmxvY2tlciwgMCwgZmFsc2UpOworfQogRVhQT1JUX1NZTUJPTChzdXNwZW5k X2Jsb2NrKTsKIAogLyoqCisgKiBzdXNwZW5kX2Jsb2NrX3RpbWVvdXQoKSAtIEJsb2NrIHN1c3Bl bmQgZm9yIGEgbGltaXRlZCB0aW1lCisgKiBAYmxvY2tlcjoJVGhlIHN1c3BlbmQgYmxvY2tlciB0 byB1c2UuCisgKiBAdGltZW91dDoJVGltZW91dCBpbiBqaWZmaWVzIGJlZm9yZSB0aGUgc3VzcGVu ZCBibG9ja2VyIGF1dG8tdW5ibG9jaworICovCit2b2lkIHN1c3BlbmRfYmxvY2tfdGltZW91dChz dHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyLCBsb25nIHRpbWVvdXQpCit7CisJX19zdXNw ZW5kX2Jsb2NrKGJsb2NrZXIsIHRpbWVvdXQsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChzdXNw ZW5kX2Jsb2NrX3RpbWVvdXQpOworCisvKioKICAqIHN1c3BlbmRfdW5ibG9jaygpIC0gVW5ibG9j ayBzdXNwZW5kCiAgKiBAYmxvY2tlcjoJVGhlIHN1c3BlbmQgYmxvY2tlciB0byB1bmJsb2NrLgog ICoKQEAgLTM2MywxNiArNTMwLDE1IEBAIHZvaWQgc3VzcGVuZF91bmJsb2NrKHN0cnVjdCBzdXNw ZW5kX2Jsb2NrZXIgKmJsb2NrZXIpCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBp cnFmbGFncyk7CiAKLQlzdXNwZW5kX3VuYmxvY2tfc3RhdF9sb2NrZWQoYmxvY2tlcik7CisJc3Vz cGVuZF91bmJsb2NrX3N0YXRfbG9ja2VkKGJsb2NrZXIsIGZhbHNlKTsKIAogCWlmIChkZWJ1Z19t YXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQogCQlwcl9pbmZvKCJzdXNwZW5kX3VuYmxvY2s6 ICVzXG4iLCBibG9ja2VyLT5uYW1lKTsKKwlibG9ja2VyLT5mbGFncyAmPSB+KFNCX0FDVElWRSB8 IFNCX0FVVE9fRVhQSVJFKTsKIAlsaXN0X2RlbCgmYmxvY2tlci0+bGluayk7CiAJbGlzdF9hZGQo JmJsb2NrZXItPmxpbmssICZpbmFjdGl2ZV9ibG9ja2Vycyk7CiAKLQlpZiAoKGJsb2NrZXItPmZs YWdzICYgU0JfQUNUSVZFKSAmJiBsaXN0X2VtcHR5KCZhY3RpdmVfYmxvY2tlcnMpKQotCQlxdWV1 ZV93b3JrKHN1c3BlbmRfd29ya19xdWV1ZSwgJnN1c3BlbmRfd29yayk7Ci0JYmxvY2tlci0+Zmxh Z3MgJj0gfihTQl9BQ1RJVkUpOworCXVwZGF0ZV9zdXNwZW5kKGJsb2NrZXIsIG1heF9zdXNwZW5k X2Jsb2NrZXJfdGltZW91dF9sb2NrZWQoKSk7CiAJaWYgKGJsb2NrZXIgPT0gJm1haW5fc3VzcGVu ZF9ibG9ja2VyKSB7CiAJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORCkKIAkJCXByaW50 X2FjdGl2ZV9ibG9ja2Vyc19sb2NrZWQoKTsKLS0gCjEuNi4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgt cG1AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0 aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBt