From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77955C15C for ; Tue, 15 Aug 2023 10:39:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26BFBC433C7; Tue, 15 Aug 2023 10:39:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692095964; bh=lGpBpkDsEOQPJi3Zi+iXLacaZpWdyRJMMIhqGUJ9v14=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=g2PHew2j/hTikazRhsHToe3V7GbmJ7igUZipRM0xidxig7apE3lhleU2xsmal5QUG aU46Nl0Dp2+oT0C1Uo20rS6apC5cZo0CdWS0tIxZdnkjyp7hMpk40UIk5XZR1rpRKD Ldln1Nm+VcVs1biv/e50jnI+nu4ND3VrBnhOzaNf5YZpwVT7uDyMyzLAVJKEPAZQCa fGHSLcOZ9XwCZs0/GOnqJtREeLBoL5DR0MWEh5tqMJfAygXhRVh8nQs5Iu97h70iAc Y4lRyDrVwPwV860x1bmLn79IJKtobFh5sh7tc8oxn8B3+kv47H5Itw2cCIuvj7SvKm uzMwNeyJ9HVsg== Received: from host213-123-75-60.in-addr.btopenworld.com ([213.123.75.60] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qVrSM-004ydV-37; Tue, 15 Aug 2023 11:39:22 +0100 Date: Tue, 15 Aug 2023 11:39:34 +0100 Message-ID: <87fs4kpp21.wl-maz@kernel.org> From: Marc Zyngier To: Jing Zhang Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Catalin Marinas , Eric Auger , Mark Brown , Mark Rutland , Will Deacon , Alexandru Elisei , Andre Przywara , Chase Conklin , Ganapatrao Kulkarni , Darren Hart , Miguel Luis , James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu Subject: Re: [PATCH v3 19/27] KVM: arm64: nv: Add fine grained trap forwarding infrastructure In-Reply-To: References: <20230808114711.2013842-1-maz@kernel.org> <20230808114711.2013842-20-maz@kernel.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 213.123.75.60 X-SA-Exim-Rcpt-To: jingzhangos@google.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, eric.auger@redhat.com, broonie@kernel.org, mark.rutland@arm.com, will@kernel.org, alexandru.elisei@arm.com, andre.przywara@arm.com, chase.conklin@arm.com, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, miguel.luis@oracle.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false On Mon, 14 Aug 2023 18:18:57 +0100, Jing Zhang wrote: >=20 > Hi Marc, >=20 > On Tue, Aug 8, 2023 at 4:47=E2=80=AFAM Marc Zyngier wrot= e: > > > > Fine Grained Traps are fun. Not. > > > > Implement the fine grained trap forwarding, reusing the Coarse Grained > > Traps infrastructure previously implemented. > > > > Each sysreg/instruction inserted in the xarray gets a FGT group > > (vaguely equivalent to a register number), a bit number in that registe= r, > > and a polarity. > > > > It is then pretty easy to check the FGT state at handling time, just > > like we do for the coarse version (it is just faster). > > > > Reviewed-by: Eric Auger > > Signed-off-by: Marc Zyngier > > --- > > arch/arm64/kvm/emulate-nested.c | 78 ++++++++++++++++++++++++++++++++- > > 1 file changed, 77 insertions(+), 1 deletion(-) > > > > diff --git a/arch/arm64/kvm/emulate-nested.c b/arch/arm64/kvm/emulate-n= ested.c > > index cd0544c3577e..af75c2775638 100644 > > --- a/arch/arm64/kvm/emulate-nested.c > > +++ b/arch/arm64/kvm/emulate-nested.c > > @@ -928,6 +928,27 @@ static const struct encoding_to_trap_config encodi= ng_to_cgt[] __initconst =3D { > > > > static DEFINE_XARRAY(sr_forward_xa); > > > > +enum fgt_group_id { > > + __NO_FGT_GROUP__, > > + > > + /* Must be last */ > > + __NR_FGT_GROUP_IDS__ > > +}; > > + > > +#define SR_FGT(sr, g, b, p) \ > > + { \ > > + .encoding =3D sr, \ > > + .end =3D sr, \ > > + .tc =3D { \ > > + .fgt =3D g ## _GROUP, \ > > + .bit =3D g ## _EL2_ ## b ## _SHIFT, \ > > + .pol =3D p, \ > > + }, \ > > + } > > + > > +static const struct encoding_to_trap_config encoding_to_fgt[] __initco= nst =3D { > > +}; > > + > > static union trap_config get_trap_config(u32 sysreg) > > { > > return (union trap_config) { > > @@ -941,6 +962,7 @@ int __init populate_nv_trap_config(void) > > > > BUILD_BUG_ON(sizeof(union trap_config) !=3D sizeof(void *)); > > BUILD_BUG_ON(__NR_TRAP_GROUP_IDS__ > BIT(TC_CGT_BITS)); > > + BUILD_BUG_ON(__NR_FGT_GROUP_IDS__ > BIT(TC_FGT_BITS)); > > > > for (int i =3D 0; i < ARRAY_SIZE(encoding_to_cgt); i++) { > > const struct encoding_to_trap_config *cgt =3D &encoding= _to_cgt[i]; > > @@ -963,6 +985,34 @@ int __init populate_nv_trap_config(void) > > kvm_info("nv: %ld coarse grained trap handlers\n", > > ARRAY_SIZE(encoding_to_cgt)); > > > > + if (!cpus_have_final_cap(ARM64_HAS_FGT)) > > + goto check_mcb; > > + > > + for (int i =3D 0; i < ARRAY_SIZE(encoding_to_fgt); i++) { > > + const struct encoding_to_trap_config *fgt =3D &encoding= _to_fgt[i]; > > + union trap_config tc; > > + > > + tc =3D get_trap_config(fgt->encoding); > > + > > + if (tc.fgt) { > > + kvm_err("Duplicate FGT for (%d, %d, %d, %d, %d)= \n", > > + sys_reg_Op0(fgt->encoding), > > + sys_reg_Op1(fgt->encoding), > > + sys_reg_CRn(fgt->encoding), > > + sys_reg_CRm(fgt->encoding), > > + sys_reg_Op2(fgt->encoding)); > > + ret =3D -EINVAL; > > + } > > + > > + tc.val |=3D fgt->tc.val; > > + xa_store(&sr_forward_xa, fgt->encoding, > > + xa_mk_value(tc.val), GFP_KERNEL); > > + } > > + > > + kvm_info("nv: %ld fine grained trap handlers\n", > > + ARRAY_SIZE(encoding_to_fgt)); > > + > > +check_mcb: > > for (int id =3D __MULTIPLE_CONTROL_BITS__; > > id < (__COMPLEX_CONDITIONS__ - 1); > > id++) { > > @@ -1031,13 +1081,26 @@ static enum trap_behaviour compute_trap_behavio= ur(struct kvm_vcpu *vcpu, > > return __do_compute_trap_behaviour(vcpu, tc.cgt, b); > > } > > > > +static bool check_fgt_bit(u64 val, const union trap_config tc) > > +{ > > + return ((val >> tc.bit) & 1) =3D=3D tc.pol; > > +} > > + > > +#define sanitised_sys_reg(vcpu, reg) \ > > + ({ \ > > + u64 __val; \ > > + __val =3D __vcpu_sys_reg(vcpu, reg); \ > > + __val &=3D ~__ ## reg ## _RES0; \ > > + (__val); \ > > + }) > > + > > bool __check_nv_sr_forward(struct kvm_vcpu *vcpu) > > { > > union trap_config tc; > > enum trap_behaviour b; > > bool is_read; > > u32 sysreg; > > - u64 esr; > > + u64 esr, val; > > > > if (!vcpu_has_nv(vcpu) || is_hyp_ctxt(vcpu)) > > return false; > > @@ -1060,6 +1123,19 @@ bool __check_nv_sr_forward(struct kvm_vcpu *vcpu) > > if (!tc.val) > > return false; > > > > + switch ((enum fgt_group_id)tc.fgt) { > > + case __NO_FGT_GROUP__: > > + break; > > + > > + case __NR_FGT_GROUP_IDS__: > > + /* Something is really wrong, bail out */ > > + WARN_ONCE(1, "__NR_FGT_GROUP_IDS__"); > > + return false; >=20 > Do we need a default clause here to catch unexpected tc.fgt values? I'd rather not have anything special at handling time, as the compiler is perfectly allowed to use the cast above to restrict the value to the enumeration. We already cover all the possible enum values, which is good enough. However, I've added an extra check at boot time for unexpected values having sneaked into the FGT table. Thanks, M. --=20 Without deviation from the norm, progress is not possible. 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 5A86DC001B0 for ; Tue, 15 Aug 2023 10:39:55 +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:MIME-Version:References:In-Reply-To: Subject:Cc:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=lyLCzIWddtV5FdrKgjDg6WSxq3WF3whC3shhcJJOcj4=; b=IcQtoYA23U1ifK 9MVqUx5fsPbnCgpXfH7H29ygC7KXe/fTgyOQJMHc375Ntqk2xl79E4JvWVsC8fQPtLhwfoduefz/F ZCgvBJWKQCWJ/BKlqQirgo9wRA/oT22padc1IxpLsyc2yhYJWwiVtY5fttIbsOW/32bsqOMxAzST/ QTZWz4aBbhBWHMW+x5acnC5XC1pMvswqiiScZFmay0HvJPaYeTWPnmiHofazh77dGtP5mGcVhiuol PAwdko7UrFAyxicSECfFYSi60Zm+Fhm7etNFj29uOx4NvCSQ3U8sNnwqE8cgIV5Ir5mqV8pdpWaXY FNjfNXa4UvmDQxCgzqVw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qVrSS-001IwM-1d; Tue, 15 Aug 2023 10:39:28 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qVrSP-001IvY-28 for linux-arm-kernel@lists.infradead.org; Tue, 15 Aug 2023 10:39:27 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 1332464F1C; Tue, 15 Aug 2023 10:39:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26BFBC433C7; Tue, 15 Aug 2023 10:39:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692095964; bh=lGpBpkDsEOQPJi3Zi+iXLacaZpWdyRJMMIhqGUJ9v14=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=g2PHew2j/hTikazRhsHToe3V7GbmJ7igUZipRM0xidxig7apE3lhleU2xsmal5QUG aU46Nl0Dp2+oT0C1Uo20rS6apC5cZo0CdWS0tIxZdnkjyp7hMpk40UIk5XZR1rpRKD Ldln1Nm+VcVs1biv/e50jnI+nu4ND3VrBnhOzaNf5YZpwVT7uDyMyzLAVJKEPAZQCa fGHSLcOZ9XwCZs0/GOnqJtREeLBoL5DR0MWEh5tqMJfAygXhRVh8nQs5Iu97h70iAc Y4lRyDrVwPwV860x1bmLn79IJKtobFh5sh7tc8oxn8B3+kv47H5Itw2cCIuvj7SvKm uzMwNeyJ9HVsg== Received: from host213-123-75-60.in-addr.btopenworld.com ([213.123.75.60] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qVrSM-004ydV-37; Tue, 15 Aug 2023 11:39:22 +0100 Date: Tue, 15 Aug 2023 11:39:34 +0100 Message-ID: <87fs4kpp21.wl-maz@kernel.org> From: Marc Zyngier To: Jing Zhang Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Catalin Marinas , Eric Auger , Mark Brown , Mark Rutland , Will Deacon , Alexandru Elisei , Andre Przywara , Chase Conklin , Ganapatrao Kulkarni , Darren Hart , Miguel Luis , James Morse , Suzuki K Poulose , Oliver Upton , Zenghui Yu Subject: Re: [PATCH v3 19/27] KVM: arm64: nv: Add fine grained trap forwarding infrastructure In-Reply-To: References: <20230808114711.2013842-1-maz@kernel.org> <20230808114711.2013842-20-maz@kernel.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 213.123.75.60 X-SA-Exim-Rcpt-To: jingzhangos@google.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, eric.auger@redhat.com, broonie@kernel.org, mark.rutland@arm.com, will@kernel.org, alexandru.elisei@arm.com, andre.przywara@arm.com, chase.conklin@arm.com, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, miguel.luis@oracle.com, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230815_033925_794204_4CE42CBB X-CRM114-Status: GOOD ( 34.99 ) 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 T24gTW9uLCAxNCBBdWcgMjAyMyAxODoxODo1NyArMDEwMCwKSmluZyBaaGFuZyA8amluZ3poYW5n b3NAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gCj4gSGkgTWFyYywKPiAKPiBPbiBUdWUsIEF1ZyA4LCAy MDIzIGF0IDQ6NDfigK9BTSBNYXJjIFp5bmdpZXIgPG1hekBrZXJuZWwub3JnPiB3cm90ZToKPiA+ Cj4gPiBGaW5lIEdyYWluZWQgVHJhcHMgYXJlIGZ1bi4gTm90Lgo+ID4KPiA+IEltcGxlbWVudCB0 aGUgZmluZSBncmFpbmVkIHRyYXAgZm9yd2FyZGluZywgcmV1c2luZyB0aGUgQ29hcnNlIEdyYWlu ZWQKPiA+IFRyYXBzIGluZnJhc3RydWN0dXJlIHByZXZpb3VzbHkgaW1wbGVtZW50ZWQuCj4gPgo+ ID4gRWFjaCBzeXNyZWcvaW5zdHJ1Y3Rpb24gaW5zZXJ0ZWQgaW4gdGhlIHhhcnJheSBnZXRzIGEg RkdUIGdyb3VwCj4gPiAodmFndWVseSBlcXVpdmFsZW50IHRvIGEgcmVnaXN0ZXIgbnVtYmVyKSwg YSBiaXQgbnVtYmVyIGluIHRoYXQgcmVnaXN0ZXIsCj4gPiBhbmQgYSBwb2xhcml0eS4KPiA+Cj4g PiBJdCBpcyB0aGVuIHByZXR0eSBlYXN5IHRvIGNoZWNrIHRoZSBGR1Qgc3RhdGUgYXQgaGFuZGxp bmcgdGltZSwganVzdAo+ID4gbGlrZSB3ZSBkbyBmb3IgdGhlIGNvYXJzZSB2ZXJzaW9uIChpdCBp cyBqdXN0IGZhc3RlcikuCj4gPgo+ID4gUmV2aWV3ZWQtYnk6IEVyaWMgQXVnZXIgPGVyaWMuYXVn ZXJAcmVkaGF0LmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IE1hcmMgWnluZ2llciA8bWF6QGtlcm5l bC5vcmc+Cj4gPiAtLS0KPiA+ICBhcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jIHwgNzgg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDc3 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9h cm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVk LmMKPiA+IGluZGV4IGNkMDU0NGMzNTc3ZS4uYWY3NWMyNzc1NjM4IDEwMDY0NAo+ID4gLS0tIGEv YXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYwo+ID4gKysrIGIvYXJjaC9hcm02NC9rdm0v ZW11bGF0ZS1uZXN0ZWQuYwo+ID4gQEAgLTkyOCw2ICs5MjgsMjcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZpZyBlbmNvZGluZ190b19jZ3RbXSBfX2luaXRjb25z dCA9IHsKPiA+Cj4gPiAgc3RhdGljIERFRklORV9YQVJSQVkoc3JfZm9yd2FyZF94YSk7Cj4gPgo+ ID4gK2VudW0gZmd0X2dyb3VwX2lkIHsKPiA+ICsgICAgICAgX19OT19GR1RfR1JPVVBfXywKPiA+ ICsKPiA+ICsgICAgICAgLyogTXVzdCBiZSBsYXN0ICovCj4gPiArICAgICAgIF9fTlJfRkdUX0dS T1VQX0lEU19fCj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIFNSX0ZHVChzciwgZywgYiwgcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAg ICAgICAgICAgICAgIC5lbmNvZGluZyAgICAgICA9IHNyLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiA+ICsgICAgICAgICAgICAgICAuZW5kICAgICAgICAgICAgPSBzciwgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgICAgICAgICAgLnRjICAgICAgICAgICAgID0g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgLmZndCA9IGcgIyMgX0dST1VQLCAgICAgICAgICAgICAgICAgICAgIFwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIC5iaXQgPSBnICMjIF9FTDJfICMjIGIgIyMgX1NISUZULCAgICAgICBc Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAucG9sID0gcCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ID4gKyAgICAgICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25maWcgZW5jb2RpbmdfdG9fZmd0W10g X19pbml0Y29uc3QgPSB7Cj4gPiArfTsKPiA+ICsKPiA+ICBzdGF0aWMgdW5pb24gdHJhcF9jb25m aWcgZ2V0X3RyYXBfY29uZmlnKHUzMiBzeXNyZWcpCj4gPiAgewo+ID4gICAgICAgICByZXR1cm4g KHVuaW9uIHRyYXBfY29uZmlnKSB7Cj4gPiBAQCAtOTQxLDYgKzk2Miw3IEBAIGludCBfX2luaXQg cG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZCkKPiA+Cj4gPiAgICAgICAgIEJVSUxEX0JVR19P TihzaXplb2YodW5pb24gdHJhcF9jb25maWcpICE9IHNpemVvZih2b2lkICopKTsKPiA+ICAgICAg ICAgQlVJTERfQlVHX09OKF9fTlJfVFJBUF9HUk9VUF9JRFNfXyA+IEJJVChUQ19DR1RfQklUUykp Owo+ID4gKyAgICAgICBCVUlMRF9CVUdfT04oX19OUl9GR1RfR1JPVVBfSURTX18gPiBCSVQoVENf RkdUX0JJVFMpKTsKPiA+Cj4gPiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0la RShlbmNvZGluZ190b19jZ3QpOyBpKyspIHsKPiA+ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25maWcgKmNndCA9ICZlbmNvZGluZ190b19jZ3RbaV07Cj4g PiBAQCAtOTYzLDYgKzk4NSwzNCBAQCBpbnQgX19pbml0IHBvcHVsYXRlX252X3RyYXBfY29uZmln KHZvaWQpCj4gPiAgICAgICAgIGt2bV9pbmZvKCJudjogJWxkIGNvYXJzZSBncmFpbmVkIHRyYXAg aGFuZGxlcnNcbiIsCj4gPiAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoZW5jb2RpbmdfdG9f Y2d0KSk7Cj4gPgo+ID4gKyAgICAgICBpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFT X0ZHVCkpCj4gPiArICAgICAgICAgICAgICAgZ290byBjaGVja19tY2I7Cj4gPiArCj4gPiArICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbmNvZGluZ190b19mZ3QpOyBpKysp IHsKPiA+ICsgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25m aWcgKmZndCA9ICZlbmNvZGluZ190b19mZ3RbaV07Cj4gPiArICAgICAgICAgICAgICAgdW5pb24g dHJhcF9jb25maWcgdGM7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgdGMgPSBnZXRfdHJhcF9j b25maWcoZmd0LT5lbmNvZGluZyk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgaWYgKHRjLmZn dCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAga3ZtX2VycigiRHVwbGljYXRlIEZHVCBm b3IgKCVkLCAlZCwgJWQsICVkLCAlZClcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN5c19yZWdfT3AwKGZndC0+ZW5jb2RpbmcpLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzeXNfcmVnX09wMShmZ3QtPmVuY29kaW5nKSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3lzX3JlZ19DUm4oZmd0LT5lbmNvZGluZyksCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19yZWdfQ1JtKGZndC0+ZW5jb2RpbmcpLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfcmVnX09wMihmZ3QtPmVuY29k aW5nKSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ID4gKyAg ICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICB0Yy52YWwgfD0gZmd0LT50 Yy52YWw7Cj4gPiArICAgICAgICAgICAgICAgeGFfc3RvcmUoJnNyX2ZvcndhcmRfeGEsIGZndC0+ ZW5jb2RpbmcsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgeGFfbWtfdmFsdWUodGMudmFs KSwgR0ZQX0tFUk5FTCk7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAga3ZtX2luZm8o Im52OiAlbGQgZmluZSBncmFpbmVkIHRyYXAgaGFuZGxlcnNcbiIsCj4gPiArICAgICAgICAgICAg ICAgIEFSUkFZX1NJWkUoZW5jb2RpbmdfdG9fZmd0KSk7Cj4gPiArCj4gPiArY2hlY2tfbWNiOgo+ ID4gICAgICAgICBmb3IgKGludCBpZCA9IF9fTVVMVElQTEVfQ09OVFJPTF9CSVRTX187Cj4gPiAg ICAgICAgICAgICAgaWQgPCAoX19DT01QTEVYX0NPTkRJVElPTlNfXyAtIDEpOwo+ID4gICAgICAg ICAgICAgIGlkKyspIHsKPiA+IEBAIC0xMDMxLDEzICsxMDgxLDI2IEBAIHN0YXRpYyBlbnVtIHRy YXBfYmVoYXZpb3VyIGNvbXB1dGVfdHJhcF9iZWhhdmlvdXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LAo+ID4gICAgICAgICByZXR1cm4gX19kb19jb21wdXRlX3RyYXBfYmVoYXZpb3VyKHZjcHUsIHRj LmNndCwgYik7Cj4gPiAgfQo+ID4KPiA+ICtzdGF0aWMgYm9vbCBjaGVja19mZ3RfYml0KHU2NCB2 YWwsIGNvbnN0IHVuaW9uIHRyYXBfY29uZmlnIHRjKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0dXJu ICgodmFsID4+IHRjLmJpdCkgJiAxKSA9PSB0Yy5wb2w7Cj4gPiArfQo+ID4gKwo+ID4gKyNkZWZp bmUgc2FuaXRpc2VkX3N5c19yZWcodmNwdSwgcmVnKSAgICAgICAgICAgICAgICAgICBcCj4gPiAr ICAgICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiA+ICsgICAgICAgICAgICAgICB1NjQgX192YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ID4gKyAgICAgICAgICAgICAgIF9fdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgcmVn KTsgICAgICBcCj4gPiArICAgICAgICAgICAgICAgX192YWwgJj0gfl9fICMjIHJlZyAjIyBfUkVT MDsgICAgICAgICAgIFwKPiA+ICsgICAgICAgICAgICAgICAoX192YWwpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICB9KQo+ID4gKwo+ID4gIGJvb2wgX19jaGVj a19udl9zcl9mb3J3YXJkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiA+ICB7Cj4gPiAgICAgICAg IHVuaW9uIHRyYXBfY29uZmlnIHRjOwo+ID4gICAgICAgICBlbnVtIHRyYXBfYmVoYXZpb3VyIGI7 Cj4gPiAgICAgICAgIGJvb2wgaXNfcmVhZDsKPiA+ICAgICAgICAgdTMyIHN5c3JlZzsKPiA+IC0g ICAgICAgdTY0IGVzcjsKPiA+ICsgICAgICAgdTY0IGVzciwgdmFsOwo+ID4KPiA+ICAgICAgICAg aWYgKCF2Y3B1X2hhc19udih2Y3B1KSB8fCBpc19oeXBfY3R4dCh2Y3B1KSkKPiA+ICAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiBAQCAtMTA2MCw2ICsxMTIzLDE5IEBAIGJvb2wgX19j aGVja19udl9zcl9mb3J3YXJkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiA+ICAgICAgICAgaWYg KCF0Yy52YWwpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4KPiA+ICsgICAg ICAgc3dpdGNoICgoZW51bSBmZ3RfZ3JvdXBfaWQpdGMuZmd0KSB7Cj4gPiArICAgICAgIGNhc2Ug X19OT19GR1RfR1JPVVBfXzoKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsg ICAgICAgY2FzZSBfX05SX0ZHVF9HUk9VUF9JRFNfXzoKPiA+ICsgICAgICAgICAgICAgICAvKiBT b21ldGhpbmcgaXMgcmVhbGx5IHdyb25nLCBiYWlsIG91dCAqLwo+ID4gKyAgICAgICAgICAgICAg IFdBUk5fT05DRSgxLCAiX19OUl9GR1RfR1JPVVBfSURTX18iKTsKPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7Cj4gCj4gRG8gd2UgbmVlZCBhIGRlZmF1bHQgY2xhdXNlIGhlcmUgdG8g Y2F0Y2ggdW5leHBlY3RlZCB0Yy5mZ3QgdmFsdWVzPwoKSSdkIHJhdGhlciBub3QgaGF2ZSBhbnl0 aGluZyBzcGVjaWFsIGF0IGhhbmRsaW5nIHRpbWUsIGFzIHRoZSBjb21waWxlcgppcyBwZXJmZWN0 bHkgYWxsb3dlZCB0byB1c2UgdGhlIGNhc3QgYWJvdmUgdG8gcmVzdHJpY3QgdGhlIHZhbHVlIHRv CnRoZSBlbnVtZXJhdGlvbi4gV2UgYWxyZWFkeSBjb3ZlciBhbGwgdGhlIHBvc3NpYmxlIGVudW0g dmFsdWVzLCB3aGljaAppcyBnb29kIGVub3VnaC4KCkhvd2V2ZXIsIEkndmUgYWRkZWQgYW4gZXh0 cmEgY2hlY2sgYXQgYm9vdCB0aW1lIGZvciB1bmV4cGVjdGVkIHZhbHVlcwpoYXZpbmcgc25lYWtl ZCBpbnRvIHRoZSBGR1QgdGFibGUuCgpUaGFua3MsCgoJTS4KCi0tIApXaXRob3V0IGRldmlhdGlv biBmcm9tIHRoZSBub3JtLCBwcm9ncmVzcyBpcyBub3QgcG9zc2libGUuCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==