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 X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3F796C54E4A for ; Tue, 12 May 2020 11:17:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1AE1C206D6 for ; Tue, 12 May 2020 11:17:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729389AbgELLRf (ORCPT ); Tue, 12 May 2020 07:17:35 -0400 Received: from foss.arm.com ([217.140.110.172]:52726 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728371AbgELLRf (ORCPT ); Tue, 12 May 2020 07:17:35 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1524630E; Tue, 12 May 2020 04:17:34 -0700 (PDT) Received: from [192.168.0.14] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1108F3F71E; Tue, 12 May 2020 04:17:31 -0700 (PDT) Subject: Re: [PATCH 03/26] KVM: arm64: Factor out stage 2 page table data from struct kvm To: Alexandru Elisei , Marc Zyngier Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, Andre Przywara , Christoffer Dall , Dave Martin , Jintack Lim , George Cherian , "Zengtao (B)" , Will Deacon , Catalin Marinas , Mark Rutland , Julien Thierry , Suzuki K Poulose References: <20200422120050.3693593-1-maz@kernel.org> <20200422120050.3693593-4-maz@kernel.org> From: James Morse Message-ID: <76d811eb-b304-c49f-1f21-fe9d95112a28@arm.com> Date: Tue, 12 May 2020 12:17:26 +0100 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Alex, Marc, (just on this last_vcpu_ran thing...) On 11/05/2020 17:38, Alexandru Elisei wrote: > On 4/22/20 1:00 PM, Marc Zyngier wrote: >> From: Christoffer Dall >> >> As we are about to reuse our stage 2 page table manipulation code for >> shadow stage 2 page tables in the context of nested virtualization, we >> are going to manage multiple stage 2 page tables for a single VM. >> >> This requires some pretty invasive changes to our data structures, >> which moves the vmid and pgd pointers into a separate structure and >> change pretty much all of our mmu code to operate on this structure >> instead. >> >> The new structure is called struct kvm_s2_mmu. >> >> There is no intended functional change by this patch alone. >> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h >> index 7dd8fefa6aecd..664a5d92ae9b8 100644 >> --- a/arch/arm64/include/asm/kvm_host.h >> +++ b/arch/arm64/include/asm/kvm_host.h >> @@ -63,19 +63,32 @@ struct kvm_vmid { >> u32 vmid; >> }; >> >> -struct kvm_arch { >> +struct kvm_s2_mmu { >> struct kvm_vmid vmid; >> >> - /* stage2 entry level table */ >> - pgd_t *pgd; >> - phys_addr_t pgd_phys; >> - >> - /* VTCR_EL2 value for this VM */ >> - u64 vtcr; >> + /* >> + * stage2 entry level table >> + * >> + * Two kvm_s2_mmu structures in the same VM can point to the same pgd >> + * here. This happens when running a non-VHE guest hypervisor which >> + * uses the canonical stage 2 page table for both vEL2 and for vEL1/0 >> + * with vHCR_EL2.VM == 0. > > It makes more sense to me to say that a non-VHE guest hypervisor will use the > canonical stage *1* page table when running at EL2 Can KVM say anything about stage1? Its totally under the the guests control even at vEL2... > (the "Non-secure EL2 translation regime" as ARM DDI 0487F.b calls it on page D5-2543). > I think that's > the only situation where vEL2 and vEL1&0 will use the same L0 stage 2 tables. It's > been quite some time since I reviewed the initial version of the NV patches, did I > get that wrong? >> + */ >> + pgd_t *pgd; >> + phys_addr_t pgd_phys; >> >> /* The last vcpu id that ran on each physical CPU */ >> int __percpu *last_vcpu_ran; > > It makes sense for the other fields to be part of kvm_s2_mmu, but I'm struggling > to figure out why last_vcpu_ran is here. Would you mind sharing the rationale? I > don't see this change in v1 or v2 of the NV series. Marc may have a better rationale. My thinking was because kvm_vmid is in here too. last_vcpu_ran exists to prevent KVM accidentally emulating CNP without the opt-in. (we call it defacto CNP). The guest may expect to be able to use asid-4 with different page tables on different vCPUs, assuming the TLB isn't shared. But if KVM is switching between those vCPU on one physical CPU, the TLB is shared, ... the VMID and ASID are the same, but the page tables are not. Not fun to debug! NV makes this problem per-stage2, because each stage2 has its own VMID, we need to track the vcpu_id that last ran this stage2 on this physical CPU. If its not the same, we need to blow away this VMIDs TLB entries. The workaround lives in virt/kvm/arm/arm.c::kvm_arch_vcpu_load() > More below. (lightly trimmed!) Thanks, James >> >> + struct kvm *kvm; >> +}; [...] >> diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c >> index 53b3ba9173ba7..03f01fcfa2bd5 100644 >> --- a/virt/kvm/arm/arm.c >> +++ b/virt/kvm/arm/arm.c > > There's a comment that still mentions arch.vmid that you missed in this file: > > static bool need_new_vmid_gen(struct kvm_vmid *vmid) > { >     u64 current_vmid_gen = atomic64_read(&kvm_vmid_gen); >     smp_rmb(); /* Orders read of kvm_vmid_gen and kvm->arch.vmid */ > [..] >> diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c >> index e3b9ee268823b..2f99749048285 100644 >> --- a/virt/kvm/arm/mmu.c >> +++ b/virt/kvm/arm/mmu.c >> @@ -886,21 +898,23 @@ int create_hyp_exec_mappings(phys_addr_t phys_addr, size_t size, >> } >> >> /** >> - * kvm_alloc_stage2_pgd - allocate level-1 table for stage-2 translation. >> - * @kvm: The KVM struct pointer for the VM. >> + * kvm_init_stage2_mmu - Initialise a S2 MMU strucrure >> + * @kvm: The pointer to the KVM structure >> + * @mmu: The pointer to the s2 MMU structure >> * >> * Allocates only the stage-2 HW PGD level table(s) of size defined by >> - * stage2_pgd_size(kvm). >> + * stage2_pgd_size(mmu->kvm). >> * >> * Note we don't need locking here as this is only called when the VM is >> * created, which can only be done once. >> */ >> -int kvm_alloc_stage2_pgd(struct kvm *kvm) >> +int kvm_init_stage2_mmu(struct kvm *kvm, struct kvm_s2_mmu *mmu) >> { >> phys_addr_t pgd_phys; >> pgd_t *pgd; >> + int cpu; >> >> - if (kvm->arch.pgd != NULL) { >> + if (mmu->pgd != NULL) { >> kvm_err("kvm_arch already initialized?\n"); >> return -EINVAL; >> } >> @@ -914,8 +928,20 @@ int kvm_alloc_stage2_pgd(struct kvm *kvm) >> if (WARN_ON(pgd_phys & ~kvm_vttbr_baddr_mask(kvm))) > We don't free the pgd here, but we do free it if alloc_percpu fails. Is that > intentional? >> return -EINVAL; >> >> - kvm->arch.pgd = pgd; >> - kvm->arch.pgd_phys = pgd_phys; >> + mmu->last_vcpu_ran = alloc_percpu(typeof(*mmu->last_vcpu_ran)); >> + if (!mmu->last_vcpu_ran) { >> + free_pages_exact(pgd, stage2_pgd_size(kvm)); >> + return -ENOMEM; >> + } >> + >> + for_each_possible_cpu(cpu) >> + *per_cpu_ptr(mmu->last_vcpu_ran, cpu) = -1; >> + >> + mmu->kvm = kvm; >> + mmu->pgd = pgd; >> + mmu->pgd_phys = pgd_phys; >> + mmu->vmid.vmid_gen = 0; >> + >> return 0; >> } >> >> @@ -986,39 +1012,34 @@ void stage2_unmap_vm(struct kvm *kvm) >> srcu_read_unlock(&kvm->srcu, idx); >> } >> >> -/** >> - * kvm_free_stage2_pgd - free all stage-2 tables >> - * @kvm: The KVM struct pointer for the VM. >> - * >> - * Walks the level-1 page table pointed to by kvm->arch.pgd and frees all >> - * underlying level-2 and level-3 tables before freeing the actual level-1 table >> - * and setting the struct pointer to NULL. >> - */ >> -void kvm_free_stage2_pgd(struct kvm *kvm) >> +void kvm_free_stage2_pgd(struct kvm_s2_mmu *mmu) >> { >> + struct kvm *kvm = mmu->kvm; >> void *pgd = NULL; >> >> spin_lock(&kvm->mmu_lock); >> - if (kvm->arch.pgd) { >> - unmap_stage2_range(kvm, 0, kvm_phys_size(kvm)); >> - pgd = READ_ONCE(kvm->arch.pgd); >> - kvm->arch.pgd = NULL; >> - kvm->arch.pgd_phys = 0; >> + if (mmu->pgd) { >> + unmap_stage2_range(mmu, 0, kvm_phys_size(kvm)); >> + pgd = READ_ONCE(mmu->pgd); >> + mmu->pgd = NULL; > > The kvm->arch.pgd_phys = 0 instruction seems to have been dropped here. Is that > intentional? 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 X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92D73C54E8B for ; Tue, 12 May 2020 11:17:39 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 1F5BF206D6 for ; Tue, 12 May 2020 11:17:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1F5BF206D6 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 950964B13D; Tue, 12 May 2020 07:17:38 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2HadsEk97hDS; Tue, 12 May 2020 07:17:37 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 21B3F4B126; Tue, 12 May 2020 07:17:37 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id D6D884B0E7 for ; Tue, 12 May 2020 07:17:35 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SHLRjZXJ0C5U for ; Tue, 12 May 2020 07:17:34 -0400 (EDT) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 6BE634B0C8 for ; Tue, 12 May 2020 07:17:34 -0400 (EDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1524630E; Tue, 12 May 2020 04:17:34 -0700 (PDT) Received: from [192.168.0.14] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1108F3F71E; Tue, 12 May 2020 04:17:31 -0700 (PDT) Subject: Re: [PATCH 03/26] KVM: arm64: Factor out stage 2 page table data from struct kvm To: Alexandru Elisei , Marc Zyngier References: <20200422120050.3693593-1-maz@kernel.org> <20200422120050.3693593-4-maz@kernel.org> From: James Morse Message-ID: <76d811eb-b304-c49f-1f21-fe9d95112a28@arm.com> Date: Tue, 12 May 2020 12:17:26 +0100 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB Cc: kvm@vger.kernel.org, Andre Przywara , kvmarm@lists.cs.columbia.edu, George Cherian , "Zengtao \(B\)" , Catalin Marinas , Will Deacon , Dave Martin , linux-arm-kernel@lists.infradead.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgQWxleCwgTWFyYywKCihqdXN0IG9uIHRoaXMgbGFzdF92Y3B1X3JhbiB0aGluZy4uLikKCk9u IDExLzA1LzIwMjAgMTc6MzgsIEFsZXhhbmRydSBFbGlzZWkgd3JvdGU6Cj4gT24gNC8yMi8yMCAx OjAwIFBNLCBNYXJjIFp5bmdpZXIgd3JvdGU6Cj4+IEZyb206IENocmlzdG9mZmVyIERhbGwgPGNo cmlzdG9mZmVyLmRhbGxAYXJtLmNvbT4KPj4KPj4gQXMgd2UgYXJlIGFib3V0IHRvIHJldXNlIG91 ciBzdGFnZSAyIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGNvZGUgZm9yCj4+IHNoYWRvdyBzdGFn ZSAyIHBhZ2UgdGFibGVzIGluIHRoZSBjb250ZXh0IG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwg d2UKPj4gYXJlIGdvaW5nIHRvIG1hbmFnZSBtdWx0aXBsZSBzdGFnZSAyIHBhZ2UgdGFibGVzIGZv ciBhIHNpbmdsZSBWTS4KPj4KPj4gVGhpcyByZXF1aXJlcyBzb21lIHByZXR0eSBpbnZhc2l2ZSBj aGFuZ2VzIHRvIG91ciBkYXRhIHN0cnVjdHVyZXMsCj4+IHdoaWNoIG1vdmVzIHRoZSB2bWlkIGFu ZCBwZ2QgcG9pbnRlcnMgaW50byBhIHNlcGFyYXRlIHN0cnVjdHVyZSBhbmQKPj4gY2hhbmdlIHBy ZXR0eSBtdWNoIGFsbCBvZiBvdXIgbW11IGNvZGUgdG8gb3BlcmF0ZSBvbiB0aGlzIHN0cnVjdHVy ZQo+PiBpbnN0ZWFkLgo+Pgo+PiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBjYWxsZWQgc3RydWN0IGt2 bV9zMl9tbXUuCj4+Cj4+IFRoZXJlIGlzIG5vIGludGVuZGVkIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5 IHRoaXMgcGF0Y2ggYWxvbmUuCgo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+IGluZGV4 IDdkZDhmZWZhNmFlY2QuLjY2NGE1ZDkyYWU5YjggMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQv aW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmgKPj4gQEAgLTYzLDE5ICs2MywzMiBAQCBzdHJ1Y3Qga3ZtX3ZtaWQgewo+PiAgCXUz MiAgICB2bWlkOwo+PiAgfTsKPj4gIAo+PiAtc3RydWN0IGt2bV9hcmNoIHsKPj4gK3N0cnVjdCBr dm1fczJfbW11IHsKPj4gIAlzdHJ1Y3Qga3ZtX3ZtaWQgdm1pZDsKPj4gIAo+PiAtCS8qIHN0YWdl MiBlbnRyeSBsZXZlbCB0YWJsZSAqLwo+PiAtCXBnZF90ICpwZ2Q7Cj4+IC0JcGh5c19hZGRyX3Qg cGdkX3BoeXM7Cj4+IC0KPj4gLQkvKiBWVENSX0VMMiB2YWx1ZSBmb3IgdGhpcyBWTSAqLwo+PiAt CXU2NCAgICB2dGNyOwo+PiArCS8qCj4+ICsJICogc3RhZ2UyIGVudHJ5IGxldmVsIHRhYmxlCj4+ ICsJICoKPj4gKwkgKiBUd28ga3ZtX3MyX21tdSBzdHJ1Y3R1cmVzIGluIHRoZSBzYW1lIFZNIGNh biBwb2ludCB0byB0aGUgc2FtZSBwZ2QKPj4gKwkgKiBoZXJlLiAgVGhpcyBoYXBwZW5zIHdoZW4g cnVubmluZyBhIG5vbi1WSEUgZ3Vlc3QgaHlwZXJ2aXNvciB3aGljaAo+PiArCSAqIHVzZXMgdGhl IGNhbm9uaWNhbCBzdGFnZSAyIHBhZ2UgdGFibGUgZm9yIGJvdGggdkVMMiBhbmQgZm9yIHZFTDEv MAo+PiArCSAqIHdpdGggdkhDUl9FTDIuVk0gPT0gMC4KPiAKPiBJdCBtYWtlcyBtb3JlIHNlbnNl IHRvIG1lIHRvIHNheSB0aGF0IGEgbm9uLVZIRSBndWVzdCBoeXBlcnZpc29yIHdpbGwgdXNlIHRo ZQo+IGNhbm9uaWNhbCBzdGFnZSAqMSogcGFnZSB0YWJsZSB3aGVuIHJ1bm5pbmcgYXQgRUwyCgpD YW4gS1ZNIHNheSBhbnl0aGluZyBhYm91dCBzdGFnZTE/IEl0cyB0b3RhbGx5IHVuZGVyIHRoZSB0 aGUgZ3Vlc3RzIGNvbnRyb2wgZXZlbiBhdCB2RUwyLi4uCgoKPiAodGhlICJOb24tc2VjdXJlIEVM MiB0cmFuc2xhdGlvbiByZWdpbWUiIGFzIEFSTSBEREkgMDQ4N0YuYiBjYWxscyBpdCBvbiBwYWdl IEQ1LTI1NDMpLgoKPiBJIHRoaW5rIHRoYXQncwo+IHRoZSBvbmx5IHNpdHVhdGlvbiB3aGVyZSB2 RUwyIGFuZCB2RUwxJjAgd2lsbCB1c2UgdGhlIHNhbWUgTDAgc3RhZ2UgMiB0YWJsZXMuIEl0J3MK PiBiZWVuIHF1aXRlIHNvbWUgdGltZSBzaW5jZSBJIHJldmlld2VkIHRoZSBpbml0aWFsIHZlcnNp b24gb2YgdGhlIE5WIHBhdGNoZXMsIGRpZCBJCj4gZ2V0IHRoYXQgd3Jvbmc/CgoKPj4gKwkgKi8K Pj4gKwlwZ2RfdAkJKnBnZDsKPj4gKwlwaHlzX2FkZHJfdAlwZ2RfcGh5czsKPj4gIAo+PiAgCS8q IFRoZSBsYXN0IHZjcHUgaWQgdGhhdCByYW4gb24gZWFjaCBwaHlzaWNhbCBDUFUgKi8KPj4gIAlp bnQgX19wZXJjcHUgKmxhc3RfdmNwdV9yYW47Cj4gCj4gSXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBv dGhlciBmaWVsZHMgdG8gYmUgcGFydCBvZiBrdm1fczJfbW11LCBidXQgSSdtIHN0cnVnZ2xpbmcK PiB0byBmaWd1cmUgb3V0IHdoeSBsYXN0X3ZjcHVfcmFuIGlzIGhlcmUuIFdvdWxkIHlvdSBtaW5k IHNoYXJpbmcgdGhlIHJhdGlvbmFsZT8gSQo+IGRvbid0IHNlZSB0aGlzIGNoYW5nZSBpbiB2MSBv ciB2MiBvZiB0aGUgTlYgc2VyaWVzLgoKTWFyYyBtYXkgaGF2ZSBhIGJldHRlciByYXRpb25hbGUu IE15IHRoaW5raW5nIHdhcyBiZWNhdXNlIGt2bV92bWlkIGlzIGluIGhlcmUgdG9vLgoKbGFzdF92 Y3B1X3JhbiBleGlzdHMgdG8gcHJldmVudCBLVk0gYWNjaWRlbnRhbGx5IGVtdWxhdGluZyBDTlAg d2l0aG91dCB0aGUgb3B0LWluLiAod2UKY2FsbCBpdCBkZWZhY3RvIENOUCkuCgpUaGUgZ3Vlc3Qg bWF5IGV4cGVjdCB0byBiZSBhYmxlIHRvIHVzZSBhc2lkLTQgd2l0aCBkaWZmZXJlbnQgcGFnZSB0 YWJsZXMgb24gZGlmZmVyZW50CnZDUFVzLCBhc3N1bWluZyB0aGUgVExCIGlzbid0IHNoYXJlZC4g QnV0IGlmIEtWTSBpcyBzd2l0Y2hpbmcgYmV0d2VlbiB0aG9zZSB2Q1BVIG9uIG9uZQpwaHlzaWNh bCBDUFUsIHRoZSBUTEIgaXMgc2hhcmVkLCAuLi4gdGhlIFZNSUQgYW5kIEFTSUQgYXJlIHRoZSBz YW1lLCBidXQgdGhlIHBhZ2UgdGFibGVzCmFyZSBub3QuIE5vdCBmdW4gdG8gZGVidWchCgoKTlYg bWFrZXMgdGhpcyBwcm9ibGVtIHBlci1zdGFnZTIsIGJlY2F1c2UgZWFjaCBzdGFnZTIgaGFzIGl0 cyBvd24gVk1JRCwgd2UgbmVlZCB0byB0cmFjawp0aGUgdmNwdV9pZCB0aGF0IGxhc3QgcmFuIHRo aXMgc3RhZ2UyIG9uIHRoaXMgcGh5c2ljYWwgQ1BVLiBJZiBpdHMgbm90IHRoZSBzYW1lLCB3ZSBu ZWVkCnRvIGJsb3cgYXdheSB0aGlzIFZNSURzIFRMQiBlbnRyaWVzLgoKVGhlIHdvcmthcm91bmQg bGl2ZXMgaW4gdmlydC9rdm0vYXJtL2FybS5jOjprdm1fYXJjaF92Y3B1X2xvYWQoKQoKCj4gTW9y ZSBiZWxvdy4KCihsaWdodGx5IHRyaW1tZWQhKQoKVGhhbmtzLAoKSmFtZXMKCgo+PiAgCj4+ICsJ c3RydWN0IGt2bSAqa3ZtOwo+PiArfTsKClsuLi5dCgo+PiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0v YXJtL2FybS5jIGIvdmlydC9rdm0vYXJtL2FybS5jCj4+IGluZGV4IDUzYjNiYTkxNzNiYTcuLjAz ZjAxZmNmYTJiZDUgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2FybS9hcm0uYwo+PiArKysgYi92 aXJ0L2t2bS9hcm0vYXJtLmMKPiAKPiBUaGVyZSdzIGEgY29tbWVudCB0aGF0IHN0aWxsIG1lbnRp b25zIGFyY2gudm1pZCB0aGF0IHlvdSBtaXNzZWQgaW4gdGhpcyBmaWxlOgo+IAo+IHN0YXRpYyBi b29sIG5lZWRfbmV3X3ZtaWRfZ2VuKHN0cnVjdCBrdm1fdm1pZCAqdm1pZCkKPiB7Cj4gwqDCoMKg IHU2NCBjdXJyZW50X3ZtaWRfZ2VuID0gYXRvbWljNjRfcmVhZCgma3ZtX3ZtaWRfZ2VuKTsKPiDC oMKgwqAgc21wX3JtYigpOyAvKiBPcmRlcnMgcmVhZCBvZiBrdm1fdm1pZF9nZW4gYW5kIGt2bS0+ YXJjaC52bWlkICovCj4gCgpbLi5dCgo+PiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXJtL21tdS5j IGIvdmlydC9rdm0vYXJtL21tdS5jCj4+IGluZGV4IGUzYjllZTI2ODgyM2IuLjJmOTk3NDkwNDgy ODUgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2FybS9tbXUuYwo+PiArKysgYi92aXJ0L2t2bS9h cm0vbW11LmMKCj4+IEBAIC04ODYsMjEgKzg5OCwyMyBAQCBpbnQgY3JlYXRlX2h5cF9leGVjX21h cHBpbmdzKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgc2l6ZV90IHNpemUsCj4+ICB9Cj4+ICAKPj4g IC8qKgo+PiAtICoga3ZtX2FsbG9jX3N0YWdlMl9wZ2QgLSBhbGxvY2F0ZSBsZXZlbC0xIHRhYmxl IGZvciBzdGFnZS0yIHRyYW5zbGF0aW9uLgo+PiAtICogQGt2bToJVGhlIEtWTSBzdHJ1Y3QgcG9p bnRlciBmb3IgdGhlIFZNLgo+PiArICoga3ZtX2luaXRfc3RhZ2UyX21tdSAtIEluaXRpYWxpc2Ug YSBTMiBNTVUgc3RydWNydXJlCj4+ICsgKiBAa3ZtOglUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0 cnVjdHVyZQo+PiArICogQG1tdToJVGhlIHBvaW50ZXIgdG8gdGhlIHMyIE1NVSBzdHJ1Y3R1cmUK Pj4gICAqCj4+ICAgKiBBbGxvY2F0ZXMgb25seSB0aGUgc3RhZ2UtMiBIVyBQR0QgbGV2ZWwgdGFi bGUocykgb2Ygc2l6ZSBkZWZpbmVkIGJ5Cj4+IC0gKiBzdGFnZTJfcGdkX3NpemUoa3ZtKS4KPj4g KyAqIHN0YWdlMl9wZ2Rfc2l6ZShtbXUtPmt2bSkuCj4+ICAgKgo+PiAgICogTm90ZSB3ZSBkb24n dCBuZWVkIGxvY2tpbmcgaGVyZSBhcyB0aGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIFZNIGlz Cj4+ICAgKiBjcmVhdGVkLCB3aGljaCBjYW4gb25seSBiZSBkb25lIG9uY2UuCj4+ICAgKi8KPj4g LWludCBrdm1fYWxsb2Nfc3RhZ2UyX3BnZChzdHJ1Y3Qga3ZtICprdm0pCj4+ICtpbnQga3ZtX2lu aXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpCj4+ ICB7Cj4+ICAJcGh5c19hZGRyX3QgcGdkX3BoeXM7Cj4+ICAJcGdkX3QgKnBnZDsKPj4gKwlpbnQg Y3B1Owo+PiAgCj4+IC0JaWYgKGt2bS0+YXJjaC5wZ2QgIT0gTlVMTCkgewo+PiArCWlmIChtbXUt PnBnZCAhPSBOVUxMKSB7Cj4+ICAJCWt2bV9lcnIoImt2bV9hcmNoIGFscmVhZHkgaW5pdGlhbGl6 ZWQ/XG4iKTsKPj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAJfQo+PiBAQCAtOTE0LDggKzkyOCwy MCBAQCBpbnQga3ZtX2FsbG9jX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bSAqa3ZtKQo+PiAgCWlmIChX QVJOX09OKHBnZF9waHlzICYgfmt2bV92dHRicl9iYWRkcl9tYXNrKGt2bSkpKQoKPiBXZSBkb24n dCBmcmVlIHRoZSBwZ2QgaGVyZSwgYnV0IHdlIGRvIGZyZWUgaXQgaWYgYWxsb2NfcGVyY3B1IGZh aWxzLiBJcyB0aGF0Cj4gaW50ZW50aW9uYWw/CgoKPj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAK Pj4gLQlrdm0tPmFyY2gucGdkID0gcGdkOwo+PiAtCWt2bS0+YXJjaC5wZ2RfcGh5cyA9IHBnZF9w aHlzOwo+PiArCW1tdS0+bGFzdF92Y3B1X3JhbiA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKm1tdS0+ bGFzdF92Y3B1X3JhbikpOwo+PiArCWlmICghbW11LT5sYXN0X3ZjcHVfcmFuKSB7Cj4+ICsJCWZy ZWVfcGFnZXNfZXhhY3QocGdkLCBzdGFnZTJfcGdkX3NpemUoa3ZtKSk7Cj4+ICsJCXJldHVybiAt RU5PTUVNOwo+PiArCX0KPj4gKwo+PiArCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCj4+ICsJ CSpwZXJfY3B1X3B0cihtbXUtPmxhc3RfdmNwdV9yYW4sIGNwdSkgPSAtMTsKPj4gKwo+PiArCW1t dS0+a3ZtID0ga3ZtOwo+PiArCW1tdS0+cGdkID0gcGdkOwo+PiArCW1tdS0+cGdkX3BoeXMgPSBw Z2RfcGh5czsKPj4gKwltbXUtPnZtaWQudm1pZF9nZW4gPSAwOwo+PiArCj4+ICAJcmV0dXJuIDA7 Cj4+ICB9Cj4+ICAKCj4+IEBAIC05ODYsMzkgKzEwMTIsMzQgQEAgdm9pZCBzdGFnZTJfdW5tYXBf dm0oc3RydWN0IGt2bSAqa3ZtKQo+PiAgCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgaWR4 KTsKPj4gIH0KPj4gIAo+PiAtLyoqCj4+IC0gKiBrdm1fZnJlZV9zdGFnZTJfcGdkIC0gZnJlZSBh bGwgc3RhZ2UtMiB0YWJsZXMKPj4gLSAqIEBrdm06CVRoZSBLVk0gc3RydWN0IHBvaW50ZXIgZm9y IHRoZSBWTS4KPj4gLSAqCj4+IC0gKiBXYWxrcyB0aGUgbGV2ZWwtMSBwYWdlIHRhYmxlIHBvaW50 ZWQgdG8gYnkga3ZtLT5hcmNoLnBnZCBhbmQgZnJlZXMgYWxsCj4+IC0gKiB1bmRlcmx5aW5nIGxl dmVsLTIgYW5kIGxldmVsLTMgdGFibGVzIGJlZm9yZSBmcmVlaW5nIHRoZSBhY3R1YWwgbGV2ZWwt MSB0YWJsZQo+PiAtICogYW5kIHNldHRpbmcgdGhlIHN0cnVjdCBwb2ludGVyIHRvIE5VTEwuCj4+ IC0gKi8KPj4gLXZvaWQga3ZtX2ZyZWVfc3RhZ2UyX3BnZChzdHJ1Y3Qga3ZtICprdm0pCj4+ICt2 b2lkIGt2bV9mcmVlX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSkKPj4gIHsKPj4g KwlzdHJ1Y3Qga3ZtICprdm0gPSBtbXUtPmt2bTsKPj4gIAl2b2lkICpwZ2QgPSBOVUxMOwo+PiAg Cj4+ICAJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKPj4gLQlpZiAoa3ZtLT5hcmNoLnBnZCkg ewo+PiAtCQl1bm1hcF9zdGFnZTJfcmFuZ2Uoa3ZtLCAwLCBrdm1fcGh5c19zaXplKGt2bSkpOwo+ PiAtCQlwZ2QgPSBSRUFEX09OQ0Uoa3ZtLT5hcmNoLnBnZCk7Cj4+IC0JCWt2bS0+YXJjaC5wZ2Qg PSBOVUxMOwo+PiAtCQlrdm0tPmFyY2gucGdkX3BoeXMgPSAwOwo+PiArCWlmIChtbXUtPnBnZCkg ewo+PiArCQl1bm1hcF9zdGFnZTJfcmFuZ2UobW11LCAwLCBrdm1fcGh5c19zaXplKGt2bSkpOwo+ PiArCQlwZ2QgPSBSRUFEX09OQ0UobW11LT5wZ2QpOwo+PiArCQltbXUtPnBnZCA9IE5VTEw7Cj4g Cj4gVGhlIGt2bS0+YXJjaC5wZ2RfcGh5cyA9IDAgaW5zdHJ1Y3Rpb24gc2VlbXMgdG8gaGF2ZSBi ZWVuIGRyb3BwZWQgaGVyZS4gSXMgdGhhdAo+IGludGVudGlvbmFsPwpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFy bUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFp bG1hbi9saXN0aW5mby9rdm1hcm0K 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 X-Spam-Level: X-Spam-Status: No, score=-5.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 66F18C54E4A for ; Tue, 12 May 2020 11:17:50 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 363D9206D6 for ; Tue, 12 May 2020 11:17:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="eKQhPGOJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 363D9206D6 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nAa3cuuD+XG0G2+EV4HbFD54tWyWhn0dzPo/VDm+OM8=; b=eKQhPGOJu0cyLl /LxnuJNX978F1X8hGE3SIHTzxG8H4U2JO6qQbu+DScKsfECozaBRLE8ld209iPSZZeAFZ8YBypfRl 7C/A22KhMclW2wpQDgZHv2ZvKRPstBHwXj/MkItZnMi4YS8798+auenRo9pktp8ZqHmWwBb/2sNBw tGBQv1MsJwt6Xby8z3yWklM2arm9Jttv1TXPGWIgCXEmqmmR87HjnnjiFGiGYANMoJ+Df79Q50vSB FXz7Mvo6Dxr64vUGyoUh22WCw66BNQW6SqcPnDu5sBlksn6DXXs3vizzIxBuwhLwy9blCaxrx6VOE 4bEO6kddFUQUc27MMU1g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jYSuq-00025K-8O; Tue, 12 May 2020 11:17:40 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jYSum-00024a-Cm for linux-arm-kernel@lists.infradead.org; Tue, 12 May 2020 11:17:38 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1524630E; Tue, 12 May 2020 04:17:34 -0700 (PDT) Received: from [192.168.0.14] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1108F3F71E; Tue, 12 May 2020 04:17:31 -0700 (PDT) Subject: Re: [PATCH 03/26] KVM: arm64: Factor out stage 2 page table data from struct kvm To: Alexandru Elisei , Marc Zyngier References: <20200422120050.3693593-1-maz@kernel.org> <20200422120050.3693593-4-maz@kernel.org> From: James Morse Message-ID: <76d811eb-b304-c49f-1f21-fe9d95112a28@arm.com> Date: Tue, 12 May 2020 12:17:26 +0100 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200512_041736_520442_5095CD2D X-CRM114-Status: GOOD ( 27.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , kvm@vger.kernel.org, Suzuki K Poulose , Jintack Lim , Andre Przywara , Christoffer Dall , kvmarm@lists.cs.columbia.edu, George Cherian , Julien Thierry , "Zengtao \(B\)" , Catalin Marinas , Will Deacon , Dave Martin , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQWxleCwgTWFyYywKCihqdXN0IG9uIHRoaXMgbGFzdF92Y3B1X3JhbiB0aGluZy4uLikKCk9u IDExLzA1LzIwMjAgMTc6MzgsIEFsZXhhbmRydSBFbGlzZWkgd3JvdGU6Cj4gT24gNC8yMi8yMCAx OjAwIFBNLCBNYXJjIFp5bmdpZXIgd3JvdGU6Cj4+IEZyb206IENocmlzdG9mZmVyIERhbGwgPGNo cmlzdG9mZmVyLmRhbGxAYXJtLmNvbT4KPj4KPj4gQXMgd2UgYXJlIGFib3V0IHRvIHJldXNlIG91 ciBzdGFnZSAyIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGNvZGUgZm9yCj4+IHNoYWRvdyBzdGFn ZSAyIHBhZ2UgdGFibGVzIGluIHRoZSBjb250ZXh0IG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwg d2UKPj4gYXJlIGdvaW5nIHRvIG1hbmFnZSBtdWx0aXBsZSBzdGFnZSAyIHBhZ2UgdGFibGVzIGZv ciBhIHNpbmdsZSBWTS4KPj4KPj4gVGhpcyByZXF1aXJlcyBzb21lIHByZXR0eSBpbnZhc2l2ZSBj aGFuZ2VzIHRvIG91ciBkYXRhIHN0cnVjdHVyZXMsCj4+IHdoaWNoIG1vdmVzIHRoZSB2bWlkIGFu ZCBwZ2QgcG9pbnRlcnMgaW50byBhIHNlcGFyYXRlIHN0cnVjdHVyZSBhbmQKPj4gY2hhbmdlIHBy ZXR0eSBtdWNoIGFsbCBvZiBvdXIgbW11IGNvZGUgdG8gb3BlcmF0ZSBvbiB0aGlzIHN0cnVjdHVy ZQo+PiBpbnN0ZWFkLgo+Pgo+PiBUaGUgbmV3IHN0cnVjdHVyZSBpcyBjYWxsZWQgc3RydWN0IGt2 bV9zMl9tbXUuCj4+Cj4+IFRoZXJlIGlzIG5vIGludGVuZGVkIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5 IHRoaXMgcGF0Y2ggYWxvbmUuCgo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+IGluZGV4 IDdkZDhmZWZhNmFlY2QuLjY2NGE1ZDkyYWU5YjggMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQv aW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmgKPj4gQEAgLTYzLDE5ICs2MywzMiBAQCBzdHJ1Y3Qga3ZtX3ZtaWQgewo+PiAgCXUz MiAgICB2bWlkOwo+PiAgfTsKPj4gIAo+PiAtc3RydWN0IGt2bV9hcmNoIHsKPj4gK3N0cnVjdCBr dm1fczJfbW11IHsKPj4gIAlzdHJ1Y3Qga3ZtX3ZtaWQgdm1pZDsKPj4gIAo+PiAtCS8qIHN0YWdl MiBlbnRyeSBsZXZlbCB0YWJsZSAqLwo+PiAtCXBnZF90ICpwZ2Q7Cj4+IC0JcGh5c19hZGRyX3Qg cGdkX3BoeXM7Cj4+IC0KPj4gLQkvKiBWVENSX0VMMiB2YWx1ZSBmb3IgdGhpcyBWTSAqLwo+PiAt CXU2NCAgICB2dGNyOwo+PiArCS8qCj4+ICsJICogc3RhZ2UyIGVudHJ5IGxldmVsIHRhYmxlCj4+ ICsJICoKPj4gKwkgKiBUd28ga3ZtX3MyX21tdSBzdHJ1Y3R1cmVzIGluIHRoZSBzYW1lIFZNIGNh biBwb2ludCB0byB0aGUgc2FtZSBwZ2QKPj4gKwkgKiBoZXJlLiAgVGhpcyBoYXBwZW5zIHdoZW4g cnVubmluZyBhIG5vbi1WSEUgZ3Vlc3QgaHlwZXJ2aXNvciB3aGljaAo+PiArCSAqIHVzZXMgdGhl IGNhbm9uaWNhbCBzdGFnZSAyIHBhZ2UgdGFibGUgZm9yIGJvdGggdkVMMiBhbmQgZm9yIHZFTDEv MAo+PiArCSAqIHdpdGggdkhDUl9FTDIuVk0gPT0gMC4KPiAKPiBJdCBtYWtlcyBtb3JlIHNlbnNl IHRvIG1lIHRvIHNheSB0aGF0IGEgbm9uLVZIRSBndWVzdCBoeXBlcnZpc29yIHdpbGwgdXNlIHRo ZQo+IGNhbm9uaWNhbCBzdGFnZSAqMSogcGFnZSB0YWJsZSB3aGVuIHJ1bm5pbmcgYXQgRUwyCgpD YW4gS1ZNIHNheSBhbnl0aGluZyBhYm91dCBzdGFnZTE/IEl0cyB0b3RhbGx5IHVuZGVyIHRoZSB0 aGUgZ3Vlc3RzIGNvbnRyb2wgZXZlbiBhdCB2RUwyLi4uCgoKPiAodGhlICJOb24tc2VjdXJlIEVM MiB0cmFuc2xhdGlvbiByZWdpbWUiIGFzIEFSTSBEREkgMDQ4N0YuYiBjYWxscyBpdCBvbiBwYWdl IEQ1LTI1NDMpLgoKPiBJIHRoaW5rIHRoYXQncwo+IHRoZSBvbmx5IHNpdHVhdGlvbiB3aGVyZSB2 RUwyIGFuZCB2RUwxJjAgd2lsbCB1c2UgdGhlIHNhbWUgTDAgc3RhZ2UgMiB0YWJsZXMuIEl0J3MK PiBiZWVuIHF1aXRlIHNvbWUgdGltZSBzaW5jZSBJIHJldmlld2VkIHRoZSBpbml0aWFsIHZlcnNp b24gb2YgdGhlIE5WIHBhdGNoZXMsIGRpZCBJCj4gZ2V0IHRoYXQgd3Jvbmc/CgoKPj4gKwkgKi8K Pj4gKwlwZ2RfdAkJKnBnZDsKPj4gKwlwaHlzX2FkZHJfdAlwZ2RfcGh5czsKPj4gIAo+PiAgCS8q IFRoZSBsYXN0IHZjcHUgaWQgdGhhdCByYW4gb24gZWFjaCBwaHlzaWNhbCBDUFUgKi8KPj4gIAlp bnQgX19wZXJjcHUgKmxhc3RfdmNwdV9yYW47Cj4gCj4gSXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBv dGhlciBmaWVsZHMgdG8gYmUgcGFydCBvZiBrdm1fczJfbW11LCBidXQgSSdtIHN0cnVnZ2xpbmcK PiB0byBmaWd1cmUgb3V0IHdoeSBsYXN0X3ZjcHVfcmFuIGlzIGhlcmUuIFdvdWxkIHlvdSBtaW5k IHNoYXJpbmcgdGhlIHJhdGlvbmFsZT8gSQo+IGRvbid0IHNlZSB0aGlzIGNoYW5nZSBpbiB2MSBv ciB2MiBvZiB0aGUgTlYgc2VyaWVzLgoKTWFyYyBtYXkgaGF2ZSBhIGJldHRlciByYXRpb25hbGUu IE15IHRoaW5raW5nIHdhcyBiZWNhdXNlIGt2bV92bWlkIGlzIGluIGhlcmUgdG9vLgoKbGFzdF92 Y3B1X3JhbiBleGlzdHMgdG8gcHJldmVudCBLVk0gYWNjaWRlbnRhbGx5IGVtdWxhdGluZyBDTlAg d2l0aG91dCB0aGUgb3B0LWluLiAod2UKY2FsbCBpdCBkZWZhY3RvIENOUCkuCgpUaGUgZ3Vlc3Qg bWF5IGV4cGVjdCB0byBiZSBhYmxlIHRvIHVzZSBhc2lkLTQgd2l0aCBkaWZmZXJlbnQgcGFnZSB0 YWJsZXMgb24gZGlmZmVyZW50CnZDUFVzLCBhc3N1bWluZyB0aGUgVExCIGlzbid0IHNoYXJlZC4g QnV0IGlmIEtWTSBpcyBzd2l0Y2hpbmcgYmV0d2VlbiB0aG9zZSB2Q1BVIG9uIG9uZQpwaHlzaWNh bCBDUFUsIHRoZSBUTEIgaXMgc2hhcmVkLCAuLi4gdGhlIFZNSUQgYW5kIEFTSUQgYXJlIHRoZSBz YW1lLCBidXQgdGhlIHBhZ2UgdGFibGVzCmFyZSBub3QuIE5vdCBmdW4gdG8gZGVidWchCgoKTlYg bWFrZXMgdGhpcyBwcm9ibGVtIHBlci1zdGFnZTIsIGJlY2F1c2UgZWFjaCBzdGFnZTIgaGFzIGl0 cyBvd24gVk1JRCwgd2UgbmVlZCB0byB0cmFjawp0aGUgdmNwdV9pZCB0aGF0IGxhc3QgcmFuIHRo aXMgc3RhZ2UyIG9uIHRoaXMgcGh5c2ljYWwgQ1BVLiBJZiBpdHMgbm90IHRoZSBzYW1lLCB3ZSBu ZWVkCnRvIGJsb3cgYXdheSB0aGlzIFZNSURzIFRMQiBlbnRyaWVzLgoKVGhlIHdvcmthcm91bmQg bGl2ZXMgaW4gdmlydC9rdm0vYXJtL2FybS5jOjprdm1fYXJjaF92Y3B1X2xvYWQoKQoKCj4gTW9y ZSBiZWxvdy4KCihsaWdodGx5IHRyaW1tZWQhKQoKVGhhbmtzLAoKSmFtZXMKCgo+PiAgCj4+ICsJ c3RydWN0IGt2bSAqa3ZtOwo+PiArfTsKClsuLi5dCgo+PiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0v YXJtL2FybS5jIGIvdmlydC9rdm0vYXJtL2FybS5jCj4+IGluZGV4IDUzYjNiYTkxNzNiYTcuLjAz ZjAxZmNmYTJiZDUgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2FybS9hcm0uYwo+PiArKysgYi92 aXJ0L2t2bS9hcm0vYXJtLmMKPiAKPiBUaGVyZSdzIGEgY29tbWVudCB0aGF0IHN0aWxsIG1lbnRp b25zIGFyY2gudm1pZCB0aGF0IHlvdSBtaXNzZWQgaW4gdGhpcyBmaWxlOgo+IAo+IHN0YXRpYyBi b29sIG5lZWRfbmV3X3ZtaWRfZ2VuKHN0cnVjdCBrdm1fdm1pZCAqdm1pZCkKPiB7Cj4gwqDCoMKg IHU2NCBjdXJyZW50X3ZtaWRfZ2VuID0gYXRvbWljNjRfcmVhZCgma3ZtX3ZtaWRfZ2VuKTsKPiDC oMKgwqAgc21wX3JtYigpOyAvKiBPcmRlcnMgcmVhZCBvZiBrdm1fdm1pZF9nZW4gYW5kIGt2bS0+ YXJjaC52bWlkICovCj4gCgpbLi5dCgo+PiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXJtL21tdS5j IGIvdmlydC9rdm0vYXJtL21tdS5jCj4+IGluZGV4IGUzYjllZTI2ODgyM2IuLjJmOTk3NDkwNDgy ODUgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2FybS9tbXUuYwo+PiArKysgYi92aXJ0L2t2bS9h cm0vbW11LmMKCj4+IEBAIC04ODYsMjEgKzg5OCwyMyBAQCBpbnQgY3JlYXRlX2h5cF9leGVjX21h cHBpbmdzKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgc2l6ZV90IHNpemUsCj4+ICB9Cj4+ICAKPj4g IC8qKgo+PiAtICoga3ZtX2FsbG9jX3N0YWdlMl9wZ2QgLSBhbGxvY2F0ZSBsZXZlbC0xIHRhYmxl IGZvciBzdGFnZS0yIHRyYW5zbGF0aW9uLgo+PiAtICogQGt2bToJVGhlIEtWTSBzdHJ1Y3QgcG9p bnRlciBmb3IgdGhlIFZNLgo+PiArICoga3ZtX2luaXRfc3RhZ2UyX21tdSAtIEluaXRpYWxpc2Ug YSBTMiBNTVUgc3RydWNydXJlCj4+ICsgKiBAa3ZtOglUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0 cnVjdHVyZQo+PiArICogQG1tdToJVGhlIHBvaW50ZXIgdG8gdGhlIHMyIE1NVSBzdHJ1Y3R1cmUK Pj4gICAqCj4+ICAgKiBBbGxvY2F0ZXMgb25seSB0aGUgc3RhZ2UtMiBIVyBQR0QgbGV2ZWwgdGFi bGUocykgb2Ygc2l6ZSBkZWZpbmVkIGJ5Cj4+IC0gKiBzdGFnZTJfcGdkX3NpemUoa3ZtKS4KPj4g KyAqIHN0YWdlMl9wZ2Rfc2l6ZShtbXUtPmt2bSkuCj4+ICAgKgo+PiAgICogTm90ZSB3ZSBkb24n dCBuZWVkIGxvY2tpbmcgaGVyZSBhcyB0aGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIFZNIGlz Cj4+ICAgKiBjcmVhdGVkLCB3aGljaCBjYW4gb25seSBiZSBkb25lIG9uY2UuCj4+ICAgKi8KPj4g LWludCBrdm1fYWxsb2Nfc3RhZ2UyX3BnZChzdHJ1Y3Qga3ZtICprdm0pCj4+ICtpbnQga3ZtX2lu aXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpCj4+ ICB7Cj4+ICAJcGh5c19hZGRyX3QgcGdkX3BoeXM7Cj4+ICAJcGdkX3QgKnBnZDsKPj4gKwlpbnQg Y3B1Owo+PiAgCj4+IC0JaWYgKGt2bS0+YXJjaC5wZ2QgIT0gTlVMTCkgewo+PiArCWlmIChtbXUt PnBnZCAhPSBOVUxMKSB7Cj4+ICAJCWt2bV9lcnIoImt2bV9hcmNoIGFscmVhZHkgaW5pdGlhbGl6 ZWQ/XG4iKTsKPj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAJfQo+PiBAQCAtOTE0LDggKzkyOCwy MCBAQCBpbnQga3ZtX2FsbG9jX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bSAqa3ZtKQo+PiAgCWlmIChX QVJOX09OKHBnZF9waHlzICYgfmt2bV92dHRicl9iYWRkcl9tYXNrKGt2bSkpKQoKPiBXZSBkb24n dCBmcmVlIHRoZSBwZ2QgaGVyZSwgYnV0IHdlIGRvIGZyZWUgaXQgaWYgYWxsb2NfcGVyY3B1IGZh aWxzLiBJcyB0aGF0Cj4gaW50ZW50aW9uYWw/CgoKPj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAK Pj4gLQlrdm0tPmFyY2gucGdkID0gcGdkOwo+PiAtCWt2bS0+YXJjaC5wZ2RfcGh5cyA9IHBnZF9w aHlzOwo+PiArCW1tdS0+bGFzdF92Y3B1X3JhbiA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKm1tdS0+ bGFzdF92Y3B1X3JhbikpOwo+PiArCWlmICghbW11LT5sYXN0X3ZjcHVfcmFuKSB7Cj4+ICsJCWZy ZWVfcGFnZXNfZXhhY3QocGdkLCBzdGFnZTJfcGdkX3NpemUoa3ZtKSk7Cj4+ICsJCXJldHVybiAt RU5PTUVNOwo+PiArCX0KPj4gKwo+PiArCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCj4+ICsJ CSpwZXJfY3B1X3B0cihtbXUtPmxhc3RfdmNwdV9yYW4sIGNwdSkgPSAtMTsKPj4gKwo+PiArCW1t dS0+a3ZtID0ga3ZtOwo+PiArCW1tdS0+cGdkID0gcGdkOwo+PiArCW1tdS0+cGdkX3BoeXMgPSBw Z2RfcGh5czsKPj4gKwltbXUtPnZtaWQudm1pZF9nZW4gPSAwOwo+PiArCj4+ICAJcmV0dXJuIDA7 Cj4+ICB9Cj4+ICAKCj4+IEBAIC05ODYsMzkgKzEwMTIsMzQgQEAgdm9pZCBzdGFnZTJfdW5tYXBf dm0oc3RydWN0IGt2bSAqa3ZtKQo+PiAgCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgaWR4 KTsKPj4gIH0KPj4gIAo+PiAtLyoqCj4+IC0gKiBrdm1fZnJlZV9zdGFnZTJfcGdkIC0gZnJlZSBh bGwgc3RhZ2UtMiB0YWJsZXMKPj4gLSAqIEBrdm06CVRoZSBLVk0gc3RydWN0IHBvaW50ZXIgZm9y IHRoZSBWTS4KPj4gLSAqCj4+IC0gKiBXYWxrcyB0aGUgbGV2ZWwtMSBwYWdlIHRhYmxlIHBvaW50 ZWQgdG8gYnkga3ZtLT5hcmNoLnBnZCBhbmQgZnJlZXMgYWxsCj4+IC0gKiB1bmRlcmx5aW5nIGxl dmVsLTIgYW5kIGxldmVsLTMgdGFibGVzIGJlZm9yZSBmcmVlaW5nIHRoZSBhY3R1YWwgbGV2ZWwt MSB0YWJsZQo+PiAtICogYW5kIHNldHRpbmcgdGhlIHN0cnVjdCBwb2ludGVyIHRvIE5VTEwuCj4+ IC0gKi8KPj4gLXZvaWQga3ZtX2ZyZWVfc3RhZ2UyX3BnZChzdHJ1Y3Qga3ZtICprdm0pCj4+ICt2 b2lkIGt2bV9mcmVlX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSkKPj4gIHsKPj4g KwlzdHJ1Y3Qga3ZtICprdm0gPSBtbXUtPmt2bTsKPj4gIAl2b2lkICpwZ2QgPSBOVUxMOwo+PiAg Cj4+ICAJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKPj4gLQlpZiAoa3ZtLT5hcmNoLnBnZCkg ewo+PiAtCQl1bm1hcF9zdGFnZTJfcmFuZ2Uoa3ZtLCAwLCBrdm1fcGh5c19zaXplKGt2bSkpOwo+ PiAtCQlwZ2QgPSBSRUFEX09OQ0Uoa3ZtLT5hcmNoLnBnZCk7Cj4+IC0JCWt2bS0+YXJjaC5wZ2Qg PSBOVUxMOwo+PiAtCQlrdm0tPmFyY2gucGdkX3BoeXMgPSAwOwo+PiArCWlmIChtbXUtPnBnZCkg ewo+PiArCQl1bm1hcF9zdGFnZTJfcmFuZ2UobW11LCAwLCBrdm1fcGh5c19zaXplKGt2bSkpOwo+ PiArCQlwZ2QgPSBSRUFEX09OQ0UobW11LT5wZ2QpOwo+PiArCQltbXUtPnBnZCA9IE5VTEw7Cj4g Cj4gVGhlIGt2bS0+YXJjaC5wZ2RfcGh5cyA9IDAgaW5zdHJ1Y3Rpb24gc2VlbXMgdG8gaGF2ZSBi ZWVuIGRyb3BwZWQgaGVyZS4gSXMgdGhhdAo+IGludGVudGlvbmFsPwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=