From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (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 386203C02 for ; Tue, 14 Feb 2023 07:53:20 +0000 (UTC) Received: by mail-pj1-f41.google.com with SMTP id bx22so14313791pjb.3 for ; Mon, 13 Feb 2023 23:53:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; 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=7q20+SNXT2AMtnhltu6WLGIIunSDfG6EAHJrNxTXkcc=; b=RQfRhtsBF00rc7XBryAEKIPojZtinvL6x3xfeKP2z704501dj2CDpFne1Rb+gkY6y+ wQ6BeU18myH7bpAhqoOtMEypP9sy9SzVjefDJFKTcZgWwuS1lSpwADKMCU768o5H7Xvv KGD/bcsxkWRQWIdKwj6Q1djiKeGiy6qhb4qHVeVLcGB1fPDM3sC/OXeSyxVHk0IXh4YS EPLZKos4xMDabM+X5/iuMqeZkxv+4j2emVS/+WwgEN66s9dxLvFAjdvNwu9s+tu9bEgR rVjjp0dF/Vh03nZvjpJ7n2+DxW8NlwcH0ZgKD5NOTsv9HzSuJdOg+sslUAUFe/22GUUo VSSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=7q20+SNXT2AMtnhltu6WLGIIunSDfG6EAHJrNxTXkcc=; b=kVvsEn2wdUoHXS0sSQiFDVBr095TnYuQUe93eF6+5CUkjbidn3OztlALfPSGVbThrH 88VMkiNK653vo9VRHB+X2GLASbgErjGZeWUFzI4KUGYkqKYqcVODGhjucQcCFa7KzifY LEh1bMnJc1JrsQsoErBXuKI2VAPGwn2XmKgl5dwBmt1RG+5RU7w2VQ5n5y6xM+7Z1NGz SYuP7oSyvgTN87YX2J29n21J2ZXKhsKRZCCAhkSS/55JUyCZc+6o9aNdHwfUjHu9jGuA JEtGKcmahvvo2Y6AC6s+kxScqxEYRpXPmkua8YOvypV2G3Kdpu6uB+L1WKW/yuBp978e WnLQ== X-Gm-Message-State: AO0yUKUV/Z8USMyTlNoC6RTlDy9Xa5HwRE0eCUJHVkYsKj4rdQCkBIml 7K5NlmN9GRxIO6vq1gmDT3R7 X-Google-Smtp-Source: AK7set+eT6+n3qyGsgE7ZX/AJoq2siIymbp5DKA1AsgWDfgj/m9HcIoZBdJgfq0nYmeThBKMXx909A== X-Received: by 2002:a17:902:d485:b0:19a:b4f9:6cd with SMTP id c5-20020a170902d48500b0019ab4f906cdmr1895882plg.48.1676361199523; Mon, 13 Feb 2023 23:53:19 -0800 (PST) Received: from thinkpad ([117.217.179.87]) by smtp.gmail.com with ESMTPSA id jn3-20020a170903050300b00180033438a0sm9524798plb.106.2023.02.13.23.53.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Feb 2023 23:53:19 -0800 (PST) Date: Tue, 14 Feb 2023 13:23:12 +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] iommu/arm-smmu-qcom: Rework the logic finding the bypass quirk Message-ID: <20230214075312.GB4981@thinkpad> References: <20230201082500.61656-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 Mon, Feb 13, 2023 at 05:43:56PM +0100, Johan Hovold wrote: > On Wed, Feb 01, 2023 at 01:55:00PM +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, this > > logic is not working as the number of stream mapping groups reported by > > the SMMU (163 as on the SC8280XP-CRD device) is not valid for some reason. > > NUMSMRG read back as 162 here, both on my CRD and X13s. Was '163' a typo > or a real difference? > Ah yes, it is 162 indeed. Sorry, typo! > > So the current logic that checks the (163-1) S2CR entry fails to detect > > the quirky firmware on these devices and 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) and use that index to access S2CR > > for detecting the bypass quirk. > > So while this works for the quirk detection, shouldn't we also do > something about that bogus NUMSMRG value? At least cap it at 128, which > appears to be the maximum according to the specification, for example, > by clearing bit 7 when any of the lower bits are set? > > That would give us 35 (or 36) groups and working quirk detection with > just the following smaller patch: > I'm not certain if the value is bogus or not. It is clear that the spec specifies 128 as the max but internal qcom document shows that they indeed set 162 on purpose in the hypervisor. So until we get a clear view on that, I'd not cap it. > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c > index 2ff7a72cf377..0f564a86c352 100644 > --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c > @@ -1744,6 +1744,12 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) > return -ENODEV; > } > > + if (size > 0x80) { > + dev_warn(smmu->dev, > + "invalid number of SMR groups, clearing bit 7\n"); > + size -= 0x80; > + } > + > /* Zero-initialised to mark as invalid */ > smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs), > GFP_KERNEL); > > I also verified that using index 127 (group 128) for the quirk detection > works on my CRD, while the invalid index 128 fails (as do index 161 > which would currently be used). > > > This also warrants a change in variable name from last_s2cr to free_s2cr. > > > > Signed-off-by: Manivannan Sadhasivam > > --- > > drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 24 +++++++++++++++++----- > > 1 file changed, 19 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > > index 78fc0e1bf215..4104f81b8d8f 100644 > > --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c > > @@ -267,23 +267,37 @@ static int qcom_smmu_init_context(struct arm_smmu_domain *smmu_domain, > > > > static int qcom_smmu_cfg_probe(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 free_s2cr; > > u32 reg; > > u32 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. > > + */ > > + for (i = 0; i < smmu->num_mapping_groups; i++) { > > + smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i)); > > + > > + if (!FIELD_GET(ARM_SMMU_SMR_VALID, smr)) > > + break; > > + } > > + > > + free_s2cr = ARM_SMMU_GR0_S2CR(i); > > In the unlikely event that there is no free group this would access an > invalid index. > Hmm, theoretically yes. But what would be the plan of action if that happens? Should we just bail out with error or skip the quirk detection? Thanks, Mani > > + > > /* > > * With some firmware versions writes to S2CR of type FAULT are > > * ignored, and writing BYPASS will end up written as FAULT in the > > - * register. Perform a write to S2CR to detect if this is the case and > > - * if so reserve a context bank to emulate bypass streams. > > + * register. Perform a write to the first free S2CR to detect if > > + * this is the case and if so reserve a context bank to emulate > > + * bypass streams. > > */ > > reg = FIELD_PREP(ARM_SMMU_S2CR_TYPE, S2CR_TYPE_BYPASS) | > > FIELD_PREP(ARM_SMMU_S2CR_CBNDX, 0xff) | > > FIELD_PREP(ARM_SMMU_S2CR_PRIVCFG, S2CR_PRIVCFG_DEFAULT); > > - arm_smmu_gr0_write(smmu, last_s2cr, reg); > > - reg = arm_smmu_gr0_read(smmu, last_s2cr); > > + arm_smmu_gr0_write(smmu, free_s2cr, reg); > > + reg = arm_smmu_gr0_read(smmu, free_s2cr); > > if (FIELD_GET(ARM_SMMU_S2CR_TYPE, reg) != S2CR_TYPE_BYPASS) { > > qsmmu->bypass_quirk = true; > > qsmmu->bypass_cbndx = smmu->num_context_banks - 1; > > 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 5CA07C64EC7 for ; Tue, 14 Feb 2023 07:54:41 +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=0pS0pa1krsxs2LV6Ag54cJUdXt91g02L+lPGmCDTf18=; b=0CAg25cNCJzl1M kpDW+dn1owuKGh5RlsQW59q5y5sS/AMS0QeoWVPsQYsIjlvfXznsbAlcKkLy5Q46OCbda3dB+JZbn mmO0g7Cet7Pzi/DiG/udHWTf2lQNgY2IDKU53CBNsiQwOyGIffpMDq7zmPN9Q7GzgussXE29XIr8U ZXewxzwW5dCOJ9n9EYOnZfgT2FO1reawZeYFGdLFEgj+NRJhsLb2yZaBELknDm8hqOCZURKYAiofi eQ50LtwKOLztaeH4iC5XRdztoEUPZsUWuXlmiCeWAWx7FSWS+KhtCCwq66FeeXzZ2IneKIe7zq1ND w/5MU2+MU2Ckj2LV8www==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pRq80-000MOW-Nl; Tue, 14 Feb 2023 07:53:28 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pRq7v-000MJj-FX for linux-arm-kernel@lists.infradead.org; Tue, 14 Feb 2023 07:53:25 +0000 Received: by mail-pl1-x636.google.com with SMTP id e17so7357865plg.12 for ; Mon, 13 Feb 2023 23:53:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; 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=7q20+SNXT2AMtnhltu6WLGIIunSDfG6EAHJrNxTXkcc=; b=RQfRhtsBF00rc7XBryAEKIPojZtinvL6x3xfeKP2z704501dj2CDpFne1Rb+gkY6y+ wQ6BeU18myH7bpAhqoOtMEypP9sy9SzVjefDJFKTcZgWwuS1lSpwADKMCU768o5H7Xvv KGD/bcsxkWRQWIdKwj6Q1djiKeGiy6qhb4qHVeVLcGB1fPDM3sC/OXeSyxVHk0IXh4YS EPLZKos4xMDabM+X5/iuMqeZkxv+4j2emVS/+WwgEN66s9dxLvFAjdvNwu9s+tu9bEgR rVjjp0dF/Vh03nZvjpJ7n2+DxW8NlwcH0ZgKD5NOTsv9HzSuJdOg+sslUAUFe/22GUUo VSSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=7q20+SNXT2AMtnhltu6WLGIIunSDfG6EAHJrNxTXkcc=; b=4TvJRr2ZWplEWejTaS9bqIk0t+D4YrLc0wUmUhPI7oYsz4pc2Fu6YgKGVpPJ6uEThZ PkSE+uTjy/7t6D1kc7mFuFP/mRX7L6DN8kIbGZNuPjxLwvyDKr9vqO6Wwh/mhTD7H72w mDsZy8QayNzBhpkRsgCruMkIKmMvtSmi2Z5Tjuix4dagd+GWgpOv+TCL8P/ne6VCplTI CBAEGNqoGSM7nNovhbKYqWTIJ/zlMC64jmvl4fqdWEyQwiSq2xBogH+EYWhe4h+aOYsy Uj/zB5DnS0wO5BlOx/REdtI6/0/5ufqyDRjGUmcOtgpxl46FIdrWn/KxG6IUcaLVlkyb ovKQ== X-Gm-Message-State: AO0yUKVYi80W7hCKjA0YkbNb4L6xZUyQW3hQA35hRfNqISMlGQS186c/ 6Dp0oi85b8h3CJXvqAFhT8Tm X-Google-Smtp-Source: AK7set+eT6+n3qyGsgE7ZX/AJoq2siIymbp5DKA1AsgWDfgj/m9HcIoZBdJgfq0nYmeThBKMXx909A== X-Received: by 2002:a17:902:d485:b0:19a:b4f9:6cd with SMTP id c5-20020a170902d48500b0019ab4f906cdmr1895882plg.48.1676361199523; Mon, 13 Feb 2023 23:53:19 -0800 (PST) Received: from thinkpad ([117.217.179.87]) by smtp.gmail.com with ESMTPSA id jn3-20020a170903050300b00180033438a0sm9524798plb.106.2023.02.13.23.53.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Feb 2023 23:53:19 -0800 (PST) Date: Tue, 14 Feb 2023 13:23:12 +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] iommu/arm-smmu-qcom: Rework the logic finding the bypass quirk Message-ID: <20230214075312.GB4981@thinkpad> References: <20230201082500.61656-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-20230213_235323_564485_2E94104E X-CRM114-Status: GOOD ( 44.68 ) 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 T24gTW9uLCBGZWIgMTMsIDIwMjMgYXQgMDU6NDM6NTZQTSArMDEwMCwgSm9oYW4gSG92b2xkIHdy b3RlOgo+IE9uIFdlZCwgRmViIDAxLCAyMDIzIGF0IDAxOjU1OjAwUE0gKzA1MzAsIE1hbml2YW5u YW4gU2FkaGFzaXZhbSB3cm90ZToKPiA+IFRoZSBsb2dpYyB1c2VkIHRvIGZpbmQgdGhlIHF1aXJr eSBmaXJtd2FyZSB0aGF0IGludGVyY2VwdHMgdGhlIHdyaXRlcyB0bwo+ID4gUzJDUiByZWdpc3Rl ciB0byByZXBsYWNlIGJ5cGFzcyB0eXBlIHN0cmVhbXMgd2l0aCBhIGZhdWx0LCBhbmQgaWdub3Jl IHRoZQo+ID4gZmF1bHQgdHlwZSwgaXMgbm90IHdvcmtpbmcgd2l0aCB0aGUgZmlybXdhcmUgb24g bmV3ZXIgU29DcyBsaWtlIFNDODI4MFhQLgo+ID4gCj4gPiBUaGUgY3VycmVudCBsb2dpYyB1c2Vz IHRoZSBsYXN0IHN0cmVhbSBtYXBwaW5nIGdyb3VwIChudW1fbWFwcGluZ19ncm91cHMKPiA+IC0g MSkgYXMgYW4gaW5kZXggZm9yIGZpbmRpbmcgcXVpcmt5IGZpcm13YXJlLiBCdXQgb24gU0M4Mjgw WFAsIHRoaXMKPiA+IGxvZ2ljIGlzIG5vdCB3b3JraW5nIGFzIHRoZSBudW1iZXIgb2Ygc3RyZWFt IG1hcHBpbmcgZ3JvdXBzIHJlcG9ydGVkIGJ5Cj4gPiB0aGUgU01NVSAoMTYzIGFzIG9uIHRoZSBT QzgyODBYUC1DUkQgZGV2aWNlKSBpcyBub3QgdmFsaWQgZm9yIHNvbWUgcmVhc29uLgo+IAo+IE5V TVNNUkcgcmVhZCBiYWNrIGFzIDE2MiBoZXJlLCBib3RoIG9uIG15IENSRCBhbmQgWDEzcy4gV2Fz ICcxNjMnIGEgdHlwbwo+IG9yIGEgcmVhbCBkaWZmZXJlbmNlPwo+IAoKQWggeWVzLCBpdCBpcyAx NjIgaW5kZWVkLiBTb3JyeSwgdHlwbyEKCj4gPiBTbyB0aGUgY3VycmVudCBsb2dpYyB0aGF0IGNo ZWNrcyB0aGUgKDE2My0xKSBTMkNSIGVudHJ5IGZhaWxzIHRvIGRldGVjdAo+ID4gdGhlIHF1aXJr eSBmaXJtd2FyZSBvbiB0aGVzZSBkZXZpY2VzIGFuZCB0cmlnZ2VycyBpbnZhbGlkIGNvbnRleHQg ZmF1bHQKPiA+IGZvciBieXBhc3Mgc3RyZWFtcy4KPiA+IAo+ID4gVG8gZml4IHRoaXMgaXNzdWUs IHJld29yayB0aGUgbG9naWMgdG8gZmluZCB0aGUgZmlyc3Qgbm9uLXZhbGlkIChmcmVlKQo+ID4g c3RyZWFtIG1hcHBpbmcgcmVnaXN0ZXIgZ3JvdXAgKFNNUikgYW5kIHVzZSB0aGF0IGluZGV4IHRv IGFjY2VzcyBTMkNSCj4gPiBmb3IgZGV0ZWN0aW5nIHRoZSBieXBhc3MgcXVpcmsuCj4gCj4gU28g d2hpbGUgdGhpcyB3b3JrcyBmb3IgdGhlIHF1aXJrIGRldGVjdGlvbiwgc2hvdWxkbid0IHdlIGFs c28gZG8KPiBzb21ldGhpbmcgYWJvdXQgdGhhdCBib2d1cyBOVU1TTVJHIHZhbHVlPyBBdCBsZWFz dCBjYXAgaXQgYXQgMTI4LCB3aGljaAo+IGFwcGVhcnMgdG8gYmUgdGhlIG1heGltdW0gYWNjb3Jk aW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLCBmb3IgZXhhbXBsZSwKPiBieSBjbGVhcmluZyBiaXQg NyB3aGVuIGFueSBvZiB0aGUgbG93ZXIgYml0cyBhcmUgc2V0Pwo+IAo+IFRoYXQgd291bGQgZ2l2 ZSB1cyAzNSAob3IgMzYpIGdyb3VwcyBhbmQgd29ya2luZyBxdWlyayBkZXRlY3Rpb24gd2l0aAo+ IGp1c3QgdGhlIGZvbGxvd2luZyBzbWFsbGVyIHBhdGNoOgo+IAoKSSdtIG5vdCBjZXJ0YWluIGlm IHRoZSB2YWx1ZSBpcyBib2d1cyBvciBub3QuIEl0IGlzIGNsZWFyIHRoYXQgdGhlIHNwZWMKc3Bl Y2lmaWVzIDEyOCBhcyB0aGUgbWF4IGJ1dCBpbnRlcm5hbCBxY29tIGRvY3VtZW50IHNob3dzIHRo YXQgdGhleSBpbmRlZWQKc2V0IDE2MiBvbiBwdXJwb3NlIGluIHRoZSBoeXBlcnZpc29yLgoKU28g dW50aWwgd2UgZ2V0IGEgY2xlYXIgdmlldyBvbiB0aGF0LCBJJ2Qgbm90IGNhcCBpdC4KCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LmMgYi9kcml2ZXJz L2lvbW11L2FybS9hcm0tc21tdS9hcm0tc21tdS5jCj4gaW5kZXggMmZmN2E3MmNmMzc3Li4wZjU2 NGE4NmMzNTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUvYXJtLXNt bXUuYwo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LmMKPiBAQCAt MTc0NCw2ICsxNzQ0LDEyIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2NmZ19wcm9iZShz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiAtRU5PREVWOwo+ICAgICAgICAgICAgICAgICB9Cj4gIAo+ICsgICAgICAgICAgICAgICBp ZiAoc2l6ZSA+IDB4ODApIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihzbW11 LT5kZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbnVtYmVy IG9mIFNNUiBncm91cHMsIGNsZWFyaW5nIGJpdCA3XG4iKTsKPiArICAgICAgICAgICAgICAgICAg ICAgICBzaXplIC09IDB4ODA7Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gICAgICAgICAgICAg ICAgIC8qIFplcm8taW5pdGlhbGlzZWQgdG8gbWFyayBhcyBpbnZhbGlkICovCj4gICAgICAgICAg ICAgICAgIHNtbXUtPnNtcnMgPSBkZXZtX2tjYWxsb2Moc21tdS0+ZGV2LCBzaXplLCBzaXplb2Yo KnNtbXUtPnNtcnMpLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdGUF9LRVJORUwpOwo+IAo+IEkgYWxzbyB2ZXJpZmllZCB0aGF0IHVzaW5nIGluZGV4IDEyNyAo Z3JvdXAgMTI4KSBmb3IgdGhlIHF1aXJrIGRldGVjdGlvbgo+IHdvcmtzIG9uIG15IENSRCwgd2hp bGUgdGhlIGludmFsaWQgaW5kZXggMTI4IGZhaWxzIChhcyBkbyBpbmRleCAxNjEKPiB3aGljaCB3 b3VsZCBjdXJyZW50bHkgYmUgdXNlZCkuCj4gCj4gPiBUaGlzIGFsc28gd2FycmFudHMgYSBjaGFu Z2UgaW4gdmFyaWFibGUgbmFtZSBmcm9tIGxhc3RfczJjciB0byBmcmVlX3MyY3IuCj4gPiAKPiA+ IFNpZ25lZC1vZmYtYnk6IE1hbml2YW5uYW4gU2FkaGFzaXZhbSA8bWFuaXZhbm5hbi5zYWRoYXNp dmFtQGxpbmFyby5vcmc+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS9h cm0tc21tdS1xY29tLmMgfCAyNCArKysrKysrKysrKysrKysrKy0tLS0tCj4gPiAgMSBmaWxlIGNo YW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS9hcm0tc21tdS1xY29tLmMgYi9kcml2ZXJz L2lvbW11L2FybS9hcm0tc21tdS9hcm0tc21tdS1xY29tLmMKPiA+IGluZGV4IDc4ZmMwZTFiZjIx NS4uNDEwNGY4MWI4ZDhmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNt bXUvYXJtLXNtbXUtcWNvbS5jCj4gPiArKysgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS9h cm0tc21tdS1xY29tLmMKPiA+IEBAIC0yNjcsMjMgKzI2NywzNyBAQCBzdGF0aWMgaW50IHFjb21f c21tdV9pbml0X2NvbnRleHQoc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4sCj4g PiAgCj4gPiAgc3RhdGljIGludCBxY29tX3NtbXVfY2ZnX3Byb2JlKHN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgKnNtbXUpCj4gPiAgewo+ID4gLQl1bnNpZ25lZCBpbnQgbGFzdF9zMmNyID0gQVJNX1NN TVVfR1IwX1MyQ1Ioc21tdS0+bnVtX21hcHBpbmdfZ3JvdXBzIC0gMSk7Cj4gPiAgCXN0cnVjdCBx Y29tX3NtbXUgKnFzbW11ID0gdG9fcWNvbV9zbW11KHNtbXUpOwo+ID4gKwl1MzIgZnJlZV9zMmNy Owo+ID4gIAl1MzIgcmVnOwo+ID4gIAl1MzIgc21yOwo+ID4gIAlpbnQgaTsKPiA+ICAKPiA+ICsJ LyoKPiA+ICsJICogRmluZCB0aGUgZmlyc3Qgbm9uLXZhbGlkIChmcmVlKSBzdHJlYW0gbWFwcGlu ZyByZWdpc3RlciBncm91cCBhbmQKPiA+ICsJICogdXNlIHRoYXQgaW5kZXggdG8gYWNjZXNzIFMy Q1IgZm9yIGRldGVjdGluZyB0aGUgYnlwYXNzIHF1aXJrLgo+ID4gKwkgKi8KPiA+ICsJZm9yIChp ID0gMDsgaSA8IHNtbXUtPm51bV9tYXBwaW5nX2dyb3VwczsgaSsrKSB7Cj4gPiArCQlzbXIgPSBh cm1fc21tdV9ncjBfcmVhZChzbW11LCBBUk1fU01NVV9HUjBfU01SKGkpKTsKPiA+ICsKPiA+ICsJ CWlmICghRklFTERfR0VUKEFSTV9TTU1VX1NNUl9WQUxJRCwgc21yKSkKPiA+ICsJCQlicmVhazsK PiA+ICsJfQo+ID4gKwo+ID4gKwlmcmVlX3MyY3IgPSBBUk1fU01NVV9HUjBfUzJDUihpKTsKPiAK PiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCB0aGVyZSBpcyBubyBmcmVlIGdyb3VwIHRoaXMg d291bGQgYWNjZXNzIGFuCj4gaW52YWxpZCBpbmRleC4KPiAKCkhtbSwgdGhlb3JldGljYWxseSB5 ZXMuIEJ1dCB3aGF0IHdvdWxkIGJlIHRoZSBwbGFuIG9mIGFjdGlvbiBpZiB0aGF0IGhhcHBlbnM/ ClNob3VsZCB3ZSBqdXN0IGJhaWwgb3V0IHdpdGggZXJyb3Igb3Igc2tpcCB0aGUgcXVpcmsgZGV0 ZWN0aW9uPwoKVGhhbmtzLApNYW5pCgo+ID4gKwo+ID4gIAkvKgo+ID4gIAkgKiBXaXRoIHNvbWUg ZmlybXdhcmUgdmVyc2lvbnMgd3JpdGVzIHRvIFMyQ1Igb2YgdHlwZSBGQVVMVCBhcmUKPiA+ICAJ ICogaWdub3JlZCwgYW5kIHdyaXRpbmcgQllQQVNTIHdpbGwgZW5kIHVwIHdyaXR0ZW4gYXMgRkFV TFQgaW4gdGhlCj4gPiAtCSAqIHJlZ2lzdGVyLiBQZXJmb3JtIGEgd3JpdGUgdG8gUzJDUiB0byBk ZXRlY3QgaWYgdGhpcyBpcyB0aGUgY2FzZSBhbmQKPiA+IC0JICogaWYgc28gcmVzZXJ2ZSBhIGNv bnRleHQgYmFuayB0byBlbXVsYXRlIGJ5cGFzcyBzdHJlYW1zLgo+ID4gKwkgKiByZWdpc3Rlci4g UGVyZm9ybSBhIHdyaXRlIHRvIHRoZSBmaXJzdCBmcmVlIFMyQ1IgdG8gZGV0ZWN0IGlmCj4gPiAr CSAqIHRoaXMgaXMgdGhlIGNhc2UgYW5kIGlmIHNvIHJlc2VydmUgYSBjb250ZXh0IGJhbmsgdG8g ZW11bGF0ZQo+ID4gKwkgKiBieXBhc3Mgc3RyZWFtcy4KPiA+ICAJICovCj4gPiAgCXJlZyA9IEZJ RUxEX1BSRVAoQVJNX1NNTVVfUzJDUl9UWVBFLCBTMkNSX1RZUEVfQllQQVNTKSB8Cj4gPiAgCSAg ICAgIEZJRUxEX1BSRVAoQVJNX1NNTVVfUzJDUl9DQk5EWCwgMHhmZikgfAo+ID4gIAkgICAgICBG SUVMRF9QUkVQKEFSTV9TTU1VX1MyQ1JfUFJJVkNGRywgUzJDUl9QUklWQ0ZHX0RFRkFVTFQpOwo+ ID4gLQlhcm1fc21tdV9ncjBfd3JpdGUoc21tdSwgbGFzdF9zMmNyLCByZWcpOwo+ID4gLQlyZWcg PSBhcm1fc21tdV9ncjBfcmVhZChzbW11LCBsYXN0X3MyY3IpOwo+ID4gKwlhcm1fc21tdV9ncjBf d3JpdGUoc21tdSwgZnJlZV9zMmNyLCByZWcpOwo+ID4gKwlyZWcgPSBhcm1fc21tdV9ncjBfcmVh ZChzbW11LCBmcmVlX3MyY3IpOwo+ID4gIAlpZiAoRklFTERfR0VUKEFSTV9TTU1VX1MyQ1JfVFlQ RSwgcmVnKSAhPSBTMkNSX1RZUEVfQllQQVNTKSB7Cj4gPiAgCQlxc21tdS0+YnlwYXNzX3F1aXJr ID0gdHJ1ZTsKPiA+ICAJCXFzbW11LT5ieXBhc3NfY2JuZHggPSBzbW11LT5udW1fY29udGV4dF9i YW5rcyAtIDE7Cj4gCj4gSm9oYW4KCi0tIArgrq7grqPgrr/grrXgrqPgr43grqPgrqngr40g4K6a 4K6k4K6+4K6a4K6/4K614K6u4K+NCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==