From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6651F1474DF; Fri, 12 Apr 2024 16:08:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712938089; cv=none; b=G07p0GnRlAkgW+T7cYTqMUJVl7JpMDeXtLJGnQS3KMOSxU9huVke6n882mkmkBgMqVqbZrmeIPtQdVFciovqg1KtRFR2jsVaoh9cKSX+0cRvjEON47A3lrJzHL4b3Vi5A6+39q+VuBJJtyk/MAWQili/SdjHEvdrvEbDeJGS+0I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712938089; c=relaxed/simple; bh=KqGVur9Ye2q6dNqvzw3oeYhfgRsaaL049KXc3Dv2nBs=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=EX9jIndK8yb97on7wE5si7ExpMlpaSX8khAqZYDRxP4YKyCvuZYoCTcTOHjpe5mL/qmNVEPBa52aKH7sDnHDWsztp4newgvKoZ114+sTdeMmhbkPE7FBluzpBiwq4hmIY5dNOXK8O0YUmjYf7zJcpsJjGjhmmtkxFSBstr5ZmT4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 A9584339; Fri, 12 Apr 2024 09:08:34 -0700 (PDT) Received: from bogus (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2092C3F64C; Fri, 12 Apr 2024 09:08:04 -0700 (PDT) Date: Fri, 12 Apr 2024 17:08:01 +0100 From: Sudeep Holla To: Jeremy Linton Cc: yunhui cui , rafael@kernel.org, Sudeep Holla , lenb@kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org Subject: Re: [External] Re: [PATCH 1/2] ACPI: PPTT: Populate cacheinfo entirely with PPTT Message-ID: References: <20240407123829.36474-1-cuiyunhui@bytedance.com> <2cde00c8-7878-45c0-8621-fca4e70c75e7@arm.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <2cde00c8-7878-45c0-8621-fca4e70c75e7@arm.com> On Fri, Apr 12, 2024 at 10:03:14AM -0500, Jeremy Linton wrote: > Hi, > On 4/10/24 21:28, yunhui cui wrote: > > Hi Jeremy, > > > > On Wed, Apr 10, 2024 at 9:30 AM Jeremy Linton wrote: > > > > > > Hi, > > > First thanks for working on this. > > > > > > On 4/7/24 07:38, Yunhui Cui wrote: > > > > When the type and level information of this_leaf cannot be obtained > > > > from arch, cacheinfo is completely filled in with the content of PPTT. > > > > > > I started reviewing this, based on what I understood to be the need to > > > generate the topology entirely from the PPTT. But, it was raising more > > > questions than answers because the PPTT is far too flexable in its > > > ability to represent cache hierachies that arn't logically useful. For > > > example multiple I or D caches at the same level, or I or D caches > > > higher in the topology than unified ones. > > > > > > At least for arm64 (and I think others) there is an understood > > > simplification that there will be N levels of split I/D caches and M > > > unified levels. And from that, the number of cache leaves are computed > > > and allocated, and then we go in and largly skip PPTT cache nodes which > > > don't make sense in view of a generic topology like that. (see the > > > comment in cacheinfo.c:506) > > > > > > Both of those pieces of information are available in > > > acpi_get_cache_info(). The missing part is marking those N levels of I/D > > > cache as such. > > > > > > Looking at this code I don't really see all the error/allocation > > > logic/etc that assures the cache leaf indexing is allocated correctly > > > which worries me, although admidditly I could be missing something > > > important. > > > > > > In summary, did you consider just allocating matching I/D caches from > > > the number of split levels in acpi_get_cache_info() then removing or > > > invalidating the ones that don't have matching PPTT entries after > > > running cache_setup_acpi()? Thats a fairly trivial change AFAIK if the > > > decision is based on the lack of a cache_id or just changing the > > > this_leaf->type = CACHE_TYPE_UNIFIED assignment to the correct type and > > > assuring left over CACHE_TYPE_NOCACHE entries are removed. I think much > > > of the "significant work" is likely fixed for that to work. Just > > > tweaking detect_cache_level()/get_cache_type() to set > > > CACHE_TYPE_SEPERATE if the level is less than the acpi_get_cache_info() > > > split_level value probably also does the majority of what you need > > > outside of having unequal counts of I and D caches. > > > > > > There are probably other choices as well, thoughts? > > > > > > > First, I think the current state of the ACPI PPTT specification meets > > the requirements and is logically complete. Otherwise, the PPTT > > specification needs to be updated, right? > > The specification is capable of representing all the actual physical > topologies I'm aware of, its also capable of representing quite a number of > topologies that don't make sense to (cant be) build and are largely > nonsense. There are some further details around replacement and allocation > which could be represented but were AFAIK not considered worth the effort > because it makes the representation far more complex. > > So, except for minor clarifications I'm not aware of a need to update it. > > > Our discussion is best focused on the existing and usual case, even on > > ARM64, which is as you say "N-level separated I/D cache, M-level > > unified". > > I understood this was for RISC-V when I reviewed it, but i'm fairly certain > the general cache topologies of RISC-V machines don't vary in their core > concepts and layout much from the wide variety of possibilities available > elsewhere. So its roughly the same problem, you will likely have one or two > layers of split I/D caches and then a number of unified private or shared > caches above that. > > > > > > And then, the problem we have now is that the RISC-V architecture does > > not have a set of registers to describe the cache level and type like > > ARM64 does, so we need to fully trust the contents of the PPTT table. > > Please check the patch: > > https://patchwork.kernel.org/project/linux-riscv/patch/20240407123829.36474-2-cuiyunhui@bytedance.com/ > > I don't think "fully trust" is something you really want, or is helpful as I > suggested above. > > I suspect all that is needed is the construction of the missing I/D layers, > as the existing code will create the Unified layers above as it does today. > On Arm64 the unified system level caches aren't usually described by the > core cache registers either, which is why there is that existing bit of code > to change unknown caches to unified. But it also turns out the pptt walking > code is capable of providing the information to create the I/D layers as > well, if they are matched (ex there exists an I cache for every D cache at a > certain level). > > So, more clarity about the kinds of topologies you expect is helpful to > understand where the current code is failing. > > AKA, As I mentioned I'm fairly certain that its possible to construct the > entire cache topology from the PPTT by changing get_cache_type() to return > "CACHE_TYPE_SEPERATE" when the level is less than the value returned as > "split_level" from acpi_get_cache_info(). That tends to ignore some edge > cases, but I might put them in the "don't to that" bucket. > > I agree with Jeremy's analysis. Can you check if something like below will address your issue. Not compile tested but you get an idea of what we are trying to do here. Regards, Sudeep -->8 diff --git i/arch/riscv/kernel/cacheinfo.c w/arch/riscv/kernel/cacheinfo.c index 09e9b88110d1..92ab73ed5234 100644 --- i/arch/riscv/kernel/cacheinfo.c +++ w/arch/riscv/kernel/cacheinfo.c @@ -79,6 +79,27 @@ int populate_cache_leaves(unsigned int cpu) struct device_node *prev = NULL; int levels = 1, level = 1; + if (!acpi_disabled) { + int ret, fw_levels, split_levels; + + ret = acpi_get_cache_info(cpu, &fw_levels, &split_levels); + if (ret) + return ret; + + /* must be set, so we can drop num_leaves assignment below */ + this_cpu_ci->num_leaves = fw_levels + split_levels; + + for (idx = 0; level <= this_cpu_ci->num_levels && + idx < this_cpu_ci->num_leaves; idx++, level++) { + if (level <= split_levels) { + ci_leaf_init(this_leaf++, CACHE_TYPE_DATA, level); + ci_leaf_init(this_leaf++, CACHE_TYPE_INST, level); + } else { + ci_leaf_init(this_leaf++, CACHE_TYPE_UNIFIED, level); + } + } + } + if (of_property_read_bool(np, "cache-size")) ci_leaf_init(this_leaf++, np, CACHE_TYPE_UNIFIED, level); if (of_property_read_bool(np, "i-cache-size")) 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 656FFC00A94 for ; Fri, 12 Apr 2024 16:08:26 +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: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=ejdn+kmOAUOIpsxc5XlfrT9q//TVBZfkNxl3eaOwsKU=; b=GqOMmF/guJEN1X N2RzR1Gq1DffyPxk4aP51D9gCF2JxAXKNDT614X5cp6bbTBqKu4awXl3pJy2wRO8BWqXELycnnBOP O8og9DpmuqbsXUAX5vWSHUWq7rBdacqoZIB+R4Oja1p4HRCagvxxut62c2m/8vXM479WKERVmt5Zg foJBo3jEkFah5ZzCc9U7PFFG71lp7gUBb8FnTt0gBM7Msky/FAXJoY/p2DgU8n2j6Sk/h/moUG+jW FK3E2v6nzBHsUYIyoGQeoLaJq3gE4JpKuILftQBWu7qPJebCAKC5yhFqSZYhnPR2ntu/ojtdMBdne UyJwiCME6aOj6J/O4iZg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvJRp-00000000MkT-2EjJ; Fri, 12 Apr 2024 16:08:17 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvJRl-00000000Mf0-25WJ for linux-riscv@lists.infradead.org; Fri, 12 Apr 2024 16:08:16 +0000 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 A9584339; Fri, 12 Apr 2024 09:08:34 -0700 (PDT) Received: from bogus (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2092C3F64C; Fri, 12 Apr 2024 09:08:04 -0700 (PDT) Date: Fri, 12 Apr 2024 17:08:01 +0100 From: Sudeep Holla To: Jeremy Linton Cc: yunhui cui , rafael@kernel.org, Sudeep Holla , lenb@kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org Subject: Re: [External] Re: [PATCH 1/2] ACPI: PPTT: Populate cacheinfo entirely with PPTT Message-ID: References: <20240407123829.36474-1-cuiyunhui@bytedance.com> <2cde00c8-7878-45c0-8621-fca4e70c75e7@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <2cde00c8-7878-45c0-8621-fca4e70c75e7@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240412_090814_244200_D63E3F76 X-CRM114-Status: GOOD ( 51.55 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gRnJpLCBBcHIgMTIsIDIwMjQgYXQgMTA6MDM6MTRBTSAtMDUwMCwgSmVyZW15IExpbnRvbiB3 cm90ZToKPiBIaSwKPiBPbiA0LzEwLzI0IDIxOjI4LCB5dW5odWkgY3VpIHdyb3RlOgo+ID4gSGkg SmVyZW15LAo+ID4gCj4gPiBPbiBXZWQsIEFwciAxMCwgMjAyNCBhdCA5OjMw4oCvQU0gSmVyZW15 IExpbnRvbiA8amVyZW15LmxpbnRvbkBhcm0uY29tPiB3cm90ZToKPiA+ID4gCj4gPiA+IEhpLAo+ ID4gPiBGaXJzdCB0aGFua3MgZm9yIHdvcmtpbmcgb24gdGhpcy4KPiA+ID4gCj4gPiA+IE9uIDQv Ny8yNCAwNzozOCwgWXVuaHVpIEN1aSB3cm90ZToKPiA+ID4gPiBXaGVuIHRoZSB0eXBlIGFuZCBs ZXZlbCBpbmZvcm1hdGlvbiBvZiB0aGlzX2xlYWYgY2Fubm90IGJlIG9idGFpbmVkCj4gPiA+ID4g ZnJvbSBhcmNoLCBjYWNoZWluZm8gaXMgY29tcGxldGVseSBmaWxsZWQgaW4gd2l0aCB0aGUgY29u dGVudCBvZiBQUFRULgo+ID4gPiAKPiA+ID4gSSBzdGFydGVkIHJldmlld2luZyB0aGlzLCBiYXNl ZCBvbiB3aGF0IEkgdW5kZXJzdG9vZCB0byBiZSB0aGUgbmVlZCB0bwo+ID4gPiBnZW5lcmF0ZSB0 aGUgdG9wb2xvZ3kgZW50aXJlbHkgZnJvbSB0aGUgUFBUVC4gQnV0LCBpdCB3YXMgcmFpc2luZyBt b3JlCj4gPiA+IHF1ZXN0aW9ucyB0aGFuIGFuc3dlcnMgYmVjYXVzZSB0aGUgUFBUVCBpcyBmYXIg dG9vIGZsZXhhYmxlIGluIGl0cwo+ID4gPiBhYmlsaXR5IHRvIHJlcHJlc2VudCBjYWNoZSBoaWVy YWNoaWVzIHRoYXQgYXJuJ3QgbG9naWNhbGx5IHVzZWZ1bC4gRm9yCj4gPiA+IGV4YW1wbGUgbXVs dGlwbGUgSSBvciBEIGNhY2hlcyBhdCB0aGUgc2FtZSBsZXZlbCwgb3IgSSBvciBEIGNhY2hlcwo+ ID4gPiBoaWdoZXIgaW4gdGhlIHRvcG9sb2d5IHRoYW4gdW5pZmllZCBvbmVzLgo+ID4gPiAKPiA+ ID4gQXQgbGVhc3QgZm9yIGFybTY0IChhbmQgSSB0aGluayBvdGhlcnMpIHRoZXJlIGlzIGFuIHVu ZGVyc3Rvb2QKPiA+ID4gc2ltcGxpZmljYXRpb24gdGhhdCB0aGVyZSB3aWxsIGJlIE4gbGV2ZWxz IG9mIHNwbGl0IEkvRCBjYWNoZXMgYW5kIE0KPiA+ID4gdW5pZmllZCBsZXZlbHMuIEFuZCBmcm9t IHRoYXQsIHRoZSBudW1iZXIgb2YgY2FjaGUgbGVhdmVzIGFyZSBjb21wdXRlZAo+ID4gPiBhbmQg YWxsb2NhdGVkLCBhbmQgdGhlbiB3ZSBnbyBpbiBhbmQgbGFyZ2x5IHNraXAgUFBUVCBjYWNoZSBu b2RlcyB3aGljaAo+ID4gPiBkb24ndCBtYWtlIHNlbnNlIGluIHZpZXcgb2YgYSBnZW5lcmljIHRv cG9sb2d5IGxpa2UgdGhhdC4gKHNlZSB0aGUKPiA+ID4gY29tbWVudCBpbiBjYWNoZWluZm8uYzo1 MDYpCj4gPiA+IAo+ID4gPiBCb3RoIG9mIHRob3NlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhcmUg YXZhaWxhYmxlIGluCj4gPiA+IGFjcGlfZ2V0X2NhY2hlX2luZm8oKS4gVGhlIG1pc3NpbmcgcGFy dCBpcyBtYXJraW5nIHRob3NlIE4gbGV2ZWxzIG9mIEkvRAo+ID4gPiBjYWNoZSBhcyBzdWNoLgo+ ID4gPiAKPiA+ID4gTG9va2luZyBhdCB0aGlzIGNvZGUgSSBkb24ndCByZWFsbHkgc2VlIGFsbCB0 aGUgZXJyb3IvYWxsb2NhdGlvbgo+ID4gPiBsb2dpYy9ldGMgdGhhdCBhc3N1cmVzIHRoZSBjYWNo ZSBsZWFmIGluZGV4aW5nIGlzIGFsbG9jYXRlZCBjb3JyZWN0bHkKPiA+ID4gd2hpY2ggd29ycmll cyBtZSwgYWx0aG91Z2ggYWRtaWRkaXRseSBJIGNvdWxkIGJlIG1pc3Npbmcgc29tZXRoaW5nCj4g PiA+IGltcG9ydGFudC4KPiA+ID4gCj4gPiA+IEluIHN1bW1hcnksIGRpZCB5b3UgY29uc2lkZXIg anVzdCBhbGxvY2F0aW5nIG1hdGNoaW5nIEkvRCBjYWNoZXMgZnJvbQo+ID4gPiB0aGUgbnVtYmVy IG9mIHNwbGl0IGxldmVscyBpbiBhY3BpX2dldF9jYWNoZV9pbmZvKCkgdGhlbiByZW1vdmluZyBv cgo+ID4gPiBpbnZhbGlkYXRpbmcgdGhlIG9uZXMgdGhhdCBkb24ndCBoYXZlIG1hdGNoaW5nIFBQ VFQgZW50cmllcyBhZnRlcgo+ID4gPiBydW5uaW5nIGNhY2hlX3NldHVwX2FjcGkoKT8gVGhhdHMg YSBmYWlybHkgdHJpdmlhbCBjaGFuZ2UgQUZBSUsgaWYgdGhlCj4gPiA+IGRlY2lzaW9uIGlzIGJh c2VkIG9uIHRoZSBsYWNrIG9mIGEgY2FjaGVfaWQgb3IganVzdCBjaGFuZ2luZyB0aGUKPiA+ID4g dGhpc19sZWFmLT50eXBlID0gQ0FDSEVfVFlQRV9VTklGSUVEIGFzc2lnbm1lbnQgdG8gdGhlIGNv cnJlY3QgdHlwZSBhbmQKPiA+ID4gYXNzdXJpbmcgbGVmdCBvdmVyIENBQ0hFX1RZUEVfTk9DQUNI RSBlbnRyaWVzIGFyZSByZW1vdmVkLiBJIHRoaW5rIG11Y2gKPiA+ID4gb2YgdGhlICJzaWduaWZp Y2FudCB3b3JrIiBpcyBsaWtlbHkgZml4ZWQgZm9yIHRoYXQgdG8gd29yay4gSnVzdAo+ID4gPiB0 d2Vha2luZyBkZXRlY3RfY2FjaGVfbGV2ZWwoKS9nZXRfY2FjaGVfdHlwZSgpIHRvIHNldAo+ID4g PiBDQUNIRV9UWVBFX1NFUEVSQVRFIGlmIHRoZSBsZXZlbCBpcyBsZXNzIHRoYW4gdGhlIGFjcGlf Z2V0X2NhY2hlX2luZm8oKQo+ID4gPiBzcGxpdF9sZXZlbCB2YWx1ZSBwcm9iYWJseSBhbHNvIGRv ZXMgdGhlIG1ham9yaXR5IG9mIHdoYXQgeW91IG5lZWQKPiA+ID4gb3V0c2lkZSBvZiBoYXZpbmcg dW5lcXVhbCBjb3VudHMgb2YgSSBhbmQgRCBjYWNoZXMuCj4gPiA+IAo+ID4gPiBUaGVyZSBhcmUg cHJvYmFibHkgb3RoZXIgY2hvaWNlcyBhcyB3ZWxsLCB0aG91Z2h0cz8KPiA+ID4gCj4gPiAKPiA+ IEZpcnN0LCBJIHRoaW5rIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBBQ1BJIFBQVFQgc3BlY2lm aWNhdGlvbiBtZWV0cwo+ID4gdGhlIHJlcXVpcmVtZW50cyBhbmQgaXMgbG9naWNhbGx5IGNvbXBs ZXRlLiBPdGhlcndpc2UsIHRoZSBQUFRUCj4gPiBzcGVjaWZpY2F0aW9uIG5lZWRzIHRvIGJlIHVw ZGF0ZWQsIHJpZ2h0Pwo+IAo+IFRoZSBzcGVjaWZpY2F0aW9uIGlzIGNhcGFibGUgb2YgcmVwcmVz ZW50aW5nIGFsbCB0aGUgYWN0dWFsIHBoeXNpY2FsCj4gdG9wb2xvZ2llcyBJJ20gYXdhcmUgb2Ys IGl0cyBhbHNvIGNhcGFibGUgb2YgcmVwcmVzZW50aW5nIHF1aXRlIGEgbnVtYmVyIG9mCj4gdG9w b2xvZ2llcyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2UgdG8gKGNhbnQgYmUpIGJ1aWxkIGFuZCBhcmUg bGFyZ2VseQo+IG5vbnNlbnNlLiBUaGVyZSBhcmUgc29tZSBmdXJ0aGVyIGRldGFpbHMgYXJvdW5k IHJlcGxhY2VtZW50IGFuZCBhbGxvY2F0aW9uCj4gd2hpY2ggY291bGQgYmUgcmVwcmVzZW50ZWQg YnV0IHdlcmUgQUZBSUsgbm90IGNvbnNpZGVyZWQgd29ydGggdGhlIGVmZm9ydAo+IGJlY2F1c2Ug aXQgbWFrZXMgdGhlIHJlcHJlc2VudGF0aW9uIGZhciBtb3JlIGNvbXBsZXguCj4gCj4gU28sIGV4 Y2VwdCBmb3IgbWlub3IgY2xhcmlmaWNhdGlvbnMgSSdtIG5vdCBhd2FyZSBvZiBhIG5lZWQgdG8g dXBkYXRlIGl0Lgo+IAo+ID4gT3VyIGRpc2N1c3Npb24gaXMgYmVzdCBmb2N1c2VkIG9uIHRoZSBl eGlzdGluZyBhbmQgdXN1YWwgY2FzZSwgZXZlbiBvbgo+ID4gQVJNNjQsIHdoaWNoIGlzIGFzIHlv dSBzYXkgIk4tbGV2ZWwgc2VwYXJhdGVkIEkvRCBjYWNoZSwgTS1sZXZlbAo+ID4gdW5pZmllZCIu Cj4gCj4gSSB1bmRlcnN0b29kIHRoaXMgd2FzIGZvciBSSVNDLVYgd2hlbiBJIHJldmlld2VkIGl0 LCBidXQgaSdtIGZhaXJseSBjZXJ0YWluCj4gdGhlIGdlbmVyYWwgY2FjaGUgdG9wb2xvZ2llcyBv ZiBSSVNDLVYgbWFjaGluZXMgZG9uJ3QgdmFyeSBpbiB0aGVpciBjb3JlCj4gY29uY2VwdHMgYW5k IGxheW91dCBtdWNoIGZyb20gdGhlIHdpZGUgdmFyaWV0eSBvZiBwb3NzaWJpbGl0aWVzIGF2YWls YWJsZQo+IGVsc2V3aGVyZS4gU28gaXRzIHJvdWdobHkgdGhlIHNhbWUgcHJvYmxlbSwgeW91IHdp bGwgbGlrZWx5IGhhdmUgb25lIG9yIHR3bwo+IGxheWVycyBvZiBzcGxpdCBJL0QgY2FjaGVzIGFu ZCB0aGVuIGEgbnVtYmVyIG9mIHVuaWZpZWQgcHJpdmF0ZSBvciBzaGFyZWQKPiBjYWNoZXMgYWJv dmUgdGhhdC4KPiAKPiAKPiA+IAo+ID4gQW5kIHRoZW4sIHRoZSBwcm9ibGVtIHdlIGhhdmUgbm93 IGlzIHRoYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgZG9lcwo+ID4gbm90IGhhdmUgYSBzZXQg b2YgcmVnaXN0ZXJzIHRvIGRlc2NyaWJlIHRoZSBjYWNoZSBsZXZlbCBhbmQgdHlwZSBsaWtlCj4g PiBBUk02NCBkb2VzLCBzbyB3ZSBuZWVkIHRvIGZ1bGx5IHRydXN0IHRoZSBjb250ZW50cyBvZiB0 aGUgUFBUVCB0YWJsZS4KPiA+IFBsZWFzZSBjaGVjayB0aGUgcGF0Y2g6Cj4gPiBodHRwczovL3Bh dGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtcmlzY3YvcGF0Y2gvMjAyNDA0MDcxMjM4 MjkuMzY0NzQtMi1jdWl5dW5odWlAYnl0ZWRhbmNlLmNvbS8KPiAKPiBJIGRvbid0IHRoaW5rICJm dWxseSB0cnVzdCIgaXMgc29tZXRoaW5nIHlvdSByZWFsbHkgd2FudCwgb3IgaXMgaGVscGZ1bCBh cyBJCj4gc3VnZ2VzdGVkIGFib3ZlLgo+IAo+IEkgc3VzcGVjdCBhbGwgdGhhdCBpcyBuZWVkZWQg aXMgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgbWlzc2luZyBJL0QgbGF5ZXJzLAo+IGFzIHRoZSBl eGlzdGluZyBjb2RlIHdpbGwgY3JlYXRlIHRoZSBVbmlmaWVkIGxheWVycyBhYm92ZSBhcyBpdCBk b2VzIHRvZGF5Lgo+IE9uIEFybTY0IHRoZSB1bmlmaWVkIHN5c3RlbSBsZXZlbCBjYWNoZXMgYXJl bid0IHVzdWFsbHkgZGVzY3JpYmVkIGJ5IHRoZQo+IGNvcmUgY2FjaGUgcmVnaXN0ZXJzIGVpdGhl ciwgd2hpY2ggaXMgd2h5IHRoZXJlIGlzIHRoYXQgZXhpc3RpbmcgYml0IG9mIGNvZGUKPiB0byBj aGFuZ2UgdW5rbm93biBjYWNoZXMgdG8gdW5pZmllZC4gQnV0IGl0IGFsc28gdHVybnMgb3V0IHRo ZSBwcHR0IHdhbGtpbmcKPiBjb2RlIGlzIGNhcGFibGUgb2YgcHJvdmlkaW5nIHRoZSBpbmZvcm1h dGlvbiB0byBjcmVhdGUgdGhlIEkvRCBsYXllcnMgYXMKPiB3ZWxsLCBpZiB0aGV5IGFyZSBtYXRj aGVkIChleCB0aGVyZSBleGlzdHMgYW4gSSBjYWNoZSBmb3IgZXZlcnkgRCBjYWNoZSBhdCBhCj4g Y2VydGFpbiBsZXZlbCkuCj4gCj4gU28sIG1vcmUgY2xhcml0eSBhYm91dCB0aGUga2luZHMgb2Yg dG9wb2xvZ2llcyB5b3UgZXhwZWN0IGlzIGhlbHBmdWwgdG8KPiB1bmRlcnN0YW5kIHdoZXJlIHRo ZSBjdXJyZW50IGNvZGUgaXMgZmFpbGluZy4KPiAKPiBBS0EsIEFzIEkgbWVudGlvbmVkIEknbSBm YWlybHkgY2VydGFpbiB0aGF0IGl0cyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlCj4gZW50aXJl IGNhY2hlIHRvcG9sb2d5IGZyb20gdGhlIFBQVFQgYnkgY2hhbmdpbmcgZ2V0X2NhY2hlX3R5cGUo KSB0byByZXR1cm4KPiAiQ0FDSEVfVFlQRV9TRVBFUkFURSIgd2hlbiB0aGUgbGV2ZWwgaXMgbGVz cyB0aGFuIHRoZSB2YWx1ZSByZXR1cm5lZCBhcwo+ICJzcGxpdF9sZXZlbCIgZnJvbSBhY3BpX2dl dF9jYWNoZV9pbmZvKCkuIFRoYXQgdGVuZHMgdG8gaWdub3JlIHNvbWUgZWRnZQo+IGNhc2VzLCBi dXQgSSBtaWdodCBwdXQgdGhlbSBpbiB0aGUgImRvbid0IHRvIHRoYXQiIGJ1Y2tldC4KPiAKPgoK SSBhZ3JlZSB3aXRoIEplcmVteSdzIGFuYWx5c2lzLiBDYW4geW91IGNoZWNrIGlmIHNvbWV0aGlu ZyBsaWtlIGJlbG93CndpbGwgYWRkcmVzcyB5b3VyIGlzc3VlLiBOb3QgY29tcGlsZSB0ZXN0ZWQg YnV0IHlvdSBnZXQgYW4gaWRlYSBvZiB3aGF0CndlIGFyZSB0cnlpbmcgdG8gZG8gaGVyZS4KClJl Z2FyZHMsClN1ZGVlcAoKLS0+OApkaWZmIC0tZ2l0IGkvYXJjaC9yaXNjdi9rZXJuZWwvY2FjaGVp bmZvLmMgdy9hcmNoL3Jpc2N2L2tlcm5lbC9jYWNoZWluZm8uYwppbmRleCAwOWU5Yjg4MTEwZDEu LjkyYWI3M2VkNTIzNCAxMDA2NDQKLS0tIGkvYXJjaC9yaXNjdi9rZXJuZWwvY2FjaGVpbmZvLmMK KysrIHcvYXJjaC9yaXNjdi9rZXJuZWwvY2FjaGVpbmZvLmMKQEAgLTc5LDYgKzc5LDI3IEBAIGlu dCBwb3B1bGF0ZV9jYWNoZV9sZWF2ZXModW5zaWduZWQgaW50IGNwdSkKICAgICAgICBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnByZXYgPSBOVUxMOwogICAgICAgIGludCBsZXZlbHMgPSAxLCBsZXZlbCA9 IDE7CgorICAgICAgIGlmICghYWNwaV9kaXNhYmxlZCkgeworICAgICAgICAgICAgICAgaW50IHJl dCwgZndfbGV2ZWxzLCBzcGxpdF9sZXZlbHM7CisKKyAgICAgICAgICAgICAgIHJldCA9IGFjcGlf Z2V0X2NhY2hlX2luZm8oY3B1LCAmZndfbGV2ZWxzLCAmc3BsaXRfbGV2ZWxzKTsKKyAgICAgICAg ICAgICAgIGlmIChyZXQpCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICAgICAgICAgICAgIC8qIG11c3QgYmUgc2V0LCBzbyB3ZSBjYW4gZHJvcCBudW1fbGVhdmVzIGFz c2lnbm1lbnQgYmVsb3cgKi8KKyAgICAgICAgICAgICAgIHRoaXNfY3B1X2NpLT5udW1fbGVhdmVz ID0gZndfbGV2ZWxzICsgc3BsaXRfbGV2ZWxzOworCisgICAgICAgICAgICAgICBmb3IgKGlkeCA9 IDA7IGxldmVsIDw9IHRoaXNfY3B1X2NpLT5udW1fbGV2ZWxzICYmCisgICAgICAgICAgICAgICAg ICAgIGlkeCA8IHRoaXNfY3B1X2NpLT5udW1fbGVhdmVzOyBpZHgrKywgbGV2ZWwrKykgeworICAg ICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPD0gc3BsaXRfbGV2ZWxzKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2lfbGVhZl9pbml0KHRoaXNfbGVhZisrLCBDQUNIRV9U WVBFX0RBVEEsIGxldmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaV9sZWFm X2luaXQodGhpc19sZWFmKyssIENBQ0hFX1RZUEVfSU5TVCwgbGV2ZWwpOworICAgICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpX2xl YWZfaW5pdCh0aGlzX2xlYWYrKywgQ0FDSEVfVFlQRV9VTklGSUVELCBsZXZlbCk7CisgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICB9CisKICAgICAgICBp ZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiY2FjaGUtc2l6ZSIpKQogICAgICAgICAgICAg ICAgY2lfbGVhZl9pbml0KHRoaXNfbGVhZisrLCBucCwgQ0FDSEVfVFlQRV9VTklGSUVELCBsZXZl bCk7CiAgICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImktY2FjaGUtc2l6ZSIp KQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK