Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S264968AbTGBMoe (ORCPT ); Wed, 2 Jul 2003 08:44:34 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S264970AbTGBMoe (ORCPT ); Wed, 2 Jul 2003 08:44:34 -0400 Received: from mta05-svc.ntlworld.com ([62.253.162.45]:55769 "EHLO mta05-svc.ntlworld.com") by vger.kernel.org with ESMTP id S264968AbTGBMoX (ORCPT ); Wed, 2 Jul 2003 08:44:23 -0400 X-Originating-IP: [62.254.0.11] From: To: Oleg Drokin CC: linux-kernel@vger.kernel.org Subject: Re: Re: [PATCH] BadRAM for 2.5.73-mm2 Date: Wed, 2 Jul 2003 12:58:46 +0000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=____1057150726708_l4Li4Ps8Mv" Message-Id: <20030702125846.JDAB28183.mta05-svc.ntlworld.com@[10.137.100.64]> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 35554 Lines: 526 This is a multi-part message in MIME format. ------=____1057150726708_l4Li4Ps8Mv Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit ============================================================ From: Oleg Drokin Date: 2003/07/02 Wed AM 06:23:24 GMT To: steven.newbury1@ntlworld.com CC: linux-kernel@vger.kernel.org Subject: Re: [PATCH] BadRAM for 2.5.73-mm2 Hello! On Wed, Jul 02, 2003 at 03:33:26AM +0000, steven.newbury1@ntlworld.com wrote: > It will probably apply cleanly to 2.5.73 as well but I haven't checked it > yet... This > It is based it on > http://rick.vanrein.org/linux/badram/software/BadRAM-2.4.20.1.patch and this patches both have a bug that effectively disables all highmem (if present) when badram patch is activated. I contacted Rick, but never got any answer back. (in fact I got an auto reply from some Debian bugtracking system, but that's about it). Corrected 2.4.21 version of the patch is available at http://linuxhacker.ru/patches/2.4.21-badram.diff The arch/i386/mm/init.c part: > +void __init one_highpage_init(struct page *page, int pfn, int bad_ppro, > + _Bool *bad) > { > + *bad = 0; > if (page_is_ram(pfn) && !(bad_ppro && page_kills_ppro(pfn))) { > ClearPageReserved(page); > set_bit(PG_highmem, &page->flags); > set_page_count(page, 1); > - __free_page(page); > +#ifdef CONFIG_BADRAM > + if (PageBad(page)) > + *bad = 1; > + else > +#else > + __free_page(page); > +#endif > totalhigh_pages++; should obviously get "#else" replaced with "#endif" and original "#endif" should be removed because otherwise all of the highmem pages are either bad or used right from the initialisation. (Yes, I have highmem (2G RAM) system with 2 bits bad and I am too lazy to to go to the store to replace the RAM modules, so I given a patch a try and discovered this problem (which is there for a long time it seems). I suspect that I am the only one who runs this patch on highmem system, though ;) ) Bye, Oleg ============================================================ Thanks Oleg! Strangely enough I had this right but then "fixed" it. I obviously had to manually apply the patch to arch/i386/mm/init.c since there are a few logic changes etc. I only re-inserted the bug when checking the changes I had made compared to the original patch and assumed that I had been wrong (I assumed the original patch worked ;-)). Attached is the new patch. ------=____1057150726708_l4Li4Ps8Mv Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name="BadRAM-2.5.73-mm2.1.diff" Content-Disposition: inline; filename="BadRAM-2.5.73-mm2.1.diff" ZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvQ1JFRElUUyBsaW51eC0yLjUvQ1JFRElUUwot LS0gbGludXgtMi41LjczLW1tMi9DUkVESVRTCTIwMDMtMDYtMTcgMDU6MjA6MDcuMDAwMDAw MDAwICswMTAwCisrKyBsaW51eC0yLjUvQ1JFRElUUwkyMDAzLTA3LTAyIDAxOjU4OjUyLjAw MDAwMDAwMCArMDEwMApAQCAtMjM2NSw2ICsyMzY1LDEyIEBACiBTOiA1NTEyNyBNYWluegog UzogR2VybWFueQogCitOOiBTdGV2ZW4gTmV3YnVyeQorRTogc19qX25ld2J1cnlAeWFob28u Y28udWsKK0Q6IEZvcndhcmQgcG9ydGVkIEJhZFJBTSBwYXRjaCB0byAyLjUuNzMgZnJvbSAy LjQuMjAKK1M6IERlcmJ5CitTOiBVbml0ZWQgS2luZ2RvbQorCiBOOiBEYXZpZCBDLiBOaWVt aQogRTogbmllbWlAdHV4Lm9yZwogVzogaHR0cDovL3d3dy50dXgub3JnL35uaWVtaS8KQEAg LTI2MDEsNiArMjYwNywxNCBAQAogUzogTWFsdmVybiwgUGVubnN5bHZhbmlhIDE5MzU1CiBT OiBVU0EKIAorTjogUmljayB2YW4gUmVpbgorRTogdmFucmVpbkBjcy51dHdlbnRlLm5sCitX OiBodHRwOi8vd3d3LmNzLnV0d2VudGUubmwvfnZhbnJlaW4KK0Q6IE1lbW9yeSwgdGhlIEJh ZFJBTSBzdWJzeXN0ZW0gZGVhbGluZyB3aXRoIHN0YXRpY2FsbHkgY2hhbGxhbmdlZCBSQU0g bW9kdWxlcy4KK1M6IEJpbm5lbmVzIDY3CitTOiA5NDA3IENYIEFzc2VuCitTOiBUaGUgTmV0 aGVybGFuZHMKKwogTjogU3RlZmFuIFJlaW5hdWVyCiBFOiBzdGVwYW5AbGludXguZGUKIFc6 IGh0dHA6Ly93d3cuZnJlaWJ1cmcubGludXguZGUvfnN0ZXBhbi8KQEAgLTI4MTksNiArMjgz MywxMyBAQAogRToKIEQ6IE1hY2ludG9zaCBJREUgRHJpdmVyCiAKK046IE5pY28gU2NobW9p Z2wKK0U6IG5pY29Ad3JpdGVtYWlsLmNvbQorVzogaHR0cDovL3dlYnJ1bS51bmktbWFubmhl aW0uZGUvbWF0aC9zY2htb2lnbC9saW51eC8KK0Q6IE1pZ3JhdGlvbiBvZiBCYWRSQU0gcGF0 Y2ggdG8gMi40LjQgc2VyaWVzICh3aXRoIFJpY2sgdmFuIFJlaW4pCitTOiBNYW5uaGVpbSwg QlcsIEdlcm1hbnkKK1A6IDIwNDcvMzhGQzlFMDMgIDVEIERCIDA5IEU0IDNGIEYzIENEIDA5 IDc1IDU5IC0gMTEgMTcgOUMgMDMgNDYgRTMgMzggRkMgOUUgMDMKKwogTjogUGV0ZXIgRGUg U2NocmlqdmVyCiBFOiBzdHVkMTFAY2M0Lmt1bGV1dmVuLmFjLmJlCiBEOiBNaXRzdW1pIENE LVJPTSBkcml2ZXIgcGF0Y2hlcyBNYXJjaCB2ZXJzaW9uCmRpZmYgLXVyTiBsaW51eC0yLjUu NzMtbW0yL0RvY3VtZW50YXRpb24vYmFkcmFtLnR4dCBsaW51eC0yLjUvRG9jdW1lbnRhdGlv bi9iYWRyYW0udHh0Ci0tLSBsaW51eC0yLjUuNzMtbW0yL0RvY3VtZW50YXRpb24vYmFkcmFt LnR4dAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi41 L0RvY3VtZW50YXRpb24vYmFkcmFtLnR4dAkyMDAzLTA3LTAxIDIwOjAyOjI3LjAwMDAwMDAw MCArMDEwMApAQCAtMCwwICsxLDI2NiBAQAorSU5GT1JNQVRJT04gT04gVVNJTkcgQkFEIFJB TSBNT0RVTEVTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50 cm9kdWN0aW9uCisJUkFNIGlzIGdldHRpbmcgc21hbGxlciBhbmQgc21hbGxlciwgYW5kIGFz IGEgcmVzdWx0LCBhbHNvIG1vcmUgYW5kIG1vcmUKKwl2dWxuZXJhYmxlLiBUaGlzIG1ha2Vz IHRoZSBtYW51ZmFjdHVyaW5nIG9mIGhhcmR3YXJlIG1vcmUgZXhwZW5zaXZlLAorCXNpbmNl IGFuIGV4Y2Vzc2l2ZSBhbW91bnQgb2YgUkFNIGNoaXBzIG11c3QgYmUgZGlzY2FyZGVkIG9u IGFjY291bnQgb2YKKwlhIHNpbmdsZSBjZWxsIHRoYXQgaXMgd3JvbmcuIFNpbWlsYXJseSwg c3RhdGljIGRpc2NoYXJnZSBtYXkgZGFtYWdlIGEKKwlSQU0gbW9kdWxlIGZvcmV2ZXIsIHdo aWNoIGlzIHVzdWFsbHkgcmVtZWRpZWQgYnkgcmVwbGFjaW5nIGl0CisJZW50aXJlbHkuCisK KwlUaGlzIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZSBCYWRSQU0gY29kZSBzaG93czogQnkg aW5mb3JtaW5nIHRoZSBMaW51eAorCWtlcm5lbCB3aGljaCBhZGRyZXNzZXMgaW4gYSBSQU0g YXJlIGRhbWFnZWQsIHRoZSBrZXJuZWwgc2ltcGx5IGF2b2lkcworCWV2ZXIgYWxsb2NhdGlu ZyBzdWNoIGFkZHJlc3NlcyBidXQgbWFrZXMgYWxsIHRoZSByZXN0IGF2YWlsYWJsZS4KKwor UmVhc29ucyBmb3IgdGhpcyBmZWF0dXJlCisJVGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkg dGhpcyBrZXJuZWwgZmVhdHVyZSBpcyB1c2VmdWw6CisJLSBDaGlwIG1hbnVmYWN0dXJlIGlz IHJlc291cmNlIGludGVuc2l2ZTsgd2FzdGUgbGVzcyBhbmQgc2xlZXAgYmV0dGVyCisJLSBJ dCdzIGFub3RoZXIgY2hhbmNlIHRvIHByb21vdGUgTGludXggYXMgInRoZSBmbGV4aWJsZSBP UyIKKwktIFNvbWUgbGFwdG9wcyBoYXZlIHRoZWlyIFJBTSBzb2xkZXJlZCBpbi4uLiBhbmQg dGhlbiBpdCBmYWlscyEKKwktIEl0J3MgcGxhaW4gY29vbCA7LSkKKworUnVubmluZyBleGFt cGxlCisJVG8gcnVuIHRoaXMgcHJvamVjdCwgSSB3YXMgZ2l2ZW4gdHdvIERJTU1zLCAzMiBN QiBlYWNoLiBPbmUsIHRoYXQgd2UKKwlzaGFsbCB1c2UgYXMgYSBydW5uaW5nIGV4YW1wbGUg aW4gdGhpcyB0ZXh0LCBjb250YWluZWQgNTEyIGZhdWx0eSBiaXRzLAorCXNwcmVhZCBvdmVy IDEvNCBvZiB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHJlZ3VsYXIgcGF0dGVybi4gU29tZSB0 cmlja3MKKwl3aXRoIGEgUkFNIHRlc3RlciBhbmQgYSBmZXcgYmluYXJ5IGNhbGN1bGF0aW9u cyB3ZXJlIHN1ZmZpY2llbnQgdG8KKwl3cml0ZSB0aGVzZSBmYXVsdHMgZG93biBpbiAyIGxv bmd3b3JkIG51bWJlcnMuCisKKwlUaGUga2VybmVsIHJlY29nbmlzZWQgdGhlIGNvcnJlY3Qg bnVtYmVyIG9mIHBhZ2VzIHdpdGggZmF1bHRzIGFuZCBkaWQKKwlub3QgZ2l2ZSB0aGVtIG91 dCBmb3IgYWxsb2NhdGlvbi4gVGhlIGFsbG9jYXRpb24gcm91dGluZXMgY291bGQKKwl0aGVy ZWZvcmUgcHJvZ3Jlc3MgYXMgbm9ybWFsbHksIHdpdGhvdXQgYW55IGFkYXB0aW9uLgorCVNv LCBJIGdhaW5lZCAzMCBNQiBvZiBESU1NIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJl ZW4gdGhyb3duCisJYXdheS4gQWZ0ZXIgYm9vdGluZyB0aGUga2VybmVsLCB0aGUga2VybmVs IGJlaGF2ZWQgZXhhY3RseSBhcyBpdAorCWFsd2F5cyBoYWQuCisKK0luaXRpYWwgY2hlY2tz CisJSWYgeW91IGV4cGVyaWVuY2UgUkFNIHRyb3VibGUsIGZpcnN0IHJlYWQgL3Vzci9zcmMv bGludXgvbWVtb3J5LnR4dAorCWFuZCB0cnkgb3V0IHRoZSBtZW09NE0gdHJpY2sgdG8gc2Vl IGlmIGF0IGxlYXN0IHNvbWUgaW5pdGlhbCBwYXJ0cworCW9mIHlvdXIgUkFNIHdvcmsgd2Vs bC4gVGhlIEJhZFJBTSByb3V0aW5lcyBoYWx0IHRoZSBrZXJuZWwgaW4gcGFuaWMKKwlpZiB0 aGUgcmVzZXJ2ZWQgYXJlYSBvZiBtZW1vcnkgKGNvbnRhaW5pbmcga2VybmVsIHN0dWZmKSBj b250YWlucworCWEgZmF1bHR5IGFkZHJlc3MuCisKK1J1bm5pbmcgYSBSQU0gY2hlY2tlcgor CVRoZSBtZW1vcnkgY2hlY2tlciBpcyBub3QgYnVpbHQgaW50byB0aGUga2VybmVsLCB0byBh dm9pZCBkZWxheXMgYXQKKwlydW50aW1lLiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyB0 aGF0IG1heSBiZSBjYXVzZWQgYnkgUkFNLCBydW4KKwlhIGdvb2QgUkFNIGNoZWNrZXIsIHN1 Y2ggYXMKKwkJaHR0cDovL3JlYWxpdHkuc2dpLmNvbS9jYnJhZHlfZGVudmVyL21lbXRlc3Q4 NgorCVRoZSBvdXRwdXQgb2YgYSBSQU0gY2hlY2tlciBwcm92aWRlcyBhZGRyZXNzZXMgdGhh dCB3ZW50IHdyb25nLiBJbgorCXRoZSAzMiBNQiBjaGlwIHdpdGggNTEyIGZhdWx0eSBiaXRz IG1lbnRpb25lZCBhYm92ZSwgdGhlIGVycm9ycyB3ZXJlCisJZm91bmQgaW4gdGhlIDhNQi0x Nk1CIHJhbmdlICh0aGUgRElNTSB3YXMgaW4gc2xvdCAjMCkgYXQgYWRkcmVzc2VzCisJCXh4 eDQyZjQKKwkJeHh4NjJmNAorCQl4eHhjMmY0CisJCXh4eGUyZjQKKwlhbmQgdGhlIGVycm9y IHdhcyBhICJzdGlja3kgMSBiaXQiLCBhIG1lbW9yeSBiaXQgdGhhdCBzdGF5ZWQgIjEiIG5v CisJbWF0dGVyIHdoYXQgd2FzIHdyaXR0ZW4gdG8gaXQuIFRoZSByZWd1bGFyaXR5IG9mIHRo aXMgcGF0dGVybgorCXN1Z2dlc3RzIHRoZSBkZWF0aCBvZiBhIGJ1ZmZlciBhdCB0aGUgb3V0 cHV0IHN0YWdlcyBvZiBhIHJvdyBvbiBvbmUgb2YKKwl0aGUgY2hpcHMuIEkgZXhwZWN0IHN1 Y2ggcmVndWxhcml0eSB0byBiZSBjb21tb25wbGFjZS4gRmluZGluZyB0aGlzCisJcmVndWxh cml0eSBjdXJyZW50bHkgaXMgaHVtYW4gZWZmb3J0LCBidXQgaXQgc2hvdWxkIG5vdCBiZSBo YXJkIHRvCisJYWx0ZXIgYSBSQU0gY2hlY2tlciB0byBjYXB0dXJlIGl0IGluIHNvbWUgc29y dCBvZiBwYXR0ZXJuLCBwb3NzaWJseQorCXRoZSBCYWRSQU0gcGF0dGVybnMgZGVzY3JpYmVk IGJlbG93LgorCisJQnkgdGhlIHdheSwgaWYgeW91IG1hbmFnZSB0byBnZXQgaG9sZCBvZiBt ZW10ZXN0ODYgdmVyc2lvbiAyLjMgb3IKKwliZXlvbmQsIHlvdSBjYW4gY29uZmlndXJlIHRo ZSBwcmludGluZyBtb2RlIHRvIHByb2R1Y2UgQmFkUkFNIHBhdHRlcm5zLAorCXdoaWNoIGZp bmQgb3V0IGV4YWN0bHkgd2hhdCB5b3UgbXVzdCBlbnRlciBvbiB0aGUgTElMTzogY29tbWFu ZGxpbmUsCisJZXhjZXB0IHRoYXQgeW91IHNob3VsZG4ndCBtZW50aW9uIHRoZSBhZGRlZCBz cGFjaW5nLiBUaGF0IG1lYW5zIHRoYXQKKwl5b3UgY2FuIHNraXAgdGhlIGZvbGxvd2luZyBz dGVwLCB3aGljaCBzYXZlcyB5b3UgYSAqbG90KiBvZiB3b3JrLgorCisJQWxzbyBieSB0aGUg d2F5LCBpZiB5b3VyIG1hY2hpbmUgaGFzIHRoZSBJU0EgbWVtb3J5IGdhcCBpbiB0aGUgMTVN LTE2TQorCXJhbmdlIHVuc3RvcHBhYmxlLCBMaW51eCBjYW4gZ2V0IGluIHRyb3VibGUuIE9u ZSB3YXkgb2YgaGFuZGxpbmcgdGhhdAorCXNpdHVhdGlvbiBpcyBieSBzcGVjaWZ5aW5nIHRo ZSB0b3RhbCBtZW1vcnkgc2l6ZSB0byBMaW51eCB3aXRoIGEgYm9vdAorCXBhcmFtZXRlciBt ZW09Li4uIGFuZCB0aGVuIHRvIHRlbGwgaXQgdG8gdHJlYXQgdGhlIDE1TS0xNk0gcmFuZ2Ug YXMKKwlmYXVsdHkgd2l0aCBhbiBhZGRpdGlvbmFsIGJvb3QgcGFyYW1ldGVyLCBmb3IgaW5z dGFuY2U6CisJCW1lbT0yNE0gYmFkcmFtPTB4MDBmMDAwMDAsMHhmZmYwMDAwMAorCWlmIHlv dSBpbnN0YWxsZWQgMjRNQiBvZiBSQU0gaW4gdG90YWwuCisKK0NhcHR1cmluZyBlcnJvcnMg aW4gYSBwYXR0ZXJuCisJSW5zdGVhZCBvZiBtYW51YWxseSBwcm92aWRpbmcgYWxsIDUxMiBl cnJvcnMgdG8gdGhlIGtlcm5lbCwgaXQncyBuaWNlcgorCXRvIGdlbmVyYXRlIGEgcGF0dGVy bi4gU2luY2UgdGhlIHJlZ3VsYXJpdHkgaXMgYmFzZWQgb24gYWRkcmVzcyBkZWNvZGluZwor CXNvZnR3YXJlLCB3aGljaCBnZW5lcmFsbHkgdGFrZXMgY2VydGFpbiBiaXRzIGludG8gYWNj b3VudCBhbmQgaWdub3JlcworCW90aGVycywgd2Ugc2hhbGwgcHJvdmlkZSBhIGZhdWx0eSBh ZGRyZXNzIEYsIHRvZ2V0aGVyIHdpdGggYSBiaXQgbWFzayBNCisJdGhhdCBzcGVjaWZpZXMg d2hpY2ggYml0cyBtdXN0IGJlIGVxdWFsIHRvIEYuIEluIEMgY29kZSwgYW4gYWRkcmVzcyBB CisJaXMgZmF1bHR5IGlmIGFuZCBvbmx5IGlmCisJCShGICYgTSkgPT0gKEEgJiBNKQorCW9y IGFsdGVybmF0ZWx5IChjbG9zZXIgdG8gYSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbik6CisJ CX4oKEYgXiBBKSAmIE0pCisJSW4gdGhlIGV4YW1wbGUgMzIgTUIgY2hpcCwgd2UgaGFkIHRo ZSBmYXVsdHkgYWRkcmVzc2VzIGluIDhNQi0xNk1COgorCQl4eHg0MmY0ICAgICAgICAgLi4u LjAxMDAuLi4uCisJCXh4eDYyZjQgICAgICAgICAuLi4uMDExMC4uLi4KKwkJeHh4YzJmNCAg ICAgICAgIC4uLi4xMTAwLi4uLgorCQl4eHhlMmY0ICAgICAgICAgLi4uLjExMTAuLi4uCisJ VGhlIHNlY29uZCBjb2x1bW4gcmVwcmVzZW50cyB0aGUgYWx0ZXJuYXRpbmcgaGV4IGRpZ2l0 IGluIGJpbmFyeSBmb3JtLgorCUFwcGVyYW50bHksIHRoZSBmaXJzdCBhbmQgb25lLWJ1dCBs YXN0IGJpbmFyeSBkaWdpdCBjYW4gYmUgYW55dGhpbmcsCisJc28gdGhlIGJpbmFyeSBtYXNr IGZvciB0aGF0IHBhcnQgaXMgMDEwMS4gVGhlIG1hc2sgZm9yIHRoZSBwYXJ0IGFmdGVyCisJ dGhpcyBpcyAweGZmZiwgYW5kIHRoZSBwYXJ0IGJlZm9yZSBzaG91bGQgc2VsZWN0IGFueXRo aW5nIGluIHRoZSByYW5nZQorCThNQi0xNk1CLCBvciAweDAwODAwMDAwLTB4MDEwMDAwMDA7 IHRoaXMgaXMgZG9uZSB3aXRoIGEgYml0bWFzaworCTB4ZmY4MHh4eHguIENvbWJpbmluZyB0 aGVzZSBwYXJ0aWFsIG1hc2tzLCB3ZSBnZXQ6CisJCUY9MHgwMDgwNDJmNCAgICBNPTB4ZmY4 MDVmZmYKKwlUaGF0IGNvdmVycyBldmVyeXRoaW5nIGZvciB0aGlzIERJTU07IGZvciBtb3Jl IGNvbXBsaWNhdGVkIGZhaWxpbmcKKwlESU1Ncywgb3IgZm9yIGEgY29tYmluYXRpb24gb2Yg bXVsdGlwbGUgZmFpbGluZyBESU1NcywgaXQgY2FuIGJlCisJbmVjZXNzYXJ5IHRvIHNldCB1 cCBhIG51bWJlciBvZiBzdWNoIEYvTSBwYWlycy4KKworUmVib290aW5nIExpbnV4CisJTm93 IHRoYXQgdGhlc2UgcGF0dGVybnMgYXJlIGtub3duIChhbmQgZG91YmxlLWNoZWNrZWQsIHRo ZSBjYWxjdWxhdGlvbnMKKwlhcmUgaGlnaGx5IGVycm9yLXByb25lLi4uIGl0IHdvdWxkIGJl IG5lYXQgdG8gdGVzdCB0aGVtIGluIHRoZSBSQU0KKwljaGVja2VyLi4uKSB3ZSBzaW1wbHkg cmVzdGFydCBMaW51eCB3aXRoIHRoZXNlIEYvTSBwYWlycyBhcyBhIHBhcmFtZXRlci4KKwlJ ZiB5b3Ugbm9ybWFsbHkgYm9vdCBhcyBmb2xsb3dzOgorCSAgICAgICBMSUxPOiBsaW51eAor CXlvdSBzaG91bGQgbm93IGJvb3Qgd2l0aAorCSAgICAgICBMSUxPOiBsaW51eCBiYWRyYW09 MHgwMDgwNDJmNCwweGZmODA1ZmZmCisJb3IgcGVyaGFwcyBieSBtZW50aW9uaW5nIG1vcmUg Ri9NIHBhaXJzIGluIGFuIG9yZGVyIEYwLE0wLEYxLE0xLC4uLgorCVdoZW4geW91IHByb3Zp ZGUgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMgdG8gYmFkcmFtLCB0aGUgZGVmYXVsdCBt YXNrCisJMHhmZmZmZmZmZiAob25seSBvbmUgYWRkcmVzcyBtYXRjaGVkKSBpcyBhcHBsaWVk IHRvIHRoZSBwYXR0ZXJuLgorCisJQmV3YXJlIG9mIHRoZSBjb21tYW5kbGluZSBsZW5ndGgu IEF0IGxlYXN0IHVwIHRvIExJTE8gdmVyc2lvbiAwLjIxLAorCXRoZSBjb21tYW5kbGluZSBp cyBjdXQgb2ZmIGFmdGVyIHRoZSA3OHRoIGNoYXJhY3RlcjsgbGF0ZXIgdmVyc2lvbnMKKwlt YXkgZ28gYXMgZmFyIGFzIHRoZSBrZXJuZWwgZ29lcywgbmFtZWx5IDI1NSBjaGFyYWN0ZXJz LiBJbiBubyB3YXkgaXMKKwlpdCBwb3NzaWJsZSB0byBlbnRlciBtb3JlIHRoYW4gMTAgbnVt YmVycyB0byB0aGUgYmFkcmFtIGJvb3Qgb3B0aW9uLgorCisJV2hlbiB0aGUga2VybmVsIG5v dyBib290cywgaXQgc2hvdWxkIG5vdCBnaXZlIGFueSB0cm91YmxlIHdpdGggUkFNLgorCU1p bmQgeW91LCB0aGlzIGlzIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGtlcm5lbCBh bmQgaXRzIGRhdGEKKwlzdG9yYWdlIGRvIG5vdCBvdmVybGFwIGFuIGVycm9uZW91cyBwYXJ0 LiBJZiB0aGlzIGhhcHBlbnMsIGFuZCB0aGUKKwlrZXJuZWwgZG9lcyBub3QgY2hva2Ugb24g aXQgcmlnaHQgYXdheSwgaXQgd2lsbCBzdG9wIHdpdGggYSBwYW5pYy4KKwlZb3Ugd2lsbCBu ZWVkIHRvIHByb3ZpZGUgYSBSQU0gd2hlcmUgdGhlIGluaXRpYWwsIHNheSAyTUIsIGlzIGZh dWx0bGVzcy4KKworCU5vdyBsb29rIHVwIHlvdXIgbWVtb3J5IHN0YXR1cyB3aXRoCisJICAg ICAgIGRtZXNnIHwgZ3JlcCBeTWVtb3J5OgorCXdoaWNoIHByaW50cyBhIHNpbmdsZSBsaW5l IHdpdGggaW5mb3JtYXRpb24gbGlrZQorCQlNZW1vcnk6IDE1ODUyNGsvMTYzODQwayBhdmFp bGFibGUKKwkJCSg5NDBrIGtlcm5lbCBjb2RlLAorCQkJNDEyayByZXNlcnZlZCwKKwkJCTE4 NTZrIGRhdGEsCisJCQk2MGsgaW5pdCwKKwkJCTBrIGhpZ2htZW0sCisJCQkyMDQ4ayBCYWRS QU0pCisJVGhlIGxhdHRlciBlbnRyeSwgdGhlIGJhZHJhbSwgaXMgMjA0OGsgdG8gcmVwcmVz ZW50IHRoZSBsb3NzIG9mIDJNQgorCW9mIGdlbmVyYWwgcHVycG9zZSBSQU0gZHVlIHRvIHRo ZSBlcnJvcnMuIE9yLCBwb3NpdGl2ZWx5IHJlcGhyYXNlZCwKKwlpbnN0ZWFkIG9mIHRocm93 aW5nIG91dCAzMk1CIGFzIHVzZWxlc3MsIHlvdSBvbmx5IHRocm93IG91dCAyTUIuCisKKwlJ ZiB0aGUgc3lzdGVtIGlzIHN0YWJsZSAodHJ5IGNvbXBpbGluZyBhIGZldyBrZXJuZWxzLCBh bmQgZG8gYSBmZXcKKwlmaW5kcyBpbiAvIG9yIHNvKSB5b3UgbWF5IGFkZCB0aGUgYm9vdCBw YXJhbWV0ZXIgdG8gL2V0Yy9saWxvLmNvbmYKKwlhcyBhIGxpbmUgdG8gX2FsbF8gdGhlIGtl cm5lbHMgdGhhdCBoYW5kbGUgdGhpcyB0cm91YmxlIHdpdGggYSBsaW5lCisJCWFwcGVuZD0i YmFkcmFtPTB4MDA4MDQyZjQsMHhmZjgwNWZmZiIKKwlhZnRlciB3aGljaCB5b3UgcnVuICJs aWxvIi4KKwlXYXJuaW5nOiBEb24ndCBleHBlcmltZW50IHdpdGggdGhlc2Ugc2V0dGluZ3Mg b24geW91ciBvbmx5IGJvb3QgaW1hZ2UuCisJSWYgdGhlIEJhZFJBTSBvdmVybGF5cyBrZXJu ZWwgY29kZSwgZGF0YSwgaW5pdCwgb3Igb3RoZXIgcmVzZXJ2ZWQKKwltZW1vcnksIHRoZSBr ZXJuZWwgd2lsbCBoYWx0IGluIHBhbmljLiBUcnkgc2V0dGluZ3Mgb24gYSB0ZXN0IGJvb3QK KwlpbWFnZSBmaXJzdCwgYW5kIGlmIHlvdSBnZXQgYSBwYW5pYyB5b3Ugc2hvdWxkIGNoYW5n ZSB0aGUgb3JkZXIgb2YKKwl5b3VyIERJTU1zIFt3aGljaCBtYXkgaW52b2x2ZSBidXlpbmcg YSBuZXcgb25lIGp1c3QgdG8gYmUgYWJsZSB0bworCWNoYW5nZSB0aGUgb3JkZXJdLgorCisJ WW91IGFyZSBhbGxvd2VkIHRvIGVudGVyIGFueSBudW1iZXIgb2YgQmFkUkFNIHBhdHRlcm5z IGluIGFsbCB0aGUKKwlwbGFjZXMgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUuIFRoZXkgd2ls bCBhbGwgYXBwbHkuIEl0IGlzIGV2ZW4KKwlwb3NzaWJsZSB0byBtZW50aW9uIHNldmVyYWwg QmFkUkFNIHBhdHRlcm5zIGluIGEgc2luZ2xlIHBsYWNlLiBUaGUKKwljb21wbGV0aW9uIG9m IGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzIHdpdGggdGhlIGRlZmF1bHQgbWFzayBpcwor CWRvbmUgc2VwYXJhdGVseSBmb3IgZWFjaCBiYWRyYW09Li4uIG9wdGlvbi4KKworS2VybmVs IEN1c3RvbWlzYXRpb24KKwlTb21lIHBlb3BsZSBwcmVmZXIgdG8gZW50ZXIgdGhlaXIgYmFk cmFtIHBhdHRlcm5zIGluIHRoZSBrZXJuZWwsIGFuZAorCXRoaXMgaXMgYWxzbyBwb3NzaWJs ZS4gSW4gbW0vcGFnZV9hbGxvYy5jIHRoZXJlIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkCisJ bG9uZyBpbnRlZ2VycyBpbnRvIHdoaWNoIHRoZSBwYXJhbWV0ZXJzIGNhbiBiZSBlbnRlcmVk LCBwcmVmaXhlZCB3aXRoCisJdGhlIG51bWJlciBvZiBpbnRlZ2VycyAodHdpY2UgdGhlIG51 bWJlciBvZiBwYXR0ZXJucykuIFRoZSBhcnJheSBpcworCW5hbWVkIGJhZHJhbV9jdXN0b20g YW5kIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEJhZFJBTSBsaXN0IHdoZW5ldmVyIGFuCisJ b3B0aW9uICdiYWRyYW0nIGlzIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kbGluZSB3aGVuIGJv b3RpbmcsIGVhbGFuY2luZywgS2Fub2ogU2FyY2FyLCBTR0ksIEphbiAyMDAwCiAgKiAgUGVy IGNwdSBob3QvY29sZCBwYWdlIGxpc3RzLCBidWxrIGFsbG9jYXRpb24sIE1hcnRpbiBKLiBC bGlnaCwgU2VwdCAyMDAyCiAgKiAgICAgICAgICAobG90cyBvZiBiaXRzIGJvcnJvd2VkIGZy b20gSW5nbyBNb2xuYXIgJiBBbmRyZXcgTW9ydG9uKQorICogIEJhZFJBTSBoYW5kbGluZywg UmljayB2YW4gUmVpbiwgRmViIDIwMDEKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmln Lmg+CkBAIC0xNjE1LDMgKzE2MTYsOTYgQEAKIAlzZXR1cF9wZXJfem9uZV9wYWdlc19taW4o KTsKIAlyZXR1cm4gMDsKIH0KKworCisjaWZkZWYgQ09ORklHX0JBRFJBTQorCisvKiBHaXZl biBhIHBvaW50ZWQtYXQgYWRkcmVzcyBhbmQgYSBtYXNrLCBpbmNyZW1lbnQgdGhlIHBhZ2Ug c28gdGhhdCB0aGUKKyAqIG1hc2sgaGlkZXMgdGhlIGluY3JlbWVudC4gUmV0dXJuIDAgaWYg bm8gaW5jcmVtZW50IGlzIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBuZXh0 X21hc2tlZF9hZGRyZXNzICh1bnNpZ25lZCBsb25nICphZGRycCwgdW5zaWduZWQgbG9uZyBt YXNrKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGluYz0xOworICAgICAgICB1bnNpZ25l ZCBsb25nIG5ld3ZhbCA9ICphZGRycDsKKwl3aGlsZSAoaW5jICYgbWFzaykKKwkJaW5jICs9 IGluYzsKKyAgICAgICAgd2hpbGUgKGluYyAhPSAwKSB7CisJCW5ld3ZhbCArPSBpbmM7CisJ CW5ld3ZhbCAmPSB+bWFzazsKKwkJbmV3dmFsIHw9ICgoKmFkZHJwKSAmIG1hc2spOworCQlp ZiAobmV3dmFsID4gKmFkZHJwKSB7CisJCQkqYWRkcnAgPSBuZXd2YWw7CisJCQlyZXR1cm4g MTsKKwkJfQorCQlkbyB7CisJCQlpbmMgKz0gaW5jOworCQl9IHdoaWxlIChpbmMgJiB+bWFz ayk7CisJCXdoaWxlIChpbmMgJiBtYXNrKQorCQkJaW5jICs9IGluYzsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gMDsKK30KKworCit2b2lkIF9faW5pdCBiYWRyYW1fbWFya3BhZ2Vz IChpbnQgYXJnYywgdW5zaWduZWQgbG9uZyAqYXJndikgeworCXVuc2lnbmVkIGxvbmcgYWRk ciwgbWFzazsKKyAgICAgICAgd2hpbGUgKGFyZ2MtLSA+IDApIHsKKyAgICAgICAgICAgICAg ICBhZGRyID0gKmFyZ3YrKzsKKyAgICAgICAgICAgICAgICBtYXNrIHBybzsKIApAQCAtNDY3 LDEzICs0NzksMTcgQEAKIAl0b3RhbHJhbV9wYWdlcyArPSBfX2ZyZWVfYWxsX2Jvb3RtZW0o KTsKIAogCXJlc2VydmVkcGFnZXMgPSAwOworCWJhZHBhZ2VzID0gMDsKIAlmb3IgKHRtcCA9 IDA7IHRtcCA8IG1heF9sb3dfcGZuOyB0bXArKykKIAkJLyoKLQkJICogT25seSBjb3VudCBy ZXNlcnZlZCBSQU0gcGFnZXMKKwkJICogT25seSBjb3VudCByZXNlcnZlZCBhbmQgYmFkIFJB TSBwYWdlcwogCQkgKi8KIAkJCisJTm90ZSB0aGF0IHRoaXMgc2NoZW1lIGhhcyBkZWxpYnBm bikJCSgocGZuKSA8IG1heF9tYXBucikKICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01F TSAqLwogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2Fk ZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBoeXNfdG9fcGFnZSh4KQkJKG1lbV9tYXAg KyAoKHVuc2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpKQogCiAjZGVmaW5lIHZpcnRf YWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQp CiAKZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jIGxpbnV4LTIuNS9t bS9ib290bWVtLmMKLS0tIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jCTIwMDMtMDYt MTcgMDU6MTk6NDcuMDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjUvbW0vYm9vdG1lbS5j CTIwMDMtMDctMDEgMjA6NDI6MjUuMDAwMDAwMDAwICswMTAwCkBAIC0yNzQsOCArMjc0LDE3 IEBACiAJCQkJaWYgKHYgJiBtKSB7CiAJCQkJCWNvdW50Kys7CiAJCQkJCUNsZWFyUGFnZVJl c2VydmVkKHBhZ2UpOworCisjaWZkZWYgQ09ORklHX0JBRFJBTQorCQkJCQlpZiAoIVBhZ2VC YWQocGFnZSkpIHsKKwkJCQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJCQkJX19m cmVlX3BhZ2UocGFnZSk7CisJCQkJCX0KKyNlbHNlCisKIAkJCQkJc2V0X3BhZ2VfY291bnQo cGFnZSwgMSk7CiAJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworI2VuZGlmCiAJCQkJfQogCQkJ fQogCQl9IGVsc2UgewpAQCAtMjk0LDggKzMwMywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCAo KGJkYXRhLT5ub2RlX2xvd19wZm4tKGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQgPj4gUEFHRV9T SElGVCkpLzggKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOyBpKysscGFnZSsrKSB7CiAJCWNv dW50Kys7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChw YWdlLCAxKTsKKworI2lmZGVmIENPTkZJR19CQURSQU0KKwkJaWYgKCFQYWdlQmFkKHBhZ2Up KSB7CisJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCV9fZnJlZV9wYWdlKHBhZ2Up OworCQl9CisjZWxzZQorIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJCV9fZnJlZV9w YWdlKHBhZ2UpOworI2VuZGlmCiAJfQogCXRvdGFsICs9IGNvdW50OwogCWJkYXRhLT5ub2Rl X2Jvb3RtZW1fbWFwID0gTlVMTDsKZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vcGFn ZV9hbGxvYy5jIGxpbnV4LTIuNS9tbS9wYWdlX2FsbG9jLmMKLS0tIGxpbnV4LTIuNS43My1t bTIvbW0vcGFnZV9hbGxvYy5jCTIwMDMtMDctMDEgMTk6NTk6NTcuMDAwMDAwMDAwICswMTAw CisrKyBsaW51eC0yLjUvbW0vcGFnZV9hbGxvYy5jCTIwMDMtMDctMDIgMDE6MTI6MDkuMDAw MDAwMDAwICsgYSBwcmVmZXJlbmNlIGZvciBCYWRSQU0gcGFnZXMsIGFucGZuKQkJKChwZm4p IDwgbWF4X21hcG5yKQogI2VuZGlmIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCiAjZGVm aW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFH RV9TSElGVCkKKyNkZWZpbmUgcGh5c190b19wYWdlKHgpCQkobWVtX21hcCArICgodW5zaWdu ZWQgbG9uZykoeCkgPj4gUEFHRV9TSElGVCkpCiAKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlk KGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKIApkaWZmIC11 ck4gbGludXgtMi41LjczLW1tMi9tbS9ib290bWVtLmMgbGludXgtMi41L21tL2Jvb3RtZW0u YwotLS0gbGludXgtMi41LjczLW1tMi9tbS9ib290bWVtLmMJMjAwMy0wNi0xNyAwNToxOTo0 Ny4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4LTIuNS9tbS9ib290bWVtLmMJMjAwMy0wNy0w MSAyMDo0MjoyNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTI3NCw4ICsyNzQsMTcgQEAKIAkJCQlp ZiAodiAmIG0pIHsKIAkJCQkJY291bnQrKzsKIAkJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFn ZSk7CisKKyNpZmRlZiBDT05GSUdfQkFEUkFNCisJCQkJCWlmICghUGFnZUJhZChwYWdlKSkg eworCQkJCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCQkJCQlfX2ZyZWVfcGFnZShw YWdlKTsKKwkJCQkJfQorI2Vsc2UKKwogCQkJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsK IAkJCQkJX19mcmVlX3BhZ2UocGFnZSk7CisjZW5kaWYKIAkJCQl9CiAJCQl9CiAJCX0gZWxz ZSB7CkBAIC0yOTQsOCArMzAzLDE2IEBACiAJZm9yIChpID0gMDsgaSA8ICgoYmRhdGEtPm5v ZGVfbG93X3Bmbi0oYmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PiBQQUdFX1NISUZUKSkvOCAr IFBBR0VfU0laRS0xKS9QQUdFX1NJWkU7IGkrKyxwYWdlKyspIHsKIAkJY291bnQrKzsKIAkJ Q2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwor CisjaWZkZWYgQ09ORklHX0JBRFJBTQorCQlpZiAoIVBhZ2VCYWQocGFnZSkpIHsKKwkJCXNl dF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCX0KKyNl bHNlCisgCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7 CisjZW5kaWYKIAl9CiAJdG90YWwgKz0gY291bnQ7CiAJYmRhdGEtPm5vZGVfYm9vdG1lbV9t YXAgPSBOVUxMOwpkaWZmIC11ck4gbGludXgtMi41LjczLW1tMi9tbS9wYWdlX2FsbG9jLmMg bGludXgtMi41L21tL3BhZ2VfYWxsb2MuYwotLS0gbGludXgtMi41LjczLW1tMi9tbS9wYWdl X2FsbG9jLmMJMjAwMy0wNy0wMSAxOTo1OTo1Ny4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4 LTIuNS9tbS9wYWdlX2FsbG9jLmMJMjAwMy0wNy0wMiAwMToxMjowOS4wMDAwMDAwMDAgK2pl Y3QgaXMgYW4gaWRlYSBhbmQgaW1wbGVtZW50YXRpb25wZm4pCQkoKHBmbikgPCBtYXhfbWFw bnIpCiAjZW5kaWYgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KICNkZWZpbmUgdmlydF90 b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQor I2RlZmluZSBwaHlzX3RvX3BhZ2UoeCkJCShtZW1fbWFwICsgKCh1bnNpZ25lZCBsb25nKSh4 KSA+PiBQQUdFX1NISUZUKSkKIAogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBm bl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCmRpZmYgLXVyTiBsaW51eC0y LjUuNzMtbW0yL21tL2Jvb3RtZW0uYyBsaW51eC0yLjUvbW0vYm9vdG1lbS5jCi0tLSBsaW51 eC0yLjUuNzMtbW0yL21tL2Jvb3RtZW0uYwkyMDAzLTA2LTE3IDA1OjE5OjQ3LjAwMDAwMDAw MCArMDEwMAorKysgbGludXgtMi41L21tL2Jvb3RtZW0uYwkyMDAzLTA3LTAxIDIwOjQyOjI1 LjAwMDAwMDAwMCArMDEwMApAQCAtMjc0LDggKzI3NCwxNyBAQAogCQkJCWlmICh2ICYgbSkg ewogCQkJCQljb3VudCsrOwogCQkJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKworI2lm ZGVmIENPTkZJR19CQURSQU0KKwkJCQkJaWYgKCFQYWdlQmFkKHBhZ2UpKSB7CisJCQkJCQlz ZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJ CQl9CisjZWxzZQorCiAJCQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQkJCQlfX2Zy ZWVfcGFnZShwYWdlKTsKKyNlbmRpZgogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI5 NCw4ICszMDMsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKChiZGF0YS0+bm9kZV9sb3dfcGZu LShiZGF0YS0+bm9kZV9ib290X3N0YXJ0ID4+IFBBR0VfU0hJRlQpKS84ICsgUEFHRV9TSVpF LTEpL1BBR0VfU0laRTsgaSsrLHBhZ2UrKykgewogCQljb3VudCsrOwogCQlDbGVhclBhZ2VS ZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisKKyNpZmRlZiBD T05GSUdfQkFEUkFNCisJCWlmICghUGFnZUJhZChwYWdlKSkgeworCQkJc2V0X3BhZ2VfY291 bnQocGFnZSwgMSk7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJfQorI2Vsc2UKKyAJCXNl dF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKKyNlbmRpZgog CX0KIAl0b3RhbCArPSBjb3VudDsKIAliZGF0YS0+bm9kZV9ib290bWVtX21hcCA9IE5VTEw7 CmRpZmYgLXVyTiBsaW51eC0yLjUuNzMtbW0yL21tL3BhZ2VfYWxsb2MuYyBsaW51eC0yLjUv bW0vcGFnZV9hbGxvYy5jCi0tLSBsaW51eC0yLjUuNzMtbW0yL21tL3BhZ2VfYWxsb2MuYwky MDAzLTA3LTAxIDE5OjU5OjU3LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi41L21tL3Bh Z2VfYWxsb2MuYwkyMDAzLTA3LTAyIDAxOjEyOjA5LjAwMDAwMDAwMCArZXhjaGFuZ2luZyB5 b3VyIAogICAgICAgICAgICBtb3RoZWFsYW5jaW5nLCBLYW5vaiBTYXJjYXIsIFNHSSwgSmFu IDIwMDAKICAqICBQZXIgY3B1IGhvdC9jb2xkIHBhZ2UgbGlzdHMsIGJ1bGsgYWxsb2NhdGlv biwgTWFydGluIEouIEJsaWdoLCBTZXB0IDIwMDIKICAqICAgICAgICAgIChsb3RzIG9mIGJp dHMgYm9ycm93ZWQgZnJvbSBJbmdvIE1vbG5hciAmIEFuZHJldyBNb3J0b24pCisgKiAgQmFk UkFNIGhhbmRsaW5nLCBSaWNrIHZhbiBSZWluLCBGZWIgMjAwMQogICovCiAKICNpbmNsdWRl IDxsaW51eC9jb25maWcuaD4KQEAgLTE2MTUsMyArMTYxNiw5NiBAQAogCXNldHVwX3Blcl96 b25lX3BhZ2VzX21pbigpOwogCXJldHVybiAwOwogfQorCisKKyNpZmRlZiBDT05GSUdfQkFE UkFNCisKKy8qIEdpdmVuIGEgcG9pbnRlZC1hdCBhZGRyZXNzIGFuZCBhIG1hc2ssIGluY3Jl bWVudCB0aGUgcGFnZSBzbyB0aGF0IHRoZQorICogbWFzayBoaWRlcyB0aGUgaW5jcmVtZW50 LiBSZXR1cm4gMCBpZiBubyBpbmNyZW1lbnQgaXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBp bnQgX19pbml0IG5leHRfbWFza2VkX2FkZHJlc3MgKHVuc2lnbmVkIGxvbmcgKmFkZHJwLCB1 bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5jPTE7Cisg ICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3dmFsID0gKmFkZHJwOworCXdoaWxlIChpbmMgJiBt YXNrKQorCQlpbmMgKz0gaW5jOworICAgICAgICB3aGlsZSAoaW5jICE9IDApIHsKKwkJbmV3 dmFsICs9IGluYzsKKwkJbmV3dmFsICY9IH5tYXNrOworCQluZXd2YWwgfD0gKCgqYWRkcnAp ICYgbWFzayk7CisJCWlmIChuZXd2YWwgPiAqYWRkcnApIHsKKwkJCSphZGRycCA9IG5ld3Zh bDsKKwkJCXJldHVybiAxOworCQl9CisJCWRvIHsKKwkJCWluYyArPSBpbmM7CisJCX0gd2hp bGUgKGluYyAmIH5tYXNrKTsKKwkJd2hpbGUgKGluYyAmIG1hc2spCisJCQlpbmMgKz0gaW5j OworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCisKK3ZvaWQgX19pbml0IGJh ZHJhbV9tYXJrcGFnZXMgKGludCBhcmdjLCB1bnNpZ25lZCBsb25nICphcmd2KSB7CisJdW5z aWduZWQgbG9uZyBhZGRyLCBtYXNrOworICAgICAgICB3aGlsZSAoYXJnYy0tID4gMCkgewor ICAgICAgICAgICAgICAgIGFkZHIgPSAqYXJndisrOworICAgICAgICAgICAgICAgIG1hc2sg cHJvOwogCkBAIC00NjcsMTMgKzQ3OSwxNyBAQAogCXRvdGFscmFtX3BhZ2VzICs9IF9fZnJl ZV9hbGxfYm9vdG1lbSgpOwogCiAJcmVzZXJ2ZWRwYWdlcyA9IDA7CisJYmFkcGFnZXMgPSAw OwogCWZvciAodG1wID0gMDsgdG1wIDwgbWF4X2xvd19wZm47IHRtcCsrKQogCQkvKgotCQkg KiBPbmx5IGNvdW50IHJlc2VydmVkIFJBTSBwYWdlcworCQkgKiBPbmx5IGNvdW50IHJlc2Vy dmVkIGFuZCBiYWQgUkFNIHBhZ2VzCiAJCSAqLwogCQkwCkBAIC0yMjMsMTIgKzIyMywyMiBA QAogCXBrbWFwX3BhYWxhbmNpbmcsIEthbm9qIFNhcmNhciwgU0dJLCBKYW4gMjAwMAogICog IFBlciBjcHUgaG90L2NvbGQgcGFnZSBsaXN0cywgYnVsayBhbGxvY2F0aW9uLCBNYXJ0aW4g Si4gQmxpZ2gsIFNlcHQgMjAwMgogICogICAgICAgICAgKGxvdHMgb2YgYml0cyBib3Jyb3dl ZCBmcm9tIEluZ28gTW9sbmFyICYgQW5kcmV3IE1vcnRvbikKKyAqICBCYWRSQU0gaGFuZGxp bmcsIFJpY2sgdmFuIFJlaW4sIEZlYiAyMDAxCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nv bmZpZy5oPgpAQCAtMTYxNSwzICsxNjE2LDk2IEBACiAJc2V0dXBfcGVyX3pvbmVfcGFnZXNf bWluKCk7CiAJcmV0dXJuIDA7CiB9CisKKworI2lmZGVmIENPTkZJR19CQURSQU0KKworLyog R2l2ZW4gYSBwb2ludGVkLWF0IGFkZHJlc3MgYW5kIGEgbWFzaywgaW5jcmVtZW50IHRoZSBw YWdlIHNvIHRoYXQgdGhlCisgKiBtYXNrIGhpZGVzIHRoZSBpbmNyZW1lbnQuIFJldHVybiAw IGlmIG5vIGluY3JlbWVudCBpcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIGludCBfX2luaXQg bmV4dF9tYXNrZWRfYWRkcmVzcyAodW5zaWduZWQgbG9uZyAqYWRkcnAsIHVuc2lnbmVkIGxv bmcgbWFzaykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbmM9MTsKKyAgICAgICAgdW5z aWduZWQgbG9uZyBuZXd2YWwgPSAqYWRkcnA7CisJd2hpbGUgKGluYyAmIG1hc2spCisJCWlu YyArPSBpbmM7CisgICAgICAgIHdoaWxlIChpbmMgIT0gMCkgeworCQluZXd2YWwgKz0gaW5j OworCQluZXd2YWwgJj0gfm1hc2s7CisJCW5ld3ZhbCB8PSAoKCphZGRycCkgJiBtYXNrKTsK KwkJaWYgKG5ld3ZhbCA+ICphZGRycCkgeworCQkJKmFkZHJwID0gbmV3dmFsOworCQkJcmV0 dXJuIDE7CisJCX0KKwkJZG8geworCQkJaW5jICs9IGluYzsKKwkJfSB3aGlsZSAoaW5jICYg fm1hc2spOworCQl3aGlsZSAoaW5jICYgbWFzaykKKwkJCWluYyArPSBpbmM7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgYmFkcmFtX21hcmtw YWdlcyAoaW50IGFyZ2MsIHVuc2lnbmVkIGxvbmcgKmFyZ3YpIHsKKwl1bnNpZ25lZCBsb25n IGFkZHIsIG1hc2s7CisgICAgICAgIHdoaWxlIChhcmdjLS0gPiAwKSB7CisgICAgICAgICAg ICAgICAgYWRkciA9ICphcmd2Kys7CisgICAgICAgICAgICAgICAgbWFzayBwcm87CiAKQEAg LTQ2NywxMyArNDc5LDE3IEBACiAJdG90YWxyYW1fcGFnZXMgKz0gX19mcmVlX2FsbF9ib290 bWVtKCk7CiAKIAlyZXNlcnZlZHBhZ2VzID0gMDsKKwliYWRwYWdlcyA9IDA7CiAJZm9yICh0 bXAgPSAwOyB0bXAgPCBtYXhfbG93X3BmbjsgdG1wKyspCiAJCS8qCi0JCSAqIE9ubHkgY291 bnQgcmVzZXJ2ZWQgUkFNIHBhZ2VzCisJCSAqIE9ubHkgY291bnQgcmVzZXJ2ZWQgYW5kIGJh ZCBSQU0gcGFnZXMKIAkJICovCiAJCWlmIChwYWdlX2lzX3JhbSh0bXApICYmIFBhZ2VSZXNl cnZwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYgLyogIUNPTkZJR19ESVNDT05U SUdNRU0gKi8KICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3Bh KGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwaHlzX3RvX3BhZ2UoeCkJCShtZW1f bWFwICsgKCh1bnNpZ25lZCBsb25nKSh4KSA+PiBQQUdFX1NISUZUKSkKIAogI2RlZmluZSB2 aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NI SUZUKQogCmRpZmYgLXVyTiBsaW51eC0yLjUuNzMtbW0yL21tL2Jvb3RtZW0uYyBsaW51eC0y LjUvbW0vYm9vdG1lbS5jCi0tLSBsaW51eC0yLjUuNzMtbW0yL21tL2Jvb3RtZW0uYwkyMDAz LTA2LTE3IDA1OjE5OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi41L21tL2Jvb3Rt ZW0uYwkyMDAzLTA3LTAxIDIwOjQyOjI1LjAwMDAwMDAwMCArMDEwMApAQCAtMjc0LDggKzI3 NCwxNyBAQAogCQkJCWlmICh2ICYgbSkgewogCQkJCQljb3VudCsrOwogCQkJCQlDbGVhclBh Z2VSZXNlcnZlZChwYWdlKTsKKworI2lmZGVmIENPTkZJR19CQURSQU0KKwkJCQkJaWYgKCFQ YWdlQmFkKHBhZ2UpKSB7CisJCQkJCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCQkJ CV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJCQl9CisjZWxzZQorCiAJCQkJCXNldF9wYWdlX2Nv dW50KHBhZ2UsIDEpOwogCQkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKyNlbmRpZgogCQkJCX0K IAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI5NCw4ICszMDMsMTYgQEAKIAlmb3IgKGkgPSAwOyBp IDwgKChiZGF0YS0+bm9kZV9sb3dfcGZuLShiZGF0YS0+bm9kZV9ib290X3N0YXJ0ID4+IFBB R0VfU0hJRlQpKS84ICsgUEFHRV9TSVpFLTEpL1BBR0VfU0laRTsgaSsrLHBhZ2UrKykgewog CQljb3VudCsrOwogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291 bnQocGFnZSwgMSk7CisKKyNpZmRlZiBDT05GSUdfQkFEUkFNCisJCWlmICghUGFnZUJhZChw YWdlKSkgeworCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCQlfX2ZyZWVfcGFnZShw YWdlKTsKKwkJfQorI2Vsc2UKKyAJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQlfX2Zy ZWVfcGFnZShwYWdlKTsKKyNlbmRpZgogCX0KIAl0b3RhbCArPSBjb3VudDsKIAliZGF0YS0+ bm9kZV9ib290bWVtX21hcCA9IE5VTEw7CmRpZmYgLXVyTiBsaW51eC0yLjUuNzMtbW0yL21t L3BhZ2VfYWxsb2MuYyBsaW51eC0yLjUvbW0vcGFnZV9hbGxvYy5jCi0tLSBsaW51eC0yLjUu NzMtbW0yL21tL3BhZ2VfYWxsb2MuYwkyMDAzLTA3LTAxIDE5OjU5OjU3LjAwMDAwMDAwMCAr MDEwMAorKysgbGludXgtMi41L21tL3BhZ2VfYWxsb2MuYwkyMDAzLTA3LTAyIDAxOjEyOjA5 LjAwMDAwMDAwMCArNTQsNiArMTU0LDcgQEAKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgo cGZuKSA8IG1heF9tYXBucikKICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwog I2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+ IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBoeXNfdG9fcGFnZSh4KQkJKG1lbV9tYXAgKyAoKHVu c2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpKQogCiAjZGVmaW5lIHZpcnRfYWRkcl92 YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAKZGlm ZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jIGxpbnV4LTIuNS9tbS9ib290 bWVtLmMKLS0tIGxpbnV4LTIuNS43My1tbTIvbW0vYm9vdG1lbS5jCTIwMDMtMDYtMTcgMDU6 MTk6NDcuMDAwMDAwMDAwICswMTAwCisrKyBsaW51eC0yLjUvbW0vYm9vdG1lbS5jCTIwMDMt MDctMDEgMjA6NDI6MjUuMDAwMDAwMDAwICswMTAwCkBAIC0yNzQsOCArMjc0LDE3IEBACiAJ CQkJaWYgKHYgJiBtKSB7CiAJCQkJCWNvdW50Kys7CiAJCQkJCUNsZWFyUGFnZVJlc2VydmVk KHBhZ2UpOworCisjaWZkZWYgQ09ORklHX0JBRFJBTQorCQkJCQlpZiAoIVBhZ2VCYWQocGFn ZSkpIHsKKwkJCQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJCQkJX19mcmVlX3Bh Z2UocGFnZSk7CisJCQkJCX0KKyNlbHNlCisKIAkJCQkJc2V0X3BhZ2VfY291bnQocGFnZSwg MSk7CiAJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworI2VuZGlmCiAJCQkJfQogCQkJfQogCQl9 IGVsc2UgewpAQCAtMjk0LDggKzMwMywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCAoKGJkYXRh LT5ub2RlX2xvd19wZm4tKGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQgPj4gUEFHRV9TSElGVCkp LzggKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOyBpKysscGFnZSsrKSB7CiAJCWNvdW50Kys7 CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAx KTsKKworI2lmZGVmIENPTkZJR19CQURSQU0KKwkJaWYgKCFQYWdlQmFkKHBhZ2UpKSB7CisJ CQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQl9 CisjZWxzZQorIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJCV9fZnJlZV9wYWdlKHBh Z2UpOworI2VuZGlmCiAJfQogCXRvdGFsICs9IGNvdW50OwogCWJkYXRhLT5ub2RlX2Jvb3Rt ZW1fbWFwID0gTlVMTDsKZGlmZiAtdXJOIGxpbnV4LTIuNS43My1tbTIvbW0vcGFnZV9hbGxv Yy5jIGxpbnV4LTIuNS9tbS9wYWdlX2FsbG9jLmMKLS0tIGxpbnV4LTIuNS43My1tbTIvbW0v cGFnZV9hbGxvYy5jCTIwMDMtMDctMDEgMTk6NTk6NTcuMDAwMDAwMDAwICswMTAwCisrKyBs aW51eC0yLjUvbW0vcGFnZV9hbGxvYy5jCTIwMDMtMDctMDIgMDE6MTI6MDkuMDAwMDAwMDAw ICswMTAwCkBAIC0xMiw2ICsxMiw3IEBACiAgKiAgWm9uZSBiYWxhbmNpbmcsIEthbm9qIFNh cmNhciwgU0dJLCBKYW4gMjAwMAogICogIFBlciBjcHUgaG90L2NvbGQgcGFnZSBsaXN0cywg YnVsayBhbGxvY2F0aW9uLCBNYXJ0aW4gSi4gQmxpZ2gsIFNlcHQgMjAwMgogICogICAgICAg ICAgKGxvdHMgb2YgYml0cyBib3Jyb3dlZCBmcm9tIEluZ28gTW9sbmFyICYgQW5kcmV3IE1v cnRvbikKKyAqICBCYWRSQU0gaGFuZGxpbmcsIFJpY2sgdmFuIFJlaW4sIEZlYiAyMDAxCiAg Ki8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTYxNSwzICsxNjE2LDk2IEBA CiAJc2V0dXBfcGVyX3pvbmVfcGFnZXNfbWluKCk7CiAJcmV0dXJuIDA7CiB9CisKKworI2lm ZGVmIENPTkZJR19CQURSQU0KKworLyogR2l2ZW4gYSBwb2ludGVkLWF0IGFkZHJlc3MgYW5k IGEgbWFzaywgaW5jcmVtZW50IHRoZSBwYWdlIHNvIHRoYXQgdGhlCisgKiBtYXNrIGhpZGVz IHRoZSBpbmNyZW1lbnQuIFJldHVybiAwIGlmIG5vIGluY3JlbWVudCBpcyBwb3NzaWJsZS4K KyAqLworc3RhdGljIGludCBfX2luaXQgbmV4dF9tYXNrZWRfYWRkcmVzcyAodW5zaWduZWQg bG9uZyAqYWRkcnAsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICAgICAgdW5zaWduZWQg bG9uZyBpbmM9MTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBuZXd2YWwgPSAqYWRkcnA7CisJ d2hpbGUgKGluYyAmIG1hc2spCisJCWluYyArPSBpbmM7CisgICAgICAgIHdoaWxlIChpbmMg IT0gMCkgeworCQluZXd2YWwgKz0gaW5jOworCQluZXd2YWwgJj0gfm1hc2s7CisJCW5ld3Zh bCB8PSAoKCphZGRycCkgJiBtYXNrKTsKKwkJaWYgKG5ld3ZhbCA+ICphZGRycCkgeworCQkJ KmFkZHJwID0gbmV3dmFsOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZG8geworCQkJaW5jICs9 IGluYzsKKwkJfSB3aGlsZSAoaW5jICYgfm1hc2spOworCQl3aGlsZSAoaW5jICYgbWFzaykK KwkJCWluYyArPSBpbmM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKwor dm9pZCBfX2luaXQgYmFkcmFtX21hcmtwYWdlcyAoaW50IGFyZ2MsIHVuc2lnbmVkIGxvbmcg KmFyZ3YpIHsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIG1hc2s7CisgICAgICAgIHdoaWxlIChh cmdjLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgYWRkciA9ICphcmd2Kys7CisgICAgICAg ICAgICAgICAgbWFzayA9IChhcmdjLS0gPiAwKSA/ICphcmd2KysgOiB+MEw7CisgICAgICAg ICAgICAgICAgbWFzayB8PSB+UEFHRV9NQVNLOwkvLyBPcHRpbWFsaXNhdGlvbgorCQlhZGRy ICY9IG1hc2s7CQkvLyAgTm9ybWFsaXNhdGlvbgorICAgICAgICAgICAgICAgIGRvIHsKKwkJ CXN0cnVjdCBwYWdlICpwZyA9IHBoeXNfdG9fcGFnZShhZGRyKTsKK3ByaW50ayAoIiUwNWx4 ICIsIF9fcGEoX192YShhZGRyKSkgPj4gUEFHRV9TSElGVCk7CitwcmludGsgKCI9JTA1bHgv JTA1bHggIiwgcGctbWVtX21hcCwgbWF4X21hcG5yKTsKKwkJCS8vIGlmIChWQUxJRF9QQUdF KHBnKSkgeworCQkJCWlmIChQYWdlVGVzdGFuZFNldEJhZCAocGcpKSB7CisJCQkJCXJlc2Vy dmVfYm9vdG1lbSAoYWRkciwgUEFHRV9TSVpFKTsKK3ByaW50ayAoIkJBRCAiKTsKKwkJCQl9 CitlbHNlIHByaW50ayAoIkJGUiAiKTsKKwkJCS8vIH0KKy8vIGVsc2UgcHJpbnRrICgiSU5W ICIpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRfbWFza2VkX2FkZHJlc3MgKCZh ZGRyLG1hc2spKTsKKyAgICAgICAgfQorfQorCisKKworLyoqKioqKioqKioqIENPTkZJR19C QURSQU06IENVU1RPTUlTQUJMRSBTRUNUSU9OIFNUQVJUUyBIRVJFICoqKioqKioqKioqKioq KioqKi8KKworCisvLyBFbnRlciB5b3VyIGN1c3RvbSBCYWRSQU0gcGF0dGVybnMgaGVyZSBh cyBwYWlycyBvZiB1bnNpZ25lZCBsb25nIGludGVnZXJzLgorLy8gRm9yIG1vcmUgaW5mb3Jt YXRpb24gb24gdGhlc2UgRi9NIHBhaXJzLCByZWZlciB0byBEb2N1bWVudGF0aW9uL2JhZHJh bS50eHQKKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2RldmluaXRkYXRhIGJhZHJhbV9j dXN0b21bXSA9IHsKKwkwLAkvLyBOdW1iZXIgb2YgbG9uZ3dvcmRzIHRoYXQgZm9sbG93LCBh cyBGL00gcGFpcnMKK307CisKKworLyoqKioqKioqKioqIENPTkZJR19CQURSQU06IENVU1RP TUlTQUJMRSBTRUNUSU9OIEVORFMgSEVSRSAqKioqKioqKioqKioqKioqKioqKi8KKworCisK K3N0YXRpYyBpbnQgX19pbml0IGJhZHJhbV9zZXR1cCAoY2hhciAqc3RyKQoreworCXVuc2ln bmVkIGxvbmcgb3B0c1szXTsKKwlpZiAoIW1lbV9tYXApIEJVRygpOworcHJpbnRrICgiUEFH RV9PRkZTRVQ9MHglMDhseFxuIiwgUEFHRV9PRkZTRVQpOworcHJpbnRrICgiQmFkUkFNIG9w dGlvbiBpcyAlc1xuIiwgc3RyKTsKKwlpZiAoKnN0cisrID09ICc9JykKKwkJd2hpbGUgKHN0 cj1nZXRfb3B0aW9ucyAoc3RyLCAzLCAoaW50ICopIG9wdHMpLCAqb3B0cykgeworcHJpbnRr ICgiICAgLS0+IG1hcmtpbmcgMHglMDhseCwgMHglMDhseCAgWyVsZF1cbiIsIG9wdHNbMV0s IG9wdHNbMl0sIG9wdHNbMF0pOworCQkJYmFkcmFtX21hcmtwYWdlcyAoKm9wdHMsIG9wdHMr MSk7CisJCQlpZiAoKm9wdHM9PTEpCisJCQkJYnJlYWs7CisJCX07CisJYmFkcmFtX21hcmtw YWdlcyAoKmJhZHJhbV9jdXN0b20sIGJhZHJhbV9jdXN0b20rMSk7CisJcmV0dXJuIDA7Cit9 CisKK19fc2V0dXAoImJhZHJhbSIsIGJhZHJhbV9zZXR1cCk7CisKKyNlbmRpZiAvKiBDT05G SUdfQkFEUkFNICovCisK ------=____1057150726708_l4Li4Ps8Mv-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/