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=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 0A188C0650E for ; Mon, 1 Jul 2019 12:10:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CEFF020B7C for ; Mon, 1 Jul 2019 12:10:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727654AbfGAMKY (ORCPT ); Mon, 1 Jul 2019 08:10:24 -0400 Received: from foss.arm.com ([217.140.110.172]:33482 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727526AbfGAMKY (ORCPT ); Mon, 1 Jul 2019 08:10:24 -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 B23BE344; Mon, 1 Jul 2019 05:10:22 -0700 (PDT) Received: from [10.1.31.185] (unknown [10.1.31.185]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C07563F246; Mon, 1 Jul 2019 05:10:21 -0700 (PDT) Subject: Re: [PATCH 13/59] KVM: arm64: nv: Handle virtual EL2 registers in vcpu_read/write_sys_reg() To: Marc Zyngier , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org Cc: Andre Przywara , Dave Martin References: <20190621093843.220980-1-marc.zyngier@arm.com> <20190621093843.220980-14-marc.zyngier@arm.com> From: Alexandru Elisei Message-ID: Date: Mon, 1 Jul 2019 13:10:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <20190621093843.220980-14-marc.zyngier@arm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org On 6/21/19 10:37 AM, Marc Zyngier wrote: > From: Andre Przywara > > KVM internally uses accessor functions when reading or writing the > guest's system registers. This takes care of accessing either the stored > copy or using the "live" EL1 system registers when the host uses VHE. > > With the introduction of virtual EL2 we add a bunch of EL2 system > registers, which now must also be taken care of: > - If the guest is running in vEL2, and we access an EL1 sysreg, we must > revert to the stored version of that, and not use the CPU's copy. > - If the guest is running in vEL1, and we access an EL2 sysreg, we must > also use the stored version, since the CPU carries the EL1 copy. > - Some EL2 system registers are supposed to affect the current execution > of the system, so we need to put them into their respective EL1 > counterparts. For this we need to define a mapping between the two. > This is done using the newly introduced struct el2_sysreg_map. > - Some EL2 system registers have a different format than their EL1 > counterpart, so we need to translate them before writing them to the > CPU. This is done using an (optional) translate function in the map. > - There are the three special registers SP_EL2, SPSR_EL2 and ELR_EL2, > which need some separate handling. > > All of these cases are now wrapped into the existing accessor functions, > so KVM users wouldn't need to care whether they access EL2 or EL1 > registers and also which state the guest is in. > > This handles what was formerly known as the "shadow state" dynamically, > without requiring a separate copy for each vCPU EL. > > Signed-off-by: Andre Przywara > Signed-off-by: Marc Zyngier > --- > arch/arm64/include/asm/kvm_emulate.h | 6 + > arch/arm64/include/asm/kvm_host.h | 5 + > arch/arm64/kvm/sys_regs.c | 163 +++++++++++++++++++++++++++ > 3 files changed, 174 insertions(+) > > diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h > index c43aac5fed69..f37006b6eec4 100644 > --- a/arch/arm64/include/asm/kvm_emulate.h > +++ b/arch/arm64/include/asm/kvm_emulate.h > @@ -70,6 +70,12 @@ void kvm_emulate_nested_eret(struct kvm_vcpu *vcpu); > int kvm_inject_nested_sync(struct kvm_vcpu *vcpu, u64 esr_el2); > int kvm_inject_nested_irq(struct kvm_vcpu *vcpu); > > +u64 translate_tcr(u64 tcr); > +u64 translate_cptr(u64 tcr); > +u64 translate_sctlr(u64 tcr); > +u64 translate_ttbr0(u64 tcr); > +u64 translate_cnthctl(u64 tcr); > + > static inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu) > { > return !(vcpu->arch.hcr_el2 & HCR_RW); > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h > index 2d4290d2513a..dae9c42a7219 100644 > --- a/arch/arm64/include/asm/kvm_host.h > +++ b/arch/arm64/include/asm/kvm_host.h > @@ -217,6 +217,11 @@ enum vcpu_sysreg { > NR_SYS_REGS /* Nothing after this line! */ > }; > > +static inline bool sysreg_is_el2(int reg) > +{ > + return reg >= FIRST_EL2_SYSREG && reg < NR_SYS_REGS; > +} > + > /* 32bit mapping */ > #define c0_MPIDR (MPIDR_EL1 * 2) /* MultiProcessor ID Register */ > #define c0_CSSELR (CSSELR_EL1 * 2)/* Cache Size Selection Register */ > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 693dd063c9c2..d024114da162 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -76,11 +76,142 @@ static bool write_to_read_only(struct kvm_vcpu *vcpu, > return false; > } > > +static u64 tcr_el2_ips_to_tcr_el1_ps(u64 tcr_el2) > +{ > + return ((tcr_el2 & TCR_EL2_PS_MASK) >> TCR_EL2_PS_SHIFT) > + << TCR_IPS_SHIFT; > +} > + > +u64 translate_tcr(u64 tcr) > +{ > + return TCR_EPD1_MASK | /* disable TTBR1_EL1 */ > + ((tcr & TCR_EL2_TBI) ? TCR_TBI0 : 0) | > + tcr_el2_ips_to_tcr_el1_ps(tcr) | > + (tcr & TCR_EL2_TG0_MASK) | > + (tcr & TCR_EL2_ORGN0_MASK) | > + (tcr & TCR_EL2_IRGN0_MASK) | > + (tcr & TCR_EL2_T0SZ_MASK); > +} > + > +u64 translate_cptr(u64 cptr_el2) > +{ > + u64 cpacr_el1 = 0; > + > + if (!(cptr_el2 & CPTR_EL2_TFP)) > + cpacr_el1 |= CPACR_EL1_FPEN; > + if (cptr_el2 & CPTR_EL2_TTA) > + cpacr_el1 |= CPACR_EL1_TTA; > + if (!(cptr_el2 & CPTR_EL2_TZ)) > + cpacr_el1 |= CPACR_EL1_ZEN; > + > + return cpacr_el1; > +} > + > +u64 translate_sctlr(u64 sctlr) > +{ > + /* Bit 20 is RES1 in SCTLR_EL1, but RES0 in SCTLR_EL2 */ > + return sctlr | BIT(20); > +} > + > +u64 translate_ttbr0(u64 ttbr0) > +{ > + /* Force ASID to 0 (ASID 0 or RES0) */ > + return ttbr0 & ~GENMASK_ULL(63, 48); > +} > + > +u64 translate_cnthctl(u64 cnthctl) > +{ > + return ((cnthctl & 0x3) << 10) | (cnthctl & 0xfc); > +} > + > +#define EL2_SYSREG(el2, el1, translate) \ > + [el2 - FIRST_EL2_SYSREG] = { el2, el1, translate } > +#define PURE_EL2_SYSREG(el2) \ > + [el2 - FIRST_EL2_SYSREG] = { el2,__INVALID_SYSREG__, NULL } > +/* > + * Associate vEL2 registers to their EL1 counterparts on the CPU. > + * The translate function can be NULL, when the register layout is identical. > + */ > +struct el2_sysreg_map { > + int sysreg; /* EL2 register index into the array above */ > + int mapping; /* associated EL1 register */ > + u64 (*translate)(u64 value); > +} nested_sysreg_map[NR_SYS_REGS - FIRST_EL2_SYSREG] = { > + PURE_EL2_SYSREG( VPIDR_EL2 ), > + PURE_EL2_SYSREG( VMPIDR_EL2 ), > + PURE_EL2_SYSREG( ACTLR_EL2 ), > + PURE_EL2_SYSREG( HCR_EL2 ), > + PURE_EL2_SYSREG( MDCR_EL2 ), > + PURE_EL2_SYSREG( HSTR_EL2 ), > + PURE_EL2_SYSREG( HACR_EL2 ), > + PURE_EL2_SYSREG( VTTBR_EL2 ), > + PURE_EL2_SYSREG( VTCR_EL2 ), > + PURE_EL2_SYSREG( RVBAR_EL2 ), > + PURE_EL2_SYSREG( RMR_EL2 ), > + PURE_EL2_SYSREG( TPIDR_EL2 ), > + PURE_EL2_SYSREG( CNTVOFF_EL2 ), > + PURE_EL2_SYSREG( CNTHCTL_EL2 ), I don't think having CNTHCTL_EL2 as a "pure" EL2 register is the right approach. More details below. > + PURE_EL2_SYSREG( HPFAR_EL2 ), > + EL2_SYSREG( SCTLR_EL2, SCTLR_EL1, translate_sctlr ), > + EL2_SYSREG( CPTR_EL2, CPACR_EL1, translate_cptr ), > + EL2_SYSREG( TTBR0_EL2, TTBR0_EL1, translate_ttbr0 ), > + EL2_SYSREG( TTBR1_EL2, TTBR1_EL1, NULL ), > + EL2_SYSREG( TCR_EL2, TCR_EL1, translate_tcr ), > + EL2_SYSREG( VBAR_EL2, VBAR_EL1, NULL ), > + EL2_SYSREG( AFSR0_EL2, AFSR0_EL1, NULL ), > + EL2_SYSREG( AFSR1_EL2, AFSR1_EL1, NULL ), > + EL2_SYSREG( ESR_EL2, ESR_EL1, NULL ), > + EL2_SYSREG( FAR_EL2, FAR_EL1, NULL ), > + EL2_SYSREG( MAIR_EL2, MAIR_EL1, NULL ), > + EL2_SYSREG( AMAIR_EL2, AMAIR_EL1, NULL ), > +}; > + > +static > +const struct el2_sysreg_map *find_el2_sysreg(const struct el2_sysreg_map *map, > + int reg) > +{ > + const struct el2_sysreg_map *entry; > + > + if (!sysreg_is_el2(reg)) > + return NULL; > + > + entry = &nested_sysreg_map[reg - FIRST_EL2_SYSREG]; > + if (entry->sysreg == __INVALID_SYSREG__) > + return NULL; > + > + return entry; > +} > + > u64 vcpu_read_sys_reg(const struct kvm_vcpu *vcpu, int reg) > { > + > if (!vcpu->arch.sysregs_loaded_on_cpu) > goto immediate_read; > > + if (unlikely(sysreg_is_el2(reg))) { > + const struct el2_sysreg_map *el2_reg; > + > + if (!is_hyp_ctxt(vcpu)) > + goto immediate_read; > + > + el2_reg = find_el2_sysreg(nested_sysreg_map, reg); > + if (el2_reg) { > + /* > + * If this register does not have an EL1 counterpart, > + * then read the stored EL2 version. > + */ > + if (el2_reg->mapping == __INVALID_SYSREG__) > + goto immediate_read; With CNTHCTL_EL2 as a "pure" EL2 register, reads (and writes, in vcpu_write_sys_reg) will go to memory. However, when vhe is enabled, CNTHCTL_EL2 has the same format as CNTKCTL_EL1 and reads/writes to CNTKCTL_EL1 should be reflected in the value of CNTHCTL_EL2 according to the pseudocode for accessing CNTKCTL_EL1 (ARM DDI 0487D.b, page D12-3496). This doesn't happen for vhe guest hypervisors because EL2 is declared as a "pure" EL2 register. I have tested that with this hack for reads (function chosen at random): diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index 04e554cae3a2..3a6260745680 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -653,8 +653,22 @@ static void check_vcpu_requests(struct kvm_vcpu *vcpu)   */  int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)  { +       u64 cntkctl, cnthctl;         int ret;   +       /* Check that CNTKCTL_EL1 writes are redirected to CNTHCTL_EL2 */ +       if (has_vhe()) { +               /* Check that CNTKCTL_EL1 reads are redirected to CNTHCTL_EL2 */ +               cntkctl = read_sysreg(cntkctl_el1); +               cnthctl = cntkctl ^ 1; +               write_sysreg(cnthctl, cnthctl_el2); +               cntkctl = read_sysreg(cntkctl_el1); +               BUG_ON(cntkctl != cnthctl); +               /* Restore original value */ +               cnthctl ^= 1; +               write_sysreg(cnthctl, cnthctl_el2); +       } +         if (unlikely(!kvm_vcpu_initialized(vcpu)))                 return -ENOEXEC; and this hack for writes: diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index 04e554cae3a2..1cfe47b6fa99 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -653,8 +653,21 @@ static void check_vcpu_requests(struct kvm_vcpu *vcpu)   */  int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)  { +       u64 cntkctl, cnthctl;         int ret;   +       /* Check that CNTKCTL_EL1 writes are redirected to CNTHCTL_EL2 */ +       if (has_vhe()) { +               cntkctl = read_sysreg(cntkctl_el1); +               cntkctl ^= 1; +               write_sysreg(cntkctl, cntkctl_el1); +               cnthctl = read_sysreg(cnthctl_el2); +               BUG_ON(cntkctl != cnthctl); +               /* Restore original value */ +               cntkctl ^= 1; +               write_sysreg(cntkctl, cntkctl_el1); +       } +         if (unlikely(!kvm_vcpu_initialized(vcpu)))                 return -ENOEXEC; The BUG_ON is not triggered on baremetal, but is triggered when running as a L1 guest hypervisor. Another issue with CNTHCTL_EL2 being a "pure" EL2 register is that with non-vhe guests, writes to CNTHCTL_EL2 aren't translated and written to CNTKCTL_EL1. This patch seems to fix the issues with vhe and non-vhe guest hypervisors (tested with booting a L2 guest): diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 1235a88ec575..bd21f0f45a86 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -153,7 +153,6 @@ struct el2_sysreg_map {         PURE_EL2_SYSREG( RVBAR_EL2 ),         PURE_EL2_SYSREG( RMR_EL2 ),         PURE_EL2_SYSREG( TPIDR_EL2 ), -       PURE_EL2_SYSREG( CNTHCTL_EL2 ),         PURE_EL2_SYSREG( HPFAR_EL2 ),         EL2_SYSREG(      SCTLR_EL2,  SCTLR_EL1,      translate_sctlr ),         EL2_SYSREG(      CPTR_EL2,   CPACR_EL1,      translate_cptr  ), @@ -167,6 +166,7 @@ struct el2_sysreg_map {         EL2_SYSREG(      FAR_EL2,    FAR_EL1,        NULL            ),         EL2_SYSREG(      MAIR_EL2,   MAIR_EL1,       NULL            ),         EL2_SYSREG(      AMAIR_EL2,  AMAIR_EL1,      NULL            ), +       EL2_SYSREG(      CNTHCTL_EL2,CNTKCTL_EL1,    translate_cnthctl),  };    static > + > + /* Get the current version of the EL1 counterpart. */ > + reg = el2_reg->mapping; > + } > + } else { > + /* EL1 register can't be on the CPU if the guest is in vEL2. */ > + if (unlikely(is_hyp_ctxt(vcpu))) > + goto immediate_read; > + } > + > /* > * System registers listed in the switch are not saved on every > * exit from the guest but are only saved on vcpu_put. > @@ -114,6 +245,8 @@ u64 vcpu_read_sys_reg(const struct kvm_vcpu *vcpu, int reg) > case DACR32_EL2: return read_sysreg_s(SYS_DACR32_EL2); > case IFSR32_EL2: return read_sysreg_s(SYS_IFSR32_EL2); > case DBGVCR32_EL2: return read_sysreg_s(SYS_DBGVCR32_EL2); > + case SP_EL2: return read_sysreg(sp_el1); > + case ELR_EL2: return read_sysreg_el1(SYS_ELR); > } > > immediate_read: > @@ -125,6 +258,34 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg) > if (!vcpu->arch.sysregs_loaded_on_cpu) > goto immediate_write; > > + if (unlikely(sysreg_is_el2(reg))) { > + const struct el2_sysreg_map *el2_reg; > + > + if (!is_hyp_ctxt(vcpu)) > + goto immediate_write; > + > + /* Store the EL2 version in the sysregs array. */ > + __vcpu_sys_reg(vcpu, reg) = val; > + > + el2_reg = find_el2_sysreg(nested_sysreg_map, reg); > + if (el2_reg) { > + /* Does this register have an EL1 counterpart? */ > + if (el2_reg->mapping == __INVALID_SYSREG__) > + return; > + > + if (!vcpu_el2_e2h_is_set(vcpu) && > + el2_reg->translate) > + val = el2_reg->translate(val); > + > + /* Redirect this to the EL1 version of the register. */ > + reg = el2_reg->mapping; > + } > + } else { > + /* EL1 register can't be on the CPU if the guest is in vEL2. */ > + if (unlikely(is_hyp_ctxt(vcpu))) > + goto immediate_write; > + } > + > /* > * System registers listed in the switch are not restored on every > * entry to the guest but are only restored on vcpu_load. > @@ -157,6 +318,8 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg) > case DACR32_EL2: write_sysreg_s(val, SYS_DACR32_EL2); return; > case IFSR32_EL2: write_sysreg_s(val, SYS_IFSR32_EL2); return; > case DBGVCR32_EL2: write_sysreg_s(val, SYS_DBGVCR32_EL2); return; > + case SP_EL2: write_sysreg(val, sp_el1); return; > + case ELR_EL2: write_sysreg_el1(val, SYS_ELR); return; > } > > immediate_write: 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=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 C05C8C06511 for ; Mon, 1 Jul 2019 12:10:28 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 8664E20B7C for ; Mon, 1 Jul 2019 12:10:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8664E20B7C 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 2292D4A1FA; Mon, 1 Jul 2019 08:10:28 -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 6+A-3aFH+zTR; Mon, 1 Jul 2019 08:10:26 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 375204A4CD; Mon, 1 Jul 2019 08:10:26 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id E42EC4A445 for ; Mon, 1 Jul 2019 08:10:24 -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 YxO4tQ3nJV4v for ; Mon, 1 Jul 2019 08:10:23 -0400 (EDT) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 11E0D4A3BF for ; Mon, 1 Jul 2019 08:10:23 -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 B23BE344; Mon, 1 Jul 2019 05:10:22 -0700 (PDT) Received: from [10.1.31.185] (unknown [10.1.31.185]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C07563F246; Mon, 1 Jul 2019 05:10:21 -0700 (PDT) Subject: Re: [PATCH 13/59] KVM: arm64: nv: Handle virtual EL2 registers in vcpu_read/write_sys_reg() To: Marc Zyngier , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org References: <20190621093843.220980-1-marc.zyngier@arm.com> <20190621093843.220980-14-marc.zyngier@arm.com> From: Alexandru Elisei Message-ID: Date: Mon, 1 Jul 2019 13:10:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <20190621093843.220980-14-marc.zyngier@arm.com> Content-Language: en-US Cc: Andre Przywara , Dave Martin 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 Ck9uIDYvMjEvMTkgMTA6MzcgQU0sIE1hcmMgWnluZ2llciB3cm90ZToKPiBGcm9tOiBBbmRyZSBQ cnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KPgo+IEtWTSBpbnRlcm5hbGx5IHVzZXMg YWNjZXNzb3IgZnVuY3Rpb25zIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIHRoZQo+IGd1ZXN0J3Mg c3lzdGVtIHJlZ2lzdGVycy4gVGhpcyB0YWtlcyBjYXJlIG9mIGFjY2Vzc2luZyBlaXRoZXIgdGhl IHN0b3JlZAo+IGNvcHkgb3IgdXNpbmcgdGhlICJsaXZlIiBFTDEgc3lzdGVtIHJlZ2lzdGVycyB3 aGVuIHRoZSBob3N0IHVzZXMgVkhFLgo+Cj4gV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHZpcnR1 YWwgRUwyIHdlIGFkZCBhIGJ1bmNoIG9mIEVMMiBzeXN0ZW0KPiByZWdpc3RlcnMsIHdoaWNoIG5v dyBtdXN0IGFsc28gYmUgdGFrZW4gY2FyZSBvZjoKPiAtIElmIHRoZSBndWVzdCBpcyBydW5uaW5n IGluIHZFTDIsIGFuZCB3ZSBhY2Nlc3MgYW4gRUwxIHN5c3JlZywgd2UgbXVzdAo+ICAgcmV2ZXJ0 IHRvIHRoZSBzdG9yZWQgdmVyc2lvbiBvZiB0aGF0LCBhbmQgbm90IHVzZSB0aGUgQ1BVJ3MgY29w eS4KPiAtIElmIHRoZSBndWVzdCBpcyBydW5uaW5nIGluIHZFTDEsIGFuZCB3ZSBhY2Nlc3MgYW4g RUwyIHN5c3JlZywgd2UgbXVzdAo+ICAgYWxzbyB1c2UgdGhlIHN0b3JlZCB2ZXJzaW9uLCBzaW5j ZSB0aGUgQ1BVIGNhcnJpZXMgdGhlIEVMMSBjb3B5Lgo+IC0gU29tZSBFTDIgc3lzdGVtIHJlZ2lz dGVycyBhcmUgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBjdXJyZW50IGV4ZWN1dGlvbgo+ICAgb2Yg dGhlIHN5c3RlbSwgc28gd2UgbmVlZCB0byBwdXQgdGhlbSBpbnRvIHRoZWlyIHJlc3BlY3RpdmUg RUwxCj4gICBjb3VudGVycGFydHMuIEZvciB0aGlzIHdlIG5lZWQgdG8gZGVmaW5lIGEgbWFwcGlu ZyBiZXR3ZWVuIHRoZSB0d28uCj4gICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIG5ld2x5IGludHJv ZHVjZWQgc3RydWN0IGVsMl9zeXNyZWdfbWFwLgo+IC0gU29tZSBFTDIgc3lzdGVtIHJlZ2lzdGVy cyBoYXZlIGEgZGlmZmVyZW50IGZvcm1hdCB0aGFuIHRoZWlyIEVMMQo+ICAgY291bnRlcnBhcnQs IHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0gYmVmb3JlIHdyaXRpbmcgdGhlbSB0byB0aGUK PiAgIENQVS4gVGhpcyBpcyBkb25lIHVzaW5nIGFuIChvcHRpb25hbCkgdHJhbnNsYXRlIGZ1bmN0 aW9uIGluIHRoZSBtYXAuCj4gLSBUaGVyZSBhcmUgdGhlIHRocmVlIHNwZWNpYWwgcmVnaXN0ZXJz IFNQX0VMMiwgU1BTUl9FTDIgYW5kIEVMUl9FTDIsCj4gICB3aGljaCBuZWVkIHNvbWUgc2VwYXJh dGUgaGFuZGxpbmcuCj4KPiBBbGwgb2YgdGhlc2UgY2FzZXMgYXJlIG5vdyB3cmFwcGVkIGludG8g dGhlIGV4aXN0aW5nIGFjY2Vzc29yIGZ1bmN0aW9ucywKPiBzbyBLVk0gdXNlcnMgd291bGRuJ3Qg bmVlZCB0byBjYXJlIHdoZXRoZXIgdGhleSBhY2Nlc3MgRUwyIG9yIEVMMQo+IHJlZ2lzdGVycyBh bmQgYWxzbyB3aGljaCBzdGF0ZSB0aGUgZ3Vlc3QgaXMgaW4uCj4KPiBUaGlzIGhhbmRsZXMgd2hh dCB3YXMgZm9ybWVybHkga25vd24gYXMgdGhlICJzaGFkb3cgc3RhdGUiIGR5bmFtaWNhbGx5LAo+ IHdpdGhvdXQgcmVxdWlyaW5nIGEgc2VwYXJhdGUgY29weSBmb3IgZWFjaCB2Q1BVIEVMLgo+Cj4g U2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4g U2lnbmVkLW9mZi1ieTogTWFyYyBaeW5naWVyIDxtYXJjLnp5bmdpZXJAYXJtLmNvbT4KPiAtLS0K PiAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIHwgICA2ICsKPiAgYXJjaC9h cm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oICAgIHwgICA1ICsKPiAgYXJjaC9hcm02NC9rdm0v c3lzX3JlZ3MuYyAgICAgICAgICAgIHwgMTYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAzIGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9rdm1fZW11bGF0ZS5oCj4gaW5kZXggYzQzYWFjNWZlZDY5Li5mMzcwMDZiNmVlYzQgMTAwNjQ0 Cj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCj4gKysrIGIvYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCj4gQEAgLTcwLDYgKzcwLDEyIEBAIHZv aWQga3ZtX2VtdWxhdGVfbmVzdGVkX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPiAgaW50 IGt2bV9pbmplY3RfbmVzdGVkX3N5bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXNyX2Vs Mik7Cj4gIGludCBrdm1faW5qZWN0X25lc3RlZF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsK PiAgCj4gK3U2NCB0cmFuc2xhdGVfdGNyKHU2NCB0Y3IpOwo+ICt1NjQgdHJhbnNsYXRlX2NwdHIo dTY0IHRjcik7Cj4gK3U2NCB0cmFuc2xhdGVfc2N0bHIodTY0IHRjcik7Cj4gK3U2NCB0cmFuc2xh dGVfdHRicjAodTY0IHRjcik7Cj4gK3U2NCB0cmFuc2xhdGVfY250aGN0bCh1NjQgdGNyKTsKPiAr Cj4gIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2VsMV9pc18zMmJpdChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpCj4gIHsKPiAgCXJldHVybiAhKHZjcHUtPmFyY2guaGNyX2VsMiAmIEhDUl9SVyk7Cj4g ZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+IGluZGV4IDJkNDI5MGQyNTEzYS4uZGFlOWM0MmE3 MjE5IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+ICsr KyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+IEBAIC0yMTcsNiArMjE3LDEx IEBAIGVudW0gdmNwdV9zeXNyZWcgewo+ICAJTlJfU1lTX1JFR1MJLyogTm90aGluZyBhZnRlciB0 aGlzIGxpbmUhICovCj4gIH07Cj4gIAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgc3lzcmVnX2lzX2Vs MihpbnQgcmVnKQo+ICt7Cj4gKwlyZXR1cm4gcmVnID49IEZJUlNUX0VMMl9TWVNSRUcgJiYgcmVn IDwgTlJfU1lTX1JFR1M7Cj4gK30KPiArCj4gIC8qIDMyYml0IG1hcHBpbmcgKi8KPiAgI2RlZmlu ZSBjMF9NUElEUgkoTVBJRFJfRUwxICogMikJLyogTXVsdGlQcm9jZXNzb3IgSUQgUmVnaXN0ZXIg Ki8KPiAgI2RlZmluZSBjMF9DU1NFTFIJKENTU0VMUl9FTDEgKiAyKS8qIENhY2hlIFNpemUgU2Vs ZWN0aW9uIFJlZ2lzdGVyICovCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdz LmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gaW5kZXggNjkzZGQwNjNjOWMyLi5kMDI0 MTE0ZGExNjIgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+ICsrKyBi L2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPiBAQCAtNzYsMTEgKzc2LDE0MiBAQCBzdGF0aWMg Ym9vbCB3cml0ZV90b19yZWFkX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ICAJcmV0dXJu IGZhbHNlOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdTY0IHRjcl9lbDJfaXBzX3RvX3Rjcl9lbDFfcHMo dTY0IHRjcl9lbDIpCj4gK3sKPiArCXJldHVybiAoKHRjcl9lbDIgJiBUQ1JfRUwyX1BTX01BU0sp ID4+IFRDUl9FTDJfUFNfU0hJRlQpCj4gKwkJPDwgVENSX0lQU19TSElGVDsKPiArfQo+ICsKPiAr dTY0IHRyYW5zbGF0ZV90Y3IodTY0IHRjcikKPiArewo+ICsJcmV0dXJuIFRDUl9FUEQxX01BU0sg fAkJCQkvKiBkaXNhYmxlIFRUQlIxX0VMMSAqLwo+ICsJICAgICAgICgodGNyICYgVENSX0VMMl9U QkkpID8gVENSX1RCSTAgOiAwKSB8Cj4gKwkgICAgICAgdGNyX2VsMl9pcHNfdG9fdGNyX2VsMV9w cyh0Y3IpIHwKPiArCSAgICAgICAodGNyICYgVENSX0VMMl9URzBfTUFTSykgfAo+ICsJICAgICAg ICh0Y3IgJiBUQ1JfRUwyX09SR04wX01BU0spIHwKPiArCSAgICAgICAodGNyICYgVENSX0VMMl9J UkdOMF9NQVNLKSB8Cj4gKwkgICAgICAgKHRjciAmIFRDUl9FTDJfVDBTWl9NQVNLKTsKPiArfQo+ ICsKPiArdTY0IHRyYW5zbGF0ZV9jcHRyKHU2NCBjcHRyX2VsMikKPiArewo+ICsJdTY0IGNwYWNy X2VsMSA9IDA7Cj4gKwo+ICsJaWYgKCEoY3B0cl9lbDIgJiBDUFRSX0VMMl9URlApKQo+ICsJCWNw YWNyX2VsMSB8PSBDUEFDUl9FTDFfRlBFTjsKPiArCWlmIChjcHRyX2VsMiAmIENQVFJfRUwyX1RU QSkKPiArCQljcGFjcl9lbDEgfD0gQ1BBQ1JfRUwxX1RUQTsKPiArCWlmICghKGNwdHJfZWwyICYg Q1BUUl9FTDJfVFopKQo+ICsJCWNwYWNyX2VsMSB8PSBDUEFDUl9FTDFfWkVOOwo+ICsKPiArCXJl dHVybiBjcGFjcl9lbDE7Cj4gK30KPiArCj4gK3U2NCB0cmFuc2xhdGVfc2N0bHIodTY0IHNjdGxy KQo+ICt7Cj4gKwkvKiBCaXQgMjAgaXMgUkVTMSBpbiBTQ1RMUl9FTDEsIGJ1dCBSRVMwIGluIFND VExSX0VMMiAqLwo+ICsJcmV0dXJuIHNjdGxyIHwgQklUKDIwKTsKPiArfQo+ICsKPiArdTY0IHRy YW5zbGF0ZV90dGJyMCh1NjQgdHRicjApCj4gK3sKPiArCS8qIEZvcmNlIEFTSUQgdG8gMCAoQVNJ RCAwIG9yIFJFUzApICovCj4gKwlyZXR1cm4gdHRicjAgJiB+R0VOTUFTS19VTEwoNjMsIDQ4KTsK PiArfQo+ICsKPiArdTY0IHRyYW5zbGF0ZV9jbnRoY3RsKHU2NCBjbnRoY3RsKQo+ICt7Cj4gKwly ZXR1cm4gKChjbnRoY3RsICYgMHgzKSA8PCAxMCkgfCAoY250aGN0bCAmIDB4ZmMpOwo+ICt9Cj4g Kwo+ICsjZGVmaW5lIEVMMl9TWVNSRUcoZWwyLCBlbDEsIHRyYW5zbGF0ZSkJXAo+ICsJW2VsMiAt IEZJUlNUX0VMMl9TWVNSRUddID0geyBlbDIsIGVsMSwgdHJhbnNsYXRlIH0KPiArI2RlZmluZSBQ VVJFX0VMMl9TWVNSRUcoZWwyKSBcCj4gKwlbZWwyIC0gRklSU1RfRUwyX1NZU1JFR10gPSB7IGVs MixfX0lOVkFMSURfU1lTUkVHX18sIE5VTEwgfQo+ICsvKgo+ICsgKiBBc3NvY2lhdGUgdkVMMiBy ZWdpc3RlcnMgdG8gdGhlaXIgRUwxIGNvdW50ZXJwYXJ0cyBvbiB0aGUgQ1BVLgo+ICsgKiBUaGUg dHJhbnNsYXRlIGZ1bmN0aW9uIGNhbiBiZSBOVUxMLCB3aGVuIHRoZSByZWdpc3RlciBsYXlvdXQg aXMgaWRlbnRpY2FsLgo+ICsgKi8KPiArc3RydWN0IGVsMl9zeXNyZWdfbWFwIHsKPiArCWludCBz eXNyZWc7CS8qIEVMMiByZWdpc3RlciBpbmRleCBpbnRvIHRoZSBhcnJheSBhYm92ZSAqLwo+ICsJ aW50IG1hcHBpbmc7CS8qIGFzc29jaWF0ZWQgRUwxIHJlZ2lzdGVyICovCj4gKwl1NjQgKCp0cmFu c2xhdGUpKHU2NCB2YWx1ZSk7Cj4gK30gbmVzdGVkX3N5c3JlZ19tYXBbTlJfU1lTX1JFR1MgLSBG SVJTVF9FTDJfU1lTUkVHXSA9IHsKPiArCVBVUkVfRUwyX1NZU1JFRyggVlBJRFJfRUwyICksCj4g KwlQVVJFX0VMMl9TWVNSRUcoIFZNUElEUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZU1JFRyggQUNU TFJfRUwyICksCj4gKwlQVVJFX0VMMl9TWVNSRUcoIEhDUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZ U1JFRyggTURDUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZU1JFRyggSFNUUl9FTDIgKSwKPiArCVBV UkVfRUwyX1NZU1JFRyggSEFDUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZU1JFRyggVlRUQlJfRUwy ICksCj4gKwlQVVJFX0VMMl9TWVNSRUcoIFZUQ1JfRUwyICksCj4gKwlQVVJFX0VMMl9TWVNSRUco IFJWQkFSX0VMMiApLAo+ICsJUFVSRV9FTDJfU1lTUkVHKCBSTVJfRUwyICksCj4gKwlQVVJFX0VM Ml9TWVNSRUcoIFRQSURSX0VMMiApLAo+ICsJUFVSRV9FTDJfU1lTUkVHKCBDTlRWT0ZGX0VMMiAp LAo+ICsJUFVSRV9FTDJfU1lTUkVHKCBDTlRIQ1RMX0VMMiApLApJIGRvbid0IHRoaW5rIGhhdmlu ZyBDTlRIQ1RMX0VMMiBhcyBhICJwdXJlIiBFTDIgcmVnaXN0ZXIgaXMgdGhlIHJpZ2h0IGFwcHJv YWNoLgpNb3JlIGRldGFpbHMgYmVsb3cuCj4gKwlQVVJFX0VMMl9TWVNSRUcoIEhQRkFSX0VMMiAp LAo+ICsJRUwyX1NZU1JFRyggICAgICBTQ1RMUl9FTDIsICBTQ1RMUl9FTDEsICAgICAgdHJhbnNs YXRlX3NjdGxyICksCj4gKwlFTDJfU1lTUkVHKCAgICAgIENQVFJfRUwyLCAgIENQQUNSX0VMMSwg ICAgICB0cmFuc2xhdGVfY3B0ciAgKSwKPiArCUVMMl9TWVNSRUcoICAgICAgVFRCUjBfRUwyLCAg VFRCUjBfRUwxLCAgICAgIHRyYW5zbGF0ZV90dGJyMCApLAo+ICsJRUwyX1NZU1JFRyggICAgICBU VEJSMV9FTDIsICBUVEJSMV9FTDEsICAgICAgTlVMTCAgICAgICAgICAgICksCj4gKwlFTDJfU1lT UkVHKCAgICAgIFRDUl9FTDIsICAgIFRDUl9FTDEsICAgICAgICB0cmFuc2xhdGVfdGNyICAgKSwK PiArCUVMMl9TWVNSRUcoICAgICAgVkJBUl9FTDIsICAgVkJBUl9FTDEsICAgICAgIE5VTEwgICAg ICAgICAgICApLAo+ICsJRUwyX1NZU1JFRyggICAgICBBRlNSMF9FTDIsICBBRlNSMF9FTDEsICAg ICAgTlVMTCAgICAgICAgICAgICksCj4gKwlFTDJfU1lTUkVHKCAgICAgIEFGU1IxX0VMMiwgIEFG U1IxX0VMMSwgICAgICBOVUxMICAgICAgICAgICAgKSwKPiArCUVMMl9TWVNSRUcoICAgICAgRVNS X0VMMiwgICAgRVNSX0VMMSwgICAgICAgIE5VTEwgICAgICAgICAgICApLAo+ICsJRUwyX1NZU1JF RyggICAgICBGQVJfRUwyLCAgICBGQVJfRUwxLCAgICAgICAgTlVMTCAgICAgICAgICAgICksCj4g KwlFTDJfU1lTUkVHKCAgICAgIE1BSVJfRUwyLCAgIE1BSVJfRUwxLCAgICAgICBOVUxMICAgICAg ICAgICAgKSwKPiArCUVMMl9TWVNSRUcoICAgICAgQU1BSVJfRUwyLCAgQU1BSVJfRUwxLCAgICAg IE5VTEwgICAgICAgICAgICApLAo+ICt9Owo+ICsKPiArc3RhdGljCj4gK2NvbnN0IHN0cnVjdCBl bDJfc3lzcmVnX21hcCAqZmluZF9lbDJfc3lzcmVnKGNvbnN0IHN0cnVjdCBlbDJfc3lzcmVnX21h cCAqbWFwLAo+ICsJCQkJCSAgICAgaW50IHJlZykKPiArewo+ICsJY29uc3Qgc3RydWN0IGVsMl9z eXNyZWdfbWFwICplbnRyeTsKPiArCj4gKwlpZiAoIXN5c3JlZ19pc19lbDIocmVnKSkKPiArCQly ZXR1cm4gTlVMTDsKPiArCj4gKwllbnRyeSA9ICZuZXN0ZWRfc3lzcmVnX21hcFtyZWcgLSBGSVJT VF9FTDJfU1lTUkVHXTsKPiArCWlmIChlbnRyeS0+c3lzcmVnID09IF9fSU5WQUxJRF9TWVNSRUdf XykKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gZW50cnk7Cj4gK30KPiArCj4gIHU2 NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByZWcp Cj4gIHsKPiArCj4gIAlpZiAoIXZjcHUtPmFyY2guc3lzcmVnc19sb2FkZWRfb25fY3B1KQo+ICAJ CWdvdG8gaW1tZWRpYXRlX3JlYWQ7Cj4gIAo+ICsJaWYgKHVubGlrZWx5KHN5c3JlZ19pc19lbDIo cmVnKSkpIHsKPiArCQljb25zdCBzdHJ1Y3QgZWwyX3N5c3JlZ19tYXAgKmVsMl9yZWc7Cj4gKwo+ ICsJCWlmICghaXNfaHlwX2N0eHQodmNwdSkpCj4gKwkJCWdvdG8gaW1tZWRpYXRlX3JlYWQ7Cj4g Kwo+ICsJCWVsMl9yZWcgPSBmaW5kX2VsMl9zeXNyZWcobmVzdGVkX3N5c3JlZ19tYXAsIHJlZyk7 Cj4gKwkJaWYgKGVsMl9yZWcpIHsKPiArCQkJLyoKPiArCQkJICogSWYgdGhpcyByZWdpc3RlciBk b2VzIG5vdCBoYXZlIGFuIEVMMSBjb3VudGVycGFydCwKPiArCQkJICogdGhlbiByZWFkIHRoZSBz dG9yZWQgRUwyIHZlcnNpb24uCj4gKwkJCSAqLwo+ICsJCQlpZiAoZWwyX3JlZy0+bWFwcGluZyA9 PSBfX0lOVkFMSURfU1lTUkVHX18pCj4gKwkJCQlnb3RvIGltbWVkaWF0ZV9yZWFkOwoKV2l0aCBD TlRIQ1RMX0VMMiBhcyBhICJwdXJlIiBFTDIgcmVnaXN0ZXIsIHJlYWRzIChhbmQgd3JpdGVzLCBp bgp2Y3B1X3dyaXRlX3N5c19yZWcpIHdpbGwgZ28gdG8gbWVtb3J5LiBIb3dldmVyLCB3aGVuIHZo ZSBpcyBlbmFibGVkLCBDTlRIQ1RMX0VMMgpoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIENOVEtDVExf RUwxIGFuZCByZWFkcy93cml0ZXMgdG8gQ05US0NUTF9FTDEgc2hvdWxkIGJlCnJlZmxlY3RlZCBp biB0aGUgdmFsdWUgb2YgQ05USENUTF9FTDIgYWNjb3JkaW5nIHRvIHRoZSBwc2V1ZG9jb2RlIGZv ciBhY2Nlc3NpbmcKQ05US0NUTF9FTDEgKEFSTSBEREkgMDQ4N0QuYiwgcGFnZSBEMTItMzQ5Niku IFRoaXMgZG9lc24ndCBoYXBwZW4gZm9yIHZoZSBndWVzdApoeXBlcnZpc29ycyBiZWNhdXNlIEVM MiBpcyBkZWNsYXJlZCBhcyBhICJwdXJlIiBFTDIgcmVnaXN0ZXIuCgpJIGhhdmUgdGVzdGVkIHRo YXQgd2l0aCB0aGlzIGhhY2sgZm9yIHJlYWRzIChmdW5jdGlvbiBjaG9zZW4gYXQgcmFuZG9tKToK CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vYXJtLmMgYi92aXJ0L2t2bS9hcm0vYXJtLmMKaW5k ZXggMDRlNTU0Y2FlM2EyLi4zYTYyNjA3NDU2ODAgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2FybS9h cm0uYworKysgYi92aXJ0L2t2bS9hcm0vYXJtLmMKQEAgLTY1Myw4ICs2NTMsMjIgQEAgc3RhdGlj IHZvaWQgY2hlY2tfdmNwdV9yZXF1ZXN0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCsKgICovCsKg aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0 IGt2bV9ydW4gKnJ1bikKwqB7CivCoMKgwqDCoMKgwqAgdTY0IGNudGtjdGwsIGNudGhjdGw7CsKg wqDCoMKgwqDCoMKgIGludCByZXQ7CsKgCivCoMKgwqDCoMKgwqAgLyogQ2hlY2sgdGhhdCBDTlRL Q1RMX0VMMSB3cml0ZXMgYXJlIHJlZGlyZWN0ZWQgdG8gQ05USENUTF9FTDIgKi8KK8KgwqDCoMKg wqDCoCBpZiAoaGFzX3ZoZSgpKSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIENo ZWNrIHRoYXQgQ05US0NUTF9FTDEgcmVhZHMgYXJlIHJlZGlyZWN0ZWQgdG8gQ05USENUTF9FTDIg Ki8KK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY250a2N0bCA9IHJlYWRfc3lzcmVnKGNu dGtjdGxfZWwxKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY250aGN0bCA9IGNudGtj dGwgXiAxOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0ZV9zeXNyZWcoY250aGN0 bCwgY250aGN0bF9lbDIpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbnRrY3RsID0g cmVhZF9zeXNyZWcoY250a2N0bF9lbDEpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBC VUdfT04oY250a2N0bCAhPSBjbnRoY3RsKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg LyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjbnRoY3RsIF49IDE7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdyaXRlX3N5c3Jl ZyhjbnRoY3RsLCBjbnRoY3RsX2VsMik7CivCoMKgwqDCoMKgwqAgfQorCsKgwqDCoMKgwqDCoMKg IGlmICh1bmxpa2VseSgha3ZtX3ZjcHVfaW5pdGlhbGl6ZWQodmNwdSkpKQrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FWEVDOwoKYW5kIHRoaXMgaGFjayBmb3Igd3Jp dGVzOgoKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS9hcm0uYyBiL3ZpcnQva3ZtL2FybS9hcm0u YwppbmRleCAwNGU1NTRjYWUzYTIuLjFjZmU0N2I2ZmE5OSAxMDA2NDQKLS0tIGEvdmlydC9rdm0v YXJtL2FybS5jCisrKyBiL3ZpcnQva3ZtL2FybS9hcm0uYwpAQCAtNjUzLDggKzY1MywyMSBAQCBz dGF0aWMgdm9pZCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKwqAg Ki8KwqBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBz dHJ1Y3Qga3ZtX3J1biAqcnVuKQrCoHsKK8KgwqDCoMKgwqDCoCB1NjQgY250a2N0bCwgY250aGN0 bDsKwqDCoMKgwqDCoMKgwqAgaW50IHJldDsKwqAKK8KgwqDCoMKgwqDCoCAvKiBDaGVjayB0aGF0 IENOVEtDVExfRUwxIHdyaXRlcyBhcmUgcmVkaXJlY3RlZCB0byBDTlRIQ1RMX0VMMiAqLworwqDC oMKgwqDCoMKgIGlmIChoYXNfdmhlKCkpIHsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y250a2N0bCA9IHJlYWRfc3lzcmVnKGNudGtjdGxfZWwxKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY250a2N0bCBePSAxOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0 ZV9zeXNyZWcoY250a2N0bCwgY250a2N0bF9lbDEpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjbnRoY3RsID0gcmVhZF9zeXNyZWcoY250aGN0bF9lbDIpOworwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBCVUdfT04oY250a2N0bCAhPSBjbnRoY3RsKTsKK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjbnRrY3RsIF49IDE7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHdyaXRlX3N5c3JlZyhjbnRrY3RsLCBjbnRrY3RsX2VsMSk7CivCoMKgwqDCoMKgwqAgfQor CsKgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseSgha3ZtX3ZjcHVfaW5pdGlhbGl6ZWQodmNwdSkp KQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FWEVDOwoKVGhlIEJV R19PTiBpcyBub3QgdHJpZ2dlcmVkIG9uIGJhcmVtZXRhbCwgYnV0IGlzIHRyaWdnZXJlZCB3aGVu IHJ1bm5pbmcgYXMgYSBMMQpndWVzdCBoeXBlcnZpc29yLgoKQW5vdGhlciBpc3N1ZSB3aXRoIENO VEhDVExfRUwyIGJlaW5nIGEgInB1cmUiIEVMMiByZWdpc3RlciBpcyB0aGF0IHdpdGggbm9uLXZo ZQpndWVzdHMsIHdyaXRlcyB0byBDTlRIQ1RMX0VMMiBhcmVuJ3QgdHJhbnNsYXRlZCBhbmQgd3Jp dHRlbiB0byBDTlRLQ1RMX0VMMS4KClRoaXMgcGF0Y2ggc2VlbXMgdG8gZml4IHRoZSBpc3N1ZXMg d2l0aCB2aGUgYW5kIG5vbi12aGUgZ3Vlc3QgaHlwZXJ2aXNvcnMKKHRlc3RlZCB3aXRoIGJvb3Rp bmcgYSBMMiBndWVzdCk6CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBi L2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKaW5kZXggMTIzNWE4OGVjNTc1Li5iZDIxZjBmNDVh ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKKysrIGIvYXJjaC9hcm02 NC9rdm0vc3lzX3JlZ3MuYwpAQCAtMTUzLDcgKzE1Myw2IEBAIHN0cnVjdCBlbDJfc3lzcmVnX21h cCB7CsKgwqDCoMKgwqDCoMKgIFBVUkVfRUwyX1NZU1JFRyggUlZCQVJfRUwyICksCsKgwqDCoMKg wqDCoMKgIFBVUkVfRUwyX1NZU1JFRyggUk1SX0VMMiApLArCoMKgwqDCoMKgwqDCoCBQVVJFX0VM Ml9TWVNSRUcoIFRQSURSX0VMMiApLAotwqDCoMKgwqDCoMKgIFBVUkVfRUwyX1NZU1JFRyggQ05U SENUTF9FTDIgKSwKwqDCoMKgwqDCoMKgwqAgUFVSRV9FTDJfU1lTUkVHKCBIUEZBUl9FTDIgKSwK wqDCoMKgwqDCoMKgwqAgRUwyX1NZU1JFRyjCoMKgwqDCoMKgIFNDVExSX0VMMizCoCBTQ1RMUl9F TDEswqDCoMKgwqDCoCB0cmFuc2xhdGVfc2N0bHIgKSwKwqDCoMKgwqDCoMKgwqAgRUwyX1NZU1JF RyjCoMKgwqDCoMKgIENQVFJfRUwyLMKgwqAgQ1BBQ1JfRUwxLMKgwqDCoMKgwqAgdHJhbnNsYXRl X2NwdHLCoCApLApAQCAtMTY3LDYgKzE2Niw3IEBAIHN0cnVjdCBlbDJfc3lzcmVnX21hcCB7CsKg wqDCoMKgwqDCoMKgIEVMMl9TWVNSRUcowqDCoMKgwqDCoCBGQVJfRUwyLMKgwqDCoCBGQVJfRUwx LMKgwqDCoMKgwqDCoMKgIE5VTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICksCsKgwqDCoMKgwqDC oMKgIEVMMl9TWVNSRUcowqDCoMKgwqDCoCBNQUlSX0VMMizCoMKgIE1BSVJfRUwxLMKgwqDCoMKg wqDCoCBOVUxMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApLArCoMKgwqDCoMKgwqDCoCBFTDJfU1lT UkVHKMKgwqDCoMKgwqAgQU1BSVJfRUwyLMKgIEFNQUlSX0VMMSzCoMKgwqDCoMKgIE5VTEzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICksCivCoMKgwqDCoMKgwqAgRUwyX1NZU1JFRyjCoMKgwqDCoMKg IENOVEhDVExfRUwyLENOVEtDVExfRUwxLMKgwqDCoCB0cmFuc2xhdGVfY250aGN0bCksCsKgfTsK wqAKwqBzdGF0aWMKCj4gKwo+ICsJCQkvKiBHZXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUg RUwxIGNvdW50ZXJwYXJ0LiAqLwo+ICsJCQlyZWcgPSBlbDJfcmVnLT5tYXBwaW5nOwo+ICsJCX0K PiArCX0gZWxzZSB7Cj4gKwkJLyogRUwxIHJlZ2lzdGVyIGNhbid0IGJlIG9uIHRoZSBDUFUgaWYg dGhlIGd1ZXN0IGlzIGluIHZFTDIuICovCj4gKwkJaWYgKHVubGlrZWx5KGlzX2h5cF9jdHh0KHZj cHUpKSkKPiArCQkJZ290byBpbW1lZGlhdGVfcmVhZDsKPiArCX0KPiArCj4gIAkvKgo+ICAJICog U3lzdGVtIHJlZ2lzdGVycyBsaXN0ZWQgaW4gdGhlIHN3aXRjaCBhcmUgbm90IHNhdmVkIG9uIGV2 ZXJ5Cj4gIAkgKiBleGl0IGZyb20gdGhlIGd1ZXN0IGJ1dCBhcmUgb25seSBzYXZlZCBvbiB2Y3B1 X3B1dC4KPiBAQCAtMTE0LDYgKzI0NSw4IEBAIHU2NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByZWcpCj4gIAljYXNlIERBQ1IzMl9FTDI6CXJldHVy biByZWFkX3N5c3JlZ19zKFNZU19EQUNSMzJfRUwyKTsKPiAgCWNhc2UgSUZTUjMyX0VMMjoJcmV0 dXJuIHJlYWRfc3lzcmVnX3MoU1lTX0lGU1IzMl9FTDIpOwo+ICAJY2FzZSBEQkdWQ1IzMl9FTDI6 CXJldHVybiByZWFkX3N5c3JlZ19zKFNZU19EQkdWQ1IzMl9FTDIpOwo+ICsJY2FzZSBTUF9FTDI6 CQlyZXR1cm4gcmVhZF9zeXNyZWcoc3BfZWwxKTsKPiArCWNhc2UgRUxSX0VMMjoJCXJldHVybiBy ZWFkX3N5c3JlZ19lbDEoU1lTX0VMUik7Cj4gIAl9Cj4gIAo+ICBpbW1lZGlhdGVfcmVhZDoKPiBA QCAtMTI1LDYgKzI1OCwzNCBAQCB2b2lkIHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIHU2NCB2YWwsIGludCByZWcpCj4gIAlpZiAoIXZjcHUtPmFyY2guc3lzcmVnc19s b2FkZWRfb25fY3B1KQo+ICAJCWdvdG8gaW1tZWRpYXRlX3dyaXRlOwo+ICAKPiArCWlmICh1bmxp a2VseShzeXNyZWdfaXNfZWwyKHJlZykpKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGVsMl9zeXNyZWdf bWFwICplbDJfcmVnOwo+ICsKPiArCQlpZiAoIWlzX2h5cF9jdHh0KHZjcHUpKQo+ICsJCQlnb3Rv IGltbWVkaWF0ZV93cml0ZTsKPiArCj4gKwkJLyogU3RvcmUgdGhlIEVMMiB2ZXJzaW9uIGluIHRo ZSBzeXNyZWdzIGFycmF5LiAqLwo+ICsJCV9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgPSB2YWw7 Cj4gKwo+ICsJCWVsMl9yZWcgPSBmaW5kX2VsMl9zeXNyZWcobmVzdGVkX3N5c3JlZ19tYXAsIHJl Zyk7Cj4gKwkJaWYgKGVsMl9yZWcpIHsKPiArCQkJLyogRG9lcyB0aGlzIHJlZ2lzdGVyIGhhdmUg YW4gRUwxIGNvdW50ZXJwYXJ0PyAqLwo+ICsJCQlpZiAoZWwyX3JlZy0+bWFwcGluZyA9PSBfX0lO VkFMSURfU1lTUkVHX18pCj4gKwkJCQlyZXR1cm47Cj4gKwo+ICsJCQlpZiAoIXZjcHVfZWwyX2Uy aF9pc19zZXQodmNwdSkgJiYKPiArCQkJICAgIGVsMl9yZWctPnRyYW5zbGF0ZSkKPiArCQkJCXZh bCA9IGVsMl9yZWctPnRyYW5zbGF0ZSh2YWwpOwo+ICsKPiArCQkJLyogUmVkaXJlY3QgdGhpcyB0 byB0aGUgRUwxIHZlcnNpb24gb2YgdGhlIHJlZ2lzdGVyLiAqLwo+ICsJCQlyZWcgPSBlbDJfcmVn LT5tYXBwaW5nOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJLyogRUwxIHJlZ2lzdGVyIGNhbid0 IGJlIG9uIHRoZSBDUFUgaWYgdGhlIGd1ZXN0IGlzIGluIHZFTDIuICovCj4gKwkJaWYgKHVubGlr ZWx5KGlzX2h5cF9jdHh0KHZjcHUpKSkKPiArCQkJZ290byBpbW1lZGlhdGVfd3JpdGU7Cj4gKwl9 Cj4gKwo+ICAJLyoKPiAgCSAqIFN5c3RlbSByZWdpc3RlcnMgbGlzdGVkIGluIHRoZSBzd2l0Y2gg YXJlIG5vdCByZXN0b3JlZCBvbiBldmVyeQo+ICAJICogZW50cnkgdG8gdGhlIGd1ZXN0IGJ1dCBh cmUgb25seSByZXN0b3JlZCBvbiB2Y3B1X2xvYWQuCj4gQEAgLTE1Nyw2ICszMTgsOCBAQCB2b2lk IHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGludCBy ZWcpCj4gIAljYXNlIERBQ1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0RBQ1IzMl9F TDIpOwlyZXR1cm47Cj4gIAljYXNlIElGU1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lT X0lGU1IzMl9FTDIpOwlyZXR1cm47Cj4gIAljYXNlIERCR1ZDUjMyX0VMMjoJd3JpdGVfc3lzcmVn X3ModmFsLCBTWVNfREJHVkNSMzJfRUwyKTsJcmV0dXJuOwo+ICsJY2FzZSBTUF9FTDI6CQl3cml0 ZV9zeXNyZWcodmFsLCBzcF9lbDEpOwkJcmV0dXJuOwo+ICsJY2FzZSBFTFJfRUwyOgkJd3JpdGVf c3lzcmVnX2VsMSh2YWwsIFNZU19FTFIpOwkJcmV0dXJuOwo+ICAJfQo+ICAKPiAgaW1tZWRpYXRl X3dyaXRlOgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpr dm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9s aXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K 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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 7E931C0650E for ; Mon, 1 Jul 2019 12:10:28 +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 55BD520B7C for ; Mon, 1 Jul 2019 12:10:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="PphXgIh6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 55BD520B7C 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=TiYqv31WubRLUD5gaYAgN7u+5X3LwDE0UWCJ+iwFHvU=; b=PphXgIh63TNhwW vFZNAgZYXTQ+AiFr8kbS2oicEYd8Zc+DMBX1PcUPafkDzCnmAkwU4x5AaRtkj55bdaYeSCe4w2y8Y MiCM1uI4Y3F0cbkGw/4fwwLMI7ePOZ2+pNyQdV3Af2gwrd1K+Fci+rhN0lruBo2tLJ+RGettVuca9 k1mO7RWFzMAyiUx4grLq8qtw60igpMB0nhPVNBopB/zqDmvBO+M6JrjL1ubXOWFmBzAktji1uIVSw OkOfRGhCk/Hf0F38iWi4PcIzsST6AdSGkdJvI+KbcU4reVqy8+pnsNjSlEK8ADowEFXJY8NGPWKRL 49cT5ZDQNY6u1Slm6ahg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hhv8d-000704-BA; Mon, 01 Jul 2019 12:10:27 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hhv8Z-0006yb-6F for linux-arm-kernel@lists.infradead.org; Mon, 01 Jul 2019 12:10:25 +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 B23BE344; Mon, 1 Jul 2019 05:10:22 -0700 (PDT) Received: from [10.1.31.185] (unknown [10.1.31.185]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C07563F246; Mon, 1 Jul 2019 05:10:21 -0700 (PDT) Subject: Re: [PATCH 13/59] KVM: arm64: nv: Handle virtual EL2 registers in vcpu_read/write_sys_reg() To: Marc Zyngier , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org References: <20190621093843.220980-1-marc.zyngier@arm.com> <20190621093843.220980-14-marc.zyngier@arm.com> From: Alexandru Elisei Message-ID: Date: Mon, 1 Jul 2019 13:10:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <20190621093843.220980-14-marc.zyngier@arm.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190701_051023_323016_276A5ACB X-CRM114-Status: GOOD ( 37.17 ) 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: Andre Przywara , Dave Martin 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 Ck9uIDYvMjEvMTkgMTA6MzcgQU0sIE1hcmMgWnluZ2llciB3cm90ZToKPiBGcm9tOiBBbmRyZSBQ cnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KPgo+IEtWTSBpbnRlcm5hbGx5IHVzZXMg YWNjZXNzb3IgZnVuY3Rpb25zIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIHRoZQo+IGd1ZXN0J3Mg c3lzdGVtIHJlZ2lzdGVycy4gVGhpcyB0YWtlcyBjYXJlIG9mIGFjY2Vzc2luZyBlaXRoZXIgdGhl IHN0b3JlZAo+IGNvcHkgb3IgdXNpbmcgdGhlICJsaXZlIiBFTDEgc3lzdGVtIHJlZ2lzdGVycyB3 aGVuIHRoZSBob3N0IHVzZXMgVkhFLgo+Cj4gV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHZpcnR1 YWwgRUwyIHdlIGFkZCBhIGJ1bmNoIG9mIEVMMiBzeXN0ZW0KPiByZWdpc3RlcnMsIHdoaWNoIG5v dyBtdXN0IGFsc28gYmUgdGFrZW4gY2FyZSBvZjoKPiAtIElmIHRoZSBndWVzdCBpcyBydW5uaW5n IGluIHZFTDIsIGFuZCB3ZSBhY2Nlc3MgYW4gRUwxIHN5c3JlZywgd2UgbXVzdAo+ICAgcmV2ZXJ0 IHRvIHRoZSBzdG9yZWQgdmVyc2lvbiBvZiB0aGF0LCBhbmQgbm90IHVzZSB0aGUgQ1BVJ3MgY29w eS4KPiAtIElmIHRoZSBndWVzdCBpcyBydW5uaW5nIGluIHZFTDEsIGFuZCB3ZSBhY2Nlc3MgYW4g RUwyIHN5c3JlZywgd2UgbXVzdAo+ICAgYWxzbyB1c2UgdGhlIHN0b3JlZCB2ZXJzaW9uLCBzaW5j ZSB0aGUgQ1BVIGNhcnJpZXMgdGhlIEVMMSBjb3B5Lgo+IC0gU29tZSBFTDIgc3lzdGVtIHJlZ2lz dGVycyBhcmUgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBjdXJyZW50IGV4ZWN1dGlvbgo+ICAgb2Yg dGhlIHN5c3RlbSwgc28gd2UgbmVlZCB0byBwdXQgdGhlbSBpbnRvIHRoZWlyIHJlc3BlY3RpdmUg RUwxCj4gICBjb3VudGVycGFydHMuIEZvciB0aGlzIHdlIG5lZWQgdG8gZGVmaW5lIGEgbWFwcGlu ZyBiZXR3ZWVuIHRoZSB0d28uCj4gICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIG5ld2x5IGludHJv ZHVjZWQgc3RydWN0IGVsMl9zeXNyZWdfbWFwLgo+IC0gU29tZSBFTDIgc3lzdGVtIHJlZ2lzdGVy cyBoYXZlIGEgZGlmZmVyZW50IGZvcm1hdCB0aGFuIHRoZWlyIEVMMQo+ICAgY291bnRlcnBhcnQs IHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0gYmVmb3JlIHdyaXRpbmcgdGhlbSB0byB0aGUK PiAgIENQVS4gVGhpcyBpcyBkb25lIHVzaW5nIGFuIChvcHRpb25hbCkgdHJhbnNsYXRlIGZ1bmN0 aW9uIGluIHRoZSBtYXAuCj4gLSBUaGVyZSBhcmUgdGhlIHRocmVlIHNwZWNpYWwgcmVnaXN0ZXJz IFNQX0VMMiwgU1BTUl9FTDIgYW5kIEVMUl9FTDIsCj4gICB3aGljaCBuZWVkIHNvbWUgc2VwYXJh dGUgaGFuZGxpbmcuCj4KPiBBbGwgb2YgdGhlc2UgY2FzZXMgYXJlIG5vdyB3cmFwcGVkIGludG8g dGhlIGV4aXN0aW5nIGFjY2Vzc29yIGZ1bmN0aW9ucywKPiBzbyBLVk0gdXNlcnMgd291bGRuJ3Qg bmVlZCB0byBjYXJlIHdoZXRoZXIgdGhleSBhY2Nlc3MgRUwyIG9yIEVMMQo+IHJlZ2lzdGVycyBh bmQgYWxzbyB3aGljaCBzdGF0ZSB0aGUgZ3Vlc3QgaXMgaW4uCj4KPiBUaGlzIGhhbmRsZXMgd2hh dCB3YXMgZm9ybWVybHkga25vd24gYXMgdGhlICJzaGFkb3cgc3RhdGUiIGR5bmFtaWNhbGx5LAo+ IHdpdGhvdXQgcmVxdWlyaW5nIGEgc2VwYXJhdGUgY29weSBmb3IgZWFjaCB2Q1BVIEVMLgo+Cj4g U2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4g U2lnbmVkLW9mZi1ieTogTWFyYyBaeW5naWVyIDxtYXJjLnp5bmdpZXJAYXJtLmNvbT4KPiAtLS0K PiAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIHwgICA2ICsKPiAgYXJjaC9h cm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oICAgIHwgICA1ICsKPiAgYXJjaC9hcm02NC9rdm0v c3lzX3JlZ3MuYyAgICAgICAgICAgIHwgMTYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAzIGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9rdm1fZW11bGF0ZS5oCj4gaW5kZXggYzQzYWFjNWZlZDY5Li5mMzcwMDZiNmVlYzQgMTAwNjQ0 Cj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCj4gKysrIGIvYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCj4gQEAgLTcwLDYgKzcwLDEyIEBAIHZv aWQga3ZtX2VtdWxhdGVfbmVzdGVkX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPiAgaW50 IGt2bV9pbmplY3RfbmVzdGVkX3N5bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXNyX2Vs Mik7Cj4gIGludCBrdm1faW5qZWN0X25lc3RlZF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsK PiAgCj4gK3U2NCB0cmFuc2xhdGVfdGNyKHU2NCB0Y3IpOwo+ICt1NjQgdHJhbnNsYXRlX2NwdHIo dTY0IHRjcik7Cj4gK3U2NCB0cmFuc2xhdGVfc2N0bHIodTY0IHRjcik7Cj4gK3U2NCB0cmFuc2xh dGVfdHRicjAodTY0IHRjcik7Cj4gK3U2NCB0cmFuc2xhdGVfY250aGN0bCh1NjQgdGNyKTsKPiAr Cj4gIHN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2VsMV9pc18zMmJpdChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpCj4gIHsKPiAgCXJldHVybiAhKHZjcHUtPmFyY2guaGNyX2VsMiAmIEhDUl9SVyk7Cj4g ZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+IGluZGV4IDJkNDI5MGQyNTEzYS4uZGFlOWM0MmE3 MjE5IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+ICsr KyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+IEBAIC0yMTcsNiArMjE3LDEx IEBAIGVudW0gdmNwdV9zeXNyZWcgewo+ICAJTlJfU1lTX1JFR1MJLyogTm90aGluZyBhZnRlciB0 aGlzIGxpbmUhICovCj4gIH07Cj4gIAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgc3lzcmVnX2lzX2Vs MihpbnQgcmVnKQo+ICt7Cj4gKwlyZXR1cm4gcmVnID49IEZJUlNUX0VMMl9TWVNSRUcgJiYgcmVn IDwgTlJfU1lTX1JFR1M7Cj4gK30KPiArCj4gIC8qIDMyYml0IG1hcHBpbmcgKi8KPiAgI2RlZmlu ZSBjMF9NUElEUgkoTVBJRFJfRUwxICogMikJLyogTXVsdGlQcm9jZXNzb3IgSUQgUmVnaXN0ZXIg Ki8KPiAgI2RlZmluZSBjMF9DU1NFTFIJKENTU0VMUl9FTDEgKiAyKS8qIENhY2hlIFNpemUgU2Vs ZWN0aW9uIFJlZ2lzdGVyICovCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdz LmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gaW5kZXggNjkzZGQwNjNjOWMyLi5kMDI0 MTE0ZGExNjIgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+ICsrKyBi L2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPiBAQCAtNzYsMTEgKzc2LDE0MiBAQCBzdGF0aWMg Ym9vbCB3cml0ZV90b19yZWFkX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ICAJcmV0dXJu IGZhbHNlOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdTY0IHRjcl9lbDJfaXBzX3RvX3Rjcl9lbDFfcHMo dTY0IHRjcl9lbDIpCj4gK3sKPiArCXJldHVybiAoKHRjcl9lbDIgJiBUQ1JfRUwyX1BTX01BU0sp ID4+IFRDUl9FTDJfUFNfU0hJRlQpCj4gKwkJPDwgVENSX0lQU19TSElGVDsKPiArfQo+ICsKPiAr dTY0IHRyYW5zbGF0ZV90Y3IodTY0IHRjcikKPiArewo+ICsJcmV0dXJuIFRDUl9FUEQxX01BU0sg fAkJCQkvKiBkaXNhYmxlIFRUQlIxX0VMMSAqLwo+ICsJICAgICAgICgodGNyICYgVENSX0VMMl9U QkkpID8gVENSX1RCSTAgOiAwKSB8Cj4gKwkgICAgICAgdGNyX2VsMl9pcHNfdG9fdGNyX2VsMV9w cyh0Y3IpIHwKPiArCSAgICAgICAodGNyICYgVENSX0VMMl9URzBfTUFTSykgfAo+ICsJICAgICAg ICh0Y3IgJiBUQ1JfRUwyX09SR04wX01BU0spIHwKPiArCSAgICAgICAodGNyICYgVENSX0VMMl9J UkdOMF9NQVNLKSB8Cj4gKwkgICAgICAgKHRjciAmIFRDUl9FTDJfVDBTWl9NQVNLKTsKPiArfQo+ ICsKPiArdTY0IHRyYW5zbGF0ZV9jcHRyKHU2NCBjcHRyX2VsMikKPiArewo+ICsJdTY0IGNwYWNy X2VsMSA9IDA7Cj4gKwo+ICsJaWYgKCEoY3B0cl9lbDIgJiBDUFRSX0VMMl9URlApKQo+ICsJCWNw YWNyX2VsMSB8PSBDUEFDUl9FTDFfRlBFTjsKPiArCWlmIChjcHRyX2VsMiAmIENQVFJfRUwyX1RU QSkKPiArCQljcGFjcl9lbDEgfD0gQ1BBQ1JfRUwxX1RUQTsKPiArCWlmICghKGNwdHJfZWwyICYg Q1BUUl9FTDJfVFopKQo+ICsJCWNwYWNyX2VsMSB8PSBDUEFDUl9FTDFfWkVOOwo+ICsKPiArCXJl dHVybiBjcGFjcl9lbDE7Cj4gK30KPiArCj4gK3U2NCB0cmFuc2xhdGVfc2N0bHIodTY0IHNjdGxy KQo+ICt7Cj4gKwkvKiBCaXQgMjAgaXMgUkVTMSBpbiBTQ1RMUl9FTDEsIGJ1dCBSRVMwIGluIFND VExSX0VMMiAqLwo+ICsJcmV0dXJuIHNjdGxyIHwgQklUKDIwKTsKPiArfQo+ICsKPiArdTY0IHRy YW5zbGF0ZV90dGJyMCh1NjQgdHRicjApCj4gK3sKPiArCS8qIEZvcmNlIEFTSUQgdG8gMCAoQVNJ RCAwIG9yIFJFUzApICovCj4gKwlyZXR1cm4gdHRicjAgJiB+R0VOTUFTS19VTEwoNjMsIDQ4KTsK PiArfQo+ICsKPiArdTY0IHRyYW5zbGF0ZV9jbnRoY3RsKHU2NCBjbnRoY3RsKQo+ICt7Cj4gKwly ZXR1cm4gKChjbnRoY3RsICYgMHgzKSA8PCAxMCkgfCAoY250aGN0bCAmIDB4ZmMpOwo+ICt9Cj4g Kwo+ICsjZGVmaW5lIEVMMl9TWVNSRUcoZWwyLCBlbDEsIHRyYW5zbGF0ZSkJXAo+ICsJW2VsMiAt IEZJUlNUX0VMMl9TWVNSRUddID0geyBlbDIsIGVsMSwgdHJhbnNsYXRlIH0KPiArI2RlZmluZSBQ VVJFX0VMMl9TWVNSRUcoZWwyKSBcCj4gKwlbZWwyIC0gRklSU1RfRUwyX1NZU1JFR10gPSB7IGVs MixfX0lOVkFMSURfU1lTUkVHX18sIE5VTEwgfQo+ICsvKgo+ICsgKiBBc3NvY2lhdGUgdkVMMiBy ZWdpc3RlcnMgdG8gdGhlaXIgRUwxIGNvdW50ZXJwYXJ0cyBvbiB0aGUgQ1BVLgo+ICsgKiBUaGUg dHJhbnNsYXRlIGZ1bmN0aW9uIGNhbiBiZSBOVUxMLCB3aGVuIHRoZSByZWdpc3RlciBsYXlvdXQg aXMgaWRlbnRpY2FsLgo+ICsgKi8KPiArc3RydWN0IGVsMl9zeXNyZWdfbWFwIHsKPiArCWludCBz eXNyZWc7CS8qIEVMMiByZWdpc3RlciBpbmRleCBpbnRvIHRoZSBhcnJheSBhYm92ZSAqLwo+ICsJ aW50IG1hcHBpbmc7CS8qIGFzc29jaWF0ZWQgRUwxIHJlZ2lzdGVyICovCj4gKwl1NjQgKCp0cmFu c2xhdGUpKHU2NCB2YWx1ZSk7Cj4gK30gbmVzdGVkX3N5c3JlZ19tYXBbTlJfU1lTX1JFR1MgLSBG SVJTVF9FTDJfU1lTUkVHXSA9IHsKPiArCVBVUkVfRUwyX1NZU1JFRyggVlBJRFJfRUwyICksCj4g KwlQVVJFX0VMMl9TWVNSRUcoIFZNUElEUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZU1JFRyggQUNU TFJfRUwyICksCj4gKwlQVVJFX0VMMl9TWVNSRUcoIEhDUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZ U1JFRyggTURDUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZU1JFRyggSFNUUl9FTDIgKSwKPiArCVBV UkVfRUwyX1NZU1JFRyggSEFDUl9FTDIgKSwKPiArCVBVUkVfRUwyX1NZU1JFRyggVlRUQlJfRUwy ICksCj4gKwlQVVJFX0VMMl9TWVNSRUcoIFZUQ1JfRUwyICksCj4gKwlQVVJFX0VMMl9TWVNSRUco IFJWQkFSX0VMMiApLAo+ICsJUFVSRV9FTDJfU1lTUkVHKCBSTVJfRUwyICksCj4gKwlQVVJFX0VM Ml9TWVNSRUcoIFRQSURSX0VMMiApLAo+ICsJUFVSRV9FTDJfU1lTUkVHKCBDTlRWT0ZGX0VMMiAp LAo+ICsJUFVSRV9FTDJfU1lTUkVHKCBDTlRIQ1RMX0VMMiApLApJIGRvbid0IHRoaW5rIGhhdmlu ZyBDTlRIQ1RMX0VMMiBhcyBhICJwdXJlIiBFTDIgcmVnaXN0ZXIgaXMgdGhlIHJpZ2h0IGFwcHJv YWNoLgpNb3JlIGRldGFpbHMgYmVsb3cuCj4gKwlQVVJFX0VMMl9TWVNSRUcoIEhQRkFSX0VMMiAp LAo+ICsJRUwyX1NZU1JFRyggICAgICBTQ1RMUl9FTDIsICBTQ1RMUl9FTDEsICAgICAgdHJhbnNs YXRlX3NjdGxyICksCj4gKwlFTDJfU1lTUkVHKCAgICAgIENQVFJfRUwyLCAgIENQQUNSX0VMMSwg ICAgICB0cmFuc2xhdGVfY3B0ciAgKSwKPiArCUVMMl9TWVNSRUcoICAgICAgVFRCUjBfRUwyLCAg VFRCUjBfRUwxLCAgICAgIHRyYW5zbGF0ZV90dGJyMCApLAo+ICsJRUwyX1NZU1JFRyggICAgICBU VEJSMV9FTDIsICBUVEJSMV9FTDEsICAgICAgTlVMTCAgICAgICAgICAgICksCj4gKwlFTDJfU1lT UkVHKCAgICAgIFRDUl9FTDIsICAgIFRDUl9FTDEsICAgICAgICB0cmFuc2xhdGVfdGNyICAgKSwK PiArCUVMMl9TWVNSRUcoICAgICAgVkJBUl9FTDIsICAgVkJBUl9FTDEsICAgICAgIE5VTEwgICAg ICAgICAgICApLAo+ICsJRUwyX1NZU1JFRyggICAgICBBRlNSMF9FTDIsICBBRlNSMF9FTDEsICAg ICAgTlVMTCAgICAgICAgICAgICksCj4gKwlFTDJfU1lTUkVHKCAgICAgIEFGU1IxX0VMMiwgIEFG U1IxX0VMMSwgICAgICBOVUxMICAgICAgICAgICAgKSwKPiArCUVMMl9TWVNSRUcoICAgICAgRVNS X0VMMiwgICAgRVNSX0VMMSwgICAgICAgIE5VTEwgICAgICAgICAgICApLAo+ICsJRUwyX1NZU1JF RyggICAgICBGQVJfRUwyLCAgICBGQVJfRUwxLCAgICAgICAgTlVMTCAgICAgICAgICAgICksCj4g KwlFTDJfU1lTUkVHKCAgICAgIE1BSVJfRUwyLCAgIE1BSVJfRUwxLCAgICAgICBOVUxMICAgICAg ICAgICAgKSwKPiArCUVMMl9TWVNSRUcoICAgICAgQU1BSVJfRUwyLCAgQU1BSVJfRUwxLCAgICAg IE5VTEwgICAgICAgICAgICApLAo+ICt9Owo+ICsKPiArc3RhdGljCj4gK2NvbnN0IHN0cnVjdCBl bDJfc3lzcmVnX21hcCAqZmluZF9lbDJfc3lzcmVnKGNvbnN0IHN0cnVjdCBlbDJfc3lzcmVnX21h cCAqbWFwLAo+ICsJCQkJCSAgICAgaW50IHJlZykKPiArewo+ICsJY29uc3Qgc3RydWN0IGVsMl9z eXNyZWdfbWFwICplbnRyeTsKPiArCj4gKwlpZiAoIXN5c3JlZ19pc19lbDIocmVnKSkKPiArCQly ZXR1cm4gTlVMTDsKPiArCj4gKwllbnRyeSA9ICZuZXN0ZWRfc3lzcmVnX21hcFtyZWcgLSBGSVJT VF9FTDJfU1lTUkVHXTsKPiArCWlmIChlbnRyeS0+c3lzcmVnID09IF9fSU5WQUxJRF9TWVNSRUdf XykKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gZW50cnk7Cj4gK30KPiArCj4gIHU2 NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByZWcp Cj4gIHsKPiArCj4gIAlpZiAoIXZjcHUtPmFyY2guc3lzcmVnc19sb2FkZWRfb25fY3B1KQo+ICAJ CWdvdG8gaW1tZWRpYXRlX3JlYWQ7Cj4gIAo+ICsJaWYgKHVubGlrZWx5KHN5c3JlZ19pc19lbDIo cmVnKSkpIHsKPiArCQljb25zdCBzdHJ1Y3QgZWwyX3N5c3JlZ19tYXAgKmVsMl9yZWc7Cj4gKwo+ ICsJCWlmICghaXNfaHlwX2N0eHQodmNwdSkpCj4gKwkJCWdvdG8gaW1tZWRpYXRlX3JlYWQ7Cj4g Kwo+ICsJCWVsMl9yZWcgPSBmaW5kX2VsMl9zeXNyZWcobmVzdGVkX3N5c3JlZ19tYXAsIHJlZyk7 Cj4gKwkJaWYgKGVsMl9yZWcpIHsKPiArCQkJLyoKPiArCQkJICogSWYgdGhpcyByZWdpc3RlciBk b2VzIG5vdCBoYXZlIGFuIEVMMSBjb3VudGVycGFydCwKPiArCQkJICogdGhlbiByZWFkIHRoZSBz dG9yZWQgRUwyIHZlcnNpb24uCj4gKwkJCSAqLwo+ICsJCQlpZiAoZWwyX3JlZy0+bWFwcGluZyA9 PSBfX0lOVkFMSURfU1lTUkVHX18pCj4gKwkJCQlnb3RvIGltbWVkaWF0ZV9yZWFkOwoKV2l0aCBD TlRIQ1RMX0VMMiBhcyBhICJwdXJlIiBFTDIgcmVnaXN0ZXIsIHJlYWRzIChhbmQgd3JpdGVzLCBp bgp2Y3B1X3dyaXRlX3N5c19yZWcpIHdpbGwgZ28gdG8gbWVtb3J5LiBIb3dldmVyLCB3aGVuIHZo ZSBpcyBlbmFibGVkLCBDTlRIQ1RMX0VMMgpoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIENOVEtDVExf RUwxIGFuZCByZWFkcy93cml0ZXMgdG8gQ05US0NUTF9FTDEgc2hvdWxkIGJlCnJlZmxlY3RlZCBp biB0aGUgdmFsdWUgb2YgQ05USENUTF9FTDIgYWNjb3JkaW5nIHRvIHRoZSBwc2V1ZG9jb2RlIGZv ciBhY2Nlc3NpbmcKQ05US0NUTF9FTDEgKEFSTSBEREkgMDQ4N0QuYiwgcGFnZSBEMTItMzQ5Niku IFRoaXMgZG9lc24ndCBoYXBwZW4gZm9yIHZoZSBndWVzdApoeXBlcnZpc29ycyBiZWNhdXNlIEVM MiBpcyBkZWNsYXJlZCBhcyBhICJwdXJlIiBFTDIgcmVnaXN0ZXIuCgpJIGhhdmUgdGVzdGVkIHRo YXQgd2l0aCB0aGlzIGhhY2sgZm9yIHJlYWRzIChmdW5jdGlvbiBjaG9zZW4gYXQgcmFuZG9tKToK CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vYXJtLmMgYi92aXJ0L2t2bS9hcm0vYXJtLmMKaW5k ZXggMDRlNTU0Y2FlM2EyLi4zYTYyNjA3NDU2ODAgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2FybS9h cm0uYworKysgYi92aXJ0L2t2bS9hcm0vYXJtLmMKQEAgLTY1Myw4ICs2NTMsMjIgQEAgc3RhdGlj IHZvaWQgY2hlY2tfdmNwdV9yZXF1ZXN0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCsKgICovCsKg aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0 IGt2bV9ydW4gKnJ1bikKwqB7CivCoMKgwqDCoMKgwqAgdTY0IGNudGtjdGwsIGNudGhjdGw7CsKg wqDCoMKgwqDCoMKgIGludCByZXQ7CsKgCivCoMKgwqDCoMKgwqAgLyogQ2hlY2sgdGhhdCBDTlRL Q1RMX0VMMSB3cml0ZXMgYXJlIHJlZGlyZWN0ZWQgdG8gQ05USENUTF9FTDIgKi8KK8KgwqDCoMKg wqDCoCBpZiAoaGFzX3ZoZSgpKSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIENo ZWNrIHRoYXQgQ05US0NUTF9FTDEgcmVhZHMgYXJlIHJlZGlyZWN0ZWQgdG8gQ05USENUTF9FTDIg Ki8KK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY250a2N0bCA9IHJlYWRfc3lzcmVnKGNu dGtjdGxfZWwxKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY250aGN0bCA9IGNudGtj dGwgXiAxOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0ZV9zeXNyZWcoY250aGN0 bCwgY250aGN0bF9lbDIpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbnRrY3RsID0g cmVhZF9zeXNyZWcoY250a2N0bF9lbDEpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBC VUdfT04oY250a2N0bCAhPSBjbnRoY3RsKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg LyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjbnRoY3RsIF49IDE7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdyaXRlX3N5c3Jl ZyhjbnRoY3RsLCBjbnRoY3RsX2VsMik7CivCoMKgwqDCoMKgwqAgfQorCsKgwqDCoMKgwqDCoMKg IGlmICh1bmxpa2VseSgha3ZtX3ZjcHVfaW5pdGlhbGl6ZWQodmNwdSkpKQrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FWEVDOwoKYW5kIHRoaXMgaGFjayBmb3Igd3Jp dGVzOgoKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS9hcm0uYyBiL3ZpcnQva3ZtL2FybS9hcm0u YwppbmRleCAwNGU1NTRjYWUzYTIuLjFjZmU0N2I2ZmE5OSAxMDA2NDQKLS0tIGEvdmlydC9rdm0v YXJtL2FybS5jCisrKyBiL3ZpcnQva3ZtL2FybS9hcm0uYwpAQCAtNjUzLDggKzY1MywyMSBAQCBz dGF0aWMgdm9pZCBjaGVja192Y3B1X3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKwqAg Ki8KwqBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBz dHJ1Y3Qga3ZtX3J1biAqcnVuKQrCoHsKK8KgwqDCoMKgwqDCoCB1NjQgY250a2N0bCwgY250aGN0 bDsKwqDCoMKgwqDCoMKgwqAgaW50IHJldDsKwqAKK8KgwqDCoMKgwqDCoCAvKiBDaGVjayB0aGF0 IENOVEtDVExfRUwxIHdyaXRlcyBhcmUgcmVkaXJlY3RlZCB0byBDTlRIQ1RMX0VMMiAqLworwqDC oMKgwqDCoMKgIGlmIChoYXNfdmhlKCkpIHsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y250a2N0bCA9IHJlYWRfc3lzcmVnKGNudGtjdGxfZWwxKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY250a2N0bCBePSAxOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3cml0 ZV9zeXNyZWcoY250a2N0bCwgY250a2N0bF9lbDEpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjbnRoY3RsID0gcmVhZF9zeXNyZWcoY250aGN0bF9lbDIpOworwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBCVUdfT04oY250a2N0bCAhPSBjbnRoY3RsKTsKK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjbnRrY3RsIF49IDE7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHdyaXRlX3N5c3JlZyhjbnRrY3RsLCBjbnRrY3RsX2VsMSk7CivCoMKgwqDCoMKgwqAgfQor CsKgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseSgha3ZtX3ZjcHVfaW5pdGlhbGl6ZWQodmNwdSkp KQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FWEVDOwoKVGhlIEJV R19PTiBpcyBub3QgdHJpZ2dlcmVkIG9uIGJhcmVtZXRhbCwgYnV0IGlzIHRyaWdnZXJlZCB3aGVu IHJ1bm5pbmcgYXMgYSBMMQpndWVzdCBoeXBlcnZpc29yLgoKQW5vdGhlciBpc3N1ZSB3aXRoIENO VEhDVExfRUwyIGJlaW5nIGEgInB1cmUiIEVMMiByZWdpc3RlciBpcyB0aGF0IHdpdGggbm9uLXZo ZQpndWVzdHMsIHdyaXRlcyB0byBDTlRIQ1RMX0VMMiBhcmVuJ3QgdHJhbnNsYXRlZCBhbmQgd3Jp dHRlbiB0byBDTlRLQ1RMX0VMMS4KClRoaXMgcGF0Y2ggc2VlbXMgdG8gZml4IHRoZSBpc3N1ZXMg d2l0aCB2aGUgYW5kIG5vbi12aGUgZ3Vlc3QgaHlwZXJ2aXNvcnMKKHRlc3RlZCB3aXRoIGJvb3Rp bmcgYSBMMiBndWVzdCk6CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBi L2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKaW5kZXggMTIzNWE4OGVjNTc1Li5iZDIxZjBmNDVh ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKKysrIGIvYXJjaC9hcm02 NC9rdm0vc3lzX3JlZ3MuYwpAQCAtMTUzLDcgKzE1Myw2IEBAIHN0cnVjdCBlbDJfc3lzcmVnX21h cCB7CsKgwqDCoMKgwqDCoMKgIFBVUkVfRUwyX1NZU1JFRyggUlZCQVJfRUwyICksCsKgwqDCoMKg wqDCoMKgIFBVUkVfRUwyX1NZU1JFRyggUk1SX0VMMiApLArCoMKgwqDCoMKgwqDCoCBQVVJFX0VM Ml9TWVNSRUcoIFRQSURSX0VMMiApLAotwqDCoMKgwqDCoMKgIFBVUkVfRUwyX1NZU1JFRyggQ05U SENUTF9FTDIgKSwKwqDCoMKgwqDCoMKgwqAgUFVSRV9FTDJfU1lTUkVHKCBIUEZBUl9FTDIgKSwK wqDCoMKgwqDCoMKgwqAgRUwyX1NZU1JFRyjCoMKgwqDCoMKgIFNDVExSX0VMMizCoCBTQ1RMUl9F TDEswqDCoMKgwqDCoCB0cmFuc2xhdGVfc2N0bHIgKSwKwqDCoMKgwqDCoMKgwqAgRUwyX1NZU1JF RyjCoMKgwqDCoMKgIENQVFJfRUwyLMKgwqAgQ1BBQ1JfRUwxLMKgwqDCoMKgwqAgdHJhbnNsYXRl X2NwdHLCoCApLApAQCAtMTY3LDYgKzE2Niw3IEBAIHN0cnVjdCBlbDJfc3lzcmVnX21hcCB7CsKg wqDCoMKgwqDCoMKgIEVMMl9TWVNSRUcowqDCoMKgwqDCoCBGQVJfRUwyLMKgwqDCoCBGQVJfRUwx LMKgwqDCoMKgwqDCoMKgIE5VTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICksCsKgwqDCoMKgwqDC oMKgIEVMMl9TWVNSRUcowqDCoMKgwqDCoCBNQUlSX0VMMizCoMKgIE1BSVJfRUwxLMKgwqDCoMKg wqDCoCBOVUxMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApLArCoMKgwqDCoMKgwqDCoCBFTDJfU1lT UkVHKMKgwqDCoMKgwqAgQU1BSVJfRUwyLMKgIEFNQUlSX0VMMSzCoMKgwqDCoMKgIE5VTEzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICksCivCoMKgwqDCoMKgwqAgRUwyX1NZU1JFRyjCoMKgwqDCoMKg IENOVEhDVExfRUwyLENOVEtDVExfRUwxLMKgwqDCoCB0cmFuc2xhdGVfY250aGN0bCksCsKgfTsK wqAKwqBzdGF0aWMKCj4gKwo+ICsJCQkvKiBHZXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUg RUwxIGNvdW50ZXJwYXJ0LiAqLwo+ICsJCQlyZWcgPSBlbDJfcmVnLT5tYXBwaW5nOwo+ICsJCX0K PiArCX0gZWxzZSB7Cj4gKwkJLyogRUwxIHJlZ2lzdGVyIGNhbid0IGJlIG9uIHRoZSBDUFUgaWYg dGhlIGd1ZXN0IGlzIGluIHZFTDIuICovCj4gKwkJaWYgKHVubGlrZWx5KGlzX2h5cF9jdHh0KHZj cHUpKSkKPiArCQkJZ290byBpbW1lZGlhdGVfcmVhZDsKPiArCX0KPiArCj4gIAkvKgo+ICAJICog U3lzdGVtIHJlZ2lzdGVycyBsaXN0ZWQgaW4gdGhlIHN3aXRjaCBhcmUgbm90IHNhdmVkIG9uIGV2 ZXJ5Cj4gIAkgKiBleGl0IGZyb20gdGhlIGd1ZXN0IGJ1dCBhcmUgb25seSBzYXZlZCBvbiB2Y3B1 X3B1dC4KPiBAQCAtMTE0LDYgKzI0NSw4IEBAIHU2NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByZWcpCj4gIAljYXNlIERBQ1IzMl9FTDI6CXJldHVy biByZWFkX3N5c3JlZ19zKFNZU19EQUNSMzJfRUwyKTsKPiAgCWNhc2UgSUZTUjMyX0VMMjoJcmV0 dXJuIHJlYWRfc3lzcmVnX3MoU1lTX0lGU1IzMl9FTDIpOwo+ICAJY2FzZSBEQkdWQ1IzMl9FTDI6 CXJldHVybiByZWFkX3N5c3JlZ19zKFNZU19EQkdWQ1IzMl9FTDIpOwo+ICsJY2FzZSBTUF9FTDI6 CQlyZXR1cm4gcmVhZF9zeXNyZWcoc3BfZWwxKTsKPiArCWNhc2UgRUxSX0VMMjoJCXJldHVybiBy ZWFkX3N5c3JlZ19lbDEoU1lTX0VMUik7Cj4gIAl9Cj4gIAo+ICBpbW1lZGlhdGVfcmVhZDoKPiBA QCAtMTI1LDYgKzI1OCwzNCBAQCB2b2lkIHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIHU2NCB2YWwsIGludCByZWcpCj4gIAlpZiAoIXZjcHUtPmFyY2guc3lzcmVnc19s b2FkZWRfb25fY3B1KQo+ICAJCWdvdG8gaW1tZWRpYXRlX3dyaXRlOwo+ICAKPiArCWlmICh1bmxp a2VseShzeXNyZWdfaXNfZWwyKHJlZykpKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGVsMl9zeXNyZWdf bWFwICplbDJfcmVnOwo+ICsKPiArCQlpZiAoIWlzX2h5cF9jdHh0KHZjcHUpKQo+ICsJCQlnb3Rv IGltbWVkaWF0ZV93cml0ZTsKPiArCj4gKwkJLyogU3RvcmUgdGhlIEVMMiB2ZXJzaW9uIGluIHRo ZSBzeXNyZWdzIGFycmF5LiAqLwo+ICsJCV9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgPSB2YWw7 Cj4gKwo+ICsJCWVsMl9yZWcgPSBmaW5kX2VsMl9zeXNyZWcobmVzdGVkX3N5c3JlZ19tYXAsIHJl Zyk7Cj4gKwkJaWYgKGVsMl9yZWcpIHsKPiArCQkJLyogRG9lcyB0aGlzIHJlZ2lzdGVyIGhhdmUg YW4gRUwxIGNvdW50ZXJwYXJ0PyAqLwo+ICsJCQlpZiAoZWwyX3JlZy0+bWFwcGluZyA9PSBfX0lO VkFMSURfU1lTUkVHX18pCj4gKwkJCQlyZXR1cm47Cj4gKwo+ICsJCQlpZiAoIXZjcHVfZWwyX2Uy aF9pc19zZXQodmNwdSkgJiYKPiArCQkJICAgIGVsMl9yZWctPnRyYW5zbGF0ZSkKPiArCQkJCXZh bCA9IGVsMl9yZWctPnRyYW5zbGF0ZSh2YWwpOwo+ICsKPiArCQkJLyogUmVkaXJlY3QgdGhpcyB0 byB0aGUgRUwxIHZlcnNpb24gb2YgdGhlIHJlZ2lzdGVyLiAqLwo+ICsJCQlyZWcgPSBlbDJfcmVn LT5tYXBwaW5nOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJLyogRUwxIHJlZ2lzdGVyIGNhbid0 IGJlIG9uIHRoZSBDUFUgaWYgdGhlIGd1ZXN0IGlzIGluIHZFTDIuICovCj4gKwkJaWYgKHVubGlr ZWx5KGlzX2h5cF9jdHh0KHZjcHUpKSkKPiArCQkJZ290byBpbW1lZGlhdGVfd3JpdGU7Cj4gKwl9 Cj4gKwo+ICAJLyoKPiAgCSAqIFN5c3RlbSByZWdpc3RlcnMgbGlzdGVkIGluIHRoZSBzd2l0Y2gg YXJlIG5vdCByZXN0b3JlZCBvbiBldmVyeQo+ICAJICogZW50cnkgdG8gdGhlIGd1ZXN0IGJ1dCBh cmUgb25seSByZXN0b3JlZCBvbiB2Y3B1X2xvYWQuCj4gQEAgLTE1Nyw2ICszMTgsOCBAQCB2b2lk IHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGludCBy ZWcpCj4gIAljYXNlIERBQ1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0RBQ1IzMl9F TDIpOwlyZXR1cm47Cj4gIAljYXNlIElGU1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lT X0lGU1IzMl9FTDIpOwlyZXR1cm47Cj4gIAljYXNlIERCR1ZDUjMyX0VMMjoJd3JpdGVfc3lzcmVn X3ModmFsLCBTWVNfREJHVkNSMzJfRUwyKTsJcmV0dXJuOwo+ICsJY2FzZSBTUF9FTDI6CQl3cml0 ZV9zeXNyZWcodmFsLCBzcF9lbDEpOwkJcmV0dXJuOwo+ICsJY2FzZSBFTFJfRUwyOgkJd3JpdGVf c3lzcmVnX2VsMSh2YWwsIFNZU19FTFIpOwkJcmV0dXJuOwo+ICAJfQo+ICAKPiAgaW1tZWRpYXRl X3dyaXRlOgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=