From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 15/29] xl: split out network related code Date: Fri, 24 Feb 2017 16:13:00 +0000 Message-ID: <20170224161314.22154-16-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.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 1chIY4-00072q-Vm for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:49 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDE0MCAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy94bC94bF9uaWMuYyAg ICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDMgZmlsZXMgY2hhbmdlZCwgMTczIGluc2VydGlvbnMoKyksIDE0MSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy94bC94bF9uaWMuYwoKZGlmZiAtLWdpdCBhL3Rvb2xz L3hsL01ha2VmaWxlIGIvdG9vbHMveGwvTWFrZWZpbGUKaW5kZXggMzMxYWUyMTI5My4uYzJmMmNh MzhmNCAxMDA2NDQKLS0tIGEvdG9vbHMveGwvTWFrZWZpbGUKKysrIGIvdG9vbHMveGwvTWFrZWZp bGUKQEAgLTE3LDcgKzE3LDcgQEAgQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CiAKIFhMX09CSlMgPSB4 bC5vIHhsX2NtZGltcGwubyB4bF9jbWR0YWJsZS5vIHhsX3N4cC5vIHhsX3V0aWxzLm8KIFhMX09C SlMgKz0geGxfdG1lbS5vIHhsX3BhcnNlLm8geGxfY3B1cG9vbC5vIHhsX2ZsYXNrLm8KLVhMX09C SlMgKz0geGxfdnRwbS5vIHhsX2Jsb2NrLm8KK1hMX09CSlMgKz0geGxfdnRwbS5vIHhsX2Jsb2Nr Lm8geGxfbmljLm8KIAogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xs b2cpCiAkKFhMX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfWEwpCmRpZmYgLS1naXQgYS90b29s cy94bC94bF9jbWRpbXBsLmMgYi90b29scy94bC94bF9jbWRpbXBsLmMKaW5kZXggNTY1MjRmZTcw Ny4uZWFiNzg2NWJlZiAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGxfY21kaW1wbC5jCisrKyBiL3Rv b2xzL3hsL3hsX2NtZGltcGwuYwpAQCAtMzY0LDMxICszNjQsNiBAQCBvdXQ6CiAgICAgcmV0dXJu IHJldDsKIH0KIAotdm9pZCBzZXRfZGVmYXVsdF9uaWNfdmFsdWVzKGxpYnhsX2RldmljZV9uaWMg Km5pYyk7Ci12b2lkIHNldF9kZWZhdWx0X25pY192YWx1ZXMobGlieGxfZGV2aWNlX25pYyAqbmlj KQotewotCi0gICAgaWYgKGRlZmF1bHRfdmlmc2NyaXB0KSB7Ci0gICAgICAgIGZyZWUobmljLT5z Y3JpcHQpOwotICAgICAgICBuaWMtPnNjcmlwdCA9IHN0cmR1cChkZWZhdWx0X3ZpZnNjcmlwdCk7 Ci0gICAgfQotCi0gICAgaWYgKGRlZmF1bHRfYnJpZGdlKSB7Ci0gICAgICAgIGZyZWUobmljLT5i cmlkZ2UpOwotICAgICAgICBuaWMtPmJyaWRnZSA9IHN0cmR1cChkZWZhdWx0X2JyaWRnZSk7Ci0g ICAgfQotCi0gICAgaWYgKGRlZmF1bHRfZ2F0ZXdheWRldikgewotICAgICAgICBmcmVlKG5pYy0+ Z2F0ZXdheWRldik7Ci0gICAgICAgIG5pYy0+Z2F0ZXdheWRldiA9IHN0cmR1cChkZWZhdWx0X2dh dGV3YXlkZXYpOwotICAgIH0KLQotICAgIGlmIChkZWZhdWx0X3ZpZmJhY2tlbmQpIHsKLSAgICAg ICAgZnJlZShuaWMtPmJhY2tlbmRfZG9tbmFtZSk7Ci0gICAgICAgIG5pYy0+YmFja2VuZF9kb21u YW1lID0gc3RyZHVwKGRlZmF1bHRfdmlmYmFja2VuZCk7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9p ZCByZWxvYWRfZG9tYWluX2NvbmZpZyh1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnKQogewpAQCAtNTAx NywxMjEgKzQ5OTIsNiBAQCBpbnQgbWFpbl90b3AoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAg IHJldHVybiBzeXN0ZW0oInhlbnRvcCIpOwogfQogCi1pbnQgbWFpbl9uZXR3b3JrYXR0YWNoKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1aW50MzJfdCBkb21pZDsKLSAgICBpbnQgb3B0 OwotICAgIGxpYnhsX2RldmljZV9uaWMgbmljOwotICAgIFhMVV9Db25maWcgKmNvbmZpZyA9IDA7 Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgIm5ldHdvcmstYXR0YWNo IiwgMSkgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAgZG9taWQgPSB4 ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKLQotICAgIGNvbmZpZz0geGx1X2NmZ19pbml0KHN0 ZGVyciwgImNvbW1hbmQgbGluZSIpOwotICAgIGlmICghY29uZmlnKSB7Ci0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZvciBjb25maWd1cmF0aW9uXG4iKTsKLSAg ICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgbGlieGxfZGV2aWNlX25pY19pbml0KCZuaWMp OwotICAgIHNldF9kZWZhdWx0X25pY192YWx1ZXMoJm5pYyk7Ci0KLSAgICBmb3IgKGFyZ3YgKz0g b3B0aW5kKzEsIGFyZ2MgLT0gb3B0aW5kKzE7IGFyZ2MgPiAwOyArK2FyZ3YsIC0tYXJnYykgewot ICAgICAgICBpZiAocGFyc2VfbmljX2NvbmZpZygmbmljLCAmY29uZmlnLCAqYXJndikpCi0gICAg ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoZHJ5cnVuX29ubHkpIHsKLSAgICAg ICAgY2hhciAqanNvbiA9IGxpYnhsX2RldmljZV9uaWNfdG9fanNvbihjdHgsICZuaWMpOwotICAg ICAgICBwcmludGYoInZpZjogJXNcbiIsIGpzb24pOwotICAgICAgICBmcmVlKGpzb24pOwotICAg ICAgICBsaWJ4bF9kZXZpY2VfbmljX2Rpc3Bvc2UoJm5pYyk7Ci0gICAgICAgIGlmIChmZXJyb3Io c3Rkb3V0KSB8fCBmZmx1c2goc3Rkb3V0KSkgeyBwZXJyb3IoInN0ZG91dCIpOyBleGl0KC0xKTsg fQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAobGlieGxfZGV2aWNlX25pY19h ZGQoY3R4LCBkb21pZCwgJm5pYywgMCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4 bF9kZXZpY2VfbmljX2FkZCBmYWlsZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQot ICAgIGxpYnhsX2RldmljZV9uaWNfZGlzcG9zZSgmbmljKTsKLSAgICB4bHVfY2ZnX2Rlc3Ryb3ko Y29uZmlnKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IG1haW5fbmV0d29ya2xpc3QoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBvcHQ7Ci0gICAgbGlieGxfZGV2aWNlX25pYyAq bmljczsKLSAgICBsaWJ4bF9uaWNpbmZvIG5pY2luZm87Ci0gICAgaW50IG5iLCBpOwotCi0gICAg U1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJuZXR3b3JrLWxpc3QiLCAxKSB7Ci0g ICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICAvKiAgICAgIElkeCAgQkUgICBN QUMgICBIZGwgIFN0YSAgZXZjaCB0eHIvcnhyICBCRS1wYXRoICovCi0gICAgcHJpbnRmKCIlLTNz ICUtMnMgJS0xN3MgJS02cyAlLTVzICUtNnMgJTVzLyUtNXMgJS0zMHNcbiIsCi0gICAgICAgICAg ICJJZHgiLCAiQkUiLCAiTWFjIEFkZHIuIiwgImhhbmRsZSIsICJzdGF0ZSIsICJldnQtY2giLCAi dHgtIiwgInJ4LXJpbmctcmVmIiwgIkJFLXBhdGgiKTsKLSAgICBmb3IgKGFyZ3YgKz0gb3B0aW5k LCBhcmdjIC09IG9wdGluZDsgYXJnYyA+IDA7IC0tYXJnYywgKythcmd2KSB7Ci0gICAgICAgIHVp bnQzMl90IGRvbWlkID0geGZpbmRfZG9tYWluKCphcmd2KTsKLSAgICAgICAgbmljcyA9IGxpYnhs X2RldmljZV9uaWNfbGlzdChjdHgsIGRvbWlkLCAmbmIpOwotICAgICAgICBpZiAoIW5pY3MpIHsK LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkg PCBuYjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpYnhsX2RldmljZV9uaWNfZ2V0aW5mbyhj dHgsIGRvbWlkLCAmbmljc1tpXSwgJm5pY2luZm8pKSB7Ci0gICAgICAgICAgICAgICAgLyogSWR4 IEJFICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIlLTNkICUtMmQgIiwgbmljaW5mby5kZXZp ZCwgbmljaW5mby5iYWNrZW5kX2lkKTsKLSAgICAgICAgICAgICAgICAvKiBNQUMgKi8KLSAgICAg ICAgICAgICAgICBwcmludGYoTElCWExfTUFDX0ZNVCwgTElCWExfTUFDX0JZVEVTKG5pY3NbaV0u bWFjKSk7Ci0gICAgICAgICAgICAgICAgLyogSGRsICBTdGEgIGV2Y2ggdHhyL3J4ciAgQkUtcGF0 aCAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiJTZkICU1ZCAlNmQgJTVkLyUtMTFkICUtMzBz XG4iLAotICAgICAgICAgICAgICAgICAgICAgICBuaWNpbmZvLmRldmlkLCBuaWNpbmZvLnN0YXRl LCBuaWNpbmZvLmV2dGNoLAotICAgICAgICAgICAgICAgICAgICAgICBuaWNpbmZvLnJyZWZfdHgs IG5pY2luZm8ucnJlZl9yeCwgbmljaW5mby5iYWNrZW5kKTsKLSAgICAgICAgICAgICAgICBsaWJ4 bF9uaWNpbmZvX2Rpc3Bvc2UoJm5pY2luZm8pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg bGlieGxfZGV2aWNlX25pY19kaXNwb3NlKCZuaWNzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBm cmVlKG5pY3MpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IG1haW5fbmV0d29ya2Rl dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0gICAg aW50IG9wdDsKLSAgICBsaWJ4bF9kZXZpY2VfbmljIG5pYzsKLQotICAgIFNXSVRDSF9GT1JFQUNI X09QVChvcHQsICIiLCBOVUxMLCAibmV0d29yay1kZXRhY2giLCAyKSB7Ci0gICAgICAgIC8qIE5v IG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGlu ZF0pOwotCi0gICAgaWYgKCFzdHJjaHIoYXJndltvcHRpbmQrMV0sICc6JykpIHsKLSAgICAgICAg aWYgKGxpYnhsX2RldmlkX3RvX2RldmljZV9uaWMoY3R4LCBkb21pZCwgYXRvaShhcmd2W29wdGlu ZCsxXSksICZuaWMpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZGV2 aWNlICVzLlxuIiwgYXJndltvcHRpbmQrMV0pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAg ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobGlieGxfbWFjX3RvX2RldmljZV9uaWMo Y3R4LCBkb21pZCwgYXJndltvcHRpbmQrMV0sICZuaWMpKSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIlVua25vd24gZGV2aWNlICVzLlxuIiwgYXJndltvcHRpbmQrMV0pOwotICAgICAg ICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGxpYnhsX2RldmljZV9u aWNfcmVtb3ZlKGN0eCwgZG9taWQsICZuaWMsIDApKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAibGlieGxfZGV2aWNlX25pY19kZWwgZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybiAxOwot ICAgIH0KLSAgICBsaWJ4bF9kZXZpY2VfbmljX2Rpc3Bvc2UoJm5pYyk7Ci0gICAgcmV0dXJuIDA7 Ci19Ci0KIGludCBtYWluX2NoYW5uZWxsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAg ICBpbnQgb3B0OwpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxfbmljLmMgYi90b29scy94bC94bF9u aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yODFhNjJjODI4Ci0t LSAvZGV2L251bGwKKysrIGIvdG9vbHMveGwveGxfbmljLmMKQEAgLTAsMCArMSwxNzIgQEAKKy8q CisgKiBDb3B5cmlnaHQgMjAwOS0yMDE3IENpdHJpeCBMdGQgYW5kIG90aGVyIGNvbnRyaWJ1dG9y cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwK KyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgor CisjaW5jbHVkZSA8bGlieGwuaD4KKyNpbmNsdWRlIDxsaWJ4bF91dGlscy5oPgorI2luY2x1ZGUg PGxpYnhsdXRpbC5oPgorCisjaW5jbHVkZSAieGwuaCIKKyNpbmNsdWRlICJ4bF91dGlscy5oIgor I2luY2x1ZGUgInhsX3BhcnNlLmgiCisKK3ZvaWQgc2V0X2RlZmF1bHRfbmljX3ZhbHVlcyhsaWJ4 bF9kZXZpY2VfbmljICpuaWMpOwordm9pZCBzZXRfZGVmYXVsdF9uaWNfdmFsdWVzKGxpYnhsX2Rl dmljZV9uaWMgKm5pYykKK3sKKworICAgIGlmIChkZWZhdWx0X3ZpZnNjcmlwdCkgeworICAgICAg ICBmcmVlKG5pYy0+c2NyaXB0KTsKKyAgICAgICAgbmljLT5zY3JpcHQgPSBzdHJkdXAoZGVmYXVs dF92aWZzY3JpcHQpOworICAgIH0KKworICAgIGlmIChkZWZhdWx0X2JyaWRnZSkgeworICAgICAg ICBmcmVlKG5pYy0+YnJpZGdlKTsKKyAgICAgICAgbmljLT5icmlkZ2UgPSBzdHJkdXAoZGVmYXVs dF9icmlkZ2UpOworICAgIH0KKworICAgIGlmIChkZWZhdWx0X2dhdGV3YXlkZXYpIHsKKyAgICAg ICAgZnJlZShuaWMtPmdhdGV3YXlkZXYpOworICAgICAgICBuaWMtPmdhdGV3YXlkZXYgPSBzdHJk dXAoZGVmYXVsdF9nYXRld2F5ZGV2KTsKKyAgICB9CisKKyAgICBpZiAoZGVmYXVsdF92aWZiYWNr ZW5kKSB7CisgICAgICAgIGZyZWUobmljLT5iYWNrZW5kX2RvbW5hbWUpOworICAgICAgICBuaWMt PmJhY2tlbmRfZG9tbmFtZSA9IHN0cmR1cChkZWZhdWx0X3ZpZmJhY2tlbmQpOworICAgIH0KK30K KworaW50IG1haW5fbmV0d29ya2F0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg dWludDMyX3QgZG9taWQ7CisgICAgaW50IG9wdDsKKyAgICBsaWJ4bF9kZXZpY2VfbmljIG5pYzsK KyAgICBYTFVfQ29uZmlnICpjb25maWcgPSAwOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9w dCwgIiIsIE5VTEwsICJuZXR3b3JrLWF0dGFjaCIsIDEpIHsKKyAgICAgICAgLyogTm8gb3B0aW9u cyAqLworICAgIH0KKworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CisK KyAgICBjb25maWc9IHhsdV9jZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKKyAgICBp ZiAoIWNvbmZpZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0 ZSBmb3IgY29uZmlndXJhdGlvblxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAg IGxpYnhsX2RldmljZV9uaWNfaW5pdCgmbmljKTsKKyAgICBzZXRfZGVmYXVsdF9uaWNfdmFsdWVz KCZuaWMpOworCisgICAgZm9yIChhcmd2ICs9IG9wdGluZCsxLCBhcmdjIC09IG9wdGluZCsxOyBh cmdjID4gMDsgKythcmd2LCAtLWFyZ2MpIHsKKyAgICAgICAgaWYgKHBhcnNlX25pY19jb25maWco Jm5pYywgJmNvbmZpZywgKmFyZ3YpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg ICAgaWYgKGRyeXJ1bl9vbmx5KSB7CisgICAgICAgIGNoYXIgKmpzb24gPSBsaWJ4bF9kZXZpY2Vf bmljX3RvX2pzb24oY3R4LCAmbmljKTsKKyAgICAgICAgcHJpbnRmKCJ2aWY6ICVzXG4iLCBqc29u KTsKKyAgICAgICAgZnJlZShqc29uKTsKKyAgICAgICAgbGlieGxfZGV2aWNlX25pY19kaXNwb3Nl KCZuaWMpOworICAgICAgICBpZiAoZmVycm9yKHN0ZG91dCkgfHwgZmZsdXNoKHN0ZG91dCkpIHsg cGVycm9yKCJzdGRvdXQiKTsgZXhpdCgtMSk7IH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor CisgICAgaWYgKGxpYnhsX2RldmljZV9uaWNfYWRkKGN0eCwgZG9taWQsICZuaWMsIDApKSB7Cisg ICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX25pY19hZGQgZmFpbGVkLlxuIik7 CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBsaWJ4bF9kZXZpY2VfbmljX2Rpc3Bvc2Uo Jm5pYyk7CisgICAgeGx1X2NmZ19kZXN0cm95KGNvbmZpZyk7CisgICAgcmV0dXJuIDA7Cit9CisK K2ludCBtYWluX25ldHdvcmtsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQg b3B0OworICAgIGxpYnhsX2RldmljZV9uaWMgKm5pY3M7CisgICAgbGlieGxfbmljaW5mbyBuaWNp bmZvOworICAgIGludCBuYiwgaTsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBO VUxMLCAibmV0d29yay1saXN0IiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAg fQorCisgICAgLyogICAgICBJZHggIEJFICAgTUFDICAgSGRsICBTdGEgIGV2Y2ggdHhyL3J4ciAg QkUtcGF0aCAqLworICAgIHByaW50ZigiJS0zcyAlLTJzICUtMTdzICUtNnMgJS01cyAlLTZzICU1 cy8lLTVzICUtMzBzXG4iLAorICAgICAgICAgICAiSWR4IiwgIkJFIiwgIk1hYyBBZGRyLiIsICJo YW5kbGUiLCAic3RhdGUiLCAiZXZ0LWNoIiwgInR4LSIsICJyeC1yaW5nLXJlZiIsICJCRS1wYXRo Iik7CisgICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7IGFyZ2MgPiAwOyAt LWFyZ2MsICsrYXJndikgeworICAgICAgICB1aW50MzJfdCBkb21pZCA9IHhmaW5kX2RvbWFpbigq YXJndik7CisgICAgICAgIG5pY3MgPSBsaWJ4bF9kZXZpY2VfbmljX2xpc3QoY3R4LCBkb21pZCwg Jm5iKTsKKyAgICAgICAgaWYgKCFuaWNzKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkgeworICAgICAgICAgICAgaWYg KCFsaWJ4bF9kZXZpY2VfbmljX2dldGluZm8oY3R4LCBkb21pZCwgJm5pY3NbaV0sICZuaWNpbmZv KSkgeworICAgICAgICAgICAgICAgIC8qIElkeCBCRSAqLworICAgICAgICAgICAgICAgIHByaW50 ZigiJS0zZCAlLTJkICIsIG5pY2luZm8uZGV2aWQsIG5pY2luZm8uYmFja2VuZF9pZCk7CisgICAg ICAgICAgICAgICAgLyogTUFDICovCisgICAgICAgICAgICAgICAgcHJpbnRmKExJQlhMX01BQ19G TVQsIExJQlhMX01BQ19CWVRFUyhuaWNzW2ldLm1hYykpOworICAgICAgICAgICAgICAgIC8qIEhk bCAgU3RhICBldmNoIHR4ci9yeHIgIEJFLXBhdGggKi8KKyAgICAgICAgICAgICAgICBwcmludGYo IiU2ZCAlNWQgJTZkICU1ZC8lLTExZCAlLTMwc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg bmljaW5mby5kZXZpZCwgbmljaW5mby5zdGF0ZSwgbmljaW5mby5ldnRjaCwKKyAgICAgICAgICAg ICAgICAgICAgICAgbmljaW5mby5ycmVmX3R4LCBuaWNpbmZvLnJyZWZfcngsIG5pY2luZm8uYmFj a2VuZCk7CisgICAgICAgICAgICAgICAgbGlieGxfbmljaW5mb19kaXNwb3NlKCZuaWNpbmZvKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWNfZGlzcG9zZSgmbmlj c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShuaWNzKTsKKyAgICB9CisgICAgcmV0dXJu IDA7Cit9CisKK2ludCBtYWluX25ldHdvcmtkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor eworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGludCBvcHQ7CisgICAgbGlieGxfZGV2aWNlX25p YyBuaWM7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgIm5ldHdvcmst ZGV0YWNoIiwgMikgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgZG9t aWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKKworICAgIGlmICghc3RyY2hyKGFyZ3Zb b3B0aW5kKzFdLCAnOicpKSB7CisgICAgICAgIGlmIChsaWJ4bF9kZXZpZF90b19kZXZpY2Vfbmlj KGN0eCwgZG9taWQsIGF0b2koYXJndltvcHRpbmQrMV0pLCAmbmljKSkgeworICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJVbmtub3duIGRldmljZSAlcy5cbiIsIGFyZ3Zbb3B0aW5kKzFdKTsK KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg aWYgKGxpYnhsX21hY190b19kZXZpY2VfbmljKGN0eCwgZG9taWQsIGFyZ3Zbb3B0aW5kKzFdLCAm bmljKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGRldmljZSAlcy5c biIsIGFyZ3Zbb3B0aW5kKzFdKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChsaWJ4bF9kZXZpY2VfbmljX3JlbW92ZShjdHgsIGRvbWlkLCAmbmljLCAw KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV9uaWNfZGVsIGZhaWxl ZC5cbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgbGlieGxfZGV2aWNlX25pY19k aXNwb3NlKCZuaWMpOworICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBMb2NhbCB2YXJpYWJs ZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=