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.2 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=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 5438BC3A59E for ; Wed, 21 Aug 2019 11:57:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1C51D2339F for ; Wed, 21 Aug 2019 11:57:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726945AbfHUL5x (ORCPT ); Wed, 21 Aug 2019 07:57:53 -0400 Received: from foss.arm.com ([217.140.110.172]:56478 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726351AbfHUL5x (ORCPT ); Wed, 21 Aug 2019 07:57:53 -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 C5E1F28; Wed, 21 Aug 2019 04:57:51 -0700 (PDT) Received: from [10.1.196.217] (e121566-lin.cambridge.arm.com [10.1.196.217]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D32B63F718; Wed, 21 Aug 2019 04:57:50 -0700 (PDT) Subject: Re: [PATCH 16/59] KVM: arm64: nv: Save/Restore vEL2 sysregs 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-17-marc.zyngier@arm.com> From: Alexandru Elisei Message-ID: Date: Wed, 21 Aug 2019 12:57:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20190621093843.220980-17-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:38 AM, Marc Zyngier wrote: > From: Andre Przywara > > Whenever we need to restore the guest's system registers to the CPU, we > now need to take care of the EL2 system registers as well. Most of them > are accessed via traps only, but some have an immediate effect and also > a guest running in VHE mode would expect them to be accessible via their > EL1 encoding, which we do not trap. > > Split the current __sysreg_{save,restore}_el1_state() functions into > handling common sysregs, then differentiate between the guest running in > vEL2 and vEL1. > > For vEL2 we write the virtual EL2 registers with an identical format directly > into their EL1 counterpart, and translate the few registers that have a > different format for the same effect on the execution when running a > non-VHE guest guest hypervisor. > > [ Commit message reworked and many bug fixes applied by Marc Zyngier > and Christoffer Dall. ] > > Signed-off-by: Andre Przywara > Signed-off-by: Marc Zyngier > Signed-off-by: Christoffer Dall > --- > arch/arm64/kvm/hyp/sysreg-sr.c | 160 +++++++++++++++++++++++++++++++-- > 1 file changed, 153 insertions(+), 7 deletions(-) > > diff --git a/arch/arm64/kvm/hyp/sysreg-sr.c b/arch/arm64/kvm/hyp/sysreg-sr.c > index 62866a68e852..2abb9c3ff24f 100644 > --- a/arch/arm64/kvm/hyp/sysreg-sr.c > +++ b/arch/arm64/kvm/hyp/sysreg-sr.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > > /* > * Non-VHE: Both host and guest must save everything. > @@ -51,11 +52,9 @@ static void __hyp_text __sysreg_save_user_state(struct kvm_cpu_context *ctxt) > ctxt->sys_regs[TPIDRRO_EL0] = read_sysreg(tpidrro_el0); > } > > -static void __hyp_text __sysreg_save_el1_state(struct kvm_cpu_context *ctxt) > +static void __hyp_text __sysreg_save_vel1_state(struct kvm_cpu_context *ctxt) > { > - ctxt->sys_regs[CSSELR_EL1] = read_sysreg(csselr_el1); > ctxt->sys_regs[SCTLR_EL1] = read_sysreg_el1(SYS_SCTLR); > - ctxt->sys_regs[ACTLR_EL1] = read_sysreg(actlr_el1); > ctxt->sys_regs[CPACR_EL1] = read_sysreg_el1(SYS_CPACR); > ctxt->sys_regs[TTBR0_EL1] = read_sysreg_el1(SYS_TTBR0); > ctxt->sys_regs[TTBR1_EL1] = read_sysreg_el1(SYS_TTBR1); > @@ -69,14 +68,58 @@ static void __hyp_text __sysreg_save_el1_state(struct kvm_cpu_context *ctxt) > ctxt->sys_regs[CONTEXTIDR_EL1] = read_sysreg_el1(SYS_CONTEXTIDR); > ctxt->sys_regs[AMAIR_EL1] = read_sysreg_el1(SYS_AMAIR); > ctxt->sys_regs[CNTKCTL_EL1] = read_sysreg_el1(SYS_CNTKCTL); > - ctxt->sys_regs[PAR_EL1] = read_sysreg(par_el1); > - ctxt->sys_regs[TPIDR_EL1] = read_sysreg(tpidr_el1); > > ctxt->gp_regs.sp_el1 = read_sysreg(sp_el1); > ctxt->gp_regs.elr_el1 = read_sysreg_el1(SYS_ELR); > ctxt->gp_regs.spsr[KVM_SPSR_EL1]= read_sysreg_el1(SYS_SPSR); > } > > +static void __sysreg_save_vel2_state(struct kvm_cpu_context *ctxt) > +{ > + ctxt->sys_regs[ESR_EL2] = read_sysreg_el1(SYS_ESR); > + ctxt->sys_regs[AFSR0_EL2] = read_sysreg_el1(SYS_AFSR0); > + ctxt->sys_regs[AFSR1_EL2] = read_sysreg_el1(SYS_AFSR1); > + ctxt->sys_regs[FAR_EL2] = read_sysreg_el1(SYS_FAR); > + ctxt->sys_regs[MAIR_EL2] = read_sysreg_el1(SYS_MAIR); > + ctxt->sys_regs[VBAR_EL2] = read_sysreg_el1(SYS_VBAR); > + ctxt->sys_regs[CONTEXTIDR_EL2] = read_sysreg_el1(SYS_CONTEXTIDR); > + ctxt->sys_regs[AMAIR_EL2] = read_sysreg_el1(SYS_AMAIR); > + > + /* > + * In VHE mode those registers are compatible between EL1 and EL2, > + * and the guest uses the _EL1 versions on the CPU naturally. > + * So we save them into their _EL2 versions here. > + * For nVHE mode we trap accesses to those registers, so our > + * _EL2 copy in sys_regs[] is always up-to-date and we don't need > + * to save anything here. > + */ > + if (__vcpu_el2_e2h_is_set(ctxt)) { > + ctxt->sys_regs[SCTLR_EL2] = read_sysreg_el1(SYS_SCTLR); > + ctxt->sys_regs[CPTR_EL2] = read_sysreg_el1(SYS_CPACR); > + ctxt->sys_regs[TTBR0_EL2] = read_sysreg_el1(SYS_TTBR0); > + ctxt->sys_regs[TTBR1_EL2] = read_sysreg_el1(SYS_TTBR1); > + ctxt->sys_regs[TCR_EL2] = read_sysreg_el1(SYS_TCR); > + ctxt->sys_regs[CNTHCTL_EL2] = read_sysreg_el1(SYS_CNTKCTL); > + } This can break guests that run with VHE on, then disable it. I stumbled into this while working on kvm-unit-tests, which uses TTBR0 for the translation tables. Let's consider the following scenario: 1. Guest sets HCR_EL2.E2H 2. Guest programs translation tables in TTBR0_EL1, which should reflect in TTBR0_EL2. 3. Guest enabled MMU and does stuff. 4. Guest disables MMU and clears HCR_EL2.E2H 5. Guest turns MMU on. It doesn't change TTBR0_EL2, because it will use the same translation tables as when running with E2H set. 6. The vcpu gets scheduled out. E2H is not set, so the value that the guest programmed in hardware TTBR0_EL1 won't be copied to virtual TTBR0_EL2. 7. The vcpu gets scheduled back in. KVM will write the reset value for virtual TTBR0_EL2 (which is 0x0). 8. The guest hangs. I think this is actually a symptom of a deeper issue. When E2H is cleared, the values that the guest wrote to the EL1 registers aren't immediately reflected in the virtual EL2 registers, as it happens on real hardware. Instead, some of the hardware values from the EL1 registers are copied to the corresponding EL2 registers on the next vcpu_put, which happens at a later time. I am thinking that something like this will fix the issues (it did fix disabling VHE in kvm-unit-tests): diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 1d896113f1f8..f2b5a39762d0 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -333,7 +333,8 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg)                  * to reverse-translate virtual EL2 system registers for a                  * non-VHE guest hypervisor.                  */ -               __vcpu_sys_reg(vcpu, reg) = val; +               if (reg != HCR_EL2) +                       __vcpu_sys_reg(vcpu, reg) = val;                   switch (reg) {                 case ELR_EL2: @@ -370,7 +371,17 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg)                 return;    memory_write: -        __vcpu_sys_reg(vcpu, reg) = val; +       if (reg == HCR_EL2 && vcpu_el2_e2h_is_set(vcpu) && !(val & HCR_E2H)) { +               preempt_disable(); +               kvm_arch_vcpu_put(vcpu); + +               __vcpu_sys_reg(vcpu, reg) = val; + +               kvm_arch_vcpu_load(vcpu, smp_processor_id()); +               preempt_enable(); +       } else { +                __vcpu_sys_reg(vcpu, reg) = val; +       }  }    /* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */ I don't think there's any need to convert EL1 registers to their non-vhe EL2 format because of how RES0/RES1 is defined in the architecture glossary (ARM DDI 0487E.a, page 7893 for RES0 and 7894 for RES1): "If a bit is RES0 only in some contexts: A read of the bit must return the value last successfully written to the bit, by either a direct or an indirect write, regardless of the use of the register when the bit was written [..] While the use of the register is such that the bit is described as RES0, the value of the bit must have no effect on the operation of the PE, other than determining the value read back from that bit, unless this Manual explicitly defines additional properties for the bit" We have the translate functions that should take care of converting the non-vhe EL2 format to the hardware EL1 format. As an aside, the diff looks weird because the vcpu_write_sys_reg is very complex, there are a LOT of exit points from the function, and the register value is written twice for some registers. I think it's worth considering making the function simpler, maybe splitting it into two separate functions, one for EL2 registers, one for regular registers. Here's the kvm-unit-tests diff that I used to spot the bug. It's very far from being correct, but the test is able to finish with the fix (it hangs otherwise). You can apply it on top of 2130fd4154ad ("tscdeadline_latency: Check condition first before loop"): diff --git a/arm/cstart64.S b/arm/cstart64.S index b0e8baa1a23a..01357b3b116b 100644 --- a/arm/cstart64.S +++ b/arm/cstart64.S @@ -51,6 +51,18 @@ start:      b    1b    1: +    mrs    x4, CurrentEL +    cmp    x4, CurrentEL_EL2 +    b.ne    1f +    mrs    x4, mpidr_el1 +    msr    vmpidr_el2, x4 +    mrs    x4, midr_el1 +    msr    vpidr_el2, x4 +    ldr    x4, =(HCR_EL2_TGE | HCR_EL2_E2H) +    msr    hcr_el2, x4 +    isb + +1:      /* set up stack */      mov    x4, #1      msr    spsel, x4 @@ -101,6 +113,18 @@ get_mmu_off:    .globl secondary_entry  secondary_entry: +    mrs    x0, CurrentEL +    cmp    x0, CurrentEL_EL2 +    b.ne    1f +    mrs    x0, mpidr_el1 +    msr    vmpidr_el2, x0 +    mrs    x0, midr_el1 +    msr    vpidr_el2, x0 +    ldr    x0, =(HCR_EL2_TGE | HCR_EL2_E2H) +    msr    hcr_el2, x0 +    isb + +1:      /* Enable FP/ASIMD */      mov    x0, #(3 << 20)      msr    cpacr_el1, x0 @@ -194,6 +218,33 @@ asm_mmu_enable:        ret   +asm_mmu_enable_hyp: +       ic      iallu +       tlbi    alle2is +       dsb     ish + +        /* TCR */ +       ldr     x1, =TCR_EL2_RES1 |                     \ +                    TCR_T0SZ(VA_BITS) |                \ +                    TCR_TG0_64K |                      \ +                    TCR_IRGN0_WBWA | TCR_ORGN0_WBWA |  \ +                    TCR_SH0_IS +       mrs     x2, id_aa64mmfr0_el1 +       bfi     x1, x2, #TCR_EL2_PS_SHIFT, #3 +       msr     tcr_el2, x1 + +       /* Same MAIR and TTBR0 as in VHE mode */ + +       /* SCTLR */ +       ldr     x1, =SCTLR_EL2_RES1 |                   \ +                    SCTLR_EL2_C |                      \ +                    SCTLR_EL2_I |                      \ +                    SCTLR_EL2_M +       msr     sctlr_el2, x1 +       isb + +       ret +  .globl asm_mmu_disable  asm_mmu_disable:      mrs    x0, sctlr_el1 @@ -202,6 +253,18 @@ asm_mmu_disable:      isb      ret   +.globl asm_disable_vhe +asm_disable_vhe: +    str     x30, [sp, #-16]! + +    bl      asm_mmu_disable +    msr     hcr_el2, xzr +    isb +    bl      asm_mmu_enable_hyp + +    ldr     x30, [sp], #16 +    ret +  /*   * Vectors   * Adapted from arch/arm64/kernel/entry.S diff --git a/arm/selftest.c b/arm/selftest.c index 28a17f7a7531..68a18036221b 100644 --- a/arm/selftest.c +++ b/arm/selftest.c @@ -287,6 +287,12 @@ static void user_psci_system_off(struct pt_regs *regs, unsigned int esr)  {      __user_psci_system_off();  } + +extern void asm_disable_vhe(void); +static void check_el2(void) +{ +    asm_disable_vhe(); +}  #endif    static void check_vectors(void *arg __unused) @@ -369,6 +375,10 @@ int main(int argc, char **argv)          report("PSCI version", psci_check());          on_cpus(cpu_report, NULL);   +    } else if (strcmp(argv[1], "el2") == 0) { + +        check_el2(); +      } else {          printf("Unknown subtest\n");          abort(); diff --git a/lib/arm/psci.c b/lib/arm/psci.c index c3d399064ae3..5ef1c0386ce1 100644 --- a/lib/arm/psci.c +++ b/lib/arm/psci.c @@ -16,7 +16,7 @@ int psci_invoke(unsigned long function_id, unsigned long arg0,          unsigned long arg1, unsigned long arg2)  {      asm volatile( -        "hvc #0" +        "smc #0"      : "+r" (function_id)      : "r" (arg0), "r" (arg1), "r" (arg2));      return function_id; diff --git a/lib/arm64/asm/pgtable-hwdef.h b/lib/arm64/asm/pgtable-hwdef.h index 045a3ce12645..6b80e34dda0c 100644 --- a/lib/arm64/asm/pgtable-hwdef.h +++ b/lib/arm64/asm/pgtable-hwdef.h @@ -95,18 +95,42 @@  /*   * TCR flags.   */ -#define TCR_TxSZ(x)        (((UL(64) - (x)) << 16) | ((UL(64) - (x)) << 0)) -#define TCR_IRGN_NC        ((UL(0) << 8) | (UL(0) << 24)) -#define TCR_IRGN_WBWA        ((UL(1) << 8) | (UL(1) << 24)) -#define TCR_IRGN_WT        ((UL(2) << 8) | (UL(2) << 24)) -#define TCR_IRGN_WBnWA        ((UL(3) << 8) | (UL(3) << 24)) -#define TCR_IRGN_MASK        ((UL(3) << 8) | (UL(3) << 24)) -#define TCR_ORGN_NC        ((UL(0) << 10) | (UL(0) << 26)) -#define TCR_ORGN_WBWA        ((UL(1) << 10) | (UL(1) << 26)) -#define TCR_ORGN_WT        ((UL(2) << 10) | (UL(2) << 26)) -#define TCR_ORGN_WBnWA        ((UL(3) << 10) | (UL(3) << 26)) -#define TCR_ORGN_MASK        ((UL(3) << 10) | (UL(3) << 26)) -#define TCR_SHARED        ((UL(3) << 12) | (UL(3) << 28)) +#define TCR_T0SZ(x)        ((UL(64) - (x)) << 0) +#define TCR_T1SZ(x)        ((UL(64) - (x)) << 16) +#define TCR_TxSZ(x)        (TCR_T0SZ(x) | TCR_T1SZ(x)) +#define TCR_IRGN0_NC        (UL(0) << 8) +#define TCR_IRGN1_NC        (UL(0) << 24) +#define TCR_IRGN_NC        (TCR_IRGN0_NC | TCR_IRGN1_NC) +#define TCR_IRGN0_WBWA        (UL(1) << 8) +#define TCR_IRGN1_WBWA        (UL(1) << 24) +#define TCR_IRGN_WBWA        (TCR_IRGN0_WBWA | TCR_IRGN1_WBWA) +#define TCR_IRGN0_WT        (UL(2) << 8) +#define TCR_IRGN1_WT        (UL(2) << 24) +#define TCR_IRGN_WT        (TCR_IRGN0_WT | TCR_IRGN1_WT) +#define TCR_IRGN0_WBnWA        (UL(3) << 8) +#define TCR_IRGN1_WBnWA        (UL(3) << 24) +#define TCR_IRGN_WBnWA        (TCR_IRGN0_WBnWA | TCR_IRGN1_WBnWA) +#define TCR_IRGN0_MASK        (UL(3) << 8) +#define TCR_IRGN1_MASK        (UL(3) << 24) +#define TCR_IRGN_MASK        (TCR_IRGN0_MASK | TCR_IRGN1_MASK) +#define TCR_ORGN0_NC        (UL(0) << 10) +#define TCR_ORGN1_NC        (UL(0) << 26) +#define TCR_ORGN_NC        (TCR_ORGN0_NC | TCR_ORGN1_NC) +#define TCR_ORGN0_WBWA        (UL(1) << 10) +#define TCR_ORGN1_WBWA        (UL(1) << 26) +#define TCR_ORGN_WBWA        (TCR_ORGN0_WBWA | TCR_ORGN1_WBWA) +#define TCR_ORGN0_WT        (UL(2) << 10) +#define TCR_ORGN1_WT        (UL(2) << 26) +#define TCR_ORGN_WT        (TCR_ORGN0_WT | TCR_ORGN1_WT) +#define TCR_ORGN0_WBnWA        (UL(3) << 8) +#define TCR_ORGN1_WBnWA        (UL(3) << 24) +#define TCR_ORGN_WBnWA        (TCR_ORGN0_WBnWA | TCR_ORGN1_WBnWA) +#define TCR_ORGN0_MASK        (UL(3) << 10) +#define TCR_ORGN1_MASK        (UL(3) << 26) +#define TCR_ORGN_MASK        (TCR_ORGN0_MASK | TCR_ORGN1_MASK) +#define TCR_SH0_IS        (UL(3) << 12) +#define TCR_SH1_IS        (UL(3) << 28) +#define TCR_SHARED        (TCR_SH0_IS | TCR_SH1_IS)  #define TCR_TG0_4K        (UL(0) << 14)  #define TCR_TG0_64K        (UL(1) << 14)  #define TCR_TG0_16K        (UL(2) << 14) @@ -116,6 +140,9 @@  #define TCR_ASID16        (UL(1) << 36)  #define TCR_TBI0        (UL(1) << 37)   +#define TCR_EL2_RES1        ((UL(1) << 31) | (UL(1) << 23)) +#define TCR_EL2_PS_SHIFT    16 +  /*   * Memory types available.   */ diff --git a/lib/arm64/asm/processor.h b/lib/arm64/asm/processor.h index 1d9223f728a5..b2136acda743 100644 --- a/lib/arm64/asm/processor.h +++ b/lib/arm64/asm/processor.h @@ -16,6 +16,16 @@  #define SCTLR_EL1_A    (1 << 1)  #define SCTLR_EL1_M    (1 << 0)   +#define HCR_EL2_TGE    (1 << 27) +#define HCR_EL2_E2H    (1 << 34) + +#define SCTLR_EL2_RES1    ((UL(3) << 28) | (UL(3) << 22) |    \ +            (UL(1) << 18) | (UL(1) << 16) |        \ +            (UL(1) << 11) | (UL(3) << 4)) +#define SCTLR_EL2_I    SCTLR_EL1_I +#define SCTLR_EL2_C    SCTLR_EL1_C +#define SCTLR_EL2_M    SCTLR_EL1_M +  #ifndef __ASSEMBLY__  #include  #include To run it: lkvm run -f selftest.flat -c 1 -m 128 -p el2 --nested --irqchip gicv3 --console serial Thanks, Alex 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.2 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=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 DB695C3A59E for ; Wed, 21 Aug 2019 11:57:59 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 5FC6922CF7 for ; Wed, 21 Aug 2019 11:57:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5FC6922CF7 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 9F7E54A52F; Wed, 21 Aug 2019 07:57:58 -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 vfaCflF9+1Ra; Wed, 21 Aug 2019 07:57:56 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 9C7B84A534; Wed, 21 Aug 2019 07:57:56 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id A94024A534 for ; Wed, 21 Aug 2019 07:57:54 -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 HOolp3CGBkLv for ; Wed, 21 Aug 2019 07:57:52 -0400 (EDT) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 708B24A52F for ; Wed, 21 Aug 2019 07:57:52 -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 C5E1F28; Wed, 21 Aug 2019 04:57:51 -0700 (PDT) Received: from [10.1.196.217] (e121566-lin.cambridge.arm.com [10.1.196.217]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D32B63F718; Wed, 21 Aug 2019 04:57:50 -0700 (PDT) Subject: Re: [PATCH 16/59] KVM: arm64: nv: Save/Restore vEL2 sysregs 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-17-marc.zyngier@arm.com> From: Alexandru Elisei Message-ID: Date: Wed, 21 Aug 2019 12:57:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20190621093843.220980-17-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 T24gNi8yMS8xOSAxMDozOCBBTSwgTWFyYyBaeW5naWVyIHdyb3RlOgo+IEZyb206IEFuZHJlIFBy enl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+Cj4gV2hlbmV2ZXIgd2UgbmVlZCB0byBy ZXN0b3JlIHRoZSBndWVzdCdzIHN5c3RlbSByZWdpc3RlcnMgdG8gdGhlIENQVSwgd2UKPiBub3cg bmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIEVMMiBzeXN0ZW0gcmVnaXN0ZXJzIGFzIHdlbGwuIE1v c3Qgb2YgdGhlbQo+IGFyZSBhY2Nlc3NlZCB2aWEgdHJhcHMgb25seSwgYnV0IHNvbWUgaGF2ZSBh biBpbW1lZGlhdGUgZWZmZWN0IGFuZCBhbHNvCj4gYSBndWVzdCBydW5uaW5nIGluIFZIRSBtb2Rl IHdvdWxkIGV4cGVjdCB0aGVtIHRvIGJlIGFjY2Vzc2libGUgdmlhIHRoZWlyCj4gRUwxIGVuY29k aW5nLCB3aGljaCB3ZSBkbyBub3QgdHJhcC4KPgo+IFNwbGl0IHRoZSBjdXJyZW50IF9fc3lzcmVn X3tzYXZlLHJlc3RvcmV9X2VsMV9zdGF0ZSgpIGZ1bmN0aW9ucyBpbnRvCj4gaGFuZGxpbmcgY29t bW9uIHN5c3JlZ3MsIHRoZW4gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBndWVzdCBydW5uaW5n IGluCj4gdkVMMiBhbmQgdkVMMS4KPgo+IEZvciB2RUwyIHdlIHdyaXRlIHRoZSB2aXJ0dWFsIEVM MiByZWdpc3RlcnMgd2l0aCBhbiBpZGVudGljYWwgZm9ybWF0IGRpcmVjdGx5Cj4gaW50byB0aGVp ciBFTDEgY291bnRlcnBhcnQsIGFuZCB0cmFuc2xhdGUgdGhlIGZldyByZWdpc3RlcnMgdGhhdCBo YXZlIGEKPiBkaWZmZXJlbnQgZm9ybWF0IGZvciB0aGUgc2FtZSBlZmZlY3Qgb24gdGhlIGV4ZWN1 dGlvbiB3aGVuIHJ1bm5pbmcgYQo+IG5vbi1WSEUgZ3Vlc3QgZ3Vlc3QgaHlwZXJ2aXNvci4KPgo+ ICAgWyBDb21taXQgbWVzc2FnZSByZXdvcmtlZCBhbmQgbWFueSBidWcgZml4ZXMgYXBwbGllZCBi eSBNYXJjIFp5bmdpZXIKPiAgICAgYW5kIENocmlzdG9mZmVyIERhbGwuIF0KPgo+IFNpZ25lZC1v ZmYtYnk6IEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+IFNpZ25lZC1v ZmYtYnk6IE1hcmMgWnluZ2llciA8bWFyYy56eW5naWVyQGFybS5jb20+Cj4gU2lnbmVkLW9mZi1i eTogQ2hyaXN0b2ZmZXIgRGFsbCA8Y2hyaXN0b2ZmZXIuZGFsbEBhcm0uY29tPgo+IC0tLQo+ICBh cmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMgfCAxNjAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxNTMgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMg Yi9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMKPiBpbmRleCA2Mjg2NmE2OGU4NTIuLjJh YmI5YzNmZjI0ZiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMK PiArKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMKPiBAQCAtMjIsNiArMjIsNyBA QAo+ICAjaW5jbHVkZSA8YXNtL2t2bV9hc20uaD4KPiAgI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0 ZS5oPgo+ICAjaW5jbHVkZSA8YXNtL2t2bV9oeXAuaD4KPiArI2luY2x1ZGUgPGFzbS9rdm1fbmVz dGVkLmg+Cj4gIAo+ICAvKgo+ICAgKiBOb24tVkhFOiBCb3RoIGhvc3QgYW5kIGd1ZXN0IG11c3Qg c2F2ZSBldmVyeXRoaW5nLgo+IEBAIC01MSwxMSArNTIsOSBAQCBzdGF0aWMgdm9pZCBfX2h5cF90 ZXh0IF9fc3lzcmVnX3NhdmVfdXNlcl9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0 KQo+ICAJY3R4dC0+c3lzX3JlZ3NbVFBJRFJST19FTDBdCT0gcmVhZF9zeXNyZWcodHBpZHJyb19l bDApOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBfX2h5cF90ZXh0IF9fc3lzcmVnX3NhdmVfZWwx X3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpCj4gK3N0YXRpYyB2b2lkIF9faHlw X3RleHQgX19zeXNyZWdfc2F2ZV92ZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0 eHQpCj4gIHsKPiAtCWN0eHQtPnN5c19yZWdzW0NTU0VMUl9FTDFdCT0gcmVhZF9zeXNyZWcoY3Nz ZWxyX2VsMSk7Cj4gIAljdHh0LT5zeXNfcmVnc1tTQ1RMUl9FTDFdCT0gcmVhZF9zeXNyZWdfZWwx KFNZU19TQ1RMUik7Cj4gLQljdHh0LT5zeXNfcmVnc1tBQ1RMUl9FTDFdCT0gcmVhZF9zeXNyZWco YWN0bHJfZWwxKTsKPiAgCWN0eHQtPnN5c19yZWdzW0NQQUNSX0VMMV0JPSByZWFkX3N5c3JlZ19l bDEoU1lTX0NQQUNSKTsKPiAgCWN0eHQtPnN5c19yZWdzW1RUQlIwX0VMMV0JPSByZWFkX3N5c3Jl Z19lbDEoU1lTX1RUQlIwKTsKPiAgCWN0eHQtPnN5c19yZWdzW1RUQlIxX0VMMV0JPSByZWFkX3N5 c3JlZ19lbDEoU1lTX1RUQlIxKTsKPiBAQCAtNjksMTQgKzY4LDU4IEBAIHN0YXRpYyB2b2lkIF9f aHlwX3RleHQgX19zeXNyZWdfc2F2ZV9lbDFfc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAq Y3R4dCkKPiAgCWN0eHQtPnN5c19yZWdzW0NPTlRFWFRJRFJfRUwxXQk9IHJlYWRfc3lzcmVnX2Vs MShTWVNfQ09OVEVYVElEUik7Cj4gIAljdHh0LT5zeXNfcmVnc1tBTUFJUl9FTDFdCT0gcmVhZF9z eXNyZWdfZWwxKFNZU19BTUFJUik7Cj4gIAljdHh0LT5zeXNfcmVnc1tDTlRLQ1RMX0VMMV0JPSBy ZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpOwo+IC0JY3R4dC0+c3lzX3JlZ3NbUEFSX0VMMV0J CT0gcmVhZF9zeXNyZWcocGFyX2VsMSk7Cj4gLQljdHh0LT5zeXNfcmVnc1tUUElEUl9FTDFdCT0g cmVhZF9zeXNyZWcodHBpZHJfZWwxKTsKPiAgCj4gIAljdHh0LT5ncF9yZWdzLnNwX2VsMQkJPSBy ZWFkX3N5c3JlZyhzcF9lbDEpOwo+ICAJY3R4dC0+Z3BfcmVncy5lbHJfZWwxCQk9IHJlYWRfc3lz cmVnX2VsMShTWVNfRUxSKTsKPiAgCWN0eHQtPmdwX3JlZ3Muc3BzcltLVk1fU1BTUl9FTDFdPSBy ZWFkX3N5c3JlZ19lbDEoU1lTX1NQU1IpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBfX3N5c3Jl Z19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqY3R4dCkKPiArewo+ICsJ Y3R4dC0+c3lzX3JlZ3NbRVNSX0VMMl0JCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19FU1IpOwo+ICsJ Y3R4dC0+c3lzX3JlZ3NbQUZTUjBfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfQUZTUjApOwo+ ICsJY3R4dC0+c3lzX3JlZ3NbQUZTUjFfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfQUZTUjEp Owo+ICsJY3R4dC0+c3lzX3JlZ3NbRkFSX0VMMl0JCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19GQVIp Owo+ICsJY3R4dC0+c3lzX3JlZ3NbTUFJUl9FTDJdCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19NQUlS KTsKPiArCWN0eHQtPnN5c19yZWdzW1ZCQVJfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfVkJB Uik7Cj4gKwljdHh0LT5zeXNfcmVnc1tDT05URVhUSURSX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEo U1lTX0NPTlRFWFRJRFIpOwo+ICsJY3R4dC0+c3lzX3JlZ3NbQU1BSVJfRUwyXQk9IHJlYWRfc3lz cmVnX2VsMShTWVNfQU1BSVIpOwo+ICsKPiArCS8qCj4gKwkgKiBJbiBWSEUgbW9kZSB0aG9zZSBy ZWdpc3RlcnMgYXJlIGNvbXBhdGlibGUgYmV0d2VlbiBFTDEgYW5kIEVMMiwKPiArCSAqIGFuZCB0 aGUgZ3Vlc3QgdXNlcyB0aGUgX0VMMSB2ZXJzaW9ucyBvbiB0aGUgQ1BVIG5hdHVyYWxseS4KPiAr CSAqIFNvIHdlIHNhdmUgdGhlbSBpbnRvIHRoZWlyIF9FTDIgdmVyc2lvbnMgaGVyZS4KPiArCSAq IEZvciBuVkhFIG1vZGUgd2UgdHJhcCBhY2Nlc3NlcyB0byB0aG9zZSByZWdpc3RlcnMsIHNvIG91 cgo+ICsJICogX0VMMiBjb3B5IGluIHN5c19yZWdzW10gaXMgYWx3YXlzIHVwLXRvLWRhdGUgYW5k IHdlIGRvbid0IG5lZWQKPiArCSAqIHRvIHNhdmUgYW55dGhpbmcgaGVyZS4KPiArCSAqLwo+ICsJ aWYgKF9fdmNwdV9lbDJfZTJoX2lzX3NldChjdHh0KSkgewo+ICsJCWN0eHQtPnN5c19yZWdzW1ND VExSX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSKTsKPiArCQljdHh0LT5zeXNfcmVn c1tDUFRSX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKTsKPiArCQljdHh0LT5zeXNf cmVnc1tUVEJSMF9FTDJdCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19UVEJSMCk7Cj4gKwkJY3R4dC0+ c3lzX3JlZ3NbVFRCUjFfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfVFRCUjEpOwo+ICsJCWN0 eHQtPnN5c19yZWdzW1RDUl9FTDJdCQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfVENSKTsKPiArCQlj dHh0LT5zeXNfcmVnc1tDTlRIQ1RMX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwp Owo+ICsJfQoKVGhpcyBjYW4gYnJlYWsgZ3Vlc3RzIHRoYXQgcnVuIHdpdGggVkhFIG9uLCB0aGVu IGRpc2FibGUgaXQuIEkgc3R1bWJsZWQgaW50bwp0aGlzIHdoaWxlIHdvcmtpbmcgb24ga3ZtLXVu aXQtdGVzdHMsIHdoaWNoIHVzZXMgVFRCUjAgZm9yIHRoZSB0cmFuc2xhdGlvbgp0YWJsZXMuIExl dCdzIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86CgoxLiBHdWVzdCBzZXRzIEhDUl9F TDIuRTJICjIuIEd1ZXN0IHByb2dyYW1zIHRyYW5zbGF0aW9uIHRhYmxlcyBpbiBUVEJSMF9FTDEs IHdoaWNoIHNob3VsZCByZWZsZWN0IGluClRUQlIwX0VMMi4KMy4gR3Vlc3QgZW5hYmxlZCBNTVUg YW5kIGRvZXMgc3R1ZmYuCjQuIEd1ZXN0IGRpc2FibGVzIE1NVSBhbmQgY2xlYXJzIEhDUl9FTDIu RTJICjUuIEd1ZXN0IHR1cm5zIE1NVSBvbi4gSXQgZG9lc24ndCBjaGFuZ2UgVFRCUjBfRUwyLCBi ZWNhdXNlIGl0IHdpbGwgdXNlIHRoZSBzYW1lCnRyYW5zbGF0aW9uIHRhYmxlcyBhcyB3aGVuIHJ1 bm5pbmcgd2l0aCBFMkggc2V0Lgo2LiBUaGUgdmNwdSBnZXRzIHNjaGVkdWxlZCBvdXQuIEUySCBp cyBub3Qgc2V0LCBzbyB0aGUgdmFsdWUgdGhhdCB0aGUgZ3Vlc3QKcHJvZ3JhbW1lZCBpbiBoYXJk d2FyZSBUVEJSMF9FTDEgd29uJ3QgYmUgY29waWVkIHRvIHZpcnR1YWwgVFRCUjBfRUwyLgo3LiBU aGUgdmNwdSBnZXRzIHNjaGVkdWxlZCBiYWNrIGluLiBLVk0gd2lsbCB3cml0ZSB0aGUgcmVzZXQg dmFsdWUgZm9yIHZpcnR1YWwKVFRCUjBfRUwyICh3aGljaCBpcyAweDApLgo4LiBUaGUgZ3Vlc3Qg aGFuZ3MuCgpJIHRoaW5rIHRoaXMgaXMgYWN0dWFsbHkgYSBzeW1wdG9tIG9mIGEgZGVlcGVyIGlz c3VlLiBXaGVuIEUySCBpcyBjbGVhcmVkLCB0aGUKdmFsdWVzIHRoYXQgdGhlIGd1ZXN0IHdyb3Rl IHRvIHRoZSBFTDEgcmVnaXN0ZXJzIGFyZW4ndCBpbW1lZGlhdGVseSByZWZsZWN0ZWQgaW4KdGhl IHZpcnR1YWwgRUwyIHJlZ2lzdGVycywgYXMgaXQgaGFwcGVucyBvbiByZWFsIGhhcmR3YXJlLiBJ bnN0ZWFkLCBzb21lIG9mIHRoZQpoYXJkd2FyZSB2YWx1ZXMgZnJvbSB0aGUgRUwxIHJlZ2lzdGVy cyBhcmUgY29waWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIEVMMgpyZWdpc3RlcnMgb24gdGhlIG5l eHQgdmNwdV9wdXQsIHdoaWNoIGhhcHBlbnMgYXQgYSBsYXRlciB0aW1lLgoKSSBhbSB0aGlua2lu ZyB0aGF0IHNvbWV0aGluZyBsaWtlIHRoaXMgd2lsbCBmaXggdGhlIGlzc3VlcyAoaXQgZGlkIGZp eCBkaXNhYmxpbmcKVkhFIGluIGt2bS11bml0LXRlc3RzKToKCmRpZmYgLS1naXQgYS9hcmNoL2Fy bTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCAxZDg5 NjExM2YxZjguLmYyYjVhMzk3NjJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3Jl Z3MuYworKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCkBAIC0zMzMsNyArMzMzLDggQEAg dm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBp bnQgcmVnKQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRvIHJldmVyc2UtdHJh bnNsYXRlIHZpcnR1YWwgRUwyIHN5c3RlbSByZWdpc3RlcnMgZm9yIGEKwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBub24tVkhFIGd1ZXN0IGh5cGVydmlzb3IuCsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9f dmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgPSB2YWw7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChyZWcgIT0gSENSX0VMMikKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgPSB2YWw7CsKgCsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzd2l0Y2ggKHJlZykgewrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2FzZSBFTFJfRUwyOgpAQCAtMzcwLDcgKzM3MSwxNyBAQCB2b2lkIHZjcHVf d3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGludApyZWcpCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47CsKgCsKgbWVtb3J5X3dyaXRlOgot wqDCoMKgwqDCoMKgwqAgX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSA9IHZhbDsKK8KgwqDCoMKg wqDCoCBpZiAocmVnID09IEhDUl9FTDIgJiYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSAmJiAh KHZhbCAmIEhDUl9FMkgpKSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByZWVtcHRf ZGlzYWJsZSgpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrdm1fYXJjaF92Y3B1X3B1 dCh2Y3B1KTsKKworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX3ZjcHVfc3lzX3JlZyh2 Y3B1LCByZWcpID0gdmFsOworCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGt2bV9hcmNo X3ZjcHVfbG9hZCh2Y3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwcmVlbXB0X2VuYWJsZSgpOworwqDCoMKgwqDCoMKgIH0gZWxzZSB7CivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSA9IHZh bDsKK8KgwqDCoMKgwqDCoCB9CsKgfQrCoArCoC8qIDMgYml0cyBwZXIgY2FjaGUgbGV2ZWwsIGFz IHBlciBDTElEUiwgYnV0IG5vbi1leGlzdGVudCBjYWNoZXMgYWx3YXlzIDAgKi8KCkkgZG9uJ3Qg dGhpbmsgdGhlcmUncyBhbnkgbmVlZCB0byBjb252ZXJ0IEVMMSByZWdpc3RlcnMgdG8gdGhlaXIg bm9uLXZoZSBFTDIKZm9ybWF0IGJlY2F1c2Ugb2YgaG93IFJFUzAvUkVTMSBpcyBkZWZpbmVkIGlu IHRoZSBhcmNoaXRlY3R1cmUgZ2xvc3NhcnkgKEFSTSBEREkKMDQ4N0UuYSwgcGFnZSA3ODkzIGZv ciBSRVMwIGFuZCA3ODk0IGZvciBSRVMxKToKCiJJZiBhIGJpdCBpcyBSRVMwIG9ubHkgaW4gc29t ZSBjb250ZXh0czoKQSByZWFkIG9mIHRoZSBiaXQgbXVzdCByZXR1cm4gdGhlIHZhbHVlIGxhc3Qg c3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIGJpdCwgYnkKZWl0aGVyIGEgZGlyZWN0IG9yIGFu IGluZGlyZWN0IHdyaXRlLCByZWdhcmRsZXNzIG9mIHRoZSB1c2Ugb2YgdGhlIHJlZ2lzdGVyIHdo ZW4KdGhlIGJpdCB3YXMgd3JpdHRlbgpbLi5dCldoaWxlIHRoZSB1c2Ugb2YgdGhlIHJlZ2lzdGVy IGlzIHN1Y2ggdGhhdCB0aGUgYml0IGlzIGRlc2NyaWJlZCBhcyBSRVMwLCB0aGUKdmFsdWUgb2Yg dGhlIGJpdCBtdXN0IGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBvcGVyYXRpb24gb2YgdGhlIFBFLCBv dGhlciB0aGFuCmRldGVybWluaW5nIHRoZSB2YWx1ZSByZWFkIGJhY2sgZnJvbSB0aGF0IGJpdCwg dW5sZXNzIHRoaXMgTWFudWFsIGV4cGxpY2l0bHkKZGVmaW5lcyBhZGRpdGlvbmFsIHByb3BlcnRp ZXMgZm9yIHRoZSBiaXQiCgpXZSBoYXZlIHRoZSB0cmFuc2xhdGUgZnVuY3Rpb25zIHRoYXQgc2hv dWxkIHRha2UgY2FyZSBvZiBjb252ZXJ0aW5nIHRoZSBub24tdmhlCkVMMiBmb3JtYXQgdG8gdGhl IGhhcmR3YXJlIEVMMSBmb3JtYXQuCgpBcyBhbiBhc2lkZSwgdGhlIGRpZmYgbG9va3Mgd2VpcmQg YmVjYXVzZSB0aGUgdmNwdV93cml0ZV9zeXNfcmVnIGlzIHZlcnkKY29tcGxleCwgdGhlcmUgYXJl IGEgTE9UIG9mIGV4aXQgcG9pbnRzIGZyb20gdGhlIGZ1bmN0aW9uLCBhbmQgdGhlIHJlZ2lzdGVy CnZhbHVlIGlzIHdyaXR0ZW4gdHdpY2UgZm9yIHNvbWUgcmVnaXN0ZXJzLiBJIHRoaW5rIGl0J3Mg d29ydGggY29uc2lkZXJpbmcgbWFraW5nCnRoZSBmdW5jdGlvbiBzaW1wbGVyLCBtYXliZSBzcGxp dHRpbmcgaXQgaW50byB0d28gc2VwYXJhdGUgZnVuY3Rpb25zLCBvbmUgZm9yCkVMMiByZWdpc3Rl cnMsIG9uZSBmb3IgcmVndWxhciByZWdpc3RlcnMuCgpIZXJlJ3MgdGhlIGt2bS11bml0LXRlc3Rz IGRpZmYgdGhhdCBJIHVzZWQgdG8gc3BvdCB0aGUgYnVnLiBJdCdzIHZlcnkgZmFyIGZyb20KYmVp bmcgY29ycmVjdCwgYnV0IHRoZSB0ZXN0IGlzIGFibGUgdG8gZmluaXNoIHdpdGggdGhlIGZpeCAo aXQgaGFuZ3Mgb3RoZXJ3aXNlKS4KWW91IGNhbiBhcHBseSBpdCBvbiB0b3Agb2YgMjEzMGZkNDE1 NGFkICgidHNjZGVhZGxpbmVfbGF0ZW5jeTogQ2hlY2sgY29uZGl0aW9uCmZpcnN0IGJlZm9yZSBs b29wIik6CgpkaWZmIC0tZ2l0IGEvYXJtL2NzdGFydDY0LlMgYi9hcm0vY3N0YXJ0NjQuUwppbmRl eCBiMGU4YmFhMWEyM2EuLjAxMzU3YjNiMTE2YiAxMDA2NDQKLS0tIGEvYXJtL2NzdGFydDY0LlMK KysrIGIvYXJtL2NzdGFydDY0LlMKQEAgLTUxLDYgKzUxLDE4IEBAIHN0YXJ0OgrCoMKgwqDCoCBi wqDCoMKgIDFiCsKgCsKgMToKK8KgwqDCoCBtcnPCoMKgwqAgeDQsIEN1cnJlbnRFTAorwqDCoMKg IGNtcMKgwqDCoCB4NCwgQ3VycmVudEVMX0VMMgorwqDCoMKgIGIubmXCoMKgwqAgMWYKK8KgwqDC oCBtcnPCoMKgwqAgeDQsIG1waWRyX2VsMQorwqDCoMKgIG1zcsKgwqDCoCB2bXBpZHJfZWwyLCB4 NAorwqDCoMKgIG1yc8KgwqDCoCB4NCwgbWlkcl9lbDEKK8KgwqDCoCBtc3LCoMKgwqAgdnBpZHJf ZWwyLCB4NAorwqDCoMKgIGxkcsKgwqDCoCB4NCwgPShIQ1JfRUwyX1RHRSB8IEhDUl9FTDJfRTJI KQorwqDCoMKgIG1zcsKgwqDCoCBoY3JfZWwyLCB4NAorwqDCoMKgIGlzYgorCisxOgrCoMKgwqDC oCAvKiBzZXQgdXAgc3RhY2sgKi8KwqDCoMKgwqAgbW92wqDCoMKgIHg0LCAjMQrCoMKgwqDCoCBt c3LCoMKgwqAgc3BzZWwsIHg0CkBAIC0xMDEsNiArMTEzLDE4IEBAIGdldF9tbXVfb2ZmOgrCoArC oC5nbG9ibCBzZWNvbmRhcnlfZW50cnkKwqBzZWNvbmRhcnlfZW50cnk6CivCoMKgwqAgbXJzwqDC oMKgIHgwLCBDdXJyZW50RUwKK8KgwqDCoCBjbXDCoMKgwqAgeDAsIEN1cnJlbnRFTF9FTDIKK8Kg wqDCoCBiLm5lwqDCoMKgIDFmCivCoMKgwqAgbXJzwqDCoMKgIHgwLCBtcGlkcl9lbDEKK8KgwqDC oCBtc3LCoMKgwqAgdm1waWRyX2VsMiwgeDAKK8KgwqDCoCBtcnPCoMKgwqAgeDAsIG1pZHJfZWwx CivCoMKgwqAgbXNywqDCoMKgIHZwaWRyX2VsMiwgeDAKK8KgwqDCoCBsZHLCoMKgwqAgeDAsID0o SENSX0VMMl9UR0UgfCBIQ1JfRUwyX0UySCkKK8KgwqDCoCBtc3LCoMKgwqAgaGNyX2VsMiwgeDAK K8KgwqDCoCBpc2IKKworMToKwqDCoMKgwqAgLyogRW5hYmxlIEZQL0FTSU1EICovCsKgwqDCoMKg IG1vdsKgwqDCoCB4MCwgIygzIDw8IDIwKQrCoMKgwqDCoCBtc3LCoMKgwqAgY3BhY3JfZWwxLCB4 MApAQCAtMTk0LDYgKzIxOCwzMyBAQCBhc21fbW11X2VuYWJsZToKwqAKwqDCoMKgwqAgcmV0CsKg Cithc21fbW11X2VuYWJsZV9oeXA6CivCoMKgwqDCoMKgwqAgaWPCoMKgwqDCoMKgIGlhbGx1CivC oMKgwqDCoMKgwqAgdGxiacKgwqDCoCBhbGxlMmlzCivCoMKgwqDCoMKgwqAgZHNiwqDCoMKgwqAg aXNoCisKK8KgwqDCoMKgwqDCoMKgIC8qIFRDUiAqLworwqDCoMKgwqDCoMKgIGxkcsKgwqDCoMKg IHgxLCA9VENSX0VMMl9SRVMxIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRDUl9UMFNaKFZB X0JJVFMpIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAorwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVENSX1RHMF82NEsgfMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBUQ1JfSVJHTjBfV0JXQSB8IFRDUl9PUkdOMF9XQldBIHzCoCBcCivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUQ1JfU0gwX0lTCivCoMKgwqDCoMKgwqAgbXJz wqDCoMKgwqAgeDIsIGlkX2FhNjRtbWZyMF9lbDEKK8KgwqDCoMKgwqDCoCBiZmnCoMKgwqDCoCB4 MSwgeDIsICNUQ1JfRUwyX1BTX1NISUZULCAjMworwqDCoMKgwqDCoMKgIG1zcsKgwqDCoMKgIHRj cl9lbDIsIHgxCisKK8KgwqDCoMKgwqDCoCAvKiBTYW1lIE1BSVIgYW5kIFRUQlIwIGFzIGluIFZI RSBtb2RlICovCisKK8KgwqDCoMKgwqDCoCAvKiBTQ1RMUiAqLworwqDCoMKgwqDCoMKgIGxkcsKg wqDCoMKgIHgxLCA9U0NUTFJfRUwyX1JFUzEgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBcCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTQ1RMUl9F TDJfQyB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNDVExSX0VMMl9JIHzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAorwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgU0NUTFJfRUwyX00KK8KgwqDCoMKgwqDCoCBtc3LCoMKgwqDCoCBz Y3Rscl9lbDIsIHgxCivCoMKgwqDCoMKgwqAgaXNiCisKK8KgwqDCoMKgwqDCoCByZXQKKwrCoC5n bG9ibCBhc21fbW11X2Rpc2FibGUKwqBhc21fbW11X2Rpc2FibGU6CsKgwqDCoMKgIG1yc8KgwqDC oCB4MCwgc2N0bHJfZWwxCkBAIC0yMDIsNiArMjUzLDE4IEBAIGFzbV9tbXVfZGlzYWJsZToKwqDC oMKgwqAgaXNiCsKgwqDCoMKgIHJldArCoAorLmdsb2JsIGFzbV9kaXNhYmxlX3ZoZQorYXNtX2Rp c2FibGVfdmhlOgorwqDCoMKgIHN0csKgwqDCoMKgIHgzMCwgW3NwLCAjLTE2XSEKKworwqDCoMKg IGJswqDCoMKgwqDCoCBhc21fbW11X2Rpc2FibGUKK8KgwqDCoCBtc3LCoMKgwqDCoCBoY3JfZWwy LCB4enIKK8KgwqDCoCBpc2IKK8KgwqDCoCBibMKgwqDCoMKgwqAgYXNtX21tdV9lbmFibGVfaHlw CisKK8KgwqDCoCBsZHLCoMKgwqDCoCB4MzAsIFtzcF0sICMxNgorwqDCoMKgIHJldAorCsKgLyoK wqAgKiBWZWN0b3JzCsKgICogQWRhcHRlZCBmcm9tIGFyY2gvYXJtNjQva2VybmVsL2VudHJ5LlMK ZGlmZiAtLWdpdCBhL2FybS9zZWxmdGVzdC5jIGIvYXJtL3NlbGZ0ZXN0LmMKaW5kZXggMjhhMTdm N2E3NTMxLi42OGExODAzNjIyMWIgMTAwNjQ0Ci0tLSBhL2FybS9zZWxmdGVzdC5jCisrKyBiL2Fy bS9zZWxmdGVzdC5jCkBAIC0yODcsNiArMjg3LDEyIEBAIHN0YXRpYyB2b2lkIHVzZXJfcHNjaV9z eXN0ZW1fb2ZmKHN0cnVjdCBwdF9yZWdzICpyZWdzLAp1bnNpZ25lZCBpbnQgZXNyKQrCoHsKwqDC oMKgwqAgX191c2VyX3BzY2lfc3lzdGVtX29mZigpOwrCoH0KKworZXh0ZXJuIHZvaWQgYXNtX2Rp c2FibGVfdmhlKHZvaWQpOworc3RhdGljIHZvaWQgY2hlY2tfZWwyKHZvaWQpCit7CivCoMKgwqAg YXNtX2Rpc2FibGVfdmhlKCk7Cit9CsKgI2VuZGlmCsKgCsKgc3RhdGljIHZvaWQgY2hlY2tfdmVj dG9ycyh2b2lkICphcmcgX191bnVzZWQpCkBAIC0zNjksNiArMzc1LDEwIEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKwqDCoMKgwqAgwqDCoMKgIHJlcG9ydCgiUFNDSSB2ZXJzaW9u IiwgcHNjaV9jaGVjaygpKTsKwqDCoMKgwqAgwqDCoMKgIG9uX2NwdXMoY3B1X3JlcG9ydCwgTlVM TCk7CsKgCivCoMKgwqAgfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgImVsMiIpID09IDApIHsK KworwqDCoMKgIMKgwqDCoCBjaGVja19lbDIoKTsKKwrCoMKgwqDCoCB9IGVsc2UgewrCoMKgwqDC oCDCoMKgwqAgcHJpbnRmKCJVbmtub3duIHN1YnRlc3RcbiIpOwrCoMKgwqDCoCDCoMKgwqAgYWJv cnQoKTsKZGlmZiAtLWdpdCBhL2xpYi9hcm0vcHNjaS5jIGIvbGliL2FybS9wc2NpLmMKaW5kZXgg YzNkMzk5MDY0YWUzLi41ZWYxYzAzODZjZTEgMTAwNjQ0Ci0tLSBhL2xpYi9hcm0vcHNjaS5jCisr KyBiL2xpYi9hcm0vcHNjaS5jCkBAIC0xNiw3ICsxNiw3IEBAIGludCBwc2NpX2ludm9rZSh1bnNp Z25lZCBsb25nIGZ1bmN0aW9uX2lkLCB1bnNpZ25lZCBsb25nIGFyZzAsCsKgwqDCoMKgIMKgwqDC oCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMikKwqB7CsKgwqDCoMKgIGFz bSB2b2xhdGlsZSgKLcKgwqDCoCDCoMKgwqAgImh2YyAjMCIKK8KgwqDCoCDCoMKgwqAgInNtYyAj MCIKwqDCoMKgwqAgOiAiK3IiIChmdW5jdGlvbl9pZCkKwqDCoMKgwqAgOiAiciIgKGFyZzApLCAi ciIgKGFyZzEpLCAiciIgKGFyZzIpKTsKwqDCoMKgwqAgcmV0dXJuIGZ1bmN0aW9uX2lkOwpkaWZm IC0tZ2l0IGEvbGliL2FybTY0L2FzbS9wZ3RhYmxlLWh3ZGVmLmggYi9saWIvYXJtNjQvYXNtL3Bn dGFibGUtaHdkZWYuaAppbmRleCAwNDVhM2NlMTI2NDUuLjZiODBlMzRkZGEwYyAxMDA2NDQKLS0t IGEvbGliL2FybTY0L2FzbS9wZ3RhYmxlLWh3ZGVmLmgKKysrIGIvbGliL2FybTY0L2FzbS9wZ3Rh YmxlLWh3ZGVmLmgKQEAgLTk1LDE4ICs5NSw0MiBAQArCoC8qCsKgICogVENSIGZsYWdzLgrCoCAq LwotI2RlZmluZSBUQ1JfVHhTWih4KcKgwqDCoCDCoMKgwqAgKCgoVUwoNjQpIC0gKHgpKSA8PCAx NikgfCAoKFVMKDY0KSAtICh4KSkgPDwgMCkpCi0jZGVmaW5lIFRDUl9JUkdOX05DwqDCoMKgIMKg wqDCoCAoKFVMKDApIDw8IDgpIHwgKFVMKDApIDw8IDI0KSkKLSNkZWZpbmUgVENSX0lSR05fV0JX QcKgwqDCoCDCoMKgwqAgKChVTCgxKSA8PCA4KSB8IChVTCgxKSA8PCAyNCkpCi0jZGVmaW5lIFRD Ul9JUkdOX1dUwqDCoMKgIMKgwqDCoCAoKFVMKDIpIDw8IDgpIHwgKFVMKDIpIDw8IDI0KSkKLSNk ZWZpbmUgVENSX0lSR05fV0JuV0HCoMKgwqAgwqDCoMKgICgoVUwoMykgPDwgOCkgfCAoVUwoMykg PDwgMjQpKQotI2RlZmluZSBUQ1JfSVJHTl9NQVNLwqDCoMKgIMKgwqDCoCAoKFVMKDMpIDw8IDgp IHwgKFVMKDMpIDw8IDI0KSkKLSNkZWZpbmUgVENSX09SR05fTkPCoMKgwqAgwqDCoMKgICgoVUwo MCkgPDwgMTApIHwgKFVMKDApIDw8IDI2KSkKLSNkZWZpbmUgVENSX09SR05fV0JXQcKgwqDCoCDC oMKgwqAgKChVTCgxKSA8PCAxMCkgfCAoVUwoMSkgPDwgMjYpKQotI2RlZmluZSBUQ1JfT1JHTl9X VMKgwqDCoCDCoMKgwqAgKChVTCgyKSA8PCAxMCkgfCAoVUwoMikgPDwgMjYpKQotI2RlZmluZSBU Q1JfT1JHTl9XQm5XQcKgwqDCoCDCoMKgwqAgKChVTCgzKSA8PCAxMCkgfCAoVUwoMykgPDwgMjYp KQotI2RlZmluZSBUQ1JfT1JHTl9NQVNLwqDCoMKgIMKgwqDCoCAoKFVMKDMpIDw8IDEwKSB8IChV TCgzKSA8PCAyNikpCi0jZGVmaW5lIFRDUl9TSEFSRUTCoMKgwqAgwqDCoMKgICgoVUwoMykgPDwg MTIpIHwgKFVMKDMpIDw8IDI4KSkKKyNkZWZpbmUgVENSX1QwU1ooeCnCoMKgwqAgwqDCoMKgICgo VUwoNjQpIC0gKHgpKSA8PCAwKQorI2RlZmluZSBUQ1JfVDFTWih4KcKgwqDCoCDCoMKgwqAgKChV TCg2NCkgLSAoeCkpIDw8IDE2KQorI2RlZmluZSBUQ1JfVHhTWih4KcKgwqDCoCDCoMKgwqAgKFRD Ul9UMFNaKHgpIHwgVENSX1QxU1ooeCkpCisjZGVmaW5lIFRDUl9JUkdOMF9OQ8KgwqDCoCDCoMKg wqAgKFVMKDApIDw8IDgpCisjZGVmaW5lIFRDUl9JUkdOMV9OQ8KgwqDCoCDCoMKgwqAgKFVMKDAp IDw8IDI0KQorI2RlZmluZSBUQ1JfSVJHTl9OQ8KgwqDCoCDCoMKgwqAgKFRDUl9JUkdOMF9OQyB8 IFRDUl9JUkdOMV9OQykKKyNkZWZpbmUgVENSX0lSR04wX1dCV0HCoMKgwqAgwqDCoMKgIChVTCgx KSA8PCA4KQorI2RlZmluZSBUQ1JfSVJHTjFfV0JXQcKgwqDCoCDCoMKgwqAgKFVMKDEpIDw8IDI0 KQorI2RlZmluZSBUQ1JfSVJHTl9XQldBwqDCoMKgIMKgwqDCoCAoVENSX0lSR04wX1dCV0EgfCBU Q1JfSVJHTjFfV0JXQSkKKyNkZWZpbmUgVENSX0lSR04wX1dUwqDCoMKgIMKgwqDCoCAoVUwoMikg PDwgOCkKKyNkZWZpbmUgVENSX0lSR04xX1dUwqDCoMKgIMKgwqDCoCAoVUwoMikgPDwgMjQpCisj ZGVmaW5lIFRDUl9JUkdOX1dUwqDCoMKgIMKgwqDCoCAoVENSX0lSR04wX1dUIHwgVENSX0lSR04x X1dUKQorI2RlZmluZSBUQ1JfSVJHTjBfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCA4KQor I2RlZmluZSBUQ1JfSVJHTjFfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyNCkKKyNkZWZp bmUgVENSX0lSR05fV0JuV0HCoMKgwqAgwqDCoMKgIChUQ1JfSVJHTjBfV0JuV0EgfCBUQ1JfSVJH TjFfV0JuV0EpCisjZGVmaW5lIFRDUl9JUkdOMF9NQVNLwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwg OCkKKyNkZWZpbmUgVENSX0lSR04xX01BU0vCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyNCkKKyNk ZWZpbmUgVENSX0lSR05fTUFTS8KgwqDCoCDCoMKgwqAgKFRDUl9JUkdOMF9NQVNLIHwgVENSX0lS R04xX01BU0spCisjZGVmaW5lIFRDUl9PUkdOMF9OQ8KgwqDCoCDCoMKgwqAgKFVMKDApIDw8IDEw KQorI2RlZmluZSBUQ1JfT1JHTjFfTkPCoMKgwqAgwqDCoMKgIChVTCgwKSA8PCAyNikKKyNkZWZp bmUgVENSX09SR05fTkPCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfTkMgfCBUQ1JfT1JHTjFfTkMp CisjZGVmaW5lIFRDUl9PUkdOMF9XQldBwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMTApCisjZGVm aW5lIFRDUl9PUkdOMV9XQldBwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMjYpCisjZGVmaW5lIFRD Ul9PUkdOX1dCV0HCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfV0JXQSB8IFRDUl9PUkdOMV9XQldB KQorI2RlZmluZSBUQ1JfT1JHTjBfV1TCoMKgwqAgwqDCoMKgIChVTCgyKSA8PCAxMCkKKyNkZWZp bmUgVENSX09SR04xX1dUwqDCoMKgIMKgwqDCoCAoVUwoMikgPDwgMjYpCisjZGVmaW5lIFRDUl9P UkdOX1dUwqDCoMKgIMKgwqDCoCAoVENSX09SR04wX1dUIHwgVENSX09SR04xX1dUKQorI2RlZmlu ZSBUQ1JfT1JHTjBfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCA4KQorI2RlZmluZSBUQ1Jf T1JHTjFfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyNCkKKyNkZWZpbmUgVENSX09SR05f V0JuV0HCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfV0JuV0EgfCBUQ1JfT1JHTjFfV0JuV0EpCisj ZGVmaW5lIFRDUl9PUkdOMF9NQVNLwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwgMTApCisjZGVmaW5l IFRDUl9PUkdOMV9NQVNLwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwgMjYpCisjZGVmaW5lIFRDUl9P UkdOX01BU0vCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfTUFTSyB8IFRDUl9PUkdOMV9NQVNLKQor I2RlZmluZSBUQ1JfU0gwX0lTwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwgMTIpCisjZGVmaW5lIFRD Ul9TSDFfSVPCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyOCkKKyNkZWZpbmUgVENSX1NIQVJFRMKg wqDCoCDCoMKgwqAgKFRDUl9TSDBfSVMgfCBUQ1JfU0gxX0lTKQrCoCNkZWZpbmUgVENSX1RHMF80 S8KgwqDCoCDCoMKgwqAgKFVMKDApIDw8IDE0KQrCoCNkZWZpbmUgVENSX1RHMF82NEvCoMKgwqAg wqDCoMKgIChVTCgxKSA8PCAxNCkKwqAjZGVmaW5lIFRDUl9URzBfMTZLwqDCoMKgIMKgwqDCoCAo VUwoMikgPDwgMTQpCkBAIC0xMTYsNiArMTQwLDkgQEAKwqAjZGVmaW5lIFRDUl9BU0lEMTbCoMKg wqAgwqDCoMKgIChVTCgxKSA8PCAzNikKwqAjZGVmaW5lIFRDUl9UQkkwwqDCoMKgIMKgwqDCoCAo VUwoMSkgPDwgMzcpCsKgCisjZGVmaW5lIFRDUl9FTDJfUkVTMcKgwqDCoCDCoMKgwqAgKChVTCgx KSA8PCAzMSkgfCAoVUwoMSkgPDwgMjMpKQorI2RlZmluZSBUQ1JfRUwyX1BTX1NISUZUwqDCoMKg IDE2CisKwqAvKgrCoCAqIE1lbW9yeSB0eXBlcyBhdmFpbGFibGUuCsKgICovCmRpZmYgLS1naXQg YS9saWIvYXJtNjQvYXNtL3Byb2Nlc3Nvci5oIGIvbGliL2FybTY0L2FzbS9wcm9jZXNzb3IuaApp bmRleCAxZDkyMjNmNzI4YTUuLmIyMTM2YWNkYTc0MyAxMDA2NDQKLS0tIGEvbGliL2FybTY0L2Fz bS9wcm9jZXNzb3IuaAorKysgYi9saWIvYXJtNjQvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNiw2ICsx NiwxNiBAQArCoCNkZWZpbmUgU0NUTFJfRUwxX0HCoMKgwqAgKDEgPDwgMSkKwqAjZGVmaW5lIFND VExSX0VMMV9NwqDCoMKgICgxIDw8IDApCsKgCisjZGVmaW5lIEhDUl9FTDJfVEdFwqDCoMKgICgx IDw8IDI3KQorI2RlZmluZSBIQ1JfRUwyX0UySMKgwqDCoCAoMSA8PCAzNCkKKworI2RlZmluZSBT Q1RMUl9FTDJfUkVTMcKgwqDCoCAoKFVMKDMpIDw8IDI4KSB8IChVTCgzKSA8PCAyMikgfMKgwqDC oCBcCivCoMKgwqAgwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMTgpIHwgKFVMKDEpIDw8IDE2KSB8 wqDCoMKgIMKgwqDCoCBcCivCoMKgwqAgwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMTEpIHwgKFVM KDMpIDw8IDQpKQorI2RlZmluZSBTQ1RMUl9FTDJfScKgwqDCoCBTQ1RMUl9FTDFfSQorI2RlZmlu ZSBTQ1RMUl9FTDJfQ8KgwqDCoCBTQ1RMUl9FTDFfQworI2RlZmluZSBTQ1RMUl9FTDJfTcKgwqDC oCBTQ1RMUl9FTDFfTQorCsKgI2lmbmRlZiBfX0FTU0VNQkxZX18KwqAjaW5jbHVkZSA8YXNtL3B0 cmFjZS5oPgrCoCNpbmNsdWRlIDxhc20vZXNyLmg+CgoKVG8gcnVuIGl0OgoKbGt2bSBydW4gLWYg c2VsZnRlc3QuZmxhdCAtYyAxIC1tIDEyOCAtcCBlbDIgLS1uZXN0ZWQgLS1pcnFjaGlwIGdpY3Yz IC0tY29uc29sZQpzZXJpYWwKClRoYW5rcywKQWxleApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5j cy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0 aW5mby9rdm1hcm0K 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.3 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=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 DC167C3A59E for ; Wed, 21 Aug 2019 11:59:34 +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 AE4B4206BB for ; Wed, 21 Aug 2019 11:59:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="rYIzNlL3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AE4B4206BB 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=ermISAHjqfgVz4DqT7XiTOWJtUcA4+Er/046wa2uhog=; b=rYIzNlL3Lrc4AG MVDWAASaeab7XQ13/XfQ9L2+knPi1AmDIlltRvsvbqPilDPy3YE6nJBdux9XT/gpxWD/aOfNYwABt W4kmnpBnG5J29U4nt7TgLuxO4hpaN2sWzYw+ll6Ve+wmlDZbFk4rbb+KMMu2GvRD3LlQpQdLLHU/+ K93q5YtC2GrOF5f4f+tC+DITT+UI8IdYoiNm9Xhlcx+T87jqVfEGPKLKxxiCsNJT7UTAkGSgKyNOn BpAplC8qdCQDk/z3+5k458XyrTCAh3EPlE+EDlMplyUb9tVzdy7+bSWAHo/2gt2aUDoZIaqj01UOZ BcLesj+GZo9HWJF7Nkxw==; 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 1i0PH1-0000ba-Kj; Wed, 21 Aug 2019 11:59:32 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i0PFT-0000JR-EM for linux-arm-kernel@lists.infradead.org; Wed, 21 Aug 2019 11:58:03 +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 C5E1F28; Wed, 21 Aug 2019 04:57:51 -0700 (PDT) Received: from [10.1.196.217] (e121566-lin.cambridge.arm.com [10.1.196.217]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D32B63F718; Wed, 21 Aug 2019 04:57:50 -0700 (PDT) Subject: Re: [PATCH 16/59] KVM: arm64: nv: Save/Restore vEL2 sysregs 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-17-marc.zyngier@arm.com> From: Alexandru Elisei Message-ID: Date: Wed, 21 Aug 2019 12:57:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20190621093843.220980-17-marc.zyngier@arm.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190821_045755_751044_EEA1639A X-CRM114-Status: GOOD ( 34.30 ) 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 T24gNi8yMS8xOSAxMDozOCBBTSwgTWFyYyBaeW5naWVyIHdyb3RlOgo+IEZyb206IEFuZHJlIFBy enl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+Cj4gV2hlbmV2ZXIgd2UgbmVlZCB0byBy ZXN0b3JlIHRoZSBndWVzdCdzIHN5c3RlbSByZWdpc3RlcnMgdG8gdGhlIENQVSwgd2UKPiBub3cg bmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIEVMMiBzeXN0ZW0gcmVnaXN0ZXJzIGFzIHdlbGwuIE1v c3Qgb2YgdGhlbQo+IGFyZSBhY2Nlc3NlZCB2aWEgdHJhcHMgb25seSwgYnV0IHNvbWUgaGF2ZSBh biBpbW1lZGlhdGUgZWZmZWN0IGFuZCBhbHNvCj4gYSBndWVzdCBydW5uaW5nIGluIFZIRSBtb2Rl IHdvdWxkIGV4cGVjdCB0aGVtIHRvIGJlIGFjY2Vzc2libGUgdmlhIHRoZWlyCj4gRUwxIGVuY29k aW5nLCB3aGljaCB3ZSBkbyBub3QgdHJhcC4KPgo+IFNwbGl0IHRoZSBjdXJyZW50IF9fc3lzcmVn X3tzYXZlLHJlc3RvcmV9X2VsMV9zdGF0ZSgpIGZ1bmN0aW9ucyBpbnRvCj4gaGFuZGxpbmcgY29t bW9uIHN5c3JlZ3MsIHRoZW4gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBndWVzdCBydW5uaW5n IGluCj4gdkVMMiBhbmQgdkVMMS4KPgo+IEZvciB2RUwyIHdlIHdyaXRlIHRoZSB2aXJ0dWFsIEVM MiByZWdpc3RlcnMgd2l0aCBhbiBpZGVudGljYWwgZm9ybWF0IGRpcmVjdGx5Cj4gaW50byB0aGVp ciBFTDEgY291bnRlcnBhcnQsIGFuZCB0cmFuc2xhdGUgdGhlIGZldyByZWdpc3RlcnMgdGhhdCBo YXZlIGEKPiBkaWZmZXJlbnQgZm9ybWF0IGZvciB0aGUgc2FtZSBlZmZlY3Qgb24gdGhlIGV4ZWN1 dGlvbiB3aGVuIHJ1bm5pbmcgYQo+IG5vbi1WSEUgZ3Vlc3QgZ3Vlc3QgaHlwZXJ2aXNvci4KPgo+ ICAgWyBDb21taXQgbWVzc2FnZSByZXdvcmtlZCBhbmQgbWFueSBidWcgZml4ZXMgYXBwbGllZCBi eSBNYXJjIFp5bmdpZXIKPiAgICAgYW5kIENocmlzdG9mZmVyIERhbGwuIF0KPgo+IFNpZ25lZC1v ZmYtYnk6IEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+IFNpZ25lZC1v ZmYtYnk6IE1hcmMgWnluZ2llciA8bWFyYy56eW5naWVyQGFybS5jb20+Cj4gU2lnbmVkLW9mZi1i eTogQ2hyaXN0b2ZmZXIgRGFsbCA8Y2hyaXN0b2ZmZXIuZGFsbEBhcm0uY29tPgo+IC0tLQo+ICBh cmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMgfCAxNjAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxNTMgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMg Yi9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMKPiBpbmRleCA2Mjg2NmE2OGU4NTIuLjJh YmI5YzNmZjI0ZiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMK PiArKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvc3lzcmVnLXNyLmMKPiBAQCAtMjIsNiArMjIsNyBA QAo+ICAjaW5jbHVkZSA8YXNtL2t2bV9hc20uaD4KPiAgI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0 ZS5oPgo+ICAjaW5jbHVkZSA8YXNtL2t2bV9oeXAuaD4KPiArI2luY2x1ZGUgPGFzbS9rdm1fbmVz dGVkLmg+Cj4gIAo+ICAvKgo+ICAgKiBOb24tVkhFOiBCb3RoIGhvc3QgYW5kIGd1ZXN0IG11c3Qg c2F2ZSBldmVyeXRoaW5nLgo+IEBAIC01MSwxMSArNTIsOSBAQCBzdGF0aWMgdm9pZCBfX2h5cF90 ZXh0IF9fc3lzcmVnX3NhdmVfdXNlcl9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0 KQo+ICAJY3R4dC0+c3lzX3JlZ3NbVFBJRFJST19FTDBdCT0gcmVhZF9zeXNyZWcodHBpZHJyb19l bDApOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBfX2h5cF90ZXh0IF9fc3lzcmVnX3NhdmVfZWwx X3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpCj4gK3N0YXRpYyB2b2lkIF9faHlw X3RleHQgX19zeXNyZWdfc2F2ZV92ZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0 eHQpCj4gIHsKPiAtCWN0eHQtPnN5c19yZWdzW0NTU0VMUl9FTDFdCT0gcmVhZF9zeXNyZWcoY3Nz ZWxyX2VsMSk7Cj4gIAljdHh0LT5zeXNfcmVnc1tTQ1RMUl9FTDFdCT0gcmVhZF9zeXNyZWdfZWwx KFNZU19TQ1RMUik7Cj4gLQljdHh0LT5zeXNfcmVnc1tBQ1RMUl9FTDFdCT0gcmVhZF9zeXNyZWco YWN0bHJfZWwxKTsKPiAgCWN0eHQtPnN5c19yZWdzW0NQQUNSX0VMMV0JPSByZWFkX3N5c3JlZ19l bDEoU1lTX0NQQUNSKTsKPiAgCWN0eHQtPnN5c19yZWdzW1RUQlIwX0VMMV0JPSByZWFkX3N5c3Jl Z19lbDEoU1lTX1RUQlIwKTsKPiAgCWN0eHQtPnN5c19yZWdzW1RUQlIxX0VMMV0JPSByZWFkX3N5 c3JlZ19lbDEoU1lTX1RUQlIxKTsKPiBAQCAtNjksMTQgKzY4LDU4IEBAIHN0YXRpYyB2b2lkIF9f aHlwX3RleHQgX19zeXNyZWdfc2F2ZV9lbDFfc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAq Y3R4dCkKPiAgCWN0eHQtPnN5c19yZWdzW0NPTlRFWFRJRFJfRUwxXQk9IHJlYWRfc3lzcmVnX2Vs MShTWVNfQ09OVEVYVElEUik7Cj4gIAljdHh0LT5zeXNfcmVnc1tBTUFJUl9FTDFdCT0gcmVhZF9z eXNyZWdfZWwxKFNZU19BTUFJUik7Cj4gIAljdHh0LT5zeXNfcmVnc1tDTlRLQ1RMX0VMMV0JPSBy ZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpOwo+IC0JY3R4dC0+c3lzX3JlZ3NbUEFSX0VMMV0J CT0gcmVhZF9zeXNyZWcocGFyX2VsMSk7Cj4gLQljdHh0LT5zeXNfcmVnc1tUUElEUl9FTDFdCT0g cmVhZF9zeXNyZWcodHBpZHJfZWwxKTsKPiAgCj4gIAljdHh0LT5ncF9yZWdzLnNwX2VsMQkJPSBy ZWFkX3N5c3JlZyhzcF9lbDEpOwo+ICAJY3R4dC0+Z3BfcmVncy5lbHJfZWwxCQk9IHJlYWRfc3lz cmVnX2VsMShTWVNfRUxSKTsKPiAgCWN0eHQtPmdwX3JlZ3Muc3BzcltLVk1fU1BTUl9FTDFdPSBy ZWFkX3N5c3JlZ19lbDEoU1lTX1NQU1IpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBfX3N5c3Jl Z19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqY3R4dCkKPiArewo+ICsJ Y3R4dC0+c3lzX3JlZ3NbRVNSX0VMMl0JCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19FU1IpOwo+ICsJ Y3R4dC0+c3lzX3JlZ3NbQUZTUjBfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfQUZTUjApOwo+ ICsJY3R4dC0+c3lzX3JlZ3NbQUZTUjFfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfQUZTUjEp Owo+ICsJY3R4dC0+c3lzX3JlZ3NbRkFSX0VMMl0JCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19GQVIp Owo+ICsJY3R4dC0+c3lzX3JlZ3NbTUFJUl9FTDJdCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19NQUlS KTsKPiArCWN0eHQtPnN5c19yZWdzW1ZCQVJfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfVkJB Uik7Cj4gKwljdHh0LT5zeXNfcmVnc1tDT05URVhUSURSX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEo U1lTX0NPTlRFWFRJRFIpOwo+ICsJY3R4dC0+c3lzX3JlZ3NbQU1BSVJfRUwyXQk9IHJlYWRfc3lz cmVnX2VsMShTWVNfQU1BSVIpOwo+ICsKPiArCS8qCj4gKwkgKiBJbiBWSEUgbW9kZSB0aG9zZSBy ZWdpc3RlcnMgYXJlIGNvbXBhdGlibGUgYmV0d2VlbiBFTDEgYW5kIEVMMiwKPiArCSAqIGFuZCB0 aGUgZ3Vlc3QgdXNlcyB0aGUgX0VMMSB2ZXJzaW9ucyBvbiB0aGUgQ1BVIG5hdHVyYWxseS4KPiAr CSAqIFNvIHdlIHNhdmUgdGhlbSBpbnRvIHRoZWlyIF9FTDIgdmVyc2lvbnMgaGVyZS4KPiArCSAq IEZvciBuVkhFIG1vZGUgd2UgdHJhcCBhY2Nlc3NlcyB0byB0aG9zZSByZWdpc3RlcnMsIHNvIG91 cgo+ICsJICogX0VMMiBjb3B5IGluIHN5c19yZWdzW10gaXMgYWx3YXlzIHVwLXRvLWRhdGUgYW5k IHdlIGRvbid0IG5lZWQKPiArCSAqIHRvIHNhdmUgYW55dGhpbmcgaGVyZS4KPiArCSAqLwo+ICsJ aWYgKF9fdmNwdV9lbDJfZTJoX2lzX3NldChjdHh0KSkgewo+ICsJCWN0eHQtPnN5c19yZWdzW1ND VExSX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSKTsKPiArCQljdHh0LT5zeXNfcmVn c1tDUFRSX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKTsKPiArCQljdHh0LT5zeXNf cmVnc1tUVEJSMF9FTDJdCT0gcmVhZF9zeXNyZWdfZWwxKFNZU19UVEJSMCk7Cj4gKwkJY3R4dC0+ c3lzX3JlZ3NbVFRCUjFfRUwyXQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfVFRCUjEpOwo+ICsJCWN0 eHQtPnN5c19yZWdzW1RDUl9FTDJdCQk9IHJlYWRfc3lzcmVnX2VsMShTWVNfVENSKTsKPiArCQlj dHh0LT5zeXNfcmVnc1tDTlRIQ1RMX0VMMl0JPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwp Owo+ICsJfQoKVGhpcyBjYW4gYnJlYWsgZ3Vlc3RzIHRoYXQgcnVuIHdpdGggVkhFIG9uLCB0aGVu IGRpc2FibGUgaXQuIEkgc3R1bWJsZWQgaW50bwp0aGlzIHdoaWxlIHdvcmtpbmcgb24ga3ZtLXVu aXQtdGVzdHMsIHdoaWNoIHVzZXMgVFRCUjAgZm9yIHRoZSB0cmFuc2xhdGlvbgp0YWJsZXMuIExl dCdzIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86CgoxLiBHdWVzdCBzZXRzIEhDUl9F TDIuRTJICjIuIEd1ZXN0IHByb2dyYW1zIHRyYW5zbGF0aW9uIHRhYmxlcyBpbiBUVEJSMF9FTDEs IHdoaWNoIHNob3VsZCByZWZsZWN0IGluClRUQlIwX0VMMi4KMy4gR3Vlc3QgZW5hYmxlZCBNTVUg YW5kIGRvZXMgc3R1ZmYuCjQuIEd1ZXN0IGRpc2FibGVzIE1NVSBhbmQgY2xlYXJzIEhDUl9FTDIu RTJICjUuIEd1ZXN0IHR1cm5zIE1NVSBvbi4gSXQgZG9lc24ndCBjaGFuZ2UgVFRCUjBfRUwyLCBi ZWNhdXNlIGl0IHdpbGwgdXNlIHRoZSBzYW1lCnRyYW5zbGF0aW9uIHRhYmxlcyBhcyB3aGVuIHJ1 bm5pbmcgd2l0aCBFMkggc2V0Lgo2LiBUaGUgdmNwdSBnZXRzIHNjaGVkdWxlZCBvdXQuIEUySCBp cyBub3Qgc2V0LCBzbyB0aGUgdmFsdWUgdGhhdCB0aGUgZ3Vlc3QKcHJvZ3JhbW1lZCBpbiBoYXJk d2FyZSBUVEJSMF9FTDEgd29uJ3QgYmUgY29waWVkIHRvIHZpcnR1YWwgVFRCUjBfRUwyLgo3LiBU aGUgdmNwdSBnZXRzIHNjaGVkdWxlZCBiYWNrIGluLiBLVk0gd2lsbCB3cml0ZSB0aGUgcmVzZXQg dmFsdWUgZm9yIHZpcnR1YWwKVFRCUjBfRUwyICh3aGljaCBpcyAweDApLgo4LiBUaGUgZ3Vlc3Qg aGFuZ3MuCgpJIHRoaW5rIHRoaXMgaXMgYWN0dWFsbHkgYSBzeW1wdG9tIG9mIGEgZGVlcGVyIGlz c3VlLiBXaGVuIEUySCBpcyBjbGVhcmVkLCB0aGUKdmFsdWVzIHRoYXQgdGhlIGd1ZXN0IHdyb3Rl IHRvIHRoZSBFTDEgcmVnaXN0ZXJzIGFyZW4ndCBpbW1lZGlhdGVseSByZWZsZWN0ZWQgaW4KdGhl IHZpcnR1YWwgRUwyIHJlZ2lzdGVycywgYXMgaXQgaGFwcGVucyBvbiByZWFsIGhhcmR3YXJlLiBJ bnN0ZWFkLCBzb21lIG9mIHRoZQpoYXJkd2FyZSB2YWx1ZXMgZnJvbSB0aGUgRUwxIHJlZ2lzdGVy cyBhcmUgY29waWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIEVMMgpyZWdpc3RlcnMgb24gdGhlIG5l eHQgdmNwdV9wdXQsIHdoaWNoIGhhcHBlbnMgYXQgYSBsYXRlciB0aW1lLgoKSSBhbSB0aGlua2lu ZyB0aGF0IHNvbWV0aGluZyBsaWtlIHRoaXMgd2lsbCBmaXggdGhlIGlzc3VlcyAoaXQgZGlkIGZp eCBkaXNhYmxpbmcKVkhFIGluIGt2bS11bml0LXRlc3RzKToKCmRpZmYgLS1naXQgYS9hcmNoL2Fy bTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCAxZDg5 NjExM2YxZjguLmYyYjVhMzk3NjJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3Jl Z3MuYworKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCkBAIC0zMzMsNyArMzMzLDggQEAg dm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBp bnQgcmVnKQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRvIHJldmVyc2UtdHJh bnNsYXRlIHZpcnR1YWwgRUwyIHN5c3RlbSByZWdpc3RlcnMgZm9yIGEKwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBub24tVkhFIGd1ZXN0IGh5cGVydmlzb3IuCsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9f dmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgPSB2YWw7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChyZWcgIT0gSENSX0VMMikKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgPSB2YWw7CsKgCsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzd2l0Y2ggKHJlZykgewrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2FzZSBFTFJfRUwyOgpAQCAtMzcwLDcgKzM3MSwxNyBAQCB2b2lkIHZjcHVf d3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGludApyZWcpCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47CsKgCsKgbWVtb3J5X3dyaXRlOgot wqDCoMKgwqDCoMKgwqAgX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSA9IHZhbDsKK8KgwqDCoMKg wqDCoCBpZiAocmVnID09IEhDUl9FTDIgJiYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSAmJiAh KHZhbCAmIEhDUl9FMkgpKSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByZWVtcHRf ZGlzYWJsZSgpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrdm1fYXJjaF92Y3B1X3B1 dCh2Y3B1KTsKKworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX3ZjcHVfc3lzX3JlZyh2 Y3B1LCByZWcpID0gdmFsOworCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGt2bV9hcmNo X3ZjcHVfbG9hZCh2Y3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwcmVlbXB0X2VuYWJsZSgpOworwqDCoMKgwqDCoMKgIH0gZWxzZSB7CivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSA9IHZh bDsKK8KgwqDCoMKgwqDCoCB9CsKgfQrCoArCoC8qIDMgYml0cyBwZXIgY2FjaGUgbGV2ZWwsIGFz IHBlciBDTElEUiwgYnV0IG5vbi1leGlzdGVudCBjYWNoZXMgYWx3YXlzIDAgKi8KCkkgZG9uJ3Qg dGhpbmsgdGhlcmUncyBhbnkgbmVlZCB0byBjb252ZXJ0IEVMMSByZWdpc3RlcnMgdG8gdGhlaXIg bm9uLXZoZSBFTDIKZm9ybWF0IGJlY2F1c2Ugb2YgaG93IFJFUzAvUkVTMSBpcyBkZWZpbmVkIGlu IHRoZSBhcmNoaXRlY3R1cmUgZ2xvc3NhcnkgKEFSTSBEREkKMDQ4N0UuYSwgcGFnZSA3ODkzIGZv ciBSRVMwIGFuZCA3ODk0IGZvciBSRVMxKToKCiJJZiBhIGJpdCBpcyBSRVMwIG9ubHkgaW4gc29t ZSBjb250ZXh0czoKQSByZWFkIG9mIHRoZSBiaXQgbXVzdCByZXR1cm4gdGhlIHZhbHVlIGxhc3Qg c3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIGJpdCwgYnkKZWl0aGVyIGEgZGlyZWN0IG9yIGFu IGluZGlyZWN0IHdyaXRlLCByZWdhcmRsZXNzIG9mIHRoZSB1c2Ugb2YgdGhlIHJlZ2lzdGVyIHdo ZW4KdGhlIGJpdCB3YXMgd3JpdHRlbgpbLi5dCldoaWxlIHRoZSB1c2Ugb2YgdGhlIHJlZ2lzdGVy IGlzIHN1Y2ggdGhhdCB0aGUgYml0IGlzIGRlc2NyaWJlZCBhcyBSRVMwLCB0aGUKdmFsdWUgb2Yg dGhlIGJpdCBtdXN0IGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBvcGVyYXRpb24gb2YgdGhlIFBFLCBv dGhlciB0aGFuCmRldGVybWluaW5nIHRoZSB2YWx1ZSByZWFkIGJhY2sgZnJvbSB0aGF0IGJpdCwg dW5sZXNzIHRoaXMgTWFudWFsIGV4cGxpY2l0bHkKZGVmaW5lcyBhZGRpdGlvbmFsIHByb3BlcnRp ZXMgZm9yIHRoZSBiaXQiCgpXZSBoYXZlIHRoZSB0cmFuc2xhdGUgZnVuY3Rpb25zIHRoYXQgc2hv dWxkIHRha2UgY2FyZSBvZiBjb252ZXJ0aW5nIHRoZSBub24tdmhlCkVMMiBmb3JtYXQgdG8gdGhl IGhhcmR3YXJlIEVMMSBmb3JtYXQuCgpBcyBhbiBhc2lkZSwgdGhlIGRpZmYgbG9va3Mgd2VpcmQg YmVjYXVzZSB0aGUgdmNwdV93cml0ZV9zeXNfcmVnIGlzIHZlcnkKY29tcGxleCwgdGhlcmUgYXJl IGEgTE9UIG9mIGV4aXQgcG9pbnRzIGZyb20gdGhlIGZ1bmN0aW9uLCBhbmQgdGhlIHJlZ2lzdGVy CnZhbHVlIGlzIHdyaXR0ZW4gdHdpY2UgZm9yIHNvbWUgcmVnaXN0ZXJzLiBJIHRoaW5rIGl0J3Mg d29ydGggY29uc2lkZXJpbmcgbWFraW5nCnRoZSBmdW5jdGlvbiBzaW1wbGVyLCBtYXliZSBzcGxp dHRpbmcgaXQgaW50byB0d28gc2VwYXJhdGUgZnVuY3Rpb25zLCBvbmUgZm9yCkVMMiByZWdpc3Rl cnMsIG9uZSBmb3IgcmVndWxhciByZWdpc3RlcnMuCgpIZXJlJ3MgdGhlIGt2bS11bml0LXRlc3Rz IGRpZmYgdGhhdCBJIHVzZWQgdG8gc3BvdCB0aGUgYnVnLiBJdCdzIHZlcnkgZmFyIGZyb20KYmVp bmcgY29ycmVjdCwgYnV0IHRoZSB0ZXN0IGlzIGFibGUgdG8gZmluaXNoIHdpdGggdGhlIGZpeCAo aXQgaGFuZ3Mgb3RoZXJ3aXNlKS4KWW91IGNhbiBhcHBseSBpdCBvbiB0b3Agb2YgMjEzMGZkNDE1 NGFkICgidHNjZGVhZGxpbmVfbGF0ZW5jeTogQ2hlY2sgY29uZGl0aW9uCmZpcnN0IGJlZm9yZSBs b29wIik6CgpkaWZmIC0tZ2l0IGEvYXJtL2NzdGFydDY0LlMgYi9hcm0vY3N0YXJ0NjQuUwppbmRl eCBiMGU4YmFhMWEyM2EuLjAxMzU3YjNiMTE2YiAxMDA2NDQKLS0tIGEvYXJtL2NzdGFydDY0LlMK KysrIGIvYXJtL2NzdGFydDY0LlMKQEAgLTUxLDYgKzUxLDE4IEBAIHN0YXJ0OgrCoMKgwqDCoCBi wqDCoMKgIDFiCsKgCsKgMToKK8KgwqDCoCBtcnPCoMKgwqAgeDQsIEN1cnJlbnRFTAorwqDCoMKg IGNtcMKgwqDCoCB4NCwgQ3VycmVudEVMX0VMMgorwqDCoMKgIGIubmXCoMKgwqAgMWYKK8KgwqDC oCBtcnPCoMKgwqAgeDQsIG1waWRyX2VsMQorwqDCoMKgIG1zcsKgwqDCoCB2bXBpZHJfZWwyLCB4 NAorwqDCoMKgIG1yc8KgwqDCoCB4NCwgbWlkcl9lbDEKK8KgwqDCoCBtc3LCoMKgwqAgdnBpZHJf ZWwyLCB4NAorwqDCoMKgIGxkcsKgwqDCoCB4NCwgPShIQ1JfRUwyX1RHRSB8IEhDUl9FTDJfRTJI KQorwqDCoMKgIG1zcsKgwqDCoCBoY3JfZWwyLCB4NAorwqDCoMKgIGlzYgorCisxOgrCoMKgwqDC oCAvKiBzZXQgdXAgc3RhY2sgKi8KwqDCoMKgwqAgbW92wqDCoMKgIHg0LCAjMQrCoMKgwqDCoCBt c3LCoMKgwqAgc3BzZWwsIHg0CkBAIC0xMDEsNiArMTEzLDE4IEBAIGdldF9tbXVfb2ZmOgrCoArC oC5nbG9ibCBzZWNvbmRhcnlfZW50cnkKwqBzZWNvbmRhcnlfZW50cnk6CivCoMKgwqAgbXJzwqDC oMKgIHgwLCBDdXJyZW50RUwKK8KgwqDCoCBjbXDCoMKgwqAgeDAsIEN1cnJlbnRFTF9FTDIKK8Kg wqDCoCBiLm5lwqDCoMKgIDFmCivCoMKgwqAgbXJzwqDCoMKgIHgwLCBtcGlkcl9lbDEKK8KgwqDC oCBtc3LCoMKgwqAgdm1waWRyX2VsMiwgeDAKK8KgwqDCoCBtcnPCoMKgwqAgeDAsIG1pZHJfZWwx CivCoMKgwqAgbXNywqDCoMKgIHZwaWRyX2VsMiwgeDAKK8KgwqDCoCBsZHLCoMKgwqAgeDAsID0o SENSX0VMMl9UR0UgfCBIQ1JfRUwyX0UySCkKK8KgwqDCoCBtc3LCoMKgwqAgaGNyX2VsMiwgeDAK K8KgwqDCoCBpc2IKKworMToKwqDCoMKgwqAgLyogRW5hYmxlIEZQL0FTSU1EICovCsKgwqDCoMKg IG1vdsKgwqDCoCB4MCwgIygzIDw8IDIwKQrCoMKgwqDCoCBtc3LCoMKgwqAgY3BhY3JfZWwxLCB4 MApAQCAtMTk0LDYgKzIxOCwzMyBAQCBhc21fbW11X2VuYWJsZToKwqAKwqDCoMKgwqAgcmV0CsKg Cithc21fbW11X2VuYWJsZV9oeXA6CivCoMKgwqDCoMKgwqAgaWPCoMKgwqDCoMKgIGlhbGx1CivC oMKgwqDCoMKgwqAgdGxiacKgwqDCoCBhbGxlMmlzCivCoMKgwqDCoMKgwqAgZHNiwqDCoMKgwqAg aXNoCisKK8KgwqDCoMKgwqDCoMKgIC8qIFRDUiAqLworwqDCoMKgwqDCoMKgIGxkcsKgwqDCoMKg IHgxLCA9VENSX0VMMl9SRVMxIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRDUl9UMFNaKFZB X0JJVFMpIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAorwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVENSX1RHMF82NEsgfMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBUQ1JfSVJHTjBfV0JXQSB8IFRDUl9PUkdOMF9XQldBIHzCoCBcCivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUQ1JfU0gwX0lTCivCoMKgwqDCoMKgwqAgbXJz wqDCoMKgwqAgeDIsIGlkX2FhNjRtbWZyMF9lbDEKK8KgwqDCoMKgwqDCoCBiZmnCoMKgwqDCoCB4 MSwgeDIsICNUQ1JfRUwyX1BTX1NISUZULCAjMworwqDCoMKgwqDCoMKgIG1zcsKgwqDCoMKgIHRj cl9lbDIsIHgxCisKK8KgwqDCoMKgwqDCoCAvKiBTYW1lIE1BSVIgYW5kIFRUQlIwIGFzIGluIFZI RSBtb2RlICovCisKK8KgwqDCoMKgwqDCoCAvKiBTQ1RMUiAqLworwqDCoMKgwqDCoMKgIGxkcsKg wqDCoMKgIHgxLCA9U0NUTFJfRUwyX1JFUzEgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBcCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTQ1RMUl9F TDJfQyB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNDVExSX0VMMl9JIHzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAorwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgU0NUTFJfRUwyX00KK8KgwqDCoMKgwqDCoCBtc3LCoMKgwqDCoCBz Y3Rscl9lbDIsIHgxCivCoMKgwqDCoMKgwqAgaXNiCisKK8KgwqDCoMKgwqDCoCByZXQKKwrCoC5n bG9ibCBhc21fbW11X2Rpc2FibGUKwqBhc21fbW11X2Rpc2FibGU6CsKgwqDCoMKgIG1yc8KgwqDC oCB4MCwgc2N0bHJfZWwxCkBAIC0yMDIsNiArMjUzLDE4IEBAIGFzbV9tbXVfZGlzYWJsZToKwqDC oMKgwqAgaXNiCsKgwqDCoMKgIHJldArCoAorLmdsb2JsIGFzbV9kaXNhYmxlX3ZoZQorYXNtX2Rp c2FibGVfdmhlOgorwqDCoMKgIHN0csKgwqDCoMKgIHgzMCwgW3NwLCAjLTE2XSEKKworwqDCoMKg IGJswqDCoMKgwqDCoCBhc21fbW11X2Rpc2FibGUKK8KgwqDCoCBtc3LCoMKgwqDCoCBoY3JfZWwy LCB4enIKK8KgwqDCoCBpc2IKK8KgwqDCoCBibMKgwqDCoMKgwqAgYXNtX21tdV9lbmFibGVfaHlw CisKK8KgwqDCoCBsZHLCoMKgwqDCoCB4MzAsIFtzcF0sICMxNgorwqDCoMKgIHJldAorCsKgLyoK wqAgKiBWZWN0b3JzCsKgICogQWRhcHRlZCBmcm9tIGFyY2gvYXJtNjQva2VybmVsL2VudHJ5LlMK ZGlmZiAtLWdpdCBhL2FybS9zZWxmdGVzdC5jIGIvYXJtL3NlbGZ0ZXN0LmMKaW5kZXggMjhhMTdm N2E3NTMxLi42OGExODAzNjIyMWIgMTAwNjQ0Ci0tLSBhL2FybS9zZWxmdGVzdC5jCisrKyBiL2Fy bS9zZWxmdGVzdC5jCkBAIC0yODcsNiArMjg3LDEyIEBAIHN0YXRpYyB2b2lkIHVzZXJfcHNjaV9z eXN0ZW1fb2ZmKHN0cnVjdCBwdF9yZWdzICpyZWdzLAp1bnNpZ25lZCBpbnQgZXNyKQrCoHsKwqDC oMKgwqAgX191c2VyX3BzY2lfc3lzdGVtX29mZigpOwrCoH0KKworZXh0ZXJuIHZvaWQgYXNtX2Rp c2FibGVfdmhlKHZvaWQpOworc3RhdGljIHZvaWQgY2hlY2tfZWwyKHZvaWQpCit7CivCoMKgwqAg YXNtX2Rpc2FibGVfdmhlKCk7Cit9CsKgI2VuZGlmCsKgCsKgc3RhdGljIHZvaWQgY2hlY2tfdmVj dG9ycyh2b2lkICphcmcgX191bnVzZWQpCkBAIC0zNjksNiArMzc1LDEwIEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKwqDCoMKgwqAgwqDCoMKgIHJlcG9ydCgiUFNDSSB2ZXJzaW9u IiwgcHNjaV9jaGVjaygpKTsKwqDCoMKgwqAgwqDCoMKgIG9uX2NwdXMoY3B1X3JlcG9ydCwgTlVM TCk7CsKgCivCoMKgwqAgfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgImVsMiIpID09IDApIHsK KworwqDCoMKgIMKgwqDCoCBjaGVja19lbDIoKTsKKwrCoMKgwqDCoCB9IGVsc2UgewrCoMKgwqDC oCDCoMKgwqAgcHJpbnRmKCJVbmtub3duIHN1YnRlc3RcbiIpOwrCoMKgwqDCoCDCoMKgwqAgYWJv cnQoKTsKZGlmZiAtLWdpdCBhL2xpYi9hcm0vcHNjaS5jIGIvbGliL2FybS9wc2NpLmMKaW5kZXgg YzNkMzk5MDY0YWUzLi41ZWYxYzAzODZjZTEgMTAwNjQ0Ci0tLSBhL2xpYi9hcm0vcHNjaS5jCisr KyBiL2xpYi9hcm0vcHNjaS5jCkBAIC0xNiw3ICsxNiw3IEBAIGludCBwc2NpX2ludm9rZSh1bnNp Z25lZCBsb25nIGZ1bmN0aW9uX2lkLCB1bnNpZ25lZCBsb25nIGFyZzAsCsKgwqDCoMKgIMKgwqDC oCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMikKwqB7CsKgwqDCoMKgIGFz bSB2b2xhdGlsZSgKLcKgwqDCoCDCoMKgwqAgImh2YyAjMCIKK8KgwqDCoCDCoMKgwqAgInNtYyAj MCIKwqDCoMKgwqAgOiAiK3IiIChmdW5jdGlvbl9pZCkKwqDCoMKgwqAgOiAiciIgKGFyZzApLCAi ciIgKGFyZzEpLCAiciIgKGFyZzIpKTsKwqDCoMKgwqAgcmV0dXJuIGZ1bmN0aW9uX2lkOwpkaWZm IC0tZ2l0IGEvbGliL2FybTY0L2FzbS9wZ3RhYmxlLWh3ZGVmLmggYi9saWIvYXJtNjQvYXNtL3Bn dGFibGUtaHdkZWYuaAppbmRleCAwNDVhM2NlMTI2NDUuLjZiODBlMzRkZGEwYyAxMDA2NDQKLS0t IGEvbGliL2FybTY0L2FzbS9wZ3RhYmxlLWh3ZGVmLmgKKysrIGIvbGliL2FybTY0L2FzbS9wZ3Rh YmxlLWh3ZGVmLmgKQEAgLTk1LDE4ICs5NSw0MiBAQArCoC8qCsKgICogVENSIGZsYWdzLgrCoCAq LwotI2RlZmluZSBUQ1JfVHhTWih4KcKgwqDCoCDCoMKgwqAgKCgoVUwoNjQpIC0gKHgpKSA8PCAx NikgfCAoKFVMKDY0KSAtICh4KSkgPDwgMCkpCi0jZGVmaW5lIFRDUl9JUkdOX05DwqDCoMKgIMKg wqDCoCAoKFVMKDApIDw8IDgpIHwgKFVMKDApIDw8IDI0KSkKLSNkZWZpbmUgVENSX0lSR05fV0JX QcKgwqDCoCDCoMKgwqAgKChVTCgxKSA8PCA4KSB8IChVTCgxKSA8PCAyNCkpCi0jZGVmaW5lIFRD Ul9JUkdOX1dUwqDCoMKgIMKgwqDCoCAoKFVMKDIpIDw8IDgpIHwgKFVMKDIpIDw8IDI0KSkKLSNk ZWZpbmUgVENSX0lSR05fV0JuV0HCoMKgwqAgwqDCoMKgICgoVUwoMykgPDwgOCkgfCAoVUwoMykg PDwgMjQpKQotI2RlZmluZSBUQ1JfSVJHTl9NQVNLwqDCoMKgIMKgwqDCoCAoKFVMKDMpIDw8IDgp IHwgKFVMKDMpIDw8IDI0KSkKLSNkZWZpbmUgVENSX09SR05fTkPCoMKgwqAgwqDCoMKgICgoVUwo MCkgPDwgMTApIHwgKFVMKDApIDw8IDI2KSkKLSNkZWZpbmUgVENSX09SR05fV0JXQcKgwqDCoCDC oMKgwqAgKChVTCgxKSA8PCAxMCkgfCAoVUwoMSkgPDwgMjYpKQotI2RlZmluZSBUQ1JfT1JHTl9X VMKgwqDCoCDCoMKgwqAgKChVTCgyKSA8PCAxMCkgfCAoVUwoMikgPDwgMjYpKQotI2RlZmluZSBU Q1JfT1JHTl9XQm5XQcKgwqDCoCDCoMKgwqAgKChVTCgzKSA8PCAxMCkgfCAoVUwoMykgPDwgMjYp KQotI2RlZmluZSBUQ1JfT1JHTl9NQVNLwqDCoMKgIMKgwqDCoCAoKFVMKDMpIDw8IDEwKSB8IChV TCgzKSA8PCAyNikpCi0jZGVmaW5lIFRDUl9TSEFSRUTCoMKgwqAgwqDCoMKgICgoVUwoMykgPDwg MTIpIHwgKFVMKDMpIDw8IDI4KSkKKyNkZWZpbmUgVENSX1QwU1ooeCnCoMKgwqAgwqDCoMKgICgo VUwoNjQpIC0gKHgpKSA8PCAwKQorI2RlZmluZSBUQ1JfVDFTWih4KcKgwqDCoCDCoMKgwqAgKChV TCg2NCkgLSAoeCkpIDw8IDE2KQorI2RlZmluZSBUQ1JfVHhTWih4KcKgwqDCoCDCoMKgwqAgKFRD Ul9UMFNaKHgpIHwgVENSX1QxU1ooeCkpCisjZGVmaW5lIFRDUl9JUkdOMF9OQ8KgwqDCoCDCoMKg wqAgKFVMKDApIDw8IDgpCisjZGVmaW5lIFRDUl9JUkdOMV9OQ8KgwqDCoCDCoMKgwqAgKFVMKDAp IDw8IDI0KQorI2RlZmluZSBUQ1JfSVJHTl9OQ8KgwqDCoCDCoMKgwqAgKFRDUl9JUkdOMF9OQyB8 IFRDUl9JUkdOMV9OQykKKyNkZWZpbmUgVENSX0lSR04wX1dCV0HCoMKgwqAgwqDCoMKgIChVTCgx KSA8PCA4KQorI2RlZmluZSBUQ1JfSVJHTjFfV0JXQcKgwqDCoCDCoMKgwqAgKFVMKDEpIDw8IDI0 KQorI2RlZmluZSBUQ1JfSVJHTl9XQldBwqDCoMKgIMKgwqDCoCAoVENSX0lSR04wX1dCV0EgfCBU Q1JfSVJHTjFfV0JXQSkKKyNkZWZpbmUgVENSX0lSR04wX1dUwqDCoMKgIMKgwqDCoCAoVUwoMikg PDwgOCkKKyNkZWZpbmUgVENSX0lSR04xX1dUwqDCoMKgIMKgwqDCoCAoVUwoMikgPDwgMjQpCisj ZGVmaW5lIFRDUl9JUkdOX1dUwqDCoMKgIMKgwqDCoCAoVENSX0lSR04wX1dUIHwgVENSX0lSR04x X1dUKQorI2RlZmluZSBUQ1JfSVJHTjBfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCA4KQor I2RlZmluZSBUQ1JfSVJHTjFfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyNCkKKyNkZWZp bmUgVENSX0lSR05fV0JuV0HCoMKgwqAgwqDCoMKgIChUQ1JfSVJHTjBfV0JuV0EgfCBUQ1JfSVJH TjFfV0JuV0EpCisjZGVmaW5lIFRDUl9JUkdOMF9NQVNLwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwg OCkKKyNkZWZpbmUgVENSX0lSR04xX01BU0vCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyNCkKKyNk ZWZpbmUgVENSX0lSR05fTUFTS8KgwqDCoCDCoMKgwqAgKFRDUl9JUkdOMF9NQVNLIHwgVENSX0lS R04xX01BU0spCisjZGVmaW5lIFRDUl9PUkdOMF9OQ8KgwqDCoCDCoMKgwqAgKFVMKDApIDw8IDEw KQorI2RlZmluZSBUQ1JfT1JHTjFfTkPCoMKgwqAgwqDCoMKgIChVTCgwKSA8PCAyNikKKyNkZWZp bmUgVENSX09SR05fTkPCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfTkMgfCBUQ1JfT1JHTjFfTkMp CisjZGVmaW5lIFRDUl9PUkdOMF9XQldBwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMTApCisjZGVm aW5lIFRDUl9PUkdOMV9XQldBwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMjYpCisjZGVmaW5lIFRD Ul9PUkdOX1dCV0HCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfV0JXQSB8IFRDUl9PUkdOMV9XQldB KQorI2RlZmluZSBUQ1JfT1JHTjBfV1TCoMKgwqAgwqDCoMKgIChVTCgyKSA8PCAxMCkKKyNkZWZp bmUgVENSX09SR04xX1dUwqDCoMKgIMKgwqDCoCAoVUwoMikgPDwgMjYpCisjZGVmaW5lIFRDUl9P UkdOX1dUwqDCoMKgIMKgwqDCoCAoVENSX09SR04wX1dUIHwgVENSX09SR04xX1dUKQorI2RlZmlu ZSBUQ1JfT1JHTjBfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCA4KQorI2RlZmluZSBUQ1Jf T1JHTjFfV0JuV0HCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyNCkKKyNkZWZpbmUgVENSX09SR05f V0JuV0HCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfV0JuV0EgfCBUQ1JfT1JHTjFfV0JuV0EpCisj ZGVmaW5lIFRDUl9PUkdOMF9NQVNLwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwgMTApCisjZGVmaW5l IFRDUl9PUkdOMV9NQVNLwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwgMjYpCisjZGVmaW5lIFRDUl9P UkdOX01BU0vCoMKgwqAgwqDCoMKgIChUQ1JfT1JHTjBfTUFTSyB8IFRDUl9PUkdOMV9NQVNLKQor I2RlZmluZSBUQ1JfU0gwX0lTwqDCoMKgIMKgwqDCoCAoVUwoMykgPDwgMTIpCisjZGVmaW5lIFRD Ul9TSDFfSVPCoMKgwqAgwqDCoMKgIChVTCgzKSA8PCAyOCkKKyNkZWZpbmUgVENSX1NIQVJFRMKg wqDCoCDCoMKgwqAgKFRDUl9TSDBfSVMgfCBUQ1JfU0gxX0lTKQrCoCNkZWZpbmUgVENSX1RHMF80 S8KgwqDCoCDCoMKgwqAgKFVMKDApIDw8IDE0KQrCoCNkZWZpbmUgVENSX1RHMF82NEvCoMKgwqAg wqDCoMKgIChVTCgxKSA8PCAxNCkKwqAjZGVmaW5lIFRDUl9URzBfMTZLwqDCoMKgIMKgwqDCoCAo VUwoMikgPDwgMTQpCkBAIC0xMTYsNiArMTQwLDkgQEAKwqAjZGVmaW5lIFRDUl9BU0lEMTbCoMKg wqAgwqDCoMKgIChVTCgxKSA8PCAzNikKwqAjZGVmaW5lIFRDUl9UQkkwwqDCoMKgIMKgwqDCoCAo VUwoMSkgPDwgMzcpCsKgCisjZGVmaW5lIFRDUl9FTDJfUkVTMcKgwqDCoCDCoMKgwqAgKChVTCgx KSA8PCAzMSkgfCAoVUwoMSkgPDwgMjMpKQorI2RlZmluZSBUQ1JfRUwyX1BTX1NISUZUwqDCoMKg IDE2CisKwqAvKgrCoCAqIE1lbW9yeSB0eXBlcyBhdmFpbGFibGUuCsKgICovCmRpZmYgLS1naXQg YS9saWIvYXJtNjQvYXNtL3Byb2Nlc3Nvci5oIGIvbGliL2FybTY0L2FzbS9wcm9jZXNzb3IuaApp bmRleCAxZDkyMjNmNzI4YTUuLmIyMTM2YWNkYTc0MyAxMDA2NDQKLS0tIGEvbGliL2FybTY0L2Fz bS9wcm9jZXNzb3IuaAorKysgYi9saWIvYXJtNjQvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNiw2ICsx NiwxNiBAQArCoCNkZWZpbmUgU0NUTFJfRUwxX0HCoMKgwqAgKDEgPDwgMSkKwqAjZGVmaW5lIFND VExSX0VMMV9NwqDCoMKgICgxIDw8IDApCsKgCisjZGVmaW5lIEhDUl9FTDJfVEdFwqDCoMKgICgx IDw8IDI3KQorI2RlZmluZSBIQ1JfRUwyX0UySMKgwqDCoCAoMSA8PCAzNCkKKworI2RlZmluZSBT Q1RMUl9FTDJfUkVTMcKgwqDCoCAoKFVMKDMpIDw8IDI4KSB8IChVTCgzKSA8PCAyMikgfMKgwqDC oCBcCivCoMKgwqAgwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMTgpIHwgKFVMKDEpIDw8IDE2KSB8 wqDCoMKgIMKgwqDCoCBcCivCoMKgwqAgwqDCoMKgIMKgwqDCoCAoVUwoMSkgPDwgMTEpIHwgKFVM KDMpIDw8IDQpKQorI2RlZmluZSBTQ1RMUl9FTDJfScKgwqDCoCBTQ1RMUl9FTDFfSQorI2RlZmlu ZSBTQ1RMUl9FTDJfQ8KgwqDCoCBTQ1RMUl9FTDFfQworI2RlZmluZSBTQ1RMUl9FTDJfTcKgwqDC oCBTQ1RMUl9FTDFfTQorCsKgI2lmbmRlZiBfX0FTU0VNQkxZX18KwqAjaW5jbHVkZSA8YXNtL3B0 cmFjZS5oPgrCoCNpbmNsdWRlIDxhc20vZXNyLmg+CgoKVG8gcnVuIGl0OgoKbGt2bSBydW4gLWYg c2VsZnRlc3QuZmxhdCAtYyAxIC1tIDEyOCAtcCBlbDIgLS1uZXN0ZWQgLS1pcnFjaGlwIGdpY3Yz IC0tY29uc29sZQpzZXJpYWwKClRoYW5rcywKQWxleAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=