From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 E34F43D8C for ; Tue, 14 Mar 2023 14:08:10 +0000 (UTC) Received: by mail-pj1-f51.google.com with SMTP id f6-20020a17090ac28600b0023b9bf9eb63so6971435pjt.5 for ; Tue, 14 Mar 2023 07:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678802890; 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=9lPoZZPacx9fdneUfHux1/KYUBYODq0fopFLjkjIOik=; b=V9hO1c5s9f9mi2Gw7qut7duszo+fbowP4j2pkKss4fRvTmwnbpNtZUv09ZmQGI3ZwA 2jg5s2IoX5iTxbiOI+hCOk8zxrU+ZA+HPmsQ8WacVC9jKB9HaiXvZgPDOUJYRm3JVVsD ShJiA9OJVLRXC/NVMhwSPholWIRl9mXekIbK7nfKy0y4nbYwOavt6P9zs0v87+Ue41hK M3cNKIgE66yL0AbM9XP8bqulnFlNsqnfQDS//aztPR8hZ5Pk9LsKBPl/bykzAL6qvZK3 ElT/PmNj19JT1scXffc5KNghTKw4add0Oa9tsJ8eNcF0hkixALFdttWswAAocBi8hBS7 RYRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678802890; 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=9lPoZZPacx9fdneUfHux1/KYUBYODq0fopFLjkjIOik=; b=yUEZeRwmRf83CbNMHdovYWn8OhMWMEFBxZTUA/sTuuzqcnaSP4AMSnHI+LxasM2bFx yi44OJeMi0bXbOeD6Ytb+Q7OmLjc3WFTFfoiAcdnHoEdRLc5ESGY1DZ7Qcm3UDuRoiDG T7650qHXpud0azYXRxZnn/kLE5LFMxZdDv53AIFSWh1lIQOnmqgiX6DdHzKeoLxiePhQ Mevx3SJWO4V3kc3/a+cO2A/CaBiUwpITqIy+js+uk+Ge+MfI7jrNTamXNHqSCKkcC+5w A495DbndszJMwmGFgJhwZIrfypgxlC4r9e1VtMMZjVQjG4FmSnRD7sv0Czw5aByYxKrQ SL8w== X-Gm-Message-State: AO0yUKXZ+v4J9q9dm0xOwVpF7wq37GIq2mWGZqkyh9u2upHPGK6Iexh8 wq4FF7S8mCELNiN088G1Wczs X-Google-Smtp-Source: AK7set+jjrZxXvG/HqwihK5qqGzkzo6NJC3ZPFgQShYZYkHWr0ZYgNVzuREatJ5EWXGJaMtZmOcZew== X-Received: by 2002:a05:6a20:b061:b0:c7:320a:60b6 with SMTP id dx33-20020a056a20b06100b000c7320a60b6mr31206938pzb.26.1678802890196; Tue, 14 Mar 2023 07:08:10 -0700 (PDT) Received: from thinkpad ([117.217.182.35]) by smtp.gmail.com with ESMTPSA id u23-20020aa78497000000b005a8b4dcd213sm1666092pfn.78.2023.03.14.07.08.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Mar 2023 07:08:09 -0700 (PDT) Date: Tue, 14 Mar 2023 19:37:56 +0530 From: Manivannan Sadhasivam To: Robin Murphy Cc: Johan Hovold , will@kernel.org, joro@8bytes.org, 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 v2] iommu/arm-smmu-qcom: Rework the logic finding the bypass quirk Message-ID: <20230314140756.GD137001@thinkpad> References: <20230314105905.137241-1-manivannan.sadhasivam@linaro.org> <20230314112620.GB137001@thinkpad> <13b46d42-e497-8dd7-4785-f58447128a40@arm.com> <20230314132018.GC137001@thinkpad> 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 Tue, Mar 14, 2023 at 01:41:56PM +0000, Robin Murphy wrote: > On 2023-03-14 13:20, Manivannan Sadhasivam wrote: > > On Tue, Mar 14, 2023 at 11:58:24AM +0000, Robin Murphy wrote: > > > On 2023-03-14 11:26, Manivannan Sadhasivam wrote: > > > > On Tue, Mar 14, 2023 at 12:17:38PM +0100, Johan Hovold wrote: > > > > > On Tue, Mar 14, 2023 at 04:29:05PM +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, NUSMRG > > > > > > reports a value of 162 (possibly emulated by the hypervisor) and 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, rework the logic to find the first non-valid (free) > > > > > > stream mapping register group (SMR) within 128 groups 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 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 > > > > > > > > > > > > drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 48 ++++++++++++++++++---- > > > > > > 1 file changed, 40 insertions(+), 8 deletions(-) > > > > > > > > > > > > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > > > > > > index d1b296b95c86..48362d7ef451 100644 > > > > > > --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > > > > > > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > > > > > > @@ -266,25 +266,49 @@ static int qcom_smmu_init_context(struct arm_smmu_domain *smmu_domain, > > > > > > return 0; > > > > > > } > > > > > > -static int qcom_smmu_cfg_probe(struct arm_smmu_device *smmu) > > > > > > +static void qcom_smmu_bypass_quirk(struct arm_smmu_device *smmu) > > > > > > { > > > > > > - unsigned int last_s2cr = ARM_SMMU_GR0_S2CR(smmu->num_mapping_groups - 1); > > > > > > struct qcom_smmu *qsmmu = to_qcom_smmu(smmu); > > > > > > - u32 reg; > > > > > > - u32 smr; > > > > > > + u32 free_s2cr; > > > > > > + u32 reg, smr; > > > > > > int i; > > > > > > + /* > > > > > > + * Find the first non-valid (free) stream mapping register group and > > > > > > + * use that index to access S2CR for detecting the bypass quirk. > > > > > > + * > > > > > > + * Note that only the first 128 stream mapping groups are considered for > > > > > > + * the check. This is because 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 with the help of hypervisor. And those groups don't exhibit > > > > > > + * the quirky behavior. > > > > > > + */ > > > > > > + for (i = 0; i < 128; i++) { > > > > > > > > > > This may now access registers beyond smmu->num_mapping_groups. Should > > > > > you not use the minimum of these two values here (and below)? > > > > > > > > > > > > > Doh! yeah, you're right. Will fix it in v3. > > > > > > FWIW I'd say it's probably best if the cfg_probe hook clamps > > > smmu->num_mapping_groups to the architectural maximum straight away, to also > > > prevent the main driver iterating off into the nonsensical area in > > > arm_smmu_device_reset() or the SMR allocator itself. > > > > > > > We considered that also but Qcom purposefully extended the NUMSMRG for > > virtualization usecase and we do not have a clear picture of it. > > Whatever that supposed use-case may be, Linux does not support it, and > clearly isn't going to support it any time soon if we don't even know what > it is. Therefore Linux does not need to accommodate this weirdness for the > foreseeable future, beyond simply making sure it doesn't cause any problems > for what Linux *does* support. It's bad enough that the emulation of > "normal" SMRs continues to violate the architecture, but I'm even more > uncomfortable letting the generic architecture driver poke at completely > non-architectural registers which don't even have the same behaviour as the > ones they're supposedly extending. > Okay then. I'll cap it to 128. Thanks, Mani > Thanks, > Robin. > > > That's the > > reason we settled with capping the value only for the quirk detection. > > > > Thanks, > > Mani > > > > > (Note that we don't support the weird EXSMRGS extension that appeared in a > > > late version of the architecture, but even if we did, that still reports 128 > > > for IDR0.NUMSMRG, and the extra extended SMRs live somewhere completely > > > different.) > > > > > > Thanks, > > > Robin. > > -- மணிவண்ணன் சதாசிவம் 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 86841C74A5B for ; Tue, 14 Mar 2023 14:09:09 +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=ggK+UEt/f8Lr0T4HBrSkKefQbrMtw4T1ZSSVG4CTje0=; b=uix6Zl/WQ7aNE0 o1UyWTQUik8+6fdTd7/jrYjyp8/ISGZ1OZtKRZQbXRLIGY6xznjTVb8dX+wym/6aUHCeHNlD0fEp4 XA2U3qDKIs9C8Wkb6E2wMULd7E4ykEcAPM50bfyuRTYcu5M+A9tO8FGL818yA9tqwe+/QW9DPH1Z/ mH92wFoVdWeCcSgNLKRLlRkp84wzSF3N18wtl+q0anhJur4fDen0q4np3e6cCMfjmJGRiAP/zYiGg uzW8CLVgwcVFfIqSGnUt0FJPKxZb7If5snfxTvTZMgSJ5ppUAxAIYq6bIHf5pGWrUWTrZLHPtHaJl eq+ibJD12AcUgP8a7fjw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pc5K8-00APBj-1r; Tue, 14 Mar 2023 14:08:20 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pc5K4-00APAG-3A for linux-arm-kernel@lists.infradead.org; Tue, 14 Mar 2023 14:08:18 +0000 Received: by mail-pl1-x62a.google.com with SMTP id y11so16748385plg.1 for ; Tue, 14 Mar 2023 07:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678802890; 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=9lPoZZPacx9fdneUfHux1/KYUBYODq0fopFLjkjIOik=; b=V9hO1c5s9f9mi2Gw7qut7duszo+fbowP4j2pkKss4fRvTmwnbpNtZUv09ZmQGI3ZwA 2jg5s2IoX5iTxbiOI+hCOk8zxrU+ZA+HPmsQ8WacVC9jKB9HaiXvZgPDOUJYRm3JVVsD ShJiA9OJVLRXC/NVMhwSPholWIRl9mXekIbK7nfKy0y4nbYwOavt6P9zs0v87+Ue41hK M3cNKIgE66yL0AbM9XP8bqulnFlNsqnfQDS//aztPR8hZ5Pk9LsKBPl/bykzAL6qvZK3 ElT/PmNj19JT1scXffc5KNghTKw4add0Oa9tsJ8eNcF0hkixALFdttWswAAocBi8hBS7 RYRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678802890; 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=9lPoZZPacx9fdneUfHux1/KYUBYODq0fopFLjkjIOik=; b=SzX3x3wNtpQ1aFL1GaAI/UZmJDKX4iz/1fKG6UrMGj/Cp9krjGAPRtn6BZPYBmfT0w +qA2Yth9T0fARblZn8jGfKTVzIeIEmjJuOKxiI4nkFzSBl8MnJN95AnOMPrcMkdL5tsr hwBrs9tSk932AkgY5pfTkUuawLgBi6VpJOrAJ1piPheVWnbVNlQga/IvKvaGQRnPalqi of8DceRO3TuC0O98sTlinb7tpyjHdh6LkdqLVZddBPoL/CUkaUzS9urNGy6kx0wLlzhl MMd9i+yv9wImkskECD0sXyHeRQeBrKrSaXm2GGyKOjIbYqR3lnTPhK5D/Bg2MIVgoQvR vq9g== X-Gm-Message-State: AO0yUKUjZTwsPLVXe3xcfSNTTWPe569BGiUIVXznaalFN/lUZEGUL3bh 5duN8/CGVsiqKEBxgQfDKrw/ X-Google-Smtp-Source: AK7set+jjrZxXvG/HqwihK5qqGzkzo6NJC3ZPFgQShYZYkHWr0ZYgNVzuREatJ5EWXGJaMtZmOcZew== X-Received: by 2002:a05:6a20:b061:b0:c7:320a:60b6 with SMTP id dx33-20020a056a20b06100b000c7320a60b6mr31206938pzb.26.1678802890196; Tue, 14 Mar 2023 07:08:10 -0700 (PDT) Received: from thinkpad ([117.217.182.35]) by smtp.gmail.com with ESMTPSA id u23-20020aa78497000000b005a8b4dcd213sm1666092pfn.78.2023.03.14.07.08.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Mar 2023 07:08:09 -0700 (PDT) Date: Tue, 14 Mar 2023 19:37:56 +0530 From: Manivannan Sadhasivam To: Robin Murphy Cc: Johan Hovold , will@kernel.org, joro@8bytes.org, 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 v2] iommu/arm-smmu-qcom: Rework the logic finding the bypass quirk Message-ID: <20230314140756.GD137001@thinkpad> References: <20230314105905.137241-1-manivannan.sadhasivam@linaro.org> <20230314112620.GB137001@thinkpad> <13b46d42-e497-8dd7-4785-f58447128a40@arm.com> <20230314132018.GC137001@thinkpad> 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-20230314_070817_023081_8E989BFB X-CRM114-Status: GOOD ( 47.94 ) 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 T24gVHVlLCBNYXIgMTQsIDIwMjMgYXQgMDE6NDE6NTZQTSArMDAwMCwgUm9iaW4gTXVycGh5IHdy b3RlOgo+IE9uIDIwMjMtMDMtMTQgMTM6MjAsIE1hbml2YW5uYW4gU2FkaGFzaXZhbSB3cm90ZToK PiA+IE9uIFR1ZSwgTWFyIDE0LCAyMDIzIGF0IDExOjU4OjI0QU0gKzAwMDAsIFJvYmluIE11cnBo eSB3cm90ZToKPiA+ID4gT24gMjAyMy0wMy0xNCAxMToyNiwgTWFuaXZhbm5hbiBTYWRoYXNpdmFt IHdyb3RlOgo+ID4gPiA+IE9uIFR1ZSwgTWFyIDE0LCAyMDIzIGF0IDEyOjE3OjM4UE0gKzAxMDAs IEpvaGFuIEhvdm9sZCB3cm90ZToKPiA+ID4gPiA+IE9uIFR1ZSwgTWFyIDE0LCAyMDIzIGF0IDA0 OjI5OjA1UE0gKzA1MzAsIE1hbml2YW5uYW4gU2FkaGFzaXZhbSB3cm90ZToKPiA+ID4gPiA+ID4g VGhlIGxvZ2ljIHVzZWQgdG8gZmluZCB0aGUgcXVpcmt5IGZpcm13YXJlIHRoYXQgaW50ZXJjZXB0 cyB0aGUgd3JpdGVzIHRvCj4gPiA+ID4gPiA+IFMyQ1IgcmVnaXN0ZXIgdG8gcmVwbGFjZSBieXBh c3MgdHlwZSBzdHJlYW1zIHdpdGggYSBmYXVsdCwgYW5kIGlnbm9yZSB0aGUKPiA+ID4gPiA+ID4g ZmF1bHQgdHlwZSwgaXMgbm90IHdvcmtpbmcgd2l0aCB0aGUgZmlybXdhcmUgb24gbmV3ZXIgU29D cyBsaWtlIFNDODI4MFhQLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gVGhlIGN1cnJlbnQgbG9n aWMgdXNlcyB0aGUgbGFzdCBzdHJlYW0gbWFwcGluZyBncm91cCAobnVtX21hcHBpbmdfZ3JvdXBz Cj4gPiA+ID4gPiA+IC0gMSkgYXMgYW4gaW5kZXggZm9yIGZpbmRpbmcgcXVpcmt5IGZpcm13YXJl LiBCdXQgb24gU0M4MjgwWFAsIE5VU01SRwo+ID4gPiA+ID4gPiByZXBvcnRzIGEgdmFsdWUgb2Yg MTYyIChwb3NzaWJseSBlbXVsYXRlZCBieSB0aGUgaHlwZXJ2aXNvcikgYW5kIGxvZ2ljIGlzCj4g PiA+ID4gPiA+IG5vdCB3b3JraW5nIGZvciBzdHJlYW0gbWFwcGluZyBncm91cHMgPiAxMjguIChO b3RlIHRoYXQgdGhlIEFSTSBTTU1VCj4gPiA+ID4gPiA+IGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0 aW9uIGRlZmluZXMgTlVNU01SRyBpbiB0aGUgcmFuZ2Ugb2YgMC0xMjcpLgo+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gU28gdGhlIGN1cnJlbnQgbG9naWMgdGhhdCBjaGVja3MgdGhlICgxNjItMSl0 aCBTMkNSIGVudHJ5IGZhaWxzIHRvIGRldGVjdAo+ID4gPiA+ID4gPiB0aGUgcXVpcmt5IGZpcm13 YXJlIG9uIHRoZXNlIGRldmljZXMgYW5kIFNNTVUgdHJpZ2dlcnMgaW52YWxpZCBjb250ZXh0Cj4g PiA+ID4gPiA+IGZhdWx0IGZvciBieXBhc3Mgc3RyZWFtcy4KPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IFRvIGZpeCB0aGlzIGlzc3VlLCByZXdvcmsgdGhlIGxvZ2ljIHRvIGZpbmQgdGhlIGZpcnN0 IG5vbi12YWxpZCAoZnJlZSkKPiA+ID4gPiA+ID4gc3RyZWFtIG1hcHBpbmcgcmVnaXN0ZXIgZ3Jv dXAgKFNNUikgd2l0aGluIDEyOCBncm91cHMgYW5kIHVzZSB0aGF0IGluZGV4Cj4gPiA+ID4gPiA+ IHRvIGFjY2VzcyBTMkNSIGZvciBkZXRlY3RpbmcgdGhlIGJ5cGFzcyBxdWlyay4gSWYgbm8gZnJl ZSBncm91cHMgYXJlCj4gPiA+ID4gPiA+IGF2YWlsYWJsZSwgdGhlbiBqdXN0IHNraXAgdGhlIHF1 aXJrIGRldGVjdGlvbi4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFdoaWxlIGF0IGl0LCBsZXQn cyBtb3ZlIHRoZSBxdWlyayBkZXRlY3Rpb24gbG9naWMgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbgo+ ID4gPiA+ID4gPiBhbmQgY2hhbmdlIHRoZSBsb2NhbCB2YXJpYWJsZSBuYW1lIGZyb20gbGFzdF9z MmNyIHRvIGZyZWVfczJjci4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFJldmlld2VkLWJ5OiBC am9ybiBBbmRlcnNzb24gPGFuZGVyc3NvbkBrZXJuZWwub3JnPgo+ID4gPiA+ID4gPiBTaWduZWQt b2ZmLWJ5OiBNYW5pdmFubmFuIFNhZGhhc2l2YW0gPG1hbml2YW5uYW4uc2FkaGFzaXZhbUBsaW5h cm8ub3JnPgo+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IENoYW5nZXMg aW4gdjI6Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAqIExpbWl0ZWQgdGhlIGNoZWNrIHRvIDEy OCBncm91cHMgYXMgcGVyIEFSTSBTTU1VIHNwZWMncyBOVU1TTVJHIHJhbmdlCj4gPiA+ID4gPiA+ ICogTW92ZWQgdGhlIHF1aXJrIGhhbmRsaW5nIHRvIGl0cyBvd24gZnVuY3Rpb24KPiA+ID4gPiA+ ID4gKiBDb2xsZWN0ZWQgcmV2aWV3IHRhZyBmcm9tIEJqb3JuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ ID4gPiAgICBkcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS9hcm0tc21tdS1xY29tLmMgfCA0OCAr KysrKysrKysrKysrKysrKystLS0tCj4gPiA+ID4gPiA+ICAgIDEgZmlsZSBjaGFuZ2VkLCA0MCBp bnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYyBiL2Ry aXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYwo+ID4gPiA+ID4gPiBpbmRl eCBkMWIyOTZiOTVjODYuLjQ4MzYyZDdlZjQ1MSAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJp dmVycy9pb21tdS9hcm0vYXJtLXNtbXUvYXJtLXNtbXUtcWNvbS5jCj4gPiA+ID4gPiA+ICsrKyBi L2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYwo+ID4gPiA+ID4gPiBA QCAtMjY2LDI1ICsyNjYsNDkgQEAgc3RhdGljIGludCBxY29tX3NtbXVfaW5pdF9jb250ZXh0KHN0 cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluLAo+ID4gPiA+ID4gPiAgICAJcmV0dXJu IDA7Cj4gPiA+ID4gPiA+ICAgIH0KPiA+ID4gPiA+ID4gLXN0YXRpYyBpbnQgcWNvbV9zbW11X2Nm Z19wcm9iZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ID4gPiA+ID4gPiArc3RhdGlj IHZvaWQgcWNvbV9zbW11X2J5cGFzc19xdWlyayhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11 KQo+ID4gPiA+ID4gPiAgICB7Cj4gPiA+ID4gPiA+IC0JdW5zaWduZWQgaW50IGxhc3RfczJjciA9 IEFSTV9TTU1VX0dSMF9TMkNSKHNtbXUtPm51bV9tYXBwaW5nX2dyb3VwcyAtIDEpOwo+ID4gPiA+ ID4gPiAgICAJc3RydWN0IHFjb21fc21tdSAqcXNtbXUgPSB0b19xY29tX3NtbXUoc21tdSk7Cj4g PiA+ID4gPiA+IC0JdTMyIHJlZzsKPiA+ID4gPiA+ID4gLQl1MzIgc21yOwo+ID4gPiA+ID4gPiAr CXUzMiBmcmVlX3MyY3I7Cj4gPiA+ID4gPiA+ICsJdTMyIHJlZywgc21yOwo+ID4gPiA+ID4gPiAg ICAJaW50IGk7Cj4gPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ID4gKwkgKiBGaW5kIHRoZSBmaXJz dCBub24tdmFsaWQgKGZyZWUpIHN0cmVhbSBtYXBwaW5nIHJlZ2lzdGVyIGdyb3VwIGFuZAo+ID4g PiA+ID4gPiArCSAqIHVzZSB0aGF0IGluZGV4IHRvIGFjY2VzcyBTMkNSIGZvciBkZXRlY3Rpbmcg dGhlIGJ5cGFzcyBxdWlyay4KPiA+ID4gPiA+ID4gKwkgKgo+ID4gPiA+ID4gPiArCSAqIE5vdGUg dGhhdCBvbmx5IHRoZSBmaXJzdCAxMjggc3RyZWFtIG1hcHBpbmcgZ3JvdXBzIGFyZSBjb25zaWRl cmVkIGZvcgo+ID4gPiA+ID4gPiArCSAqIHRoZSBjaGVjay4gVGhpcyBpcyBiZWNhdXNlIHRoZSBB Uk0gU01NVSBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbgo+ID4gPiA+ID4gPiArCSAqIGRlZmlu ZXMgTlVNU01SRyAoTnVtYmVyIG9mIFN0cmVhbSBNYXBwaW5nIFJlZ2lzdGVyIEdyb3VwcykgaW4g dGhlCj4gPiA+ID4gPiA+ICsJICogcmFuZ2Ugb2YgMC0xMjcsIGJ1dCBzb21lIFFjb20gcGxhdGZv cm1zIGVtdWxhdGUgbW9yZSBzdHJlYW0gbWFwcGluZwo+ID4gPiA+ID4gPiArCSAqIGdyb3VwcyB3 aXRoIHRoZSBoZWxwIG9mIGh5cGVydmlzb3IuIEFuZCB0aG9zZSBncm91cHMgZG9uJ3QgZXhoaWJp dAo+ID4gPiA+ID4gPiArCSAqIHRoZSBxdWlya3kgYmVoYXZpb3IuCj4gPiA+ID4gPiA+ICsJICov Cj4gPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7Cj4gPiA+ID4gPiAKPiA+ ID4gPiA+IFRoaXMgbWF5IG5vdyBhY2Nlc3MgcmVnaXN0ZXJzIGJleW9uZCBzbW11LT5udW1fbWFw cGluZ19ncm91cHMuIFNob3VsZAo+ID4gPiA+ID4geW91IG5vdCB1c2UgdGhlIG1pbmltdW0gb2Yg dGhlc2UgdHdvIHZhbHVlcyBoZXJlIChhbmQgYmVsb3cpPwo+ID4gPiA+ID4gCj4gPiA+ID4gCj4g PiA+ID4gRG9oISB5ZWFoLCB5b3UncmUgcmlnaHQuIFdpbGwgZml4IGl0IGluIHYzLgo+ID4gPiAK PiA+ID4gRldJVyBJJ2Qgc2F5IGl0J3MgcHJvYmFibHkgYmVzdCBpZiB0aGUgY2ZnX3Byb2JlIGhv b2sgY2xhbXBzCj4gPiA+IHNtbXUtPm51bV9tYXBwaW5nX2dyb3VwcyB0byB0aGUgYXJjaGl0ZWN0 dXJhbCBtYXhpbXVtIHN0cmFpZ2h0IGF3YXksIHRvIGFsc28KPiA+ID4gcHJldmVudCB0aGUgbWFp biBkcml2ZXIgaXRlcmF0aW5nIG9mZiBpbnRvIHRoZSBub25zZW5zaWNhbCBhcmVhIGluCj4gPiA+ IGFybV9zbW11X2RldmljZV9yZXNldCgpIG9yIHRoZSBTTVIgYWxsb2NhdG9yIGl0c2VsZi4KPiA+ ID4gCj4gPiAKPiA+IFdlIGNvbnNpZGVyZWQgdGhhdCBhbHNvIGJ1dCBRY29tIHB1cnBvc2VmdWxs eSBleHRlbmRlZCB0aGUgTlVNU01SRyBmb3IKPiA+IHZpcnR1YWxpemF0aW9uIHVzZWNhc2UgYW5k IHdlIGRvIG5vdCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBpdC4KPiAKPiBXaGF0ZXZlciB0aGF0 IHN1cHBvc2VkIHVzZS1jYXNlIG1heSBiZSwgTGludXggZG9lcyBub3Qgc3VwcG9ydCBpdCwgYW5k Cj4gY2xlYXJseSBpc24ndCBnb2luZyB0byBzdXBwb3J0IGl0IGFueSB0aW1lIHNvb24gaWYgd2Ug ZG9uJ3QgZXZlbiBrbm93IHdoYXQKPiBpdCBpcy4gVGhlcmVmb3JlIExpbnV4IGRvZXMgbm90IG5l ZWQgdG8gYWNjb21tb2RhdGUgdGhpcyB3ZWlyZG5lc3MgZm9yIHRoZQo+IGZvcmVzZWVhYmxlIGZ1 dHVyZSwgYmV5b25kIHNpbXBseSBtYWtpbmcgc3VyZSBpdCBkb2Vzbid0IGNhdXNlIGFueSBwcm9i bGVtcwo+IGZvciB3aGF0IExpbnV4ICpkb2VzKiBzdXBwb3J0LiBJdCdzIGJhZCBlbm91Z2ggdGhh dCB0aGUgZW11bGF0aW9uIG9mCj4gIm5vcm1hbCIgU01ScyBjb250aW51ZXMgdG8gdmlvbGF0ZSB0 aGUgYXJjaGl0ZWN0dXJlLCBidXQgSSdtIGV2ZW4gbW9yZQo+IHVuY29tZm9ydGFibGUgbGV0dGlu ZyB0aGUgZ2VuZXJpYyBhcmNoaXRlY3R1cmUgZHJpdmVyIHBva2UgYXQgY29tcGxldGVseQo+IG5v bi1hcmNoaXRlY3R1cmFsIHJlZ2lzdGVycyB3aGljaCBkb24ndCBldmVuIGhhdmUgdGhlIHNhbWUg YmVoYXZpb3VyIGFzIHRoZQo+IG9uZXMgdGhleSdyZSBzdXBwb3NlZGx5IGV4dGVuZGluZy4KPiAK Ck9rYXkgdGhlbi4gSSdsbCBjYXAgaXQgdG8gMTI4LgoKVGhhbmtzLApNYW5pCgo+IFRoYW5rcywK PiBSb2Jpbi4KPiAKPiA+IFRoYXQncyB0aGUKPiA+IHJlYXNvbiB3ZSBzZXR0bGVkIHdpdGggY2Fw cGluZyB0aGUgdmFsdWUgb25seSBmb3IgdGhlIHF1aXJrIGRldGVjdGlvbi4KPiA+IAo+ID4gVGhh bmtzLAo+ID4gTWFuaQo+ID4gCj4gPiA+IChOb3RlIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUg d2VpcmQgRVhTTVJHUyBleHRlbnNpb24gdGhhdCBhcHBlYXJlZCBpbiBhCj4gPiA+IGxhdGUgdmVy c2lvbiBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBidXQgZXZlbiBpZiB3ZSBkaWQsIHRoYXQgc3RpbGwg cmVwb3J0cyAxMjgKPiA+ID4gZm9yIElEUjAuTlVNU01SRywgYW5kIHRoZSBleHRyYSBleHRlbmRl ZCBTTVJzIGxpdmUgc29tZXdoZXJlIGNvbXBsZXRlbHkKPiA+ID4gZGlmZmVyZW50LikKPiA+ID4g Cj4gPiA+IFRoYW5rcywKPiA+ID4gUm9iaW4uCj4gPiAKCi0tIArgrq7grqPgrr/grrXgrqPgr43g rqPgrqngr40g4K6a4K6k4K6+4K6a4K6/4K614K6u4K+NCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==