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 X-Spam-Level: X-Spam-Status: No, score=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 239B4C64E8A for ; Mon, 30 Nov 2020 14:19:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BEBD62085B for ; Mon, 30 Nov 2020 14:19:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727519AbgK3OTC (ORCPT ); Mon, 30 Nov 2020 09:19:02 -0500 Received: from foss.arm.com ([217.140.110.172]:55476 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726961AbgK3OTC (ORCPT ); Mon, 30 Nov 2020 09:19:02 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4D7D5D6E; Mon, 30 Nov 2020 06:18:16 -0800 (PST) Received: from [10.37.12.38] (unknown [10.37.12.38]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4923C3F71F; Mon, 30 Nov 2020 06:18:15 -0800 (PST) Subject: Re: [kvm-unit-tests PATCH 10/10] arm64: gic: Use IPI test checking for the LPI tests To: Zenghui Yu , kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, drjones@redhat.com Cc: andre.przywara@arm.com, Eric Auger References: <20201125155113.192079-1-alexandru.elisei@arm.com> <20201125155113.192079-11-alexandru.elisei@arm.com> <49be46a8-2c29-b805-366e-7c955d395874@huawei.com> From: Alexandru Elisei Message-ID: Date: Mon, 30 Nov 2020 14:19:37 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.3 MIME-Version: 1.0 In-Reply-To: <49be46a8-2c29-b805-366e-7c955d395874@huawei.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Zenghui, On 11/30/20 1:59 PM, Zenghui Yu wrote: > Hi Alex, > > On 2020/11/27 22:50, Alexandru Elisei wrote: >> Hi Zhenghui, >> >> Thank you for having a look at this! >> >> On 11/26/20 9:30 AM, Zenghui Yu wrote: >>> On 2020/11/25 23:51, Alexandru Elisei wrote: >>>> The reason for the failure is that the test "dev2/eventid=20 now triggers >>>> an LPI" triggers 2 LPIs, not one. This behavior was present before this >>>> patch, but it was ignored because check_lpi_stats() wasn't looking at the >>>> acked array. >>>> >>>> I'm not familiar with the ITS so I'm not sure if this is expected, if the >>>> test is incorrect or if there is something wrong with KVM emulation. >>> >>> I think this is expected, or not. >>> >>> Before INVALL, the LPI-8195 was already pending but disabled. On >>> receiving INVALL, VGIC will reload configuration for all LPIs targeting >>> collection-3 and deliver the now enabled LPI-8195. We'll therefore see >>> and handle it before sending the following INT (which will set the >>> LPI-8195 pending again). >>> >>>> Did some more testing on an Ampere eMAG (fast out-of-order cores) using >>>> qemu and kvmtool and Linux v5.8, here's what I found: >>>> >>>> - Using qemu and gic.flat built from*master*: error encountered 864 times >>>>     out of 1088 runs. >>>> - Using qemu: error encountered 852 times out of 1027 runs. >>>> - Using kvmtool: error encountered 8164 times out of 10602 runs. >>> >>> If vcpu-3 hadn't seen and handled LPI-8195 as quickly as possible (e.g., >>> vcpu-3 hadn't been scheduled), the following INT will set the already >>> pending LPI-8195 pending again and we'll receive it *once* on vcpu-3. >>> And we won't see the mentioned failure. >>> >>> I think we can just drop the (meaningless and confusing?) INT. >> >> I think I understand your explanation, the VCPU takes the interrupt immediately >> after the INVALL and before the INT, and the second interrupt that I am seeing is >> the one caused by the INT command. > > Yes. > >> I tried modifying the test like this: >> >> diff --git a/arm/gic.c b/arm/gic.c >> index 6e93da80fe0d..0ef8c12ea234 100644 >> --- a/arm/gic.c >> +++ b/arm/gic.c >> @@ -761,10 +761,17 @@ static void test_its_trigger(void) >>          wmb(); >>          cpumask_clear(&mask); >>          cpumask_set_cpu(3, &mask); >> -       its_send_int(dev2, 20); > > Shouldn't its_send_invall(col3) be moved down here? See below. > >>          wait_for_interrupts(&mask); >>          report(check_acked(&mask, 0, 8195), >> -                       "dev2/eventid=20 now triggers an LPI"); >> +                       "dev2/eventid=20 pending LPI is received"); >> + >> +       stats_reset(); >> +       wmb(); >> +       cpumask_clear(&mask); >> +       cpumask_set_cpu(3, &mask); >> +       its_send_int(dev2, 20); >> +       wait_for_interrupts(&mask); >> +       report(check_acked(&mask, 0, 8195), "dev2/eventid=20 triggers an LPI"); >>            report_prefix_pop(); >>   I removed the INT from the initial test, and added a separate one to check that >> the INT command still works. That looks to me that preserves the spirit of the >> original test. After doing stress testing this is what I got: >> >> - with kvmtool, 47,709 iterations, 27 times the test timed out when waiting for >> the interrupt after INVALL. >> - with qemu, 15,511 iterations, 258 times the test timed out when waiting for the >> interrupt after INVALL, just like with kvmtool. > > I guess the reason of failure is that the LPI is taken *immediately* > after the INVALL? > >     /* Now call the invall and check the LPI hits */ >     its_send_invall(col3); >         <- LPI is taken, acked[]++ >     stats_reset(); >         <- acked[] is cleared unexpectedly >     wmb(); >     cpumask_clear(&mask); >     cpumask_set_cpu(3, &mask); >     wait_for_interrupts(&mask); >         <- we'll hit timed-out since acked[] is 0 Yes, of course, you're right, I didn't realize that I was resetting the stats *after* the interrupt was enabled. This also explains why I was still seeing timeouts even when the timeout duration was set to 50 seconds. I'll retest with the fix: diff --git a/arm/gic.c b/arm/gic.c index 6e93da80fe0d..c4240f5aba39 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -756,15 +756,22 @@ static void test_its_trigger(void)                         "dev2/eventid=20 still does not trigger any LPI");           /* Now call the invall and check the LPI hits */ +       stats_reset(); +       wmb(); +       cpumask_clear(&mask); +       cpumask_set_cpu(3, &mask);         its_send_invall(col3); +       wait_for_interrupts(&mask); +       report(check_acked(&mask, 0, 8195), +                       "dev2/eventid=20 pending LPI is received"); +         stats_reset();         wmb();         cpumask_clear(&mask);         cpumask_set_cpu(3, &mask);         its_send_int(dev2, 20);         wait_for_interrupts(&mask); -       report(check_acked(&mask, 0, 8195), -                       "dev2/eventid=20 now triggers an LPI"); +       report(check_acked(&mask, 0, 8195), "dev2/eventid20 triggers an LPI");           report_prefix_pop();   I also pushed a branch at [1]. Thank you so much for spotting this! You've saved me (and probably others) a lot of time debugging. [1] https://gitlab.arm.com/linux-arm/kvm-unit-tests-ae/-/tree/fixes1-v2 Thanks, Alex 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 X-Spam-Level: X-Spam-Status: No, score=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D145C64E8A for ; Mon, 30 Nov 2020 14:18:23 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 9C72C20870 for ; Mon, 30 Nov 2020 14:18:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9C72C20870 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id A956D4B660; Mon, 30 Nov 2020 09:18:21 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id miptz9sgjY8n; Mon, 30 Nov 2020 09:18:20 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 5A0014D513; Mon, 30 Nov 2020 09:18:20 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 907614D511 for ; Mon, 30 Nov 2020 09:18:18 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gYXtgf+BqBVq for ; Mon, 30 Nov 2020 09:18:16 -0500 (EST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id AE5294B660 for ; Mon, 30 Nov 2020 09:18:16 -0500 (EST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4D7D5D6E; Mon, 30 Nov 2020 06:18:16 -0800 (PST) Received: from [10.37.12.38] (unknown [10.37.12.38]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4923C3F71F; Mon, 30 Nov 2020 06:18:15 -0800 (PST) Subject: Re: [kvm-unit-tests PATCH 10/10] arm64: gic: Use IPI test checking for the LPI tests To: Zenghui Yu , kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, drjones@redhat.com References: <20201125155113.192079-1-alexandru.elisei@arm.com> <20201125155113.192079-11-alexandru.elisei@arm.com> <49be46a8-2c29-b805-366e-7c955d395874@huawei.com> From: Alexandru Elisei Message-ID: Date: Mon, 30 Nov 2020 14:19:37 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.3 MIME-Version: 1.0 In-Reply-To: <49be46a8-2c29-b805-366e-7c955d395874@huawei.com> Content-Language: en-US Cc: andre.przywara@arm.com X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgWmVuZ2h1aSwKCk9uIDExLzMwLzIwIDE6NTkgUE0sIFplbmdodWkgWXUgd3JvdGU6Cj4gSGkg QWxleCwKPgo+IE9uIDIwMjAvMTEvMjcgMjI6NTAsIEFsZXhhbmRydSBFbGlzZWkgd3JvdGU6Cj4+ IEhpIFpoZW5naHVpLAo+Pgo+PiBUaGFuayB5b3UgZm9yIGhhdmluZyBhIGxvb2sgYXQgdGhpcyEK Pj4KPj4gT24gMTEvMjYvMjAgOTozMCBBTSwgWmVuZ2h1aSBZdSB3cm90ZToKPj4+IE9uIDIwMjAv MTEvMjUgMjM6NTEsIEFsZXhhbmRydSBFbGlzZWkgd3JvdGU6Cj4+Pj4gVGhlIHJlYXNvbiBmb3Ig dGhlIGZhaWx1cmUgaXMgdGhhdCB0aGUgdGVzdCAiZGV2Mi9ldmVudGlkPTIwIG5vdyB0cmlnZ2Vy cwo+Pj4+IGFuIExQSSIgdHJpZ2dlcnMgMiBMUElzLCBub3Qgb25lLiBUaGlzIGJlaGF2aW9yIHdh cyBwcmVzZW50IGJlZm9yZSB0aGlzCj4+Pj4gcGF0Y2gsIGJ1dCBpdCB3YXMgaWdub3JlZCBiZWNh dXNlIGNoZWNrX2xwaV9zdGF0cygpIHdhc24ndCBsb29raW5nIGF0IHRoZQo+Pj4+IGFja2VkIGFy cmF5Lgo+Pj4+Cj4+Pj4gSSdtIG5vdCBmYW1pbGlhciB3aXRoIHRoZSBJVFMgc28gSSdtIG5vdCBz dXJlIGlmIHRoaXMgaXMgZXhwZWN0ZWQsIGlmIHRoZQo+Pj4+IHRlc3QgaXMgaW5jb3JyZWN0IG9y IGlmIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIEtWTSBlbXVsYXRpb24uCj4+Pgo+Pj4g SSB0aGluayB0aGlzIGlzIGV4cGVjdGVkLCBvciBub3QuCj4+Pgo+Pj4gQmVmb3JlIElOVkFMTCwg dGhlIExQSS04MTk1IHdhcyBhbHJlYWR5IHBlbmRpbmcgYnV0IGRpc2FibGVkLiBPbgo+Pj4gcmVj ZWl2aW5nIElOVkFMTCwgVkdJQyB3aWxsIHJlbG9hZCBjb25maWd1cmF0aW9uIGZvciBhbGwgTFBJ cyB0YXJnZXRpbmcKPj4+IGNvbGxlY3Rpb24tMyBhbmQgZGVsaXZlciB0aGUgbm93IGVuYWJsZWQg TFBJLTgxOTUuIFdlJ2xsIHRoZXJlZm9yZSBzZWUKPj4+IGFuZCBoYW5kbGUgaXQgYmVmb3JlIHNl bmRpbmcgdGhlIGZvbGxvd2luZyBJTlQgKHdoaWNoIHdpbGwgc2V0IHRoZQo+Pj4gTFBJLTgxOTUg cGVuZGluZyBhZ2FpbikuCj4+Pgo+Pj4+IERpZCBzb21lIG1vcmUgdGVzdGluZyBvbiBhbiBBbXBl cmUgZU1BRyAoZmFzdCBvdXQtb2Ytb3JkZXIgY29yZXMpIHVzaW5nCj4+Pj4gcWVtdSBhbmQga3Zt dG9vbCBhbmQgTGludXggdjUuOCwgaGVyZSdzIHdoYXQgSSBmb3VuZDoKPj4+Pgo+Pj4+IC0gVXNp bmcgcWVtdSBhbmQgZ2ljLmZsYXQgYnVpbHQgZnJvbSptYXN0ZXIqOiBlcnJvciBlbmNvdW50ZXJl ZCA4NjQgdGltZXMKPj4+PiDCoMKgwqAgb3V0IG9mIDEwODggcnVucy4KPj4+PiAtIFVzaW5nIHFl bXU6IGVycm9yIGVuY291bnRlcmVkIDg1MiB0aW1lcyBvdXQgb2YgMTAyNyBydW5zLgo+Pj4+IC0g VXNpbmcga3ZtdG9vbDogZXJyb3IgZW5jb3VudGVyZWQgODE2NCB0aW1lcyBvdXQgb2YgMTA2MDIg cnVucy4KPj4+Cj4+PiBJZiB2Y3B1LTMgaGFkbid0IHNlZW4gYW5kIGhhbmRsZWQgTFBJLTgxOTUg YXMgcXVpY2tseSBhcyBwb3NzaWJsZSAoZS5nLiwKPj4+IHZjcHUtMyBoYWRuJ3QgYmVlbiBzY2hl ZHVsZWQpLCB0aGUgZm9sbG93aW5nIElOVCB3aWxsIHNldCB0aGUgYWxyZWFkeQo+Pj4gcGVuZGlu ZyBMUEktODE5NSBwZW5kaW5nIGFnYWluIGFuZCB3ZSdsbCByZWNlaXZlIGl0ICpvbmNlKiBvbiB2 Y3B1LTMuCj4+PiBBbmQgd2Ugd29uJ3Qgc2VlIHRoZSBtZW50aW9uZWQgZmFpbHVyZS4KPj4+Cj4+ PiBJIHRoaW5rIHdlIGNhbiBqdXN0IGRyb3AgdGhlIChtZWFuaW5nbGVzcyBhbmQgY29uZnVzaW5n PykgSU5ULgo+Pgo+PiBJIHRoaW5rIEkgdW5kZXJzdGFuZCB5b3VyIGV4cGxhbmF0aW9uLCB0aGUg VkNQVSB0YWtlcyB0aGUgaW50ZXJydXB0IGltbWVkaWF0ZWx5Cj4+IGFmdGVyIHRoZSBJTlZBTEwg YW5kIGJlZm9yZSB0aGUgSU5ULCBhbmQgdGhlIHNlY29uZCBpbnRlcnJ1cHQgdGhhdCBJIGFtIHNl ZWluZyBpcwo+PiB0aGUgb25lIGNhdXNlZCBieSB0aGUgSU5UIGNvbW1hbmQuCj4KPiBZZXMuCj4K Pj4gSSB0cmllZCBtb2RpZnlpbmcgdGhlIHRlc3QgbGlrZSB0aGlzOgo+Pgo+PiBkaWZmIC0tZ2l0 IGEvYXJtL2dpYy5jIGIvYXJtL2dpYy5jCj4+IGluZGV4IDZlOTNkYTgwZmUwZC4uMGVmOGMxMmVh MjM0IDEwMDY0NAo+PiAtLS0gYS9hcm0vZ2ljLmMKPj4gKysrIGIvYXJtL2dpYy5jCj4+IEBAIC03 NjEsMTAgKzc2MSwxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2l0c190cmlnZ2VyKHZvaWQpCj4+IMKg wqDCoMKgwqDCoMKgwqAgd21iKCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqAgY3B1bWFza19jbGVhcigm bWFzayk7Cj4+IMKgwqDCoMKgwqDCoMKgwqAgY3B1bWFza19zZXRfY3B1KDMsICZtYXNrKTsKPj4g LcKgwqDCoMKgwqDCoCBpdHNfc2VuZF9pbnQoZGV2MiwgMjApOwo+Cj4gU2hvdWxkbid0IGl0c19z ZW5kX2ludmFsbChjb2wzKSBiZSBtb3ZlZCBkb3duIGhlcmU/IFNlZSBiZWxvdy4KPgo+PiDCoMKg wqDCoMKgwqDCoMKgIHdhaXRfZm9yX2ludGVycnVwdHMoJm1hc2spOwo+PiDCoMKgwqDCoMKgwqDC oMKgIHJlcG9ydChjaGVja19hY2tlZCgmbWFzaywgMCwgODE5NSksCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiZGV2Mi9ldmVudGlkPTIwIG5vdyB0cmln Z2VycyBhbiBMUEkiKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICJkZXYyL2V2ZW50aWQ9MjAgcGVuZGluZyBMUEkgaXMgcmVjZWl2ZWQiKTsKPj4gKwo+ PiArwqDCoMKgwqDCoMKgIHN0YXRzX3Jlc2V0KCk7Cj4+ICvCoMKgwqDCoMKgwqAgd21iKCk7Cj4+ ICvCoMKgwqDCoMKgwqAgY3B1bWFza19jbGVhcigmbWFzayk7Cj4+ICvCoMKgwqDCoMKgwqAgY3B1 bWFza19zZXRfY3B1KDMsICZtYXNrKTsKPj4gK8KgwqDCoMKgwqDCoCBpdHNfc2VuZF9pbnQoZGV2 MiwgMjApOwo+PiArwqDCoMKgwqDCoMKgIHdhaXRfZm9yX2ludGVycnVwdHMoJm1hc2spOwo+PiAr wqDCoMKgwqDCoMKgIHJlcG9ydChjaGVja19hY2tlZCgmbWFzaywgMCwgODE5NSksICJkZXYyL2V2 ZW50aWQ9MjAgdHJpZ2dlcnMgYW4gTFBJIik7Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqAgcmVwb3J0 X3ByZWZpeF9wb3AoKTsKPj4gwqAgSSByZW1vdmVkIHRoZSBJTlQgZnJvbSB0aGUgaW5pdGlhbCB0 ZXN0LCBhbmQgYWRkZWQgYSBzZXBhcmF0ZSBvbmUgdG8gY2hlY2sgdGhhdAo+PiB0aGUgSU5UIGNv bW1hbmQgc3RpbGwgd29ya3MuIFRoYXQgbG9va3MgdG8gbWUgdGhhdCBwcmVzZXJ2ZXMgdGhlIHNw aXJpdCBvZiB0aGUKPj4gb3JpZ2luYWwgdGVzdC4gQWZ0ZXIgZG9pbmcgc3RyZXNzIHRlc3Rpbmcg dGhpcyBpcyB3aGF0IEkgZ290Ogo+Pgo+PiAtIHdpdGgga3ZtdG9vbCwgNDcsNzA5IGl0ZXJhdGlv bnMsIDI3IHRpbWVzIHRoZSB0ZXN0IHRpbWVkIG91dCB3aGVuIHdhaXRpbmcgZm9yCj4+IHRoZSBp bnRlcnJ1cHQgYWZ0ZXIgSU5WQUxMLgo+PiAtIHdpdGggcWVtdSwgMTUsNTExIGl0ZXJhdGlvbnMs IDI1OCB0aW1lcyB0aGUgdGVzdCB0aW1lZCBvdXQgd2hlbiB3YWl0aW5nIGZvciB0aGUKPj4gaW50 ZXJydXB0IGFmdGVyIElOVkFMTCwganVzdCBsaWtlIHdpdGgga3ZtdG9vbC4KPgo+IEkgZ3Vlc3Mg dGhlIHJlYXNvbiBvZiBmYWlsdXJlIGlzIHRoYXQgdGhlIExQSSBpcyB0YWtlbiAqaW1tZWRpYXRl bHkqCj4gYWZ0ZXIgdGhlIElOVkFMTD8KPgo+IMKgwqDCoMKgLyogTm93IGNhbGwgdGhlIGludmFs bCBhbmQgY2hlY2sgdGhlIExQSSBoaXRzICovCj4gwqDCoMKgwqBpdHNfc2VuZF9pbnZhbGwoY29s Myk7Cj4gwqDCoMKgwqDCoMKgwqAgPC0gTFBJIGlzIHRha2VuLCBhY2tlZFtdKysKPiDCoMKgwqDC oHN0YXRzX3Jlc2V0KCk7Cj4gwqDCoMKgwqDCoMKgwqAgPC0gYWNrZWRbXSBpcyBjbGVhcmVkIHVu ZXhwZWN0ZWRseQo+IMKgwqDCoMKgd21iKCk7Cj4gwqDCoMKgwqBjcHVtYXNrX2NsZWFyKCZtYXNr KTsKPiDCoMKgwqDCoGNwdW1hc2tfc2V0X2NwdSgzLCAmbWFzayk7Cj4gwqDCoMKgwqB3YWl0X2Zv cl9pbnRlcnJ1cHRzKCZtYXNrKTsKPiDCoMKgwqDCoMKgwqDCoCA8LSB3ZSdsbCBoaXQgdGltZWQt b3V0IHNpbmNlIGFja2VkW10gaXMgMAoKWWVzLCBvZiBjb3Vyc2UsIHlvdSdyZSByaWdodCwgSSBk aWRuJ3QgcmVhbGl6ZSB0aGF0IEkgd2FzIHJlc2V0dGluZyB0aGUgc3RhdHMKKmFmdGVyKiB0aGUg aW50ZXJydXB0IHdhcyBlbmFibGVkLiBUaGlzIGFsc28gZXhwbGFpbnMgd2h5IEkgd2FzIHN0aWxs IHNlZWluZwp0aW1lb3V0cyBldmVuIHdoZW4gdGhlIHRpbWVvdXQgZHVyYXRpb24gd2FzIHNldCB0 byA1MCBzZWNvbmRzLiBJJ2xsIHJldGVzdCB3aXRoCnRoZSBmaXg6CgpkaWZmIC0tZ2l0IGEvYXJt L2dpYy5jIGIvYXJtL2dpYy5jCmluZGV4IDZlOTNkYTgwZmUwZC4uYzQyNDBmNWFiYTM5IDEwMDY0 NAotLS0gYS9hcm0vZ2ljLmMKKysrIGIvYXJtL2dpYy5jCkBAIC03NTYsMTUgKzc1NiwyMiBAQCBz dGF0aWMgdm9pZCB0ZXN0X2l0c190cmlnZ2VyKHZvaWQpCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImRldjIvZXZlbnRpZD0yMCBzdGlsbCBkb2VzIG5vdCB0 cmlnZ2VyIGFueSBMUEkiKTsKwqAKwqDCoMKgwqDCoMKgwqAgLyogTm93IGNhbGwgdGhlIGludmFs bCBhbmQgY2hlY2sgdGhlIExQSSBoaXRzICovCivCoMKgwqDCoMKgwqAgc3RhdHNfcmVzZXQoKTsK K8KgwqDCoMKgwqDCoCB3bWIoKTsKK8KgwqDCoMKgwqDCoCBjcHVtYXNrX2NsZWFyKCZtYXNrKTsK K8KgwqDCoMKgwqDCoCBjcHVtYXNrX3NldF9jcHUoMywgJm1hc2spOwrCoMKgwqDCoMKgwqDCoCBp dHNfc2VuZF9pbnZhbGwoY29sMyk7CivCoMKgwqDCoMKgwqAgd2FpdF9mb3JfaW50ZXJydXB0cygm bWFzayk7CivCoMKgwqDCoMKgwqAgcmVwb3J0KGNoZWNrX2Fja2VkKCZtYXNrLCAwLCA4MTk1KSwK K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJkZXYyL2V2ZW50 aWQ9MjAgcGVuZGluZyBMUEkgaXMgcmVjZWl2ZWQiKTsKKwrCoMKgwqDCoMKgwqDCoCBzdGF0c19y ZXNldCgpOwrCoMKgwqDCoMKgwqDCoCB3bWIoKTsKwqDCoMKgwqDCoMKgwqAgY3B1bWFza19jbGVh cigmbWFzayk7CsKgwqDCoMKgwqDCoMKgIGNwdW1hc2tfc2V0X2NwdSgzLCAmbWFzayk7CsKgwqDC oMKgwqDCoMKgIGl0c19zZW5kX2ludChkZXYyLCAyMCk7CsKgwqDCoMKgwqDCoMKgIHdhaXRfZm9y X2ludGVycnVwdHMoJm1hc2spOwotwqDCoMKgwqDCoMKgIHJlcG9ydChjaGVja19hY2tlZCgmbWFz aywgMCwgODE5NSksCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAiZGV2Mi9ldmVudGlkPTIwIG5vdyB0cmlnZ2VycyBhbiBMUEkiKTsKK8KgwqDCoMKgwqDCoCBy ZXBvcnQoY2hlY2tfYWNrZWQoJm1hc2ssIDAsIDgxOTUpLCAiZGV2Mi9ldmVudGlkMjAgdHJpZ2dl cnMgYW4gTFBJIik7CsKgCsKgwqDCoMKgwqDCoMKgIHJlcG9ydF9wcmVmaXhfcG9wKCk7CsKgCkkg YWxzbyBwdXNoZWQgYSBicmFuY2ggYXQgWzFdLgoKVGhhbmsgeW91IHNvIG11Y2ggZm9yIHNwb3R0 aW5nIHRoaXMhIFlvdSd2ZSBzYXZlZCBtZSAoYW5kIHByb2JhYmx5IG90aGVycykgYSBsb3QKb2Yg dGltZSBkZWJ1Z2dpbmcuCgpbMV0gaHR0cHM6Ly9naXRsYWIuYXJtLmNvbS9saW51eC1hcm0va3Zt LXVuaXQtdGVzdHMtYWUvLS90cmVlL2ZpeGVzMS12MgoKVGhhbmtzLApBbGV4Cl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QK a3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVk dS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=