From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 19/23] x86: PIT emulation is common to both PV and HVM Date: Sun, 26 Aug 2018 13:19:52 +0100 Message-ID: <3c651e5f60a496e3e5661f60bd7e913dab2b05a0.1535285866.git-series.wei.liu2@citrix.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ftu9n-0000W4-2i for xen-devel@lists.xenproject.org; Sun, 26 Aug 2018 12:28:39 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgZmlsZSB0byB4ODYgY29tbW9uIGNvZGUgYW5kIGNoYW5nZSBpdHMgbmFtZSB0byBl bXVsLWk4MjU0LmMuCgpQdXQgSFZNIG9ubHkgY29kZSB1bmRlciBDT05GSUdfSFZNIG9yIGlzX2h2 bV9kb21haW4uCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgot LS0KdjI6IG1vdmUgdGhlIHdob2xlIGZpbGUuCi0tLQogeGVuL2FyY2gveDg2L01ha2VmaWxlICAg ICB8ICAgMSArLQogeGVuL2FyY2gveDg2L2VtdWwtaTgyNTQuYyB8IDYwOSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystCiB4ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlIHwg ICAxICstCiB4ZW4vYXJjaC94ODYvaHZtL2k4MjU0LmMgIHwgNTk3ICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA2MTAgaW5zZXJ0aW9ucygr KSwgNTk4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9lbXVs LWk4MjU0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvaHZtL2k4MjU0LmMKCmRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYvTWFrZWZpbGUK aW5kZXggNDNmOTE4OS4uYzAzYmNhNiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L01ha2VmaWxl CisrKyBiL3hlbi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMjcsNiArMjcsNyBAQCBvYmoteSArPSBk b21haW4ubwogb2JqLWJpbi15ICs9IGRvbTBfYnVpbGQuaW5pdC5vCiBvYmoteSArPSBkb21haW5f cGFnZS5vCiBvYmoteSArPSBlODIwLm8KK29iai15ICs9IGVtdWwtaTgyNTQubwogb2JqLXkgKz0g ZXh0YWJsZS5vCiBvYmoteSArPSBmbHVzaHRsYi5vCiBvYmotJChDT05GSUdfQ1JBU0hfREVCVUcp ICs9IGdkYnN0dWIubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2VtdWwtaTgyNTQuYyBiL3hl bi9hcmNoL3g4Ni9lbXVsLWk4MjU0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZjQ0MzZmOAotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9lbXVsLWk4MjU0LmMK QEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBRRU1VIDgyNTMvODI1NCBpbnRlcnZhbCB0aW1lciBl bXVsYXRpb24KKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgRmFicmljZSBCZWxsYXJk CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSW50ZWwgQ29ycGVyYXRpb24KKyAqIENvcHlyaWdodCAo YykgMjAwNyBLZWlyIEZyYXNlciwgWGVuU291cmNlIEluYy4KKyAqIAorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNp bmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4v eG1hbGxvYy5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4K KyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4KKyNpbmNsdWRl IDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9odm0vaHZtLmg+CisjaW5jbHVkZSA8YXNtL2h2 bS9pby5oPgorI2luY2x1ZGUgPGFzbS9odm0vc3VwcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9odm0v dnB0Lmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworI2RlZmluZSBkb21haW5fdnBpdCh4 KSAoJih4KS0+YXJjaC52cGl0KQorI2RlZmluZSB2Y3B1X3ZwaXQoeCkgICAoZG9tYWluX3ZwaXQo KHgpLT5kb21haW4pKQorI2RlZmluZSB2cGl0X2RvbWFpbih4KSAoY29udGFpbmVyX29mKCh4KSwg c3RydWN0IGRvbWFpbiwgYXJjaC52cGl0KSkKKyNkZWZpbmUgdnBpdF92Y3B1KHgpICAgKHB0X2ds b2JhbF92Y3B1X3RhcmdldCh2cGl0X2RvbWFpbih4KSkpCisKKyNkZWZpbmUgUldfU1RBVEVfTFNC IDEKKyNkZWZpbmUgUldfU1RBVEVfTVNCIDIKKyNkZWZpbmUgUldfU1RBVEVfV09SRDAgMworI2Rl ZmluZSBSV19TVEFURV9XT1JEMSA0CisKK3N0YXRpYyBpbnQgaGFuZGxlX3BpdF9pbygKKyAgICBp bnQgZGlyLCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCAq dmFsKTsKK3N0YXRpYyBpbnQgaGFuZGxlX3NwZWFrZXJfaW8oCisgICAgaW50IGRpciwgdW5zaWdu ZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywgdWludDMyX3QgKnZhbCk7CisKKyNkZWZp bmUgZ2V0X2d1ZXN0X3RpbWUodikgXAorICAgKGlzX2h2bV92Y3B1KHYpID8gaHZtX2dldF9ndWVz dF90aW1lKHYpIDogKHU2NClnZXRfc190aW1lKCkpCisKK3N0YXRpYyBpbnQgcGl0X2dldF9jb3Vu dChQSVRTdGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCkKK3sKKyAgICB1aW50NjRfdCBkOworICAgIGlu dCAgY291bnRlcjsKKyAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpjID0gJnBpdC0+aHcu Y2hhbm5lbHNbY2hhbm5lbF07CisgICAgc3RydWN0IHZjcHUgKnYgPSB2cGl0X3ZjcHUocGl0KTsK KworICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7CisKKyAgICBkID0gbXVs ZGl2NjQoZ2V0X2d1ZXN0X3RpbWUodikgLSBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSwK KyAgICAgICAgICAgICAgICAgUElUX0ZSRVEsIFNZU1RFTV9USU1FX0haKTsKKworICAgIHN3aXRj aCAoIGMtPm1vZGUgKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2Ug NDoKKyAgICBjYXNlIDU6CisgICAgICAgIGNvdW50ZXIgPSAoYy0+Y291bnQgLSBkKSAmIDB4ZmZm ZjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICAvKiBYWFg6IG1heSBiZSBp bmNvcnJlY3QgZm9yIG9kZCBjb3VudHMgKi8KKyAgICAgICAgY291bnRlciA9IGMtPmNvdW50IC0g KCgyICogZCkgJSBjLT5jb3VudCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg ICAgIGNvdW50ZXIgPSBjLT5jb3VudCAtIChkICUgYy0+Y291bnQpOworICAgICAgICBicmVhazsK KyAgICB9CisgICAgcmV0dXJuIGNvdW50ZXI7Cit9CisKK3N0YXRpYyBpbnQgcGl0X2dldF9vdXQo UElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCit7CisgICAgc3RydWN0IGh2bV9od19waXRfY2hh bm5lbCAqcyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworICAgIHVpbnQ2NF90IGQ7Cisg ICAgaW50IG91dDsKKyAgICBzdHJ1Y3QgdmNwdSAqdiA9IHZwaXRfdmNwdShwaXQpOworCisgICAg QVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKKworICAgIGQgPSBtdWxkaXY2NChn ZXRfZ3Vlc3RfdGltZSh2KSAtIHBpdC0+Y291bnRfbG9hZF90aW1lW2NoYW5uZWxdLCAKKyAgICAg ICAgICAgICAgICAgUElUX0ZSRVEsIFNZU1RFTV9USU1FX0haKTsKKworICAgIHN3aXRjaCAoIHMt Pm1vZGUgKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgMDoKKyAgICAgICAgb3V0ID0g KGQgPj0gcy0+Y291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIG91 dCA9IChkIDwgcy0+Y291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAg IG91dCA9ICgoKGQgJSBzLT5jb3VudCkgPT0gMCkgJiYgKGQgIT0gMCkpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIDM6CisgICAgICAgIG91dCA9ICgoZCAlIHMtPmNvdW50KSA8ICgocy0+Y291 bnQgKyAxKSA+PiAxKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICBjYXNlIDU6 CisgICAgICAgIG91dCA9IChkID09IHMtPmNvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor CisgICAgcmV0dXJuIG91dDsKK30KKworc3RhdGljIHZvaWQgcGl0X3NldF9nYXRlKFBJVFN0YXRl ICpwaXQsIGludCBjaGFubmVsLCBpbnQgdmFsKQoreworICAgIHN0cnVjdCBodm1faHdfcGl0X2No YW5uZWwgKnMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKKyAgICBzdHJ1Y3QgdmNwdSAq diA9IHZwaXRfdmNwdShwaXQpOworCisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxv Y2spKTsKKworICAgIHN3aXRjaCAoIHMtPm1vZGUgKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAg IGNhc2UgMDoKKyAgICBjYXNlIDQ6CisgICAgICAgIC8qIFhYWDoganVzdCBkaXNhYmxlL2VuYWJs ZSBjb3VudGluZyAqLworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSA1Ogor ICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgICAgIC8qIFJlc3RhcnQgY291bnRpbmcgb24g cmlzaW5nIGVkZ2UuICovCisgICAgICAgIGlmICggcy0+Z2F0ZSA8IHZhbCApCisgICAgICAgICAg ICBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSA9IGdldF9ndWVzdF90aW1lKHYpOworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBzLT5nYXRlID0gdmFsOworfQorCitzdGF0aWMgaW50 IHBpdF9nZXRfZ2F0ZShQSVRTdGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCkKK3sKKyAgICBBU1NFUlQo c3Bpbl9pc19sb2NrZWQoJnBpdC0+bG9jaykpOworICAgIHJldHVybiBwaXQtPmh3LmNoYW5uZWxz W2NoYW5uZWxdLmdhdGU7Cit9CisKKyNpZmRlZiBDT05GSUdfSFZNCitzdGF0aWMgdm9pZCBwaXRf dGltZV9maXJlZChzdHJ1Y3QgdmNwdSAqdiwgdm9pZCAqcHJpdikKK3sKKyAgICB1aW50NjRfdCAq Y291bnRfbG9hZF90aW1lID0gcHJpdjsKKyAgICBUUkFDRV8wRChUUkNfSFZNX0VNVUxfUElUX1RJ TUVSX0NCKTsKKyAgICAqY291bnRfbG9hZF90aW1lID0gZ2V0X2d1ZXN0X3RpbWUodik7Cit9Cisj ZW5kaWYKKworc3RhdGljIHZvaWQgcGl0X2xvYWRfY291bnQoUElUU3RhdGUgKnBpdCwgaW50IGNo YW5uZWwsIGludCB2YWwpCit7CisgICAgdTMyIHBlcmlvZDsKKyAgICBzdHJ1Y3QgaHZtX2h3X3Bp dF9jaGFubmVsICpzID0gJnBpdC0+aHcuY2hhbm5lbHNbY2hhbm5lbF07CisgICAgc3RydWN0IHZj cHUgKnYgPSB2cGl0X3ZjcHUocGl0KTsKKworICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0 LT5sb2NrKSk7CisKKyAgICBpZiAoIHZhbCA9PSAwICkKKyAgICAgICAgdmFsID0gMHgxMDAwMDsK KworICAgIGlmICggdiA9PSBOVUxMICkKKyAgICAgICAgcGl0LT5jb3VudF9sb2FkX3RpbWVbY2hh bm5lbF0gPSAwOworICAgIGVsc2UKKyAgICAgICAgcGl0LT5jb3VudF9sb2FkX3RpbWVbY2hhbm5l bF0gPSBnZXRfZ3Vlc3RfdGltZSh2KTsKKyAgICBzLT5jb3VudCA9IHZhbDsKKyAgICBwZXJpb2Qg PSBESVZfUk9VTkQodmFsICogU1lTVEVNX1RJTUVfSFosIFBJVF9GUkVRKTsKKworICAgIGlmICgg KHYgPT0gTlVMTCkgfHwgIWlzX2h2bV92Y3B1KHYpIHx8IChjaGFubmVsICE9IDApICkKKyAgICAg ICAgcmV0dXJuOworCisjaWZkZWYgQ09ORklHX0hWTQorICAgIHN3aXRjaCAoIHMtPm1vZGUgKQor ICAgIHsKKyAgICBjYXNlIDI6CisgICAgY2FzZSAzOgorICAgICAgICAvKiBQZXJpb2RpYyB0aW1l ci4gKi8KKyAgICAgICAgVFJBQ0VfMkQoVFJDX0hWTV9FTVVMX1BJVF9TVEFSVF9USU1FUiwgcGVy aW9kLCBwZXJpb2QpOworICAgICAgICBjcmVhdGVfcGVyaW9kaWNfdGltZSh2LCAmcGl0LT5wdDAs IHBlcmlvZCwgcGVyaW9kLCAwLCBwaXRfdGltZV9maXJlZCwgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSwgZmFsc2UpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSA0OgorICAgICAgICAvKiBPbmUtc2hvdCB0 aW1lci4gKi8KKyAgICAgICAgVFJBQ0VfMkQoVFJDX0hWTV9FTVVMX1BJVF9TVEFSVF9USU1FUiwg cGVyaW9kLCAwKTsKKyAgICAgICAgY3JlYXRlX3BlcmlvZGljX3RpbWUodiwgJnBpdC0+cHQwLCBw ZXJpb2QsIDAsIDAsIHBpdF90aW1lX2ZpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcGl0LT5jb3VudF9sb2FkX3RpbWVbY2hhbm5lbF0sIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgVFJBQ0VfMEQoVFJDX0hWTV9FTVVMX1BJVF9TVE9QX1RJ TUVSKTsKKyAgICAgICAgZGVzdHJveV9wZXJpb2RpY190aW1lKCZwaXQtPnB0MCk7CisgICAgICAg IGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwaXRfbGF0Y2hfY291bnQo UElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCit7CisgICAgc3RydWN0IGh2bV9od19waXRfY2hh bm5lbCAqYyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworCisgICAgQVNTRVJUKHNwaW5f aXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKKworICAgIGlmICggIWMtPmNvdW50X2xhdGNoZWQgKQor ICAgIHsKKyAgICAgICAgYy0+bGF0Y2hlZF9jb3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBjaGFu bmVsKTsKKyAgICAgICAgYy0+Y291bnRfbGF0Y2hlZCA9IGMtPnJ3X21vZGU7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBwaXRfbGF0Y2hfc3RhdHVzKFBJVFN0YXRlICpwaXQsIGludCBjaGFubmVs KQoreworICAgIHN0cnVjdCBodm1faHdfcGl0X2NoYW5uZWwgKmMgPSAmcGl0LT5ody5jaGFubmVs c1tjaGFubmVsXTsKKworICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7CisK KyAgICBpZiAoICFjLT5zdGF0dXNfbGF0Y2hlZCApCisgICAgeworICAgICAgICAvKiBUT0RPOiBS ZXR1cm4gTlVMTCBDT1VOVCAoYml0IDYpLiAqLworICAgICAgICBjLT5zdGF0dXMgPSAoKHBpdF9n ZXRfb3V0KHBpdCwgY2hhbm5lbCkgPDwgNykgfAorICAgICAgICAgICAgICAgICAgICAgKGMtPnJ3 X21vZGUgPDwgNCkgfAorICAgICAgICAgICAgICAgICAgICAgKGMtPm1vZGUgPDwgMSkgfAorICAg ICAgICAgICAgICAgICAgICAgYy0+YmNkKTsKKyAgICAgICAgYy0+c3RhdHVzX2xhdGNoZWQgPSAx OworICAgIH0KK30KKworc3RhdGljIHZvaWQgcGl0X2lvcG9ydF93cml0ZShzdHJ1Y3QgUElUU3Rh dGUgKnBpdCwgdWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQoreworICAgIGludCBjaGFubmVs LCBhY2Nlc3M7CisgICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqczsKKworICAgIHZhbCAg Jj0gMHhmZjsKKyAgICBhZGRyICY9IDM7CisKKyAgICBzcGluX2xvY2soJnBpdC0+bG9jayk7CisK KyAgICBpZiAoIGFkZHIgPT0gMyApCisgICAgeworICAgICAgICBjaGFubmVsID0gdmFsID4+IDY7 CisgICAgICAgIGlmICggY2hhbm5lbCA9PSAzICkKKyAgICAgICAgeworICAgICAgICAgICAgLyog UmVhZC1CYWNrIENvbW1hbmQuICovCisgICAgICAgICAgICBmb3IgKCBjaGFubmVsID0gMDsgY2hh bm5lbCA8IDM7IGNoYW5uZWwrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcyA9 ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworICAgICAgICAgICAgICAgIGlmICggdmFsICYg KDIgPDwgY2hhbm5lbCkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKCAhKHZhbCAmIDB4MjApICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpdF9sYXRjaF9j b3VudChwaXQsIGNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoICEodmFsICYgMHgx MCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgcGl0X2xhdGNoX3N0YXR1cyhwaXQsIGNoYW5u ZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNlbGVjdCBDb3VudGVyIDxjaGFubmVs Pi4gKi8KKyAgICAgICAgICAgIHMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKKyAgICAg ICAgICAgIGFjY2VzcyA9ICh2YWwgPj4gNCkgJiAzOworICAgICAgICAgICAgaWYgKCBhY2Nlc3Mg PT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGl0X2xhdGNoX2NvdW50KHBp dCwgY2hhbm5lbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgcy0+cndfbW9kZSA9IGFjY2VzczsKKyAgICAgICAgICAgICAg ICBzLT5yZWFkX3N0YXRlID0gYWNjZXNzOworICAgICAgICAgICAgICAgIHMtPndyaXRlX3N0YXRl ID0gYWNjZXNzOworICAgICAgICAgICAgICAgIHMtPm1vZGUgPSAodmFsID4+IDEpICYgNzsKKyAg ICAgICAgICAgICAgICBpZiAoIHMtPm1vZGUgPiA1ICkKKyAgICAgICAgICAgICAgICAgICAgcy0+ bW9kZSAtPSA0OworICAgICAgICAgICAgICAgIHMtPmJjZCA9IHZhbCAmIDE7CisgICAgICAgICAg ICAgICAgLyogWFhYOiB1cGRhdGUgaXJxIHRpbWVyID8gKi8KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBXcml0ZSBDb3VudC4gKi8K KyAgICAgICAgcyA9ICZwaXQtPmh3LmNoYW5uZWxzW2FkZHJdOworICAgICAgICBzd2l0Y2ggKCBz LT53cml0ZV9zdGF0ZSApCisgICAgICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2Fz ZSBSV19TVEFURV9MU0I6CisgICAgICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGFkZHIsIHZh bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSV19TVEFURV9NU0I6CisgICAg ICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGFkZHIsIHZhbCA8PCA4KTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIFJXX1NUQVRFX1dPUkQwOgorICAgICAgICAgICAgcy0+d3Jp dGVfbGF0Y2ggPSB2YWw7CisgICAgICAgICAgICBzLT53cml0ZV9zdGF0ZSA9IFJXX1NUQVRFX1dP UkQxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUldfU1RBVEVfV09SRDE6Cisg ICAgICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGFkZHIsIHMtPndyaXRlX2xhdGNoIHwgKHZh bCA8PCA4KSk7CisgICAgICAgICAgICBzLT53cml0ZV9zdGF0ZSA9IFJXX1NUQVRFX1dPUkQwOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzcGluX3VubG9jaygm cGl0LT5sb2NrKTsKK30KKworc3RhdGljIHVpbnQzMl90IHBpdF9pb3BvcnRfcmVhZChzdHJ1Y3Qg UElUU3RhdGUgKnBpdCwgdWludDMyX3QgYWRkcikKK3sKKyAgICBpbnQgcmV0LCBjb3VudDsKKyAg ICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzOworICAgIAorICAgIGFkZHIgJj0gMzsKKyAg ICBzID0gJnBpdC0+aHcuY2hhbm5lbHNbYWRkcl07CisKKyAgICBzcGluX2xvY2soJnBpdC0+bG9j ayk7CisKKyAgICBpZiAoIHMtPnN0YXR1c19sYXRjaGVkICkKKyAgICB7CisgICAgICAgIHMtPnN0 YXR1c19sYXRjaGVkID0gMDsKKyAgICAgICAgcmV0ID0gcy0+c3RhdHVzOworICAgIH0KKyAgICBl bHNlIGlmICggcy0+Y291bnRfbGF0Y2hlZCApCisgICAgeworICAgICAgICBzd2l0Y2ggKCBzLT5j b3VudF9sYXRjaGVkICkKKyAgICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNl IFJXX1NUQVRFX0xTQjoKKyAgICAgICAgICAgIHJldCA9IHMtPmxhdGNoZWRfY291bnQgJiAweGZm OworICAgICAgICAgICAgcy0+Y291bnRfbGF0Y2hlZCA9IDA7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSBSV19TVEFURV9NU0I6CisgICAgICAgICAgICByZXQgPSBzLT5sYXRjaGVk X2NvdW50ID4+IDg7CisgICAgICAgICAgICBzLT5jb3VudF9sYXRjaGVkID0gMDsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIFJXX1NUQVRFX1dPUkQwOgorICAgICAgICAgICAgcmV0 ID0gcy0+bGF0Y2hlZF9jb3VudCAmIDB4ZmY7CisgICAgICAgICAgICBzLT5jb3VudF9sYXRjaGVk ID0gUldfU1RBVEVfTVNCOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoICggcy0+cmVhZF9zdGF0ZSApCisgICAgICAg IHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBSV19TVEFURV9MU0I6CisgICAgICAg ICAgICBjb3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBhZGRyKTsKKyAgICAgICAgICAgIHJldCA9 IGNvdW50ICYgMHhmZjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJXX1NUQVRF X01TQjoKKyAgICAgICAgICAgIGNvdW50ID0gcGl0X2dldF9jb3VudChwaXQsIGFkZHIpOworICAg ICAgICAgICAgcmV0ID0gKGNvdW50ID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFJXX1NUQVRFX1dPUkQwOgorICAgICAgICAgICAgY291bnQgPSBwaXRfZ2V0 X2NvdW50KHBpdCwgYWRkcik7CisgICAgICAgICAgICByZXQgPSBjb3VudCAmIDB4ZmY7CisgICAg ICAgICAgICBzLT5yZWFkX3N0YXRlID0gUldfU1RBVEVfV09SRDE7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSBSV19TVEFURV9XT1JEMToKKyAgICAgICAgICAgIGNvdW50ID0gcGl0 X2dldF9jb3VudChwaXQsIGFkZHIpOworICAgICAgICAgICAgcmV0ID0gKGNvdW50ID4+IDgpICYg MHhmZjsKKyAgICAgICAgICAgIHMtPnJlYWRfc3RhdGUgPSBSV19TVEFURV9XT1JEMDsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgc3Bpbl91bmxvY2soJnBpdC0+ bG9jayk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0hWTQordm9pZCBw aXRfc3RvcF9jaGFubmVsMF9pcnEoUElUU3RhdGUgKnBpdCkKK3sKKyAgICBpZiAoICFoYXNfdnBp dChjdXJyZW50LT5kb21haW4pICkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfMEQoVFJD X0hWTV9FTVVMX1BJVF9TVE9QX1RJTUVSKTsKKyAgICBzcGluX2xvY2soJnBpdC0+bG9jayk7Cisg ICAgZGVzdHJveV9wZXJpb2RpY190aW1lKCZwaXQtPnB0MCk7CisgICAgc3Bpbl91bmxvY2soJnBp dC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgcGl0X3NhdmUoc3RydWN0IGRvbWFpbiAqZCwgaHZt X2RvbWFpbl9jb250ZXh0X3QgKmgpCit7CisgICAgUElUU3RhdGUgKnBpdCA9IGRvbWFpbl92cGl0 KGQpOworICAgIGludCByYzsKKworICAgIGlmICggIWhhc192cGl0KGQpICkKKyAgICAgICAgcmV0 dXJuIDA7CisKKyAgICBzcGluX2xvY2soJnBpdC0+bG9jayk7CisgICAgCisgICAgcmMgPSBodm1f c2F2ZV9lbnRyeShQSVQsIDAsIGgsICZwaXQtPmh3KTsKKworICAgIHNwaW5fdW5sb2NrKCZwaXQt PmxvY2spOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHBpdF9sb2FkKHN0cnVj dCBkb21haW4gKmQsIGh2bV9kb21haW5fY29udGV4dF90ICpoKQoreworICAgIFBJVFN0YXRlICpw aXQgPSBkb21haW5fdnBpdChkKTsKKyAgICBpbnQgaTsKKworICAgIGlmICggIWhhc192cGl0KGQp ICkKKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisKKyAgICBzcGluX2xvY2soJnBpdC0+bG9jayk7 CisKKyAgICBpZiAoIGh2bV9sb2FkX2VudHJ5KFBJVCwgaCwgJnBpdC0+aHcpICkKKyAgICB7Cisg ICAgICAgIHNwaW5fdW5sb2NrKCZwaXQtPmxvY2spOworICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisgICAgCisgICAgLyoKKyAgICAgKiBSZWNyZWF0ZSBwbGF0Zm9ybSB0aW1lcnMgZnJvbSBoYXJk d2FyZSBzdGF0ZS4gIFRoZXJlIHdpbGwgYmUgc29tZSAKKyAgICAgKiB0aW1lIGppdHRlciBoZXJl LCBidXQgdGhlIHdhbGwtY2xvY2sgd2lsbCBoYXZlIGp1bXBlZCBtYXNzaXZlbHksIHNvIAorICAg ICAqIHdlIGhvcGUgdGhlIGd1ZXN0IGNhbiBoYW5kbGUgaXQuCisgICAgICovCisgICAgcGl0LT5w dDAubGFzdF9wbHRfZ3RpbWUgPSBnZXRfZ3Vlc3RfdGltZShkLT52Y3B1WzBdKTsKKyAgICBmb3Ig KCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAgICAgIHBpdF9sb2FkX2NvdW50KHBpdCwgaSwgcGl0 LT5ody5jaGFubmVsc1tpXS5jb3VudCk7CisKKyAgICBzcGluX3VubG9jaygmcGl0LT5sb2NrKTsK KworICAgIHJldHVybiAwOworfQorCitIVk1fUkVHSVNURVJfU0FWRV9SRVNUT1JFKFBJVCwgcGl0 X3NhdmUsIHBpdF9sb2FkLCAxLCBIVk1TUl9QRVJfRE9NKTsKKyNlbmRpZgorCit2b2lkIHBpdF9y ZXNldChzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIFBJVFN0YXRlICpwaXQgPSBkb21haW5fdnBp dChkKTsKKyAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzOworICAgIGludCBpOworCisg ICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIGlzX2h2 bV9kb21haW4oZCkgKQorICAgIHsKKyAgICAgICAgVFJBQ0VfMEQoVFJDX0hWTV9FTVVMX1BJVF9T VE9QX1RJTUVSKTsKKyAgICAgICAgZGVzdHJveV9wZXJpb2RpY190aW1lKCZwaXQtPnB0MCk7Cisg ICAgICAgIHBpdC0+cHQwLnNvdXJjZSA9IFBUU1JDX2lzYTsKKyAgICB9CisKKyAgICBzcGluX2xv Y2soJnBpdC0+bG9jayk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAgewor ICAgICAgICBzID0gJnBpdC0+aHcuY2hhbm5lbHNbaV07CisgICAgICAgIHMtPm1vZGUgPSAweGZm OyAvKiB0aGUgaW5pdCBtb2RlICovCisgICAgICAgIHMtPmdhdGUgPSAoaSAhPSAyKTsKKyAgICAg ICAgcGl0X2xvYWRfY291bnQocGl0LCBpLCAwKTsKKyAgICB9CisKKyAgICBzcGluX3VubG9jaygm cGl0LT5sb2NrKTsKK30KKwordm9pZCBwaXRfaW5pdChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBsb25nIGNwdV9raHopCit7CisgICAgUElUU3RhdGUgKnBpdCA9IGRvbWFpbl92cGl0KGQpOwor CisgICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQorICAgICAgICByZXR1cm47CisKKyAgICBzcGluX2xv Y2tfaW5pdCgmcGl0LT5sb2NrKTsKKworICAgIGlmICggaXNfaHZtX2RvbWFpbihkKSApCisgICAg eworICAgICAgICByZWdpc3Rlcl9wb3J0aW9faGFuZGxlcihkLCBQSVRfQkFTRSwgNCwgaGFuZGxl X3BpdF9pbyk7CisgICAgICAgIHJlZ2lzdGVyX3BvcnRpb19oYW5kbGVyKGQsIDB4NjEsIDEsIGhh bmRsZV9zcGVha2VyX2lvKTsKKyAgICB9CisKKyAgICBwaXRfcmVzZXQoZCk7Cit9CisKK3ZvaWQg cGl0X2RlaW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIFBJVFN0YXRlICpwaXQgPSBkb21h aW5fdnBpdChkKTsKKworICAgIGlmICggIWhhc192cGl0KGQpICkKKyAgICAgICAgcmV0dXJuOwor CisgICAgaWYgKCBpc19odm1fZG9tYWluKGQpICkKKyAgICB7CisgICAgICAgIFRSQUNFXzBEKFRS Q19IVk1fRU1VTF9QSVRfU1RPUF9USU1FUik7CisgICAgICAgIGRlc3Ryb3lfcGVyaW9kaWNfdGlt ZSgmcGl0LT5wdDApOworICAgIH0KK30KKworLyogdGhlIGludGVyY2VwdCBhY3Rpb24gZm9yIFBJ VCBETSByZXR2YWw6MC0tbm90IGhhbmRsZWQ7IDEtLWhhbmRsZWQgKi8gIAorc3RhdGljIGludCBo YW5kbGVfcGl0X2lvKAorICAgIGludCBkaXIsIHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBp bnQgYnl0ZXMsIHVpbnQzMl90ICp2YWwpCit7CisgICAgc3RydWN0IFBJVFN0YXRlICp2cGl0ID0g dmNwdV92cGl0KGN1cnJlbnQpOworCisgICAgaWYgKCBieXRlcyAhPSAxICkKKyAgICB7CisgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiUElUIGJhZCBhY2Nlc3NcbiIpOworICAgICAg ICAqdmFsID0gfjA7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgfQorCisgICAg aWYgKCBkaXIgPT0gSU9SRVFfV1JJVEUgKQorICAgIHsKKyAgICAgICAgcGl0X2lvcG9ydF93cml0 ZSh2cGl0LCBwb3J0LCAqdmFsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYg KCAocG9ydCAmIDMpICE9IDMgKQorICAgICAgICAgICAgKnZhbCA9IHBpdF9pb3BvcnRfcmVhZCh2 cGl0LCBwb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJQSVQ6IHJlYWQgQTE6QTA9MyFcbiIpOworICAgIH0KKworICAgIHJldHVybiBYODZF TVVMX09LQVk7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWFrZXJfaW9wb3J0X3dyaXRlKAorICAgIHN0 cnVjdCBQSVRTdGF0ZSAqcGl0LCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAg cGl0LT5ody5zcGVha2VyX2RhdGFfb24gPSAodmFsID4+IDEpICYgMTsKKyAgICBwaXRfc2V0X2dh dGUocGl0LCAyLCB2YWwgJiAxKTsKK30KKworc3RhdGljIHVpbnQzMl90IHNwZWFrZXJfaW9wb3J0 X3JlYWQoCisgICAgc3RydWN0IFBJVFN0YXRlICpwaXQsIHVpbnQzMl90IGFkZHIpCit7CisgICAg LyogUmVmcmVzaCBjbG9jayB0b2dnbGVzIGF0IGFib3V0IDE1dXMuIFdlIGFwcHJveGltYXRlIGFz IDJeMTRucy4gKi8KKyAgICB1bnNpZ25lZCBpbnQgcmVmcmVzaF9jbG9jayA9ICgodW5zaWduZWQg aW50KU5PVygpID4+IDE0KSAmIDE7CisgICAgcmV0dXJuICgocGl0LT5ody5zcGVha2VyX2RhdGFf b24gPDwgMSkgfCBwaXRfZ2V0X2dhdGUocGl0LCAyKSB8CisgICAgICAgICAgICAocGl0X2dldF9v dXQocGl0LCAyKSA8PCA1KSB8IChyZWZyZXNoX2Nsb2NrIDw8IDQpKTsKK30KKworc3RhdGljIGlu dCBoYW5kbGVfc3BlYWtlcl9pbygKKyAgICBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgcG9ydCwgdWlu dDMyX3QgYnl0ZXMsIHVpbnQzMl90ICp2YWwpCit7CisgICAgc3RydWN0IFBJVFN0YXRlICp2cGl0 ID0gdmNwdV92cGl0KGN1cnJlbnQpOworCisgICAgQlVHX09OKGJ5dGVzICE9IDEpOworCisgICAg c3Bpbl9sb2NrKCZ2cGl0LT5sb2NrKTsKKworICAgIGlmICggZGlyID09IElPUkVRX1dSSVRFICkK KyAgICAgICAgc3BlYWtlcl9pb3BvcnRfd3JpdGUodnBpdCwgcG9ydCwgKnZhbCk7CisgICAgZWxz ZQorICAgICAgICAqdmFsID0gc3BlYWtlcl9pb3BvcnRfcmVhZCh2cGl0LCBwb3J0KTsKKworICAg IHNwaW5fdW5sb2NrKCZ2cGl0LT5sb2NrKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9 CisKK2ludCBwdl9waXRfaGFuZGxlcihpbnQgcG9ydCwgaW50IGRhdGEsIGludCB3cml0ZSkKK3sK KyAgICBpb3JlcV90IGlvcmVxID0geworICAgICAgICAuc2l6ZSA9IDEsCisgICAgICAgIC50eXBl ID0gSU9SRVFfVFlQRV9QSU8sCisgICAgICAgIC5hZGRyID0gcG9ydCwKKyAgICAgICAgLmRpciAg PSB3cml0ZSA/IElPUkVRX1dSSVRFIDogSU9SRVFfUkVBRCwKKyAgICAgICAgLmRhdGEgPSBkYXRh CisgICAgfTsKKworICAgIGlmICggIWhhc192cGl0KGN1cnJlbnQtPmRvbWFpbikgKQorICAgICAg ICByZXR1cm4gfjA7CisKKyAgICBpZiAoIGlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZW50LT5kb21h aW4pICYmIGh3ZG9tX3BpdF9hY2Nlc3MoJmlvcmVxKSApCisgICAgeworICAgICAgICAvKiBub3Ro aW5nIHRvIGRvICovOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50MzJfdCB2 YWwgPSBkYXRhOworICAgICAgICBpZiAoIHBvcnQgPT0gMHg2MSApCisgICAgICAgICAgICBoYW5k bGVfc3BlYWtlcl9pbyhpb3JlcS5kaXIsIHBvcnQsIDEsICZ2YWwpOworICAgICAgICBlbHNlCisg ICAgICAgICAgICBoYW5kbGVfcGl0X2lvKGlvcmVxLmRpciwgcG9ydCwgMSwgJnZhbCk7CisgICAg ICAgIGlvcmVxLmRhdGEgPSB2YWw7CisgICAgfQorCisgICAgcmV0dXJuICF3cml0ZSA/IGlvcmVx LmRhdGEgOiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICog Yy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL01h a2VmaWxlIGIveGVuL2FyY2gveDg2L2h2bS9NYWtlZmlsZQppbmRleCA1YmQzOGY2Li41ZTA0YmMx IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL3g4 Ni9odm0vTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDYgQEAgb2JqLXkgKz0gZ3JhbnRfdGFibGUubwog b2JqLXkgKz0gaHBldC5vCiBvYmoteSArPSBodm0ubwogb2JqLXkgKz0gaHlwZXJjYWxsLm8KLW9i ai15ICs9IGk4MjU0Lm8KIG9iai15ICs9IGludGVyY2VwdC5vCiBvYmoteSArPSBpby5vCiBvYmot eSArPSBpb3JlcS5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2k4MjU0LmMgYi94ZW4v YXJjaC94ODYvaHZtL2k4MjU0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZWM1 NmYuLjAwMDAwMDAKLS0tIGEveGVuL2FyY2gveDg2L2h2bS9pODI1NC5jCisrKyAvZGV2L251bGwK QEAgLTEsNTk3ICswLDAgQEAKLS8qCi0gKiBRRU1VIDgyNTMvODI1NCBpbnRlcnZhbCB0aW1lciBl bXVsYXRpb24KLSAqIAotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgRmFicmljZSBCZWxsYXJk Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSW50ZWwgQ29ycGVyYXRpb24KLSAqIENvcHlyaWdodCAo YykgMjAwNyBLZWlyIEZyYXNlciwgWGVuU291cmNlIEluYy4KLSAqIAotICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCi0gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQotICogcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yCi0gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g SU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICovCi0KLSNp bmNsdWRlIDx4ZW4vdHlwZXMuaD4KLSNpbmNsdWRlIDx4ZW4vbW0uaD4KLSNpbmNsdWRlIDx4ZW4v eG1hbGxvYy5oPgotI2luY2x1ZGUgPHhlbi9saWIuaD4KLSNpbmNsdWRlIDx4ZW4vZXJybm8uaD4K LSNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KLSNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4KLSNpbmNsdWRl IDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9odm0vaHZtLmg+Ci0jaW5jbHVkZSA8YXNtL2h2 bS9pby5oPgotI2luY2x1ZGUgPGFzbS9odm0vc3VwcG9ydC5oPgotI2luY2x1ZGUgPGFzbS9odm0v dnB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KLQotI2RlZmluZSBkb21haW5fdnBpdCh4 KSAoJih4KS0+YXJjaC52cGl0KQotI2RlZmluZSB2Y3B1X3ZwaXQoeCkgICAoZG9tYWluX3ZwaXQo KHgpLT5kb21haW4pKQotI2RlZmluZSB2cGl0X2RvbWFpbih4KSAoY29udGFpbmVyX29mKCh4KSwg c3RydWN0IGRvbWFpbiwgYXJjaC52cGl0KSkKLSNkZWZpbmUgdnBpdF92Y3B1KHgpICAgKHB0X2ds b2JhbF92Y3B1X3RhcmdldCh2cGl0X2RvbWFpbih4KSkpCi0KLSNkZWZpbmUgUldfU1RBVEVfTFNC IDEKLSNkZWZpbmUgUldfU1RBVEVfTVNCIDIKLSNkZWZpbmUgUldfU1RBVEVfV09SRDAgMwotI2Rl ZmluZSBSV19TVEFURV9XT1JEMSA0Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX3BpdF9pbygKLSAgICBp bnQgZGlyLCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCAq dmFsKTsKLXN0YXRpYyBpbnQgaGFuZGxlX3NwZWFrZXJfaW8oCi0gICAgaW50IGRpciwgdW5zaWdu ZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywgdWludDMyX3QgKnZhbCk7Ci0KLSNkZWZp bmUgZ2V0X2d1ZXN0X3RpbWUodikgXAotICAgKGlzX2h2bV92Y3B1KHYpID8gaHZtX2dldF9ndWVz dF90aW1lKHYpIDogKHU2NClnZXRfc190aW1lKCkpCi0KLXN0YXRpYyBpbnQgcGl0X2dldF9jb3Vu dChQSVRTdGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCkKLXsKLSAgICB1aW50NjRfdCBkOwotICAgIGlu dCAgY291bnRlcjsKLSAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpjID0gJnBpdC0+aHcu Y2hhbm5lbHNbY2hhbm5lbF07Ci0gICAgc3RydWN0IHZjcHUgKnYgPSB2cGl0X3ZjcHUocGl0KTsK LQotICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7Ci0KLSAgICBkID0gbXVs ZGl2NjQoZ2V0X2d1ZXN0X3RpbWUodikgLSBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSwK LSAgICAgICAgICAgICAgICAgUElUX0ZSRVEsIFNZU1RFTV9USU1FX0haKTsKLQotICAgIHN3aXRj aCAoIGMtPm1vZGUgKQotICAgIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2Ug NDoKLSAgICBjYXNlIDU6Ci0gICAgICAgIGNvdW50ZXIgPSAoYy0+Y291bnQgLSBkKSAmIDB4ZmZm ZjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICAvKiBYWFg6IG1heSBiZSBp bmNvcnJlY3QgZm9yIG9kZCBjb3VudHMgKi8KLSAgICAgICAgY291bnRlciA9IGMtPmNvdW50IC0g KCgyICogZCkgJSBjLT5jb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg ICAgIGNvdW50ZXIgPSBjLT5jb3VudCAtIChkICUgYy0+Y291bnQpOwotICAgICAgICBicmVhazsK LSAgICB9Ci0gICAgcmV0dXJuIGNvdW50ZXI7Ci19Ci0KLXN0YXRpYyBpbnQgcGl0X2dldF9vdXQo UElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCi17Ci0gICAgc3RydWN0IGh2bV9od19waXRfY2hh bm5lbCAqcyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOwotICAgIHVpbnQ2NF90IGQ7Ci0g ICAgaW50IG91dDsKLSAgICBzdHJ1Y3QgdmNwdSAqdiA9IHZwaXRfdmNwdShwaXQpOwotCi0gICAg QVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKLQotICAgIGQgPSBtdWxkaXY2NChn ZXRfZ3Vlc3RfdGltZSh2KSAtIHBpdC0+Y291bnRfbG9hZF90aW1lW2NoYW5uZWxdLCAKLSAgICAg ICAgICAgICAgICAgUElUX0ZSRVEsIFNZU1RFTV9USU1FX0haKTsKLQotICAgIHN3aXRjaCAoIHMt Pm1vZGUgKQotICAgIHsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgMDoKLSAgICAgICAgb3V0ID0g KGQgPj0gcy0+Y291bnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIG91 dCA9IChkIDwgcy0+Y291bnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAg IG91dCA9ICgoKGQgJSBzLT5jb3VudCkgPT0gMCkgJiYgKGQgIT0gMCkpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIDM6Ci0gICAgICAgIG91dCA9ICgoZCAlIHMtPmNvdW50KSA8ICgocy0+Y291 bnQgKyAxKSA+PiAxKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICBjYXNlIDU6 Ci0gICAgICAgIG91dCA9IChkID09IHMtPmNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot Ci0gICAgcmV0dXJuIG91dDsKLX0KLQotc3RhdGljIHZvaWQgcGl0X3NldF9nYXRlKFBJVFN0YXRl ICpwaXQsIGludCBjaGFubmVsLCBpbnQgdmFsKQotewotICAgIHN0cnVjdCBodm1faHdfcGl0X2No YW5uZWwgKnMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKLSAgICBzdHJ1Y3QgdmNwdSAq diA9IHZwaXRfdmNwdShwaXQpOwotCi0gICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxv Y2spKTsKLQotICAgIHN3aXRjaCAoIHMtPm1vZGUgKQotICAgIHsKLSAgICBkZWZhdWx0OgotICAg IGNhc2UgMDoKLSAgICBjYXNlIDQ6Ci0gICAgICAgIC8qIFhYWDoganVzdCBkaXNhYmxlL2VuYWJs ZSBjb3VudGluZyAqLwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSA1Ogot ICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICAgIC8qIFJlc3RhcnQgY291bnRpbmcgb24g cmlzaW5nIGVkZ2UuICovCi0gICAgICAgIGlmICggcy0+Z2F0ZSA8IHZhbCApCi0gICAgICAgICAg ICBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSA9IGdldF9ndWVzdF90aW1lKHYpOwotICAg ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzLT5nYXRlID0gdmFsOwotfQotCi1zdGF0aWMgaW50 IHBpdF9nZXRfZ2F0ZShQSVRTdGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCkKLXsKLSAgICBBU1NFUlQo c3Bpbl9pc19sb2NrZWQoJnBpdC0+bG9jaykpOwotICAgIHJldHVybiBwaXQtPmh3LmNoYW5uZWxz W2NoYW5uZWxdLmdhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkIHBpdF90aW1lX2ZpcmVkKHN0cnVjdCB2 Y3B1ICp2LCB2b2lkICpwcml2KQotewotICAgIHVpbnQ2NF90ICpjb3VudF9sb2FkX3RpbWUgPSBw cml2OwotICAgIFRSQUNFXzBEKFRSQ19IVk1fRU1VTF9QSVRfVElNRVJfQ0IpOwotICAgICpjb3Vu dF9sb2FkX3RpbWUgPSBnZXRfZ3Vlc3RfdGltZSh2KTsKLX0KLQotc3RhdGljIHZvaWQgcGl0X2xv YWRfY291bnQoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwsIGludCB2YWwpCi17Ci0gICAgdTMy IHBlcmlvZDsKLSAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzID0gJnBpdC0+aHcuY2hh bm5lbHNbY2hhbm5lbF07Ci0gICAgc3RydWN0IHZjcHUgKnYgPSB2cGl0X3ZjcHUocGl0KTsKLQot ICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7Ci0KLSAgICBpZiAoIHZhbCA9 PSAwICkKLSAgICAgICAgdmFsID0gMHgxMDAwMDsKLQotICAgIGlmICggdiA9PSBOVUxMICkKLSAg ICAgICAgcGl0LT5jb3VudF9sb2FkX3RpbWVbY2hhbm5lbF0gPSAwOwotICAgIGVsc2UKLSAgICAg ICAgcGl0LT5jb3VudF9sb2FkX3RpbWVbY2hhbm5lbF0gPSBnZXRfZ3Vlc3RfdGltZSh2KTsKLSAg ICBzLT5jb3VudCA9IHZhbDsKLSAgICBwZXJpb2QgPSBESVZfUk9VTkQodmFsICogU1lTVEVNX1RJ TUVfSFosIFBJVF9GUkVRKTsKLQotICAgIGlmICggKHYgPT0gTlVMTCkgfHwgIWlzX2h2bV92Y3B1 KHYpIHx8IChjaGFubmVsICE9IDApICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoICgg cy0+bW9kZSApCi0gICAgewotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICAgIC8qIFBl cmlvZGljIHRpbWVyLiAqLwotICAgICAgICBUUkFDRV8yRChUUkNfSFZNX0VNVUxfUElUX1NUQVJU X1RJTUVSLCBwZXJpb2QsIHBlcmlvZCk7Ci0gICAgICAgIGNyZWF0ZV9wZXJpb2RpY190aW1lKHYs ICZwaXQtPnB0MCwgcGVyaW9kLCBwZXJpb2QsIDAsIHBpdF90aW1lX2ZpcmVkLCAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnBpdC0+Y291bnRfbG9hZF90aW1lW2NoYW5uZWxdLCBmYWxz ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICBjYXNlIDQ6Ci0gICAgICAgIC8q IE9uZS1zaG90IHRpbWVyLiAqLwotICAgICAgICBUUkFDRV8yRChUUkNfSFZNX0VNVUxfUElUX1NU QVJUX1RJTUVSLCBwZXJpb2QsIDApOwotICAgICAgICBjcmVhdGVfcGVyaW9kaWNfdGltZSh2LCAm cGl0LT5wdDAsIHBlcmlvZCwgMCwgMCwgcGl0X3RpbWVfZmlyZWQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSwgZmFsc2UpOwotICAg ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUUkFDRV8wRChUUkNfSFZNX0VNVUxf UElUX1NUT1BfVElNRVIpOwotICAgICAgICBkZXN0cm95X3BlcmlvZGljX3RpbWUoJnBpdC0+cHQw KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwaXRfbGF0Y2hfY291 bnQoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCi17Ci0gICAgc3RydWN0IGh2bV9od19waXRf Y2hhbm5lbCAqYyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOwotCi0gICAgQVNTRVJUKHNw aW5faXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKLQotICAgIGlmICggIWMtPmNvdW50X2xhdGNoZWQg KQotICAgIHsKLSAgICAgICAgYy0+bGF0Y2hlZF9jb3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBj aGFubmVsKTsKLSAgICAgICAgYy0+Y291bnRfbGF0Y2hlZCA9IGMtPnJ3X21vZGU7Ci0gICAgfQot fQotCi1zdGF0aWMgdm9pZCBwaXRfbGF0Y2hfc3RhdHVzKFBJVFN0YXRlICpwaXQsIGludCBjaGFu bmVsKQotewotICAgIHN0cnVjdCBodm1faHdfcGl0X2NoYW5uZWwgKmMgPSAmcGl0LT5ody5jaGFu bmVsc1tjaGFubmVsXTsKLQotICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7 Ci0KLSAgICBpZiAoICFjLT5zdGF0dXNfbGF0Y2hlZCApCi0gICAgewotICAgICAgICAvKiBUT0RP OiBSZXR1cm4gTlVMTCBDT1VOVCAoYml0IDYpLiAqLwotICAgICAgICBjLT5zdGF0dXMgPSAoKHBp dF9nZXRfb3V0KHBpdCwgY2hhbm5lbCkgPDwgNykgfAotICAgICAgICAgICAgICAgICAgICAgKGMt PnJ3X21vZGUgPDwgNCkgfAotICAgICAgICAgICAgICAgICAgICAgKGMtPm1vZGUgPDwgMSkgfAot ICAgICAgICAgICAgICAgICAgICAgYy0+YmNkKTsKLSAgICAgICAgYy0+c3RhdHVzX2xhdGNoZWQg PSAxOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcGl0X2lvcG9ydF93cml0ZShzdHJ1Y3QgUElU U3RhdGUgKnBpdCwgdWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQotewotICAgIGludCBjaGFu bmVsLCBhY2Nlc3M7Ci0gICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqczsKLQotICAgIHZh bCAgJj0gMHhmZjsKLSAgICBhZGRyICY9IDM7Ci0KLSAgICBzcGluX2xvY2soJnBpdC0+bG9jayk7 Ci0KLSAgICBpZiAoIGFkZHIgPT0gMyApCi0gICAgewotICAgICAgICBjaGFubmVsID0gdmFsID4+ IDY7Ci0gICAgICAgIGlmICggY2hhbm5lbCA9PSAzICkKLSAgICAgICAgewotICAgICAgICAgICAg LyogUmVhZC1CYWNrIENvbW1hbmQuICovCi0gICAgICAgICAgICBmb3IgKCBjaGFubmVsID0gMDsg Y2hhbm5lbCA8IDM7IGNoYW5uZWwrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg cyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOwotICAgICAgICAgICAgICAgIGlmICggdmFs ICYgKDIgPDwgY2hhbm5lbCkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCAhKHZhbCAmIDB4MjApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpdF9sYXRj aF9jb3VudChwaXQsIGNoYW5uZWwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoICEodmFsICYg MHgxMCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcGl0X2xhdGNoX3N0YXR1cyhwaXQsIGNo YW5uZWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFNlbGVjdCBDb3VudGVyIDxjaGFu bmVsPi4gKi8KLSAgICAgICAgICAgIHMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKLSAg ICAgICAgICAgIGFjY2VzcyA9ICh2YWwgPj4gNCkgJiAzOwotICAgICAgICAgICAgaWYgKCBhY2Nl c3MgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGl0X2xhdGNoX2NvdW50 KHBpdCwgY2hhbm5lbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgcy0+cndfbW9kZSA9IGFjY2VzczsKLSAgICAgICAgICAg ICAgICBzLT5yZWFkX3N0YXRlID0gYWNjZXNzOwotICAgICAgICAgICAgICAgIHMtPndyaXRlX3N0 YXRlID0gYWNjZXNzOwotICAgICAgICAgICAgICAgIHMtPm1vZGUgPSAodmFsID4+IDEpICYgNzsK LSAgICAgICAgICAgICAgICBpZiAoIHMtPm1vZGUgPiA1ICkKLSAgICAgICAgICAgICAgICAgICAg cy0+bW9kZSAtPSA0OwotICAgICAgICAgICAgICAgIHMtPmJjZCA9IHZhbCAmIDE7Ci0gICAgICAg ICAgICAgICAgLyogWFhYOiB1cGRhdGUgaXJxIHRpbWVyID8gKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvKiBXcml0ZSBDb3VudC4g Ki8KLSAgICAgICAgcyA9ICZwaXQtPmh3LmNoYW5uZWxzW2FkZHJdOwotICAgICAgICBzd2l0Y2gg KCBzLT53cml0ZV9zdGF0ZSApCi0gICAgICAgIHsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg Y2FzZSBSV19TVEFURV9MU0I6Ci0gICAgICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGFkZHIs IHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSV19TVEFURV9NU0I6Ci0g ICAgICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGFkZHIsIHZhbCA8PCA4KTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJXX1NUQVRFX1dPUkQwOgotICAgICAgICAgICAgcy0+ d3JpdGVfbGF0Y2ggPSB2YWw7Ci0gICAgICAgICAgICBzLT53cml0ZV9zdGF0ZSA9IFJXX1NUQVRF X1dPUkQxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUldfU1RBVEVfV09SRDE6 Ci0gICAgICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGFkZHIsIHMtPndyaXRlX2xhdGNoIHwg KHZhbCA8PCA4KSk7Ci0gICAgICAgICAgICBzLT53cml0ZV9zdGF0ZSA9IFJXX1NUQVRFX1dPUkQw OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzcGluX3VubG9j aygmcGl0LT5sb2NrKTsKLX0KLQotc3RhdGljIHVpbnQzMl90IHBpdF9pb3BvcnRfcmVhZChzdHJ1 Y3QgUElUU3RhdGUgKnBpdCwgdWludDMyX3QgYWRkcikKLXsKLSAgICBpbnQgcmV0LCBjb3VudDsK LSAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzOwotICAgIAotICAgIGFkZHIgJj0gMzsK LSAgICBzID0gJnBpdC0+aHcuY2hhbm5lbHNbYWRkcl07Ci0KLSAgICBzcGluX2xvY2soJnBpdC0+ bG9jayk7Ci0KLSAgICBpZiAoIHMtPnN0YXR1c19sYXRjaGVkICkKLSAgICB7Ci0gICAgICAgIHMt PnN0YXR1c19sYXRjaGVkID0gMDsKLSAgICAgICAgcmV0ID0gcy0+c3RhdHVzOwotICAgIH0KLSAg ICBlbHNlIGlmICggcy0+Y291bnRfbGF0Y2hlZCApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBz LT5jb3VudF9sYXRjaGVkICkKLSAgICAgICAgewotICAgICAgICBkZWZhdWx0OgotICAgICAgICBj YXNlIFJXX1NUQVRFX0xTQjoKLSAgICAgICAgICAgIHJldCA9IHMtPmxhdGNoZWRfY291bnQgJiAw eGZmOwotICAgICAgICAgICAgcy0+Y291bnRfbGF0Y2hlZCA9IDA7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgY2FzZSBSV19TVEFURV9NU0I6Ci0gICAgICAgICAgICByZXQgPSBzLT5sYXRj aGVkX2NvdW50ID4+IDg7Ci0gICAgICAgICAgICBzLT5jb3VudF9sYXRjaGVkID0gMDsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJXX1NUQVRFX1dPUkQwOgotICAgICAgICAgICAg cmV0ID0gcy0+bGF0Y2hlZF9jb3VudCAmIDB4ZmY7Ci0gICAgICAgICAgICBzLT5jb3VudF9sYXRj aGVkID0gUldfU1RBVEVfTVNCOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc3dpdGNoICggcy0+cmVhZF9zdGF0ZSApCi0gICAg ICAgIHsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgY2FzZSBSV19TVEFURV9MU0I6Ci0gICAg ICAgICAgICBjb3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBhZGRyKTsKLSAgICAgICAgICAgIHJl dCA9IGNvdW50ICYgMHhmZjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJXX1NU QVRFX01TQjoKLSAgICAgICAgICAgIGNvdW50ID0gcGl0X2dldF9jb3VudChwaXQsIGFkZHIpOwot ICAgICAgICAgICAgcmV0ID0gKGNvdW50ID4+IDgpICYgMHhmZjsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICBjYXNlIFJXX1NUQVRFX1dPUkQwOgotICAgICAgICAgICAgY291bnQgPSBwaXRf Z2V0X2NvdW50KHBpdCwgYWRkcik7Ci0gICAgICAgICAgICByZXQgPSBjb3VudCAmIDB4ZmY7Ci0g ICAgICAgICAgICBzLT5yZWFkX3N0YXRlID0gUldfU1RBVEVfV09SRDE7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgY2FzZSBSV19TVEFURV9XT1JEMToKLSAgICAgICAgICAgIGNvdW50ID0g cGl0X2dldF9jb3VudChwaXQsIGFkZHIpOwotICAgICAgICAgICAgcmV0ID0gKGNvdW50ID4+IDgp ICYgMHhmZjsKLSAgICAgICAgICAgIHMtPnJlYWRfc3RhdGUgPSBSV19TVEFURV9XT1JEMDsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Bpbl91bmxvY2soJnBp dC0+bG9jayk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi12b2lkIHBpdF9zdG9wX2NoYW5uZWww X2lycShQSVRTdGF0ZSAqcGl0KQotewotICAgIGlmICggIWhhc192cGl0KGN1cnJlbnQtPmRvbWFp bikgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFDRV8wRChUUkNfSFZNX0VNVUxfUElUX1NU T1BfVElNRVIpOwotICAgIHNwaW5fbG9jaygmcGl0LT5sb2NrKTsKLSAgICBkZXN0cm95X3Blcmlv ZGljX3RpbWUoJnBpdC0+cHQwKTsKLSAgICBzcGluX3VubG9jaygmcGl0LT5sb2NrKTsKLX0KLQot c3RhdGljIGludCBwaXRfc2F2ZShzdHJ1Y3QgZG9tYWluICpkLCBodm1fZG9tYWluX2NvbnRleHRf dCAqaCkKLXsKLSAgICBQSVRTdGF0ZSAqcGl0ID0gZG9tYWluX3ZwaXQoZCk7Ci0gICAgaW50IHJj OwotCi0gICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHNw aW5fbG9jaygmcGl0LT5sb2NrKTsKLSAgICAKLSAgICByYyA9IGh2bV9zYXZlX2VudHJ5KFBJVCwg MCwgaCwgJnBpdC0+aHcpOwotCi0gICAgc3Bpbl91bmxvY2soJnBpdC0+bG9jayk7Ci0KLSAgICBy ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcGl0X2xvYWQoc3RydWN0IGRvbWFpbiAqZCwgaHZt X2RvbWFpbl9jb250ZXh0X3QgKmgpCi17Ci0gICAgUElUU3RhdGUgKnBpdCA9IGRvbWFpbl92cGl0 KGQpOwotICAgIGludCBpOwotCi0gICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQotICAgICAgICByZXR1 cm4gLUVOT0RFVjsKLQotICAgIHNwaW5fbG9jaygmcGl0LT5sb2NrKTsKLQotICAgIGlmICggaHZt X2xvYWRfZW50cnkoUElULCBoLCAmcGl0LT5odykgKQotICAgIHsKLSAgICAgICAgc3Bpbl91bmxv Y2soJnBpdC0+bG9jayk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAvKgot ICAgICAqIFJlY3JlYXRlIHBsYXRmb3JtIHRpbWVycyBmcm9tIGhhcmR3YXJlIHN0YXRlLiAgVGhl cmUgd2lsbCBiZSBzb21lIAotICAgICAqIHRpbWUgaml0dGVyIGhlcmUsIGJ1dCB0aGUgd2FsbC1j bG9jayB3aWxsIGhhdmUganVtcGVkIG1hc3NpdmVseSwgc28gCi0gICAgICogd2UgaG9wZSB0aGUg Z3Vlc3QgY2FuIGhhbmRsZSBpdC4KLSAgICAgKi8KLSAgICBwaXQtPnB0MC5sYXN0X3BsdF9ndGlt ZSA9IGdldF9ndWVzdF90aW1lKGQtPnZjcHVbMF0pOwotICAgIGZvciAoIGkgPSAwOyBpIDwgMzsg aSsrICkKLSAgICAgICAgcGl0X2xvYWRfY291bnQocGl0LCBpLCBwaXQtPmh3LmNoYW5uZWxzW2ld LmNvdW50KTsKLQotICAgIHNwaW5fdW5sb2NrKCZwaXQtPmxvY2spOwotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KLUhWTV9SRUdJU1RFUl9TQVZFX1JFU1RPUkUoUElULCBwaXRfc2F2ZSwgcGl0X2xvYWQs IDEsIEhWTVNSX1BFUl9ET00pOwotCi12b2lkIHBpdF9yZXNldChzdHJ1Y3QgZG9tYWluICpkKQot ewotICAgIFBJVFN0YXRlICpwaXQgPSBkb21haW5fdnBpdChkKTsKLSAgICBzdHJ1Y3QgaHZtX2h3 X3BpdF9jaGFubmVsICpzOwotICAgIGludCBpOwotCi0gICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQot ICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFDRV8wRChUUkNfSFZNX0VNVUxfUElUX1NUT1BfVElN RVIpOwotICAgIGRlc3Ryb3lfcGVyaW9kaWNfdGltZSgmcGl0LT5wdDApOwotICAgIHBpdC0+cHQw LnNvdXJjZSA9IFBUU1JDX2lzYTsKLQotICAgIHNwaW5fbG9jaygmcGl0LT5sb2NrKTsKLQotICAg IGZvciAoIGkgPSAwOyBpIDwgMzsgaSsrICkKLSAgICB7Ci0gICAgICAgIHMgPSAmcGl0LT5ody5j aGFubmVsc1tpXTsKLSAgICAgICAgcy0+bW9kZSA9IDB4ZmY7IC8qIHRoZSBpbml0IG1vZGUgKi8K LSAgICAgICAgcy0+Z2F0ZSA9IChpICE9IDIpOwotICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQs IGksIDApOwotICAgIH0KLQotICAgIHNwaW5fdW5sb2NrKCZwaXQtPmxvY2spOwotfQotCi12b2lk IHBpdF9pbml0KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgY3B1X2toeikKLXsKLSAg ICBQSVRTdGF0ZSAqcGl0ID0gZG9tYWluX3ZwaXQoZCk7Ci0KLSAgICBpZiAoICFoYXNfdnBpdChk KSApCi0gICAgICAgIHJldHVybjsKLQotICAgIHNwaW5fbG9ja19pbml0KCZwaXQtPmxvY2spOwot Ci0gICAgaWYgKCBpc19odm1fZG9tYWluKGQpICkKLSAgICB7Ci0gICAgICAgIHJlZ2lzdGVyX3Bv cnRpb19oYW5kbGVyKGQsIFBJVF9CQVNFLCA0LCBoYW5kbGVfcGl0X2lvKTsKLSAgICAgICAgcmVn aXN0ZXJfcG9ydGlvX2hhbmRsZXIoZCwgMHg2MSwgMSwgaGFuZGxlX3NwZWFrZXJfaW8pOwotICAg IH0KLQotICAgIHBpdF9yZXNldChkKTsKLX0KLQotdm9pZCBwaXRfZGVpbml0KHN0cnVjdCBkb21h aW4gKmQpCi17Ci0gICAgUElUU3RhdGUgKnBpdCA9IGRvbWFpbl92cGl0KGQpOwotCi0gICAgaWYg KCAhaGFzX3ZwaXQoZCkgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFDRV8wRChUUkNfSFZN X0VNVUxfUElUX1NUT1BfVElNRVIpOwotICAgIGRlc3Ryb3lfcGVyaW9kaWNfdGltZSgmcGl0LT5w dDApOwotfQotCi0vKiB0aGUgaW50ZXJjZXB0IGFjdGlvbiBmb3IgUElUIERNIHJldHZhbDowLS1u b3QgaGFuZGxlZDsgMS0taGFuZGxlZCAqLyAgCi1zdGF0aWMgaW50IGhhbmRsZV9waXRfaW8oCi0g ICAgaW50IGRpciwgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywgdWludDMy X3QgKnZhbCkKLXsKLSAgICBzdHJ1Y3QgUElUU3RhdGUgKnZwaXQgPSB2Y3B1X3ZwaXQoY3VycmVu dCk7Ci0KLSAgICBpZiAoIGJ5dGVzICE9IDEgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsICJQSVQgYmFkIGFjY2Vzc1xuIik7Ci0gICAgICAgICp2YWwgPSB+MDsKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICB9Ci0KLSAgICBpZiAoIGRpciA9PSBJT1JF UV9XUklURSApCi0gICAgewotICAgICAgICBwaXRfaW9wb3J0X3dyaXRlKHZwaXQsIHBvcnQsICp2 YWwpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIChwb3J0ICYgMykgIT0g MyApCi0gICAgICAgICAgICAqdmFsID0gcGl0X2lvcG9ydF9yZWFkKHZwaXQsIHBvcnQpOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIlBJVDogcmVh ZCBBMTpBMD0zIVxuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQot c3RhdGljIHZvaWQgc3BlYWtlcl9pb3BvcnRfd3JpdGUoCi0gICAgc3RydWN0IFBJVFN0YXRlICpw aXQsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHZhbCkKLXsKLSAgICBwaXQtPmh3LnNwZWFrZXJf ZGF0YV9vbiA9ICh2YWwgPj4gMSkgJiAxOwotICAgIHBpdF9zZXRfZ2F0ZShwaXQsIDIsIHZhbCAm IDEpOwotfQotCi1zdGF0aWMgdWludDMyX3Qgc3BlYWtlcl9pb3BvcnRfcmVhZCgKLSAgICBzdHJ1 Y3QgUElUU3RhdGUgKnBpdCwgdWludDMyX3QgYWRkcikKLXsKLSAgICAvKiBSZWZyZXNoIGNsb2Nr IHRvZ2dsZXMgYXQgYWJvdXQgMTV1cy4gV2UgYXBwcm94aW1hdGUgYXMgMl4xNG5zLiAqLwotICAg IHVuc2lnbmVkIGludCByZWZyZXNoX2Nsb2NrID0gKCh1bnNpZ25lZCBpbnQpTk9XKCkgPj4gMTQp ICYgMTsKLSAgICByZXR1cm4gKChwaXQtPmh3LnNwZWFrZXJfZGF0YV9vbiA8PCAxKSB8IHBpdF9n ZXRfZ2F0ZShwaXQsIDIpIHwKLSAgICAgICAgICAgIChwaXRfZ2V0X291dChwaXQsIDIpIDw8IDUp IHwgKHJlZnJlc2hfY2xvY2sgPDwgNCkpOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV9zcGVha2Vy X2lvKAotICAgIGludCBkaXIsIHVuc2lnbmVkIGludCBwb3J0LCB1aW50MzJfdCBieXRlcywgdWlu dDMyX3QgKnZhbCkKLXsKLSAgICBzdHJ1Y3QgUElUU3RhdGUgKnZwaXQgPSB2Y3B1X3ZwaXQoY3Vy cmVudCk7Ci0KLSAgICBCVUdfT04oYnl0ZXMgIT0gMSk7Ci0KLSAgICBzcGluX2xvY2soJnZwaXQt PmxvY2spOwotCi0gICAgaWYgKCBkaXIgPT0gSU9SRVFfV1JJVEUgKQotICAgICAgICBzcGVha2Vy X2lvcG9ydF93cml0ZSh2cGl0LCBwb3J0LCAqdmFsKTsKLSAgICBlbHNlCi0gICAgICAgICp2YWwg PSBzcGVha2VyX2lvcG9ydF9yZWFkKHZwaXQsIHBvcnQpOwotCi0gICAgc3Bpbl91bmxvY2soJnZw aXQtPmxvY2spOwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotaW50IHB2X3BpdF9o YW5kbGVyKGludCBwb3J0LCBpbnQgZGF0YSwgaW50IHdyaXRlKQotewotICAgIGlvcmVxX3QgaW9y ZXEgPSB7Ci0gICAgICAgIC5zaXplID0gMSwKLSAgICAgICAgLnR5cGUgPSBJT1JFUV9UWVBFX1BJ TywKLSAgICAgICAgLmFkZHIgPSBwb3J0LAotICAgICAgICAuZGlyICA9IHdyaXRlID8gSU9SRVFf V1JJVEUgOiBJT1JFUV9SRUFELAotICAgICAgICAuZGF0YSA9IGRhdGEKLSAgICB9OwotCi0gICAg aWYgKCAhaGFzX3ZwaXQoY3VycmVudC0+ZG9tYWluKSApCi0gICAgICAgIHJldHVybiB+MDsKLQot ICAgIGlmICggaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJlbnQtPmRvbWFpbikgJiYgaHdkb21fcGl0 X2FjY2VzcygmaW9yZXEpICkKLSAgICB7Ci0gICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi87Ci0g ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90IHZhbCA9IGRhdGE7Ci0gICAg ICAgIGlmICggcG9ydCA9PSAweDYxICkKLSAgICAgICAgICAgIGhhbmRsZV9zcGVha2VyX2lvKGlv cmVxLmRpciwgcG9ydCwgMSwgJnZhbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRs ZV9waXRfaW8oaW9yZXEuZGlyLCBwb3J0LCAxLCAmdmFsKTsKLSAgICAgICAgaW9yZXEuZGF0YSA9 IHZhbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gIXdyaXRlID8gaW9yZXEuZGF0YSA6IDA7Ci19Ci0K LS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBtb2RlOiBDCi0gKiBjLWZpbGUtc3R5bGU6ICJC U0QiCi0gKiBjLWJhc2ljLW9mZnNldDogNAotICogaW5kZW50LXRhYnMtbW9kZTogbmlsCi0gKiBF bmQ6Ci0gKi8KLS0gCmdpdC1zZXJpZXMgMC45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby94ZW4tZGV2ZWw=