From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B15922563 for ; Wed, 15 Mar 2023 08:00:07 +0000 (UTC) Received: by mail-pf1-f176.google.com with SMTP id c10so11150478pfv.13 for ; Wed, 15 Mar 2023 01:00:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678867207; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=bXhScNvJirB/hCflBGsU4AHsXlFvEM2HEzIa7ETc+5w=; b=CZ45Os5vAhiGxnaT2B5NTGpIkwiI8MqD/ziRs0x3wnMbEgj8jw1airgeraYdxyWsyV vmF96YsILMJEU4DhPbSXzSP5aCEr1dkAiFEhW3lSCH5z9aOmhMXUXLDyoioY7gYRodJ+ /1wL6GA0qAexm4vJ6PSRs37PhqkdAZ8RogaqUg218Q8GPm8XHFDrjWRNY18V20ZcuxNi 3kVZEh68djLaFncYHdgp601CGij3HCsgUPRB0dRmK43JQwSw+zQc2djkNO+g6QSLKNjk ce2wd1NFtyHkurOmdqkDgMxMWSujkoJ6jy7ewXi26cpBL2NPiMRzj7mVzsoJETslVPup P0Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678867207; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bXhScNvJirB/hCflBGsU4AHsXlFvEM2HEzIa7ETc+5w=; b=NnGH7gKgwvkKMq97A9K7GdalSmIY9FSAHh8giqKIqFh9Vw3DZsn6329yzdQxiQHHMG ym9Ahl+RdF5pNRCZT3k9BGDPRjMJ8Z8hwsewFSWt00pJN1RX/+gvvBd+rjx41FY/kUVU 0BAN4+kDyGSWGqONcPARsALGKgq+Lh2VfqaFep05RyExir5vf/qgYWPX55DeCleIAWVk ZMMMHuys19zJ1LUPKVx78CqcqxPHLwqZYuK4B5YhFsTi1ohuUehzh5Q+cJdbYqxaOW4K vptXm0mfB+wuVW79QRQgkGKLtQiJGhU0jDMlY/W1hj3I0T2VdGkFZi6lTuAywaO72ceV 33ew== X-Gm-Message-State: AO0yUKW7oVFHuozx+Gwcr9Ctqru2pmXxll7NiRAhQXnJcsu7WbVdK0Ak g4BMfTT0uf0teBvToyc7cpfu X-Google-Smtp-Source: AK7set/ceQHRKEOXXse7gpx0PCqzmM42mq0cpYr+xa3HGUM1xkOh9XW4RheqWjZcyLZs28ahYe6HYg== X-Received: by 2002:aa7:96b5:0:b0:623:7340:3741 with SMTP id g21-20020aa796b5000000b0062373403741mr8696841pfk.23.1678867207070; Wed, 15 Mar 2023 01:00:07 -0700 (PDT) Received: from thinkpad ([117.217.182.35]) by smtp.gmail.com with ESMTPSA id h3-20020aa786c3000000b005a84de344a6sm2996510pfo.14.2023.03.15.01.00.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Mar 2023 01:00:06 -0700 (PDT) Date: Wed, 15 Mar 2023 13:29:58 +0530 From: Manivannan Sadhasivam To: Johan Hovold Cc: will@kernel.org, joro@8bytes.org, robin.murphy@arm.com, andersson@kernel.org, johan+linaro@kernel.org, steev@kali.org, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] iommu/arm-smmu-qcom: Rework the logic finding the bypass quirk Message-ID: <20230315075958.GC25575@thinkpad> References: <20230314184659.176473-1-manivannan.sadhasivam@linaro.org> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev 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: On Wed, Mar 15, 2023 at 08:37:32AM +0100, Johan Hovold wrote: > On Wed, Mar 15, 2023 at 12:16:59AM +0530, Manivannan Sadhasivam wrote: > > The logic used to find the quirky firmware that intercepts the writes to > > S2CR register to replace bypass type streams with a fault, and ignore the > > fault type, is not working with the firmware on newer SoCs like SC8280XP. > > > > The current logic uses the last stream mapping group (num_mapping_groups > > - 1) as an index for finding quirky firmware. But on SC8280XP, NUMSMRG > > reports a value of 162 due to emulation and the logic is not working for > > stream mapping groups > 128. (Note that the ARM SMMU architecture > > specification defines NUMSMRG in the range of 0-127). > > > > So the current logic that checks the (162-1)th S2CR entry fails to detect > > the quirky firmware on these devices and SMMU triggers invalid context > > fault for bypass streams. > > > > To fix this issue, let's limit "num_mapping_groups" to 128 as per ARM SMMU > > spec and rework the logic to find the first non-valid (free) stream mapping > > register group (SMR) and use that index to access S2CR for detecting the > > bypass quirk. If no free groups are available, then just skip the quirk > > detection. > > > > While at it, let's move the quirk detection logic to a separate function > > and change the local variable name from last_s2cr to free_s2cr. > > > > Reviewed-by: Bjorn Andersson > > Signed-off-by: Manivannan Sadhasivam > > --- > > > > Changes in v3: > > > > * Limited num_mapping_groups to 128 as per ARM SMMU spec and removed the > > check for 128 groups in qcom_smmu_bypass_quirk() > > * Reworded the commit message accordingly > > > > Changes in v2: > > > > * Limited the check to 128 groups as per ARM SMMU spec's NUMSMRG range > > * Moved the quirk handling to its own function > > * Collected review tag from Bjorn > > > +static int qcom_smmu_cfg_probe(struct arm_smmu_device *smmu) > > +{ > > + u32 smr; > > + int i; > > + > > + /* > > + * Limit the number of stream matching groups to 128 as the ARM SMMU architecture > > + * specification defines NUMSMRG (Number of Stream Mapping Register Groups) in the > > + * range of 0-127, but some Qcom platforms emulate more stream mapping groups. And > > + * those groups don't exhibit the same behavior as the architecture supported ones. > > + */ > > Please fix your editor so that it wraps lines at 80 columns, which is > still the preferred (soft) limit. > If exceeding 80 columns end up making the comment more readable (fewer lines), then why should we limit ourselves? > > + if (smmu->num_mapping_groups > 128) { > > + dev_warn(smmu->dev, "\tLimiting the stream matching groups to 128\n"); > > dev_notice() should do since there's nothing a user can do about this. > Ok. > > + smmu->num_mapping_groups = 128; > > + } > > So this hunk is really all that is needed to make the current quirk > detection work on sc8280xp. Why not simply stick with the current logic > and use the last group until there is a need for anything more? > No! What if the bootloader had set up mapping for 128 groups? In that case we'll overwrite the last group. It is still required to find the valid group and use it for quirk detection. If no group is available, we'll skip it. > Also, should this not be done in arm_smmu_device_cfg_probe() as I > suggested earlier (e.g. to avoid allocating resources for the groups > that will never be used)? > I just went with Robin's suggestion on adding this check to cfg_probe() hook. But I don't have any strong preference either. Thanks, Mani > > + > > + qcom_smmu_bypass_quirk(smmu); > > > > for (i = 0; i < smmu->num_mapping_groups; i++) { > > smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i)); > > Johan -- மணிவண்ணன் சதாசிவம் 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 A0ED5C6FD1D for ; Wed, 15 Mar 2023 08:01:18 +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=ttxgxlzrwrOdj0W0avywiuMLonjN/UREd9y+fF+b8cA=; b=o6JkvbVYSQOL1Q ccNy14T1fL11TaXEdmz1exHHcmBlbpktsQkejUfuN1uZvzbDcRWYDRCeokQc6OGm3giPG97s0f1Qu dpEMh0/7fBXPmDNP7IKg3qwx+A4djWXACJ48G5NvIV3Eu+zbwBHtyy7uAzl2JwJO3D0150H/K0Jlq lU6Brg4N98X8XOxdLoHsbZuvLfXXDQktuKYJYHWeTIhWPAcWCgSboeEh750YLOKOhp9CHCZ8gC426 tnsCyj4wx0lOoeB4VxT83TqUh+Fr4TAq3/KfFrMczdFv3Y6aKBkgUOsdcynwlTB9zqjCPbw6mTDXC sZ46MrxolalYjUSWJ30g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pcM3V-00CiYG-0r; Wed, 15 Mar 2023 08:00:17 +0000 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pcM3P-00CiUQ-0g for linux-arm-kernel@lists.infradead.org; Wed, 15 Mar 2023 08:00:13 +0000 Received: by mail-pf1-x429.google.com with SMTP id b20so11174966pfo.6 for ; Wed, 15 Mar 2023 01:00:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678867207; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=bXhScNvJirB/hCflBGsU4AHsXlFvEM2HEzIa7ETc+5w=; b=CZ45Os5vAhiGxnaT2B5NTGpIkwiI8MqD/ziRs0x3wnMbEgj8jw1airgeraYdxyWsyV vmF96YsILMJEU4DhPbSXzSP5aCEr1dkAiFEhW3lSCH5z9aOmhMXUXLDyoioY7gYRodJ+ /1wL6GA0qAexm4vJ6PSRs37PhqkdAZ8RogaqUg218Q8GPm8XHFDrjWRNY18V20ZcuxNi 3kVZEh68djLaFncYHdgp601CGij3HCsgUPRB0dRmK43JQwSw+zQc2djkNO+g6QSLKNjk ce2wd1NFtyHkurOmdqkDgMxMWSujkoJ6jy7ewXi26cpBL2NPiMRzj7mVzsoJETslVPup P0Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678867207; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bXhScNvJirB/hCflBGsU4AHsXlFvEM2HEzIa7ETc+5w=; b=kf3/NPGcANZFA6X/u3RRfzbGo8gHsInKkaiOtN93jtlDDUYBPLOUmVAhuRFP6ZUlwA ShMrJct6OY1EeMWkBkcFjnJNtyPqQqKDr3mhl/L5d8sIz1E2x0Zni2D7OWZOdrOOw6zx FVGEuved6SxudWUGx2yyvmRQp9QASTSgSFa0AgbFM0FjR5aCA6QheJeGOxa+mwWZpqRu VEsxh6hffPz3lbZzau+vOevPJMG2REPyrVtN3NaC7dXFSYi31N2ckHlRxNCdQjsaXR/Y j3iibjvW9Iwcrcb6D00Dx3KEODX3rXqAAh6bqnYAjsESDbxbfkY8kU1aTRHKt3kTwxfE rnww== X-Gm-Message-State: AO0yUKVx+14B3KG3vf1SoTzNzwci4Igid58c86LML5GDJUvo+/uRj42E mxtdobo5aGqThvPS1wCNt9CJ X-Google-Smtp-Source: AK7set/ceQHRKEOXXse7gpx0PCqzmM42mq0cpYr+xa3HGUM1xkOh9XW4RheqWjZcyLZs28ahYe6HYg== X-Received: by 2002:aa7:96b5:0:b0:623:7340:3741 with SMTP id g21-20020aa796b5000000b0062373403741mr8696841pfk.23.1678867207070; Wed, 15 Mar 2023 01:00:07 -0700 (PDT) Received: from thinkpad ([117.217.182.35]) by smtp.gmail.com with ESMTPSA id h3-20020aa786c3000000b005a84de344a6sm2996510pfo.14.2023.03.15.01.00.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Mar 2023 01:00:06 -0700 (PDT) Date: Wed, 15 Mar 2023 13:29:58 +0530 From: Manivannan Sadhasivam To: Johan Hovold Cc: will@kernel.org, joro@8bytes.org, robin.murphy@arm.com, andersson@kernel.org, johan+linaro@kernel.org, steev@kali.org, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] iommu/arm-smmu-qcom: Rework the logic finding the bypass quirk Message-ID: <20230315075958.GC25575@thinkpad> References: <20230314184659.176473-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230315_010011_252585_B834665E X-CRM114-Status: GOOD ( 37.31 ) 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 T24gV2VkLCBNYXIgMTUsIDIwMjMgYXQgMDg6Mzc6MzJBTSArMDEwMCwgSm9oYW4gSG92b2xkIHdy b3RlOgo+IE9uIFdlZCwgTWFyIDE1LCAyMDIzIGF0IDEyOjE2OjU5QU0gKzA1MzAsIE1hbml2YW5u YW4gU2FkaGFzaXZhbSB3cm90ZToKPiA+IFRoZSBsb2dpYyB1c2VkIHRvIGZpbmQgdGhlIHF1aXJr eSBmaXJtd2FyZSB0aGF0IGludGVyY2VwdHMgdGhlIHdyaXRlcyB0bwo+ID4gUzJDUiByZWdpc3Rl ciB0byByZXBsYWNlIGJ5cGFzcyB0eXBlIHN0cmVhbXMgd2l0aCBhIGZhdWx0LCBhbmQgaWdub3Jl IHRoZQo+ID4gZmF1bHQgdHlwZSwgaXMgbm90IHdvcmtpbmcgd2l0aCB0aGUgZmlybXdhcmUgb24g bmV3ZXIgU29DcyBsaWtlIFNDODI4MFhQLgo+ID4gCj4gPiBUaGUgY3VycmVudCBsb2dpYyB1c2Vz IHRoZSBsYXN0IHN0cmVhbSBtYXBwaW5nIGdyb3VwIChudW1fbWFwcGluZ19ncm91cHMKPiA+IC0g MSkgYXMgYW4gaW5kZXggZm9yIGZpbmRpbmcgcXVpcmt5IGZpcm13YXJlLiBCdXQgb24gU0M4Mjgw WFAsIE5VTVNNUkcKPiA+IHJlcG9ydHMgYSB2YWx1ZSBvZiAxNjIgZHVlIHRvIGVtdWxhdGlvbiBh bmQgdGhlIGxvZ2ljIGlzIG5vdCB3b3JraW5nIGZvcgo+ID4gc3RyZWFtIG1hcHBpbmcgZ3JvdXBz ID4gMTI4LiAoTm90ZSB0aGF0IHRoZSBBUk0gU01NVSBhcmNoaXRlY3R1cmUKPiA+IHNwZWNpZmlj YXRpb24gZGVmaW5lcyBOVU1TTVJHIGluIHRoZSByYW5nZSBvZiAwLTEyNykuCj4gPiAKPiA+IFNv IHRoZSBjdXJyZW50IGxvZ2ljIHRoYXQgY2hlY2tzIHRoZSAoMTYyLTEpdGggUzJDUiBlbnRyeSBm YWlscyB0byBkZXRlY3QKPiA+IHRoZSBxdWlya3kgZmlybXdhcmUgb24gdGhlc2UgZGV2aWNlcyBh bmQgU01NVSB0cmlnZ2VycyBpbnZhbGlkIGNvbnRleHQKPiA+IGZhdWx0IGZvciBieXBhc3Mgc3Ry ZWFtcy4KPiA+IAo+ID4gVG8gZml4IHRoaXMgaXNzdWUsIGxldCdzIGxpbWl0ICJudW1fbWFwcGlu Z19ncm91cHMiIHRvIDEyOCBhcyBwZXIgQVJNIFNNTVUKPiA+IHNwZWMgYW5kIHJld29yayB0aGUg bG9naWMgdG8gZmluZCB0aGUgZmlyc3Qgbm9uLXZhbGlkIChmcmVlKSBzdHJlYW0gbWFwcGluZwo+ ID4gcmVnaXN0ZXIgZ3JvdXAgKFNNUikgYW5kIHVzZSB0aGF0IGluZGV4IHRvIGFjY2VzcyBTMkNS IGZvciBkZXRlY3RpbmcgdGhlCj4gPiBieXBhc3MgcXVpcmsuIElmIG5vIGZyZWUgZ3JvdXBzIGFy ZSBhdmFpbGFibGUsIHRoZW4ganVzdCBza2lwIHRoZSBxdWlyawo+ID4gZGV0ZWN0aW9uLgo+ID4g Cj4gPiBXaGlsZSBhdCBpdCwgbGV0J3MgbW92ZSB0aGUgcXVpcmsgZGV0ZWN0aW9uIGxvZ2ljIHRv IGEgc2VwYXJhdGUgZnVuY3Rpb24KPiA+IGFuZCBjaGFuZ2UgdGhlIGxvY2FsIHZhcmlhYmxlIG5h bWUgZnJvbSBsYXN0X3MyY3IgdG8gZnJlZV9zMmNyLgo+ID4gCj4gPiBSZXZpZXdlZC1ieTogQmpv cm4gQW5kZXJzc29uIDxhbmRlcnNzb25Aa2VybmVsLm9yZz4KPiA+IFNpZ25lZC1vZmYtYnk6IE1h bml2YW5uYW4gU2FkaGFzaXZhbSA8bWFuaXZhbm5hbi5zYWRoYXNpdmFtQGxpbmFyby5vcmc+Cj4g PiAtLS0KPiA+IAo+ID4gQ2hhbmdlcyBpbiB2MzoKPiA+IAo+ID4gKiBMaW1pdGVkIG51bV9tYXBw aW5nX2dyb3VwcyB0byAxMjggYXMgcGVyIEFSTSBTTU1VIHNwZWMgYW5kIHJlbW92ZWQgdGhlCj4g PiAgIGNoZWNrIGZvciAxMjggZ3JvdXBzIGluIHFjb21fc21tdV9ieXBhc3NfcXVpcmsoKQo+ID4g KiBSZXdvcmRlZCB0aGUgY29tbWl0IG1lc3NhZ2UgYWNjb3JkaW5nbHkKPiA+IAo+ID4gQ2hhbmdl cyBpbiB2MjoKPiA+IAo+ID4gKiBMaW1pdGVkIHRoZSBjaGVjayB0byAxMjggZ3JvdXBzIGFzIHBl ciBBUk0gU01NVSBzcGVjJ3MgTlVNU01SRyByYW5nZQo+ID4gKiBNb3ZlZCB0aGUgcXVpcmsgaGFu ZGxpbmcgdG8gaXRzIG93biBmdW5jdGlvbgo+ID4gKiBDb2xsZWN0ZWQgcmV2aWV3IHRhZyBmcm9t IEJqb3JuCj4gCj4gPiArc3RhdGljIGludCBxY29tX3NtbXVfY2ZnX3Byb2JlKHN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKnNtbXUpCj4gPiArewo+ID4gKwl1MzIgc21yOwo+ID4gKwlpbnQgaTsKPiA+ ICsKPiA+ICsJLyoKPiA+ICsJICogTGltaXQgdGhlIG51bWJlciBvZiBzdHJlYW0gbWF0Y2hpbmcg Z3JvdXBzIHRvIDEyOCBhcyB0aGUgQVJNIFNNTVUgYXJjaGl0ZWN0dXJlCj4gPiArCSAqIHNwZWNp ZmljYXRpb24gZGVmaW5lcyBOVU1TTVJHIChOdW1iZXIgb2YgU3RyZWFtIE1hcHBpbmcgUmVnaXN0 ZXIgR3JvdXBzKSBpbiB0aGUKPiA+ICsJICogcmFuZ2Ugb2YgMC0xMjcsIGJ1dCBzb21lIFFjb20g cGxhdGZvcm1zIGVtdWxhdGUgbW9yZSBzdHJlYW0gbWFwcGluZyBncm91cHMuIEFuZAo+ID4gKwkg KiB0aG9zZSBncm91cHMgZG9uJ3QgZXhoaWJpdCB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgYXJj aGl0ZWN0dXJlIHN1cHBvcnRlZCBvbmVzLgo+ID4gKwkgKi8KPiAKPiBQbGVhc2UgZml4IHlvdXIg ZWRpdG9yIHNvIHRoYXQgaXQgd3JhcHMgbGluZXMgYXQgODAgY29sdW1ucywgd2hpY2ggaXMKPiBz dGlsbCB0aGUgcHJlZmVycmVkIChzb2Z0KSBsaW1pdC4KPiAKCklmIGV4Y2VlZGluZyA4MCBjb2x1 bW5zIGVuZCB1cCBtYWtpbmcgdGhlIGNvbW1lbnQgbW9yZSByZWFkYWJsZSAoZmV3ZXIgbGluZXMp LAp0aGVuIHdoeSBzaG91bGQgd2UgbGltaXQgb3Vyc2VsdmVzPwoKPiA+ICsJaWYgKHNtbXUtPm51 bV9tYXBwaW5nX2dyb3VwcyA+IDEyOCkgewo+ID4gKwkJZGV2X3dhcm4oc21tdS0+ZGV2LCAiXHRM aW1pdGluZyB0aGUgc3RyZWFtIG1hdGNoaW5nIGdyb3VwcyB0byAxMjhcbiIpOwo+IAo+IGRldl9u b3RpY2UoKSBzaG91bGQgZG8gc2luY2UgdGhlcmUncyBub3RoaW5nIGEgdXNlciBjYW4gZG8gYWJv dXQgdGhpcy4KPiAKCk9rLgoKPiA+ICsJCXNtbXUtPm51bV9tYXBwaW5nX2dyb3VwcyA9IDEyODsK PiA+ICsJfQo+IAo+IFNvIHRoaXMgaHVuayBpcyByZWFsbHkgYWxsIHRoYXQgaXMgbmVlZGVkIHRv IG1ha2UgdGhlIGN1cnJlbnQgcXVpcmsKPiBkZXRlY3Rpb24gd29yayBvbiBzYzgyODB4cC4gV2h5 IG5vdCBzaW1wbHkgc3RpY2sgd2l0aCB0aGUgY3VycmVudCBsb2dpYwo+IGFuZCB1c2UgdGhlIGxh c3QgZ3JvdXAgdW50aWwgdGhlcmUgaXMgYSBuZWVkIGZvciBhbnl0aGluZyBtb3JlPwo+IAoKTm8h IFdoYXQgaWYgdGhlIGJvb3Rsb2FkZXIgaGFkIHNldCB1cCBtYXBwaW5nIGZvciAxMjggZ3JvdXBz PyBJbiB0aGF0IGNhc2UKd2UnbGwgb3ZlcndyaXRlIHRoZSBsYXN0IGdyb3VwLiBJdCBpcyBzdGls bCByZXF1aXJlZCB0byBmaW5kIHRoZSB2YWxpZCBncm91cAphbmQgdXNlIGl0IGZvciBxdWlyayBk ZXRlY3Rpb24uIElmIG5vIGdyb3VwIGlzIGF2YWlsYWJsZSwgd2UnbGwgc2tpcCBpdC4KCj4gQWxz bywgc2hvdWxkIHRoaXMgbm90IGJlIGRvbmUgaW4gYXJtX3NtbXVfZGV2aWNlX2NmZ19wcm9iZSgp IGFzIEkKPiBzdWdnZXN0ZWQgZWFybGllciAoZS5nLiB0byBhdm9pZCBhbGxvY2F0aW5nIHJlc291 cmNlcyBmb3IgdGhlIGdyb3Vwcwo+IHRoYXQgd2lsbCBuZXZlciBiZSB1c2VkKT8KPiAKCkkganVz dCB3ZW50IHdpdGggUm9iaW4ncyBzdWdnZXN0aW9uIG9uIGFkZGluZyB0aGlzIGNoZWNrIHRvIGNm Z19wcm9iZSgpIGhvb2suCkJ1dCBJIGRvbid0IGhhdmUgYW55IHN0cm9uZyBwcmVmZXJlbmNlIGVp dGhlci4KClRoYW5rcywKTWFuaQoKPiA+ICsKPiA+ICsJcWNvbV9zbW11X2J5cGFzc19xdWlyayhz bW11KTsKPiA+ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IHNtbXUtPm51bV9tYXBwaW5nX2dyb3Vw czsgaSsrKSB7Cj4gPiAgCQlzbXIgPSBhcm1fc21tdV9ncjBfcmVhZChzbW11LCBBUk1fU01NVV9H UjBfU01SKGkpKTsKPiAKPiBKb2hhbgoKLS0gCuCuruCuo+Cuv+CuteCuo+CvjeCuo+CuqeCvjSDg rprgrqTgrr7grprgrr/grrXgrq7gr40KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK