From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v14 09/23] x86: refactor psr: L3 CAT: set value: assemble features value array. Date: Sat, 15 Jul 2017 08:31:42 +0800 Message-ID: <1500078716-5928-10-git-send-email-yi.y.sun@linux.intel.com> References: <1500078716-5928-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 1dWBLS-00021A-SS for xen-devel@lists.xenproject.org; Sat, 15 Jul 2017 00:54:06 +0000 In-Reply-To: <1500078716-5928-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, 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 bGludXguaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2Uu Y29tPgotLS0KdjE0OgogICAgLSByZW1vdmUgcGFyYW1ldGVyICcqKnZhbCcgaW4gc2tpcF9wcmlv cl9mZWF0dXJlcyBhbmQgcmV0dXJuIHRoZSBsZW5ndGggdG8KICAgICAgc2tpcCB2YWx1ZSBhcnJh eSBpbiB0aGUgY2FsbGVyLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBy ZW1vdmUgYSBzdHJheSBibGFuay4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKdjEz OgogICAgLSByZW1vdmUgYW4gdW5uZWNlc3NhcnkgYmxhbmsgbGluZS4KICAgICAgKHN1Z2dlc3Rl ZCBieSBKYW4gQmV1bGljaCkKICAgIC0gYWRkIGEgbmV3IGZ1bmN0aW9uICdza2lwX3ByaW9yX2Zl YXR1cmVzKCknIHRvIHNraXAgdmFsdWUgYXJyYXkgYWNjb3JkaW5nCiAgICAgIHRvIGZlYXR1cmUg dHlwZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgaW4gbGF0ZXIgcGF0Y2hlcyB0b28uCiAg ICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCnYxMjoKICAgIC0gdXNlICdBUlJBWV9TSVpF JyB0byBjYWxjdWxhdGUgYXJyYXkgYm91bmRhcnkuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJl dWxpY2gpCiAgICAtIHVzZSAnQVNTRVJUX1VOUkVBQ0hBQkxFKCknIHRvIHJlY29yZCBidWcgYW5k IHJldHVybiBlcnJvciBjb2RlIGlmIGZlYXQKICAgICAgZXhpc3QgYnV0IHByb3BzIGRvZXMgbm90 IGV4aXN0LgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSByZXR1cm4gMCBv bmx5IHdoZW4gdmFsdWUgaXMgc2V0IGluICdpbnNlcnRfdmFsX2ludG9fYXJyYXknLgogICAgICAo c3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQp2MTE6CiAgICAtIGNoYW5nZXMgYWJvdXQgJ2ZlYXRf cHJvcHMnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBjaGFuZ2VzIGFi b3V0ICdnZXRfdmFsJy4gSXQgaXMgcmVwbGFjZWQgYnkgZ2VuZXJpYyBjb2Rlcy4KICAgICAgKHN1 Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKdjEwOgogICAgLSByZW1vdmUgJ2dldF9vbGRfdmFsJyB0 byBkaXJlY3RseSBjYWxsICdnZXRfdmFsJyB0byBnZXQgbmVlZGVkIHZhbC4KICAgICAgKHN1Z2dl c3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0gbW92ZSAncHNyX2NoZWNrX2NibScgaW50byAnaW5z ZXJ0X3ZhbF90b19hcnJheScuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAt IGNoYW5nZSB0eXBlIG9mICdjYm0nIGluICdwc3JfY2hlY2tfY2JtJyB0byAndW5zaWduZWQgbG9u ZycuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHJlbW92ZSAnc2V0X25l d192YWwnIGFzIGl0IGNhbiBiZSBoYW5kbGVkIGluIGdlbmVyaWMgcHJvY2Vzcy4KICAgIC0gY2hh bmdlcyByZWxhdGVkIHRvICdmZWF0X3Byb3BzJy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1 bGljaCkKICAgIC0gYWRqdXN0IGZsb3cgaW4gJ2dhdGhlcl92YWxfYXJyYXknIHRvIGF2b2lkIGFy cmF5IGNyb3NzLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBhZGp1c3Qg ZmxvdyBpbiAnaW5zZXJ0X3ZhbF90b19hcnJheScgdG8gYXZvaWQgYXJyYXkgY3Jvc3MuCiAgICAg IChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCnY5OgogICAgLSBhZGQgY29tbWVudHMgYWJvdXQg Ym91bmRhcnkgY2hlY2tpbmcuCiAgICAgIChzdWdnZXN0ZWQgYnkgV2VpIExpdSkKICAgIC0gcmVu YW1lICdhc3NlbWJsZV92YWxfYXJyYXknIHRvICdjb21iaW5lX3ZhbF9hcnJheScgaW4gcGVydmlv dXMgcGF0Y2guCiAgICAgIChzdWdnZXN0ZWQgYnkgV2VpIExpdSkKICAgIC0gcmVuYW1lICdsM19j YXRfZ2V0X2Nvc19udW0nIHRvICdjYXRfZ2V0X2Nvc19udW0nIHRvIGNvdmVyIGFsbCBMMy9MMiBD QVQKICAgICAgZmVhdHVyZXMuCiAgICAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1KQogICAgLSBy ZW5hbWUgJ2wzX2NhdF9nZXRfb2xkX3ZhbCcgdG8gJ2NhdF9nZXRfb2xkX3ZhbCcgdG8gY292ZXIg YWxsIEwzL0wyIENBVAogICAgICBmZWF0dXJlcyBhbmQgcmV1c2UgY2F0X2dldF92YWwgaW4gaXQu CiAgICAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1KQogICAgLSByZXBsYWNlIGZlYXR1cmUgbGlz dCBoYW5kbGluZyB0byBmZWF0dXJlIGFycmF5IGhhbmRsaW5nLgogICAgICAoc3VnZ2VzdGVkIGJ5 IFJvZ2VyIFBhdSkKICAgIC0gbW9kaWZ5IHBhdGNoIHRpdGxlIHRvIGluZGljYXRlICdMMyBDQVQn LgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSByZXBsYWNlICdtJyB0byAn bmV3X3ZhbCcuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIG1vdmUgY29z IGNoZWNrIG91dHNpZGUgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFu IEJldWxpY2gpCiAgICAtIHJlbW92ZSAnZ2V0X2Nvc19udW0nIGNhbGxiYWNrIGZ1bmN0aW9uLgog ICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBjaGFuZ2VzIGFib3V0ICd1aW50 NjRfdCcgdG8gJ3VpbnQzMl90Jy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKdjY6 CiAgICAtIGNoYW5nZSAnYXNzZW1ibGVfdmFsX2FycmF5JyB0byAnY29tYmluZV92YWxfYXJyYXkn LgogICAgICAoc3VnZ2VzdGVkIGJ5IEtvbnJhZCBSemVzenV0ZWsgV2lsaykKICAgIC0gY2hlY2sg cmV0dXJuIHZhbHVlIG9mICdnZXRfb2xkX3ZhbCcuCiAgICAgIChzdWdnZXN0ZWQgYnkgS29ucmFk IFJ6ZXN6dXRlayBXaWxrKQogICAgLSByZXBsYWNlIHNvbWUgJ0VJTlZBTCcgdG8gJ0VOT1NQQycu CiAgICAgIChzdWdnZXN0ZWQgYnkgS29ucmFkIFJ6ZXN6dXRlayBXaWxrKQp2NToKICAgIC0gbW9k aWZ5IGNvbW1lbnRzIGFjY29yZGluZyB0byBjaGFuZ2VzIG9mIGNvZGVzLgogICAgICAoc3VnZ2Vz dGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBjaGFuZ2UgJ2Jvb2xfdCcgdG8gJ2Jvb2wnLgogICAg ICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBtb2RpZnkgcmV0dXJuIHZhbHVlIG9m IGNhbGxiYWNrIGZ1bmN0aW9ucyBiZWNhdXNlIHdlIGRvIG5vdCBuZWVkIHRoZW0KICAgICAgdG8g cmV0dXJuIG51bWJlciBvZiBlbnRyaWVzIHRoZSBmZWF0dXJlIHVzZXMuIEluIGNhbGxlciwgd2Ug Y2FsbAogICAgICAnZ2V0X2Nvc19udW0nIHRvIGdldCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhl IGZlYXR1cmUgdXNlcy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0gbW9k aWZ5IHZhcmlhYmxlcyBuYW1lcyB0byBtYWtlIHRoZW0gYmV0dGVyLCBlLmcuICdmZWF0X3RtcCcg dG8gJ2ZlYXQnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQp2NDoKICAgIC0gY3Jl YXRlIHRoaXMgcGF0Y2ggdG8gbWFrZSBjb2RlcyBlYXNpZXIgdG8gdW5kZXJzdGFuZC4KICAgICAg KHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKLS0tCiB4ZW4vYXJjaC94ODYvcHNyLmMgfCAxMzUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEg ZmlsZSBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvcHNyLmMgYi94ZW4vYXJjaC94ODYvcHNyLmMKaW5kZXggZjFiNTgz Ny4uMmMwNDEzMSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3Bzci5jCisrKyBiL3hlbi9hcmNo L3g4Ni9wc3IuYwpAQCAtMjEwLDYgKzIxMCwyOSBAQCBzdGF0aWMgZW51bSBwc3JfZmVhdF90eXBl IHBzcl9jYm1fdHlwZV90b19mZWF0X3R5cGUoZW51bSBjYm1fdHlwZSB0eXBlKQogICAgIHJldHVy biBmZWF0X3R5cGU7CiB9CiAKK3N0YXRpYyBib29sIHBzcl9jaGVja19jYm0odW5zaWduZWQgaW50 IGNibV9sZW4sIHVuc2lnbmVkIGxvbmcgY2JtKQoreworICAgIHVuc2lnbmVkIGludCBmaXJzdF9i aXQsIHplcm9fYml0OworCisgICAgLyogU2V0IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJhbmdl IG9mIFswLCBjYm1fbGVuXS4gKi8KKyAgICBpZiAoIGNibSAmICh+MHVsIDw8IGNibV9sZW4pICkK KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRv IGJlIHNldC4gKi8KKyAgICBpZiAoIGNibSA9PSAwICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor CisgICAgZmlyc3RfYml0ID0gZmluZF9maXJzdF9iaXQoJmNibSwgY2JtX2xlbik7CisgICAgemVy b19iaXQgPSBmaW5kX25leHRfemVyb19iaXQoJmNibSwgY2JtX2xlbiwgZmlyc3RfYml0KTsKKwor ICAgIC8qIFNldCBiaXRzIHNob3VsZCBiZSBjb250aWd1b3VzLiAqLworICAgIGlmICggemVyb19i aXQgPCBjYm1fbGVuICYmCisgICAgICAgICBmaW5kX25leHRfYml0KCZjYm0sIGNibV9sZW4sIHpl cm9fYml0KSA8IGNibV9sZW4gKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g dHJ1ZTsKK30KKwogLyogQ0FUIGNvbW1vbiBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24uICovCiBz dGF0aWMgaW50IGNhdF9pbml0X2ZlYXR1cmUoY29uc3Qgc3RydWN0IGNwdWlkX2xlYWYgKnJlZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZlYXRfbm9kZSAqZmVhdCwKQEAg LTYwMSw3ICs2MjQsMTQgQEAgaW50IHBzcl9nZXRfdmFsKHN0cnVjdCBkb21haW4gKmQsIHVuc2ln bmVkIGludCBzb2NrZXQsCiAvKiBTZXQgdmFsdWUgZnVuY3Rpb25zICovCiBzdGF0aWMgdW5zaWdu ZWQgaW50IGdldF9jb3NfbnVtKHZvaWQpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQg aW50IG51bSA9IDAsIGk7CisKKyAgICAvKiBHZXQgYWxsIGZlYXR1cmVzIHRvdGFsIGFtb3VudC4g Ki8KKyAgICBmb3IgKCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVhdF9wcm9wcyk7IGkrKyApCisg ICAgICAgIGlmICggZmVhdF9wcm9wc1tpXSApCisgICAgICAgICAgICBudW0gKz0gZmVhdF9wcm9w c1tpXS0+Y29zX251bTsKKworICAgIHJldHVybiBudW07CiB9CiAKIHN0YXRpYyBpbnQgZ2F0aGVy X3ZhbF9hcnJheSh1aW50MzJfdCB2YWxbXSwKQEAgLTYwOSw3ICs2MzksNjggQEAgc3RhdGljIGlu dCBnYXRoZXJfdmFsX2FycmF5KHVpbnQzMl90IHZhbFtdLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCiB7Ci0gICAgcmV0dXJuIC1FSU5W QUw7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoICF2YWwgKQorICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKworICAgIC8qIEdldCBhbGwgZmVhdHVyZXMgY3VycmVudCB2YWx1ZXMgYWNj b3JkaW5nIHRvIG9sZF9jb3MuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlu Zm8tPmZlYXR1cmVzKTsgaSsrICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3MgPSBv bGRfY29zLCBqOworICAgICAgICBjb25zdCBzdHJ1Y3QgZmVhdF9ub2RlICpmZWF0ID0gaW5mby0+ ZmVhdHVyZXNbaV07CisgICAgICAgIGNvbnN0IHN0cnVjdCBmZWF0X3Byb3BzICpwcm9wcyA9IGZl YXRfcHJvcHNbaV07CisKKyAgICAgICAgaWYgKCAhZmVhdCApCisgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICBpZiAoICFwcm9wcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS VF9VTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgIH0K KworICAgICAgICBpZiAoIGFycmF5X2xlbiA8IHByb3BzLT5jb3NfbnVtICkKKyAgICAgICAgICAg IHJldHVybiAtRU5PU1BDOworCisgICAgICAgIC8qCisgICAgICAgICAqIElmIG9sZF9jb3MgZXhj ZWVkcyBjdXJyZW50IGZlYXR1cmUncyBjb3NfbWF4LCB3ZSBzaG91bGQgZ2V0CisgICAgICAgICAq IGRlZmF1bHQgdmFsdWUuIFNvIGFzc2lnbiBjb3MgdG8gMCB3aGljaCBzdG9yZXMgZGVmYXVsdCB2 YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggY29zID4gZmVhdC0+Y29zX21heCApCisg ICAgICAgICAgICBjb3MgPSAwOworCisgICAgICAgIC8qIFZhbHVlIGdldHRpbmcgb3JkZXIgaXMg c2FtZSBhcyBmZWF0dXJlIGFycmF5LiAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHByb3Bz LT5jb3NfbnVtOyBqKysgKQorICAgICAgICAgICAgdmFsW2pdID0gZmVhdC0+Y29zX3JlZ192YWxb Y29zICogcHJvcHMtPmNvc19udW0gKyBqXTsKKworICAgICAgICBhcnJheV9sZW4gLT0gcHJvcHMt PmNvc19udW07CisgICAgICAgIHZhbCArPSBwcm9wcy0+Y29zX251bTsKKyAgICB9CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2lwX3ByaW9yX2ZlYXR1cmVzKHVuc2lnbmVkIGlu dCAqYXJyYXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHNyX2Zl YXRfdHlwZSBmZWF0X3R5cGUpCit7CisgICAgdW5zaWduZWQgaW50IGksIHNraXBfbGVuID0gMDsK KworICAgIGZvciAoIGkgPSAwOyBpIDwgZmVhdF90eXBlOyBpKysgKQorICAgIHsKKyAgICAgICAg Y29uc3Qgc3RydWN0IGZlYXRfcHJvcHMgKnByb3BzID0gZmVhdF9wcm9wc1tpXTsKKworICAgICAg ICBpZiAoICFwcm9wcyApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoICph cnJheV9sZW4gPD0gcHJvcHMtPmNvc19udW0gKQorICAgICAgICAgICAgcmV0dXJuIC1FTk9TUEM7 CisKKyAgICAgICAgKmFycmF5X2xlbiAtPSBwcm9wcy0+Y29zX251bTsKKyAgICAgICAgc2tpcF9s ZW4gKz0gcHJvcHMtPmNvc19udW07CisgICAgfQorCisgICAgcmV0dXJuIHNraXBfbGVuOwogfQog CiBzdGF0aWMgaW50IGluc2VydF92YWxfaW50b19hcnJheSh1aW50MzJfdCB2YWxbXSwKQEAgLTYx OSw2ICs3MTAsNDYgQEAgc3RhdGljIGludCBpbnNlcnRfdmFsX2ludG9fYXJyYXkodWludDMyX3Qg dmFsW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGNibV90eXBlIHR5 cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXdfdmFsKQog eworICAgIGNvbnN0IHN0cnVjdCBmZWF0X25vZGUgKmZlYXQ7CisgICAgY29uc3Qgc3RydWN0IGZl YXRfcHJvcHMgKnByb3BzOworICAgIHVuc2lnbmVkIGludCBpOworICAgIGludCByZXQ7CisKKyAg ICBBU1NFUlQoZmVhdF90eXBlIDwgRkVBVF9UWVBFX05VTSk7CisKKyAgICByZXQgPSBza2lwX3By aW9yX2ZlYXR1cmVzKCZhcnJheV9sZW4sIGZlYXRfdHlwZSk7CisgICAgaWYgKCByZXQgPCAwICkK KyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBlbHNlCisgICAgICAgIHZhbCArPSByZXQ7CisKKyAg ICBmZWF0ID0gaW5mby0+ZmVhdHVyZXNbZmVhdF90eXBlXTsKKyAgICBpZiAoICFmZWF0ICkKKyAg ICAgICAgcmV0dXJuIC1FTk9FTlQ7CisKKyAgICBwcm9wcyA9IGZlYXRfcHJvcHNbZmVhdF90eXBl XTsKKyAgICBpZiAoICFwcm9wcyApCisgICAgeworICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUo KTsKKyAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgfQorCisgICAgaWYgKCBhcnJheV9sZW4g PCBwcm9wcy0+Y29zX251bSApCisgICAgICAgIHJldHVybiAtRU5PU1BDOworCisgICAgaWYgKCAh cHNyX2NoZWNrX2NibShmZWF0LT5jYm1fbGVuLCBuZXdfdmFsKSApCisgICAgICAgIHJldHVybiAt RUlOVkFMOworCisgICAgLyogVmFsdWUgc2V0dGluZyBwb3NpdGlvbiBpcyBzYW1lIGFzIGZlYXR1 cmUgYXJyYXkuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBwcm9wcy0+Y29zX251bTsgaSsrICkK KyAgICB7CisgICAgICAgIGlmICggdHlwZSA9PSBwcm9wcy0+dHlwZVtpXSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHZhbFtpXSA9IG5ld192YWw7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiAtRUlOVkFMOwogfQogCi0tIAoxLjkuMQoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=