From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BE97C433FE for ; Thu, 23 Dec 2021 08:11:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235156AbhLWILS (ORCPT ); Thu, 23 Dec 2021 03:11:18 -0500 Received: from out30-43.freemail.mail.aliyun.com ([115.124.30.43]:45209 "EHLO out30-43.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243034AbhLWILR (ORCPT ); Thu, 23 Dec 2021 03:11:17 -0500 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R121e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e01424;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=13;SR=0;TI=SMTPD_---0V.Wa1Z2_1640247072; Received: from 30.240.114.155(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0V.Wa1Z2_1640247072) by smtp.aliyun-inc.com(127.0.0.1); Thu, 23 Dec 2021 16:11:14 +0800 Message-ID: <8d415145-01bc-ce57-fd00-91ca63090caa@linux.alibaba.com> Date: Thu, 23 Dec 2021 16:11:11 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 From: Shuai Xue Subject: Re: [RESEND PATCH v4] ACPI: Move sdei_init and ghes_init ahead to handle platform errors earlier To: Bjorn Helgaas Cc: bp@alien8.de, tony.luck@intel.com, james.morse@arm.com, lenb@kernel.org, rjw@rjwysocki.net, bhelgaas@google.com, zhangliguang@linux.alibaba.com, zhuo.song@linux.alibaba.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org References: <20211221231701.GA1125162@bhelgaas> Content-Language: en-US In-Reply-To: <20211221231701.GA1125162@bhelgaas> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Hi, Bjorn, Thank you for your comments. 在 2021/12/22 AM7:17, Bjorn Helgaas 写道: > On Thu, Dec 16, 2021 at 09:34:56PM +0800, Shuai Xue wrote: >> On an ACPI system, ACPI is initialised very early from a subsys_initcall(), >> while SDEI is not ready until a subsys_initcall_sync(). >> >> The SDEI driver provides functions (e.g. apei_sdei_register_ghes, >> apei_sdei_unregister_ghes) to register or unregister event callback for >> dispatcher in firmware. When the GHES driver probing, it registers the >> corresponding callback according to the notification type specified by >> GHES. If the GHES notification type is SDEI, the GHES driver will call >> apei_sdei_register_ghes to register event call. >> >> When the firmware emits an event, it migrates the handling of the event >> into the kernel at the registered entry-point __sdei_asm_handler. And >> finally, the kernel will call the registered event callback and return >> status_code to indicate the status of event handling. SDEI_EV_FAILED >> indicates that the kernel failed to handle the event. >> >> Consequently, when an error occurs during kernel booting, the kernel is >> unable to handle and report errors until the GHES driver is initialized by >> device_initcall(), in which the event callback is registered. All errors >> that occurred before GHES initialization are missed and there is no chance >> to report and find them again. >> >> From commit e147133a42cb ("ACPI / APEI: Make hest.c manage the estatus >> memory pool") was merged, ghes_init() relies on acpi_hest_init() to manage >> the estatus memory pool. On the other hand, ghes_init() relies on >> sdei_init() to detect the SDEI version and the framework for registering >> and unregistering events. > >> By the way, I don't figure out why acpi_hest_init is called in >> acpi_pci_root_init, it don't rely on any other thing. May it could >> be moved further, following acpi_iort_init in acpi_init. > > I think you should drop the "By the way ..." text or move it after the > "---" at the bottom of your commit log. It doesn't help understand > this patch. I will fix it in next version. >> sdei_init() relies on ACPI table which is initialized >> subsys_initcall(): acpi_init(), acpi_bus_init(), acpi_load_tables(), >> acpi_tb_laod_namespace(). May it should be also moved further, >> after acpi_load_tables. > > This text also doesn't seem relevant to this patch. I will delete it in next version. >> In this patch, move sdei_init and ghes_init as far ahead as >> possible, right after acpi_hest_init(). > > I'm having a hard time figuring out the reason for this patch. > > Apparently the relevant parts are sdei_init() and ghes_init(). > Today they are executed in that order: > > subsys_initcall_sync(sdei_init); > device_initcall(ghes_init); > > After this patch, they would be executed in the same order, but called > explicitly instead of as initcalls: > > acpi_pci_root_init() > { > acpi_hest_init(); > sdei_init(); > ghes_init(); > ... > > Explicit calls are certainly better than initcalls, but that doesn't > seem to be the reason for this patch. > > Does this patch fix a bug? If so, what is the bug? Yes. When the kernel booting, the console logs many times from firmware before GHES drivers init: Trip in MM PCIe RAS handle(Intr:910) Clean PE[1.1.1] ERR_STS:0x4000100 -> 0 INT_STS:F0000000 Find RP(98:1.0) --Walk dev(98:1.0) CE:0 UCE:4000 ... ERROR: sdei_dispatch_event(32a) ret:-1 --handler(910) end This is because the callback function has not been registered yet. Previously reported errors will be overwritten by new ones. Therefore, all errors that occurred before GHES initialization are missed and there is no chance to report and find them again. > You say that currently "errors that occur before GHES initialization > are missed". Isn't that still true after this patch? Does this patch > merely reduce the time before GHES initialization? If so, I'm > dubious, because we have to tolerate an arbitrary amount of time > there. After this patch, there are still errors missing. As you mentioned, we have to tolerate it until the software reporting capability is built. Yes, this patch merely reduce the time before GHES initialization. The boot dmesg before this patch: [ 3.688586] HEST: Table parsing has been initialized. ... [ 33.204340] calling sdei_init+0x0/0x120 @ 1 [ 33.208645] sdei: SDEIv1.0 (0x0) detected in firmware. ... [ 36.005390] calling ghes_init+0x0/0x11c @ 1 [ 36.190021] GHES: APEI firmware first mode is enabled by APEI bit and WHEA _OSC. After this patch, the boot dmesg like bellow: [ 3.688664] HEST: Table parsing has been initialized. [ 3.688691] sdei: SDEIv1.0 (0x0) detected in firmware. [ 3.694557] GHES: APEI firmware first mode is enabled by APEI bit and WHEA _OSC. As we can see, the initialization of GHES is advanced by 33 seconds. So, in my opinion, this patch is necessary, right? (It should be noted that the effect of optimization varies with the platform.) > s/acpi_tb_laod_namespace/acpi_tb_load_namespace/ > You use "()" after function names sometimes, but not always. Please > do it consistently. Thank you for pointing this out. I will fix it in next version. >> -device_initcall(ghes_init); > >> void __init acpi_pci_root_init(void) >> { >> acpi_hest_init(); >> + sdei_init(); >> + ghes_init(); > > What's the connection between PCI, SDEI, and GHES? As far as I can > tell, SDEI and GHES are not PCI-specific, so it doesn't seem like they > should be initialized here in acpi_pci_root_init(). The only reason is that acpi_hest_init() is initialized here. >From commit e147133a42cb ("ACPI / APEI: Make hest.c manage the estatus memory pool") was merged, ghes_init() relies on acpi_hest_init() to manage the estatus memory pool. On the other hand, ghes_init() relies on sdei_init() to detect the SDEI version and the framework for registering and unregistering events. The dependencies are as follows ghes_init() => acpi_hest_init() ghes_init() => sdei_init() I don't figure out why acpi_hest_init() is called in acpi_pci_root_init(), it don't rely on any other thing. I am wondering that should we moved all of them further? e.g. following acpi_iort_init() in acpi_init(). Best Regards, Shuai From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C519AC433F5 for ; Thu, 23 Dec 2021 08:35:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:Subject: From:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=L4cwYNr3kCVQYix6mDIUbES0AKrkJjIkk+H+O5Xv4Mk=; b=0Zbdj9jmSp4AvK LV0Noymu21IRNpJZ5ZAHtiY0Vb8qZ/ttDpYSB09YhMt4B7lWv56sG9jbuuFos/hnKI0Zu3N+Eu+zb 5kBSsI3mY37bNYajBBoWgr4lJrogcC+rwMeg7nrT3aylpgPFt5r/qUOhkQvdC+nuzfsq1EQg5MwnZ 4Lcvs1fiaw/CNGnjZhOTfZAvPYxSxZK9to2I6KleplfBTfRBBcr9q7ibuc1CESRWx1h3v7HLtFpX8 7qb4bL+YVxhHdLb3hrEHL0x/KdLpJNLdsMxz4WMK3ekUrE7k1CmJ/PEOHjrA8heFtNyyy1gyThMl1 gRon+TUifInVmOHooIkA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n0JXV-00CH3P-GK; Thu, 23 Dec 2021 08:33:30 +0000 Received: from out30-57.freemail.mail.aliyun.com ([115.124.30.57]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n0JC5-00C8yL-NT for linux-arm-kernel@lists.infradead.org; Thu, 23 Dec 2021 08:11:23 +0000 X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R121e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e01424; MF=xueshuai@linux.alibaba.com; NM=1; PH=DS; RN=13; SR=0; TI=SMTPD_---0V.Wa1Z2_1640247072; Received: from 30.240.114.155(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0V.Wa1Z2_1640247072) by smtp.aliyun-inc.com(127.0.0.1); Thu, 23 Dec 2021 16:11:14 +0800 Message-ID: <8d415145-01bc-ce57-fd00-91ca63090caa@linux.alibaba.com> Date: Thu, 23 Dec 2021 16:11:11 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 From: Shuai Xue Subject: Re: [RESEND PATCH v4] ACPI: Move sdei_init and ghes_init ahead to handle platform errors earlier To: Bjorn Helgaas Cc: bp@alien8.de, tony.luck@intel.com, james.morse@arm.com, lenb@kernel.org, rjw@rjwysocki.net, bhelgaas@google.com, zhangliguang@linux.alibaba.com, zhuo.song@linux.alibaba.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org References: <20211221231701.GA1125162@bhelgaas> Content-Language: en-US In-Reply-To: <20211221231701.GA1125162@bhelgaas> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211223_001121_985153_3CE7B844 X-CRM114-Status: GOOD ( 34.88 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksIEJqb3JuLAoKVGhhbmsgeW91IGZvciB5b3VyIGNvbW1lbnRzLgoK5ZyoIDIwMjEvMTIvMjIg QU03OjE3LCBCam9ybiBIZWxnYWFzIOWGmemBkzoKPiBPbiBUaHUsIERlYyAxNiwgMjAyMSBhdCAw OTozNDo1NlBNICswODAwLCBTaHVhaSBYdWUgd3JvdGU6Cj4+IE9uIGFuIEFDUEkgc3lzdGVtLCBB Q1BJIGlzIGluaXRpYWxpc2VkIHZlcnkgZWFybHkgZnJvbSBhIHN1YnN5c19pbml0Y2FsbCgpLAo+ PiB3aGlsZSBTREVJIGlzIG5vdCByZWFkeSB1bnRpbCBhIHN1YnN5c19pbml0Y2FsbF9zeW5jKCku Cj4+Cj4+IFRoZSBTREVJIGRyaXZlciBwcm92aWRlcyBmdW5jdGlvbnMgKGUuZy4gYXBlaV9zZGVp X3JlZ2lzdGVyX2doZXMsCj4+IGFwZWlfc2RlaV91bnJlZ2lzdGVyX2doZXMpIHRvIHJlZ2lzdGVy IG9yIHVucmVnaXN0ZXIgZXZlbnQgY2FsbGJhY2sgZm9yCj4+IGRpc3BhdGNoZXIgaW4gZmlybXdh cmUuIFdoZW4gdGhlIEdIRVMgZHJpdmVyIHByb2JpbmcsIGl0IHJlZ2lzdGVycyB0aGUKPj4gY29y cmVzcG9uZGluZyBjYWxsYmFjayBhY2NvcmRpbmcgdG8gdGhlIG5vdGlmaWNhdGlvbiB0eXBlIHNw ZWNpZmllZCBieQo+PiBHSEVTLiBJZiB0aGUgR0hFUyBub3RpZmljYXRpb24gdHlwZSBpcyBTREVJ LCB0aGUgR0hFUyBkcml2ZXIgd2lsbCBjYWxsCj4+IGFwZWlfc2RlaV9yZWdpc3Rlcl9naGVzIHRv IHJlZ2lzdGVyIGV2ZW50IGNhbGwuCj4+Cj4+IFdoZW4gdGhlIGZpcm13YXJlIGVtaXRzIGFuIGV2 ZW50LCBpdCBtaWdyYXRlcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGV2ZW50Cj4+IGludG8gdGhlIGtl cm5lbCBhdCB0aGUgcmVnaXN0ZXJlZCBlbnRyeS1wb2ludCBfX3NkZWlfYXNtX2hhbmRsZXIuIEFu ZAo+PiBmaW5hbGx5LCB0aGUga2VybmVsIHdpbGwgY2FsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBj YWxsYmFjayBhbmQgcmV0dXJuCj4+IHN0YXR1c19jb2RlIHRvIGluZGljYXRlIHRoZSBzdGF0dXMg b2YgZXZlbnQgaGFuZGxpbmcuIFNERUlfRVZfRkFJTEVECj4+IGluZGljYXRlcyB0aGF0IHRoZSBr ZXJuZWwgZmFpbGVkIHRvIGhhbmRsZSB0aGUgZXZlbnQuCj4+Cj4+IENvbnNlcXVlbnRseSwgd2hl biBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGtlcm5lbCBib290aW5nLCB0aGUga2VybmVsIGlzCj4+ IHVuYWJsZSB0byBoYW5kbGUgYW5kIHJlcG9ydCBlcnJvcnMgdW50aWwgdGhlIEdIRVMgZHJpdmVy IGlzIGluaXRpYWxpemVkIGJ5Cj4+IGRldmljZV9pbml0Y2FsbCgpLCBpbiB3aGljaCB0aGUgZXZl bnQgY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZC4gQWxsIGVycm9ycwo+PiB0aGF0IG9jY3VycmVkIGJl Zm9yZSBHSEVTIGluaXRpYWxpemF0aW9uIGFyZSBtaXNzZWQgYW5kIHRoZXJlIGlzIG5vIGNoYW5j ZQo+PiB0byByZXBvcnQgYW5kIGZpbmQgdGhlbSBhZ2Fpbi4KPj4KPj4gRnJvbSBjb21taXQgZTE0 NzEzM2E0MmNiICgiQUNQSSAvIEFQRUk6IE1ha2UgaGVzdC5jIG1hbmFnZSB0aGUgZXN0YXR1cwo+ PiBtZW1vcnkgcG9vbCIpIHdhcyBtZXJnZWQsIGdoZXNfaW5pdCgpIHJlbGllcyBvbiBhY3BpX2hl c3RfaW5pdCgpIHRvIG1hbmFnZQo+PiB0aGUgZXN0YXR1cyBtZW1vcnkgcG9vbC4gT24gdGhlIG90 aGVyIGhhbmQsIGdoZXNfaW5pdCgpIHJlbGllcyBvbgo+PiBzZGVpX2luaXQoKSB0byBkZXRlY3Qg dGhlIFNERUkgdmVyc2lvbiBhbmQgdGhlIGZyYW1ld29yayBmb3IgcmVnaXN0ZXJpbmcKPj4gYW5k IHVucmVnaXN0ZXJpbmcgZXZlbnRzLgo+IAo+PiBCeSB0aGUgd2F5LCBJIGRvbid0IGZpZ3VyZSBv dXQgd2h5IGFjcGlfaGVzdF9pbml0IGlzIGNhbGxlZCBpbgo+PiBhY3BpX3BjaV9yb290X2luaXQs IGl0IGRvbid0IHJlbHkgb24gYW55IG90aGVyIHRoaW5nLiBNYXkgaXQgY291bGQKPj4gYmUgbW92 ZWQgZnVydGhlciwgZm9sbG93aW5nIGFjcGlfaW9ydF9pbml0IGluIGFjcGlfaW5pdC4KPiAKPiBJ IHRoaW5rIHlvdSBzaG91bGQgZHJvcCB0aGUgIkJ5IHRoZSB3YXkgLi4uIiB0ZXh0IG9yIG1vdmUg aXQgYWZ0ZXIgdGhlCj4gIi0tLSIgYXQgdGhlIGJvdHRvbSBvZiB5b3VyIGNvbW1pdCBsb2cuICBJ dCBkb2Vzbid0IGhlbHAgdW5kZXJzdGFuZAo+IHRoaXMgcGF0Y2guCgpJIHdpbGwgZml4IGl0IGlu IG5leHQgdmVyc2lvbi4KCj4+IHNkZWlfaW5pdCgpIHJlbGllcyBvbiBBQ1BJIHRhYmxlIHdoaWNo IGlzIGluaXRpYWxpemVkCj4+IHN1YnN5c19pbml0Y2FsbCgpOiBhY3BpX2luaXQoKSwgYWNwaV9i dXNfaW5pdCgpLCBhY3BpX2xvYWRfdGFibGVzKCksCj4+IGFjcGlfdGJfbGFvZF9uYW1lc3BhY2Uo KS4gIE1heSBpdCBzaG91bGQgYmUgYWxzbyBtb3ZlZCBmdXJ0aGVyLAo+PiBhZnRlciBhY3BpX2xv YWRfdGFibGVzLgo+IAo+IFRoaXMgdGV4dCBhbHNvIGRvZXNuJ3Qgc2VlbSByZWxldmFudCB0byB0 aGlzIHBhdGNoLgoKSSB3aWxsIGRlbGV0ZSBpdCBpbiBuZXh0IHZlcnNpb24uCgo+PiBJbiB0aGlz IHBhdGNoLCBtb3ZlIHNkZWlfaW5pdCBhbmQgZ2hlc19pbml0IGFzIGZhciBhaGVhZCBhcwo+PiBw b3NzaWJsZSwgcmlnaHQgYWZ0ZXIgYWNwaV9oZXN0X2luaXQoKS4KPiAKPiBJJ20gaGF2aW5nIGEg aGFyZCB0aW1lIGZpZ3VyaW5nIG91dCB0aGUgcmVhc29uIGZvciB0aGlzIHBhdGNoLgo+IAo+IEFw cGFyZW50bHkgdGhlIHJlbGV2YW50IHBhcnRzIGFyZSBzZGVpX2luaXQoKSBhbmQgZ2hlc19pbml0 KCkuCj4gVG9kYXkgdGhleSBhcmUgZXhlY3V0ZWQgaW4gdGhhdCBvcmRlcjoKPiAKPiAgIHN1YnN5 c19pbml0Y2FsbF9zeW5jKHNkZWlfaW5pdCk7Cj4gICBkZXZpY2VfaW5pdGNhbGwoZ2hlc19pbml0 KTsKPiAKPiBBZnRlciB0aGlzIHBhdGNoLCB0aGV5IHdvdWxkIGJlIGV4ZWN1dGVkIGluIHRoZSBz YW1lIG9yZGVyLCBidXQgY2FsbGVkCj4gZXhwbGljaXRseSBpbnN0ZWFkIG9mIGFzIGluaXRjYWxs czoKPiAKPiAgIGFjcGlfcGNpX3Jvb3RfaW5pdCgpCj4gICB7Cj4gICAgIGFjcGlfaGVzdF9pbml0 KCk7Cj4gICAgIHNkZWlfaW5pdCgpOwo+ICAgICBnaGVzX2luaXQoKTsKPiAgICAgLi4uCj4gCj4g RXhwbGljaXQgY2FsbHMgYXJlIGNlcnRhaW5seSBiZXR0ZXIgdGhhbiBpbml0Y2FsbHMsIGJ1dCB0 aGF0IGRvZXNuJ3QKPiBzZWVtIHRvIGJlIHRoZSByZWFzb24gZm9yIHRoaXMgcGF0Y2guCj4gCj4g RG9lcyB0aGlzIHBhdGNoIGZpeCBhIGJ1Zz8gIElmIHNvLCB3aGF0IGlzIHRoZSBidWc/CgpZZXMu IFdoZW4gdGhlIGtlcm5lbCBib290aW5nLCB0aGUgY29uc29sZSBsb2dzIG1hbnkgdGltZXMgZnJv bSBmaXJtd2FyZQpiZWZvcmUgR0hFUyBkcml2ZXJzIGluaXQ6CgoJVHJpcCBpbiBNTSBQQ0llIFJB UyBoYW5kbGUoSW50cjo5MTApCiAgCUNsZWFuIFBFWzEuMS4xXSBFUlJfU1RTOjB4NDAwMDEwMCAt PiAwIElOVF9TVFM6RjAwMDAwMDAKCUZpbmQgUlAoOTg6MS4wKQoJLS1XYWxrIGRldig5ODoxLjAp IENFOjAgVUNFOjQwMDAKCS4uLgoJRVJST1I6ICAgc2RlaV9kaXNwYXRjaF9ldmVudCgzMmEpIHJl dDotMQoJLS1oYW5kbGVyKDkxMCkgZW5kCgpUaGlzIGlzIGJlY2F1c2UgdGhlIGNhbGxiYWNrIGZ1 bmN0aW9uIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIHlldC4KUHJldmlvdXNseSByZXBvcnRlZCBl cnJvcnMgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBuZXcgb25lcy4gVGhlcmVmb3JlLAphbGwgZXJy b3JzIHRoYXQgb2NjdXJyZWQgYmVmb3JlIEdIRVMgaW5pdGlhbGl6YXRpb24gYXJlIG1pc3NlZAph bmQgdGhlcmUgaXMgbm8gY2hhbmNlIHRvIHJlcG9ydCBhbmQgZmluZCB0aGVtIGFnYWluLgoKCj4g WW91IHNheSB0aGF0IGN1cnJlbnRseSAiZXJyb3JzIHRoYXQgb2NjdXIgYmVmb3JlIEdIRVMgaW5p dGlhbGl6YXRpb24KPiBhcmUgbWlzc2VkIi4gIElzbid0IHRoYXQgc3RpbGwgdHJ1ZSBhZnRlciB0 aGlzIHBhdGNoPyAgRG9lcyB0aGlzIHBhdGNoCj4gbWVyZWx5IHJlZHVjZSB0aGUgdGltZSBiZWZv cmUgR0hFUyBpbml0aWFsaXphdGlvbj8gIElmIHNvLCBJJ20KPiBkdWJpb3VzLCBiZWNhdXNlIHdl IGhhdmUgdG8gdG9sZXJhdGUgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiB0aW1lCj4gdGhlcmUuCkFm dGVyIHRoaXMgcGF0Y2gsIHRoZXJlIGFyZSBzdGlsbCBlcnJvcnMgbWlzc2luZy4gQXMgeW91IG1l bnRpb25lZCwKd2UgaGF2ZSB0byB0b2xlcmF0ZSBpdCB1bnRpbCB0aGUgc29mdHdhcmUgcmVwb3J0 aW5nIGNhcGFiaWxpdHkgaXMgYnVpbHQuCgpZZXMsIHRoaXMgcGF0Y2ggbWVyZWx5IHJlZHVjZSB0 aGUgdGltZSBiZWZvcmUgR0hFUyBpbml0aWFsaXphdGlvbi4gVGhlIGJvb3QKZG1lc2cgYmVmb3Jl IHRoaXMgcGF0Y2g6CgoJWyAgICAzLjY4ODU4Nl0gSEVTVDogVGFibGUgcGFyc2luZyBoYXMgYmVl biBpbml0aWFsaXplZC4KCS4uLgoJWyAgIDMzLjIwNDM0MF0gY2FsbGluZyAgc2RlaV9pbml0KzB4 MC8weDEyMCBAIDEKCVsgICAzMy4yMDg2NDVdIHNkZWk6IFNERUl2MS4wICgweDApIGRldGVjdGVk IGluIGZpcm13YXJlLgoJLi4uCglbICAgMzYuMDA1MzkwXSBjYWxsaW5nICBnaGVzX2luaXQrMHgw LzB4MTFjIEAgMQoJWyAgIDM2LjE5MDAyMV0gR0hFUzogQVBFSSBmaXJtd2FyZSBmaXJzdCBtb2Rl IGlzIGVuYWJsZWQgYnkgQVBFSSBiaXQgYW5kIFdIRUEgX09TQy4KCgpBZnRlciB0aGlzIHBhdGNo LCB0aGUgYm9vdCBkbWVzZyBsaWtlIGJlbGxvdzoKCglbICAgIDMuNjg4NjY0XSBIRVNUOiBUYWJs ZSBwYXJzaW5nIGhhcyBiZWVuIGluaXRpYWxpemVkLgoJWyAgICAzLjY4ODY5MV0gc2RlaTogU0RF SXYxLjAgKDB4MCkgZGV0ZWN0ZWQgaW4gZmlybXdhcmUuCglbICAgIDMuNjk0NTU3XSBHSEVTOiBB UEVJIGZpcm13YXJlIGZpcnN0IG1vZGUgaXMgZW5hYmxlZCBieSBBUEVJIGJpdCBhbmQgV0hFQSBf T1NDLgoKQXMgd2UgY2FuIHNlZSwgdGhlIGluaXRpYWxpemF0aW9uIG9mIEdIRVMgaXMgYWR2YW5j ZWQgYnkgMzMgc2Vjb25kcy4KU28sIGluIG15IG9waW5pb24sIHRoaXMgcGF0Y2ggaXMgbmVjZXNz YXJ5LCByaWdodD8KKEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZSBlZmZlY3Qgb2Ygb3B0aW1p emF0aW9uIHZhcmllcyB3aXRoIHRoZSBwbGF0Zm9ybS4pCgo+IHMvYWNwaV90Yl9sYW9kX25hbWVz cGFjZS9hY3BpX3RiX2xvYWRfbmFtZXNwYWNlLwoKPiBZb3UgdXNlICIoKSIgYWZ0ZXIgZnVuY3Rp b24gbmFtZXMgc29tZXRpbWVzLCBidXQgbm90IGFsd2F5cy4gIFBsZWFzZQo+IGRvIGl0IGNvbnNp c3RlbnRseS4KClRoYW5rIHlvdSBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuIEkgd2lsbCBmaXggaXQg aW4gbmV4dCB2ZXJzaW9uLgoKCj4+IC1kZXZpY2VfaW5pdGNhbGwoZ2hlc19pbml0KTsKPiAKPj4g IHZvaWQgX19pbml0IGFjcGlfcGNpX3Jvb3RfaW5pdCh2b2lkKQo+PiAgewo+PiAgCWFjcGlfaGVz dF9pbml0KCk7Cj4+ICsJc2RlaV9pbml0KCk7Cj4+ICsJZ2hlc19pbml0KCk7Cj4gCj4gV2hhdCdz IHRoZSBjb25uZWN0aW9uIGJldHdlZW4gUENJLCBTREVJLCBhbmQgR0hFUz8gIEFzIGZhciBhcyBJ IGNhbgo+IHRlbGwsIFNERUkgYW5kIEdIRVMgYXJlIG5vdCBQQ0ktc3BlY2lmaWMsIHNvIGl0IGRv ZXNuJ3Qgc2VlbSBsaWtlIHRoZXkKPiBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgaGVyZSBpbiBhY3Bp X3BjaV9yb290X2luaXQoKS4KClRoZSBvbmx5IHJlYXNvbiBpcyB0aGF0IGFjcGlfaGVzdF9pbml0 KCkgaXMgaW5pdGlhbGl6ZWQgaGVyZS4KCkZyb20gY29tbWl0IGUxNDcxMzNhNDJjYiAoIkFDUEkg LyBBUEVJOiBNYWtlIGhlc3QuYyBtYW5hZ2UgdGhlIGVzdGF0dXMKbWVtb3J5IHBvb2wiKSB3YXMg bWVyZ2VkLCBnaGVzX2luaXQoKSByZWxpZXMgb24gYWNwaV9oZXN0X2luaXQoKSB0byBtYW5hZ2UK dGhlIGVzdGF0dXMgbWVtb3J5IHBvb2wuIE9uIHRoZSBvdGhlciBoYW5kLCBnaGVzX2luaXQoKSBy ZWxpZXMgb24Kc2RlaV9pbml0KCkgdG8gZGV0ZWN0IHRoZSBTREVJIHZlcnNpb24gYW5kIHRoZSBm cmFtZXdvcmsgZm9yIHJlZ2lzdGVyaW5nCmFuZCB1bnJlZ2lzdGVyaW5nIGV2ZW50cy4gVGhlIGRl cGVuZGVuY2llcyBhcmUgYXMgZm9sbG93cwoKCWdoZXNfaW5pdCgpID0+IGFjcGlfaGVzdF9pbml0 KCkKCWdoZXNfaW5pdCgpID0+IHNkZWlfaW5pdCgpCgpJIGRvbid0IGZpZ3VyZSBvdXQgd2h5IGFj cGlfaGVzdF9pbml0KCkgaXMgY2FsbGVkIGluCmFjcGlfcGNpX3Jvb3RfaW5pdCgpLCBpdCBkb24n dCByZWx5IG9uIGFueSBvdGhlciB0aGluZy4KSSBhbSB3b25kZXJpbmcgdGhhdCBzaG91bGQgd2Ug bW92ZWQgYWxsIG9mIHRoZW0gZnVydGhlcj8gZS5nLgpmb2xsb3dpbmcgYWNwaV9pb3J0X2luaXQo KSBpbiBhY3BpX2luaXQoKS4KCkJlc3QgUmVnYXJkcywKU2h1YWkKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK