From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v9 10/25] x86: refactor psr: L3 CAT: set value: assemble features value array. Date: Thu, 16 Mar 2017 19:08:00 +0800 Message-ID: <1489662495-5375-11-git-send-email-yi.y.sun@linux.intel.com> References: <1489662495-5375-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coTM4-0004M8-3g for xen-devel@lists.xenproject.org; Thu, 16 Mar 2017 11:14:04 +0000 In-Reply-To: <1489662495-5375-1-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, he.chen@linux.intel.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T25seSBjYW4gb25lIENPUyBJRCBiZSB1c2VkIGJ5IG9uZSBkb21haW4gYXQgb25lIHRpbWUuIFRo YXQgbWVhbnMgYWxsIGVuYWJsZWQKZmVhdHVyZXMnIENPUyByZWdpc3RlcnMgYXQgdGhpcyBDT1Mg SUQgYXJlIHZhbGlkIGZvciB0aGlzIGRvbWFpbiBhdCB0aGF0IHRpbWUuCgpXaGVuIHVzZXIgdXBk YXRlcyBhIGZlYXR1cmUncyB2YWx1ZSwgd2UgbmVlZCBtYWtlIHN1cmUgYWxsIG90aGVyIGZlYXR1 cmVzJwp2YWx1ZXMgYXJlIG5vdCBhZmZlY3RlZC4gU28sIHdlIGZpcnN0bHkgbmVlZCBnYXRoZXIg YW4gYXJyYXkgd2hpY2ggY29udGFpbnMKYWxsIGZlYXR1cmVzIGN1cnJlbnQgdmFsdWVzIGFuZCBy ZXBsYWNlIHRoZSBzZXR0aW5nIGZlYXR1cmUncyB2YWx1ZSBpbiBhcnJheQp0byBuZXcgdmFsdWUu CgpUaGVuLCB3ZSBjYW4gdHJ5IHRvIGZpbmQgaWYgdGhlcmUgaXMgYSBDT1MgSUQgb24gd2hpY2gg YWxsIGZlYXR1cmVzJyBDT1MKcmVnaXN0ZXJzIHZhbHVlcyBhcmUgc2FtZSBhcyB0aGUgYXJyYXku IElmIHdlIGNhbiBmaW5kLCB3ZSBqdXN0IHVzZSB0aGlzIENPUwpJRC4gSWYgZmFpbCB0byBmaW5k LCB3ZSBuZWVkIHBpY2sgYSBuZXcgQ09TIElELgoKVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHZhbHVl IGFycmF5IGFzc2VtYmxpbmcgZmxvdy4KClNpZ25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5zdW5A bGludXguaW50ZWwuY29tPgotLS0Kdjk6CiAgICAtIGFkZCBjb21tZW50cyBhYm91dCBib3VuZGFy eSBjaGVja2luZy4KICAgICAgKHN1Z2dlc3RlZCBieSBXZWkgTGl1KQogICAgLSByZW5hbWUgJ2Fz c2VtYmxlX3ZhbF9hcnJheScgdG8gJ2NvbWJpbmVfdmFsX2FycmF5JyBpbiBwZXJ2aW91cyBwYXRj aC4KICAgICAgKHN1Z2dlc3RlZCBieSBXZWkgTGl1KQogICAgLSByZW5hbWUgJ2wzX2NhdF9nZXRf Y29zX251bScgdG8gJ2NhdF9nZXRfY29zX251bScgdG8gY292ZXIgYWxsIEwzL0wyIENBVAogICAg ICBmZWF0dXJlcy4KICAgICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUpCiAgICAtIHJlbmFtZSAn bDNfY2F0X2dldF9vbGRfdmFsJyB0byAnY2F0X2dldF9vbGRfdmFsJyB0byBjb3ZlciBhbGwgTDMv TDIgQ0FUCiAgICAgIGZlYXR1cmVzIGFuZCByZXVzZSBjYXRfZ2V0X3ZhbCBpbiBpdC4KICAgICAg KHN1Z2dlc3RlZCBieSBSb2dlciBQYXUpCiAgICAtIHJlcGxhY2UgZmVhdHVyZSBsaXN0IGhhbmRs aW5nIHRvIGZlYXR1cmUgYXJyYXkgaGFuZGxpbmcuCiAgICAgIChzdWdnZXN0ZWQgYnkgUm9nZXIg UGF1KQogICAgLSBtb2RpZnkgcGF0Y2ggdGl0bGUgdG8gaW5kaWNhdGUgJ0wzIENBVCcuCiAgICAg IChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHJlcGxhY2UgJ20nIHRvICduZXdfdmFs Jy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0gbW92ZSBjb3MgY2hlY2sg b3V0c2lkZSBjYWxsYmFjayBmdW5jdGlvbi4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGlj aCkKICAgIC0gcmVtb3ZlICdnZXRfY29zX251bScgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgIChz dWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIGNoYW5nZXMgYWJvdXQgJ3VpbnQ2NF90JyB0 byAndWludDMyX3QnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQp2NjoKICAgIC0g Y2hhbmdlICdhc3NlbWJsZV92YWxfYXJyYXknIHRvICdjb21iaW5lX3ZhbF9hcnJheScuCiAgICAg IChzdWdnZXN0ZWQgYnkgS29ucmFkIFJ6ZXN6dXRlayBXaWxrKQogICAgLSBjaGVjayByZXR1cm4g dmFsdWUgb2YgJ2dldF9vbGRfdmFsJy4KICAgICAgKHN1Z2dlc3RlZCBieSBLb25yYWQgUnplc3p1 dGVrIFdpbGspCiAgICAtIHJlcGxhY2Ugc29tZSAnRUlOVkFMJyB0byAnRU5PU1BDJy4KICAgICAg KHN1Z2dlc3RlZCBieSBLb25yYWQgUnplc3p1dGVrIFdpbGspCnY1OgogICAgLSBtb2RpZnkgY29t bWVudHMgYWNjb3JkaW5nIHRvIGNoYW5nZXMgb2YgY29kZXMuCiAgICAgIChzdWdnZXN0ZWQgYnkg SmFuIEJldWxpY2gpCiAgICAtIGNoYW5nZSAnYm9vbF90JyB0byAnYm9vbCcuCiAgICAgIChzdWdn ZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIG1vZGlmeSByZXR1cm4gdmFsdWUgb2YgY2FsbGJh Y2sgZnVuY3Rpb25zIGJlY2F1c2Ugd2UgZG8gbm90IG5lZWQgdGhlbQogICAgICB0byByZXR1cm4g bnVtYmVyIG9mIGVudHJpZXMgdGhlIGZlYXR1cmUgdXNlcy4gSW4gY2FsbGVyLCB3ZSBjYWxsCiAg ICAgICdnZXRfY29zX251bScgdG8gZ2V0IHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgZmVhdHVy ZSB1c2VzLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBtb2RpZnkgdmFy aWFibGVzIG5hbWVzIHRvIG1ha2UgdGhlbSBiZXR0ZXIsIGUuZy4gJ2ZlYXRfdG1wJyB0byAnZmVh dCcuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCnY0OgogICAgLSBjcmVhdGUgdGhp cyBwYXRjaCB0byBtYWtlIGNvZGVzIGVhc2llciB0byB1bmRlcnN0YW5kLgogICAgICAoc3VnZ2Vz dGVkIGJ5IEphbiBCZXVsaWNoKQotLS0KIHhlbi9hcmNoL3g4Ni9wc3IuYyB8IDE1MiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNo YW5nZWQsIDE0OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwppbmRleCBmOGQ0YmU0Li4xOGFh ZDhlIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNyLmMKKysrIGIveGVuL2FyY2gveDg2L3Bz ci5jCkBAIC0xMDEsNiArMTAxLDI4IEBAIHN0cnVjdCBmZWF0X25vZGUgewogICAgICAgICAvKiBn ZXRfdmFsIGlzIHVzZWQgdG8gZ2V0IGZlYXR1cmUgQ09TIHJlZ2lzdGVyIHZhbHVlLiAqLwogICAg ICAgICB2b2lkICgqZ2V0X3ZhbCkoY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCwgdW5zaWdu ZWQgaW50IGNvcywKICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY2JtX3R5cGUgdHlwZSwg dWludDMyX3QgKnZhbCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0X29sZF92YWwgYW5k IHNldF9uZXdfdmFsIGFyZSBhIHBhaXIgb2YgZnVuY3Rpb25zIGNhbGxlZCBpbiBvcmRlci4KKyAg ICAgICAgICogVGhlIGNhbGxlciB3aWxsIHRyYXZlcnNlIGFsbCBmZWF0dXJlcyBpbiB0aGUgYXJy YXkgYW5kIGNhbGwKKyAgICAgICAgICogJ2dldF9vbGRfdmFsJyB0byBnZXQgb2xkX2NvcyByZWdp c3RlciB2YWx1ZSBvZiBhbGwgc3VwcG9ydGVkCisgICAgICAgICAqIGZlYXR1cmVzLiBUaGVuLCBj YWxsICdzZXRfbmV3X3ZhbCcgdG8gc2V0IHRoZSBuZXcgdmFsdWUgZm9yIHRoZQorICAgICAgICAg KiBkZXNpZ25hdGVkIGZlYXR1cmUuCisgICAgICAgICAqCisgICAgICAgICAqIEFsbCB0aGUgdmFs dWVzIGFyZSBzZXQgaW50byB2YWx1ZSBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIHRyYXZlcnNhbAor ICAgICAgICAgKiBvcmRlciwgbWVhbmluZyB0aGUgc2FtZSBvcmRlciBvZiBmZWF0dXJlIGFycmF5 IG1lbWJlcnMuCisgICAgICAgICAqCisgICAgICAgICAqIFRoZSByZXR1cm4gdmFsdWUgbWVhbmlu ZyBvZiBzZXRfbmV3X3ZhbDoKKyAgICAgICAgICogMCAtIHN1Y2Nlc3MuCisgICAgICAgICAqIG5l Z2F0aXZlIC0gZXJyb3IuCisgICAgICAgICAqLworICAgICAgICB2b2lkICgqZ2V0X29sZF92YWwp KHVpbnQzMl90IHZhbFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBmZWF0X25vZGUgKmZlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IG9sZF9jb3MpOworICAgICAgICBpbnQgKCpzZXRfbmV3X3ZhbCkodWludDMyX3QgdmFsW10s CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjYm1fdHlwZSB0eXBlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbmV3X3ZhbCk7CiAgICAgfSBvcHM7CiAKICAg ICAvKiBFbmNhcHN1bGF0ZSBmZWF0dXJlIHNwZWNpZmljIEhXIGluZm8gaGVyZS4gKi8KQEAgLTIx Miw2ICsyMzQsMjkgQEAgc3RhdGljIGVudW0gcHNyX2ZlYXRfdHlwZSBwc3JfY2JtX3R5cGVfdG9f ZmVhdF90eXBlKGVudW0gY2JtX3R5cGUgdHlwZSkKIH0KIAogLyogQ0FUIGNvbW1vbiBmdW5jdGlv bnMgaW1wbGVtZW50YXRpb24uICovCitzdGF0aWMgYm9vbCBwc3JfY2hlY2tfY2JtKHVuc2lnbmVk IGludCBjYm1fbGVuLCB1aW50MzJfdCBjYm0pCit7CisgICAgdW5zaWduZWQgaW50IGZpcnN0X2Jp dCwgemVyb19iaXQ7CisKKyAgICAvKiBTZXQgYml0cyBzaG91bGQgb25seSBpbiB0aGUgcmFuZ2Ug b2YgWzAsIGNibV9sZW5dLiAqLworICAgIGlmICggY2JtICYgKH4wdWwgPDwgY2JtX2xlbikgKQor ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvKiBBdCBsZWFzdCBvbmUgYml0IG5lZWQgdG8g YmUgc2V0LiAqLworICAgIGlmICggY2JtID09IDAgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK KyAgICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgodWludDY0X3QgKikmY2JtLCBjYm1fbGVu KTsKKyAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgodWludDY0X3QgKikmY2JtLCBj Ym1fbGVuLCBmaXJzdF9iaXQpOworCisgICAgLyogU2V0IGJpdHMgc2hvdWxkIGJlIGNvbnRpZ3Vv dXMuICovCisgICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKKyAgICAgICAgIGZpbmRfbmV4 dF9iaXQoKHVpbnQ2NF90ICopJmNibSwgY2JtX2xlbiwgemVyb19iaXQpIDwgY2JtX2xlbiApCisg ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9p ZCBjYXRfaW5pdF9mZWF0dXJlKHN0cnVjdCBjcHVpZF9sZWFmIHJlZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBmZWF0X25vZGUgKmZlYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8sCkBAIC0yODUsMTEgKzMz MCwzNSBAQCBzdGF0aWMgdm9pZCBjYXRfZ2V0X3ZhbChjb25zdCBzdHJ1Y3QgZmVhdF9ub2RlICpm ZWF0LCB1bnNpZ25lZCBpbnQgY29zLAogICAgICp2YWwgPSBmZWF0LT5jb3NfcmVnX3ZhbFtjb3Nd OwogfQogCisvKiB2YWxbXSBsZW4gY2hlY2tpbmcgaXMgZG9uZSBieSBjYWxsZXIuICovCitzdGF0 aWMgdm9pZCBjYXRfZ2V0X29sZF92YWwodWludDMyX3QgdmFsW10sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcykKK3sKKyAgICBjYXRfZ2V0X3ZhbChm ZWF0LCBvbGRfY29zLCAwLCAmdmFsWzBdKTsKK30KKworLyogdmFsW10gbGVuIGNoZWNraW5nIGlz IGRvbmUgYnkgY2FsbGVyLiAqLworc3RhdGljIGludCBjYXRfc2V0X25ld192YWwodWludDMyX3Qg dmFsW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9ub2Rl ICpmZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjYm1fdHlwZSB0eXBlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbmV3X3ZhbCkKK3sKKyAgICBpZiAo ICFwc3JfY2hlY2tfY2JtKGZlYXQtPmluZm8uY2F0X2luZm8uY2JtX2xlbiwgbmV3X3ZhbCkgKQor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHZhbFswXSA9IG5ld192YWw7CisKKyAgICBy ZXR1cm4gMDsKK30KKwogLyogTDMgQ0FUIG9wcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmZWF0 X29wcyBsM19jYXRfb3BzID0gewogICAgIC5nZXRfY29zX21heCA9IGNhdF9nZXRfY29zX21heCwK ICAgICAuZ2V0X2ZlYXRfaW5mbyA9IGNhdF9nZXRfZmVhdF9pbmZvLAogICAgIC5nZXRfdmFsID0g Y2F0X2dldF92YWwsCisgICAgLmdldF9vbGRfdmFsID0gY2F0X2dldF9vbGRfdmFsLAorICAgIC5z ZXRfbmV3X3ZhbCA9IGNhdF9zZXRfbmV3X3ZhbCwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBw YXJzZV9wc3JfYm9vbChjaGFyICpzLCBjaGFyICp2YWx1ZSwgY2hhciAqZmVhdHVyZSwKQEAgLTU4 MSw3ICs2NTAsMjEgQEAgaW50IHBzcl9nZXRfdmFsKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk IGludCBzb2NrZXQsCiAvKiBTZXQgdmFsdWUgZnVuY3Rpb25zICovCiBzdGF0aWMgdW5zaWduZWQg aW50IGdldF9jb3NfbnVtKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pCiB7Ci0g ICAgcmV0dXJuIDA7CisgICAgY29uc3Qgc3RydWN0IGZlYXRfbm9kZSAqZmVhdDsKKyAgICB1bnNp Z25lZCBpbnQgbnVtID0gMCwgaTsKKworICAgIC8qIEdldCBhbGwgZmVhdHVyZXMgdG90YWwgYW1v dW50LiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgUFNSX1NPQ0tFVF9NQVhfRkVBVDsgaSsrICkK KyAgICB7CisgICAgICAgIGlmICggIWluZm8tPmZlYXR1cmVzW2ldICkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIGZlYXQgPSBpbmZvLT5mZWF0dXJlc1tpXTsKKworICAgICAgICBu dW0gKz0gZmVhdC0+Y29zX251bTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVtOwogfQogCiBzdGF0 aWMgaW50IGdhdGhlcl92YWxfYXJyYXkodWludDMyX3QgdmFsW10sCkBAIC01ODksNyArNjcyLDM0 IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3ZhbF9hcnJheSh1aW50MzJfdCB2YWxbXSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICppbmZvLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvbGRfY29zKQogewotICAg IHJldHVybiAtRUlOVkFMOworICAgIGNvbnN0IHN0cnVjdCBmZWF0X25vZGUgKmZlYXQ7CisgICAg dW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoICF2YWwgKQorICAgICAgICByZXR1cm4gLUVJTlZB TDsKKworICAgIC8qIEdldCBhbGwgZmVhdHVyZXMgY3VycmVudCB2YWx1ZXMgYWNjb3JkaW5nIHRv IG9sZF9jb3MuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBQU1JfU09DS0VUX01BWF9GRUFUOyBp KysgKQorICAgIHsKKyAgICAgICAgaWYgKCAhaW5mby0+ZmVhdHVyZXNbaV0gKQorICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgZmVhdCA9IGluZm8tPmZlYXR1cmVzW2ldOworCisgICAg ICAgIGlmICggb2xkX2NvcyA+IGZlYXQtPm9wcy5nZXRfY29zX21heChmZWF0KSApCisgICAgICAg ICAgICBvbGRfY29zID0gMDsKKworICAgICAgICAvKiB2YWx1ZSBnZXR0aW5nIG9yZGVyIGlzIHNh bWUgYXMgZmVhdHVyZSBhcnJheSAqLworICAgICAgICBmZWF0LT5vcHMuZ2V0X29sZF92YWwodmFs LCBmZWF0LCBvbGRfY29zKTsKKworICAgICAgICBhcnJheV9sZW4gLT0gZmVhdC0+Y29zX251bTsK KyAgICAgICAgaWYgKCBhcnJheV9sZW4gPCAwICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PU1BD OworCisgICAgICAgIHZhbCArPSBmZWF0LT5jb3NfbnVtOworICAgIH0KKworICAgIHJldHVybiAw OwogfQogCiBzdGF0aWMgaW50IGluc2VydF9uZXdfdmFsX3RvX2FycmF5KHVpbnQzMl90IHZhbFtd LApAQCAtNTk5LDcgKzcwOSw0MyBAQCBzdGF0aWMgaW50IGluc2VydF9uZXdfdmFsX3RvX2FycmF5 KHVpbnQzMl90IHZhbFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt IGNibV90eXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IG5ld192YWwpCiB7Ci0gICAgcmV0dXJuIC1FSU5WQUw7CisgICAgY29uc3Qgc3RydWN0IGZl YXRfbm9kZSAqZmVhdDsKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGludCBpOworCisgICAg QVNTRVJUKGZlYXRfdHlwZSA8IFBTUl9TT0NLRVRfTUFYX0ZFQVQpOworCisgICAgLyogU2V0IG5l dyB2YWx1ZSBpbnRvIGFycmF5IGFjY29yZGluZyB0byBmZWF0dXJlJ3MgcG9zaXRpb24gaW4gYXJy YXkuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBmZWF0X3R5cGU7IGkrKyApCisgICAgeworICAg ICAgICBpZiAoICFpbmZvLT5mZWF0dXJlc1tpXSApCisgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICBmZWF0ID0gaW5mby0+ZmVhdHVyZXNbaV07CisKKyAgICAgICAgYXJyYXlfbGVuIC09 IGZlYXQtPmNvc19udW07CisgICAgICAgIGlmICggYXJyYXlfbGVuIDw9IDAgKQorICAgICAgICAg ICAgcmV0dXJuIC1FTk9TUEM7CisKKyAgICAgICAgdmFsICs9IGZlYXQtPmNvc19udW07CisgICAg fQorCisgICAgZmVhdCA9IGluZm8tPmZlYXR1cmVzW2ZlYXRfdHlwZV07CisKKyAgICBhcnJheV9s ZW4gLT0gZmVhdC0+Y29zX251bTsKKyAgICBpZiAoIGFycmF5X2xlbiA8IDAgKQorICAgICAgICBy ZXR1cm4gLUVOT1NQQzsKKworICAgIC8qCisgICAgICogVmFsdWUgc2V0dGluZyBwb3NpdGlvbiBp cyBzYW1lIGFzIGZlYXR1cmUgYXJyYXkuCisgICAgICogRGlmZmVyZW50IGZlYXR1cmVzIG1heSBo YXZlIGRpZmZlcmVudCBzZXR0aW5nIGJlaGF2aW9ycywgZS5nLiBDRFAKKyAgICAgKiBoYXMgdHdv IHZhbHVlcyAoREFUQS9DT0RFKSB3aGljaCBuZWVkIHVzIHRvIHNhdmUgaW5wdXQgdmFsdWUgdG8K KyAgICAgKiBkaWZmZXJlbnQgcG9zaXRpb24gaW4gdGhlIGFycmF5IGFjY29yZGluZyB0byB0eXBl LCBzbyB3ZSBoYXZlIHRvCisgICAgICogbWFpbnRhaW4gYSBjYWxsYmFjayBmdW5jdGlvbi4KKyAg ICAgKi8KKyAgICByZXQgPSBmZWF0LT5vcHMuc2V0X25ld192YWwodmFsLCBmZWF0LCB0eXBlLCBu ZXdfdmFsKTsKKworICAgIHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZmluZF9jb3MoY29u c3QgdWludDMyX3QgdmFsW10sIHVpbnQzMl90IGFycmF5X2xlbiwKLS0gCjEuOS4xCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==