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 E67686F079 for ; Tue, 28 May 2024 08:16:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716884188; cv=none; b=ceYguki5B4t66cKQK6+oaOy/GpkAG29nUoMeEar3y9/sGuL4w8DarZIcGrtmm1cspl9LMkHDGmpYIaz8oFEn8cipxyQFm/DSN7o2m42WOAkI5oaV/fwJNDozAuB14YBcvbZAmnkM36syfSDrJ4QK/z0H1QvlJBtPFW3cG+w8XAA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716884188; c=relaxed/simple; bh=c/aCl4A92v+AL/YnLF2mG4LjuecMfHezvyygU6RSG+M=; h=Date:Message-ID:From:To:Cc:Subject:In-Reply-To:References: MIME-Version:Content-Type; b=Ix5m/OmMBl9iADbbgTpDVD065RgE4FjS7q1PuDOQUhLJIaulp88Vbp5Vv2eUkrMEITwETu8Iwn90qnc6Sbfnm2Bguq5myou7Ig8ix0R4f60YJWmNupLZ4B55+yVYN7bLnvhvebJtgrvGamxdc2mXkQ9Xv734KIXlInkNTyZxCYQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mu2W787A; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mu2W787A" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61186C3277B; Tue, 28 May 2024 08:16:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1716884187; bh=c/aCl4A92v+AL/YnLF2mG4LjuecMfHezvyygU6RSG+M=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=mu2W787AnI97s0IWOJG4L98V8EMW83U3cOTnVFPXCGszju1OaxR06l48FGPDqzrS+ AGMeAcA4NL8DdvunZOc++mvAuO7k+If4g5VreeYU2ApJFt1PEpy6aoeHNzrHXOeip0 qF2Zvo7yLGZpmZUOZbA9bbZmyjGyyfxOflvbByg6yn1zb5GefJ9axoqx+TMEiZVpAt TyPkwYKf0QSlKs2md8dzMW7JqTXlnD8TF2EpBhfJrjs6ZLbujl0ITlI9E7o5+HaQix r2ZKj+TABkymT82n8N6IGf6XrT8ohHfuxxxneGUp6T6hGDjVqnRsGEHq3yyGRZKgqr 0mxVVp6xEjS+Q== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.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 1sBs0P-00GDqf-9u; Tue, 28 May 2024 09:16:25 +0100 Date: Tue, 28 May 2024 09:16:24 +0100 Message-ID: <86h6eimjvr.wl-maz@kernel.org> From: Marc Zyngier To: Fuad Tabba Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, will@kernel.org, qperret@google.com, seanjc@google.com, alexandru.elisei@arm.com, catalin.marinas@arm.com, philmd@linaro.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, mark.rutland@arm.com, broonie@kernel.org, joey.gouly@arm.com, rananta@google.com, yuzenghui@huawei.com Subject: Re: [PATCH v2 5/7] KVM: arm64: Allocate memory at hyp for host sve state in pKVM In-Reply-To: References: <20240521163720.3812851-1-tabba@google.com> <20240521163720.3812851-6-tabba@google.com> <86plten8kr.wl-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/29.2 (aarch64-unknown-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: 185.219.108.64 X-SA-Exim-Rcpt-To: tabba@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, will@kernel.org, qperret@google.com, seanjc@google.com, alexandru.elisei@arm.com, catalin.marinas@arm.com, philmd@linaro.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, mark.rutland@arm.com, broonie@kernel.org, joey.gouly@arm.com, rananta@google.com, 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 Wed, 22 May 2024 15:37:53 +0100, Fuad Tabba wrote: >=20 > Hi Marc, >=20 > On Tue, May 21, 2024 at 10:44=E2=80=AFPM Marc Zyngier wr= ote: > > > > On Tue, 21 May 2024 17:37:18 +0100, > > Fuad Tabba wrote: > > > > > > Protected mode needs to maintain (save/restore) the host's sve > > > state, rather than relying on the host kernel to do that. This is > > > to avoid leaking information to the host about guests and the > > > type of operations they are performing. > > > > > > As a first step towards that, allocate memory at hyp, per cpu, to > > > hold the host sve data. The following patch will use this memory > > > to save/restore the host state. > > > > What I read in the code contradicts this statement. The memory is > > definitely allocated on the *host*. >=20 > You're right. I should say memory mapped at hyp. >=20 > > > > > > Signed-off-by: Fuad Tabba > > > --- > > > Note that the last patch in this series will consolidate the > > > setup of the host's fpsimd and sve states, which currently take > > > place in two different locations. Moreover, that last patch will > > > also place the host fpsimd and sve_state pointers in a union. > > > --- > > > arch/arm64/include/asm/kvm_host.h | 2 + > > > arch/arm64/include/asm/kvm_pkvm.h | 9 ++++ > > > arch/arm64/include/uapi/asm/ptrace.h | 14 ++++++ > > > arch/arm64/kvm/arm.c | 68 ++++++++++++++++++++++++++= ++ > > > arch/arm64/kvm/hyp/nvhe/setup.c | 24 ++++++++++ > > > 5 files changed, 117 insertions(+) > > > > > > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/a= sm/kvm_host.h > > > index 0a5fceb20f3a..7b3745ef1d73 100644 > > > --- a/arch/arm64/include/asm/kvm_host.h > > > +++ b/arch/arm64/include/asm/kvm_host.h > > > @@ -535,7 +535,9 @@ struct kvm_cpu_context { > > > */ > > > struct kvm_host_data { > > > struct kvm_cpu_context host_ctxt; > > > + > > > struct user_fpsimd_state *fpsimd_state; /* hyp VA */ > > > + struct user_sve_state *sve_state; /* hyp VA */ > > > > > > /* Ownership of the FP regs */ > > > enum { > > > diff --git a/arch/arm64/include/asm/kvm_pkvm.h b/arch/arm64/include/a= sm/kvm_pkvm.h > > > index ad9cfb5c1ff4..b9d12e123efb 100644 > > > --- a/arch/arm64/include/asm/kvm_pkvm.h > > > +++ b/arch/arm64/include/asm/kvm_pkvm.h > > > @@ -128,4 +128,13 @@ static inline unsigned long hyp_ffa_proxy_pages(= void) > > > return (2 * KVM_FFA_MBOX_NR_PAGES) + DIV_ROUND_UP(desc_max, PAG= E_SIZE); > > > } > > > > > > +static inline size_t pkvm_host_sve_state_size(void) > > > +{ > > > + if (!system_supports_sve()) > > > + return 0; > > > + > > > + return size_add(sizeof(struct user_sve_state), > > > + SVE_SIG_REGS_SIZE(sve_vq_from_vl(kvm_host_sve_m= ax_vl))); > > > +} > > > + > > > #endif /* __ARM64_KVM_PKVM_H__ */ > > > diff --git a/arch/arm64/include/uapi/asm/ptrace.h b/arch/arm64/includ= e/uapi/asm/ptrace.h > > > index 7fa2f7036aa7..77aabf964071 100644 > > > --- a/arch/arm64/include/uapi/asm/ptrace.h > > > +++ b/arch/arm64/include/uapi/asm/ptrace.h > > > @@ -120,6 +120,20 @@ struct user_sve_header { > > > __u16 __reserved; > > > }; > > > > > > +struct user_sve_state { > > > + __u64 zcr_el1; > > > + > > > + /* > > > + * Ordering is important since __sve_save_state/__sve_restore_s= tate > > > + * relies on it. > > > + */ > > > + __u32 fpsr; > > > + __u32 fpcr; > > > + > > > + /* Must be SVE_VQ_BYTES (128 bit) aligned. */ > > > + __u8 sve_regs[]; > > > +}; > > > + > > > > Huh, why is this in uapi? Why should userspace even care about this at > > all? From what I can tell, this is purely internal to the kernel, and > > in any case, KVM isn't tied to that format if it doesn't dump stuff in > > the userspace thread context. Given the number of bugs this format has > > generated, I really wouldn't mind moving away from it. >=20 > I put it here since the sve_header is here, as well as other similar stru= ctures. >=20 > Should I move it to asm/kvm_pkvm.h? kvm_host.h or kvm_types.h seem like the best option (replacing the "user" prefix with something else), as this is directly consumed by kvm_host.h. 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 C7E61C25B79 for ; Tue, 28 May 2024 08:16:45 +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=8K6J5iB/dQTOr8toA4fM2Ew4DwaiDXNvPzS7ztYJS4A=; b=crSu8qiikky7oe K0vmnlIe4mTEsrTAAi9Hznya1dryac3PkzlDtnI/KqmkeWe1ls7Y7Hgz5FqgCKm36GDCqw7jjgK5s hWCJPnmC40B8V72m/RJPRehzZxI42fObuN70ZsXZbqtGRitnhYM8TKxJVVKVkOHJusOH0yrtow1S+ WulZQE8Sl1MI3MjTUeiB2ky50W8vRwLI3QMcrjPvb5LZdYcj67IiwnCY17ZNcC4hXfPbQbSevntWE 5oLeTJXvpaaiJggA4DPYaBpmyewuEZzmeC3zetVIDxy7hxjRmM/KC1XJwRM9dCTp0ifB3lfxf9UX8 QxvheIIk0HUy63PR3EJg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBs0X-0000000HRif-0z56; Tue, 28 May 2024 08:16:33 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBs0U-0000000HRiA-1LzO for linux-arm-kernel@lists.infradead.org; Tue, 28 May 2024 08:16:31 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 2EAEACE10E4; Tue, 28 May 2024 08:16:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61186C3277B; Tue, 28 May 2024 08:16:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1716884187; bh=c/aCl4A92v+AL/YnLF2mG4LjuecMfHezvyygU6RSG+M=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=mu2W787AnI97s0IWOJG4L98V8EMW83U3cOTnVFPXCGszju1OaxR06l48FGPDqzrS+ AGMeAcA4NL8DdvunZOc++mvAuO7k+If4g5VreeYU2ApJFt1PEpy6aoeHNzrHXOeip0 qF2Zvo7yLGZpmZUOZbA9bbZmyjGyyfxOflvbByg6yn1zb5GefJ9axoqx+TMEiZVpAt TyPkwYKf0QSlKs2md8dzMW7JqTXlnD8TF2EpBhfJrjs6ZLbujl0ITlI9E7o5+HaQix r2ZKj+TABkymT82n8N6IGf6XrT8ohHfuxxxneGUp6T6hGDjVqnRsGEHq3yyGRZKgqr 0mxVVp6xEjS+Q== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.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 1sBs0P-00GDqf-9u; Tue, 28 May 2024 09:16:25 +0100 Date: Tue, 28 May 2024 09:16:24 +0100 Message-ID: <86h6eimjvr.wl-maz@kernel.org> From: Marc Zyngier To: Fuad Tabba Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, will@kernel.org, qperret@google.com, seanjc@google.com, alexandru.elisei@arm.com, catalin.marinas@arm.com, philmd@linaro.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, mark.rutland@arm.com, broonie@kernel.org, joey.gouly@arm.com, rananta@google.com, yuzenghui@huawei.com Subject: Re: [PATCH v2 5/7] KVM: arm64: Allocate memory at hyp for host sve state in pKVM In-Reply-To: References: <20240521163720.3812851-1-tabba@google.com> <20240521163720.3812851-6-tabba@google.com> <86plten8kr.wl-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/29.2 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: tabba@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, will@kernel.org, qperret@google.com, seanjc@google.com, alexandru.elisei@arm.com, catalin.marinas@arm.com, philmd@linaro.org, james.morse@arm.com, suzuki.poulose@arm.com, oliver.upton@linux.dev, mark.rutland@arm.com, broonie@kernel.org, joey.gouly@arm.com, rananta@google.com, 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-20240528_011630_739584_DE6BF586 X-CRM114-Status: GOOD ( 41.65 ) 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 T24gV2VkLCAyMiBNYXkgMjAyNCAxNTozNzo1MyArMDEwMCwKRnVhZCBUYWJiYSA8dGFiYmFAZ29v Z2xlLmNvbT4gd3JvdGU6Cj4gCj4gSGkgTWFyYywKPiAKPiBPbiBUdWUsIE1heSAyMSwgMjAyNCBh dCAxMDo0NOKAr1BNIE1hcmMgWnluZ2llciA8bWF6QGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4KPiA+ IE9uIFR1ZSwgMjEgTWF5IDIwMjQgMTc6Mzc6MTggKzAxMDAsCj4gPiBGdWFkIFRhYmJhIDx0YWJi YUBnb29nbGUuY29tPiB3cm90ZToKPiA+ID4KPiA+ID4gUHJvdGVjdGVkIG1vZGUgbmVlZHMgdG8g bWFpbnRhaW4gKHNhdmUvcmVzdG9yZSkgdGhlIGhvc3QncyBzdmUKPiA+ID4gc3RhdGUsIHJhdGhl ciB0aGFuIHJlbHlpbmcgb24gdGhlIGhvc3Qga2VybmVsIHRvIGRvIHRoYXQuIFRoaXMgaXMKPiA+ ID4gdG8gYXZvaWQgbGVha2luZyBpbmZvcm1hdGlvbiB0byB0aGUgaG9zdCBhYm91dCBndWVzdHMg YW5kIHRoZQo+ID4gPiB0eXBlIG9mIG9wZXJhdGlvbnMgdGhleSBhcmUgcGVyZm9ybWluZy4KPiA+ ID4KPiA+ID4gQXMgYSBmaXJzdCBzdGVwIHRvd2FyZHMgdGhhdCwgYWxsb2NhdGUgbWVtb3J5IGF0 IGh5cCwgcGVyIGNwdSwgdG8KPiA+ID4gaG9sZCB0aGUgaG9zdCBzdmUgZGF0YS4gVGhlIGZvbGxv d2luZyBwYXRjaCB3aWxsIHVzZSB0aGlzIG1lbW9yeQo+ID4gPiB0byBzYXZlL3Jlc3RvcmUgdGhl IGhvc3Qgc3RhdGUuCj4gPgo+ID4gV2hhdCBJIHJlYWQgaW4gdGhlIGNvZGUgY29udHJhZGljdHMg dGhpcyBzdGF0ZW1lbnQuIFRoZSBtZW1vcnkgaXMKPiA+IGRlZmluaXRlbHkgYWxsb2NhdGVkIG9u IHRoZSAqaG9zdCouCj4gCj4gWW91J3JlIHJpZ2h0LiBJIHNob3VsZCBzYXkgbWVtb3J5IG1hcHBl ZCBhdCBoeXAuCj4gCj4gPiA+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IEZ1YWQgVGFiYmEgPHRhYmJh QGdvb2dsZS5jb20+Cj4gPiA+IC0tLQo+ID4gPiBOb3RlIHRoYXQgdGhlIGxhc3QgcGF0Y2ggaW4g dGhpcyBzZXJpZXMgd2lsbCBjb25zb2xpZGF0ZSB0aGUKPiA+ID4gc2V0dXAgb2YgdGhlIGhvc3Qn cyBmcHNpbWQgYW5kIHN2ZSBzdGF0ZXMsIHdoaWNoIGN1cnJlbnRseSB0YWtlCj4gPiA+IHBsYWNl IGluIHR3byBkaWZmZXJlbnQgbG9jYXRpb25zLiBNb3Jlb3ZlciwgdGhhdCBsYXN0IHBhdGNoIHdp bGwKPiA+ID4gYWxzbyBwbGFjZSB0aGUgaG9zdCBmcHNpbWQgYW5kIHN2ZV9zdGF0ZSBwb2ludGVy cyBpbiBhIHVuaW9uLgo+ID4gPiAtLS0KPiA+ID4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3Zt X2hvc3QuaCAgICB8ICAyICsKPiA+ID4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3Brdm0u aCAgICB8ICA5ICsrKysKPiA+ID4gIGFyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9wdHJhY2Uu aCB8IDE0ICsrKysrKwo+ID4gPiAgYXJjaC9hcm02NC9rdm0vYXJtLmMgICAgICAgICAgICAgICAg IHwgNjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAgYXJjaC9hcm02NC9rdm0v aHlwL252aGUvc2V0dXAuYyAgICAgIHwgMjQgKysrKysrKysrKwo+ID4gPiAgNSBmaWxlcyBjaGFu Z2VkLCAxMTcgaW5zZXJ0aW9ucygrKQo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02 NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9z dC5oCj4gPiA+IGluZGV4IDBhNWZjZWIyMGYzYS4uN2IzNzQ1ZWYxZDczIDEwMDY0NAo+ID4gPiAt LS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiA+ID4gKysrIGIvYXJjaC9h cm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4gPiA+IEBAIC01MzUsNyArNTM1LDkgQEAgc3Ry dWN0IGt2bV9jcHVfY29udGV4dCB7Cj4gPiA+ICAgKi8KPiA+ID4gIHN0cnVjdCBrdm1faG9zdF9k YXRhIHsKPiA+ID4gICAgICAgc3RydWN0IGt2bV9jcHVfY29udGV4dCBob3N0X2N0eHQ7Cj4gPiA+ ICsKPiA+ID4gICAgICAgc3RydWN0IHVzZXJfZnBzaW1kX3N0YXRlICpmcHNpbWRfc3RhdGU7IC8q IGh5cCBWQSAqLwo+ID4gPiArICAgICBzdHJ1Y3QgdXNlcl9zdmVfc3RhdGUgKnN2ZV9zdGF0ZTsg ICAgICAgLyogaHlwIFZBICovCj4gPiA+Cj4gPiA+ICAgICAgIC8qIE93bmVyc2hpcCBvZiB0aGUg RlAgcmVncyAqLwo+ID4gPiAgICAgICBlbnVtIHsKPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX3Brdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3Br dm0uaAo+ID4gPiBpbmRleCBhZDljZmI1YzFmZjQuLmI5ZDEyZTEyM2VmYiAxMDA2NDQKPiA+ID4g LS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oCj4gPiA+ICsrKyBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20va3ZtX3Brdm0uaAo+ID4gPiBAQCAtMTI4LDQgKzEyOCwxMyBAQCBz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHlwX2ZmYV9wcm94eV9wYWdlcyh2b2lkKQo+ID4g PiAgICAgICByZXR1cm4gKDIgKiBLVk1fRkZBX01CT1hfTlJfUEFHRVMpICsgRElWX1JPVU5EX1VQ KGRlc2NfbWF4LCBQQUdFX1NJWkUpOwo+ID4gPiAgfQo+ID4gPgo+ID4gPiArc3RhdGljIGlubGlu ZSBzaXplX3QgcGt2bV9ob3N0X3N2ZV9zdGF0ZV9zaXplKHZvaWQpCj4gPiA+ICt7Cj4gPiA+ICsg ICAgIGlmICghc3lzdGVtX3N1cHBvcnRzX3N2ZSgpKQo+ID4gPiArICAgICAgICAgICAgIHJldHVy biAwOwo+ID4gPiArCj4gPiA+ICsgICAgIHJldHVybiBzaXplX2FkZChzaXplb2Yoc3RydWN0IHVz ZXJfc3ZlX3N0YXRlKSwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIFNWRV9TSUdfUkVHU19T SVpFKHN2ZV92cV9mcm9tX3ZsKGt2bV9ob3N0X3N2ZV9tYXhfdmwpKSk7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gICNlbmRpZiAgICAgICAvKiBfX0FSTTY0X0tWTV9QS1ZNX0hfXyAqLwo+ID4gPiBk aWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL3B0cmFjZS5oIGIvYXJjaC9h cm02NC9pbmNsdWRlL3VhcGkvYXNtL3B0cmFjZS5oCj4gPiA+IGluZGV4IDdmYTJmNzAzNmFhNy4u NzdhYWJmOTY0MDcxIDEwMDY0NAo+ID4gPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9h c20vcHRyYWNlLmgKPiA+ID4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL3B0cmFj ZS5oCj4gPiA+IEBAIC0xMjAsNiArMTIwLDIwIEBAIHN0cnVjdCB1c2VyX3N2ZV9oZWFkZXIgewo+ ID4gPiAgICAgICBfX3UxNiBfX3Jlc2VydmVkOwo+ID4gPiAgfTsKPiA+ID4KPiA+ID4gK3N0cnVj dCB1c2VyX3N2ZV9zdGF0ZSB7Cj4gPiA+ICsgICAgIF9fdTY0IHpjcl9lbDE7Cj4gPiA+ICsKPiA+ ID4gKyAgICAgLyoKPiA+ID4gKyAgICAgICogT3JkZXJpbmcgaXMgaW1wb3J0YW50IHNpbmNlIF9f c3ZlX3NhdmVfc3RhdGUvX19zdmVfcmVzdG9yZV9zdGF0ZQo+ID4gPiArICAgICAgKiByZWxpZXMg b24gaXQuCj4gPiA+ICsgICAgICAqLwo+ID4gPiArICAgICBfX3UzMiBmcHNyOwo+ID4gPiArICAg ICBfX3UzMiBmcGNyOwo+ID4gPiArCj4gPiA+ICsgICAgIC8qIE11c3QgYmUgU1ZFX1ZRX0JZVEVT ICgxMjggYml0KSBhbGlnbmVkLiAqLwo+ID4gPiArICAgICBfX3U4IHN2ZV9yZWdzW107Cj4gPiA+ ICt9Owo+ID4gPiArCj4gPgo+ID4gSHVoLCB3aHkgaXMgdGhpcyBpbiB1YXBpPyBXaHkgc2hvdWxk IHVzZXJzcGFjZSBldmVuIGNhcmUgYWJvdXQgdGhpcyBhdAo+ID4gYWxsPyBGcm9tIHdoYXQgSSBj YW4gdGVsbCwgdGhpcyBpcyBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgYW5kCj4gPiBp biBhbnkgY2FzZSwgS1ZNIGlzbid0IHRpZWQgdG8gdGhhdCBmb3JtYXQgaWYgaXQgZG9lc24ndCBk dW1wIHN0dWZmIGluCj4gPiB0aGUgdXNlcnNwYWNlIHRocmVhZCBjb250ZXh0LiBHaXZlbiB0aGUg bnVtYmVyIG9mIGJ1Z3MgdGhpcyBmb3JtYXQgaGFzCj4gPiBnZW5lcmF0ZWQsIEkgcmVhbGx5IHdv dWxkbid0IG1pbmQgbW92aW5nIGF3YXkgZnJvbSBpdC4KPiAKPiBJIHB1dCBpdCBoZXJlIHNpbmNl IHRoZSBzdmVfaGVhZGVyIGlzIGhlcmUsIGFzIHdlbGwgYXMgb3RoZXIgc2ltaWxhciBzdHJ1Y3R1 cmVzLgo+IAo+IFNob3VsZCBJIG1vdmUgaXQgdG8gYXNtL2t2bV9wa3ZtLmg/Cgprdm1faG9zdC5o IG9yIGt2bV90eXBlcy5oIHNlZW0gbGlrZSB0aGUgYmVzdCBvcHRpb24gKHJlcGxhY2luZyB0aGUK InVzZXIiIHByZWZpeCB3aXRoIHNvbWV0aGluZyBlbHNlKSwgYXMgdGhpcyBpcyBkaXJlY3RseSBj b25zdW1lZCBieQprdm1faG9zdC5oLgoKVGhhbmtzLAoKCU0uCgotLSAKV2l0aG91dCBkZXZpYXRp b24gZnJvbSB0aGUgbm9ybSwgcHJvZ3Jlc3MgaXMgbm90IHBvc3NpYmxlLgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=