From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH v4 14/27] ARM: vGICv3: introduce basic ITS emulation bits Date: Mon, 3 Apr 2017 21:28:16 +0100 Message-ID: <20170403202829.7278-15-andre.przywara@arm.com> References: <20170403202829.7278-1-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cv8Yr-00052D-8q for xen-devel@lists.xenproject.org; Mon, 03 Apr 2017 20:26:49 +0000 In-Reply-To: <20170403202829.7278-1-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall , Stefano Stabellini Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org Q3JlYXRlIGEgbmV3IGZpbGUgdG8gaG9sZCB0aGUgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBJVFMg d2lkZ2V0LgpGb3Igbm93IHdlIGVtdWxhdGUgdGhlIG1lbW9yeSBtYXBwZWQgSVRTIHJlZ2lzdGVy cyBhbmQgcHJvdmlkZSBhIHN0dWIKdG8gaW50cm9kdWNlIHRoZSBJVFMgY29tbWFuZCBoYW5kbGlu ZyBmcmFtZXdvcmsgKGJ1dCB3aXRob3V0IGFjdHVhbGx5CmVtdWxhdGluZyBhbnkgY29tbWFuZHMg YXQgdGhpcyB0aW1lKS4KClNpZ25lZC1vZmYtYnk6IEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5 d2FyYUBhcm0uY29tPgotLS0KIHhlbi9hcmNoL2FybS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAg MSArCiB4ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMuYyAgICAgICAgfCA1NDcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL2FybS92Z2ljLXYzLmMgICAgICAg ICAgICB8ICAgOSAtCiB4ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19kZWZzLmggfCAgMTkgKysK IHhlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oICB8ICAgMiArCiA1IGZpbGVzIGNoYW5n ZWQsIDU2OSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHhlbi9hcmNoL2FybS92Z2ljLXYzLWl0cy5jCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL01h a2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDZiZTg1YWIuLjQ5ZTFmYjIgMTAw NjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC9hcm0vTWFrZWZp bGUKQEAgLTQ3LDYgKzQ3LDcgQEAgb2JqLXkgKz0gdHJhcHMubwogb2JqLXkgKz0gdmdpYy5vCiBv YmoteSArPSB2Z2ljLXYyLm8KIG9iai0kKENPTkZJR19IQVNfR0lDVjMpICs9IHZnaWMtdjMubwor b2JqLSQoQ09ORklHX0hBU19JVFMpICs9IHZnaWMtdjMtaXRzLm8KIG9iai15ICs9IHZtX2V2ZW50 Lm8KIG9iai15ICs9IHZ0aW1lci5vCiBvYmoteSArPSB2cHNjaS5vCmRpZmYgLS1naXQgYS94ZW4v YXJjaC9hcm0vdmdpYy12My1pdHMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLXYzLWl0cy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2I5YTEKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMuYwpAQCAtMCwwICsxLDU0NyBAQAorLyoKKyAqIHhl bi9hcmNoL2FybS92Z2ljLXYzLWl0cy5jCisgKgorICogQVJNIEludGVycnVwdCBUcmFuc2xhdGlv biBTZXJ2aWNlIChJVFMpIGVtdWxhdGlvbgorICoKKyAqIEFuZHJlIFByenl3YXJhIDxhbmRyZS5w cnp5d2FyYUBhcm0uY29tPgorICogQ29weXJpZ2h0IChjKSAyMDE2LDIwMTcgQVJNIEx0ZC4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IHVuZGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNs dWRlIDx4ZW4vYml0b3BzLmg+CisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgorI2luY2x1ZGUgPHhl bi9kb21haW5fcGFnZS5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vaW5p dC5oPgorI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+CisjaW5jbHVkZSA8eGVuL2lycS5oPgorI2lu Y2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi9zaXplcy5oPgorI2luY2x1ZGUgPGFz bS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8YXNtL21taW8uaD4KKyNpbmNsdWRlIDxhc20vZ2ljX3Yz X2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vZ2ljX3YzX2l0cy5oPgorI2luY2x1ZGUgPGFzbS92Z2lj Lmg+CisjaW5jbHVkZSA8YXNtL3ZnaWMtZW11bC5oPgorCisvKiBEYXRhIHN0cnVjdHVyZSB0byBk ZXNjcmliZSBhIHZpcnR1YWwgSVRTICovCisjZGVmaW5lIFZJUlRfSVRTX0VOQUJMRUQgICAgICAg IDAKKyNkZWZpbmUgVklSVF9JVFNfQ09MTF9WQUxJRCAgICAgMQorI2RlZmluZSBWSVJUX0lUU19E RVZfVkFMSUQgICAgICAyCisjZGVmaW5lIFZJUlRfSVRTX0NNREJVRl9WQUxJRCAgIDMKK3N0cnVj dCB2aXJ0X2l0cyB7CisgICAgc3RydWN0IGRvbWFpbiAqZDsKKyAgICBzcGlubG9ja190IHZjbWRf bG9jazsgICAgICAgLyogUHJvdGVjdHMgdGhlIHZpcnR1YWwgY29tbWFuZCBidWZmZXIuICovCisg ICAgdWludDY0X3QgY2Jhc2VyOworICAgIHVpbnQ2NF90IGN3cml0ZXI7CisgICAgdWludDY0X3Qg Y3JlYWRyOworICAgIHNwaW5sb2NrX3QgaXRzX2xvY2s7ICAgICAgICAvKiBQcm90ZWN0cyB0aGUg Y29sbGVjdGlvbiBhbmQgZGV2aWNlIHRhYmxlcy4gKi8KKyAgICB1aW50NjRfdCBiYXNlcl9kZXYs IGJhc2VyX2NvbGw7CisgICAgdW5zaWduZWQgaW50IG1heF9jb2xsZWN0aW9uczsKKyAgICB1bnNp Z25lZCBpbnQgbWF4X2RldmljZXM7CisgICAgdW5zaWduZWQgaW50IGRldmlkX2JpdHM7CisgICAg dW5zaWduZWQgaW50IGludGlkX2JpdHM7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisK Ky8qCisgKiBBbiBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gVGFibGUgRW50cnk6IHRoaXMgaXMgaW5k ZXhlZCBieSBhCisgKiBEZXZpY2VJRC9FdmVudElEIHBhaXIgYW5kIGlzIGxvY2F0ZWQgaW4gZ3Vl c3QgbWVtb3J5LgorICovCitzdHJ1Y3Qgdml0c19pdHRlCit7CisgICAgdWludDMyX3QgdmxwaTsK KyAgICB1aW50MTZfdCBjb2xsZWN0aW9uOworICAgIHVpbnQxNl90IHBhZDsKK307CisKK3N0YXRp YyBib29sIGl0c19pc19lbmFibGVkKHN0cnVjdCB2aXJ0X2l0cyAqaXRzKQoreworICAgIHJldHVy biB0ZXN0X2JpdChWSVJUX0lUU19FTkFCTEVELCAmaXRzLT5mbGFncyk7Cit9CisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb25zIHRoYXQgaGFuZGxl IElUUyBjb21tYW5kcyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKK3N0YXRpYyB1aW50NjRfdCBpdHNfY21kX21hc2tfZmllbGQodWludDY0X3QgKml0c19jbWQs IHVuc2lnbmVkIGludCB3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgc2hpZnQsIHVuc2lnbmVkIGludCBzaXplKQoreworICAgIHJldHVybiAobGU2 NF90b19jcHUoaXRzX2NtZFt3b3JkXSkgPj4gc2hpZnQpICYgKEJJVChzaXplKSAtIDEpOworfQor CisjZGVmaW5lIGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kKSAgICAgICAgaXRzX2NtZF9tYXNrX2Zp ZWxkKGNtZCwgMCwgIDAsICA4KQorI2RlZmluZSBpdHNfY21kX2dldF9kZXZpY2VpZChjbWQpICAg ICAgIGl0c19jbWRfbWFza19maWVsZChjbWQsIDAsIDMyLCAzMikKKyNkZWZpbmUgaXRzX2NtZF9n ZXRfc2l6ZShjbWQpICAgICAgICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAxLCAgMCwgIDUp CisjZGVmaW5lIGl0c19jbWRfZ2V0X2lkKGNtZCkgICAgICAgICAgICAgaXRzX2NtZF9tYXNrX2Zp ZWxkKGNtZCwgMSwgIDAsIDMyKQorI2RlZmluZSBpdHNfY21kX2dldF9waHlzaWNhbF9pZChjbWQp ICAgIGl0c19jbWRfbWFza19maWVsZChjbWQsIDEsIDMyLCAzMikKKyNkZWZpbmUgaXRzX2NtZF9n ZXRfY29sbGVjdGlvbihjbWQpICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAyLCAgMCwgMTYp CisjZGVmaW5lIGl0c19jbWRfZ2V0X3RhcmdldF9hZGRyKGNtZCkgICAgaXRzX2NtZF9tYXNrX2Zp ZWxkKGNtZCwgMiwgMTYsIDMyKQorI2RlZmluZSBpdHNfY21kX2dldF92YWxpZGJpdChjbWQpICAg ICAgIGl0c19jbWRfbWFza19maWVsZChjbWQsIDIsIDYzLCAgMSkKKworI2RlZmluZSBJVFNfQ01E X0JVRkZFUl9TSVpFKGJhc2VyKSAgICAgICgoKChiYXNlcikgJiAweGZmKSArIDEpIDw8IDEyKQor CitzdGF0aWMgaW50IHZnaWNfaXRzX2hhbmRsZV9jbWRzKHN0cnVjdCBkb21haW4gKmQsIHN0cnVj dCB2aXJ0X2l0cyAqaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCB3cml0ZXIpCit7CisgICAgcGFkZHJfdCBjbWRidWZfYWRkciA9IGl0cy0+Y2Jhc2VyICYgR0VO TUFTS19VTEwoNTEsIDEyKTsKKyAgICB2b2lkICpjbWRidWYgPSBOVUxMOworICAgIHVpbnQ2NF90 ICpjbWRwdHI7CisKKyAgICBpZiAoIHdyaXRlciA+PSBJVFNfQ01EX0JVRkZFUl9TSVpFKGl0cy0+ Y2Jhc2VyKSApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNwaW5fbG9jaygmaXRzLT52Y21k X2xvY2spOworCisgICAgd2hpbGUgKCBpdHMtPmNyZWFkciAhPSB3cml0ZXIgKQorICAgIHsKKyAg ICAgICAgaW50IHJldDsKKworICAgICAgICByZXQgPSAwOworCisgICAgICAgIC8qCisgICAgICAg ICAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNvbW1hbmQgd2UgaGFuZGxlIG9yIHdlIGNyb3NzIGEg cGFnZSBib3VuZGFyeSwKKyAgICAgICAgICogd2UgbmVlZCB0byAocmUpbWFwIHRoZSBjb21tYW5k IGJ1ZmZlci4KKyAgICAgICAgICovCisgICAgICAgIGlmICggIWNtZGJ1ZiB8fCAoaXRzLT5jcmVh ZHIgJiB+UEFHRV9NQVNLKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBjbWRi dWYgKQorICAgICAgICAgICAgICAgIHVubWFwX29uZV9ndWVzdF9wYWdlKGNtZGJ1Zik7CisgICAg ICAgICAgICBjbWRidWYgPSBtYXBfb25lX2d1ZXN0X3BhZ2UoZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjbWRidWZfYWRkciArIGl0cy0+Y3JlYWRyKSAmIFBBR0Vf TUFTSyk7CisgICAgICAgICAgICBpZiAoICFjbWRidWYgKQorICAgICAgICAgICAgICAgIHJldHVy biAtRUZBVUxUOworICAgICAgICB9CisgICAgICAgIGNtZHB0ciA9IGNtZGJ1ZiArIChpdHMtPmNy ZWFkciAmIH5QQUdFX01BU0spOworCisgICAgICAgIHN3aXRjaCAoIGl0c19jbWRfZ2V0X2NvbW1h bmQoY21kcHRyKSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBHSVRTX0NNRF9TWU5DOgorICAg ICAgICAgICAgLyogV2UgaGFuZGxlIElUUyBjb21tYW5kcyBzeW5jaHJvbm91c2x5LCBzbyB3ZSBp Z25vcmUgU1lOQy4gKi8KKwkgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIklUUzogdW5oYW5kbGVkIElUUyBjb21tYW5kICVs dVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kcHRyKSk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGl0cy0+Y3JlYWRyICs9 IElUU19DTURfU0laRTsKKyAgICAgICAgaWYgKCBpdHMtPmNyZWFkciA9PSBJVFNfQ01EX0JVRkZF Ul9TSVpFKGl0cy0+Y2Jhc2VyKSApCisgICAgICAgICAgICBpdHMtPmNyZWFkciA9IDA7CisKKyAg ICAgICAgaWYgKCByZXQgKQorICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisg ICAgICAgICAgICAgICAgICAgICAiSVRTOiBJVFMgY29tbWFuZCBlcnJvciAlZCB3aGlsZSBoYW5k bGluZyBjb21tYW5kICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHJldCwgaXRzX2NtZF9n ZXRfY29tbWFuZChjbWRwdHIpKTsKKyAgICB9CisgICAgaXRzLT5jd3JpdGVyID0gd3JpdGVyOwor CisgICAgc3Bpbl91bmxvY2soJml0cy0+dmNtZF9sb2NrKTsKKworICAgIGlmICggY21kYnVmICkK KyAgICAgICAgdW5tYXBfb25lX2d1ZXN0X3BhZ2UoY21kYnVmKTsKKworICAgIHJldHVybiAwOwor fQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElUUyByZWdpc3RlcnMgcmVh ZCBhY2Nlc3MgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50 IHZnaWNfdjNfaXRzX21taW9fcmVhZChzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZvX3QgKmluZm8s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl90ICpyLCB2b2lkICpw cml2KQoreworICAgIHN0cnVjdCB2aXJ0X2l0cyAqaXRzID0gcHJpdjsKKyAgICB1aW50NjRfdCBy ZWc7CisKKyAgICBzd2l0Y2ggKCBpbmZvLT5ncGEgJiAweGZmZmYgKQorICAgIHsKKyAgICBjYXNl IFZSRUczMihHSVRTX0NUTFIpOgorICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJU X1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKKyAgICAgICAgaWYgKCBpdHNfaXNfZW5hYmxlZChpdHMp ICkKKyAgICAgICAgICAgIHJlZyA9IEdJVFNfQ1RMUl9FTkFCTEUgfCBCSVQoMzEpOworICAgICAg ICBlbHNlCisgICAgICAgICAgICByZWcgPSBCSVQoMzEpOworICAgICAgICAqciA9IHZnaWNfcmVn MzJfZXh0cmFjdChyZWcsIGluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZSRUczMihH SVRTX0lJRFIpOgorICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBn b3RvIGJhZF93aWR0aDsKKyAgICAgICAgKnIgPSB2Z2ljX3JlZzMyX2V4dHJhY3QoR0lUU19JSURS X1ZBTFVFLCBpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWUkVHNjQoR0lUU19UWVBF Uik6CisgICAgICAgIGlmICggIXZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkg Z290byBiYWRfd2lkdGg7CisKKyAgICAgICAgcmVnID0gR0lUU19UWVBFUl9QSFlTSUNBTDsKKyAg ICAgICAgcmVnIHw9IChzaXplb2Yoc3RydWN0IHZpdHNfaXR0ZSkgLSAxKSA8PCBHSVRTX1RZUEVS X0lUVF9TSVpFX1NISUZUOworICAgICAgICByZWcgfD0gKGl0cy0+aW50aWRfYml0cyAtIDEpIDw8 IEdJVFNfVFlQRVJfSURCSVRTX1NISUZUOworICAgICAgICByZWcgfD0gKGl0cy0+ZGV2aWRfYml0 cyAtIDEpIDw8IEdJVFNfVFlQRVJfREVWSURTX1NISUZUOworICAgICAgICAqciA9IHZnaWNfcmVn NjRfZXh0cmFjdChyZWcsIGluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZSRUc2NChH SVRTX0NCQVNFUik6CisgICAgICAgIGlmICggISB2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZv LT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworICAgICAgICAqciA9IHZnaWNfcmVnNjRfZXh0cmFj dChpdHMtPmNiYXNlciwgaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVlJFRzY0KEdJ VFNfQ1dSSVRFUik6CisgICAgICAgIGlmICggISB2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZv LT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworICAgICAgICAqciA9IHZnaWNfcmVnNjRfZXh0cmFj dChpdHMtPmN3cml0ZXIsIGluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZSRUc2NChH SVRTX0NSRUFEUik6CisgICAgICAgIGlmICggISB2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZv LT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworICAgICAgICAqciA9IHZnaWNfcmVnNjRfZXh0cmFj dChpdHMtPmNyZWFkciwgaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVlJFRzY0KEdJ VFNfQkFTRVIwKToKKyAgICAgICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8t PmRhYnQpICkgZ290byBiYWRfd2lkdGg7CisgICAgICAgICpyID0gdmdpY19yZWc2NF9leHRyYWN0 KGl0cy0+YmFzZXJfZGV2LCBpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWUkVHNjQo R0lUU19CQVNFUjEpOgorICAgICAgICBpZiAoICEgdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5m by0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJh Y3QoaXRzLT5iYXNlcl9jb2xsLCBpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWUkFO R0U2NChHSVRTX0JBU0VSMiwgR0lUU19CQVNFUjcpOgorICAgICAgICBpZiAoICEgdmdpY19yZWc2 NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKKyAgICAgICAgKnIg PSB2Z2ljX3JlZzY0X2V4dHJhY3QoMCwgaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug VlJFRzMyKEdJVFNfUElEUjIpOgorICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJU X1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKKyAgICAgICAgKnIgPSB2Z2ljX3JlZzMyX2V4dHJhY3Qo R0lDVjNfR0lDRF9QSURSMiwgaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl dHVybiAxOworCitiYWRfd2lkdGg6CisgICAgZG9tYWluX2NyYXNoX3N5bmNocm9ub3VzKCk7CisK KyAgICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICog SVRTIHJlZ2lzdGVycyB3cml0ZSBhY2Nlc3MgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworc3RhdGljIGludCBpdHNfYmFzZXJfdGFibGVfc2l6ZSh1aW50NjRfdCBiYXNlcikK K3sKKyAgICBpbnQgcGFnZV9zaXplID0gMDsKKworICAgIHN3aXRjaCAoIChiYXNlciA+PiA4KSAm IDMgKQorICAgIHsKKyAgICBjYXNlIDA6IHBhZ2Vfc2l6ZSA9IFNaXzRLOyBicmVhazsKKyAgICBj YXNlIDE6IHBhZ2Vfc2l6ZSA9IFNaXzE2SzsgYnJlYWs7CisgICAgY2FzZSAyOgorICAgIGNhc2Ug MzogcGFnZV9zaXplID0gU1pfNjRLOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcGFnZV9z aXplICogKChiYXNlciAmIEdFTk1BU0tfVUxMKDcsIDApKSArIDEpOworfQorCitzdGF0aWMgaW50 IGl0c19iYXNlcl9ucl9lbnRyaWVzKHVpbnQ2NF90IGJhc2VyKQoreworICAgIGludCBlbnRyeV9z aXplID0gKChiYXNlciAmIEdFTk1BU0tfVUxMKDUyLCA0OCkpID4+IDQ4KSArIDE7CisKKyAgICBy ZXR1cm4gaXRzX2Jhc2VyX3RhYmxlX3NpemUoYmFzZXIpIC8gZW50cnlfc2l6ZTsKK30KKworc3Rh dGljIGludCB2Z2ljX2l0c19tYXBfY21kYnVmKHN0cnVjdCB2aXJ0X2l0cyAqaXRzKQoreworICAg IGlmICggIShpdHMtPmNiYXNlciAmIEdJVFNfVkFMSURfQklUKSApCisgICAgICAgIHJldHVybiAt RUJVU1k7CisKKyAgICByZXR1cm4gZ2V0X2d1ZXN0X3BhZ2VzKGl0cy0+ZCwgaXRzLT5jYmFzZXIg JiBHRU5NQVNLX1VMTCg1MSwgMTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0cy0+ Y2Jhc2VyICYgMHhmZikgKyAxKTsKK30KKworc3RhdGljIHZvaWQgdmdpY19pdHNfdW5tYXBfY21k YnVmKHN0cnVjdCB2aXJ0X2l0cyAqaXRzKQoreworICAgIGludCBucl9wYWdlcyA9IChpdHMtPmNi YXNlciAmIDB4ZmYpICsgMTsKKworICAgIHB1dF9ndWVzdF9wYWdlcyhpdHMtPmQsIGl0cy0+Y2Jh c2VyICYgR0VOTUFTS19VTEwoNTEsIDEyKSwgbnJfcGFnZXMpOworfQorCitzdGF0aWMgaW50IHZn aWNfaXRzX21hcF9pdHNfdGFibGUoc3RydWN0IHZpcnRfaXRzICppdHMsIHVpbnQ2NF90IHJlZykK K3sKKyAgICB1bnNpZ25lZCBpbnQgaSwgdGFibGVfc2l6ZSA9IGl0c19iYXNlcl90YWJsZV9zaXpl KHJlZyk7CisgICAgcGFkZHJfdCBndWVzdF9hZGRyID0gZ2V0X2Jhc2VyX3BoeXNfYWRkcihyZWcp OworCisgICAgaWYgKCAhKHJlZyAmIEdJVFNfVkFMSURfQklUKSApCisgICAgICAgIHJldHVybiAt RUlOVkFMOworCisgICAgZ2V0X2d1ZXN0X3BhZ2VzKGl0cy0+ZCwgZ3Vlc3RfYWRkciwgdGFibGVf c2l6ZSA+PiBQQUdFX1NISUZUKTsKKyAgICAvKiBNYXAgZWFjaCBwYWdlIG9uZSBieSBvbmUgdG8g Y2hlY2sgYW5kIGNsZWFyIGl0LiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgdGFibGVfc2l6ZSA+ PiBQQUdFX1NISUZUOyBpKysgKQorICAgIHsKKyAgICAgICAgdm9pZCAqcHRyID0gbWFwX29uZV9n dWVzdF9wYWdlKGl0cy0+ZCwgZ3Vlc3RfYWRkciArIChpIDw8IFBBR0VfU0hJRlQpKTsKKworICAg ICAgICBpZiAoICFwdHIgKQorICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAg bWVtc2V0KHB0ciwgMCwgdGFibGVfc2l6ZSk7CisgICAgICAgIHVubWFwX29uZV9ndWVzdF9wYWdl KHB0cik7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZnaWNfaXRz X3VubWFwX2l0c190YWJsZShzdHJ1Y3QgZG9tYWluICpkLCB1aW50NjRfdCByZWcpCit7CisgICAg cHV0X2d1ZXN0X3BhZ2VzKGQsIGdldF9iYXNlcl9waHlzX2FkZHIocmVnKSwKKyAgICAgICAgICAg ICAgICAgICAgaXRzX2Jhc2VyX3RhYmxlX3NpemUocmVnKSA+PiBQQUdFX1NISUZUKTsKK30KKwor c3RhdGljIGJvb2wgdmdpY192M19pdHNfY2hhbmdlX2l0c19zdGF0dXMoc3RydWN0IHZpcnRfaXRz ICppdHMsIGJvb2wgc3RhdHVzKQoreworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIGlmICgg IXN0YXR1cyApCisgICAgeworICAgICAgICBjbGVhcl9iaXQoVklSVF9JVFNfRU5BQkxFRCwgJml0 cy0+ZmxhZ3MpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCAhdmdp Y19pdHNfbWFwX2NtZGJ1ZihpdHMpICkKKyAgICAgICAgc2V0X2JpdChWSVJUX0lUU19DTURCVUZf VkFMSUQsICZpdHMtPmZsYWdzKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBjbGVhcl9iaXQo VklSVF9JVFNfQ01EQlVGX1ZBTElELCAmaXRzLT5mbGFncyk7CisgICAgICAgIHJldCA9IGZhbHNl OworICAgIH0KKworICAgIGlmICggIXZnaWNfaXRzX21hcF9pdHNfdGFibGUoaXRzLCBpdHMtPmJh c2VyX2RldikgKQorICAgICAgICBzZXRfYml0KFZJUlRfSVRTX0RFVl9WQUxJRCwgJml0cy0+Zmxh Z3MpOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyX2JpdChWSVJUX0lUU19ERVZfVkFM SUQsICZpdHMtPmZsYWdzKTsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYg KCAhdmdpY19pdHNfbWFwX2l0c190YWJsZShpdHMsIGl0cy0+YmFzZXJfY29sbCkgKQorICAgICAg ICBzZXRfYml0KFZJUlRfSVRTX0NPTExfVkFMSUQsICZpdHMtPmZsYWdzKTsKKyAgICBlbHNlCisg ICAgeworICAgICAgICBjbGVhcl9iaXQoVklSVF9JVFNfQ09MTF9WQUxJRCwgJml0cy0+ZmxhZ3Mp OworICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIHJldCApCisgICAgICAg IHNldF9iaXQoVklSVF9JVFNfRU5BQkxFRCwgJml0cy0+ZmxhZ3MpOworICAgIGVsc2UKKyAgICAg ICAgY2xlYXJfYml0KFZJUlRfSVRTX0VOQUJMRUQsICZpdHMtPmZsYWdzKTsKKworICAgIHJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNhbml0aXplX2l0c19iYXNlX3JlZyh1aW50NjRfdCAq cmVnKQoreworICAgIHVpbnQ2NF90IHIgPSAqcmVnOworCisgICAgLyogQXZvaWQgb3V0ZXIgc2hh cmVhYmxlLiAqLworICAgIHN3aXRjaCAoIChyID4+IEdJVFNfQkFTRVJfU0hBUkVBQklMSVRZX1NI SUZUKSAmIDB4MDMgKQorICAgIHsKKyAgICBjYXNlIEdJQ19CQVNFUl9PdXRlclNoYXJlYWJsZToK KyAgICAgICAgciA9IHIgJiB+R0lUU19CQVNFUl9TSEFSRUFCSUxJVFlfTUFTSzsKKyAgICAgICAg ciB8PSBHSUNfQkFTRVJfSW5uZXJTaGFyZWFibGUgPDwgR0lUU19CQVNFUl9TSEFSRUFCSUxJVFlf U0hJRlQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg IH0KKworICAgIC8qIEF2b2lkIGFueSBpbm5lciBub24tY2FjaGVhYmxlIG1hcHBpbmcuICovCisg ICAgc3dpdGNoICggKHIgPj4gR0lUU19CQVNFUl9JTk5FUl9DQUNIRUFCSUxJVFlfU0hJRlQpICYg MHgwNyApCisgICAgeworICAgIGNhc2UgR0lDX0JBU0VSX0NBQ0hFX25DbkI6CisgICAgY2FzZSBH SUNfQkFTRVJfQ0FDSEVfbkM6CisgICAgICAgIHIgPSByICYgfkdJVFNfQkFTRVJfSU5ORVJfQ0FD SEVBQklMSVRZX01BU0s7CisgICAgICAgIHIgfD0gR0lDX0JBU0VSX0NBQ0hFX1JhV2IgPDwgR0lU U19CQVNFUl9JTk5FUl9DQUNIRUFCSUxJVFlfU0hJRlQ7CisgICAgICAgIGJyZWFrOworICAgIGRl ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIE9ubHkgYWxsb3cgbm9uLWNh Y2hlYWJsZSBvciBzYW1lLWFzLWlubmVyLiAqLworICAgIHN3aXRjaCAoIChyID4+IEdJVFNfQkFT RVJfT1VURVJfQ0FDSEVBQklMSVRZX1NISUZUKSAmIDB4MDcgKQorICAgIHsKKyAgICBjYXNlIEdJ Q19CQVNFUl9DQUNIRV9TYW1lQXNJbm5lcjoKKyAgICBjYXNlIEdJQ19CQVNFUl9DQUNIRV9uQzoK KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgciA9IHIgJiB+R0lUU19CQVNF Ul9PVVRFUl9DQUNIRUFCSUxJVFlfTUFTSzsKKyAgICAgICAgciB8PSBHSUNfQkFTRVJfQ0FDSEVf bkMgPDwgR0lUU19CQVNFUl9PVVRFUl9DQUNIRUFCSUxJVFlfU0hJRlQ7CisgICAgICAgIGJyZWFr OworICAgIH0KKworICAgICpyZWcgPSByOworfQorCitzdGF0aWMgaW50IHZnaWNfdjNfaXRzX21t aW9fd3JpdGUoc3RydWN0IHZjcHUgKnYsIG1taW9faW5mb190ICppbmZvLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3Qgciwgdm9pZCAqcHJpdikKK3sKKyAgICBz dHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworICAgIHN0cnVjdCB2aXJ0X2l0cyAqaXRzID0g cHJpdjsKKyAgICB1aW50NjRfdCByZWc7CisgICAgdWludDMyX3QgcmVnMzIsIGN0bHI7CisKKyAg ICBzd2l0Y2ggKCBpbmZvLT5ncGEgJiAweGZmZmYgKQorICAgIHsKKyAgICBjYXNlIFZSRUczMihH SVRTX0NUTFIpOgorICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBn b3RvIGJhZF93aWR0aDsKKworICAgICAgICBjdGxyID0gaXRzX2lzX2VuYWJsZWQoaXRzKSA/IEdJ VFNfQ1RMUl9FTkFCTEUgOiAwOworICAgICAgICByZWczMiA9IGN0bHI7CisgICAgICAgIHZnaWNf cmVnMzJfdXBkYXRlKCZyZWczMiwgciwgaW5mbyk7CisKKyAgICAgICAgaWYgKCBjdGxyIF4gcmVn MzIgKQorICAgICAgICAgICAgdmdpY192M19pdHNfY2hhbmdlX2l0c19zdGF0dXMoaXRzLCByZWcz MiAmIEdJVFNfQ1RMUl9FTkFCTEUpOworICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgVlJF RzMyKEdJVFNfSUlEUik6CisgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzMyOworICAgIGNhc2Ug VlJFRzMyKEdJVFNfVFlQRVIpOgorICAgICAgICBnb3RvIHdyaXRlX2lnbm9yZV8zMjsKKyAgICBj YXNlIFZSRUc2NChHSVRTX0NCQVNFUik6CisgICAgICAgIGlmICggISB2Z2ljX3JlZzY0X2NoZWNr X2FjY2VzcyhpbmZvLT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAgICAgIC8qIENoYW5n aW5nIGJhc2UgcmVnaXN0ZXJzIHdpdGggdGhlIElUUyBlbmFibGVkIGlzIFVOUFJFRElDVEFCTEUu ICovCisgICAgICAgIGlmICggaXRzX2lzX2VuYWJsZWQoaXRzKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiSVRTOiBEb21haW4gJWQgdHJpZWQgdG8g Y2hhbmdlIENCQVNFUiB3aXRoIHRoZSBJVFMgZW5hYmxlZC5cbiIsIGQtPmRvbWFpbl9pZCk7Cisg ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJlZyA9IGl0cy0+Y2Jh c2VyOworICAgICAgICB2Z2ljX3JlZzY0X3VwZGF0ZSgmcmVnLCByLCBpbmZvKTsKKyAgICAgICAg c2FuaXRpemVfaXRzX2Jhc2VfcmVnKCZyZWcpOworCisgICAgICAgIHZnaWNfaXRzX3VubWFwX2Nt ZGJ1ZihpdHMpOworICAgICAgICBpdHMtPmNiYXNlciA9IHJlZzsKKworCXJldHVybiAxOworCisg ICAgY2FzZSBWUkVHNjQoR0lUU19DV1JJVEVSKToKKyAgICAgICAgaWYgKCAhIHZnaWNfcmVnNjRf Y2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRfd2lkdGg7CisgICAgICAgIHJlZyA9 IGl0cy0+Y3dyaXRlciAmIDB4ZmZmZTA7CisgICAgICAgIHZnaWNfcmVnNjRfdXBkYXRlKCZyZWcs IHIsIGluZm8pOworICAgICAgICBpdHMtPmN3cml0ZXIgPSByZWcgJiAweGZmZmUwOworCisgICAg ICAgIGlmICggaXRzX2lzX2VuYWJsZWQoaXRzKSApCisgICAgICAgICAgICB2Z2ljX2l0c19oYW5k bGVfY21kcyhkLCBpdHMsIHJlZyk7CisKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIFZS RUc2NChHSVRTX0NSRUFEUik6CisgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzY0OworICAgIGNh c2UgVlJFRzY0KEdJVFNfQkFTRVIwKToKKyAgICAgICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hlY2tf YWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgLyogQ2hhbmdp bmcgYmFzZSByZWdpc3RlcnMgd2l0aCB0aGUgSVRTIGVuYWJsZWQgaXMgVU5QUkVESUNUQUJMRS4g Ki8KKyAgICAgICAgaWYgKCBpdHNfaXNfZW5hYmxlZChpdHMpICkKKyAgICAgICAgeworICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJJVFM6IERvbWFpbiAlZCB0cmllZCB0byBj aGFuZ2UgQkFTRVIgd2l0aCB0aGUgSVRTIGVuYWJsZWQuXG4iLAorICAgICAgICAgICAgICAgICAg ICAgZC0+ZG9tYWluX2lkKTsKKworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKwor ICAgICAgICByZWcgPSBpdHMtPmJhc2VyX2RldjsKKyAgICAgICAgdmdpY19yZWc2NF91cGRhdGUo JnJlZywgciwgaW5mbyk7CisKKyAgICAgICAgcmVnICY9IH5HSVRTX0JBU0VSX1JPX01BU0s7Cisg ICAgICAgIHJlZyB8PSAoc2l6ZW9mKHVpbnQ2NF90KSAtIDEpIDw8IEdJVFNfQkFTRVJfRU5UUllf U0laRV9TSElGVDsKKyAgICAgICAgcmVnIHw9IEdJVFNfQkFTRVJfVFlQRV9ERVZJQ0UgPDwgR0lU U19CQVNFUl9UWVBFX1NISUZUOworICAgICAgICBzYW5pdGl6ZV9pdHNfYmFzZV9yZWcoJnJlZyk7 CisKKyAgICAgICAgLyogSGFzIHRoZSB0YWJsZSBhZGRyZXNzIGJlZW4gY2hhbmdlZCBvciBpbnZh bGlkYXRlZD8gKi8KKyAgICAgICAgaWYgKCAhKHJlZyAmIEdJVFNfVkFMSURfQklUKSB8fAorICAg ICAgICAgICAgIGdldF9iYXNlcl9waHlzX2FkZHIocmVnKSAhPSBnZXRfYmFzZXJfcGh5c19hZGRy KGl0cy0+YmFzZXJfZGV2KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZnaWNfaXRzX3VubWFw X2l0c190YWJsZShpdHMtPmQsIGl0cy0+YmFzZXJfZGV2KTsKKyAgICAgICAgICAgIGNsZWFyX2Jp dChWSVJUX0lUU19ERVZfVkFMSUQsICZpdHMtPmZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAg IGlmICggcmVnICYgR0lUU19WQUxJRF9CSVQgKQorICAgICAgICAgICAgaXRzLT5tYXhfZGV2aWNl cyA9IGl0c19iYXNlcl9ucl9lbnRyaWVzKHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg IGl0cy0+bWF4X2RldmljZXMgPSAwOworCisgICAgICAgIGl0cy0+YmFzZXJfZGV2ID0gcmVnOwor ICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFZSRUc2NChHSVRTX0JBU0VSMSk6CisgICAgICAg IGlmICggISB2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZvLT5kYWJ0KSApIGdvdG8gYmFkX3dp ZHRoOworCisgICAgICAgIC8qIENoYW5naW5nIGJhc2UgcmVnaXN0ZXJzIHdpdGggdGhlIElUUyBl bmFibGVkIGlzIFVOUFJFRElDVEFCTEUuICovCisgICAgICAgIGlmICggaXRzX2lzX2VuYWJsZWQo aXRzKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19JTkZPLCAiSVRT OiBEb21haW4gJWQgdHJpZWQgdG8gY2hhbmdlIEJBU0VSIHdpdGggdGhlIElUUyBlbmFibGVkLlxu IiwKKyAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7CisgICAgICAgICAgICByZXR1 cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJlZyA9IGl0cy0+YmFzZXJfY29sbDsKKyAgICAg ICAgdmdpY19yZWc2NF91cGRhdGUoJnJlZywgciwgaW5mbyk7CisgICAgICAgIHJlZyAmPSB+R0lU U19CQVNFUl9ST19NQVNLOworICAgICAgICByZWcgfD0gKHNpemVvZih1aW50MTZfdCkgLSAxKSA8 PCBHSVRTX0JBU0VSX0VOVFJZX1NJWkVfU0hJRlQ7CisgICAgICAgIHJlZyB8PSBHSVRTX0JBU0VS X1RZUEVfQ09MTEVDVElPTiA8PCBHSVRTX0JBU0VSX1RZUEVfU0hJRlQ7CisgICAgICAgIHNhbml0 aXplX2l0c19iYXNlX3JlZygmcmVnKTsKKworICAgICAgICBpZiAoICEocmVnICYgR0lUU19WQUxJ RF9CSVQpIHx8CisgICAgICAgICAgICAgZ2V0X2Jhc2VyX3BoeXNfYWRkcihyZWcpICE9IGdldF9i YXNlcl9waHlzX2FkZHIoaXRzLT5iYXNlcl9jb2xsKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHZnaWNfaXRzX3VubWFwX2l0c190YWJsZShpdHMtPmQsIGl0cy0+YmFzZXJfY29sbCk7CisgICAg ICAgICAgICBjbGVhcl9iaXQoVklSVF9JVFNfQ09MTF9WQUxJRCwgJml0cy0+ZmxhZ3MpOworICAg ICAgICB9CisKKyAgICAgICAgaWYgKCByZWcgJiBHSVRTX1ZBTElEX0JJVCApCisgICAgICAgICAg ICBpdHMtPm1heF9jb2xsZWN0aW9ucyA9IGl0c19iYXNlcl9ucl9lbnRyaWVzKHJlZyk7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIGl0cy0+bWF4X2NvbGxlY3Rpb25zID0gMDsKKyAgICAgICAg aXRzLT5iYXNlcl9jb2xsID0gcmVnOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFZSQU5H RTY0KEdJVFNfQkFTRVIyLCBHSVRTX0JBU0VSNyk6CisgICAgICAgIGdvdG8gd3JpdGVfaWdub3Jl XzY0OworICAgIGRlZmF1bHQ6CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19HX1dBUk5JTkcsICJJ VFM6IHVuaGFuZGxlZCBJVFMgcmVnaXN0ZXIgMHglbHhcbiIsCisgICAgICAgICAgICAgICAgIGlu Zm8tPmdwYSAmIDB4ZmZmZik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVy biAxOworCit3cml0ZV9pZ25vcmVfNjQ6CisgICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hlY2tfYWNj ZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRfd2lkdGg7CisgICAgcmV0dXJuIDE7CisKK3dyaXRl X2lnbm9yZV8zMjoKKyAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBnb3Rv IGJhZF93aWR0aDsKKyAgICByZXR1cm4gMTsKKworYmFkX3dpZHRoOgorICAgIHByaW50ayhYRU5M T0dfR19FUlIgIiVwdiB2R0lDUjogYmFkIHJlYWQgd2lkdGggJWQgciVkIG9mZnNldCAlIzA4bHhc biIsCisgICAgICAgICAgIHYsIGluZm8tPmRhYnQuc2l6ZSwgaW5mby0+ZGFidC5yZWcsIGluZm8t PmdwYSAmIDB4ZmZmZik7CisKKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1taW9faGFuZGxlcl9vcHMgdmdp Y19pdHNfbW1pb19oYW5kbGVyID0geworICAgIC5yZWFkICA9IHZnaWNfdjNfaXRzX21taW9fcmVh ZCwKKyAgICAud3JpdGUgPSB2Z2ljX3YzX2l0c19tbWlvX3dyaXRlLAorfTsKKworLyoKKyAqIExv Y2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMt YmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpk aWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3ZnaWMtdjMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLXYz LmMKaW5kZXggMmM2YjMxNy4uZWJjZmMxNiAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL3ZnaWMt djMuYworKysgYi94ZW4vYXJjaC9hcm0vdmdpYy12My5jCkBAIC0xNTgsMTUgKzE1OCw2IEBAIHN0 YXRpYyB2b2lkIHZnaWNfc3RvcmVfaXJvdXRlcihzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qgdmdp Y19pcnFfcmFuayAqcmFuaywKICAgICB3cml0ZV9hdG9taWMoJnJhbmstPnZjcHVbb2Zmc2V0XSwg bmV3X3ZjcHUtPnZjcHVfaWQpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgdmdpY19yZWc2NF9j aGVja19hY2Nlc3Moc3RydWN0IGhzcl9kYWJ0IGRhYnQpCi17Ci0gICAgLyoKLSAgICAgKiA2NCBi aXRzIHJlZ2lzdGVycyBjYW4gYmUgYWNjZXNzaWJsZSB1c2luZyAzMi1iaXQgYW5kIDY0LWJpdCB1 bmxlc3MKLSAgICAgKiBzdGF0ZWQgb3RoZXJ3aXNlIChTZWUgOC4xLjMgQVJNIElISSAwMDY5QSku Ci0gICAgICovCi0gICAgcmV0dXJuICggZGFidC5zaXplID09IERBQlRfRE9VQkxFX1dPUkQgfHwg ZGFidC5zaXplID09IERBQlRfV09SRCApOwotfQotCiBzdGF0aWMgaW50IF9fdmdpY192M19yZGlz dHJfcmRfbW1pb19yZWFkKHN0cnVjdCB2Y3B1ICp2LCBtbWlvX2luZm9fdCAqaW5mbywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ2ljcl9yZWcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgKnIpCmRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19kZWZzLmggYi94ZW4vaW5jbHVk ZS9hc20tYXJtL2dpY192M19kZWZzLmgKaW5kZXggYjAxYjZlZC4uODk5OTkzNyAxMDA2NDQKLS0t IGEveGVuL2luY2x1ZGUvYXNtLWFybS9naWNfdjNfZGVmcy5oCisrKyBiL3hlbi9pbmNsdWRlL2Fz bS1hcm0vZ2ljX3YzX2RlZnMuaApAQCAtMTU1LDYgKzE1NSwxNiBAQAogI2RlZmluZSBMUElfUFJP UF9SRVMxICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIExQSV9QUk9QX0VOQUJMRUQg ICAgICAgICAgICAgKDEgPDwgMCkKIAorLyoKKyAqIFBJRFIyOiBPbmx5IGJpdHNbNzo0XSBhcmUg bm90IGltcGxlbWVudGF0aW9uIGRlZmluZWQuIFdlIGFyZQorICogZW11bGF0aW5nIGEgR0lDdjMg KFs3OjRdID0gMHgzKS4KKyAqCisgKiBXZSBkb24ndCBlbXVsYXRlIGEgc3BlY2lmaWMgcmVnaXN0 ZXJzIHNjaGVtZSBzbyBpbXBsZW1lbnQgdGhlIG90aGVycworICogYml0cyBhcyBSRVMwIGFzIHJl Y29tbWVuZGVkIGJ5IHRoZSBzcGVjIChzZWUgOC4xLjEzIGluIEFSTSBJSEkgMDA2OUEpLgorICov CisjZGVmaW5lIEdJQ1YzX0dJQ0RfUElEUjIgIDB4MzAKKyNkZWZpbmUgR0lDVjNfR0lDUl9QSURS MiAgR0lDVjNfR0lDRF9QSURSMgorCiAjZGVmaW5lIEdJQ0hfVk1DUl9FT0kgICAgICAgICAgICAg ICAgKDEgPDwgOSkKICNkZWZpbmUgR0lDSF9WTUNSX1ZFTkcxICAgICAgICAgICAgICAoMSA8PCAx KQogCkBAIC0xOTgsNiArMjA4LDE1IEBAIHN0cnVjdCByZGlzdF9yZWdpb24gewogICAgIGJvb2wg c2luZ2xlX3JkaXN0OwogfTsKIAorLyoKKyAqIDY0IGJpdHMgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nl c3NpYmxlIHVzaW5nIDMyLWJpdCBhbmQgNjQtYml0IHVubGVzcworICogc3RhdGVkIG90aGVyd2lz ZSAoU2VlIDguMS4zIEFSTSBJSEkgMDA2OUEpLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdmdp Y19yZWc2NF9jaGVja19hY2Nlc3Moc3RydWN0IGhzcl9kYWJ0IGRhYnQpCit7CisgICAgcmV0dXJu ICggZGFidC5zaXplID09IERBQlRfRE9VQkxFX1dPUkQgfHwgZGFidC5zaXplID09IERBQlRfV09S RCApOworfQorCiAjZW5kaWYgLyogX19BU01fQVJNX0dJQ19WM19ERUZTX0hfXyAqLwogCiAvKgpk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9naWNfdjNfaXRzLmggYi94ZW4vaW5jbHVk ZS9hc20tYXJtL2dpY192M19pdHMuaAppbmRleCBkODE2NWM0Li5iMmE5NTg2IDEwMDY0NAotLS0g YS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMuaAorKysgYi94ZW4vaW5jbHVkZS9hc20t YXJtL2dpY192M19pdHMuaApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBHSVRTX0JBU0VSNSAg ICAgICAgICAgICAgICAgICAgIDB4MTI4CiAjZGVmaW5lIEdJVFNfQkFTRVI2ICAgICAgICAgICAg ICAgICAgICAgMHgxMzAKICNkZWZpbmUgR0lUU19CQVNFUjcgICAgICAgICAgICAgICAgICAgICAw eDEzOAorI2RlZmluZSBHSVRTX1BJRFIyICAgICAgICAgICAgICAgICAgICAgIEdJQ1JfUElEUjIK IAogLyogUmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBHSVRTX1ZBTElEX0JJVCAgICAgICAgICAg ICAgICAgIEJJVF9VTEwoNjMpCkBAIC01Niw2ICs1Nyw3IEBACiAjZGVmaW5lIEdJVFNfVFlQRVJf SVRUX1NJWkVfTUFTSyAgICAgICAgKDB4ZlVMIDw8IEdJVFNfVFlQRVJfSVRUX1NJWkVfU0hJRlQp CiAjZGVmaW5lIEdJVFNfVFlQRVJfSVRUX1NJWkUocikgICAgICAgICAgKCgoKHIpICYgR0lUU19U WVBFUl9JVFRfU0laRV9NQVNLKSA+PiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0lUU19UWVBFUl9JVFRfU0laRV9TSElGVCkgKyAxKQorI2RlZmlu ZSBHSVRTX1RZUEVSX1BIWVNJQ0FMICAgICAgICAgICAgICgxVSA8PCAwKQogCiAjZGVmaW5lIEdJ VFNfSUlEUl9WQUxVRSAgICAgICAgICAgICAgICAgMHgzNGMKIAotLSAKMi45LjAKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4t ZGV2ZWwK