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=-7.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 07F1AC49361 for ; Thu, 17 Jun 2021 17:57:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DEBA9613D5 for ; Thu, 17 Jun 2021 17:57:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232807AbhFQR7T (ORCPT ); Thu, 17 Jun 2021 13:59:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:38534 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231800AbhFQR7R (ORCPT ); Thu, 17 Jun 2021 13:59:17 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 590D8613CE; Thu, 17 Jun 2021 17:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1623952629; bh=EhSsmsI9iGJevWK6dFC1JCY+kzfJnsUdrl+be5LxLiU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=f125yxtkpG4p0zjEUVnwR25SUAoSZfM1gPA1tkxmH0FlV+r/AcE3al5sqb7AOw8ma V49i6NeTJOv0IBS93Bn1Jp71Df3+wAleDXVYRkMNKUo4jJDWPylnS5Sv25X2AxBU0A lHppEjiIUhrJocXFpqhaqGlRY83eDe6EvLXcNUOt1ZXAIcdiXKszhIOuWzQTPwDeG+ S0smvRD5gaqcSW8JsrjwuXWMOS2Or5X1Ejg8VCYHvP3zhZCIjQwDM/K5TiLJua0jO5 6tl7rlUlevzUvWZm/3ibhzMnBaVvqG7zy+sz//cB7ZAiIC/mFR1VSM2XnLTkd9Qpj+ XrQEl+3SYp7ug== Date: Thu, 17 Jun 2021 18:57:05 +0100 From: Will Deacon To: "liuqi (BA)" Cc: Linuxarm , mark.rutland@arm.com, bhelgaas@google.com, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, zhangshaokun@hisilicon.com Subject: Re: [PATCH v6 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU Message-ID: <20210617175704.GF24813@willie-the-truck> References: <1622467951-32114-1-git-send-email-liuqi115@huawei.com> <1622467951-32114-3-git-send-email-liuqi115@huawei.com> <20210611162347.GA16284@willie-the-truck> <20210615093519.GB19878@willie-the-truck> <8e15e8d6-cfe8-0926-0ca1-b162302e52a5@huawei.com> <20210616134257.GA22905@willie-the-truck> <678f7d55-9408-f323-da53-b5afe2595271@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <678f7d55-9408-f323-da53-b5afe2595271@huawei.com> User-Agent: Mutt/1.10.1 (2018-07-13) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 17, 2021 at 07:00:26PM +0800, liuqi (BA) wrote: > > > On 2021/6/16 21:42, Will Deacon wrote: > > Hi, > > > > On Wed, Jun 16, 2021 at 09:54:23AM +0800, liuqi (BA) wrote: > > > On 2021/6/15 17:35, Will Deacon wrote: > > > > On Tue, Jun 15, 2021 at 04:57:09PM +0800, liuqi (BA) wrote: > > > > > On 2021/6/12 0:23, Will Deacon wrote: > > > > > > On Mon, May 31, 2021 at 09:32:31PM +0800, Qi Liu wrote: > > > > > > > + /* Process data to set unit of latency as "us". */ > > > > > > > + if (is_latency_event(idx)) > > > > > > > + return div64_u64(data * us_per_cycle, data_ext); > > > > > > > + > > > > > > > + if (is_bus_util_event(idx)) > > > > > > > + return div64_u64(data * us_per_cycle, data_ext); > > > > > > > + > > > > > > > + if (is_buf_util_event(idx)) > > > > > > > + return div64_u64(data, data_ext * us_per_cycle); > > > > > > > > > > > > Why do we need to do all this division in the kernel? Can't we just expose > > > > > > the underlying values and let userspace figure out what it wants to do with > > > > > > the numbers? > > > > > > > > > > > Our PMU hardware support 8 sets of counters to count bandwidth, latency and > > > > > utilization events. > > > > > > > > > > For example, when users set latency event, common counter will count delay > > > > > cycles, and extern counter count number of PCIe packets automaticly. And we > > > > > do not have a event number for counting number of PCIe packets. > > > > > > > > > > So this division cannot move to userspace tool. > > > > > > > > Why can't you expose the packet counter as an extra event to userspace? > > > > > > > Maybe I didn’t express it clearly. > > > > > > As there is no hardware event number for PCIe packets counting, extern > > > counter count packets *automaticly* when latency events is selected by > > > users. > > > > > > This means users cannot set "config=0xXX" to start packets counting event. > > > So we can only get the value of counter and extern counter in driver and do > > > the division, then pass the result to userspace. > > > > I still think it would be ideal if we could expose both values to userspace > > rather than combine them somehow. Hmm. Anyway... > > > > I struggled to figure out exactly what's being counted from the > > documentation patch (please update that). Please can you explain exactly > > what appears in the HISI_PCIE_CNT and HISI_PCIE_EXT_CNT registers for the > > different modes of operation? Without that, the ratios you've chosen to > > report seem rather arbitrary. > > > > PCIe PMU events can be devided into 2 types: one type is counted by > HISI_PCIE_CNT, the other type is counted by HISI_PCIE_EXT_CNT and > HISI_PCIE_CNT, including bandwidth events, latency events, buffer > utilization and bus utilization. > > if user sets "event=0x10, subevent=0x02", this means "latency of RX memory > read" is selected. HISI_PCIE_CNT counts total delay cycles and > HISI_PCIE_EXT_CNT counts PCIe packets number at the same time. So PMU driver > could obtain average latency by caculating: HISI_PCIE_CNT / > HISI_PCIE_EXT_CNT. > > if users sets "event=0x04, subevent=0x01", this means bandwidth of RX memory > read is selected. HISI_PCIE_CNT counts total packet data volume and > HISI_PCIE_EXT_CNT counts cycles, so PMU driver could obtain average > bandwidth by caculating: HISI_PCIE_CNT / HISI_PCIE_EXT_CNT. > > The same logic is used when calculating bus utilization and buffer > utilization. Seems I should add this part in Document patch,I 'll do this in > next version, thanks. > > > I also couldn't figure out how the latency event works. For example, I was > > assuming it would be a filter (a bit like the length), so you could say > > things like "I'm only interested in packets with a latency higher than x" > > but it doesn't look like it works that way. > > > > Thanks, > > > latency is not a filter, PCIe PMU has a group of lactency events, their > event number are within the latency_events_list, and the above explains how > latency events work. > > PMU drivers have TLP length filter for bandwidth events, users could set > like "I only interested in bandwidth of packets with TLP length bigger than > x". Thanks for the explanations, I think I get it a bit better now. But I still think we should be exposing both of the values to userspace instead of reporting the ratio from which the individual counters are then unrecoverable. It will complicate the driver slightly, but can we instead expose the events independently and then allowing scheduling some of them in groups? That way we just treat HISI_PCIE_CNT and HISI_PCIE_EXT_CNT as separate counters, but with a scheduling constraint that events in a register pair must be in the same group. Will 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=-5.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=no 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 57D57C2B9F4 for ; Thu, 17 Jun 2021 17:58:45 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1F2A7613CE for ; Thu, 17 Jun 2021 17:58:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1F2A7613CE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=c7AD1toAJbUPnvHWBBZ0QNVbUClycsCa3J4YgcN0Dyc=; b=Fqt1B0JSw+cimt ZdoHT+/kG47oioVsdPtayQLab+HhsDnBgB9Ji7ZHtETrDJqbfJx3dM4hUV0bjZlVCPXkzC9U1hw/D v3wn+W6U49Bi5DxL/3ukyKdM++Mdm/L7WkRExjDpqjLGFyh5HrZDUw9B5cjD6LgOxNrZX4rr6ZdyX 4crFX0AU7Mu2ui3SS/wPl3QBoWdIcef+JMFr0Wd3lOwqbjwE2NtkhSWC1EGNho5HCCR+jA57dCh3j vqL37SreYfDkNEbQCj7JVBWJiTLTufPyilH+NihycS3ZQlYn66g8Q/4IXUfTnT5SJW6kGE22xLjC0 8l2SX5bwKrn+ZkSwQjTg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltwGQ-00BIeS-BU; Thu, 17 Jun 2021 17:57:14 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltwGM-00BIdZ-33 for linux-arm-kernel@lists.infradead.org; Thu, 17 Jun 2021 17:57:11 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 590D8613CE; Thu, 17 Jun 2021 17:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1623952629; bh=EhSsmsI9iGJevWK6dFC1JCY+kzfJnsUdrl+be5LxLiU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=f125yxtkpG4p0zjEUVnwR25SUAoSZfM1gPA1tkxmH0FlV+r/AcE3al5sqb7AOw8ma V49i6NeTJOv0IBS93Bn1Jp71Df3+wAleDXVYRkMNKUo4jJDWPylnS5Sv25X2AxBU0A lHppEjiIUhrJocXFpqhaqGlRY83eDe6EvLXcNUOt1ZXAIcdiXKszhIOuWzQTPwDeG+ S0smvRD5gaqcSW8JsrjwuXWMOS2Or5X1Ejg8VCYHvP3zhZCIjQwDM/K5TiLJua0jO5 6tl7rlUlevzUvWZm/3ibhzMnBaVvqG7zy+sz//cB7ZAiIC/mFR1VSM2XnLTkd9Qpj+ XrQEl+3SYp7ug== Date: Thu, 17 Jun 2021 18:57:05 +0100 From: Will Deacon To: "liuqi (BA)" Cc: Linuxarm , mark.rutland@arm.com, bhelgaas@google.com, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, zhangshaokun@hisilicon.com Subject: Re: [PATCH v6 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU Message-ID: <20210617175704.GF24813@willie-the-truck> References: <1622467951-32114-1-git-send-email-liuqi115@huawei.com> <1622467951-32114-3-git-send-email-liuqi115@huawei.com> <20210611162347.GA16284@willie-the-truck> <20210615093519.GB19878@willie-the-truck> <8e15e8d6-cfe8-0926-0ca1-b162302e52a5@huawei.com> <20210616134257.GA22905@willie-the-truck> <678f7d55-9408-f323-da53-b5afe2595271@huawei.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <678f7d55-9408-f323-da53-b5afe2595271@huawei.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210617_105710_210269_DF3F96CD X-CRM114-Status: GOOD ( 44.85 ) 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 T24gVGh1LCBKdW4gMTcsIDIwMjEgYXQgMDc6MDA6MjZQTSArMDgwMCwgbGl1cWkgKEJBKSB3cm90 ZToKPiAKPiAKPiBPbiAyMDIxLzYvMTYgMjE6NDIsIFdpbGwgRGVhY29uIHdyb3RlOgo+ID4gSGks Cj4gPiAKPiA+IE9uIFdlZCwgSnVuIDE2LCAyMDIxIGF0IDA5OjU0OjIzQU0gKzA4MDAsIGxpdXFp IChCQSkgd3JvdGU6Cj4gPiA+IE9uIDIwMjEvNi8xNSAxNzozNSwgV2lsbCBEZWFjb24gd3JvdGU6 Cj4gPiA+ID4gT24gVHVlLCBKdW4gMTUsIDIwMjEgYXQgMDQ6NTc6MDlQTSArMDgwMCwgbGl1cWkg KEJBKSB3cm90ZToKPiA+ID4gPiA+IE9uIDIwMjEvNi8xMiAwOjIzLCBXaWxsIERlYWNvbiB3cm90 ZToKPiA+ID4gPiA+ID4gT24gTW9uLCBNYXkgMzEsIDIwMjEgYXQgMDk6MzI6MzFQTSArMDgwMCwg UWkgTGl1IHdyb3RlOgo+ID4gPiA+ID4gPiA+ICsJLyogUHJvY2VzcyBkYXRhIHRvIHNldCB1bml0 IG9mIGxhdGVuY3kgYXMgInVzIi4gKi8KPiA+ID4gPiA+ID4gPiArCWlmIChpc19sYXRlbmN5X2V2 ZW50KGlkeCkpCj4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIGRpdjY0X3U2NChkYXRhICogdXNfcGVy X2N5Y2xlLCBkYXRhX2V4dCk7Cj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICsJaWYgKGlz X2J1c191dGlsX2V2ZW50KGlkeCkpCj4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIGRpdjY0X3U2NChk YXRhICogdXNfcGVyX2N5Y2xlLCBkYXRhX2V4dCk7Cj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiA+ICsJaWYgKGlzX2J1Zl91dGlsX2V2ZW50KGlkeCkpCj4gPiA+ID4gPiA+ID4gKwkJcmV0dXJu IGRpdjY0X3U2NChkYXRhLCBkYXRhX2V4dCAqIHVzX3Blcl9jeWNsZSk7Cj4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiBXaHkgZG8gd2UgbmVlZCB0byBkbyBhbGwgdGhpcyBkaXZpc2lvbiBpbiB0aGUg a2VybmVsPyBDYW4ndCB3ZSBqdXN0IGV4cG9zZQo+ID4gPiA+ID4gPiB0aGUgdW5kZXJseWluZyB2 YWx1ZXMgYW5kIGxldCB1c2Vyc3BhY2UgZmlndXJlIG91dCB3aGF0IGl0IHdhbnRzIHRvIGRvIHdp dGgKPiA+ID4gPiA+ID4gdGhlIG51bWJlcnM/Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gT3VyIFBN VSBoYXJkd2FyZSBzdXBwb3J0IDggc2V0cyBvZiBjb3VudGVycyB0byBjb3VudCBiYW5kd2lkdGgs IGxhdGVuY3kgYW5kCj4gPiA+ID4gPiB1dGlsaXphdGlvbiBldmVudHMuCj4gPiA+ID4gPiAKPiA+ ID4gPiA+IEZvciBleGFtcGxlLCB3aGVuIHVzZXJzIHNldCBsYXRlbmN5IGV2ZW50LCBjb21tb24g Y291bnRlciB3aWxsIGNvdW50IGRlbGF5Cj4gPiA+ID4gPiBjeWNsZXMsIGFuZCBleHRlcm4gY291 bnRlciBjb3VudCBudW1iZXIgb2YgUENJZSBwYWNrZXRzIGF1dG9tYXRpY2x5LiBBbmQgd2UKPiA+ ID4gPiA+IGRvIG5vdCBoYXZlIGEgZXZlbnQgbnVtYmVyIGZvciBjb3VudGluZyBudW1iZXIgb2Yg UENJZSBwYWNrZXRzLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBTbyB0aGlzIGRpdmlzaW9uIGNhbm5v dCBtb3ZlIHRvIHVzZXJzcGFjZSB0b29sLgo+ID4gPiA+IAo+ID4gPiA+IFdoeSBjYW4ndCB5b3Ug ZXhwb3NlIHRoZSBwYWNrZXQgY291bnRlciBhcyBhbiBleHRyYSBldmVudCB0byB1c2Vyc3BhY2U/ Cj4gPiA+ID4gCj4gPiA+IE1heWJlIEkgZGlkbuKAmXQgZXhwcmVzcyBpdCBjbGVhcmx5Lgo+ID4g PiAKPiA+ID4gQXMgdGhlcmUgaXMgbm8gaGFyZHdhcmUgZXZlbnQgbnVtYmVyIGZvciBQQ0llIHBh Y2tldHMgY291bnRpbmcsIGV4dGVybgo+ID4gPiBjb3VudGVyIGNvdW50IHBhY2tldHMgKmF1dG9t YXRpY2x5KiB3aGVuIGxhdGVuY3kgZXZlbnRzIGlzIHNlbGVjdGVkIGJ5Cj4gPiA+IHVzZXJzLgo+ ID4gPiAKPiA+ID4gVGhpcyBtZWFucyB1c2VycyBjYW5ub3Qgc2V0ICJjb25maWc9MHhYWCIgdG8g c3RhcnQgcGFja2V0cyBjb3VudGluZyBldmVudC4KPiA+ID4gU28gd2UgY2FuIG9ubHkgZ2V0IHRo ZSB2YWx1ZSBvZiBjb3VudGVyIGFuZCBleHRlcm4gY291bnRlciBpbiBkcml2ZXIgYW5kIGRvCj4g PiA+IHRoZSBkaXZpc2lvbiwgdGhlbiBwYXNzIHRoZSByZXN1bHQgdG8gdXNlcnNwYWNlLgo+ID4g Cj4gPiBJIHN0aWxsIHRoaW5rIGl0IHdvdWxkIGJlIGlkZWFsIGlmIHdlIGNvdWxkIGV4cG9zZSBi b3RoIHZhbHVlcyB0byB1c2Vyc3BhY2UKPiA+IHJhdGhlciB0aGFuIGNvbWJpbmUgdGhlbSBzb21l aG93LiBIbW0uIEFueXdheS4uLgo+ID4gCj4gPiBJIHN0cnVnZ2xlZCB0byBmaWd1cmUgb3V0IGV4 YWN0bHkgd2hhdCdzIGJlaW5nIGNvdW50ZWQgZnJvbSB0aGUKPiA+IGRvY3VtZW50YXRpb24gcGF0 Y2ggKHBsZWFzZSB1cGRhdGUgdGhhdCkuIFBsZWFzZSBjYW4geW91IGV4cGxhaW4gZXhhY3RseQo+ ID4gd2hhdCBhcHBlYXJzIGluIHRoZSBISVNJX1BDSUVfQ05UIGFuZCBISVNJX1BDSUVfRVhUX0NO VCByZWdpc3RlcnMgZm9yIHRoZQo+ID4gZGlmZmVyZW50IG1vZGVzIG9mIG9wZXJhdGlvbj8gV2l0 aG91dCB0aGF0LCB0aGUgcmF0aW9zIHlvdSd2ZSBjaG9zZW4gdG8KPiA+IHJlcG9ydCBzZWVtIHJh dGhlciBhcmJpdHJhcnkuCj4gPiAKPiAKPiBQQ0llIFBNVSBldmVudHMgY2FuIGJlIGRldmlkZWQg aW50byAyIHR5cGVzOiBvbmUgdHlwZSBpcyBjb3VudGVkIGJ5Cj4gSElTSV9QQ0lFX0NOVCwgdGhl IG90aGVyIHR5cGUgaXMgY291bnRlZCBieSBISVNJX1BDSUVfRVhUX0NOVCBhbmQKPiBISVNJX1BD SUVfQ05ULCBpbmNsdWRpbmcgYmFuZHdpZHRoIGV2ZW50cywgbGF0ZW5jeSBldmVudHMsIGJ1ZmZl cgo+IHV0aWxpemF0aW9uIGFuZCBidXMgdXRpbGl6YXRpb24uCj4gCj4gaWYgdXNlciBzZXRzICJl dmVudD0weDEwLCBzdWJldmVudD0weDAyIiwgdGhpcyBtZWFucyAibGF0ZW5jeSBvZiBSWCBtZW1v cnkKPiByZWFkIiBpcyBzZWxlY3RlZC4gSElTSV9QQ0lFX0NOVCBjb3VudHMgdG90YWwgZGVsYXkg Y3ljbGVzIGFuZAo+IEhJU0lfUENJRV9FWFRfQ05UIGNvdW50cyBQQ0llIHBhY2tldHMgbnVtYmVy IGF0IHRoZSBzYW1lIHRpbWUuIFNvIFBNVSBkcml2ZXIKPiBjb3VsZCBvYnRhaW4gYXZlcmFnZSBs YXRlbmN5IGJ5IGNhY3VsYXRpbmc6IEhJU0lfUENJRV9DTlQgLwo+IEhJU0lfUENJRV9FWFRfQ05U Lgo+IAo+IGlmIHVzZXJzIHNldHMgImV2ZW50PTB4MDQsIHN1YmV2ZW50PTB4MDEiLCB0aGlzIG1l YW5zIGJhbmR3aWR0aCBvZiBSWCBtZW1vcnkKPiByZWFkIGlzIHNlbGVjdGVkLiBISVNJX1BDSUVf Q05UIGNvdW50cyB0b3RhbCBwYWNrZXQgZGF0YSB2b2x1bWUgYW5kCj4gSElTSV9QQ0lFX0VYVF9D TlQgY291bnRzIGN5Y2xlcywgc28gUE1VIGRyaXZlciBjb3VsZCBvYnRhaW4gYXZlcmFnZQo+IGJh bmR3aWR0aCBieSBjYWN1bGF0aW5nOiBISVNJX1BDSUVfQ05UIC8gSElTSV9QQ0lFX0VYVF9DTlQu Cj4gCj4gVGhlIHNhbWUgbG9naWMgaXMgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIGJ1cyB1dGlsaXph dGlvbiBhbmQgYnVmZmVyCj4gdXRpbGl6YXRpb24uIFNlZW1zIEkgc2hvdWxkIGFkZCB0aGlzIHBh cnQgaW4gRG9jdW1lbnQgcGF0Y2gsSSAnbGwgZG8gdGhpcyBpbgo+IG5leHQgdmVyc2lvbiwgdGhh bmtzLgo+IAo+ID4gSSBhbHNvIGNvdWxkbid0IGZpZ3VyZSBvdXQgaG93IHRoZSBsYXRlbmN5IGV2 ZW50IHdvcmtzLiBGb3IgZXhhbXBsZSwgSSB3YXMKPiA+IGFzc3VtaW5nIGl0IHdvdWxkIGJlIGEg ZmlsdGVyIChhIGJpdCBsaWtlIHRoZSBsZW5ndGgpLCBzbyB5b3UgY291bGQgc2F5Cj4gPiB0aGlu Z3MgbGlrZSAiSSdtIG9ubHkgaW50ZXJlc3RlZCBpbiBwYWNrZXRzIHdpdGggYSBsYXRlbmN5IGhp Z2hlciB0aGFuIHgiCj4gPiBidXQgaXQgZG9lc24ndCBsb29rIGxpa2UgaXQgd29ya3MgdGhhdCB3 YXkuCj4gPiAKPiA+IFRoYW5rcywKPiA+IAo+IGxhdGVuY3kgaXMgbm90IGEgZmlsdGVyLCBQQ0ll IFBNVSBoYXMgYSBncm91cCBvZiBsYWN0ZW5jeSBldmVudHMsIHRoZWlyCj4gZXZlbnQgbnVtYmVy IGFyZSB3aXRoaW4gdGhlIGxhdGVuY3lfZXZlbnRzX2xpc3QsIGFuZCB0aGUgYWJvdmUgZXhwbGFp bnMgaG93Cj4gbGF0ZW5jeSBldmVudHMgd29yay4KPiAKPiBQTVUgZHJpdmVycyBoYXZlIFRMUCBs ZW5ndGggZmlsdGVyIGZvciBiYW5kd2lkdGggZXZlbnRzLCB1c2VycyBjb3VsZCBzZXQKPiBsaWtl ICJJIG9ubHkgaW50ZXJlc3RlZCBpbiBiYW5kd2lkdGggb2YgcGFja2V0cyB3aXRoIFRMUCBsZW5n dGggYmlnZ2VyIHRoYW4KPiB4Ii4KClRoYW5rcyBmb3IgdGhlIGV4cGxhbmF0aW9ucywgSSB0aGlu ayBJIGdldCBpdCBhIGJpdCBiZXR0ZXIgbm93LiBCdXQgSSBzdGlsbAp0aGluayB3ZSBzaG91bGQg YmUgZXhwb3NpbmcgYm90aCBvZiB0aGUgdmFsdWVzIHRvIHVzZXJzcGFjZSBpbnN0ZWFkIG9mCnJl cG9ydGluZyB0aGUgcmF0aW8gZnJvbSB3aGljaCB0aGUgaW5kaXZpZHVhbCBjb3VudGVycyBhcmUg dGhlbgp1bnJlY292ZXJhYmxlLgoKSXQgd2lsbCBjb21wbGljYXRlIHRoZSBkcml2ZXIgc2xpZ2h0 bHksIGJ1dCBjYW4gd2UgaW5zdGVhZCBleHBvc2UgdGhlCmV2ZW50cyBpbmRlcGVuZGVudGx5IGFu ZCB0aGVuIGFsbG93aW5nIHNjaGVkdWxpbmcgc29tZSBvZiB0aGVtIGluIGdyb3Vwcz8KClRoYXQg d2F5IHdlIGp1c3QgdHJlYXQgSElTSV9QQ0lFX0NOVCBhbmQgSElTSV9QQ0lFX0VYVF9DTlQgYXMg c2VwYXJhdGUKY291bnRlcnMsIGJ1dCB3aXRoIGEgc2NoZWR1bGluZyBjb25zdHJhaW50IHRoYXQg ZXZlbnRzIGluIGEgcmVnaXN0ZXIgcGFpcgptdXN0IGJlIGluIHRoZSBzYW1lIGdyb3VwLgoKV2ls bAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=