From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S274863AbTGaVmT (ORCPT ); Thu, 31 Jul 2003 17:42:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S269685AbTGaVmI (ORCPT ); Thu, 31 Jul 2003 17:42:08 -0400 Received: from ztxmail03.ztx.compaq.com ([161.114.1.207]:38665 "EHLO ztxmail03.ztx.compaq.com") by vger.kernel.org with ESMTP id S274882AbTGaVkf (ORCPT ); Thu, 31 Jul 2003 17:40:35 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.0.6375.0 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C357AC.5D844650" Subject: cciss driver update for 2.4.22-pre9 Date: Thu, 31 Jul 2003 16:40:31 -0500 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: cciss driver update for 2.4.22-pre9 Thread-Index: AcNXrF1vig0MUDozRg2eBavsQVCawQ== From: "Miller, Mike (OS Dev)" To: "Jens Axboe (E-mail)" , "Marcelo Tosatti (E-mail)" Cc: "Lkml (E-mail)" X-OriginalArrivalTime: 31 Jul 2003 21:40:31.0687 (UTC) FILETIME=[5DD70570:01C357AC] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C357AC.5D844650 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Attached is a plain text patch file. My mailer screws up inline patches. This patch enables failover support in multi-path environments that are = configured using the md driver. It does 2 different tests to cover all = failure scenarios but only makes one functional change.=20 The tests that done are: 1. A no-op command is sent down at intervals specified by the period. = The no-op is _guaranteed_ by firmware to return within a very short time = (about 5 seconds). On a very heavily loaded system that may not be = adequate so a deadline may also be specified to increase the time in = which the command can return. If the command does not return within the = deadline time we assume the controller is dead. This covers most = failures. 2. The heartbeat register is checked to ensure it is always = incrementing. If the value in the register is not greater than the = previous check, the controller is dead. This covers the special case of = a PCI master abort. What it does: If we determine the controller has failed due to either of the above = conditions we fail all outstanding commands and let the md driver handle = the failover. This patch was built and tested against the 2.4.21 kernel with the = 2.4.22-pre9 pre-patch applied. It is intended for inclusion in the = 2.4.22 kernel. Thanks, mikem ------_=_NextPart_001_01C357AC.5D844650 Content-Type: application/octet-stream; name="cciss_2447_detect_death_for_lx2422p9.patch" Content-Transfer-Encoding: base64 Content-Description: cciss_2447_detect_death_for_lx2422p9.patch Content-Disposition: attachment; filename="cciss_2447_detect_death_for_lx2422p9.patch" Q2hhbmdlczoKVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZhaWxvdmVyIGluIG11bHRpcGF0 aCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIG1kIGRyaXZlci4gMiB0ZXN0cyBhcmUgZG9uZSBpbiBl bnN1cmUgdGhlIGNvbnRyb2xsZXIgaXMgd29ya2luZy4gCiAxLiBBIG5vLW9wIGlzIHNlbnQgZG93 biBhdCBpbnRlcnZhbHMgc3BlY2lmaWVkIGJ5IHRoZSBwZXJpb2QuIFRoZSBuby1vcCBzaG91bGQg cmV0dXJuIGluIGEgdmVyeSBzaG9ydCB0aW1lLiBBIGRlYWRsaW5lIGNhbiBhbHNvIGJlIHNldCB0 byBpbmNyZWFzZSB0aGUgdGltZSBwZXJpb2QgZm9yIHRoZSBuby1vcCB0byByZXR1cm4uIFRoaXMg aXMgdXNlZnVsIG9uIGhlYXZpbHkgbG9hZGVkIHN5c3RlbXMuIFRoaXMgdGVzdCBjb3ZlcnMgX21v c3RfIGZhaWx1cmUgc2NlbmFyaW9zLgogMi4gVGhlIGhlYXJ0YmVhcnQgcmVnaXN0ZXIgaXMgdGVz dGVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBhbHdheXMgaW5jcmVtZW50aW5nLiBJZiBub3QsIHRoZSBj b250cm9sbGVyIGlzIGRlYWQuIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIHNwZWNpYWwgZmFpbHVyZSBj YXNlIG9mIGEgUENJIG1hc3RlciBhYm9ydC4KTm90ZTogdGhlIG1kIGRyaXZlciBoYW5kbGVzIHRo ZSBhY3R1YWwgZmFpbG92ZXIuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtYnVyTiBseDI0 MjJwOS5vcmlnL0RvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAgbHgyNDIycDkvRG9jdW1lbnRh dGlvbi9Db25maWd1cmUuaGVscAotLS0gbHgyNDIycDkub3JpZy9Eb2N1bWVudGF0aW9uL0NvbmZp Z3VyZS5oZWxwCTIwMDMtMDctMzEgMDU6NTA6MDQuMDAwMDAwMDAwIC0wNTAwCisrKyBseDI0MjJw OS9Eb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwCTIwMDMtMDctMzEgMDU6NTU6NDUuMDAwMDAw MDAwIC0wNTAwCkBAIC02ODEzLDcgKzY4MTMsNyBAQAogQ09ORklHX0NJU1NfU0NTSV9UQVBFCiAg IFdoZW4gZW5hYmxlZCAoWSksIHRoaXMgb3B0aW9uIGFsbG93cyBTQ1NJIHRhcGUgZHJpdmVzIGFu ZCBTQ1NJIG1lZGl1bQogICBjaGFuZ2VycyAodGFwZSByb2JvdHMpIHRvIGJlIGFjY2Vzc2VkIHZp YSBhIENvbXBhcSA1eHh4IGFycmF5Ci0gIGNvbnRyb2xsZXIuICAoU2VlIERvY3VtZW50YXRpb24v Y2Npc3MudHh0IGZvciBtb3JlIGRldGFpbHMuKQorICBjb250cm9sbGVyLiAgKFNlZSA8ZmlsZTpE b2N1bWVudGF0aW9uL2NjaXNzLnR4dD4gZm9yIG1vcmUgZGV0YWlscy4pCiAKICAgIlNDU0kgc3Vw cG9ydCIgYW5kICJTQ1NJIHRhcGUgc3VwcG9ydCIgbXVzdCBhbHNvIGJlIGVuYWJsZWQgZm9yIHRo aXMKICAgb3B0aW9uIHRvIHdvcmsuCkBAIC02ODIxLDYgKzY4MjEsMTUgQEAKICAgV2hlbiB0aGlz IG9wdGlvbiBpcyBkaXNhYmxlZCAoTiksIHRoZSBTQ1NJIHBvcnRpb24gb2YgdGhlIGRyaXZlcgog ICBpcyBub3QgY29tcGlsZWQuCiAKK0VuYWJsZSBtb25pdG9yIHRocmVhZAorQ09ORklHX0NJU1Nf TU9OSVRPUl9USFJFQUQKKyAgSW50ZW5kZWQgZm9yIHVzZSB3aXRoIG11bHRpcGF0aCBjb25maWd1 cmF0aW9ucyAoc2VlIHRoZSBtZCBkcml2ZXIpLgorICBUaGlzIG9wdGlvbiBhbGxvd3MgYSBwZXIt YWRhcHRlciBtb25pdG9yaW5nIHRocmVhZCB0byBwZXJpb2RpY2FsbHkKKyAgcG9sbCB0aGUgYWRh cHRlciB0byBkZXRlY3QgZmFpbHVyZSBtb2RlcyBpbiB3aGljaCB0aGUgcHJvY2Vzc29yCisgIGlz IHVuYWJsZSB0byByZWNlaXZlIGludGVycnVwdHMgZnJvbSB0aGUgYWRhcHRlciwgdGh1cyBlbmFi bGluZyAKKyAgZmFpbC1vdmVyIHRvIGFuIGFsdGVybmF0ZSBhZGFwdGVyIGluIHN1Y2ggc2l0dWF0 aW9ucy4gIFNlZSAKKyAgPGZpbGU6RG9jdW1lbnRhdGlvbi9jY2lzcy50eHQ+IGZvciBtb3JlIGRl dGFpbHMuCisKIFF1aWNrTmV0IEludGVybmV0IExpbmVKYWNrL1Bob25lSmFjayBzdXBwb3J0CiBD T05GSUdfUEhPTkVfSVhKCiAgIFNheSBNIGlmIHlvdSBoYXZlIGEgdGVsZXBob255IGNhcmQgbWFu dWZhY3R1cmVkIGJ5IFF1aWNrbmV0CmRpZmYgLWJ1ck4gbHgyNDIycDkub3JpZy9Eb2N1bWVudGF0 aW9uL2NjaXNzLnR4dCBseDI0MjJwOS9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dAotLS0gbHgyNDIy cDkub3JpZy9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dAkyMDAzLTA3LTMxIDA1OjUwOjA0LjAwMDAw MDAwMCAtMDUwMAorKysgbHgyNDIycDkvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQJMjAwMy0wNy0z MSAwNTo1NTo0NS4wMDAwMDAwMDAgLTA1MDAKQEAgLTEyNywzICsxMjcsNTUgQEAKIGFjY2VzcyB0 aGVzZSBkZXZpY2VzIHRvbywgYXMgaWYgdGhlIGFycmF5IGNvbnRyb2xsZXIgd2VyZSBtZXJlbHkg YSBTQ1NJIAogY29udHJvbGxlciBpbiB0aGUgc2FtZSB3YXkgdGhhdCB3ZSBhcmUgYWxsb3dpbmcg aXQgdG8gYWNjZXNzIFNDU0kgdGFwZSBkcml2ZXMuCiAKK01vbml0b3IgVGhyZWFkcworLS0tLS0t LS0tLS0tLS0tCisKK0ZvciBtdWx0aXBhdGggY29uZmlndXJhdGlvbnMgKGFjaGVpdmVkIHZpYSBh IGhpZ2hlciBsZXZlbCBkcml2ZXIsIHN1Y2gKK2FzIHRoZSAibWQiIGRyaXZlcikgaXQgaXMgaW1w b3J0YW50IHRoYXQgZmFpbHVyZSBvZiBhIGNvbnRyb2xsZXIgaXMgZGV0ZWN0ZWQuCitPcmRpbmFy aWx5LCB0aGUgZHJpdmVyIGlzIGVudGlyZWx5IGludGVycnVwdCBkcml2ZW4uICBJZiBhIGZhaWx1 cmUgb2NjdXJzCitpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIHByb2Nlc3NvciBjYW5ub3QgcmVjZWl2 ZSBpbnRlcnJ1cHRzIGZyb20gYW4gYWRhcHRlciwKK3RoZSBkcml2ZXIgd2lsbCB3YWl0IGZvcmV2 ZXIgZm9yIGkvbydzIHRvIGNvbXBsZXRlLiAgSW4gYSBtdWx0aXBhdGgKK2NvbmZpZ3VyYXRpb24g dGhpcyBpcyB1bmRlc2lyYWJsZSwgYXMgdGhlIG1kIGRyaXZlciByZWxpZXMgb24gaS9vJ3MgYmVp bmcKK3JlcG9ydGVkIGFzIGZhaWxlZCBieSB0aGUgbG93IGxldmVsIGRyaXZlciB0byB0cmlnZ2Vy IGZhaWxpbmcgb3ZlciB0byBhbiAKK2FsdGVybmF0ZSBjb250cm9sbGVyLiAgVGhlIG1vbml0b3Ig dGhyZWFkcyBhbGxvdyB0aGUgZHJpdmVyIHRvIGRldGVjdCBzdWNoIAorc2l0dWF0aW9ucyBhbmQg cmVwb3J0IG91dHN0YW5kaW5nIGkvbydzIGFzIGhhdmluZyBmYWlsZWQgc28gdGhhdCByZWNvdmVy eSAKK2FjdGlvbnMgc3VjaCBzd2l0Y2hpbmcgdG8gYW4gYWx0ZXJuYXRlIGNvbnRyb2xsZXIgY2Fu IG9jY3VyLiAgVGhlIG1vbml0b3IgCit0aHJlYWRzIHBlcmlvZGljYWxseSBzZW5kcyBhIHRyaXZp YWwgIm5vLW9wZXJhdGlvbiIgY29tbWFuZCBkb3duIHRvIAordGhlIGNvbnRyb2xsZXJzIGFuZCBl eHBlY3QgdGhlbSB0byBjb21wbGV0ZSB3aXRoaW4gYSBhIHJlYXNvbmFibGUgKHNob3J0KQordGlt ZSBwZXJpb2QuICBUaGUgZmlybXdhcmUgb24gdGhlIGFkYXB0ZXIgaXMgZGVzaWduZWQgc3VjaCB0 aGF0IG5vIG1hdHRlcgoraG93IGJ1c3kgdGhlIGFkYXB0ZXIgaXMgc2VydmluZyBpL28sIGl0IGNh biByZXNwb25kIHF1aWNrbHkgdG8gYQorIm5vLW9wZXJhdGlvbiIgY29tbWFuZC4gIEluIHRoZSBl dmVudCB0aGF0IGEgZGVhZGxpbmUgZWxhcHNlcyBiZWZvcmUgYSBubyAKK29wZXJhdGlvbiBjb21t YW5kIGNvbXBsZXRlcywgYWxsIG91dHN0YW5kaW5nIGNvbW1hbmRzIG9uIHRoYXQgY29udHJvbGxl ciAKK2FyZSByZXBvcnRlZCBiYWNrIHRvIHRoZSB1cHBlciBsYXllcnMgYXMgaGF2aW5nIGZhaWxl ZCwgYW5kIGFueSBuZXcgY29tbWFuZHMgCitzZW50IHRvIHRoZSBjb250cm9sbGVyIGFyZSBpbW1l ZGlhdGVseSByZXBvcnRlZCBiYWNrIGFzIGZhaWxlZC4gCisKK1RvIGVuYWJsZSB0aGUgbW9uaXRv ciB0aHJlYWRzLCB0aGUgY29tcGlsZSB0aW1lIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQKKyh2aWEg dGhlIHVzdWFsIGxpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uKSBhbmQgdGhlIG1vbml0b3IgdGhy ZWFkIG11c3QKK2JlIGVuYWJsZWQgYXQgcnVudGltZSBhcyB3ZWxsLiAgQSBzeXN0ZW0gbWF5IGhh dmUgbWFueSBhZGFwdGVycywgYnV0IAorcGVyaGFwcyBvbmx5IGEgc2luZ2xlIHBhaXIgb3BlcmF0 aW5nIGluIGEgbXVsdGlwYXRoIGNvbmZpZ3VyYXRpb24uICAKK0luIHRoaXMgd2F5LCBpdCBpcyBw b3NzaWJsZSB0byBydW4gbW9uaXRvcmluZyB0aHJlYWRzIG9ubHkgZm9yIHRob3NlIAorYWRhcHRl cnMgd2hpY2ggcmVxdWlyZSBpdC4KKworVG8gc3RhcnQgYSBtb25pdG9yaW5nIHRocmVhZCBvbiB0 aGUgZmlyc3QgY2Npc3MgYWRhcHRlciwgImNjaXNzMCIgd2l0aAorYSBwb2xsaW5nIGludGVydmFs IG9mIDMwIHNlY29uZHMsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJZWNobyAi bW9uaXRvciAzMCIgPiAvcHJvYy9kcml2ZXIvY2Npc3MvY2Npc3MwCisKK1RvIGNoYW5nZSB0aGUg cG9sbGluZyBpbnRlcnZhbCwgdG8gc2F5LCA2MCBzZWNvbmRzOgorCisJZWNobyAibW9uaXRvciA2 MCIgPiAvcHJvYy9kcml2ZXIvY2Npc3MvY2Npc3MwCisKKyhOb3RlLCB0aGUgY2hhbmdlIHdpbGwg bm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBwcmV2aW91cyBwb2xsaW5nIAoraW50ZXJ2YWwgZWxh cHNlcy4pCisKK1RvIGRpc2FibGUgdGhlIG1vbml0b3JpbmcgdGhyZWFkLCBzZXQgdGhlIHBvbGxp bmcgaW50ZXJ2YWwgdG8gMCBzZWNvbmRzOgorCisJZWNobyAibW9uaXRvciAwIiA+IC9wcm9jL2Ry aXZlci9jY2lzcy9jY2lzczAKKworKEFnYWluLCB0aGUgbW9uaXRvcmluZyB0aHJlYWQgd2lsbCBu b3QgZXhpdCB1bnRpbCB0aGUgcHJldmlvdXMgcG9sbGluZworaW50ZXJ2YWwgZWxhcHNlcy4pCisK K1RoZSBtaW5pbXVtIG1vbml0b3JpbmcgcGVyaW9kIGlzIDEwIHNlY29uZHMsIGFuZCB0aGUgbWF4 aW11bSBtb25pdG9yaW5nCitwZXJpb2QgaXMgMzYwMCBzZWNvbmRzICgxIGhvdXIpLiAgVGhlIG5v LW9wZXJhdGlvbiBjb21tYW5kIG11c3QgY29tcGxldGUKK3dpdGggNSBzZWNvbmRzIG9mIHN1Ym1p c3Npb24gaW4gYWxsIGNhc2VzIG9yIHRoZSBjb250cm9sbGVyIHdpbGwgYmUgcHJlc3VtZWQKK2Zh aWxlZC4KZGlmZiAtYnVyTiBseDI0MjJwOS5vcmlnL2RyaXZlcnMvYmxvY2svQ29uZmlnLmluIGx4 MjQyMnA5L2RyaXZlcnMvYmxvY2svQ29uZmlnLmluCi0tLSBseDI0MjJwOS5vcmlnL2RyaXZlcnMv YmxvY2svQ29uZmlnLmluCTIwMDItMTEtMjggMTc6NTM6MTIuMDAwMDAwMDAwIC0wNjAwCisrKyBs eDI0MjJwOS9kcml2ZXJzL2Jsb2NrL0NvbmZpZy5pbgkyMDAzLTA3LTMxIDA1OjU1OjQ1LjAwMDAw MDAwMCAtMDUwMApAQCAtMzYsNiArMzYsNyBAQAogZGVwX3RyaXN0YXRlICdDb21wYXEgU01BUlQy IHN1cHBvcnQnIENPTkZJR19CTEtfQ1BRX0RBICRDT05GSUdfUENJCiBkZXBfdHJpc3RhdGUgJ0Nv bXBhcSBTbWFydCBBcnJheSA1eHh4IHN1cHBvcnQnIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgJENP TkZJR19QQ0kgCiBkZXBfbWJvb2wgJyAgICAgICBTQ1NJIHRhcGUgZHJpdmUgc3VwcG9ydCBmb3Ig U21hcnQgQXJyYXkgNXh4eCcgQ09ORklHX0NJU1NfU0NTSV9UQVBFICRDT05GSUdfQkxLX0NQUV9D SVNTX0RBICRDT05GSUdfU0NTSQorZGVwX21ib29sICcgICAgICAgRW5hYmxlIG1vbml0b3IgdGhy ZWFkJyBDT05GSUdfQ0lTU19NT05JVE9SX1RIUkVBRCAkQ09ORklHX0JMS19DUFFfQ0lTU19EQQog ZGVwX3RyaXN0YXRlICdNeWxleCBEQUM5NjAvREFDMTEwMCBQQ0kgUkFJRCBDb250cm9sbGVyIHN1 cHBvcnQnIENPTkZJR19CTEtfREVWX0RBQzk2MCAkQ09ORklHX1BDSQogZGVwX3RyaXN0YXRlICdN aWNybyBNZW1vcnkgTU01NDE1IEJhdHRlcnkgQmFja2VkIFJBTSBzdXBwb3J0IChFWFBFUklNRU5U QUwpJyBDT05GSUdfQkxLX0RFVl9VTUVNICRDT05GSUdfUENJICRDT05GSUdfRVhQRVJJTUVOVEFM CiAKZGlmZiAtYnVyTiBseDI0MjJwOS5vcmlnL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBseDI0MjJw OS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKLS0tIGx4MjQyMnA5Lm9yaWcvZHJpdmVycy9ibG9jay9j Y2lzcy5jCTIwMDMtMDctMzEgMDU6NTA6MTAuMDAwMDAwMDAwIC0wNTAwCisrKyBseDI0MjJwOS9k cml2ZXJzL2Jsb2NrL2NjaXNzLmMJMjAwMy0wNy0zMSAwODoxNDo1My4wMDAwMDAwMDAgLTA1MDAK QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUg PGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvc21w X2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2Jsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rl di5oPgpAQCAtMTA5LDggKzExMCwxOSBAQAogCiAjZGVmaW5lIENDSVNTX0RNQV9NQVNLIDB4RkZG RkZGRkZGRkZGRkZGRiAvKiA2NCBiaXQgRE1BICovCiAKKyNpZmRlZiBDT05GSUdfQ0lTU19NT05J VE9SX1RIUkVBRAorc3RhdGljIGludCBjY2lzc19tb25pdG9yKHZvaWQgKmN0bHIpOworc3RhdGlj IGludCBzdGFydF9tb25pdG9yX3RocmVhZChjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciAq Y21kLCAKKwkJdW5zaWduZWQgbG9uZyBjb3VudCwgaW50ICgqY2Npc3NfbW9uaXRvcikodm9pZCAq KSwgaW50ICpyYyk7CisjZWxzZQorI2RlZmluZSBjY2lzc19tb25pdG9yKHgpCisjZGVmaW5lIGtp bGxfbW9uaXRvcl90aGVhZCh4KQorI2VuZGlmCisKIHN0YXRpYyBjdGxyX2luZm9fdCAqaGJhW01B WF9DVExSXTsKIAorc3RhdGljIHUzMiBoZWFydGJlYXRfdGltZXIgPSAwOworCiBzdGF0aWMgc3Ry dWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2NjaXNzOwogCiBzdGF0aWMgdm9pZCBkb19jY2lzc19y ZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSk7CkBAIC0xODgsNyArMjAwLDExIEBACiAgCQkiQ3Vy cmVudCAjIGNvbW1hbmRzIG9uIGNvbnRyb2xsZXI6ICVkXG4iCiAgCQkiTWF4IFEgZGVwdGggc2lu Y2UgaW5pdDogJWRcbiIKIAkJIk1heCAjIGNvbW1hbmRzIG9uIGNvbnRyb2xsZXIgc2luY2UgaW5p dDogJWRcbiIKLQkJIk1heCBTRyBlbnRyaWVzIHNpbmNlIGluaXQ6ICVkXG5cbiIsCisJCSJNYXgg U0cgZW50cmllcyBzaW5jZSBpbml0OiAlZFxuIgorCQlNT05JVE9SX1BFUklPRF9QQVRURVJOIAor CQlNT05JVE9SX0RFQURMSU5FX1BBVFRFUk4KKwkJTU9OSVRPUl9TVEFUVVNfUEFUVEVSTiAKKwkJ IlxuIiwKICAgCQloLT5kZXZuYW1lLAogICAJCWgtPnByb2R1Y3RfbmFtZSwKICAgCQkodW5zaWdu ZWQgbG9uZyloLT5ib2FyZF9pZCwKQEAgLTE5Niw3ICsyMTIsMTAgQEAKICAgCQkodW5zaWduZWQg aW50KWgtPmludHIsCiAgIAkJaC0+bnVtX2x1bnMsIAogICAJCWgtPlFkZXB0aCwgaC0+Y29tbWFu ZHNfb3V0c3RhbmRpbmcsCi0gIAkJaC0+bWF4UXNpbmNlaW5pdCwgaC0+bWF4X291dHN0YW5kaW5n LCBoLT5tYXhTRyk7CisJCWgtPm1heFFzaW5jZWluaXQsIGgtPm1heF9vdXRzdGFuZGluZywgaC0+ bWF4U0csCisJCU1PTklUT1JfUEVSSU9EX1ZBTFVFKGgpLAorCQlNT05JVE9SX0RFQURMSU5FX1ZB TFVFKGgpLAorCQlDVExSX1NUQVRVUyhoKSk7CiAgIAogCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6 ZTsKIAljY2lzc19wcm9jX3RhcGVfcmVwb3J0KGN0bHIsIGJ1ZmZlciwgJnBvcywgJmxlbik7CkBA IC0yMzEsMTAgKzI1MCw4IEBACiB7CiAJdW5zaWduZWQgY2hhciBjbWRbODBdOwogCWludCBsZW47 Ci0jaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCiAJY3Rscl9pbmZvX3QgKmggPSAoY3Rscl9p bmZvX3QgKikgZGF0YTsKIAlpbnQgcmM7Ci0jZW5kaWYKIAogCWlmIChjb3VudCA+IHNpemVvZihj bWQpLTEpIAogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI0NCw2ICsyNjEsNyBAQAogCWxlbiA9IHN0 cmxlbihjbWQpOwkKIAlpZiAoY21kW2xlbi0xXSA9PSAnXG4nKQogCQljbWRbLS1sZW5dID0gJ1ww JzsKKwogIwlpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKIAkJaWYgKHN0cmNtcCgiZW5nYWdl IHNjc2kiLCBjbWQpPT0wKSB7CiAJCQlyYyA9IGNjaXNzX2VuZ2FnZV9zY3NpKGgtPmN0bHIpOwpA QCAtMjU0LDYgKzI3MiwxMCBAQAogCQkvKiBtaWdodCBiZSBuaWNlIHRvIGhhdmUgImRpc2VuZ2Fn ZSIgdG9vLCBidXQgaXQncyBub3QKIAkJICAgc2FmZWx5IHBvc3NpYmxlLiAob25seSAxIG1vZHVs ZSB1c2UgY291bnQsIGxvY2sgaXNzdWVzLikgKi8KICMJZW5kaWYKKworCWlmIChTVEFSVF9NT05J VE9SX1RIUkVBRChoLCBjbWQsIGNvdW50LCBjY2lzc19tb25pdG9yLCAmcmMpID09IDApCisJCXJl dHVybiByYzsKKwkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNDA3LDcgKzQyOSw3IEBACiAJ cHJpbnRrKEtFUk5fREVCVUcgImNjaXNzX29wZW4gJXggKCV4OiV4KVxuIiwgaW5vZGUtPmlfcmRl diwgY3RsciwgZHNrKTsKICNlbmRpZiAvKiBDQ0lTU19ERUJVRyAqLyAKIAotCWlmIChjdGxyID4g TUFYX0NUTFIgfHwgaGJhW2N0bHJdID09IE5VTEwpCisJaWYgKGN0bHIgPiBNQVhfQ1RMUiB8fCBo YmFbY3Rscl0gPT0gTlVMTCB8fCAhQ1RMUl9JU19BTElWRShoYmFbY3Rscl0pKQogCQlyZXR1cm4g LUVOWElPOwogCS8qCiAJICogUm9vdCBpcyBhbGxvd2VkIHRvIG9wZW4gcmF3IHZvbHVtZSB6ZXJv IGV2ZW4gaWYgaXRzIG5vdCBjb25maWd1cmVkCkBAIC0xMTA3LDcgKzExMjksOCBAQAogCXNpemVf dAlzaXplLAogCXVuc2lnbmVkIGludCB1c2VfdW5pdF9udW0sCiAJdW5zaWduZWQgaW50IGxvZ191 bml0LAotCV9fdTgJcGFnZV9jb2RlICkKKwlfX3U4CXBhZ2VfY29kZSwKKwlfX3U4IGNtZHR5cGUp CiB7CiAJY3Rscl9pbmZvX3QgKmggPSBoYmFbY3Rscl07CiAJQ29tbWFuZExpc3Rfc3RydWN0ICpj OwpAQCAtMTEzMSw2ICsxMTU0LDkgQEAKIAl9CiAJYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1 c2FkZHI7ICAvKiB0YWcgaXMgcGh5cyBhZGRyIG9mIGNtZCAqLwogCS8qIEZpbGwgaW4gUmVxdWVz dCBibG9jayAqLworCWMtPlJlcXVlc3QuQ0RCWzBdID0gY21kOworCWMtPlJlcXVlc3QuVHlwZS5U eXBlID0gY21kdHlwZTsKKwlpZiAoY21kdHlwZSA9PSBUWVBFX0NNRCkgewogCXN3aXRjaCAoY21k KSB7CiAJCWNhc2UgIENJU1NfSU5RVUlSWToKIAkJCS8qIElmIHRoZSBsb2dpY2FsIHVuaXQgbnVt YmVyIGlzIDAgdGhlbiwgdGhpcyBpcyBnb2luZwpAQCAtMTE1MCwxMSArMTE3Niw5IEBACiAJCQkJ Yy0+UmVxdWVzdC5DREJbMl0gPSBwYWdlX2NvZGU7CiAJCQl9CiAJCQljLT5SZXF1ZXN0LkNEQkxl biA9IDY7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9ICBUWVBFX0NNRDsKIAkJCWMtPlJlcXVl c3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAkJCWMtPlJlcXVlc3QuVHlwZS5EaXJl Y3Rpb24gPSBYRkVSX1JFQUQ7IC8qIFJlYWQgKi8KIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7 IC8qIERvbid0IHRpbWUgb3V0ICovCi0JCQljLT5SZXF1ZXN0LkNEQlswXSA9ICBDSVNTX0lOUVVJ Ulk7CiAJCQljLT5SZXF1ZXN0LkNEQls0XSA9IHNpemUgICYgMHhGRjsKIAkJYnJlYWs7CiAJCWNh c2UgQ0lTU19SRVBPUlRfTE9HOgpAQCAtMTE2MywxMSArMTE4Nyw5IEBACiAJCQkJU28gd2UgaGF2 ZSBub3RoaW5nIHRvIHdyaXRlLgogCQkJKi8KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0J CQljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9ICBUWVBFX0NNRDsKIAkJCWMtPlJlcXVlc3QuVHlwZS5B dHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBY RkVSX1JFQUQ7IC8qIFJlYWQgKi8KIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7IC8qIERvbid0 IHRpbWUgb3V0ICovCi0JCQljLT5SZXF1ZXN0LkNEQlswXSA9IENJU1NfUkVQT1JUX0xPRzsKIAkJ CWMtPlJlcXVlc3QuQ0RCWzZdID0gKHNpemUgPj4gMjQpICYgMHhGRjsgIC8qIE1TQiAqLwogCQkJ Yy0+UmVxdWVzdC5DREJbN10gPSAoc2l6ZSA+PiAxNikgJiAweEZGOwogCQkJYy0+UmVxdWVzdC5D REJbOF0gPSAoc2l6ZSA+PiA4KSAmIDB4RkY7CkBAIC0xMTc4LDE4ICsxMjAwLDM4IEBACiAJCQkJ aGJhW2N0bHJdLT5kcnZbbG9nX3VuaXRdLkx1bklEOwogCQkJYy0+SGVhZGVyLkxVTi5Mb2dEZXYu TW9kZSA9IDE7CiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwotCQkJYy0+UmVxdWVzdC5UeXBl LlR5cGUgPSAgVFlQRV9DTUQ7IC8qIEl0IGlzIGEgY29tbWFuZC4gKi8KIAkJCWMtPlJlcXVlc3Qu VHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rp b24gPSBYRkVSX1JFQUQ7IC8qIFJlYWQgKi8KIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7IC8q IERvbid0IHRpbWUgb3V0ICovCi0JCQljLT5SZXF1ZXN0LkNEQlswXSA9IENDSVNTX1JFQURfQ0FQ QUNJVFk7CiAJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJ CSJjY2lzczogIFVua25vd24gQ29tbWFuZCAweCV4IHNlbnQgYXR0ZW1wdGVkXG4iLAkJCQljbWQp OwogCQkJY21kX2ZyZWUoaCwgYywgMSk7CiAJCQlyZXR1cm4gSU9fRVJST1I7Ci0JfTsKKwkJfQor CX0gZWxzZSBpZiAoY21kdHlwZSA9PSBUWVBFX01TRykgeworCQlzd2l0Y2ggKGNtZCkgeworCQlj YXNlIDM6IC8qIE5vLU9wIG1lc3NhZ2UgKi8KKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTsKKwkJ CWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKKwkJCWMtPlJlcXVlc3Qu VHlwZS5EaXJlY3Rpb24gPSBYRkVSX1dSSVRFOworCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsK KwkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gY21kOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlw cmludGsoS0VSTl9XQVJOSU5HCisJCQkJImNjaXNzJWQ6IHVua25vd24gbWVzc2FnZSB0eXBlICVk XG4iLAorCQkJCQljdGxyLCBjbWQpOworCQkJY21kX2ZyZWUoaCwgYywgMSk7CisJCQlyZXR1cm4g SU9fRVJST1I7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiY2Np c3MlZDogdW5rbm93biBjb21tYW5kIHR5cGUgJWRcbiIsIGN0bHIsIGNtZHR5cGUpOworCQljbWRf ZnJlZShoLCBjLCAxKTsKKwkJcmV0dXJuIElPX0VSUk9SOworCX0KIAogCS8qIEZpbGwgaW4gdGhl IHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCiAJaWYgKHNpemUgPiAwKSB7CkBAIC0xMzUy LDcgKzEzOTQsNyBAQAogCX0KIAogCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKENJU1Nf UkVQT1JUX0xPRywgY3RsciwgbGRfYnVmZiwKLQkJCXNpemVvZihSZXBvcnRMdW5EYXRhX3N0cnVj dCksIDAsIDAsIDAgKTsKKwkJCXNpemVvZihSZXBvcnRMdW5EYXRhX3N0cnVjdCksIDAsIDAsIDAs IFRZUEVfQ01EKTsKIAogCWlmIChyZXR1cm5fY29kZSA9PSBJT19PSykgewogCQlsaXN0bGVuZ3Ro ID0gYmUzMl90b19jcHUoKigoX191MzIgKikgJmxkX2J1ZmYtPkxVTkxpc3RMZW5ndGhbMF0pKTsK QEAgLTE0NTEsNyArMTQ5Myw3IEBACiAJbWVtc2V0KHNpemVfYnVmZiwgMCwgc2l6ZW9mKFJlYWRD YXBkYXRhX3N0cnVjdCkpOwogCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKENDSVNTX1JF QURfQ0FQQUNJVFksIGN0bHIsCiAJCQlzaXplX2J1ZmYsIHNpemVvZihSZWFkQ2FwZGF0YV9zdHJ1 Y3QpLCAxLAotCQkJbG9ndm9sLCAwICk7CisJCQlsb2d2b2wsIDAsIFRZUEVfQ01EKTsKIAlpZiAo cmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKIAkJdG90YWxfc2l6ZSA9ICgweGZmICYKIAkJCSh1bnNp Z25lZCBpbnQpIHNpemVfYnVmZi0+dG90YWxfc2l6ZVswXSkgPDwgMjQ7CkBAIC0xNDgyLDcgKzE1 MjQsNyBAQAogCS8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQgdG8gcmVhZCB0aGUgZGlzayBnZW9tZXRy eSAqLwogCW1lbXNldChpbnFfYnVmZiwgMCwgc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCkpOwog CXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKENJU1NfSU5RVUlSWSwgY3RsciwgaW5xX2J1 ZmYsCi0JCXNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpLCAxLCBsb2d2b2wgLDB4QzEgKTsKKwkJ c2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCksIDEsIGxvZ3ZvbCAsMHhDMSwgVFlQRV9DTUQpOwog CWlmIChyZXR1cm5fY29kZSA9PSBJT19PSykgewogCQlpZiAoaW5xX2J1ZmYtPmRhdGFfYnl0ZVs4 XSA9PSAweEZGKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xNTkwLDcgKzE2MzIsOCBA QAogCX0KIAltZW1zZXQoc2l6ZV9idWZmLCAwLCBzaXplb2YoUmVhZENhcGRhdGFfc3RydWN0KSk7 CiAJcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoQ0NJU1NfUkVBRF9DQVBBQ0lUWSwgY3Rs ciwgc2l6ZV9idWZmLAotCQkJCXNpemVvZiggUmVhZENhcGRhdGFfc3RydWN0KSwgMSwgbG9ndm9s LCAwICk7CisJCQkJc2l6ZW9mKCBSZWFkQ2FwZGF0YV9zdHJ1Y3QpLCAxLCBsb2d2b2wsIDAsIAor CQkJCVRZUEVfQ01EKTsKIAlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKIAkJdG90YWxfc2l6 ZSA9ICgweGZmICYKIAkJCSh1bnNpZ25lZCBpbnQpKHNpemVfYnVmZi0+dG90YWxfc2l6ZVswXSkp IDw8IDI0OwpAQCAtMTYxOSw3ICsxNjYyLDcgQEAKIAkvKiBFeGVjdXRlIHRoZSBjb21tYW5kIHRv IHJlYWQgdGhlIGRpc2sgZ2VvbWV0cnkgKi8KIAltZW1zZXQoaW5xX2J1ZmYsIDAsIHNpemVvZihJ bnF1aXJ5RGF0YV9zdHJ1Y3QpKTsKIAlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShDSVNT X0lOUVVJUlksIGN0bHIsIGlucV9idWZmLAotCQkJc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCks IDEsIGxvZ3ZvbCAsMHhDMSApOworCQkJc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCksIDEsIGxv Z3ZvbCAsMHhDMSwgVFlQRV9DTUQpOwogCWlmIChyZXR1cm5fY29kZSA9PSBJT19PSykgewogCQlp ZiAoaW5xX2J1ZmYtPmRhdGFfYnl0ZVs4XSA9PSAweEZGKSB7CiAJCQlwcmludGsoS0VSTl9XQVJO SU5HICJjY2lzczogcmVhZGluZyBnZW9tZXRyeSBmYWlsZWQsICIKQEAgLTIyMzYsNiArMjI3OSwx NSBAQAogCQlnb3RvIHN0YXJ0aW87CiAgICAgICAgIH0KIAorCS8qIG1ha2Ugc3VyZSBjb250cm9s bGVyIGlzIGFsaXZlLiAqLworCWlmICghQ1RMUl9JU19BTElWRShoKSkgeworICAgICAgICAgICAg ICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IEkvTyBxdWl0ICIsIGgtPmN0bHIpOwor ICAgICAgICAgICAgICAgIGJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QoY3JlcSk7CisgICAgICAgICAg ICAgICAgY29tcGxldGVfYnVmZmVycyhjcmVxLT5iaCwgMCk7CisJCWVuZF90aGF0X3JlcXVlc3Rf bGFzdChjcmVxKTsKKwkJcmV0dXJuOworCX0KKwogCWlmICgoIGMgPSBjbWRfYWxsb2MoaCwgMSkp ID09IE5VTEwpCiAJCWdvdG8gc3RhcnRpbzsKIApAQCAtMjgzMyw3ICsyODg1LDE3NCBAQAogCWtm cmVlKGhiYVtpXSk7CiAJaGJhW2ldPU5VTEw7CiB9CisjaWZkZWYgQ09ORklHX0NJU1NfTU9OSVRP Ul9USFJFQUQKK3N0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKQor eworCS8qIElmIHdlIGdldCBoZXJlLCB0aGUgYm9hcmQgaXMgYXBwYXJlbnRseSBkZWFkLiAqLwor CWN0bHJfaW5mb190ICpoID0gaGJhW2N0bHJdOworCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogY29u dHJvbGxlciBub3QgcmVzcG9uZGluZy5cbiIsIGgtPmN0bHIpOworCWgtPmFsaXZlID0gMDsJLyog dGhlIGNvbnRyb2xsZXIgYXBwYXJlbnRseSBkaWVkLi4uICovIAorCisJc3Bpbl9sb2NrX2lycXNh dmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKGgtPnBk ZXYpOyAvKiBNYWtlIHN1cmUgaXQgaXMgcmVhbGx5IGRlYWQuICovCisKKwkvKiBtb3ZlIGV2ZXJ5 dGhpbmcgb2ZmIHRoZSByZXF1ZXN0IHF1ZXVlIG9udG8gdGhlIGNvbXBsZXRlZCBxdWV1ZSAqLwor CXdoaWxlKCAoYyA9IGgtPnJlcVEpICE9IE5VTEwgKSB7CisJCXJlbW92ZVEoJihoLT5yZXFRKSwg Yyk7CisJCWgtPlFkZXB0aC0tOworCQlhZGRRICgmKGgtPmNtcFEpLCBjKTsgCisJfQogCisJLyog Tm93LCBmYWlsIGV2ZXJ5dGhpbmcgb24gdGhlIGNvbXBsZXRlZCBxdWV1ZSB3aXRoIGEgSFcgZXJy b3IgKi8KKwl3aGlsZSggKGMgPSBoLT5jbXBRKSAhPSBOVUxMICkgeworCQlyZW1vdmVRKCZoLT5j bXBRLCBjKTsKKwkJYy0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPSBDTURfSEFSRFdBUkVfRVJS OworCQlpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX1JXUkVRKSB7CisJCQljb21wbGV0ZV9jb21tYW5k KGgsIGMsIDApOworCQl9IGVsc2UgaWYgKGMtPmNtZF90eXBlID09IENNRF9JT0NUTF9QRU5EKQor CQkJY29tcGxldGUoYy0+d2FpdGluZyk7CisjCQlpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUK KwkJCWVsc2UgaWYgKGMtPmNtZF90eXBlID09IENNRF9TQ1NJKQorCQkJCWNvbXBsZXRlX3Njc2lf Y29tbWFuZChjLCAwLCAwKTsKKyMJCWVuZGlmCisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KK3N0YXRpYyBpbnQgY2Npc3Nf bW9uaXRvcih2b2lkICpjdGxyKQoreworCS8qIElmIHRoZSBib2FyZCBmYWlscywgd2Ugb3VnaHQg dG8gZGV0ZWN0IHRoYXQuICBTbyB3ZSBwZXJpb2RpY2FsbHkgCisJc2VuZCBkb3duIGEgTm8tT3Ag bWVzc2FnZSBhbmQgZXhwZWN0IGl0IHRvIGNvbXBsZXRlIHF1aWNrbHkuICBJZiBpdCAKKwlkb2Vz bid0LCB0aGVuIHdlIGFzc3VtZSB0aGUgYm9hcmQgaXMgZGVhZCwgYW5kIGZhaWwgYWxsIGNvbW1h bmRzLiAgCisJVGhpcyBpcyB1c2VmdWwgbW9zdGx5IGluIGEgbXVsdGlwYXRoIGNvbmZpZ3VyYXRp b24sIHNvIHRoYXQgZmFpbG92ZXIKKwl3aWxsIGhhcHBlbi4gKi8KKworCWludCByYzsKKwljdGxy X2luZm9fdCAqaCA9IChjdGxyX2luZm9fdCAqKSBjdGxyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisJdTMyIGN1cnJlbnRfdGltZXI7CisKKwlkYWVtb25pemUoKTsKKwlleGl0X2ZpbGVzKGN1cnJl bnQpOworCXJlcGFyZW50X3RvX2luaXQoKTsKKworCXByaW50aygiY2Npc3MlZDogTW9uaXRvciB0 aHJlYWQgc3RhcnRpbmcuXG4iLCBoLT5jdGxyKTsgCisKKwkvKiBvbmx5IGxpc3RlbiB0byBzaWdu YWxzIGlmIHRoZSBIQSB3YXMgbG9hZGVkIGFzIGEgbW9kdWxlLiAgKi8KKyNkZWZpbmUgU0hVVERP V05fU0lHUyAgIChzaWdtYXNrKFNJR0tJTEwpfHNpZ21hc2soU0lHSU5UKXxzaWdtYXNrKFNJR1RF Uk0pKQorCXNpZ2luaXRzZXRpbnYoJmN1cnJlbnQtPmJsb2NrZWQsIFNIVVRET1dOX1NJR1MpOwor CXNwcmludGYoY3VycmVudC0+Y29tbSwgImNjaXNzbW9uJWQiLCBoLT5jdGxyKTsKKwloLT5tb25p dG9yX3RocmVhZCA9IGN1cnJlbnQ7CisKKwlpbml0X3RpbWVyKCZoLT53YXRjaGRvZyk7IAorCWgt PndhdGNoZG9nLmZ1bmN0aW9uID0gZmFpbF9hbGxfY21kczsKKwloLT53YXRjaGRvZy5kYXRhID0g KHVuc2lnbmVkIGxvbmcpIGgtPmN0bHI7CisJd2hpbGUgKDEpIHsKKyAgCQkvKiBjaGVjayBoZWFy dGJlYXQgdGltZXIgKi8KKyAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWVyID0gcmVhZGwoJmgt PmNmZ3RhYmxlLT5IZWFydEJlYXQpOworICAJCWN1cnJlbnRfdGltZXIgJj0gMHgwZmZmZmZmZjsK KyAgCQlpZiAoaGVhcnRiZWF0X3RpbWVyID09IGN1cnJlbnRfdGltZXIpIHsKKyAgCQkJZmFpbF9h bGxfY21kcyhoLT5jdGxyKTsKKyAgCQkJYnJlYWs7CisgIAkJfQorICAJCWVsc2UKKyAgCQkJaGVh cnRiZWF0X3RpbWVyID0gY3VycmVudF90aW1lcjsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNL X1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoaC0+bW9uaXRvcl9wZXJpb2Qg KiBIWik7CisJCWgtPndhdGNoZG9nLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiBoLT5tb25pdG9y X2RlYWRsaW5lOworCQlhZGRfdGltZXIoJmgtPndhdGNoZG9nKTsKKwkJLyogc2VuZCBkb3duIGEg dHJpdmlhbCBjb21tYW5kIChubyBvcCBtZXNzYWdlKSB0byBjdGxyICovCisJCXJjID0gc2VuZGNt ZF93aXRoaXJxKDMsIGgtPmN0bHIsIE5VTEwsIDAsIDAsIDAsIDAsIFRZUEVfTVNHKTsKKwkJZGVs X3RpbWVyKCZoLT53YXRjaGRvZyk7CisJCWlmICghQ1RMUl9JU19BTElWRShoKSkKKwkJCWJyZWFr OworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5J TkcgIiVzIHJlY2VpdmVkIHNpZ25hbC5cbiIsCisJCQkJY3VycmVudC0+Y29tbSk7CisJCQlicmVh azsKKwkJfQorCQlpZiAoaC0+bW9uaXRvcl9wZXJpb2QgPT0gMCkgLyogemVybyBwZXJpb2QgbWVh bnMgZXhpdCB0aHJlYWQgKi8KKwkJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9JTkZPICIlcyBl eGl0aW5nLlxuIiwgY3VycmVudC0+Y29tbSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVl c3RfbG9jaywgZmxhZ3MpOworCWgtPm1vbml0b3Jfc3RhcnRlZCA9IDA7CisJaC0+bW9uaXRvcl90 aHJlYWQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywg ZmxhZ3MpOworCXJldHVybiAwOworfQorc3RhdGljIGludCBzdGFydF9tb25pdG9yX3RocmVhZChj dGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciAqY21kLCAKKwkJdW5zaWduZWQgbG9uZyBjb3Vu dCwgaW50ICgqY2Npc3NfbW9uaXRvcikodm9pZCAqKSwgaW50ICpyYykKK3sKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCXVuc2lnbmVkIGludCBuZXdfcGVyaW9kLCBvbGRfcGVyaW9kLCBuZXdfZGVh ZGxpbmUsIG9sZF9kZWFkbGluZTsKKworCWlmIChzdHJuY21wKCJtb25pdG9yIiwgY21kLCA3KSA9 PSAwKSB7CisJCW5ld19wZXJpb2QgPSBzaW1wbGVfc3RydG9sKGNtZCArIDgsIE5VTEwsIDEwKTsK KwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQluZXdfZGVh ZGxpbmUgPSBoLT5tb25pdG9yX2RlYWRsaW5lOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp b19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoImRlYWRsaW5lIiwg Y21kLCA4KSA9PSAwKSB7CisJCW5ld19kZWFkbGluZSA9IHNpbXBsZV9zdHJ0b2woY21kICsgOSwg TlVMTCwgMTApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7 CisJCW5ld19wZXJpb2QgPSBoLT5tb25pdG9yX3BlcmlvZDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXJldHVybiAtMTsKKwlp ZiAobmV3X3BlcmlvZCAhPSAwICYmIG5ld19wZXJpb2QgPCBDQ0lTU19NSU5fUEVSSU9EKQorCQlu ZXdfcGVyaW9kID0gQ0NJU1NfTUlOX1BFUklPRDsKKwlpZiAobmV3X3BlcmlvZCA+IENDSVNTX01B WF9QRVJJT0QpCisJCW5ld19wZXJpb2QgPSBDQ0lTU19NQVhfUEVSSU9EOworCWlmIChuZXdfZGVh ZGxpbmUgPj0gbmV3X3BlcmlvZCkgeworCQluZXdfZGVhZGxpbmUgPSBuZXdfcGVyaW9kIC0gNTsK KwkJcHJpbnRrKEtFUk5fSU5GTyAic2V0dGluZyBkZWFkbGluZSB0byAlZFxuIiwgbmV3X2RlYWRs aW5lKTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOwor CWlmIChoLT5tb25pdG9yX3N0YXJ0ZWQgIT0gMCkgIHsKKwkJb2xkX3BlcmlvZCA9IGgtPm1vbml0 b3JfcGVyaW9kOworCQlvbGRfZGVhZGxpbmUgPSBoLT5tb25pdG9yX2RlYWRsaW5lOworCQloLT5t b25pdG9yX3BlcmlvZCA9IG5ld19wZXJpb2Q7CisJCWgtPm1vbml0b3JfZGVhZGxpbmUgPSBuZXdf ZGVhZGxpbmU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxh Z3MpOworCQlpZiAobmV3X3BlcmlvZCA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJjY2lz cyVkOiBzdG9wcGluZyBtb25pdG9yIHRocmVhZFxuIiwKKwkJCQloLT5jdGxyKTsKKwkJCSpyYyA9 IGNvdW50OworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG5ld19wZXJpb2QgIT0gb2xkX3Blcmlv ZCkgCisJCQlwcmludGsoS0VSTl9JTkZPICJjY2lzcyVkOiBhZGp1c3RpbmcgbW9uaXRvciB0aHJl YWQgIgorCQkJCSJwZXJpb2QgZnJvbSAlZCB0byAlZCBzZWNvbmRzXG4iLAorCQkJCWgtPmN0bHIs IG9sZF9wZXJpb2QsIG5ld19wZXJpb2QpOworCQlpZiAobmV3X2RlYWRsaW5lICE9IG9sZF9kZWFk bGluZSkgCisJCQlwcmludGsoS0VSTl9JTkZPICJjY2lzcyVkOiBhZGp1c3RpbmcgbW9uaXRvciB0 aHJlYWQgIgorCQkJCSJkZWFkbGluZSBmcm9tICVkIHRvICVkIHNlY29uZHNcbiIsCisJCQkJaC0+ Y3Rsciwgb2xkX2RlYWRsaW5lLCBuZXdfZGVhZGxpbmUpOworCQkqcmMgPSBjb3VudDsKKwkJcmV0 dXJuIDA7CisJfQorCWgtPm1vbml0b3Jfc3RhcnRlZCA9IDE7CisJaC0+bW9uaXRvcl9wZXJpb2Qg PSBuZXdfcGVyaW9kOworCWgtPm1vbml0b3JfZGVhZGxpbmUgPSBuZXdfZGVhZGxpbmU7CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJa2VybmVsX3Ro cmVhZChjY2lzc19tb25pdG9yLCBoLCAwKTsKKwkqcmMgPSBjb3VudDsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQga2lsbF9tb25pdG9yX3RocmVhZChjdGxyX2luZm9fdCAqaCkKK3sKKwlp ZiAoaC0+bW9uaXRvcl90aHJlYWQpCisJCXNlbmRfc2lnKFNJR0tJTEwsIGgtPm1vbml0b3JfdGhy ZWFkLCAxKTsKK30KKyNlbHNlCisjZGVmaW5lIGtpbGxfbW9uaXRvcl90aHJlYWQoaCkKKyNlbmRp ZgogLyoKICAqICBUaGlzIGlzIGl0LiAgRmluZCBhbGwgdGhlIGNvbnRyb2xsZXJzIGFuZCByZWdp c3RlciB0aGVtLiAgSSByZWFsbHkgaGF0ZQogICogIHN0ZWFsaW5nIGFsbCB0aGVzZSBtYWpvciBk ZXZpY2UgbnVtYmVycy4KQEAgLTI4NjEsNiArMzA4MCw3IEBACiAJc3ByaW50ZihoYmFbaV0tPmRl dm5hbWUsICJjY2lzcyVkIiwgaSk7CiAJaGJhW2ldLT5jdGxyID0gaTsKIAloYmFbaV0tPnBkZXYg PSBwZGV2OworCUFTU0VSVF9DVExSX0FMSVZFKGhiYVtpXSk7CiAKIAlpZiAocmVnaXN0ZXJfYmxr ZGV2KE1BSk9SX05SK2ksIGhiYVtpXS0+ZGV2bmFtZSwgJmNjaXNzX2ZvcHMpKSB7CiAJCXByaW50 ayhLRVJOX0VSUiAiY2Npc3M6ICBVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAiCkBAIC0yOTkz LDE0ICszMjEzLDE3IEBACiAJCQkiYWxyZWFkeSBiZSByZW1vdmVkIFxuIik7CiAJCXJldHVybjsK IAl9Ci0gCS8qIFR1cm4gYm9hcmQgaW50ZXJydXB0cyBvZmYgIGFuZCBzZW5kIHRoZSBmbHVzaCBj YWNoZSBjb21tYW5kICovCi0gCS8qIHNlbmRjbWQgd2lsbCB0dXJuIG9mZiBpbnRlcnJ1cHQsIGFu ZCBzZW5kIHRoZSBmbHVzaC4uLgotIAkgKiBUbyB3cml0ZSBhbGwgZGF0YSBpbiB0aGUgYmF0dGVy eSBiYWNrZWQgY2FjaGUgdG8gZGlza3MgKi8KKwlraWxsX21vbml0b3JfdGhyZWFkKGhiYVtpXSk7 CisJLyogbm8gc2Vuc2UgaW4gdHJ5aW5nIHRvIGZsdXNoIGEgZGVhZCBib2FyZCdzIGNhY2hlLiAq LworCWlmIChDVExSX0lTX0FMSVZFKGhiYVtpXSkpIHsKKwkJLyogVHVybiBib2FyZCBpbnRlcnJ1 cHRzIG9mZiBhbmQgZmx1c2ggdGhlIGNhY2hlICovCisJCS8qIHdyaXRlIGFsbCBkYXRhIGluIHRo ZSBiYXR0ZXJ5IGJhY2tlZCBjYWNoZSB0byBkaXNrcyAqLwogIAltZW1zZXQoZmx1c2hfYnVmLCAw LCA0KTsKLSAJcmV0dXJuX2NvZGUgPSBzZW5kY21kKENDSVNTX0NBQ0hFX0ZMVVNILCBpLCBmbHVz aF9idWYsIDQsMCwwLDAsIE5VTEwpOwotIAlpZiAocmV0dXJuX2NvZGUgIT0gSU9fT0spIHsKKwkJ cmV0dXJuX2NvZGUgPSBzZW5kY21kKENDSVNTX0NBQ0hFX0ZMVVNILCBpLCBmbHVzaF9idWYsCisJ CQkJCTQsIDAsIDAsIDAsIE5VTEwpOworCQlpZiAocmV0dXJuX2NvZGUgIT0gSU9fT0spCiAgCQlw cmludGsoS0VSTl9XQVJOSU5HIAotCQkJIkVycm9yIEZsdXNoaW5nIGNhY2hlIG9uIGNvbnRyb2xs ZXIgJWRcbiIsIGkpOworCQkJCSJjY2lzcyVkOiBFcnJvciBmbHVzaGluZyBjYWNoZVxuIiwgaSk7 CiAgCX0KIAlmcmVlX2lycShoYmFbaV0tPmludHIsIGhiYVtpXSk7CiAJcGNpX3NldF9kcnZkYXRh KHBkZXYsIE5VTEwpOwpkaWZmIC1idXJOIGx4MjQyMnA5Lm9yaWcvZHJpdmVycy9ibG9jay9jY2lz cy5oIGx4MjQyMnA5L2RyaXZlcnMvYmxvY2svY2Npc3MuaAotLS0gbHgyNDIycDkub3JpZy9kcml2 ZXJzL2Jsb2NrL2NjaXNzLmgJMjAwMy0wNy0zMSAwNTo1MDoxMC4wMDAwMDAwMDAgLTA1MDAKKysr IGx4MjQyMnA5L2RyaXZlcnMvYmxvY2svY2Npc3MuaAkyMDAzLTA3LTMxIDA2OjUzOjU1LjAwMDAw MDAwMCAtMDUwMApAQCAtOTEsNiArOTEsNDAgQEAKICNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RB UEUKIAl2b2lkICpzY3NpX2N0bHI7IC8qIHB0ciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBzY3Np IHJlbGF0ZWQgc3R1ZmYgKi8KICNlbmRpZgorI2lmZGVmIENPTkZJR19DSVNTX01PTklUT1JfVEhS RUFECisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2c7CisJc3RydWN0IHRhc2tfc3RydWN0ICpt b25pdG9yX3RocmVhZDsgCisJdW5zaWduZWQgaW50IG1vbml0b3JfcGVyaW9kOworCXVuc2lnbmVk IGludCBtb25pdG9yX2RlYWRsaW5lOworCXVuc2lnbmVkIGNoYXIgYWxpdmU7CisJdW5zaWduZWQg Y2hhciBtb25pdG9yX3N0YXJ0ZWQ7CisjZGVmaW5lIENDSVNTX01JTl9QRVJJT0QgMTAKKyNkZWZp bmUgQ0NJU1NfTUFYX1BFUklPRCAzNjAwIAorI2RlZmluZSBDVExSX0lTX0FMSVZFKGgpIChoLT5h bGl2ZSkKKyNkZWZpbmUgQVNTRVJUX0NUTFJfQUxJVkUoaCkgewloLT5hbGl2ZSA9IDE7IFwKKwkJ CQloLT5tb25pdG9yX3BlcmlvZCA9IDA7IFwKKwkJCQloLT5tb25pdG9yX3N0YXJ0ZWQgPSAwOyB9 CisjZGVmaW5lIE1PTklUT1JfU1RBVFVTX1BBVFRFUk4gIlN0YXR1czogJXNcbiIKKyNkZWZpbmUg Q1RMUl9TVEFUVVMoaCkgQ1RMUl9JU19BTElWRShoKSA/ICJvcGVyYXRpb25hbCIgOiAiZmFpbGVk IgorI2RlZmluZSBNT05JVE9SX1BFUklPRF9QQVRURVJOICJNb25pdG9yIHRocmVhZCBwZXJpb2Q6 ICVkXG4iCisjZGVmaW5lIE1PTklUT1JfUEVSSU9EX1ZBTFVFKGgpIChoLT5tb25pdG9yX3Blcmlv ZCkKKyNkZWZpbmUgTU9OSVRPUl9ERUFETElORV9QQVRURVJOICJNb25pdG9yIHRocmVhZCBkZWFk bGluZTogJWRcbiIKKyNkZWZpbmUgTU9OSVRPUl9ERUFETElORV9WQUxVRShoKSAoaC0+bW9uaXRv cl9kZWFkbGluZSkKKyNkZWZpbmUgU1RBUlRfTU9OSVRPUl9USFJFQUQoaCwgY21kLCBjb3VudCwg Y2Npc3NfbW9uaXRvciwgcmMpIFwKKwlzdGFydF9tb25pdG9yX3RocmVhZChoLCBjbWQsIGNvdW50 LCBjY2lzc19tb25pdG9yLCByYykKKyNlbHNlCisKKyNkZWZpbmUgTU9OSVRPUl9QRVJJT0RfUEFU VEVSTiAiJXMiCisjZGVmaW5lIE1PTklUT1JfUEVSSU9EX1ZBTFVFKGgpICIiCisjZGVmaW5lIE1P TklUT1JfREVBRExJTkVfUEFUVEVSTiAiJXMiCisjZGVmaW5lIE1PTklUT1JfREVBRExJTkVfVkFM VUUoaCkgIiIKKyNkZWZpbmUgTU9OSVRPUl9TVEFUVVNfUEFUVEVSTiAiJXNcbiIKKyNkZWZpbmUg Q1RMUl9TVEFUVVMoaCkgIiIKKyNkZWZpbmUgQ1RMUl9JU19BTElWRShoKSAoMSkKKyNkZWZpbmUg QVNTRVJUX0NUTFJfQUxJVkUoaCkKKyNkZWZpbmUgU1RBUlRfTU9OSVRPUl9USFJFQUQoYSxiLGMs ZCxyYykgKCpyYyA9PSAwKQorCisjZW5kaWYKIH07CiAKIC8qICBEZWZpbmluZyB0aGUgZGlmZmVu dCBhY2Nlc3NfbWVudGhvZHMgKi8K ------_=_NextPart_001_01C357AC.5D844650--