From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 30/34] x86: PIT emulation is common to PV and HVM Date: Fri, 17 Aug 2018 16:12:48 +0100 Message-ID: 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 1fqggT-000231-Dy for xen-devel@lists.xenproject.org; Fri, 17 Aug 2018 15:29:05 +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 TW92ZSB0aGUgY29tbW9uIHBhcnRzIHRvIGVtdWwtaTgyNTQuYy4gVGhpcyByZXF1aXJlcyBtb3Zp bmcgc29tZSBvZgp0aGUgbWFjcm9zIHRvIHZwdC5oLiBTb21lIG9mIHRoZSBjb2RlIGluIGNvbW1v biBjb2RlIGlzIHB1dCB1bmRlcgppc19odm1fKiBjaGVja3Mgc28gdGhhdCBEQ0UgY2FuIGtpY2sg aW4uIEZhY3RvciBvdXQgSFZNIG9ubHkKcGl0X2xvYWRfY291bnRfY2hhbm5lbDAgdG8gcmVkdWNl IGFtb3VudCBvZiBjb2RlIGluIHg4NiBjb21tb24gY29kZS4KCkxlYXZlIEhWTSBzcGVjaWZpYyBj b2RlIHdoZXJlIGl0IHdhcyBiZWZvcmUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1 MkBjaXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9NYWtlZmlsZSAgICAgICAgIHwgICAxICst CiB4ZW4vYXJjaC94ODYvZW11bC1pODI1NC5jICAgICB8IDUwNiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KIHhlbi9hcmNoL3g4Ni9odm0vaTgyNTQuYyAgICAgIHwgNDYyICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0v dnB0LmggfCAgIDkgKy0KIDQgZmlsZXMgY2hhbmdlZCwgNTIxIGluc2VydGlvbnMoKyksIDQ1NyBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvZW11bC1pODI1NC5j CgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L01ha2Vm aWxlCmluZGV4IDliOWI2M2EuLjVhNDJmZjcgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9NYWtl ZmlsZQorKysgYi94ZW4vYXJjaC94ODYvTWFrZWZpbGUKQEAgLTI3LDYgKzI3LDcgQEAgb2JqLXkg Kz0gZG9tYWluLm8KIG9iai1iaW4teSArPSBkb20wX2J1aWxkLmluaXQubwogb2JqLXkgKz0gZG9t YWluX3BhZ2Uubwogb2JqLXkgKz0gZTgyMC5vCitvYmoteSArPSBlbXVsLWk4MjU0Lm8KIG9iai15 ICs9IGV4dGFibGUubwogb2JqLXkgKz0gZmx1c2h0bGIubwogb2JqLSQoQ09ORklHX0NSQVNIX0RF QlVHKSArPSBnZGJzdHViLm8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9lbXVsLWk4MjU0LmMg Yi94ZW4vYXJjaC94ODYvZW11bC1pODI1NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjYwNTA5OGMKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC94ODYvZW11bC1pODI1 NC5jCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogUUVNVSA4MjUzLzgyNTQgaW50ZXJ2YWwgdGlt ZXIgZW11bGF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgRmFicmljZSBCZWxs YXJkCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSW50ZWwgQ29ycGVyYXRpb24KKyAqIENvcHlyaWdo dCAoYykgMjAwNyBLZWlyIEZyYXNlciwgWGVuU291cmNlIEluYy4KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKwor I2luY2x1ZGUgPHhlbi90eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgorI2luY2x1ZGUgPHhl bi94bWFsbG9jLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5o PgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi90cmFjZS5oPgorI2luY2x1 ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2h2bS9odm0uaD4KKyNpbmNsdWRlIDxhc20v aHZtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2h2bS9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2h2 bS92cHQuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorCisjZGVmaW5lIFJXX1NUQVRFX0xT QiAxCisjZGVmaW5lIFJXX1NUQVRFX01TQiAyCisjZGVmaW5lIFJXX1NUQVRFX1dPUkQwIDMKKyNk ZWZpbmUgUldfU1RBVEVfV09SRDEgNAorCisjZGVmaW5lIHZjcHVfdnBpdCh4KSAgIChkb21haW5f dnBpdCgoeCktPmRvbWFpbikpCisKK3N0YXRpYyBpbnQgcGl0X2dldF9jb3VudChQSVRTdGF0ZSAq cGl0LCBpbnQgY2hhbm5lbCkKK3sKKyAgICB1aW50NjRfdCBkOworICAgIGludCAgY291bnRlcjsK KyAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpjID0gJnBpdC0+aHcuY2hhbm5lbHNbY2hh bm5lbF07CisgICAgc3RydWN0IHZjcHUgKnYgPSB2cGl0X3ZjcHUocGl0KTsKKworICAgIEFTU0VS VChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7CisKKyAgICBkID0gbXVsZGl2NjQoZ2V0X2d1 ZXN0X3RpbWUodikgLSBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSwKKyAgICAgICAgICAg ICAgICAgUElUX0ZSRVEsIFNZU1RFTV9USU1FX0haKTsKKworICAgIHN3aXRjaCAoIGMtPm1vZGUg KQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgNDoKKyAgICBjYXNl IDU6CisgICAgICAgIGNvdW50ZXIgPSAoYy0+Y291bnQgLSBkKSAmIDB4ZmZmZjsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICAvKiBYWFg6IG1heSBiZSBpbmNvcnJlY3QgZm9y IG9kZCBjb3VudHMgKi8KKyAgICAgICAgY291bnRlciA9IGMtPmNvdW50IC0gKCgyICogZCkgJSBj LT5jb3VudCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvdW50ZXIg PSBjLT5jb3VudCAtIChkICUgYy0+Y291bnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg cmV0dXJuIGNvdW50ZXI7Cit9CisKK3N0YXRpYyBpbnQgcGl0X2dldF9vdXQoUElUU3RhdGUgKnBp dCwgaW50IGNoYW5uZWwpCit7CisgICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqcyA9ICZw aXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworICAgIHVpbnQ2NF90IGQ7CisgICAgaW50IG91dDsK KyAgICBzdHJ1Y3QgdmNwdSAqdiA9IHZwaXRfdmNwdShwaXQpOworCisgICAgQVNTRVJUKHNwaW5f aXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKKworICAgIGQgPSBtdWxkaXY2NChnZXRfZ3Vlc3RfdGlt ZSh2KSAtIHBpdC0+Y291bnRfbG9hZF90aW1lW2NoYW5uZWxdLAorICAgICAgICAgICAgICAgICBQ SVRfRlJFUSwgU1lTVEVNX1RJTUVfSFopOworCisgICAgc3dpdGNoICggcy0+bW9kZSApCisgICAg eworICAgIGRlZmF1bHQ6CisgICAgY2FzZSAwOgorICAgICAgICBvdXQgPSAoZCA+PSBzLT5jb3Vu dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgb3V0ID0gKGQgPCBzLT5j b3VudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgb3V0ID0gKCgoZCAl IHMtPmNvdW50KSA9PSAwKSAmJiAoZCAhPSAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug MzoKKyAgICAgICAgb3V0ID0gKChkICUgcy0+Y291bnQpIDwgKChzLT5jb3VudCArIDEpID4+IDEp KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgIGNhc2UgNToKKyAgICAgICAgb3V0 ID0gKGQgPT0gcy0+Y291bnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g b3V0OworfQorCitzdGF0aWMgdm9pZCBwaXRfc2V0X2dhdGUoUElUU3RhdGUgKnBpdCwgaW50IGNo YW5uZWwsIGludCB2YWwpCit7CisgICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqcyA9ICZw aXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworICAgIHN0cnVjdCB2Y3B1ICp2ID0gdnBpdF92Y3B1 KHBpdCk7CisKKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBpdC0+bG9jaykpOworCisgICAg c3dpdGNoICggcy0+bW9kZSApCisgICAgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSAwOgorICAg IGNhc2UgNDoKKyAgICAgICAgLyogWFhYOiBqdXN0IGRpc2FibGUvZW5hYmxlIGNvdW50aW5nICov CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDU6CisgICAgY2FzZSAyOgor ICAgIGNhc2UgMzoKKyAgICAgICAgLyogUmVzdGFydCBjb3VudGluZyBvbiByaXNpbmcgZWRnZS4g Ki8KKyAgICAgICAgaWYgKCBzLT5nYXRlIDwgdmFsICkKKyAgICAgICAgICAgIHBpdC0+Y291bnRf bG9hZF90aW1lW2NoYW5uZWxdID0gZ2V0X2d1ZXN0X3RpbWUodik7CisgICAgICAgIGJyZWFrOwor ICAgIH0KKworICAgIHMtPmdhdGUgPSB2YWw7Cit9CisKK3N0YXRpYyBpbnQgcGl0X2dldF9nYXRl KFBJVFN0YXRlICpwaXQsIGludCBjaGFubmVsKQoreworICAgIEFTU0VSVChzcGluX2lzX2xvY2tl ZCgmcGl0LT5sb2NrKSk7CisgICAgcmV0dXJuIHBpdC0+aHcuY2hhbm5lbHNbY2hhbm5lbF0uZ2F0 ZTsKK30KKwordm9pZCBwaXRfbG9hZF9jb3VudChQSVRTdGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCwg aW50IHZhbCkKK3sKKyAgICB1MzIgcGVyaW9kOworICAgIHN0cnVjdCBodm1faHdfcGl0X2NoYW5u ZWwgKnMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKKyAgICBzdHJ1Y3QgdmNwdSAqdiA9 IHZwaXRfdmNwdShwaXQpOworCisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxvY2sp KTsKKworICAgIGlmICggdmFsID09IDAgKQorICAgICAgICB2YWwgPSAweDEwMDAwOworCisgICAg aWYgKCB2ID09IE5VTEwgKQorICAgICAgICBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSA9 IDA7CisgICAgZWxzZQorICAgICAgICBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSA9IGdl dF9ndWVzdF90aW1lKHYpOworICAgIHMtPmNvdW50ID0gdmFsOworICAgIHBlcmlvZCA9IERJVl9S T1VORCh2YWwgKiBTWVNURU1fVElNRV9IWiwgUElUX0ZSRVEpOworCisgICAgaWYgKCAodiA9PSBO VUxMKSB8fCAoY2hhbm5lbCAhPSAwKSApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICggaXNf aHZtX3ZjcHUodikgKQorICAgICAgICBwaXRfbG9hZF9jb3VudF9jaGFubmVsMChwaXQsIHBlcmlv ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHBpdF9sYXRjaF9jb3VudChQSVRTdGF0ZSAqcGl0LCBpbnQg Y2hhbm5lbCkKK3sKKyAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpjID0gJnBpdC0+aHcu Y2hhbm5lbHNbY2hhbm5lbF07CisKKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBpdC0+bG9j aykpOworCisgICAgaWYgKCAhYy0+Y291bnRfbGF0Y2hlZCApCisgICAgeworICAgICAgICBjLT5s YXRjaGVkX2NvdW50ID0gcGl0X2dldF9jb3VudChwaXQsIGNoYW5uZWwpOworICAgICAgICBjLT5j b3VudF9sYXRjaGVkID0gYy0+cndfbW9kZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBpdF9s YXRjaF9zdGF0dXMoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCit7CisgICAgc3RydWN0IGh2 bV9od19waXRfY2hhbm5lbCAqYyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworCisgICAg QVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKKworICAgIGlmICggIWMtPnN0YXR1 c19sYXRjaGVkICkKKyAgICB7CisgICAgICAgIC8qIFRPRE86IFJldHVybiBOVUxMIENPVU5UIChi aXQgNikuICovCisgICAgICAgIGMtPnN0YXR1cyA9ICgocGl0X2dldF9vdXQocGl0LCBjaGFubmVs KSA8PCA3KSB8CisgICAgICAgICAgICAgICAgICAgICAoYy0+cndfbW9kZSA8PCA0KSB8CisgICAg ICAgICAgICAgICAgICAgICAoYy0+bW9kZSA8PCAxKSB8CisgICAgICAgICAgICAgICAgICAgICBj LT5iY2QpOworICAgICAgICBjLT5zdGF0dXNfbGF0Y2hlZCA9IDE7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBwaXRfaW9wb3J0X3dyaXRlKHN0cnVjdCBQSVRTdGF0ZSAqcGl0LCB1aW50MzJfdCBh ZGRyLCB1aW50MzJfdCB2YWwpCit7CisgICAgaW50IGNoYW5uZWwsIGFjY2VzczsKKyAgICBzdHJ1 Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzOworCisgICAgdmFsICAmPSAweGZmOworICAgIGFkZHIg Jj0gMzsKKworICAgIHNwaW5fbG9jaygmcGl0LT5sb2NrKTsKKworICAgIGlmICggYWRkciA9PSAz ICkKKyAgICB7CisgICAgICAgIGNoYW5uZWwgPSB2YWwgPj4gNjsKKyAgICAgICAgaWYgKCBjaGFu bmVsID09IDMgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBSZWFkLUJhY2sgQ29tbWFuZC4g Ki8KKyAgICAgICAgICAgIGZvciAoIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgY2hhbm5lbCsr ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzID0gJnBpdC0+aHcuY2hhbm5lbHNb Y2hhbm5lbF07CisgICAgICAgICAgICAgICAgaWYgKCB2YWwgJiAoMiA8PCBjaGFubmVsKSApCisg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICEodmFsICYgMHgyMCkg KQorICAgICAgICAgICAgICAgICAgICAgICAgcGl0X2xhdGNoX2NvdW50KHBpdCwgY2hhbm5lbCk7 CisgICAgICAgICAgICAgICAgICAgIGlmICggISh2YWwgJiAweDEwKSApCisgICAgICAgICAgICAg ICAgICAgICAgICBwaXRfbGF0Y2hfc3RhdHVzKHBpdCwgY2hhbm5lbCk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor ICAgICAgICAgICAgLyogU2VsZWN0IENvdW50ZXIgPGNoYW5uZWw+LiAqLworICAgICAgICAgICAg cyA9ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOworICAgICAgICAgICAgYWNjZXNzID0gKHZh bCA+PiA0KSAmIDM7CisgICAgICAgICAgICBpZiAoIGFjY2VzcyA9PSAwICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBwaXRfbGF0Y2hfY291bnQocGl0LCBjaGFubmVsKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBzLT5yd19tb2RlID0gYWNjZXNzOworICAgICAgICAgICAgICAgIHMtPnJlYWRfc3RhdGUgPSBh Y2Nlc3M7CisgICAgICAgICAgICAgICAgcy0+d3JpdGVfc3RhdGUgPSBhY2Nlc3M7CisgICAgICAg ICAgICAgICAgcy0+bW9kZSA9ICh2YWwgPj4gMSkgJiA3OworICAgICAgICAgICAgICAgIGlmICgg cy0+bW9kZSA+IDUgKQorICAgICAgICAgICAgICAgICAgICBzLT5tb2RlIC09IDQ7CisgICAgICAg ICAgICAgICAgcy0+YmNkID0gdmFsICYgMTsKKyAgICAgICAgICAgICAgICAvKiBYWFg6IHVwZGF0 ZSBpcnEgdGltZXIgPyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs c2UKKyAgICB7CisgICAgICAgIC8qIFdyaXRlIENvdW50LiAqLworICAgICAgICBzID0gJnBpdC0+ aHcuY2hhbm5lbHNbYWRkcl07CisgICAgICAgIHN3aXRjaCAoIHMtPndyaXRlX3N0YXRlICkKKyAg ICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIFJXX1NUQVRFX0xTQjoKKyAg ICAgICAgICAgIHBpdF9sb2FkX2NvdW50KHBpdCwgYWRkciwgdmFsKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIFJXX1NUQVRFX01TQjoKKyAgICAgICAgICAgIHBpdF9sb2FkX2Nv dW50KHBpdCwgYWRkciwgdmFsIDw8IDgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgUldfU1RBVEVfV09SRDA6CisgICAgICAgICAgICBzLT53cml0ZV9sYXRjaCA9IHZhbDsKKyAg ICAgICAgICAgIHMtPndyaXRlX3N0YXRlID0gUldfU1RBVEVfV09SRDE7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSBSV19TVEFURV9XT1JEMToKKyAgICAgICAgICAgIHBpdF9sb2Fk X2NvdW50KHBpdCwgYWRkciwgcy0+d3JpdGVfbGF0Y2ggfCAodmFsIDw8IDgpKTsKKyAgICAgICAg ICAgIHMtPndyaXRlX3N0YXRlID0gUldfU1RBVEVfV09SRDA7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgIH0KKworICAgIHNwaW5fdW5sb2NrKCZwaXQtPmxvY2spOworfQorCitz dGF0aWMgdWludDMyX3QgcGl0X2lvcG9ydF9yZWFkKHN0cnVjdCBQSVRTdGF0ZSAqcGl0LCB1aW50 MzJfdCBhZGRyKQoreworICAgIGludCByZXQsIGNvdW50OworICAgIHN0cnVjdCBodm1faHdfcGl0 X2NoYW5uZWwgKnM7CisKKyAgICBhZGRyICY9IDM7CisgICAgcyA9ICZwaXQtPmh3LmNoYW5uZWxz W2FkZHJdOworCisgICAgc3Bpbl9sb2NrKCZwaXQtPmxvY2spOworCisgICAgaWYgKCBzLT5zdGF0 dXNfbGF0Y2hlZCApCisgICAgeworICAgICAgICBzLT5zdGF0dXNfbGF0Y2hlZCA9IDA7CisgICAg ICAgIHJldCA9IHMtPnN0YXR1czsKKyAgICB9CisgICAgZWxzZSBpZiAoIHMtPmNvdW50X2xhdGNo ZWQgKQorICAgIHsKKyAgICAgICAgc3dpdGNoICggcy0+Y291bnRfbGF0Y2hlZCApCisgICAgICAg IHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBSV19TVEFURV9MU0I6CisgICAgICAg ICAgICByZXQgPSBzLT5sYXRjaGVkX2NvdW50ICYgMHhmZjsKKyAgICAgICAgICAgIHMtPmNvdW50 X2xhdGNoZWQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUldfU1RBVEVf TVNCOgorICAgICAgICAgICAgcmV0ID0gcy0+bGF0Y2hlZF9jb3VudCA+PiA4OworICAgICAgICAg ICAgcy0+Y291bnRfbGF0Y2hlZCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSBSV19TVEFURV9XT1JEMDoKKyAgICAgICAgICAgIHJldCA9IHMtPmxhdGNoZWRfY291bnQgJiAw eGZmOworICAgICAgICAgICAgcy0+Y291bnRfbGF0Y2hlZCA9IFJXX1NUQVRFX01TQjsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg IHN3aXRjaCAoIHMtPnJlYWRfc3RhdGUgKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgIGNhc2UgUldfU1RBVEVfTFNCOgorICAgICAgICAgICAgY291bnQgPSBwaXRfZ2V0X2Nv dW50KHBpdCwgYWRkcik7CisgICAgICAgICAgICByZXQgPSBjb3VudCAmIDB4ZmY7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSV19TVEFURV9NU0I6CisgICAgICAgICAgICBjb3Vu dCA9IHBpdF9nZXRfY291bnQocGl0LCBhZGRyKTsKKyAgICAgICAgICAgIHJldCA9IChjb3VudCA+ PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSV19TVEFURV9X T1JEMDoKKyAgICAgICAgICAgIGNvdW50ID0gcGl0X2dldF9jb3VudChwaXQsIGFkZHIpOworICAg ICAgICAgICAgcmV0ID0gY291bnQgJiAweGZmOworICAgICAgICAgICAgcy0+cmVhZF9zdGF0ZSA9 IFJXX1NUQVRFX1dPUkQxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUldfU1RB VEVfV09SRDE6CisgICAgICAgICAgICBjb3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBhZGRyKTsK KyAgICAgICAgICAgIHJldCA9IChjb3VudCA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICBzLT5y ZWFkX3N0YXRlID0gUldfU1RBVEVfV09SRDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgIH0KKworICAgIHNwaW5fdW5sb2NrKCZwaXQtPmxvY2spOworCisgICAgcmV0dXJuIHJl dDsKK30KKworLyogdGhlIGludGVyY2VwdCBhY3Rpb24gZm9yIFBJVCBETSByZXR2YWw6MC0tbm90 IGhhbmRsZWQ7IDEtLWhhbmRsZWQgKi8KK3N0YXRpYyBpbnQgaGFuZGxlX3BpdF9pbygKKyAgICBp bnQgZGlyLCB1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCAq dmFsKQoreworICAgIHN0cnVjdCBQSVRTdGF0ZSAqdnBpdCA9IHZjcHVfdnBpdChjdXJyZW50KTsK KworICAgIGlmICggYnl0ZXMgIT0gMSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywgIlBJVCBiYWQgYWNjZXNzXG4iKTsKKyAgICAgICAgKnZhbCA9IH4wOworICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIH0KKworICAgIGlmICggZGlyID09IElPUkVRX1dS SVRFICkKKyAgICB7CisgICAgICAgIHBpdF9pb3BvcnRfd3JpdGUodnBpdCwgcG9ydCwgKnZhbCk7 CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICggKHBvcnQgJiAzKSAhPSAzICkK KyAgICAgICAgICAgICp2YWwgPSBwaXRfaW9wb3J0X3JlYWQodnBpdCwgcG9ydCk7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiUElUOiByZWFkIEEx OkEwPTMhXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0 aWMgdm9pZCBzcGVha2VyX2lvcG9ydF93cml0ZSgKKyAgICBzdHJ1Y3QgUElUU3RhdGUgKnBpdCwg dWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQoreworICAgIHBpdC0+aHcuc3BlYWtlcl9kYXRh X29uID0gKHZhbCA+PiAxKSAmIDE7CisgICAgcGl0X3NldF9nYXRlKHBpdCwgMiwgdmFsICYgMSk7 Cit9CisKK3N0YXRpYyB1aW50MzJfdCBzcGVha2VyX2lvcG9ydF9yZWFkKAorICAgIHN0cnVjdCBQ SVRTdGF0ZSAqcGl0LCB1aW50MzJfdCBhZGRyKQoreworICAgIC8qIFJlZnJlc2ggY2xvY2sgdG9n Z2xlcyBhdCBhYm91dCAxNXVzLiBXZSBhcHByb3hpbWF0ZSBhcyAyXjE0bnMuICovCisgICAgdW5z aWduZWQgaW50IHJlZnJlc2hfY2xvY2sgPSAoKHVuc2lnbmVkIGludClOT1coKSA+PiAxNCkgJiAx OworICAgIHJldHVybiAoKHBpdC0+aHcuc3BlYWtlcl9kYXRhX29uIDw8IDEpIHwgcGl0X2dldF9n YXRlKHBpdCwgMikgfAorICAgICAgICAgICAgKHBpdF9nZXRfb3V0KHBpdCwgMikgPDwgNSkgfCAo cmVmcmVzaF9jbG9jayA8PCA0KSk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3NwZWFrZXJfaW8o CisgICAgaW50IGRpciwgdW5zaWduZWQgaW50IHBvcnQsIHVpbnQzMl90IGJ5dGVzLCB1aW50MzJf dCAqdmFsKQoreworICAgIHN0cnVjdCBQSVRTdGF0ZSAqdnBpdCA9IHZjcHVfdnBpdChjdXJyZW50 KTsKKworICAgIEJVR19PTihieXRlcyAhPSAxKTsKKworICAgIHNwaW5fbG9jaygmdnBpdC0+bG9j ayk7CisKKyAgICBpZiAoIGRpciA9PSBJT1JFUV9XUklURSApCisgICAgICAgIHNwZWFrZXJfaW9w b3J0X3dyaXRlKHZwaXQsIHBvcnQsICp2YWwpOworICAgIGVsc2UKKyAgICAgICAgKnZhbCA9IHNw ZWFrZXJfaW9wb3J0X3JlYWQodnBpdCwgcG9ydCk7CisKKyAgICBzcGluX3VubG9jaygmdnBpdC0+ bG9jayk7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCit2b2lkIHBpdF9pbml0KHN0 cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgY3B1X2toeikKK3sKKyAgICBQSVRTdGF0ZSAq cGl0ID0gZG9tYWluX3ZwaXQoZCk7CisKKyAgICBpZiAoICFoYXNfdnBpdChkKSApCisgICAgICAg IHJldHVybjsKKworICAgIHNwaW5fbG9ja19pbml0KCZwaXQtPmxvY2spOworCisgICAgaWYgKCBp c19odm1fZG9tYWluKGQpICkKKyAgICB7CisgICAgICAgIHJlZ2lzdGVyX3BvcnRpb19oYW5kbGVy KGQsIFBJVF9CQVNFLCA0LCBoYW5kbGVfcGl0X2lvKTsKKyAgICAgICAgcmVnaXN0ZXJfcG9ydGlv X2hhbmRsZXIoZCwgMHg2MSwgMSwgaGFuZGxlX3NwZWFrZXJfaW8pOworICAgIH0KKworICAgIHBp dF9yZXNldChkKTsKK30KKwordm9pZCBwaXRfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpCit7Cisg ICAgUElUU3RhdGUgKnBpdCA9IGRvbWFpbl92cGl0KGQpOworCisgICAgaWYgKCAhaGFzX3ZwaXQo ZCkgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIGlzX2h2bV9kb21haW4oZCkgKQorICAg IHsKKyAgICAgICAgVFJBQ0VfMEQoVFJDX0hWTV9FTVVMX1BJVF9TVE9QX1RJTUVSKTsKKyAgICAg ICAgZGVzdHJveV9wZXJpb2RpY190aW1lKCZwaXQtPnB0MCk7CisgICAgfQorfQorCit2b2lkIHBp dF9yZXNldChzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIFBJVFN0YXRlICpwaXQgPSBkb21haW5f dnBpdChkKTsKKyAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzOworICAgIGludCBpOwor CisgICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIGlz X2h2bV9kb21haW4oZCkgKQorICAgIHsKKyAgICAgICAgVFJBQ0VfMEQoVFJDX0hWTV9FTVVMX1BJ VF9TVE9QX1RJTUVSKTsKKyAgICAgICAgZGVzdHJveV9wZXJpb2RpY190aW1lKCZwaXQtPnB0MCk7 CisgICAgICAgIHBpdC0+cHQwLnNvdXJjZSA9IFBUU1JDX2lzYTsKKyAgICB9CisKKyAgICBzcGlu X2xvY2soJnBpdC0+bG9jayk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAg eworICAgICAgICBzID0gJnBpdC0+aHcuY2hhbm5lbHNbaV07CisgICAgICAgIHMtPm1vZGUgPSAw eGZmOyAvKiB0aGUgaW5pdCBtb2RlICovCisgICAgICAgIHMtPmdhdGUgPSAoaSAhPSAyKTsKKyAg ICAgICAgcGl0X2xvYWRfY291bnQocGl0LCBpLCAwKTsKKyAgICB9CisKKyAgICBzcGluX3VubG9j aygmcGl0LT5sb2NrKTsKK30KKworaW50IHB2X3BpdF9oYW5kbGVyKGludCBwb3J0LCBpbnQgZGF0 YSwgaW50IHdyaXRlKQoreworICAgIGlvcmVxX3QgaW9yZXEgPSB7CisgICAgICAgIC5zaXplID0g MSwKKyAgICAgICAgLnR5cGUgPSBJT1JFUV9UWVBFX1BJTywKKyAgICAgICAgLmFkZHIgPSBwb3J0 LAorICAgICAgICAuZGlyICA9IHdyaXRlID8gSU9SRVFfV1JJVEUgOiBJT1JFUV9SRUFELAorICAg ICAgICAuZGF0YSA9IGRhdGEKKyAgICB9OworCisgICAgaWYgKCAhaGFzX3ZwaXQoY3VycmVudC0+ ZG9tYWluKSApCisgICAgICAgIHJldHVybiB+MDsKKworICAgIGlmICggaXNfaGFyZHdhcmVfZG9t YWluKGN1cnJlbnQtPmRvbWFpbikgJiYgaHdkb21fcGl0X2FjY2VzcygmaW9yZXEpICkKKyAgICB7 CisgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi87CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg ICAgICAgIHVpbnQzMl90IHZhbCA9IGRhdGE7CisgICAgICAgIGlmICggcG9ydCA9PSAweDYxICkK KyAgICAgICAgICAgIGhhbmRsZV9zcGVha2VyX2lvKGlvcmVxLmRpciwgcG9ydCwgMSwgJnZhbCk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZV9waXRfaW8oaW9yZXEuZGlyLCBwb3J0 LCAxLCAmdmFsKTsKKyAgICAgICAgaW9yZXEuZGF0YSA9IHZhbDsKKyAgICB9CisKKyAgICByZXR1 cm4gIXdyaXRlID8gaW9yZXEuZGF0YSA6IDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6 CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDog NAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9odm0vaTgyNTQuYyBiL3hlbi9hcmNoL3g4Ni9odm0vaTgyNTQuYwppbmRleCBi OGVjNTZmLi41MTE1MDIyIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL2k4MjU0LmMKKysr IGIveGVuL2FyY2gveDg2L2h2bS9pODI1NC5jCkBAIC0zOCwxMjQgKzM4LDYgQEAKICNpbmNsdWRl IDxhc20vaHZtL3ZwdC5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAKLSNkZWZpbmUgZG9t YWluX3ZwaXQoeCkgKCYoeCktPmFyY2gudnBpdCkKLSNkZWZpbmUgdmNwdV92cGl0KHgpICAgKGRv bWFpbl92cGl0KCh4KS0+ZG9tYWluKSkKLSNkZWZpbmUgdnBpdF9kb21haW4oeCkgKGNvbnRhaW5l cl9vZigoeCksIHN0cnVjdCBkb21haW4sIGFyY2gudnBpdCkpCi0jZGVmaW5lIHZwaXRfdmNwdSh4 KSAgIChwdF9nbG9iYWxfdmNwdV90YXJnZXQodnBpdF9kb21haW4oeCkpKQotCi0jZGVmaW5lIFJX X1NUQVRFX0xTQiAxCi0jZGVmaW5lIFJXX1NUQVRFX01TQiAyCi0jZGVmaW5lIFJXX1NUQVRFX1dP UkQwIDMKLSNkZWZpbmUgUldfU1RBVEVfV09SRDEgNAotCi1zdGF0aWMgaW50IGhhbmRsZV9waXRf aW8oCi0gICAgaW50IGRpciwgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywg dWludDMyX3QgKnZhbCk7Ci1zdGF0aWMgaW50IGhhbmRsZV9zcGVha2VyX2lvKAotICAgIGludCBk aXIsIHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90ICp2YWwp OwotCi0jZGVmaW5lIGdldF9ndWVzdF90aW1lKHYpIFwKLSAgIChpc19odm1fdmNwdSh2KSA/IGh2 bV9nZXRfZ3Vlc3RfdGltZSh2KSA6ICh1NjQpZ2V0X3NfdGltZSgpKQotCi1zdGF0aWMgaW50IHBp dF9nZXRfY291bnQoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCi17Ci0gICAgdWludDY0X3Qg ZDsKLSAgICBpbnQgIGNvdW50ZXI7Ci0gICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqYyA9 ICZwaXQtPmh3LmNoYW5uZWxzW2NoYW5uZWxdOwotICAgIHN0cnVjdCB2Y3B1ICp2ID0gdnBpdF92 Y3B1KHBpdCk7Ci0KLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBpdC0+bG9jaykpOwotCi0g ICAgZCA9IG11bGRpdjY0KGdldF9ndWVzdF90aW1lKHYpIC0gcGl0LT5jb3VudF9sb2FkX3RpbWVb Y2hhbm5lbF0sCi0gICAgICAgICAgICAgICAgIFBJVF9GUkVRLCBTWVNURU1fVElNRV9IWik7Ci0K LSAgICBzd2l0Y2ggKCBjLT5tb2RlICkKLSAgICB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToK LSAgICBjYXNlIDQ6Ci0gICAgY2FzZSA1OgotICAgICAgICBjb3VudGVyID0gKGMtPmNvdW50IC0g ZCkgJiAweGZmZmY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgLyogWFhY OiBtYXkgYmUgaW5jb3JyZWN0IGZvciBvZGQgY291bnRzICovCi0gICAgICAgIGNvdW50ZXIgPSBj LT5jb3VudCAtICgoMiAqIGQpICUgYy0+Y291bnQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh dWx0OgotICAgICAgICBjb3VudGVyID0gYy0+Y291bnQgLSAoZCAlIGMtPmNvdW50KTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBjb3VudGVyOwotfQotCi1zdGF0aWMgaW50IHBp dF9nZXRfb3V0KFBJVFN0YXRlICpwaXQsIGludCBjaGFubmVsKQotewotICAgIHN0cnVjdCBodm1f aHdfcGl0X2NoYW5uZWwgKnMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKLSAgICB1aW50 NjRfdCBkOwotICAgIGludCBvdXQ7Ci0gICAgc3RydWN0IHZjcHUgKnYgPSB2cGl0X3ZjcHUocGl0 KTsKLQotICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7Ci0KLSAgICBkID0g bXVsZGl2NjQoZ2V0X2d1ZXN0X3RpbWUodikgLSBwaXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVs XSwgCi0gICAgICAgICAgICAgICAgIFBJVF9GUkVRLCBTWVNURU1fVElNRV9IWik7Ci0KLSAgICBz d2l0Y2ggKCBzLT5tb2RlICkKLSAgICB7Ci0gICAgZGVmYXVsdDoKLSAgICBjYXNlIDA6Ci0gICAg ICAgIG91dCA9IChkID49IHMtPmNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgot ICAgICAgICBvdXQgPSAoZCA8IHMtPmNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAy OgotICAgICAgICBvdXQgPSAoKChkICUgcy0+Y291bnQpID09IDApICYmIChkICE9IDApKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICBvdXQgPSAoKGQgJSBzLT5jb3VudCkg PCAoKHMtPmNvdW50ICsgMSkgPj4gMSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0g ICAgY2FzZSA1OgotICAgICAgICBvdXQgPSAoZCA9PSBzLT5jb3VudCk7Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIHJldHVybiBvdXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHBpdF9zZXRfZ2F0 ZShQSVRTdGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCwgaW50IHZhbCkKLXsKLSAgICBzdHJ1Y3QgaHZt X2h3X3BpdF9jaGFubmVsICpzID0gJnBpdC0+aHcuY2hhbm5lbHNbY2hhbm5lbF07Ci0gICAgc3Ry dWN0IHZjcHUgKnYgPSB2cGl0X3ZjcHUocGl0KTsKLQotICAgIEFTU0VSVChzcGluX2lzX2xvY2tl ZCgmcGl0LT5sb2NrKSk7Ci0KLSAgICBzd2l0Y2ggKCBzLT5tb2RlICkKLSAgICB7Ci0gICAgZGVm YXVsdDoKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSA0OgotICAgICAgICAvKiBYWFg6IGp1c3QgZGlz YWJsZS9lbmFibGUgY291bnRpbmcgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAg IGNhc2UgNToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgICAgICAvKiBSZXN0YXJ0IGNv dW50aW5nIG9uIHJpc2luZyBlZGdlLiAqLwotICAgICAgICBpZiAoIHMtPmdhdGUgPCB2YWwgKQot ICAgICAgICAgICAgcGl0LT5jb3VudF9sb2FkX3RpbWVbY2hhbm5lbF0gPSBnZXRfZ3Vlc3RfdGlt ZSh2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcy0+Z2F0ZSA9IHZhbDsKLX0KLQot c3RhdGljIGludCBwaXRfZ2V0X2dhdGUoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWwpCi17Ci0g ICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKLSAgICByZXR1cm4gcGl0LT5o dy5jaGFubmVsc1tjaGFubmVsXS5nYXRlOwotfQotCiBzdGF0aWMgdm9pZCBwaXRfdGltZV9maXJl ZChzdHJ1Y3QgdmNwdSAqdiwgdm9pZCAqcHJpdikKIHsKICAgICB1aW50NjRfdCAqY291bnRfbG9h ZF90aW1lID0gcHJpdjsKQEAgLTE2MywyNiArNDUsMTIgQEAgc3RhdGljIHZvaWQgcGl0X3RpbWVf ZmlyZWQoc3RydWN0IHZjcHUgKnYsIHZvaWQgKnByaXYpCiAgICAgKmNvdW50X2xvYWRfdGltZSA9 IGdldF9ndWVzdF90aW1lKHYpOwogfQogCi1zdGF0aWMgdm9pZCBwaXRfbG9hZF9jb3VudChQSVRT dGF0ZSAqcGl0LCBpbnQgY2hhbm5lbCwgaW50IHZhbCkKK3ZvaWQgcGl0X2xvYWRfY291bnRfY2hh bm5lbDAoUElUU3RhdGUgKnBpdCwgdWludDMyX3QgcGVyaW9kKQogewotICAgIHUzMiBwZXJpb2Q7 Ci0gICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqcyA9ICZwaXQtPmh3LmNoYW5uZWxzW2No YW5uZWxdOworICAgIHN0cnVjdCBodm1faHdfcGl0X2NoYW5uZWwgKnMgPSAmcGl0LT5ody5jaGFu bmVsc1swXTsKICAgICBzdHJ1Y3QgdmNwdSAqdiA9IHZwaXRfdmNwdShwaXQpOwogCi0gICAgQVNT RVJUKHNwaW5faXNfbG9ja2VkKCZwaXQtPmxvY2spKTsKLQotICAgIGlmICggdmFsID09IDAgKQot ICAgICAgICB2YWwgPSAweDEwMDAwOwotCi0gICAgaWYgKCB2ID09IE5VTEwgKQotICAgICAgICBw aXQtPmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSA9IDA7Ci0gICAgZWxzZQotICAgICAgICBwaXQt PmNvdW50X2xvYWRfdGltZVtjaGFubmVsXSA9IGdldF9ndWVzdF90aW1lKHYpOwotICAgIHMtPmNv dW50ID0gdmFsOwotICAgIHBlcmlvZCA9IERJVl9ST1VORCh2YWwgKiBTWVNURU1fVElNRV9IWiwg UElUX0ZSRVEpOwotCi0gICAgaWYgKCAodiA9PSBOVUxMKSB8fCAhaXNfaHZtX3ZjcHUodikgfHwg KGNoYW5uZWwgIT0gMCkgKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGlzX2h2bV92Y3B1 KHYpKTsKIAogICAgIHN3aXRjaCAoIHMtPm1vZGUgKQogICAgIHsKQEAgLTE5MSwxNCArNTksMTQg QEAgc3RhdGljIHZvaWQgcGl0X2xvYWRfY291bnQoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWws IGludCB2YWwpCiAgICAgICAgIC8qIFBlcmlvZGljIHRpbWVyLiAqLwogICAgICAgICBUUkFDRV8y RChUUkNfSFZNX0VNVUxfUElUX1NUQVJUX1RJTUVSLCBwZXJpb2QsIHBlcmlvZCk7CiAgICAgICAg IGNyZWF0ZV9wZXJpb2RpY190aW1lKHYsICZwaXQtPnB0MCwgcGVyaW9kLCBwZXJpb2QsIDAsIHBp dF90aW1lX2ZpcmVkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpdC0+Y291bnRf bG9hZF90aW1lW2NoYW5uZWxdLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZwaXQtPmNvdW50X2xvYWRfdGltZVswXSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICBj YXNlIDE6CiAgICAgY2FzZSA0OgogICAgICAgICAvKiBPbmUtc2hvdCB0aW1lci4gKi8KICAgICAg ICAgVFJBQ0VfMkQoVFJDX0hWTV9FTVVMX1BJVF9TVEFSVF9USU1FUiwgcGVyaW9kLCAwKTsKICAg ICAgICAgY3JlYXRlX3BlcmlvZGljX3RpbWUodiwgJnBpdC0+cHQwLCBwZXJpb2QsIDAsIDAsIHBp dF90aW1lX2ZpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl0LT5jb3VudF9s b2FkX3RpbWVbY2hhbm5lbF0sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnBpdC0+Y291bnRfbG9hZF90aW1lWzBdLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl ZmF1bHQ6CiAgICAgICAgIFRSQUNFXzBEKFRSQ19IVk1fRU1VTF9QSVRfU1RPUF9USU1FUik7CkBA IC0yMDcsMTc4ICs3NSw2IEBAIHN0YXRpYyB2b2lkIHBpdF9sb2FkX2NvdW50KFBJVFN0YXRlICpw aXQsIGludCBjaGFubmVsLCBpbnQgdmFsKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcGl0X2xh dGNoX2NvdW50KFBJVFN0YXRlICpwaXQsIGludCBjaGFubmVsKQotewotICAgIHN0cnVjdCBodm1f aHdfcGl0X2NoYW5uZWwgKmMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKLQotICAgIEFT U0VSVChzcGluX2lzX2xvY2tlZCgmcGl0LT5sb2NrKSk7Ci0KLSAgICBpZiAoICFjLT5jb3VudF9s YXRjaGVkICkKLSAgICB7Ci0gICAgICAgIGMtPmxhdGNoZWRfY291bnQgPSBwaXRfZ2V0X2NvdW50 KHBpdCwgY2hhbm5lbCk7Ci0gICAgICAgIGMtPmNvdW50X2xhdGNoZWQgPSBjLT5yd19tb2RlOwot ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcGl0X2xhdGNoX3N0YXR1cyhQSVRTdGF0ZSAqcGl0LCBp bnQgY2hhbm5lbCkKLXsKLSAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpjID0gJnBpdC0+ aHcuY2hhbm5lbHNbY2hhbm5lbF07Ci0KLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBpdC0+ bG9jaykpOwotCi0gICAgaWYgKCAhYy0+c3RhdHVzX2xhdGNoZWQgKQotICAgIHsKLSAgICAgICAg LyogVE9ETzogUmV0dXJuIE5VTEwgQ09VTlQgKGJpdCA2KS4gKi8KLSAgICAgICAgYy0+c3RhdHVz ID0gKChwaXRfZ2V0X291dChwaXQsIGNoYW5uZWwpIDw8IDcpIHwKLSAgICAgICAgICAgICAgICAg ICAgIChjLT5yd19tb2RlIDw8IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgIChjLT5tb2RlIDw8 IDEpIHwKLSAgICAgICAgICAgICAgICAgICAgIGMtPmJjZCk7Ci0gICAgICAgIGMtPnN0YXR1c19s YXRjaGVkID0gMTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHBpdF9pb3BvcnRfd3JpdGUoc3Ry dWN0IFBJVFN0YXRlICpwaXQsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHZhbCkKLXsKLSAgICBp bnQgY2hhbm5lbCwgYWNjZXNzOwotICAgIHN0cnVjdCBodm1faHdfcGl0X2NoYW5uZWwgKnM7Ci0K LSAgICB2YWwgICY9IDB4ZmY7Ci0gICAgYWRkciAmPSAzOwotCi0gICAgc3Bpbl9sb2NrKCZwaXQt PmxvY2spOwotCi0gICAgaWYgKCBhZGRyID09IDMgKQotICAgIHsKLSAgICAgICAgY2hhbm5lbCA9 IHZhbCA+PiA2OwotICAgICAgICBpZiAoIGNoYW5uZWwgPT0gMyApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIC8qIFJlYWQtQmFjayBDb21tYW5kLiAqLwotICAgICAgICAgICAgZm9yICggY2hhbm5l bCA9IDA7IGNoYW5uZWwgPCAzOyBjaGFubmVsKysgKQotICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgIHMgPSAmcGl0LT5ody5jaGFubmVsc1tjaGFubmVsXTsKLSAgICAgICAgICAgICAgICBp ZiAoIHZhbCAmICgyIDw8IGNoYW5uZWwpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICggISh2YWwgJiAweDIwKSApCi0gICAgICAgICAgICAgICAgICAgICAgICBw aXRfbGF0Y2hfY291bnQocGl0LCBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh KHZhbCAmIDB4MTApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpdF9sYXRjaF9zdGF0dXMo cGl0LCBjaGFubmVsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBTZWxlY3QgQ291bnRl ciA8Y2hhbm5lbD4uICovCi0gICAgICAgICAgICBzID0gJnBpdC0+aHcuY2hhbm5lbHNbY2hhbm5l bF07Ci0gICAgICAgICAgICBhY2Nlc3MgPSAodmFsID4+IDQpICYgMzsKLSAgICAgICAgICAgIGlm ICggYWNjZXNzID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBpdF9sYXRj aF9jb3VudChwaXQsIGNoYW5uZWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHMtPnJ3X21vZGUgPSBhY2Nlc3M7Ci0gICAg ICAgICAgICAgICAgcy0+cmVhZF9zdGF0ZSA9IGFjY2VzczsKLSAgICAgICAgICAgICAgICBzLT53 cml0ZV9zdGF0ZSA9IGFjY2VzczsKLSAgICAgICAgICAgICAgICBzLT5tb2RlID0gKHZhbCA+PiAx KSAmIDc7Ci0gICAgICAgICAgICAgICAgaWYgKCBzLT5tb2RlID4gNSApCi0gICAgICAgICAgICAg ICAgICAgIHMtPm1vZGUgLT0gNDsKLSAgICAgICAgICAgICAgICBzLT5iY2QgPSB2YWwgJiAxOwot ICAgICAgICAgICAgICAgIC8qIFhYWDogdXBkYXRlIGlycSB0aW1lciA/ICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogV3JpdGUg Q291bnQuICovCi0gICAgICAgIHMgPSAmcGl0LT5ody5jaGFubmVsc1thZGRyXTsKLSAgICAgICAg c3dpdGNoICggcy0+d3JpdGVfc3RhdGUgKQotICAgICAgICB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgIGNhc2UgUldfU1RBVEVfTFNCOgotICAgICAgICAgICAgcGl0X2xvYWRfY291bnQocGl0 LCBhZGRyLCB2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUldfU1RBVEVf TVNCOgotICAgICAgICAgICAgcGl0X2xvYWRfY291bnQocGl0LCBhZGRyLCB2YWwgPDwgOCk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSV19TVEFURV9XT1JEMDoKLSAgICAgICAg ICAgIHMtPndyaXRlX2xhdGNoID0gdmFsOwotICAgICAgICAgICAgcy0+d3JpdGVfc3RhdGUgPSBS V19TVEFURV9XT1JEMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJXX1NUQVRF X1dPUkQxOgotICAgICAgICAgICAgcGl0X2xvYWRfY291bnQocGl0LCBhZGRyLCBzLT53cml0ZV9s YXRjaCB8ICh2YWwgPDwgOCkpOwotICAgICAgICAgICAgcy0+d3JpdGVfc3RhdGUgPSBSV19TVEFU RV9XT1JEMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Bp bl91bmxvY2soJnBpdC0+bG9jayk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBwaXRfaW9wb3J0X3Jl YWQoc3RydWN0IFBJVFN0YXRlICpwaXQsIHVpbnQzMl90IGFkZHIpCi17Ci0gICAgaW50IHJldCwg Y291bnQ7Ci0gICAgc3RydWN0IGh2bV9od19waXRfY2hhbm5lbCAqczsKLSAgICAKLSAgICBhZGRy ICY9IDM7Ci0gICAgcyA9ICZwaXQtPmh3LmNoYW5uZWxzW2FkZHJdOwotCi0gICAgc3Bpbl9sb2Nr KCZwaXQtPmxvY2spOwotCi0gICAgaWYgKCBzLT5zdGF0dXNfbGF0Y2hlZCApCi0gICAgewotICAg ICAgICBzLT5zdGF0dXNfbGF0Y2hlZCA9IDA7Ci0gICAgICAgIHJldCA9IHMtPnN0YXR1czsKLSAg ICB9Ci0gICAgZWxzZSBpZiAoIHMtPmNvdW50X2xhdGNoZWQgKQotICAgIHsKLSAgICAgICAgc3dp dGNoICggcy0+Y291bnRfbGF0Y2hlZCApCi0gICAgICAgIHsKLSAgICAgICAgZGVmYXVsdDoKLSAg ICAgICAgY2FzZSBSV19TVEFURV9MU0I6Ci0gICAgICAgICAgICByZXQgPSBzLT5sYXRjaGVkX2Nv dW50ICYgMHhmZjsKLSAgICAgICAgICAgIHMtPmNvdW50X2xhdGNoZWQgPSAwOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUldfU1RBVEVfTVNCOgotICAgICAgICAgICAgcmV0ID0g cy0+bGF0Y2hlZF9jb3VudCA+PiA4OwotICAgICAgICAgICAgcy0+Y291bnRfbGF0Y2hlZCA9IDA7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSV19TVEFURV9XT1JEMDoKLSAgICAg ICAgICAgIHJldCA9IHMtPmxhdGNoZWRfY291bnQgJiAweGZmOwotICAgICAgICAgICAgcy0+Y291 bnRfbGF0Y2hlZCA9IFJXX1NUQVRFX01TQjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9 Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIHMtPnJlYWRfc3RhdGUg KQotICAgICAgICB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNhc2UgUldfU1RBVEVfTFNC OgotICAgICAgICAgICAgY291bnQgPSBwaXRfZ2V0X2NvdW50KHBpdCwgYWRkcik7Ci0gICAgICAg ICAgICByZXQgPSBjb3VudCAmIDB4ZmY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz ZSBSV19TVEFURV9NU0I6Ci0gICAgICAgICAgICBjb3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBh ZGRyKTsKLSAgICAgICAgICAgIHJldCA9IChjb3VudCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgY2FzZSBSV19TVEFURV9XT1JEMDoKLSAgICAgICAgICAgIGNvdW50 ID0gcGl0X2dldF9jb3VudChwaXQsIGFkZHIpOwotICAgICAgICAgICAgcmV0ID0gY291bnQgJiAw eGZmOwotICAgICAgICAgICAgcy0+cmVhZF9zdGF0ZSA9IFJXX1NUQVRFX1dPUkQxOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUldfU1RBVEVfV09SRDE6Ci0gICAgICAgICAgICBj b3VudCA9IHBpdF9nZXRfY291bnQocGl0LCBhZGRyKTsKLSAgICAgICAgICAgIHJldCA9IChjb3Vu dCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgICAgICBzLT5yZWFkX3N0YXRlID0gUldfU1RBVEVfV09S RDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNwaW5fdW5s b2NrKCZwaXQtPmxvY2spOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQogdm9pZCBwaXRfc3RvcF9j aGFubmVsMF9pcnEoUElUU3RhdGUgKnBpdCkKIHsKICAgICBpZiAoICFoYXNfdnBpdChjdXJyZW50 LT5kb21haW4pICkKQEAgLTQzOSwxNTQgKzEzNSw2IEBAIHN0YXRpYyBpbnQgcGl0X2xvYWQoc3Ry dWN0IGRvbWFpbiAqZCwgaHZtX2RvbWFpbl9jb250ZXh0X3QgKmgpCiAKIEhWTV9SRUdJU1RFUl9T QVZFX1JFU1RPUkUoUElULCBwaXRfc2F2ZSwgcGl0X2xvYWQsIDEsIEhWTVNSX1BFUl9ET00pOwog Ci12b2lkIHBpdF9yZXNldChzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIFBJVFN0YXRlICpwaXQg PSBkb21haW5fdnBpdChkKTsKLSAgICBzdHJ1Y3QgaHZtX2h3X3BpdF9jaGFubmVsICpzOwotICAg IGludCBpOwotCi0gICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQotICAgICAgICByZXR1cm47Ci0KLSAg ICBUUkFDRV8wRChUUkNfSFZNX0VNVUxfUElUX1NUT1BfVElNRVIpOwotICAgIGRlc3Ryb3lfcGVy aW9kaWNfdGltZSgmcGl0LT5wdDApOwotICAgIHBpdC0+cHQwLnNvdXJjZSA9IFBUU1JDX2lzYTsK LQotICAgIHNwaW5fbG9jaygmcGl0LT5sb2NrKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgMzsg aSsrICkKLSAgICB7Ci0gICAgICAgIHMgPSAmcGl0LT5ody5jaGFubmVsc1tpXTsKLSAgICAgICAg cy0+bW9kZSA9IDB4ZmY7IC8qIHRoZSBpbml0IG1vZGUgKi8KLSAgICAgICAgcy0+Z2F0ZSA9IChp ICE9IDIpOwotICAgICAgICBwaXRfbG9hZF9jb3VudChwaXQsIGksIDApOwotICAgIH0KLQotICAg IHNwaW5fdW5sb2NrKCZwaXQtPmxvY2spOwotfQotCi12b2lkIHBpdF9pbml0KHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGxvbmcgY3B1X2toeikKLXsKLSAgICBQSVRTdGF0ZSAqcGl0ID0gZG9t YWluX3ZwaXQoZCk7Ci0KLSAgICBpZiAoICFoYXNfdnBpdChkKSApCi0gICAgICAgIHJldHVybjsK LQotICAgIHNwaW5fbG9ja19pbml0KCZwaXQtPmxvY2spOwotCi0gICAgaWYgKCBpc19odm1fZG9t YWluKGQpICkKLSAgICB7Ci0gICAgICAgIHJlZ2lzdGVyX3BvcnRpb19oYW5kbGVyKGQsIFBJVF9C QVNFLCA0LCBoYW5kbGVfcGl0X2lvKTsKLSAgICAgICAgcmVnaXN0ZXJfcG9ydGlvX2hhbmRsZXIo ZCwgMHg2MSwgMSwgaGFuZGxlX3NwZWFrZXJfaW8pOwotICAgIH0KLQotICAgIHBpdF9yZXNldChk KTsKLX0KLQotdm9pZCBwaXRfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgUElUU3Rh dGUgKnBpdCA9IGRvbWFpbl92cGl0KGQpOwotCi0gICAgaWYgKCAhaGFzX3ZwaXQoZCkgKQotICAg ICAgICByZXR1cm47Ci0KLSAgICBUUkFDRV8wRChUUkNfSFZNX0VNVUxfUElUX1NUT1BfVElNRVIp OwotICAgIGRlc3Ryb3lfcGVyaW9kaWNfdGltZSgmcGl0LT5wdDApOwotfQotCi0vKiB0aGUgaW50 ZXJjZXB0IGFjdGlvbiBmb3IgUElUIERNIHJldHZhbDowLS1ub3QgaGFuZGxlZDsgMS0taGFuZGxl ZCAqLyAgCi1zdGF0aWMgaW50IGhhbmRsZV9waXRfaW8oCi0gICAgaW50IGRpciwgdW5zaWduZWQg aW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywgdWludDMyX3QgKnZhbCkKLXsKLSAgICBzdHJ1 Y3QgUElUU3RhdGUgKnZwaXQgPSB2Y3B1X3ZwaXQoY3VycmVudCk7Ci0KLSAgICBpZiAoIGJ5dGVz ICE9IDEgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJQSVQgYmFk IGFjY2Vzc1xuIik7Ci0gICAgICAgICp2YWwgPSB+MDsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxf T0tBWTsKLSAgICB9Ci0KLSAgICBpZiAoIGRpciA9PSBJT1JFUV9XUklURSApCi0gICAgewotICAg ICAgICBwaXRfaW9wb3J0X3dyaXRlKHZwaXQsIHBvcnQsICp2YWwpOwotICAgIH0KLSAgICBlbHNl Ci0gICAgewotICAgICAgICBpZiAoIChwb3J0ICYgMykgIT0gMyApCi0gICAgICAgICAgICAqdmFs ID0gcGl0X2lvcG9ydF9yZWFkKHZwaXQsIHBvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIlBJVDogcmVhZCBBMTpBMD0zIVxuIik7Ci0gICAg fQotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotc3RhdGljIHZvaWQgc3BlYWtlcl9p b3BvcnRfd3JpdGUoCi0gICAgc3RydWN0IFBJVFN0YXRlICpwaXQsIHVpbnQzMl90IGFkZHIsIHVp bnQzMl90IHZhbCkKLXsKLSAgICBwaXQtPmh3LnNwZWFrZXJfZGF0YV9vbiA9ICh2YWwgPj4gMSkg JiAxOwotICAgIHBpdF9zZXRfZ2F0ZShwaXQsIDIsIHZhbCAmIDEpOwotfQotCi1zdGF0aWMgdWlu dDMyX3Qgc3BlYWtlcl9pb3BvcnRfcmVhZCgKLSAgICBzdHJ1Y3QgUElUU3RhdGUgKnBpdCwgdWlu dDMyX3QgYWRkcikKLXsKLSAgICAvKiBSZWZyZXNoIGNsb2NrIHRvZ2dsZXMgYXQgYWJvdXQgMTV1 cy4gV2UgYXBwcm94aW1hdGUgYXMgMl4xNG5zLiAqLwotICAgIHVuc2lnbmVkIGludCByZWZyZXNo X2Nsb2NrID0gKCh1bnNpZ25lZCBpbnQpTk9XKCkgPj4gMTQpICYgMTsKLSAgICByZXR1cm4gKChw aXQtPmh3LnNwZWFrZXJfZGF0YV9vbiA8PCAxKSB8IHBpdF9nZXRfZ2F0ZShwaXQsIDIpIHwKLSAg ICAgICAgICAgIChwaXRfZ2V0X291dChwaXQsIDIpIDw8IDUpIHwgKHJlZnJlc2hfY2xvY2sgPDwg NCkpOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV9zcGVha2VyX2lvKAotICAgIGludCBkaXIsIHVu c2lnbmVkIGludCBwb3J0LCB1aW50MzJfdCBieXRlcywgdWludDMyX3QgKnZhbCkKLXsKLSAgICBz dHJ1Y3QgUElUU3RhdGUgKnZwaXQgPSB2Y3B1X3ZwaXQoY3VycmVudCk7Ci0KLSAgICBCVUdfT04o Ynl0ZXMgIT0gMSk7Ci0KLSAgICBzcGluX2xvY2soJnZwaXQtPmxvY2spOwotCi0gICAgaWYgKCBk aXIgPT0gSU9SRVFfV1JJVEUgKQotICAgICAgICBzcGVha2VyX2lvcG9ydF93cml0ZSh2cGl0LCBw b3J0LCAqdmFsKTsKLSAgICBlbHNlCi0gICAgICAgICp2YWwgPSBzcGVha2VyX2lvcG9ydF9yZWFk KHZwaXQsIHBvcnQpOwotCi0gICAgc3Bpbl91bmxvY2soJnZwaXQtPmxvY2spOwotCi0gICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotaW50IHB2X3BpdF9oYW5kbGVyKGludCBwb3J0LCBpbnQg ZGF0YSwgaW50IHdyaXRlKQotewotICAgIGlvcmVxX3QgaW9yZXEgPSB7Ci0gICAgICAgIC5zaXpl ID0gMSwKLSAgICAgICAgLnR5cGUgPSBJT1JFUV9UWVBFX1BJTywKLSAgICAgICAgLmFkZHIgPSBw b3J0LAotICAgICAgICAuZGlyICA9IHdyaXRlID8gSU9SRVFfV1JJVEUgOiBJT1JFUV9SRUFELAot ICAgICAgICAuZGF0YSA9IGRhdGEKLSAgICB9OwotCi0gICAgaWYgKCAhaGFzX3ZwaXQoY3VycmVu dC0+ZG9tYWluKSApCi0gICAgICAgIHJldHVybiB+MDsKLQotICAgIGlmICggaXNfaGFyZHdhcmVf ZG9tYWluKGN1cnJlbnQtPmRvbWFpbikgJiYgaHdkb21fcGl0X2FjY2VzcygmaW9yZXEpICkKLSAg ICB7Ci0gICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi87Ci0gICAgfQotICAgIGVsc2UKLSAgICB7 Ci0gICAgICAgIHVpbnQzMl90IHZhbCA9IGRhdGE7Ci0gICAgICAgIGlmICggcG9ydCA9PSAweDYx ICkKLSAgICAgICAgICAgIGhhbmRsZV9zcGVha2VyX2lvKGlvcmVxLmRpciwgcG9ydCwgMSwgJnZh bCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRsZV9waXRfaW8oaW9yZXEuZGlyLCBw b3J0LCAxLCAmdmFsKTsKLSAgICAgICAgaW9yZXEuZGF0YSA9IHZhbDsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gIXdyaXRlID8gaW9yZXEuZGF0YSA6IDA7Ci19Ci0KIC8qCiAgKiBMb2NhbCB2YXJpYWJs ZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92cHQu aCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZwdC5oCmluZGV4IDYxYzI2ZWQuLjAwNjRhZDgg MTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZwdC5oCisrKyBiL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3ZwdC5oCkBAIC0xNzgsNiArMTc4LDggQEAgdm9pZCBwaXRfcmVzZXQo c3RydWN0IGRvbWFpbiAqZCk7CiAKIHZvaWQgcGl0X2luaXQoc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgbG9uZyBjcHVfa2h6KTsKIHZvaWQgcGl0X3N0b3BfY2hhbm5lbDBfaXJxKFBJVFN0YXRl ICogcGl0KTsKK3ZvaWQgcGl0X2xvYWRfY291bnQoUElUU3RhdGUgKnBpdCwgaW50IGNoYW5uZWws IGludCB2YWwpOwordm9pZCBwaXRfbG9hZF9jb3VudF9jaGFubmVsMChQSVRTdGF0ZSAqcGl0LCB1 aW50MzJfdCBwZXJpb2QpOwogdm9pZCBwaXRfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpOwogdm9p ZCBydGNfaW5pdChzdHJ1Y3QgZG9tYWluICpkKTsKIHZvaWQgcnRjX21pZ3JhdGVfdGltZXJzKHN0 cnVjdCB2Y3B1ICp2KTsKQEAgLTE5NCw0ICsxOTYsMTEgQEAgdm9pZCBocGV0X2luaXQoc3RydWN0 IGRvbWFpbiAqZCk7CiB2b2lkIGhwZXRfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpOwogdm9pZCBo cGV0X3Jlc2V0KHN0cnVjdCBkb21haW4gKmQpOwogCisjZGVmaW5lIGRvbWFpbl92cGl0KHgpICgm KHgpLT5hcmNoLnZwaXQpCisjZGVmaW5lIHZwaXRfZG9tYWluKHgpIChjb250YWluZXJfb2YoKHgp LCBzdHJ1Y3QgZG9tYWluLCBhcmNoLnZwaXQpKQorI2RlZmluZSB2cGl0X3ZjcHUoeCkgICAocHRf Z2xvYmFsX3ZjcHVfdGFyZ2V0KHZwaXRfZG9tYWluKHgpKSkKKworI2RlZmluZSBnZXRfZ3Vlc3Rf dGltZSh2KSBcCisgICAoaXNfaHZtX3ZjcHUodikgPyBodm1fZ2V0X2d1ZXN0X3RpbWUodikgOiAo dTY0KWdldF9zX3RpbWUoKSkKKwogI2VuZGlmIC8qIF9fQVNNX1g4Nl9IVk1fVlBUX0hfXyAqLwot LSAKZ2l0LXNlcmllcyAwLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJv amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hl bi1kZXZlbA==