From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 44949 invoked by alias); 9 Mar 2017 15:51:44 -0000 Mailing-List: contact gnu-gabi-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: gnu-gabi-owner@sourceware.org Received: (qmail 44440 invoked by uid 89); 9 Mar 2017 15:51:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=interposed X-Spam-Status: No, score=-24.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: mail-qk0-f177.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=V3dVzx+BT/preGdIohNuvnjjSS+HsLvGA/uWyfGDimM=; b=eP7uQO6y/aHdBPyYdxTqKGYLOAGWyx5lhmpLJ9UUdydWIk0M2W+okpoTweU5FmkNqy wpap4/SH9gqMMQ1ArXBRmihQLMp4PCyEPyBlnZ7TXrcVtfr7VT42aYpMR3teHwDQhTXp 9GGv3fC54w1O8ENcOP4ijKgklEAje1TSZz9smFvOJm/AI0V4UXCjeyXtEQqIIPwHZvlP qgO4Ylvga6qlH4uJ6XAKiqLMoa8llXVD0AEnRa6smBtqbJRPzhppSJzlWBzraTHl4g50 RZP4h7vZybbA0Tjrsn6oUzxPhbYb0L8mcH+6RMpUdwtCnlIFomgO7YlJkdpjSbmFcerz 5sVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=V3dVzx+BT/preGdIohNuvnjjSS+HsLvGA/uWyfGDimM=; b=coh6ajReD7sxDGBrjKfU7OBjGuC1n2YqewIBQ8V/62AlLUStnfVA+GtBVsD1wgTaA9 e+EbauwQ4qLdeLIbmOH+u+AwtLBxXmmThbZClPFAqPN39uA73gddgWweul2ta/GS49ob KKPH1zE4Gs+ESQNSmgO0J+nJhw60+AldsENUAFyHSwkyvdth/s6mEGeyB1NH7ZnGDC83 xEOBSGYhVDDSRaVI3E7kEOp0ohyO8e2JsV2nLuMaaOAzREDwXbsAy9BpKYmNrJwbO8ki qqoTN0llLv10wA4mXiSEfiIPyLo2hxF+3Jkj5zAx5OFpnD0hTQ2CvEkkiIUHqQSjr2vL D5gg== X-Gm-Message-State: AFeK/H02TqzM5oE+2+bs6RQW+M1nLDSAHME5Bw7O3rXdoOhuTd/nR2zoiq6FXFdmBc4VGLjnFOr7TsWpillPVQ== X-Received: by 10.55.33.132 with SMTP id f4mr753735qki.275.1489074696887; Thu, 09 Mar 2017 07:51:36 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: <88608944-14c9-9d28-80d1-32283521683b@gmail.com> From: "H.J. Lu" Date: Sun, 01 Jan 2017 00:00:00 -0000 Message-ID: Subject: Re: RFC: ABI support for special memory area To: Suprateeka R Hegde Cc: "Carlos O'Donell" , gnu-gabi@sourceware.org Content-Type: multipart/mixed; boundary=001a113fe1ce5a4e3c054a4e38ef X-SW-Source: 2017-q1/txt/msg00015.txt.bz2 --001a113fe1ce5a4e3c054a4e38ef Content-Type: text/plain; charset=UTF-8 Content-length: 6155 On Thu, Mar 9, 2017 at 7:23 AM, Suprateeka R Hegde wrote: > H.J, > > I think we are full 180 degrees out-of-phase in our discussion this time > somehow :-) > > As I have already asked, I want to know what is that ONE-FIXED-FORM of > __gnu_mbind_setup being called by ld.so. > > The code you provided seems to be of Intel's implementation of libmbind. I > am interested in how it looks like in ld.so. Because that is what we want to > document in the ABI support. We do not want implementation specific details > in GNU-gABI. > > So inside ld.so, would it be what I showed in my earlier mail or would it be > something else? > > In my opinion, we have to bring that out in the ABI support proposal. > Without the actual signature/prototype, __gnu_mbind_setup sounds more like a > guideline and less like a ABI spec/standard. And in actual code (in ld.so), > it may eventually appear really different for each vendor/implementation. > > So, either keep it as a guideline or make it generic. IMHO, we can not keep > the following (original text) as generic: > > --- >> >> Run-time support >> >> int __gnu_mbind_setup (unsigned int type, void *addr, size_t length); > > --- > > -- > Supra > > > > On 07-Mar-2017 04:05 AM, H.J. Lu wrote: >> >> On Mon, Mar 6, 2017 at 5:25 AM, Suprateeka R Hegde >> wrote: >>> >>> On 04-Mar-2017 07:37 AM, Carlos O'Donell wrote: >>>> >>>> >>>> On 03/03/2017 11:00 AM, H.J. Lu wrote: >>>>> >>>>> >>>>> __gnu_mbind_setup is called from ld.so. Since there is only one ld.so, >>>>> it needs to know what to pass to __gnu_mbind_setup. Not all arguments >>>>> have to be used by all implementations nor all memory types. >>>> >>>> >>>> >>>> I think what Supra is suggesting is a pointer-to-implementation >>>> interface >>>> which would allow ld.so to pass completely different arguments to the >>>> library depending on what kind of memory is being defined by the sh_info >>>> value. It avoids needing to encode all the types in the API, and just >>>> uses an incomplete pointer to the type. >>> >>> >>> >>> Thats absolutely right. >>> >>> However, I am not suggesting one is better over the other. I just want to >>> get clarity on how the code looks like for different implementations. >>> >>> On 03-Mar-2017 09:30 PM, H.J. Lu wrote: >>>> >>>> >>>> __gnu_mbind_setup is called from ld.so. Since there is only one ld.so, >>>> it needs to know what to pass to __gnu_mbind_setup. >>> >>> >>> >>> So I want to know what is that ONE-FIXED-FORM of __gnu_mbind_setup being >>> called by ld.so. >>> >>>> Not all arguments >>>> have to be used by all implementations nor all memory types. >>> >>> >>> >>> I think I am still not getting this. Really sorry for that. Would it be >>> possible for you to write a small pseudo code that depicts how this >>> design >>> looks like for different implementations? >>> >> >> For my usage, I only want to know memory type, address and its size: >> >> #define _GNU_SOURCE >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> >> #ifdef LIBMBIND_DEBUG >> #include >> #endif >> >> /* High-Bandwidth Memory node mask. */ >> static struct bitmask *hbw_node_mask; >> >> /* Initialize High-Bandwidth Memory node mask. This must be called before >> __gnu_mbind_setup. */ >> static void >> __attribute__ ((used, constructor)) >> init_node_mask (void) >> { >> if (__get_cpuid_max (0, 0) == 0) >> return; >> >> /* Check if vendor is Intel. */ >> uint32_t eax, ebx, ecx, edx; >> __cpuid (0, eax, ebx, ecx, edx); >> if (!(ebx == 0x756e6547 && ecx == 0x6c65746e && edx == 0x49656e69)) >> return; >> >> /* Get family and model. */ >> uint32_t model; >> uint32_t family; >> __cpuid (1, eax, ebx, ecx, edx); >> family = (eax >> 8) & 0x0f; >> if (family != 0x6) >> return; >> model = (eax >> 4) & 0x0f; >> model += (eax >> 12) & 0xf0; >> >> /* Check for KNL and KNM. */ >> switch (model) >> { >> default: >> return; >> >> case 0x57: /* Knights Landing. */ >> case 0x85: /* Knights Mill. */ >> break; >> } >> >> /* Check if NUMA configuration is supported. */ >> int nodes_num = numa_num_configured_nodes (); >> if (nodes_num < 2) >> return; >> >> /* Get MCDRAM NUMA nodes. */ >> struct bitmask *node_mask = numa_allocate_nodemask (); >> struct bitmask *node_cpu = numa_allocate_cpumask (); >> >> int i; >> for (i = 0; i < nodes_num; i++) >> { >> numa_node_to_cpus (i, node_cpu); >> /* NUMA node without CPU is MCDRAM node. */ >> if (numa_bitmask_weight (node_cpu) == 0) >> numa_bitmask_setbit (node_mask, i); >> } >> >> if (numa_bitmask_weight (node_mask) != 0) >> { >> /* On Knights Landing and Knights Mill, MCDRAM is High-Bandwidth >> Memory. */ >> hbw_node_mask = node_mask; >> } >> else >> numa_bitmask_free (node_mask); >> numa_bitmask_free (node_cpu); >> } >> >> /* Support all different memory types. */ >> >> static int >> mbind_setup (unsigned int type, void *addr, size_t length, >> unsigned int mode, unsigned int flags) >> { >> int err = ENXIO; >> >> switch (type) >> { >> default: >> #ifdef LIBMBIND_DEBUG >> printf ("Unsupported mbind type %d: from %p of size %p\n", >> type, addr, length); >> #endif >> return EINVAL; >> >> case GNU_MBIND_HBW: >> if (hbw_node_mask) >> err = mbind (addr, length, mode, hbw_node_mask->maskp, >> hbw_node_mask->size, flags); >> break; >> } >> >> if (err < 0) >> err = errno; >> >> #ifdef LIBMBIND_DEBUG >> printf ("Mbind type %d: from %p of size %p\n", type, addr, length); >> #endif >> >> return err; >> } >> >> int >> __gnu_mbind_setup (unsigned int type, void *addr, size_t length) >> { >> return mbind_setup (type, addr, length, MPOL_BIND, MPOL_MF_MOVE); >> } >> >> If other memory types need additional information, they can be >> passed to __gnu_mbind_setup. We just need to know what >> information is needed. >> >> > Here is my glibc prototype. -- H.J. --001a113fe1ce5a4e3c054a4e38ef Content-Type: text/x-patch; charset=US-ASCII; name="glibc-mbind.patch" Content-Disposition: attachment; filename="glibc-mbind.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j02kkjry0 Content-length: 11432 ZGlmZiAtLWdpdCBhL2NzdS9pbml0LWZpcnN0LmMgYi9jc3UvaW5pdC1maXJz dC5jCmluZGV4IDA5OWU3YmMuLmM3YjhmMWYgMTAwNjQ0Ci0tLSBhL2NzdS9p bml0LWZpcnN0LmMKKysrIGIvY3N1L2luaXQtZmlyc3QuYwpAQCAtNzUsNiAr NzUsMTAgQEAgX2luaXQgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAq KmVudnApCiAgIC8qIEZpcnN0IHRoZSBpbml0aWFsaXphdGlvbiB3aGljaCBu b3JtYWxseSB3b3VsZCBiZSBkb25lIGJ5IHRoZQogICAgICBkeW5hbWljIGxp bmtlci4gICovCiAgIF9kbF9ub25fZHluYW1pY19pbml0ICgpOworCisjIGlm ZGVmIElOSVRfTUJJTkQKKyAgSU5JVF9NQklORCAoYXJndlswXSwgX2RsX3Bo ZHIsIF9kbF9waG51bSwgMCk7CisjIGVuZGlmCiAjZW5kaWYKIAogI2lmZGVm IFZEU09fU0VUVVAKZGlmZiAtLWdpdCBhL2VsZi9kbC1pbml0LmMgYi9lbGYv ZGwtaW5pdC5jCmluZGV4IDVjNWYzZGUuLjdiZDZhZjYgMTAwNjQ0Ci0tLSBh L2VsZi9kbC1pbml0LmMKKysrIGIvZWxmL2RsLWluaXQuYwpAQCAtMzUsNiAr MzUsMTQgQEAgY2FsbF9pbml0IChzdHJ1Y3QgbGlua19tYXAgKmwsIGludCBh cmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudikKICAgICAgZGVwZW5kZW5j eS4gICovCiAgIGwtPmxfaW5pdF9jYWxsZWQgPSAxOwogCisjaWZkZWYgSU5J VF9NQklORAorICBpZiAobC0+bF9waGRyKQorICAgIHsKKyAgICAgIGNvbnN0 IGNoYXIgKm5hbWUgPSBsLT5sX25hbWVbMF0gPT0gJ1wwJyA/IGFyZ3ZbMF0g OiBsLT5sX25hbWU7CisgICAgICBJTklUX01CSU5EIChuYW1lLCBsLT5sX3Bo ZHIsIGwtPmxfcGhudW0sIGwtPmxfYWRkcik7CisgICAgfQorI2VuZGlmCisK ICAgLyogQ2hlY2sgZm9yIG9iamVjdCB3aGljaCBjb25zdHJ1Y3RvcnMgd2Ug ZG8gbm90IHJ1biBoZXJlLiAgKi8KICAgaWYgKF9fYnVpbHRpbl9leHBlY3Qg KGwtPmxfbmFtZVswXSwgJ2EnKSA9PSAnXDAnCiAgICAgICAmJiBsLT5sX3R5 cGUgPT0gbHRfZXhlY3V0YWJsZSkKZGlmZiAtLWdpdCBhL2VsZi9kbC1zdXBw b3J0LmMgYi9lbGYvZGwtc3VwcG9ydC5jCmluZGV4IDNjNDZhN2EuLmFhMjQw YzQgMTAwNjQ0Ci0tLSBhL2VsZi9kbC1zdXBwb3J0LmMKKysrIGIvZWxmL2Rs LXN1cHBvcnQuYwpAQCAtMzg1LDMgKzM4NSw3IEBAIF9kbF9ub25fZHluYW1p Y19pbml0ICh2b2lkKQogI2lmZGVmIERMX1NZU0lORk9fSU1QTEVNRU5UQVRJ T04KIERMX1NZU0lORk9fSU1QTEVNRU5UQVRJT04KICNlbmRpZgorCisjaWZk ZWYgSU5JVF9NQklORAorIyBpbmNsdWRlIDxzZXR1cC1tYmluZC5jPgorI2Vu ZGlmCmRpZmYgLS1naXQgYS9lbGYvZWxmLmggYi9lbGYvZWxmLmgKaW5kZXgg NmQzYjM1Ni4uYTc0M2NkYSAxMDA2NDQKLS0tIGEvZWxmL2VsZi5oCisrKyBi L2VsZi9lbGYuaApAQCAtNzI4LDYgKzcyOCwxMSBAQCB0eXBlZGVmIHN0cnVj dAogI2RlZmluZSBQVF9MT1BST0MJMHg3MDAwMDAwMAkvKiBTdGFydCBvZiBw cm9jZXNzb3Itc3BlY2lmaWMgKi8KICNkZWZpbmUgUFRfSElQUk9DCTB4N2Zm ZmZmZmYJLyogRW5kIG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLwogCisvKiBH TlUgbWJpbmQgc2VnbWVudHMgKi8KKyNkZWZpbmUgUFRfR05VX01CSU5EX05V TQk0MDk2CisjZGVmaW5lIFBUX0dOVV9NQklORF9MTwkJMHg2NDc0ZTU1NQor I2RlZmluZSBQVF9HTlVfTUJJTkRfSEkJCShQVF9HTlVfTUJJTkRfTE8gKyBQ VF9HTlVfTUJJTkRfTlVNIC0gMSkKKwogLyogTGVnYWwgdmFsdWVzIGZvciBw X2ZsYWdzIChzZWdtZW50IGZsYWdzKS4gICovCiAKICNkZWZpbmUgUEZfWAkJ KDEgPDwgMCkJLyogU2VnbWVudCBpcyBleGVjdXRhYmxlICovCmRpZmYgLS1n aXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODYvbGRzb2RlZnMuaCBi L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Ni9sZHNvZGVmcy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMWMxZjgKLS0tIC9k ZXYvbnVsbAorKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODYvbGRz b2RlZnMuaApAQCAtMCwwICsxLDI2IEBACisvKiBSdW4tdGltZSBkeW5hbWlj IGxpbmtlciBkYXRhIHN0cnVjdHVyZXMgZm9yIGxvYWRlZCBFTEYgc2hhcmVk IG9iamVjdHMuICB4ODYKKyAgIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFy eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYg bm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKyNpZm5kZWYJX0xEU09ERUZTX0gKKworLyogR2V0IHRoZSByZWFs IGRlZmluaXRpb25zLiAgKi8KKyNpbmNsdWRlX25leHQgPGxkc29kZWZzLmg+ CisKKyNpbmNsdWRlIDxpbml0LW1iaW5kLmg+CisKKyNlbmRpZiAvKiBsZHNv ZGVmcy5oICovCmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZSBi L3N5c2RlcHMveDg2L01ha2VmaWxlCmluZGV4IDBkMDMyNmMyLi43ODg3YTNj IDEwMDY0NAotLS0gYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZQorKysgYi9zeXNk ZXBzL3g4Ni9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAgZ2VuLWFzLWNvbnN0 LWhlYWRlcnMgKz0gY3B1LWZlYXR1cmVzLW9mZnNldHMuc3ltCiBlbmRpZgog CiBpZmVxICgkKHN1YmRpciksZWxmKQotc3lzZGVwLWRsLXJvdXRpbmVzICs9 IGRsLWdldC1jcHUtZmVhdHVyZXMKK3N5c2RlcC1kbC1yb3V0aW5lcyArPSBk bC1nZXQtY3B1LWZlYXR1cmVzIHNldHVwLW1iaW5kCiAKIHRlc3RzICs9IHRz dC1nZXQtY3B1LWZlYXR1cmVzCiB0ZXN0cy1zdGF0aWMgKz0gdHN0LWdldC1j cHUtZmVhdHVyZXMtc3RhdGljCmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Ni9W ZXJzaW9ucyBiL3N5c2RlcHMveDg2L1ZlcnNpb25zCmluZGV4IGUwMjkyMzcu LmE2Mjc3NjIgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMveDg2L1ZlcnNpb25zCisr KyBiL3N5c2RlcHMveDg2L1ZlcnNpb25zCkBAIC0xLDUgKzEsOCBAQAogbGQg ewogICBHTElCQ19QUklWQVRFIHsKICAgICBfX2dldF9jcHVfZmVhdHVyZXM7 CisKKyAgICAjIFNldCB1cCBzcGVjaWFsIG1lbW9yeS4KKyAgICBfX2dudV9t YmluZF9zZXR1cDsKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYv aW5pdC1tYmluZC5oIGIvc3lzZGVwcy94ODYvaW5pdC1tYmluZC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODFmZGYKLS0tIC9k ZXYvbnVsbAorKysgYi9zeXNkZXBzL3g4Ni9pbml0LW1iaW5kLmgKQEAgLTAs MCArMSw0NiBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBD IExpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMTYgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAg TGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3Qs IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K KworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxpYmludGwuaD4K KyNpbmNsdWRlIDxzZXR1cC1tYmluZC5oPgorCitzdGF0aWMgaW5saW5lIHZv aWQKK2luaXRfbWJpbmQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBF bGZXKFBoZHIpICpwaGRyLCBzaXplX3QgcGhudW0sCisJICAgIEVsZlcoQWRk cikgbG9hZCkKK3sKKyAgRWxmVyhBZGRyKSBwYWdlc2l6ZSA9IEdMUk8oZGxf cGFnZXNpemUpOworICBmb3IgKDsgcGhudW07IHBobnVtLS0sIHBoZHIrKykK KyAgICBpZiAocGhkci0+cF90eXBlID49IFBUX0dOVV9NQklORF9MTworCSYm IHBoZHItPnBfdHlwZSA8PSBQVF9HTlVfTUJJTkRfSEkpCisgICAgICB7CisJ RWxmVyhBZGRyKSBzdGFydCA9IHBoZHItPnBfdmFkZHI7CisJaWYgKHBhZ2Vz aXplID4gcGhkci0+cF9hbGlnbgorCSAgICB8fCAoc3RhcnQgJiAocGFnZXNp emUgLSAxKSkgIT0gMCkKKwkgIF9kbF9mYXRhbF9wcmludGYgKE5fKCIlczog aW52YWxpZCBQVF9HTlVfTUJJTkQgc2VnbWVudFxuIiksCisJCQkgICAgZmls ZW5hbWUpOworCisJaW50IGVycm9yX2NvZGUgPSBfX2dudV9tYmluZF9zZXR1 cCAocGhkci0+cF90eXBlIC0gUFRfR05VX01CSU5EX0xPLAorCQkJCQkgICAg KHZvaWQgKikgKGxvYWQgKyBzdGFydCksCisJCQkJCSAgICBwaGRyLT5wX21l bXN6KTsKKwlpZiAoZXJyb3JfY29kZSA8IDApCisJICBfZGxfZmF0YWxfcHJp bnRmIChOXygiX19nbnVfbWJpbmRfc2V0dXAgZmFpbGVkIG9uIGZpbGUgJXM6 IGVycm9yIDB4JXhcbiIpLAorCQkJICAgIGZpbGVuYW1lLCAtZXJyb3JfY29k ZSk7CisgICAgICB9Cit9CisKKyNkZWZpbmUgSU5JVF9NQklORCBpbml0X21i aW5kCmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Ni9zZXR1cC1tYmluZC5jIGIv c3lzZGVwcy94ODYvc2V0dXAtbWJpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5kMjM1YjJlCi0tLSAvZGV2L251bGwKKysrIGIv c3lzZGVwcy94ODYvc2V0dXAtbWJpbmQuYwpAQCAtMCwwICsxLDI3IEBACisv KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAg IENvcHlyaWdodCAoQykgMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25n IHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKyNpbmNsdWRl IDxzZXR1cC1tYmluZC5oPgorCitpbnQgd2Vha19mdW5jdGlvbgorX19nbnVf bWJpbmRfc2V0dXAgKHVuc2lnbmVkIGludCB0eXBlIF9fYXR0cmlidXRlX18g KCh1bnVzZWQpKSwKKwkJICAgdm9pZCAqYWRkciBfX2F0dHJpYnV0ZV9fICgo dW51c2VkKSksCisJCSAgIHNpemVfdCBsZW5ndGggX19hdHRyaWJ1dGVfXyAo KHVudXNlZCkpKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3N5 c2RlcHMveDg2L3NldHVwLW1iaW5kLmggYi9zeXNkZXBzL3g4Ni9zZXR1cC1t YmluZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYy Njk3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNkZXBzL3g4Ni9zZXR1cC1t YmluZC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDE1 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGUgR05V IEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBH TlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGli cmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogU2V0 IHVwIHNwZWNpYWwgbWVtb3J5LiAgKi8KK2V4dGVybiBpbnQgd2Vha19mdW5j dGlvbiBfX2dudV9tYmluZF9zZXR1cCAodW5zaWduZWQgaW50LCB2b2lkICos IHNpemVfdCk7CmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Nl82NC9sb2NhbHBs dC5kYXRhIGIvc3lzZGVwcy94ODZfNjQvbG9jYWxwbHQuZGF0YQppbmRleCAw MTRhOWY0Li44ZjRkNDdjIDEwMDY0NAotLS0gYS9zeXNkZXBzL3g4Nl82NC9s b2NhbHBsdC5kYXRhCisrKyBiL3N5c2RlcHMveDg2XzY0L2xvY2FscGx0LmRh dGEKQEAgLTExLDYgKzExLDcgQEAgbGliYy5zbzogcmVhbGxvYyArIFJFTEEg Ul9YODZfNjRfR0xPQl9EQVQKIGxpYm0uc286IG1hdGhlcnIKICMgVGhlIG1h aW4gbWFsbG9jIGlzIGludGVycG9zZWQgaW50byB0aGUgZHluYW1pYyBsaW5r ZXIsIGZvcgogIyBhbGxvY2F0aW9ucyBhZnRlciB0aGUgaW5pdGlhbCBsaW5r ICh3aGVuIGRsb3BlbiBpcyB1c2VkKS4KK2xkLnNvOiBfX2dudV9tYmluZF9z ZXR1cCArIFJFTEEgUl9YODZfNjRfR0xPQl9EQVQKIGxkLnNvOiBtYWxsb2Mg KyBSRUxBIFJfWDg2XzY0X0dMT0JfREFUCiBsZC5zbzogY2FsbG9jICsgUkVM QSBSX1g4Nl82NF9HTE9CX0RBVAogbGQuc286IHJlYWxsb2MgKyBSRUxBIFJf WDg2XzY0X0dMT0JfREFUCg== --001a113fe1ce5a4e3c054a4e38ef--