From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932327Ab1CWDKs (ORCPT ); Tue, 22 Mar 2011 23:10:48 -0400 Received: from mail234-170.sinamail.sina.com.cn ([58.63.234.170]:54824 "EHLO mail234-170.sinamail.sina.com.cn" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753958Ab1CWDKT (ORCPT ); Tue, 22 Mar 2011 23:10:19 -0400 X-Greylist: delayed 757 seconds by postgrey-1.27 at vger.kernel.org; Tue, 22 Mar 2011 23:10:16 EDT X-Originating-IP: [218.94.38.186] Date: Wed, 23 Mar 2011 10:57:33 +0800 From: wujunhui@sina.com To: linux-kernel Cc: mingo Subject: new cpu schedule MIME-Version: 1.0 X-Priority: 3 X-MessageID: 1300849052.49.41296 X-Mailer: Sina WebMail 4.0 Content-Type: multipart/mixed; boundary="=-sinamail_mix_0d808c06412d3e67068bc3d1af5b1525" Message-Id: <20110323025733.ECAFF450BB@mail1.webapp.51uc.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-sinamail_mix_0d808c06412d3e67068bc3d1af5b1525 Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 Content-Disposition: inline aSBoYXZlIGEgbmV3IGNwdSBzY2hlZHVsZSwgaSBjYWxsZWQgaXQgTmFuSmluZyBmb3IgbXkgY2l0 eS4NCg0KaXQncyBPKDEpLA0KaXQncyBzaW5nbGUgcXVldWUsDQppdCdzIGxvYWRiYWxhbmNlIE8o MSksDQppdCdzIGZhaXIsDQppdCdzIG5vIGludGVyYWN0aXZlIHVzYWdlLXN0YXRpc3RpY3MgYW5k IHN0aWxsIGkvbyBmcmllbmRseSwNCg0KdG9kbzoNCnBvd2Vyc2F2ZSwNCmh1bWFuIGludGVyZmFj ZSAoa2V5Ym9hcmQsIG1vdXNlIGV2ZW50KSBwcm9tb3Rpb24sDQpvcHRpbWFsaXplIGNsZWFuLA0K DQoNCm15IGRldmVsb3BpbmcgcGxhdGZvcm0gaXMgY2VudG9zIDUuNQ0KDQpycG1idWlsZCAtYnAg Y2VudG9zIDIuNi4xOC0xOTQuMzIuMS5lbDUga2VybmVsIHNvdXJzZS4NCg0KLmNvbmZpZyB1c2Ug L2Jvb3QvY29uZmlnLg0KDQppIGhhdmUgc29tZSBleHBsYWluIGluIHRoZSBkaWZmLCBpZiBzb21l Ym9keSBpbnRlcmVzdCwgaSBjYW4gZXhwbGFpbiBpdCBtb3JlIGxhdGVyLg0KZGlmZiBpbiB0aGUg IGF0dGFjaG1lbnQgdG8gdGhpcyBtYWlsDQoNCg0KQmVzdCByZWdhcmRzDQoNCld1SnVuSHVpDQoN Cg== --=-sinamail_mix_0d808c06412d3e67068bc3d1af5b1525 Content-Type: application/octet-stream; name="=?GBK?B?c2NoZWQuaC5kaWZm?=" Content-Disposition: attachment; filename="=?GBK?B?c2NoZWQuaC5kaWZm?=" Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi4xOC5pNjg2X29yZy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJMjAxMS0wMi0y OCAxODo0NTo1NC4wMDAwMDAwMDAgKzA4MDAKKysrIGxpbnV4LTIuNi4xOC5pNjg2L2luY2x1ZGUv bGludXgvc2NoZWQuaAkyMDExLTAzLTE2IDIxOjQ3OjQ0LjAwMDAwMDAwMCArMDgwMApAQCAtNTU2 LDYgKzU1NiwxNSBAQAogCXJldHVybiAmY29udGFpbmVyX29mKHNpZywgc3RydWN0IHNpZ25hbF93 aXRoX2F1eF9zdHJ1Y3QsIHNpZyktPmF1eDsKIH0KIAorc3RydWN0IG1pZ3JhdGlvbl9yZXEgewor CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlp bnQgZGVzdF9jcHU7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworfTsKKwogLyogQ29udGV4 dCBzd2l0Y2ggbXVzdCBiZSB1bmxvY2tlZCBpZiBpbnRlcnJ1cHRzIGFyZSB0byBiZSBlbmFibGVk ICovCiAjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVwogIyBkZWZpbmUgX19B UkNIX1dBTlRfVU5MT0NLRURfQ1RYU1cKQEAgLTg4OCw2ICs4OTcsNyBAQAogI2lmZGVmIF9fQVJD SF9XQU5UX1VOTE9DS0VEX0NUWFNXCiAJaW50IG9uY3B1OwogI2VuZGlmCisJc3RydWN0IG1pZ3Jh dGlvbl9yZXEgcmVxOwogI2VuZGlmCiAJaW50IGxvYWRfd2VpZ2h0OwkvKiBmb3IgbmljZW5lc3Mg bG9hZCBiYWxhbmNpbmcgcHVycG9zZXMgKi8KIAlpbnQgcHJpbywgc3RhdGljX3ByaW8sIG5vcm1h bF9wcmlvOwo= --=-sinamail_mix_0d808c06412d3e67068bc3d1af5b1525 Content-Type: application/octet-stream; name="=?GBK?B?c2NoZWQuYy5kaWZm?=" Content-Disposition: attachment; filename="=?GBK?B?c2NoZWQuYy5kaWZm?=" Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi4xOC5pNjg2X29yZy9rZXJuZWwvc2NoZWQuYwkyMDExLTAzLTA3IDE0OjEy OjQ2LjAwMDAwMDAwMCArMDgwMAorKysgbGludXgtMi42LjE4Lmk2ODYva2VybmVsL3NjaGVkLmMJ MjAxMS0wMy0yMyAxMDowMjowNi4wMDAwMDAwMDAgKzA4MDAKQEAgLTE2LDYgKzE2LDcgQEAKICAq CQlieSBEYXZpZGUgTGliZW56aSwgcHJlZW1wdGlibGUga2VybmVsIGJpdHMgYnkgUm9iZXJ0IExv dmUuCiAgKiAgMjAwMy0wOS0wMwlJbnRlcmFjdGl2aXR5IHR1bmluZyBieSBDb24gS29saXZhcy4K ICAqICAyMDA0LTA0LTAyCVNjaGVkdWxlciBkb21haW5zIGNvZGUgYnkgTmljayBQaWdnaW4KKyAq ICAyMDExLTAzLTA2ICBOYW5KaW5nIFNjaGVkdWxlciBjb2RlIGJ5IFd1SnVuSHVpCiAgKi8KIAog I2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC03NSw2ICs3Niw5IEBACiAjZGVmaW5lIFVTRVJfUFJJ TyhwKQkJKChwKS1NQVhfUlRfUFJJTykKICNkZWZpbmUgVEFTS19VU0VSX1BSSU8ocCkJVVNFUl9Q UklPKChwKS0+c3RhdGljX3ByaW8pCiAjZGVmaW5lIE1BWF9VU0VSX1BSSU8JCShVU0VSX1BSSU8o TUFYX1BSSU8pKQorI2RlZmluZSBNQVhfUlFfUFJJTwkJKE1BWF9SVF9QUklPICsgMikKKyNkZWZp bmUgT1VUU0lERV9QUklPCQkoTUFYX1JUX1BSSU8gKQorI2RlZmluZSBJTlNJREVfUFJJTwkJKE1B WF9SVF9QUklPICsgMSkKIAogLyoKICAqIFNvbWUgaGVscGVycyBmb3IgY29udmVydGluZyBuYW5v c2Vjb25kIHRpbWluZyB0byBqaWZmeSByZXNvbHV0aW9uCkBAIC05MCw3OCArOTQsMTcgQEAKICAq IFRpbWVzbGljZXMgZ2V0IHJlZmlsbGVkIGFmdGVyIHRoZXkgZXhwaXJlLgogICovCiAjZGVmaW5l IE1JTl9USU1FU0xJQ0UJCW1heCg1ICogSFogLyAxMDAwLCAxKQotI2RlZmluZSBERUZfVElNRVNM SUNFCQkoMTAwICogSFogLyAxMDAwKQotI2RlZmluZSBPTl9SVU5RVUVVRV9XRUlHSFQJIDMwCi0j ZGVmaW5lIENISUxEX1BFTkFMVFkJCSA5NQotI2RlZmluZSBQQVJFTlRfUEVOQUxUWQkJMTAwCi0j ZGVmaW5lIEVYSVRfV0VJR0hUCQkgIDMKLSNkZWZpbmUgUFJJT19CT05VU19SQVRJTwkgMjUKLSNk ZWZpbmUgTUFYX0JPTlVTCQkoTUFYX1VTRVJfUFJJTyAqIFBSSU9fQk9OVVNfUkFUSU8gLyAxMDAp Ci0jZGVmaW5lIElOVEVSQUNUSVZFX0RFTFRBCSAgMgotI2RlZmluZSBNQVhfU0xFRVBfQVZHCQko REVGX1RJTUVTTElDRSAqIE1BWF9CT05VUykKLSNkZWZpbmUgU1RBUlZBVElPTl9MSU1JVAkoTUFY X1NMRUVQX0FWRykKLSNkZWZpbmUgTlNfTUFYX1NMRUVQX0FWRwkoSklGRklFU19UT19OUyhNQVhf U0xFRVBfQVZHKSkKLQotLyoKLSAqIElmIGEgdGFzayBpcyAnaW50ZXJhY3RpdmUnIHRoZW4gd2Ug cmVpbnNlcnQgaXQgaW4gdGhlIGFjdGl2ZQotICogYXJyYXkgYWZ0ZXIgaXQgaGFzIGV4cGlyZWQg aXRzIGN1cnJlbnQgdGltZXNsaWNlLiAoaXQgd2lsbCBub3QKLSAqIGNvbnRpbnVlIHRvIHJ1biBp bW1lZGlhdGVseSwgaXQgd2lsbCBzdGlsbCByb3VuZHJvYmluIHdpdGgKLSAqIG90aGVyIGludGVy YWN0aXZlIHRhc2tzLikKLSAqCi0gKiBUaGlzIHBhcnQgc2NhbGVzIHRoZSBpbnRlcmFjdGl2aXR5 IGxpbWl0IGRlcGVuZGluZyBvbiBuaWNlbmVzcy4KLSAqCi0gKiBXZSBzY2FsZSBpdCBsaW5lYXJs eSwgb2Zmc2V0IGJ5IHRoZSBJTlRFUkFDVElWRV9ERUxUQSBkZWx0YS4KLSAqIEhlcmUgYXJlIGEg ZmV3IGV4YW1wbGVzIG9mIGRpZmZlcmVudCBuaWNlIGxldmVsczoKLSAqCi0gKiAgVEFTS19JTlRF UkFDVElWRSgtMjApOiBbMSwxLDEsMSwxLDEsMSwxLDEsMCwwXQotICogIFRBU0tfSU5URVJBQ1RJ VkUoLTEwKTogWzEsMSwxLDEsMSwxLDEsMCwwLDAsMF0KLSAqICBUQVNLX0lOVEVSQUNUSVZFKCAg MCk6IFsxLDEsMSwxLDAsMCwwLDAsMCwwLDBdCi0gKiAgVEFTS19JTlRFUkFDVElWRSggMTApOiBb MSwxLDAsMCwwLDAsMCwwLDAsMCwwXQotICogIFRBU0tfSU5URVJBQ1RJVkUoIDE5KTogWzAsMCww LDAsMCwwLDAsMCwwLDAsMF0KLSAqCi0gKiAodGhlIFggYXhpcyByZXByZXNlbnRzIHRoZSBwb3Nz aWJsZSAtNSAuLi4gMCAuLi4gKzUgZHluYW1pYwotICogIHByaW9yaXR5IHJhbmdlIGEgdGFzayBj YW4gZXhwbG9yZSwgYSB2YWx1ZSBvZiAnMScgbWVhbnMgdGhlCi0gKiAgdGFzayBpcyByYXRlZCBp bnRlcmFjdGl2ZS4pCi0gKgotICogSWUuIG5pY2UgKzE5IHRhc2tzIGNhbiBuZXZlciBnZXQgJ2lu dGVyYWN0aXZlJyBlbm91Z2ggdG8gYmUKLSAqIHJlaW5zZXJ0ZWQgaW50byB0aGUgYWN0aXZlIGFy cmF5LiBBbmQgb25seSBoZWF2aWx5IENQVS1ob2cgbmljZSAtMjAKLSAqIHRhc2tzIHdpbGwgYmUg ZXhwaXJlZC4gRGVmYXVsdCBuaWNlIDAgdGFza3MgYXJlIHNvbWV3aGVyZSBiZXR3ZWVuLAotICog aXQgdGFrZXMgc29tZSBlZmZvcnQgZm9yIHRoZW0gdG8gZ2V0IGludGVyYWN0aXZlLCBidXQgaXQn cyBub3QKLSAqIHRvbyBoYXJkLgotICovCi0KLSNkZWZpbmUgQ1VSUkVOVF9CT05VUyhwKSBcCi0J KE5TX1RPX0pJRkZJRVMoKHApLT5zbGVlcF9hdmcpICogTUFYX0JPTlVTIC8gXAotCQlNQVhfU0xF RVBfQVZHKQotCi0jZGVmaW5lIEdSQU5VTEFSSVRZCSgxMCAqIEhaIC8gMTAwMCA/IDogMSkKIAot I2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgVElNRVNMSUNFX0dSQU5VTEFSSVRZKHApCShHUkFO VUxBUklUWSAqIFwKLQkJKDEgPDwgKCgoTUFYX0JPTlVTIC0gQ1VSUkVOVF9CT05VUyhwKSkgPyA6 IDEpIC0gMSkpICogXAotCQkJbnVtX29ubGluZV9jcHVzKCkpCi0jZWxzZQotI2RlZmluZSBUSU1F U0xJQ0VfR1JBTlVMQVJJVFkocCkJKEdSQU5VTEFSSVRZICogXAotCQkoMSA8PCAoKChNQVhfQk9O VVMgLSBDVVJSRU5UX0JPTlVTKHApKSA/IDogMSkgLSAxKSkpCi0jZW5kaWYKKyNkZWZpbmUgREVG X1RJTUVTTElDRQkJKDEwMCAqIEhaIC8gMTAwMCkKIAogI2RlZmluZSBTQ0FMRSh2MSx2MV9tYXgs djJfbWF4KSBcCiAJKHYxKSAqICh2Ml9tYXgpIC8gKHYxX21heCkKIAotI2RlZmluZSBERUxUQShw KSBcCi0JKFNDQUxFKFRBU0tfTklDRShwKSArIDIwLCA0MCwgTUFYX0JPTlVTKSAtIDIwICogTUFY X0JPTlVTIC8gNDAgKyBcCi0JCUlOVEVSQUNUSVZFX0RFTFRBKQotCi0jZGVmaW5lIFRBU0tfSU5U RVJBQ1RJVkUocCkgXAotCSgocCktPnByaW8gPD0gKHApLT5zdGF0aWNfcHJpbyAtIERFTFRBKHAp KQotCi0jZGVmaW5lIElOVEVSQUNUSVZFX1NMRUVQKHApIFwKLQkoSklGRklFU19UT19OUyhNQVhf U0xFRVBfQVZHICogXAotCQkoTUFYX0JPTlVTIC8gMiArIERFTFRBKChwKSkgKyAxKSAvIE1BWF9C T05VUyAtIDEpKQotCiAjZGVmaW5lIFRBU0tfUFJFRU1QVFNfQ1VSUihwLCBycSkgXAogCSgocCkt PnByaW8gPCAocnEpLT5jdXJyLT5wcmlvKQogCisjZGVmaW5lIG5vcm1hbF90YXNrKHApIFwKKwko cC0+c3RhdGljX3ByaW8gPCBNQVhfUFJJTyAmJiBwLT5zdGF0aWNfcHJpbyA+IE1BWF9SVF9QUklP LTEpCiAvKgogICogdGFza190aW1lc2xpY2UoKSBzY2FsZXMgdXNlci1uaWNlIHZhbHVlcyBbIC0y MCAuLi4gMCAuLi4gMTkgXQogICogdG8gdGltZSBzbGljZSB2YWx1ZXM6IFs4MDBtcyAuLi4gMTAw bXMgLi4uIDVtc10KQEAgLTE5Myw4ICsxMzYsOCBAQAogCiBzdHJ1Y3QgcHJpb19hcnJheSB7CiAJ dW5zaWduZWQgaW50IG5yX2FjdGl2ZTsKLQlERUNMQVJFX0JJVE1BUChiaXRtYXAsIE1BWF9QUklP KzEpOyAvKiBpbmNsdWRlIDEgYml0IGZvciBkZWxpbWl0ZXIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFk IHF1ZXVlW01BWF9QUklPXTsKKwlERUNMQVJFX0JJVE1BUChiaXRtYXAsIE1BWF9SUV9QUklPKzEp OyAvKiBpbmNsdWRlIDEgYml0IGZvciBkZWxpbWl0ZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1 ZXVlW01BWF9SUV9QUklPXTsKIH07CiAKIC8qCkBAIC0yMjYsMTIgKzE2OSwxMCBAQAogCSAqLwog CXVuc2lnbmVkIGxvbmcgbnJfdW5pbnRlcnJ1cHRpYmxlOwogCi0JdW5zaWduZWQgbG9uZyBleHBp cmVkX3RpbWVzdGFtcDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdGltZXN0YW1wX2xhc3RfdGljazsK IAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsICppZGxlOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKnBy ZXZfbW07Ci0Jc3RydWN0IHByaW9fYXJyYXkgKmFjdGl2ZSwgKmV4cGlyZWQsIGFycmF5c1syXTsK LQlpbnQgYmVzdF9leHBpcmVkX3ByaW87CisJc3RydWN0IHByaW9fYXJyYXkgKmFjdGl2ZSwgYXJy YXlzWzFdOwogCWF0b21pY190IG5yX2lvd2FpdDsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTcy NCwxNiArNjY1LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgX19ub3JtYWxfcHJpbyhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnApCiB7Ci0JaW50IGJvbnVzLCBwcmlvOwotCi0JYm9udXMgPSBDVVJSRU5U X0JPTlVTKHApIC0gTUFYX0JPTlVTIC8gMjsKLQotCXByaW8gPSBwLT5zdGF0aWNfcHJpbyAtIGJv bnVzOwotCWlmIChwcmlvIDwgTUFYX1JUX1BSSU8pCi0JCXByaW8gPSBNQVhfUlRfUFJJTzsKLQlp ZiAocHJpbyA+IE1BWF9QUklPLTEpCi0JCXByaW8gPSBNQVhfUFJJTy0xOwotCXJldHVybiBwcmlv OworCXJldHVybiBPVVRTSURFX1BSSU87CiB9CiAKIC8qCkBAIC04MDIsMTAgKzczNCw4IEBACiAK IC8qCiAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIG5vcm1hbCBwcmlvcml0eTogaS5lLiBwcmlv cml0eQotICogd2l0aG91dCB0YWtpbmcgUlQtaW5oZXJpdGFuY2UgaW50byBhY2NvdW50LiBNaWdo dCBiZQotICogYm9vc3RlZCBieSBpbnRlcmFjdGl2aXR5IG1vZGlmaWVycy4gQ2hhbmdlcyB1cG9u IGZvcmssCi0gKiBzZXRwcmlvIHN5c2NhbGxzLCBhbmQgd2hlbmV2ZXIgdGhlIGludGVyYWN0aXZp dHkKLSAqIGVzdGltYXRvciByZWNhbGN1bGF0ZXMuCisgKiB3aXRob3V0IHRha2luZyBSVC1pbmhl cml0YW5jZSBpbnRvIGFjY291bnQuIENoYW5nZXMgdXBvbiBmb3JrLAorICogc2V0cHJpbyBzeXNj YWxscy4KICAqLwogc3RhdGljIGlubGluZSBpbnQgbm9ybWFsX3ByaW8oc3RydWN0IHRhc2tfc3Ry dWN0ICpwKQogewpAQCAtODIxLDggKzc1MSw3IEBACiAvKgogICogQ2FsY3VsYXRlIHRoZSBjdXJy ZW50IHByaW9yaXR5LCBpLmUuIHRoZSBwcmlvcml0eQogICogdGFrZW4gaW50byBhY2NvdW50IGJ5 IHRoZSBzY2hlZHVsZXIuIFRoaXMgdmFsdWUgbWlnaHQKLSAqIGJlIGJvb3N0ZWQgYnkgUlQgdGFz a3MsIG9yIG1pZ2h0IGJlIGJvb3N0ZWQgYnkKLSAqIGludGVyYWN0aXZpdHkgbW9kaWZpZXJzLiBX aWxsIGJlIFJUIGlmIHRoZSB0YXNrIGdvdAorICogYmUgYm9vc3RlZCBieSBSVCB0YXNrcy4gV2ls bCBiZSBSVCBpZiB0aGUgdGFzayBnb3QKICAqIFJULWJvb3N0ZWQuIElmIG5vdCB0aGVuIGl0IHJl dHVybnMgcC0+bm9ybWFsX3ByaW8uCiAgKi8KIHN0YXRpYyBpbnQgZWZmZWN0aXZlX3ByaW8oc3Ry dWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtODQzLDEyICs3NzIsOSBAQAogICovCiBzdGF0aWMgdm9p ZCBfX2FjdGl2YXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxKQog ewotCXN0cnVjdCBwcmlvX2FycmF5ICp0YXJnZXQgPSBycS0+YWN0aXZlOwogCiAJdHJhY2VfYWN0 aXZhdGVfdGFzayhwLCBycSk7Ci0JaWYgKGJhdGNoX3Rhc2socCkpCi0JCXRhcmdldCA9IHJxLT5l eHBpcmVkOwotCWVucXVldWVfdGFzayhwLCB0YXJnZXQpOworCWVucXVldWVfdGFzayhwLCBycS0+ YWN0aXZlKTsKIAlpbmNfbnJfcnVubmluZyhwLCBycSk7CiB9CiAKQEAgLTg2MSw4MSArNzg3LDEx IEBACiAJaW5jX25yX3J1bm5pbmcocCwgcnEpOwogfQogCi0vKgotICogUmVjYWxjdWxhdGUgcC0+ bm9ybWFsX3ByaW8gYW5kIHAtPnByaW8gYWZ0ZXIgaGF2aW5nIHNsZXB0LAotICogdXBkYXRpbmcg dGhlIHNsZWVwLWF2ZXJhZ2UgdG9vOgotICovCi1zdGF0aWMgaW50IHJlY2FsY190YXNrX3ByaW8o c3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIGxvbmcgbm93KQotewotCS8qIENh bGxlciBtdXN0IGFsd2F5cyBlbnN1cmUgJ25vdyA+PSBwLT50aW1lc3RhbXAnICovCi0JdW5zaWdu ZWQgbG9uZyBzbGVlcF90aW1lID0gbm93IC0gcC0+dGltZXN0YW1wOwotCi0JaWYgKGJhdGNoX3Rh c2socCkgfHwgc2NoZWRfaW50ZXJhY3RpdmUgPT0gMCkKLQkJc2xlZXBfdGltZSA9IDA7Ci0KLQlp ZiAobGlrZWx5KHNsZWVwX3RpbWUgPiAwKSkgewotCQkvKgotCQkgKiBUaGlzIGNlaWxpbmcgaXMg c2V0IHRvIHRoZSBsb3dlc3QgcHJpb3JpdHkgdGhhdCB3b3VsZCBhbGxvdwotCQkgKiBhIHRhc2sg dG8gYmUgcmVpbnNlcnRlZCBpbnRvIHRoZSBhY3RpdmUgYXJyYXkgb24gdGltZXNsaWNlCi0JCSAq IGNvbXBsZXRpb24uCi0JCSAqLwotCQl1bnNpZ25lZCBsb25nIGNlaWxpbmcgPSBJTlRFUkFDVElW RV9TTEVFUChwKTsKLQotCQlpZiAocC0+bW0gJiYgc2xlZXBfdGltZSA+IGNlaWxpbmcgJiYgcC0+ c2xlZXBfYXZnIDwgY2VpbGluZykgewotCQkJLyoKLQkJCSAqIFByZXZlbnRzIHVzZXIgdGFza3Mg ZnJvbSBhY2hpZXZpbmcgYmVzdCBwcmlvcml0eQotCQkJICogd2l0aCBvbmUgc2luZ2xlIGxhcmdl IGVub3VnaCBzbGVlcC4KLQkJCSAqLwotCQkJcC0+c2xlZXBfYXZnID0gY2VpbGluZzsKLQkJCS8q Ci0JCQkgKiBVc2luZyBJTlRFUkFDVElWRV9TTEVFUCgpIGFzIGEgY2VpbGluZyBwbGFjZXMgYQot CQkJICogbmljZSgwKSB0YXNrIDFtcyBzbGVlcCBhd2F5IGZyb20gcHJvbW90aW9uLCBhbmQKLQkJ CSAqIGdpdmVzIGl0IDcwMG1zIHRvIHJvdW5kLXJvYmluIHdpdGggbm8gY2hhbmNlIG9mCi0JCQkg KiBiZWluZyBkZW1vdGVkLiAgVGhpcyBpcyBtb3JlIHRoYW4gZ2VuZXJvdXMsIHNvCi0JCQkgKiBt YXJrIHRoaXMgc2xlZXAgYXMgbm9uLWludGVyYWN0aXZlIHRvIHByZXZlbnQgdGhlCi0JCQkgKiBv bi1ydW5xdWV1ZSBib251cyBsb2dpYyBmcm9tIGludGVydmVuaW5nIHNob3VsZAotCQkJICogdGhp cyB0YXNrIG5vdCByZWNlaXZlIGNwdSBpbW1lZGlhdGVseS4KLQkJCSAqLwotCQkJcC0+c2xlZXBf dHlwZSA9IFNMRUVQX05PTklOVEVSQUNUSVZFOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFRh c2tzIHdha2luZyBmcm9tIHVuaW50ZXJydXB0aWJsZSBzbGVlcCBhcmUKLQkJCSAqIGxpbWl0ZWQg aW4gdGhlaXIgc2xlZXBfYXZnIHJpc2UgYXMgdGhleQotCQkJICogYXJlIGxpa2VseSB0byBiZSB3 YWl0aW5nIG9uIEkvTwotCQkJICovCi0JCQlpZiAocC0+c2xlZXBfdHlwZSA9PSBTTEVFUF9OT05J TlRFUkFDVElWRSAmJiBwLT5tbSkgewotCQkJCWlmIChwLT5zbGVlcF9hdmcgPj0gY2VpbGluZykK LQkJCQkJc2xlZXBfdGltZSA9IDA7Ci0JCQkJZWxzZSBpZiAocC0+c2xlZXBfYXZnICsgc2xlZXBf dGltZSA+PQotCQkJCQkgY2VpbGluZykgewotCQkJCQkJcC0+c2xlZXBfYXZnID0gY2VpbGluZzsK LQkJCQkJCXNsZWVwX3RpbWUgPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJLyoKLQkJCSAqIFRoaXMg Y29kZSBnaXZlcyBhIGJvbnVzIHRvIGludGVyYWN0aXZlIHRhc2tzLgotCQkJICoKLQkJCSAqIFRo ZSBib29zdCB3b3JrcyBieSB1cGRhdGluZyB0aGUgJ2F2ZXJhZ2Ugc2xlZXAgdGltZScKLQkJCSAq IHZhbHVlIGhlcmUsIGJhc2VkIG9uIC0+dGltZXN0YW1wLiBUaGUgbW9yZSB0aW1lIGEKLQkJCSAq IHRhc2sgc3BlbmRzIHNsZWVwaW5nLCB0aGUgaGlnaGVyIHRoZSBhdmVyYWdlIGdldHMgLQotCQkJ ICogYW5kIHRoZSBoaWdoZXIgdGhlIHByaW9yaXR5IGJvb3N0IGdldHMgYXMgd2VsbC4KLQkJCSAq LwotCQkJcC0+c2xlZXBfYXZnICs9IHNsZWVwX3RpbWU7Ci0KLQkJfQotCQlpZiAocC0+c2xlZXBf YXZnID4gTlNfTUFYX1NMRUVQX0FWRykKLQkJCXAtPnNsZWVwX2F2ZyA9IE5TX01BWF9TTEVFUF9B Vkc7Ci0JfQotCi0JcmV0dXJuIGVmZmVjdGl2ZV9wcmlvKHApOwotfQogCiAvKgotICogYWN0aXZh dGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZSBhbmQgZG8gcHJpb3JpdHkgcmVj YWxjdWxhdGlvbgorICogYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1 ZQogICoKLSAqIFVwZGF0ZSBhbGwgdGhlIHNjaGVkdWxpbmcgc3RhdGlzdGljcyBzdHVmZi4gKHNs ZWVwIGF2ZXJhZ2UKLSAqIGNhbGN1bGF0aW9uLCBwcmlvcml0eSBtb2RpZmllcnMsIGV0Yy4pCisg KiBVcGRhdGUgYWxsIHRoZSBzY2hlZHVsaW5nIHN0YXRpc3RpY3Mgc3R1ZmYuCiAgKi8KIHN0YXRp YyB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJx LCBpbnQgbG9jYWwpCiB7CkBAIC05NTEsMzEgKzgwNyw4IEBACiAJfQogI2VuZGlmCiAKLQlpZiAo IXJ0X3Rhc2socCkpCi0JCXAtPnByaW8gPSByZWNhbGNfdGFza19wcmlvKHAsIG5vdyk7CisJcC0+ cHJpbyA9IGVmZmVjdGl2ZV9wcmlvKHApOwogCi0JLyoKLQkgKiBUaGlzIGNoZWNrcyB0byBtYWtl IHN1cmUgaXQncyBub3QgYW4gdW5pbnRlcnJ1cHRpYmxlIHRhc2sKLQkgKiB0aGF0IGlzIG5vdyB3 YWtpbmcgdXAuCi0JICovCi0JaWYgKHAtPnNsZWVwX3R5cGUgPT0gU0xFRVBfTk9STUFMKSB7Ci0J CS8qCi0JCSAqIFRhc2tzIHdoaWNoIHdlcmUgd29rZW4gdXAgYnkgaW50ZXJydXB0cyAoaWUuIGh3 IGV2ZW50cykKLQkJICogYXJlIG1vc3QgbGlrZWx5IG9mIGludGVyYWN0aXZlIG5hdHVyZS4gU28g d2UgZ2l2ZSB0aGVtCi0JCSAqIHRoZSBjcmVkaXQgb2YgZXh0ZW5kaW5nIHRoZWlyIHNsZWVwIHRp bWUgdG8gdGhlIHBlcmlvZAotCQkgKiBvZiB0aW1lIHRoZXkgc3BlbmQgb24gdGhlIHJ1bnF1ZXVl LCB3YWl0aW5nIGZvciBleGVjdXRpb24KLQkJICogb24gYSBDUFUsIGZpcnN0IHRpbWUgYXJvdW5k OgotCQkgKi8KLQkJaWYgKGluX2ludGVycnVwdCgpKQotCQkJcC0+c2xlZXBfdHlwZSA9IFNMRUVQ X0lOVEVSUlVQVEVEOwotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBOb3JtYWwgZmlyc3QtdGltZSB3 YWtldXBzIGdldCBhIGNyZWRpdCB0b28gZm9yCi0JCQkgKiBvbi1ydW5xdWV1ZSB0aW1lLCBidXQg aXQgd2lsbCBiZSB3ZWlnaHRlZCBkb3duOgotCQkJICovCi0JCQlwLT5zbGVlcF90eXBlID0gU0xF RVBfSU5URVJBQ1RJVkU7Ci0JCX0KLQl9CiAJcC0+dGltZXN0YW1wID0gbm93OwogCiAJX19hY3Rp dmF0ZV90YXNrKHAsIHJxKTsKQEAgLTEwNDksNiArODgyLDggQEAKIH0KIAogI2lmZGVmIENPTkZJ R19TTVAKKy8qCittb3ZlIHRvIHNjaGVkLmgKIHN0cnVjdCBtaWdyYXRpb25fcmVxIHsKIAlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKQEAgLTEwNTcsNiArODkyLDcgQEAKIAogCXN0cnVjdCBjb21w bGV0aW9uIGRvbmU7CiB9OworKi8KIAogLyoKICAqIFRoZSB0YXNrJ3MgcnVucXVldWUgbG9jayBt dXN0IGJlIGhlbGQuCkBAIC0xMjM2LDYgKzEwNzIsMTI2IEBACiB9CiAKIC8qCisgKiBmaW5kX25l aWdoYm9yX2lkbGVzdF9jcHVfd2FrZSAtIGZpbmQgdGhlIG5laWdoYm9yIGlkbGVzdCBydW5xdWV1 ZSBhbW9uZyB0aGUgY3B1LgorICogeW91IG9ubHkgaGF2ZSB0byBiYWxhbmNlIHRvIHlvdSBuZWln aGJvciBjcHUuIGlmIGV2ZXJ5IGNwdSBiYWxhbmNlIHRvIGl0J3MgbmVpZ2hib3IsdGhlbiAKKyAq IGFsbCBjcHUgaXMgYmFsYW5jZS4gaSBjYWxsIGl0IG9jZWFuIGJhbGFuY2UuCisgKiBuZWlnaGJv ciByYW5nZSBtdXN0IGJpZyBlbm91Z2ggdG8gbmVpZ2hib3Igbm9kZSBjcHUuIGkgc2V0IGl0IHRv IDE2LgorICovCitzdGF0aWMgaW50CitmaW5kX25laWdoYm9yX2lkbGVzdF9jcHVfd2FrZSggc3Ry dWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KQoreworCWNwdW1hc2tfdCB0bXAsIHRtcDE7CisJ bG9uZyBsb2FkLCBtaW5fbG9hZDsKKwlpbnQgaWRsZXN0ID0gY3B1OworCWludCBpLCBqLCBrOwor CisJY3B1c19hbmQodG1wMSwgcC0+Y3B1c19hbGxvd2VkLCBjcHVfb25saW5lX21hcCk7CQorCWsg PSBjcHVzX3dlaWdodCh0bXAxKTsKKy8qCisgKiB3amg6IFhYWCB0aGlzIGNvZGUgbmVlZCBvcHRp bWFsaXplCisgKi8KKwlpZiAoayA+IDE2KSB7CisJCWNwdXNfY2xlYXIodG1wKTsKKwkJY3B1X3Nl dChjcHUsIHRtcCk7CisJCWo9Y3B1OworCQlmb3IgKGkgPTAgOyBpIDwgODsgaSsrKSB7CisJCQlq ID0gbmV4dF9jcHUoaiwgdG1wMSk7CisJCQlpZiAoaiA9PSBOUl9DUFVTKQorCQkJCWogPSBmaXJz dF9jcHUodG1wMSk7CisJCQljcHVfc2V0KGosIHRtcCk7CisJCX0KKwkJZm9yIChpID0wIDsgaSA8 IGsgLSAxNyA7IGkrKykgeworCQkJaiA9IG5leHRfY3B1KGosIHRtcDEpOworCQkJaWYgKGogPT0g TlJfQ1BVUykKKwkJCQlqID0gZmlyc3RfY3B1KHRtcDEpOworCQl9CisJCWZvciAoaSA9MCA7IGkg PCA4OyBpKyspIHsKKwkJCWogPSBuZXh0X2NwdShqLCB0bXAxKTsKKwkJCWlmIChqID09IE5SX0NQ VVMpCisJCQkJaiA9IGZpcnN0X2NwdSh0bXAxKTsKKwkJCWNwdV9zZXQoaiwgdG1wKTsKKwkJfQor CX0gZWxzZSB7CisJCWNwdXNfY2xlYXIodG1wKTsKKwkJY3B1c19vcih0bXAsIHRtcCwgdG1wMSk7 CisJfQorCisJbWluX2xvYWQgPSB3ZWlnaHRlZF9jcHVsb2FkKGNwdSkgLSAxIDsKKworCWZvcl9l YWNoX2NwdV9tYXNrKGksIHRtcCkgeworCQlsb2FkID0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKKwkJ LyoKKwkJICptYXkgY29uc2lkZXIgbWlncmF0aW9uIGNvc3QsIHVzZSBTRCBpbmZvcm1hdGlvbi4g LXdqaAorCQkgKi8KKworCQlpZiAobG9hZCA8IG1pbl9sb2FkIHx8IChsb2FkID09IG1pbl9sb2Fk ICYmIGkgPT0gY3B1KSkgeworCQkJbWluX2xvYWQgPSBsb2FkOworCQkJaWRsZXN0ID0gaTsKKwkJ fQorCX0KKworCXJldHVybiBpZGxlc3Q7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfbmVpZ2hib3Jf aWRsZXN0X2NwdV90aW1lX3NsaWNlKCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpCit7 CisJY3B1bWFza190IHRtcCwgdG1wMTsKKwlsb25nIGxvYWQsIG1pbl9sb2FkOworCWludCBpZGxl c3QgPSBjcHU7CisJaW50IGksIGo7CisKKwljcHVzX2FuZCh0bXAxLCBwLT5jcHVzX2FsbG93ZWQs IGNwdV9vbmxpbmVfbWFwKTsJCisJaSA9IGNwdXNfd2VpZ2h0KHRtcDEpOworLyoKKyAqIHdqaDog WFhYIHRoaXMgY29kZSBuZWVkIG9wdGltYWxpemUKKyAqLworCWlmIChpID4gMTYpIHsKKwkJY3B1 c19jbGVhcih0bXApOworCQljcHVfc2V0KGNwdSwgdG1wKTsKKwkJaj1jcHU7CisJCWZvciAoaSA9 MCA7IGkgPCA4OyBpKyspIHsKKwkJCWogPSBuZXh0X2NwdShqLCB0bXAxKTsKKwkJCWlmIChqID09 IE5SX0NQVVMpCisJCQkJaiA9IGZpcnN0X2NwdSh0bXAxKTsKKwkJCWNwdV9zZXQoaiwgdG1wKTsK KwkJfQorCQlmb3IgKGkgPTAgOyBpIDwgayAtIDE3IDsgaSsrKSB7CisJCQlqID0gbmV4dF9jcHUo aiwgdG1wMSk7CisJCQlpZiAoaiA9PSBOUl9DUFVTKQorCQkJCWogPSBmaXJzdF9jcHUodG1wMSk7 CisJCX0KKwkJZm9yIChpID0wIDsgaSA8IDg7IGkrKykgeworCQkJaiA9IG5leHRfY3B1KGosIHRt cDEpOworCQkJaWYgKGogPT0gTlJfQ1BVUykKKwkJCQlqID0gZmlyc3RfY3B1KHRtcDEpOworCQkJ Y3B1X3NldChqLCB0bXApOworCQl9CisJfSBlbHNlIHsKKwkJY3B1c19jbGVhcih0bXApOworCQlj cHVzX29yKHRtcCwgdG1wLCB0bXAxKTsKKwl9CisJLyoKKwkgKiBjcHUgYWZmaW5pdHkgLTEKKwkg Ki8KKwltaW5fbG9hZCA9IHdlaWdodGVkX2NwdWxvYWQoY3B1KSAtIHAtPmxvYWRfd2VpZ2h0IC0g MSA7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCB0bXApIHsKKwkJLyoKKwkJICptYXkgY29uc2lk ZXIgbWlncmF0aW9uIGNvc3QsIHVzZSBTRCBpbmZvcm1hdGlvbi4gLXdqaAorCQkgKi8KKwkJbG9h ZCA9IHdlaWdodGVkX2NwdWxvYWQoaSk7CisKKwkJaWYgKGxvYWQgPCBtaW5fbG9hZCB8fCAobG9h ZCA9PSBtaW5fbG9hZCAmJiBpID09IGNwdSkpIHsKKwkJCW1pbl9sb2FkID0gbG9hZDsKKwkJCWlk bGVzdCA9IGk7CisJCX0KKwl9CisKKwlyZXR1cm4gaWRsZXN0OworfQorCisvKgogICogZmluZF9p ZGxlc3RfcXVldWUgLSBmaW5kIHRoZSBpZGxlc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4g Z3JvdXAuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTE0NTcsOCArMTQxMywxMSBAQAogI2lmZGVmIENP TkZJR19TTVAKIAlpZiAodW5saWtlbHkodGFza19ydW5uaW5nKHJxLCBwKSkpCiAJCWdvdG8gb3V0 X2FjdGl2YXRlOwotCi0JbmV3X2NwdSA9IGNwdTsKKy8qCisgKndqaDogYWN0aXZlIGxvYWQgYmFs YW5jZQorICovCisJbmV3X2NwdSA9IGZpbmRfbmVpZ2hib3JfaWRsZXN0X2NwdV93YWtlKHAsIGNw dSk7CisJCWdvdG8gb3V0X3NldF9jcHU7CiAKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NudCk7 CiAJaWYgKGNwdSA9PSB0aGlzX2NwdSkgewpAQCAtMTU0OCwyMyArMTUwNyw4IEBACiAKIG91dF9h Y3RpdmF0ZToKICNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JaWYgKG9sZF9zdGF0ZSA9PSBUQVNL X1VOSU5URVJSVVBUSUJMRSkgeworCWlmIChvbGRfc3RhdGUgPT0gVEFTS19VTklOVEVSUlVQVElC TEUpIAogCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07Ci0JCS8qCi0JCSAqIFRhc2tzIG9uIGlu dm9sdW50YXJ5IHNsZWVwIGRvbid0IGVhcm4KLQkJICogc2xlZXBfYXZnIGJleW9uZCBqdXN0IGlu dGVyYWN0aXZlIHN0YXRlLgotCQkgKi8KLQkJcC0+c2xlZXBfdHlwZSA9IFNMRUVQX05PTklOVEVS QUNUSVZFOwotCX0gZWxzZQotCi0JLyoKLQkgKiBUYXNrcyB0aGF0IGhhdmUgbWFya2VkIHRoZWly IHNsZWVwIGFzIG5vbmludGVyYWN0aXZlIGdldAotCSAqIHdva2VuIHVwIHdpdGggdGhlaXIgc2xl ZXAgYXZlcmFnZSBub3Qgd2VpZ2h0ZWQgaW4gYW4KLQkgKiBpbnRlcmFjdGl2ZSB3YXkuCi0JICov Ci0JCWlmIChvbGRfc3RhdGUgJiBUQVNLX05PTklOVEVSQUNUSVZFKQotCQkJcC0+c2xlZXBfdHlw ZSA9IFNMRUVQX05PTklOVEVSQUNUSVZFOwotCiAKIAlhY3RpdmF0ZV90YXNrKHAsIHJxLCBjcHUg PT0gdGhpc19jcHUpOwogCS8qCkBAIC0xNTc2LDcgKzE1MjAsNyBAQAogCSAqIHRvIGJlIGNvbnNp ZGVyZWQgb24gdGhpcyBDUFUuKQogCSAqLwogCWlmICghc3luYyB8fCBjcHUgIT0gdGhpc19jcHUp IHsKLQkJaWYgKFRBU0tfUFJFRU1QVFNfQ1VSUihwLCBycSkpCisJCWlmIFRBU0tfUFJFRU1QVFNf Q1VSUihwLCBycSkKIAkJCXJlc2NoZWRfdGFzayhycS0+Y3Vycik7CiAJfQogCXN1Y2Nlc3MgPSAx OwpAQCAtMTY4NiwxNSArMTYzMCw2IEBACiAJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7 CiAJY3B1ID0gdGFza19jcHUocCk7CiAKLQkvKgotCSAqIFdlIGRlY3JlYXNlIHRoZSBzbGVlcCBh dmVyYWdlIG9mIGZvcmtpbmcgcGFyZW50cwotCSAqIGFuZCBjaGlsZHJlbiBhcyB3ZWxsLCB0byBr ZWVwIG1heC1pbnRlcmFjdGl2ZSB0YXNrcwotCSAqIGZyb20gZm9ya2luZyB0YXNrcyB0aGF0IGFy ZSBtYXgtaW50ZXJhY3RpdmUuIFRoZSBwYXJlbnQKLQkgKiAoY3VycmVudCkgaXMgZG9uZSBmdXJ0 aGVyIGRvd24sIHVuZGVyIGl0cyBsb2NrLgotCSAqLwotCXAtPnNsZWVwX2F2ZyA9IEpJRkZJRVNf VE9fTlMoQ1VSUkVOVF9CT05VUyhwKSAqCi0JCUNISUxEX1BFTkFMVFkgLyAxMDAgKiBNQVhfU0xF RVBfQVZHIC8gTUFYX0JPTlVTKTsKLQogCXAtPnByaW8gPSBlZmZlY3RpdmVfcHJpbyhwKTsKIAog CWlmIChsaWtlbHkoY3B1ID09IHRoaXNfY3B1KSkgewpAQCAtMTczOSwxNSArMTY3NCw5IEBACiAJ CWlmIChUQVNLX1BSRUVNUFRTX0NVUlIocCwgcnEpKQogCQkJcmVzY2hlZF90YXNrKHJxLT5jdXJy KTsKIAotCQkvKgotCQkgKiBQYXJlbnQgYW5kIGNoaWxkIGFyZSBvbiBkaWZmZXJlbnQgQ1BVcywg bm93IGdldCB0aGUKLQkJICogcGFyZW50IHJ1bnF1ZXVlIHRvIHVwZGF0ZSB0aGUgcGFyZW50J3Mg LT5zbGVlcF9hdmc6Ci0JCSAqLwogCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAkJdGhp c19ycSA9IHRhc2tfcnFfbG9jayhjdXJyZW50LCAmZmxhZ3MpOwogCX0KLQljdXJyZW50LT5zbGVl cF9hdmcgPSBKSUZGSUVTX1RPX05TKENVUlJFTlRfQk9OVVMoY3VycmVudCkgKgotCQlQQVJFTlRf UEVOQUxUWSAvIDEwMCAqIE1BWF9TTEVFUF9BVkcgLyBNQVhfQk9OVVMpOwogCXRyYWNlX3NjaGVk X3dha2V1cF9uZXcodGhpc19ycSwgcCwgMSk7CiAJdGFza19ycV91bmxvY2sodGhpc19ycSwgJmZs YWdzKTsKIH0KQEAgLTE3NjYsMTAgKzE2OTUsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJ c3RydWN0IHJxICpycTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QqIGNyZWF0b3IgPSBOVUxMOwotCS8q Ci0JICogSWYgdGhlIGNoaWxkIHdhcyBhIChyZWxhdGl2ZS0pIENQVSBob2cgdGhlbiBkZWNyZWFz ZQotCSAqIHRoZSBzbGVlcF9hdmcgb2YgdGhlIHBhcmVudCBhcyB3ZWxsLgotCSAqLwogCiAgICAg ICAgIGlmIChwLT5maXJzdF90aW1lX3NsaWNlKSB7CiAgICAgICAgICAgICAgICAgY3JlYXRvciA9 IGZpbmRfdGFza19ieV9waWQoKHBpZF90KXAtPmZpcnN0X3RpbWVfc2xpY2UpOwpAQCAtMTc3OSwx MCArMTcwNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoY3JlYXRv ci0+dGltZV9zbGljZSA+IHRhc2tfdGltZXNsaWNlKHApKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3JlYXRvci0+dGltZV9zbGljZSA9IHRhc2tfdGltZXNsaWNlKHApOwogCi0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAocC0+c2xlZXBfYXZnIDwgY3JlYXRvci0+c2xlZXBf YXZnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLT5zbGVlcF9hdmcg PSBjcmVhdG9yLT5zbGVlcF9hdmcgLwotCQkoRVhJVF9XRUlHSFQgKyAxKSAqIEVYSVRfV0VJR0hU ICsgcC0+c2xlZXBfYXZnIC8KLQkJKEVYSVRfV0VJR0hUICsgMSk7CiAJdGFza19ycV91bmxvY2so cnEsICZmbGFncyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMzEwLDcgKzIy MzEsNyBAQAogCXJldHVybiAxOwogfQogCi0jZGVmaW5lIHJxX2Jlc3RfcHJpbyhycSkgbWluKChy cSktPmN1cnItPnByaW8sIChycSktPmJlc3RfZXhwaXJlZF9wcmlvKQorI2RlZmluZSBycV9iZXN0 X3ByaW8ocnEpICgocnEpLT5jdXJyLT5wcmlvKQogCiAvKgogICogbW92ZV90YXNrcyB0cmllcyB0 byBtb3ZlIHVwIHRvIG1heF9ucl9tb3ZlIHRhc2tzIGFuZCBtYXhfbG9hZF9tb3ZlIHdlaWdodGVk CkBAIC0yMzQ3LDM0ICsyMjY4LDE3IEBACiAJICovCiAJYmVzdF9wcmlvX3NlZW4gPSBiZXN0X3By aW8gPT0gYnVzaWVzdC0+Y3Vyci0+cHJpbzsKIAotCS8qCi0JICogV2UgZmlyc3QgY29uc2lkZXIg ZXhwaXJlZCB0YXNrcy4gVGhvc2Ugd2lsbCBsaWtlbHkgbm90IGJlCi0JICogZXhlY3V0ZWQgaW4g dGhlIG5lYXIgZnV0dXJlLCBhbmQgdGhleSBhcmUgbW9zdCBsaWtlbHkgdG8KLQkgKiBiZSBjYWNo ZS1jb2xkLCB0aHVzIHN3aXRjaGluZyBDUFVzIGhhcyB0aGUgbGVhc3QgZWZmZWN0Ci0JICogb24g dGhlbS4KLQkgKi8KLQlpZiAoYnVzaWVzdC0+ZXhwaXJlZC0+bnJfYWN0aXZlKSB7Ci0JCWFycmF5 ID0gYnVzaWVzdC0+ZXhwaXJlZDsKLQkJZHN0X2FycmF5ID0gdGhpc19ycS0+ZXhwaXJlZDsKLQl9 IGVsc2UgewotCQlhcnJheSA9IGJ1c2llc3QtPmFjdGl2ZTsKLQkJZHN0X2FycmF5ID0gdGhpc19y cS0+YWN0aXZlOwotCX0KKwlhcnJheSA9IGJ1c2llc3QtPmFjdGl2ZTsKKwlkc3RfYXJyYXkgPSB0 aGlzX3JxLT5hY3RpdmU7CiAKLW5ld19hcnJheToKIAkvKiBTdGFydCBzZWFyY2hpbmcgYXQgcHJp b3JpdHkgMDogKi8KIAlpZHggPSAwOwogc2tpcF9iaXRtYXA6CiAJaWYgKCFpZHgpCiAJCWlkeCA9 IHNjaGVkX2ZpbmRfZmlyc3RfYml0KGFycmF5LT5iaXRtYXApOwogCWVsc2UKLQkJaWR4ID0gZmlu ZF9uZXh0X2JpdChhcnJheS0+Yml0bWFwLCBNQVhfUFJJTywgaWR4KTsKLQlpZiAoaWR4ID49IE1B WF9QUklPKSB7Ci0JCWlmIChhcnJheSA9PSBidXNpZXN0LT5leHBpcmVkICYmIGJ1c2llc3QtPmFj dGl2ZS0+bnJfYWN0aXZlKSB7Ci0JCQlhcnJheSA9IGJ1c2llc3QtPmFjdGl2ZTsKLQkJCWRzdF9h cnJheSA9IHRoaXNfcnEtPmFjdGl2ZTsKLQkJCWdvdG8gbmV3X2FycmF5OwotCQl9CisJCWlkeCA9 IGZpbmRfbmV4dF9iaXQoYXJyYXktPmJpdG1hcCwgTUFYX1JRX1BSSU8sIGlkeCk7CisJaWYgKGlk eCA+PSBNQVhfUlFfUFJJTykgewogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTMxNDUsMjkgKzMwNDks NiBAQAogfQogCiAvKgotICogV2UgcGxhY2UgaW50ZXJhY3RpdmUgdGFza3MgYmFjayBpbnRvIHRo ZSBhY3RpdmUgYXJyYXksIGlmIHBvc3NpYmxlLgotICoKLSAqIFRvIGd1YXJhbnRlZSB0aGF0IHRo aXMgZG9lcyBub3Qgc3RhcnZlIGV4cGlyZWQgdGFza3Mgd2UgaWdub3JlIHRoZQotICogaW50ZXJh Y3Rpdml0eSBvZiBhIHRhc2sgaWYgdGhlIGZpcnN0IGV4cGlyZWQgdGFzayBoYWQgdG8gd2FpdCBt b3JlCi0gKiB0aGFuIGEgJ3JlYXNvbmFibGUnIGFtb3VudCBvZiB0aW1lLiBUaGlzIGRlYWRsaW5l IHRpbWVvdXQgaXMKLSAqIGxvYWQtZGVwZW5kZW50LCBhcyB0aGUgZnJlcXVlbmN5IG9mIGFycmF5 IHN3aXRjaGVkIGRlY3JlYXNlcyB3aXRoCi0gKiBpbmNyZWFzaW5nIG51bWJlciBvZiBydW5uaW5n IHRhc2tzLiBXZSBhbHNvIGlnbm9yZSB0aGUgaW50ZXJhY3Rpdml0eQotICogaWYgYSBiZXR0ZXIg c3RhdGljX3ByaW8gdGFzayBoYXMgZXhwaXJlZDoKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZXhw aXJlZF9zdGFydmluZyhzdHJ1Y3QgcnEgKnJxKQotewotCWlmIChycS0+Y3Vyci0+c3RhdGljX3By aW8gPiBycS0+YmVzdF9leHBpcmVkX3ByaW8pCi0JCXJldHVybiAxOwotCWlmICghU1RBUlZBVElP Tl9MSU1JVCB8fCAhcnEtPmV4cGlyZWRfdGltZXN0YW1wKQotCQlyZXR1cm4gMDsKLQlpZiAoc2No ZWRfaW50ZXJhY3RpdmUgPT0gMSkKLQkJcmV0dXJuIDE7Ci0JaWYgKGppZmZpZXMgLSBycS0+ZXhw aXJlZF90aW1lc3RhbXAgPiBTVEFSVkFUSU9OX0xJTUlUICogcnEtPm5yX3J1bm5pbmcpCi0JCXJl dHVybiAxOwotCXJldHVybiAwOwotfQotCi0vKgogICogQWNjb3VudCB1c2VyIGNwdSB0aW1lIHRv IGEgcHJvY2Vzcy4KICAqIEBwOiB0aGUgcHJvY2VzcyB0aGF0IHRoZSBjcHUgdGltZSBnZXRzIGFj Y291bnRlZCB0bwogICogQGhhcmRpcnFfb2Zmc2V0OiB0aGUgb2Zmc2V0IHRvIHN1YnRyYWN0IGZy b20gaGFyZGlycV9jb3VudCgpCkBAIC0zMjUxLDggKzMxMzIsMTAgQEAKIHsKIAl1bnNpZ25lZCBs b25nIGxvbmcgbm93ID0gc2NoZWRfY2xvY2soKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBj dXJyZW50OwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IG5ld19jcHUsIGNw dSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJ dW5zaWduZWQgaW50IHN0ZWFsX3RpY2tzOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwog CiAJdXBkYXRlX2NwdV9jbG9jayhwLCBycSwgbm93KTsKIApAQCAtMzI2MSw3ICszMTQ0LDkgQEAK IAlpZiAocCA9PSBycS0+aWRsZSkgewogCQlpZiAod2FrZV9wcmlvcml0eV9zbGVlcGVyKHJxKSkK IAkJCWdvdG8gb3V0OworLyogd2poOiBubyBwdWxsIGJhbGFuY2UKIAkJcmViYWxhbmNlX3RpY2so Y3B1LCBycSwgU0NIRURfSURMRSk7CisqLwogCQlyZXR1cm47CiAJfQogCkBAIC0zMjkzLDUxICsz MTc4LDU3IEBACiAJCX0KIAkJZ290byBvdXRfdW5sb2NrOwogCX0KKworLyoKKyAqIHdqaDogaW4g b3JkZXIgbmljZSB0byBpbnRlcmFjdGl2ZSB0YXNrLElOU0lERV9QUklPIHRhc2sgdXNlIG1vcmUg dGljay4KKyAqIG1heWJlIHJlZGVmaW5lIERFRl9USU1FU0xJQ0UuCisgKiBzdGVhbF9zdGlja3Mg PSA1MCAtIDQ5L3JxLT5ucl9ydW5uaW5nIAorKi8KKwkKKwlpZiAocC0+cHJpbyA9PSBJTlNJREVf UFJJTykgeworCQlzdGVhbF90aWNrcyA9IG1pbihycS0+bnJfcnVubmluZyoyLCA1MCk7CisJCWlm IChwLT50aW1lX3NsaWNlID4gc3RlYWxfdGlja3MpIHsKKwkJCXAtPnRpbWVfc2xpY2UgLT0gc3Rl YWxfdGlja3M7CisJCX1lbHNlIHsKKwkJCXAtPnRpbWVfc2xpY2UgPSAxOworCQl9CisJfQorCiAJ aWYgKCEtLXAtPnRpbWVfc2xpY2UpIHsKIAkJZGVxdWV1ZV90YXNrKHAsIHJxLT5hY3RpdmUpOwog CQlzZXRfdHNrX25lZWRfcmVzY2hlZChwKTsKLQkJcC0+cHJpbyA9IGVmZmVjdGl2ZV9wcmlvKHAp OwogCQlwLT50aW1lX3NsaWNlID0gdGFza190aW1lc2xpY2UocCk7CiAJCXAtPmZpcnN0X3RpbWVf c2xpY2UgPSAwOwotCi0JCWlmICghcnEtPmV4cGlyZWRfdGltZXN0YW1wKQotCQkJcnEtPmV4cGly ZWRfdGltZXN0YW1wID0gamlmZmllczsKLQkJaWYgKCFUQVNLX0lOVEVSQUNUSVZFKHApIHx8IGV4 cGlyZWRfc3RhcnZpbmcocnEpKSB7Ci0JCQllbnF1ZXVlX3Rhc2socCwgcnEtPmV4cGlyZWQpOwot CQkJaWYgKHAtPnN0YXRpY19wcmlvIDwgcnEtPmJlc3RfZXhwaXJlZF9wcmlvKQotCQkJCXJxLT5i ZXN0X2V4cGlyZWRfcHJpbyA9IHAtPnN0YXRpY19wcmlvOwotCQl9IGVsc2UKKwkJaWYgbm9ybWFs X3Rhc2socCkgeworCQkJcC0+cHJpbyA9IElOU0lERV9QUklPOwogCQkJZW5xdWV1ZV90YXNrKHAs IHJxLT5hY3RpdmUpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFByZXZlbnQgYSB0b28gbG9uZyB0 aW1lc2xpY2UgYWxsb3dpbmcgYSB0YXNrIHRvIG1vbm9wb2xpemUKLQkJICogdGhlIENQVS4gV2Ug ZG8gdGhpcyBieSBzcGxpdHRpbmcgdXAgdGhlIHRpbWVzbGljZSBpbnRvCi0JCSAqIHNtYWxsZXIg cGllY2VzLgotCQkgKgotCQkgKiBOb3RlOiB0aGlzIGRvZXMgbm90IG1lYW4gdGhlIHRhc2sncyB0 aW1lc2xpY2VzIGV4cGlyZSBvcgotCQkgKiBnZXQgbG9zdCBpbiBhbnkgd2F5LCB0aGV5IGp1c3Qg bWlnaHQgYmUgcHJlZW1wdGVkIGJ5Ci0JCSAqIGFub3RoZXIgdGFzayBvZiBlcXVhbCBwcmlvcml0 eS4gKG9uZSB3aXRoIGhpZ2hlcgotCQkgKiBwcmlvcml0eSB3b3VsZCBoYXZlIHByZWVtcHRlZCB0 aGlzIHRhc2sgYWxyZWFkeS4pIFdlCi0JCSAqIHJlcXVldWUgdGhpcyB0YXNrIHRvIHRoZSBlbmQg b2YgdGhlIGxpc3Qgb24gdGhpcyBwcmlvcml0eQotCQkgKiBsZXZlbCwgd2hpY2ggaXMgaW4gZXNz ZW5jZSBhIHJvdW5kLXJvYmluIG9mIHRhc2tzIHdpdGgKLQkJICogZXF1YWwgcHJpb3JpdHkuCi0J CSAqCi0JCSAqIFRoaXMgb25seSBhcHBsaWVzIHRvIHRhc2tzIGluIHRoZSBpbnRlcmFjdGl2ZQot CQkgKiBkZWx0YSByYW5nZSB3aXRoIGF0IGxlYXN0IFRJTUVTTElDRV9HUkFOVUxBUklUWSB0byBy ZXF1ZXVlLgotCQkgKi8KLQkJaWYgKFRBU0tfSU5URVJBQ1RJVkUocCkgJiYgISgodGFza190aW1l c2xpY2UocCkgLQotCQkJcC0+dGltZV9zbGljZSkgJSBUSU1FU0xJQ0VfR1JBTlVMQVJJVFkocCkp ICYmCi0JCQkocC0+dGltZV9zbGljZSA+PSBUSU1FU0xJQ0VfR1JBTlVMQVJJVFkocCkpICYmCi0J CQkocC0+YXJyYXkgPT0gcnEtPmFjdGl2ZSkpIHsKLQotCQkJcmVxdWV1ZV90YXNrKHAsIHJxLT5h Y3RpdmUpOwotCQkJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CisJCX0gZWxzZSB7CisJCQllbnF1 ZXVlX3Rhc2socCwgcnEtPmFjdGl2ZSk7CisJCQkjaWZkZWYgQ09ORklHX1NNUAorCQkJLyoKKwkJ CSAqIGxvYWQgYmFsYW5jZSAKKwkJCSAqLworCQkJbmV3X2NwdSA9IGZpbmRfbmVpZ2hib3JfaWRs ZXN0X2NwdV90aW1lX3NsaWNlKHAsIGNwdSk7CisJCQlpZiAobmV3X2NwdSAhPSBjcHUpIHsKKwkJ CQlzcGluX3VubG9jaygmcnEtPmxvY2spOworCQkJCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFn cyk7CisJCQkJaWYgKG1pZ3JhdGVfdGFzayhwLCBuZXdfY3B1LCAmcC0+cmVxKSkgeworCQkJCQl0 YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwkJCQkJd2FrZV91cF9wcm9jZXNzKHJxLT5taWdy YXRpb25fdGhyZWFkKTsKKwkJCQl9IGVsc2UKKwkJCQkJdGFza19ycV91bmxvY2socnEsICZmbGFn cyk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQkjZW5kaWYKIAkJfQogCX0KIG91dF91bmxvY2s6 CiAJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIG91dDoKLQlyZWJhbGFuY2VfdGljayhjcHUsIHJx LCBOT1RfSURMRSk7CisvKiB3amg6IG5vIHB1bGwgbG9hZCBiYWxhbmNlCisqCXJlYmFsYW5jZV90 aWNrKGNwdSwgcnEsIE5PVF9JRExFKTsKKyovCis7CiB9CiAKICNpZmRlZiBDT05GSUdfU0NIRURf U01UCkBAIC0zNTA3LDEyICszMzk4LDYgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50 IGludGVyYWN0aXZlX3NsZWVwKGVudW0gc2xlZXBfdHlwZSBzbGVlcF90eXBlKQotewotCXJldHVy biAoc2xlZXBfdHlwZSA9PSBTTEVFUF9JTlRFUkFDVElWRSB8fAotCQlzbGVlcF90eXBlID09IFNM RUVQX0lOVEVSUlVQVEVEKTsKLX0KLQogLyoKICAqIHNjaGVkdWxlKCkgaXMgdGhlIG1haW4gc2No ZWR1bGVyIGZ1bmN0aW9uLgogICovCkBAIC0zNTIyLDggKzM0MDcsNyBAQAogCXN0cnVjdCBwcmlv X2FycmF5ICphcnJheTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZTsKIAl1bnNpZ25lZCBsb25n IGxvbmcgbm93OwotCXVuc2lnbmVkIGxvbmcgcnVuX3RpbWU7Ci0JaW50IGNwdSwgaWR4LCBuZXdf cHJpbzsKKwlpbnQgY3B1LCBpZHg7CiAJbG9uZyAqc3dpdGNoX2NvdW50OwogCXN0cnVjdCBycSAq cnE7CiAKQEAgLTM1NTksMTggKzM0NDMsNyBAQAogCXNjaGVkc3RhdF9pbmMocnEsIHNjaGVkX2Nu dCk7CiAJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwogCW5vdyA9IHNjaGVkX2Nsb2NrKCk7Ci0J aWYgKGxpa2VseSgobG9uZyBsb25nKShub3cgLSBwcmV2LT50aW1lc3RhbXApIDwgTlNfTUFYX1NM RUVQX0FWRykpIHsKLQkJcnVuX3RpbWUgPSBub3cgLSBwcmV2LT50aW1lc3RhbXA7Ci0JCWlmICh1 bmxpa2VseSgobG9uZyBsb25nKShub3cgLSBwcmV2LT50aW1lc3RhbXApIDwgMCkpCi0JCQlydW5f dGltZSA9IDA7Ci0JfSBlbHNlCi0JCXJ1bl90aW1lID0gTlNfTUFYX1NMRUVQX0FWRzsKIAotCS8q Ci0JICogVGFza3MgY2hhcmdlZCBwcm9wb3J0aW9uYXRlbHkgbGVzcyBydW5fdGltZSBhdCBoaWdo IHNsZWVwX2F2ZyB0bwotCSAqIGRlbGF5IHRoZW0gbG9zaW5nIHRoZWlyIGludGVyYWN0aXZlIHN0 YXR1cwotCSAqLwotCXJ1bl90aW1lIC89IChDVVJSRU5UX0JPTlVTKHByZXYpID8gOiAxKTsKIAog CWlmICh1bmxpa2VseShwcmV2LT5mbGFncyAmIFBGX0RFQUQpKQogCQlwcmV2LT5zdGF0ZSA9IEVY SVRfREVBRDsKQEAgLTM1OTIsNDkgKzM0NjUsMjIgQEAKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3Jf aWQoKTsKIAlpZiAodW5saWtlbHkoIXJxLT5ucl9ydW5uaW5nKSkgeworLyogd2poOiBubyBwdWxs IGxvYWRiYWxhbmNlCiAJCWlkbGVfYmFsYW5jZShjcHUsIHJxKTsKKyovCiAJCWlmICghcnEtPm5y X3J1bm5pbmcpIHsKIAkJCW5leHQgPSBycS0+aWRsZTsKLQkJCXJxLT5leHBpcmVkX3RpbWVzdGFt cCA9IDA7CiAJCQl3YWtlX3NsZWVwaW5nX2RlcGVuZGVudChjcHUpOwogCQkJZ290byBzd2l0Y2hf dGFza3M7CiAJCX0KIAl9CiAKIAlhcnJheSA9IHJxLT5hY3RpdmU7Ci0JaWYgKHVubGlrZWx5KCFh cnJheS0+bnJfYWN0aXZlKSkgewotCQkvKgotCQkgKiBTd2l0Y2ggdGhlIGFjdGl2ZSBhbmQgZXhw aXJlZCBhcnJheXMuCi0JCSAqLwotCQlzY2hlZHN0YXRfaW5jKHJxLCBzY2hlZF9zd2l0Y2gpOwot CQlycS0+YWN0aXZlID0gcnEtPmV4cGlyZWQ7Ci0JCXJxLT5leHBpcmVkID0gYXJyYXk7Ci0JCWFy cmF5ID0gcnEtPmFjdGl2ZTsKLQkJcnEtPmV4cGlyZWRfdGltZXN0YW1wID0gMDsKLQkJcnEtPmJl c3RfZXhwaXJlZF9wcmlvID0gTUFYX1BSSU87Ci0JfQogCiAJaWR4ID0gc2NoZWRfZmluZF9maXJz dF9iaXQoYXJyYXktPmJpdG1hcCk7CiAJcXVldWUgPSBhcnJheS0+cXVldWUgKyBpZHg7CiAJbmV4 dCA9IGxpc3RfZW50cnkocXVldWUtPm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnVuX2xpc3Qp OwogCi0JaWYgKCFydF90YXNrKG5leHQpICYmIGludGVyYWN0aXZlX3NsZWVwKG5leHQtPnNsZWVw X3R5cGUpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyBkZWx0YSA9IG5vdyAtIG5leHQtPnRpbWVz dGFtcDsKLQkJaWYgKHVubGlrZWx5KChsb25nIGxvbmcpKG5vdyAtIG5leHQtPnRpbWVzdGFtcCkg PCAwKSkKLQkJCWRlbHRhID0gMDsKLQotCQlpZiAobmV4dC0+c2xlZXBfdHlwZSA9PSBTTEVFUF9J TlRFUkFDVElWRSkKLQkJCWRlbHRhID0gZGVsdGEgKiAoT05fUlVOUVVFVUVfV0VJR0hUICogMTI4 IC8gMTAwKSAvIDEyODsKLQotCQlhcnJheSA9IG5leHQtPmFycmF5OwotCQluZXdfcHJpbyA9IHJl Y2FsY190YXNrX3ByaW8obmV4dCwgbmV4dC0+dGltZXN0YW1wICsgZGVsdGEpOwotCi0JCWlmICh1 bmxpa2VseShuZXh0LT5wcmlvICE9IG5ld19wcmlvKSkgewotCQkJZGVxdWV1ZV90YXNrKG5leHQs IGFycmF5KTsKLQkJCW5leHQtPnByaW8gPSBuZXdfcHJpbzsKLQkJCWVucXVldWVfdGFzayhuZXh0 LCBhcnJheSk7Ci0JCX0KLQl9CiAJbmV4dC0+c2xlZXBfdHlwZSA9IFNMRUVQX05PUk1BTDsKIAlp ZiAoZGVwZW5kZW50X3NsZWVwZXIoY3B1LCBycSwgbmV4dCkpCiAJCW5leHQgPSBycS0+aWRsZTsK QEAgLTM2NDYsOSArMzQ5Miw2IEBACiAJY2xlYXJfdHNrX25lZWRfcmVzY2hlZChwcmV2KTsKIAly Y3VfcXNjdHJfaW5jKHRhc2tfY3B1KHByZXYpKTsKIAotCXByZXYtPnNsZWVwX2F2ZyAtPSBydW5f dGltZTsKLQlpZiAoKGxvbmcpcHJldi0+c2xlZXBfYXZnIDw9IDApCi0JCXByZXYtPnNsZWVwX2F2 ZyA9IDA7CiAJcHJldi0+dGltZXN0YW1wID0gcHJldi0+bGFzdF9yYW4gPSBub3c7CiAKIAlzY2hl ZF9pbmZvX3N3aXRjaChwcmV2LCBuZXh0KTsKQEAgLTQxNDksMTIgKzM5OTIsNiBAQAogCXAtPnBy aW8gPSBwcmlvOwogCiAJaWYgKGFycmF5KSB7Ci0JCS8qCi0JCSAqIElmIGNoYW5naW5nIHRvIGFu IFJUIHByaW9yaXR5IHRoZW4gcXVldWUgaXQKLQkJICogaW4gdGhlIGFjdGl2ZSBhcnJheSEKLQkJ ICovCi0JCWlmIChydF90YXNrKHApKQotCQkJYXJyYXkgPSBycS0+YWN0aXZlOwogCQllbnF1ZXVl X3Rhc2socCwgYXJyYXkpOwogCQkvKgogCQkgKiBSZXNjaGVkdWxlIGlmIHdlIGFyZSBjdXJyZW50 bHkgcnVubmluZyBvbiB0aGlzIHJ1bnF1ZXVlIGFuZApAQCAtNDI4OSw2ICs0MTI2LDEyIEBACiAg Ki8KIGludCB0YXNrX3ByaW8oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogeworLyoqCisg KiB3amg6CisJaWYgcnRfdGFzayhwKQkKKwkJcmV0dXJuIHAtPnByaW8gLSBNQVhfUlRfUFJJTzsK KwlyZXR1cm4gcC0+c3RhdGljX3ByaW8gKyBwLT5wcmlvIC0gTUFYX1JUX1BSSU8+PjE7CisgKi8K IAlyZXR1cm4gcC0+cHJpbyAtIE1BWF9SVF9QUklPOwogfQogCkBAIC00MzUyLDEwICs0MTk1LDYg QEAKIAkvKgogCSAqIFNDSEVEX0JBVENIIHRhc2tzIGFyZSB0cmVhdGVkIGFzIHBlcnBldHVhbCBD UFUgaG9nczoKIAkgKi8KLQlpZiAocG9saWN5ID09IFNDSEVEX0JBVENIKQotCQlwLT5zbGVlcF9h dmcgPSAwOwotCWlmIChwb2xpY3kgPT0gU0NIRURfTk9STUFMICYmIHNjaGVkX2ludGVyYWN0aXZl ID09IDApCi0JCXAtPnNsZWVwX2F2ZyA9IDA7CiAJc2V0X2xvYWRfd2VpZ2h0KHApOwogfQogCkBA IC00NzMzLDM1ICs0NTcyLDIxIEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX3lpZWxkKHZv aWQpCiB7CiAJc3RydWN0IHJxICpycSA9IHRoaXNfcnFfbG9jaygpOwotCXN0cnVjdCBwcmlvX2Fy cmF5ICphcnJheSA9IGN1cnJlbnQtPmFycmF5LCAqdGFyZ2V0ID0gcnEtPmV4cGlyZWQ7CisJc3Ry dWN0IHByaW9fYXJyYXkgKmFycmF5ID0gY3VycmVudC0+YXJyYXk7CiAKIAlzY2hlZHN0YXRfaW5j KHJxLCB5bGRfY250KTsKLQkvKgotCSAqIFdlIGltcGxlbWVudCB5aWVsZGluZyBieSBtb3Zpbmcg dGhlIHRhc2sgaW50byB0aGUgZXhwaXJlZAotCSAqIHF1ZXVlLgotCSAqCi0JICogKHNwZWNpYWwg cnVsZTogUlQgdGFza3Mgd2lsbCBqdXN0IHJvdW5kcm9iaW4gaW4gdGhlIGFjdGl2ZQotCSAqICBh cnJheS4pCi0JICovCi0JaWYgKHJ0X3Rhc2soY3VycmVudCkpCi0JCXRhcmdldCA9IHJxLT5hY3Rp dmU7CiAKLQlpZiAoYXJyYXktPm5yX2FjdGl2ZSA9PSAxKSB7CisJaWYgKGFycmF5LT5ucl9hY3Rp dmUgPT0gMSkKIAkJc2NoZWRzdGF0X2luYyhycSwgeWxkX2FjdF9lbXB0eSk7Ci0JCWlmICghcnEt PmV4cGlyZWQtPm5yX2FjdGl2ZSkKLQkJCXNjaGVkc3RhdF9pbmMocnEsIHlsZF9ib3RoX2VtcHR5 KTsKLQl9IGVsc2UgaWYgKCFycS0+ZXhwaXJlZC0+bnJfYWN0aXZlKQotCQlzY2hlZHN0YXRfaW5j KHJxLCB5bGRfZXhwX2VtcHR5KTsKIAotCWlmIChhcnJheSAhPSB0YXJnZXQpIHsKLQkJZGVxdWV1 ZV90YXNrKGN1cnJlbnQsIGFycmF5KTsKLQkJZW5xdWV1ZV90YXNrKGN1cnJlbnQsIHRhcmdldCk7 Ci0JfSBlbHNlCi0JCS8qCi0JCSAqIHJlcXVldWVfdGFzayBpcyBjaGVhcGVyIHNvIHBlcmZvcm0g dGhhdCBpZiBwb3NzaWJsZS4KLQkJICovCisJaWYgKHJ0X3Rhc2soY3VycmVudCkpCiAJCXJlcXVl dWVfdGFzayhjdXJyZW50LCBhcnJheSk7Ci0KKwllbHNlIHsKKwkJZGVxdWV1ZV90YXNrKGN1cnJl bnQsIGFycmF5KTsKKwkJaWYgbm9ybWFsX3Rhc2soY3VycmVudCkKKwkJCWN1cnJlbnQtPnByaW8g PSBJTlNJREVfUFJJTzsgCisJCWVucXVldWVfdGFzayhjdXJyZW50LCBhcnJheSk7CisJfQogCS8q CiAJICogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIGNhbGwgc2NoZWR1bGUoKSBhbnl3YXksIHRoZXJl J3MKIAkgKiBubyBuZWVkIHRvIHByZWVtcHQgb3IgZW5hYmxlIGludGVycnVwdHM6CkBAIC01MDk2 LDkgKzQ5MjEsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZGxlLT50aW1lc3RhbXAg PSBzY2hlZF9jbG9jaygpOwotCWlkbGUtPnNsZWVwX2F2ZyA9IDA7CiAJaWRsZS0+YXJyYXkgPSBO VUxMOwotCWlkbGUtPnByaW8gPSBpZGxlLT5ub3JtYWxfcHJpbyA9IE1BWF9QUklPOworCWlkbGUt PnByaW8gPSBpZGxlLT5ub3JtYWxfcHJpbyA9IE1BWF9SUV9QUklPOwogCWlkbGUtPnN0YXRlID0g VEFTS19SVU5OSU5HOwogCWlkbGUtPmNwdXNfYWxsb3dlZCA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7 CiAJc2V0X3Rhc2tfY3B1KGlkbGUsIGNwdSk7CkBAIC01NDUxLDggKzUyNzUsOCBAQAogCXN0cnVj dCBycSAqcnEgPSBjcHVfcnEoZGVhZF9jcHUpOwogCXVuc2lnbmVkIGludCBhcnIsIGk7CiAKLQlm b3IgKGFyciA9IDA7IGFyciA8IDI7IGFycisrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfUFJJ TzsgaSsrKSB7CisJZm9yIChhcnIgPSAwOyBhcnIgPCAxOyBhcnIrKykgeworCQlmb3IgKGkgPSAw OyBpIDwgTUFYX1JRX1BSSU87IGkrKykgewogCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZy cS0+YXJyYXlzW2Fycl0ucXVldWVbaV07CiAKIAkJCXdoaWxlICghbGlzdF9lbXB0eShsaXN0KSkK QEAgLTcxMTksOCArNjk0Myw2IEBACiAJCWxvY2tkZXBfc2V0X2NsYXNzKCZycS0+bG9jaywgJnJx LT5ycV9sb2NrX2tleSk7CiAJCXJxLT5ucl9ydW5uaW5nID0gMDsKIAkJcnEtPmFjdGl2ZSA9IHJx LT5hcnJheXM7Ci0JCXJxLT5leHBpcmVkID0gcnEtPmFycmF5cyArIDE7Ci0JCXJxLT5iZXN0X2V4 cGlyZWRfcHJpbyA9IE1BWF9QUklPOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCQlycS0+c2QgPSBO VUxMOwpAQCAtNzEzNCwxNCArNjk1NiwxNCBAQAogI2VuZGlmCiAJCWF0b21pY19zZXQoJnJxLT5u cl9pb3dhaXQsIDApOwogCi0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKKwkJZm9yIChqID0g MDsgaiA8IDE7IGorKykgewogCQkJYXJyYXkgPSBycS0+YXJyYXlzICsgajsKLQkJCWZvciAoayA9 IDA7IGsgPCBNQVhfUFJJTzsgaysrKSB7CisJCQlmb3IgKGsgPSAwOyBrIDwgTUFYX1JRX1BSSU87 IGsrKykgewogCQkJCUlOSVRfTElTVF9IRUFEKGFycmF5LT5xdWV1ZSArIGspOwogCQkJCV9fY2xl YXJfYml0KGssIGFycmF5LT5iaXRtYXApOwogCQkJfQogCQkJLy8gZGVsaW1pdGVyIGZvciBiaXRz ZWFyY2gKLQkJCV9fc2V0X2JpdChNQVhfUFJJTywgYXJyYXktPmJpdG1hcCk7CisJCQlfX3NldF9i aXQoTUFYX1JRX1BSSU8sIGFycmF5LT5iaXRtYXApOwogCQl9CiAJfQogCg== --=-sinamail_mix_0d808c06412d3e67068bc3d1af5b1525--