From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E211EC6FD1F for ; Tue, 14 Mar 2023 05:36:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229735AbjCNFgN (ORCPT ); Tue, 14 Mar 2023 01:36:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229968AbjCNFgL (ORCPT ); Tue, 14 Mar 2023 01:36:11 -0400 Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42CDD211CB for ; Mon, 13 Mar 2023 22:36:07 -0700 (PDT) Received: by mail-pl1-x631.google.com with SMTP id v21so5296716ple.9 for ; Mon, 13 Mar 2023 22:36:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678772166; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hno9M7jfqssc84ksJPwSVrXsqIzHHbC2LfkPjyFPBcI=; b=Qku2AwPzNNvs7nKJCRFOPLDRjqjCA0GNT1WD6u3nuvymuoR5kGqecVyW0dpdrsP3f/ NEwViXvwM9dqX5BFDtF2vpdHq4fhUyQBh3h9YpOZkrZDLfJxJ0xRgC/ZJ7+lCPGbvHQI 3zGOahcFq6uEfBxVu4KH8QJfKLGd4t0q4YgDLpZ0dI96Or3R33iOEnwwhu5uJrkX/fmk bAC09GIlFDea36HXG+wTj5+0aSsboXhsORTN4F+CJtto/xQXiH4PDAMlsGiHV+3VMZA1 3BPeMgxNUNup9FMRyiLLui+WGLmCZyGBTNLGRzLHhGywu3lcZDz+6ia8UVe/gicj24P+ n1ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678772166; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hno9M7jfqssc84ksJPwSVrXsqIzHHbC2LfkPjyFPBcI=; b=MWD8HJBcyml76gS7RkUsaEkyRXZEMYxcCvd4tvAi+uTZWxO88Ht89fX3C2wp4JQk2r nSqNa5CnkrAcFNxNh+V9A16etIL7CRrflfWhAfYyebm+fjB+S/R0KIhrik6JkgdNzE83 AJ/pBPf0+H7hiuOeyj/8fq5P2l6y9n7Tq2TL5s9Lh0E6P0L9RwU3c7gYRLW4YV0TODSA z+H9SIGE96520g29CRZtub0YRfpYtZGcBi9+qjhHTDx3Km3wx3p0GbX6F3vsk7lnlvDR drk9663dioNDNdVUqwSmRI13ycxISYaKtseOgUQcGzxi+Q9A555aE0+urtAWzeuuWikC ZfGw== X-Gm-Message-State: AO0yUKV5rtLIKtht7cQf8Scfou1ZXl54IAb1QEelcnWxnZLDBPBgjYt1 e5dmlndGtCu7yq+TvWoxmbFwCHQ4W29mfOG0Dp1Trw== X-Google-Smtp-Source: AK7set+Z0Qs9Q8Ca4kDiYVK5slSY7OdHGQx2hDUd+HbuF9DZKe78QDtyd3RJXkr9/R4rnpJcEr0QF+laFZzBKPySWj0= X-Received: by 2002:a17:90a:5d0b:b0:23b:3611:e42c with SMTP id s11-20020a17090a5d0b00b0023b3611e42cmr3210659pji.5.1678772166377; Mon, 13 Mar 2023 22:36:06 -0700 (PDT) MIME-Version: 1.0 References: <20230228062246.1222387-1-jingzhangos@google.com> <20230228062246.1222387-5-jingzhangos@google.com> In-Reply-To: From: Reiji Watanabe Date: Mon, 13 Mar 2023 22:35:50 -0700 Message-ID: Subject: Re: [PATCH v3 4/6] KVM: arm64: Use per guest ID register for ID_AA64DFR0_EL1.PMUVer To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Ricardo Koller , Raghavendra Rao Ananta Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Jing, > > > > > On Mon, Feb 27, 2023 at 10:23=E2=80=AFPM Jing Zhang wrote: > > > > > > > > > > > > With per guest ID registers, PMUver settings from userspace > > > > > > can be stored in its corresponding ID register. > > > > > > > > > > > > No functional change intended. > > > > > > > > > > > > Signed-off-by: Jing Zhang > > > > > > --- > > > > > > arch/arm64/include/asm/kvm_host.h | 11 ++++--- > > > > > > arch/arm64/kvm/arm.c | 6 ---- > > > > > > arch/arm64/kvm/id_regs.c | 52 +++++++++++++++++++++++= +------- > > > > > > include/kvm/arm_pmu.h | 6 ++-- > > > > > > 4 files changed, 51 insertions(+), 24 deletions(-) > > > > > > > > > > > > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/inc= lude/asm/kvm_host.h > > > > > > index f64347eb77c2..effb61a9a855 100644 > > > > > > --- a/arch/arm64/include/asm/kvm_host.h > > > > > > +++ b/arch/arm64/include/asm/kvm_host.h > > > > > > @@ -218,6 +218,12 @@ struct kvm_arch { > > > > > > #define KVM_ARCH_FLAG_EL1_32BIT = 4 > > > > > > /* PSCI SYSTEM_SUSPEND enabled for the guest */ > > > > > > #define KVM_ARCH_FLAG_SYSTEM_SUSPEND_ENABLED 5 > > > > > > + /* > > > > > > + * AA64DFR0_EL1.PMUver was set as ID_AA64DFR0_EL1_PMUVe= r_IMP_DEF > > > > > > + * or DFR0_EL1.PerfMon was set as ID_DFR0_EL1_PerfMon_I= MPDEF from > > > > > > + * userspace for VCPUs without PMU. > > > > > > + */ > > > > > > +#define KVM_ARCH_FLAG_VCPU_HAS_IMP_DEF_PMU 6 > > > > > > > > > > > > unsigned long flags; > > > > > > > > > > > > @@ -230,11 +236,6 @@ struct kvm_arch { > > > > > > > > > > > > cpumask_var_t supported_cpus; > > > > > > > > > > > > - struct { > > > > > > - u8 imp:4; > > > > > > - u8 unimp:4; > > > > > > - } dfr0_pmuver; > > > > > > - > > > > > > /* Hypercall features firmware registers' descriptor */ > > > > > > struct kvm_smccc_features smccc_feat; > > > > > > > > > > > > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c > > > > > > index c78d68d011cb..fb2de2cb98cb 100644 > > > > > > --- a/arch/arm64/kvm/arm.c > > > > > > +++ b/arch/arm64/kvm/arm.c > > > > > > @@ -138,12 +138,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsi= gned long type) > > > > > > kvm_arm_set_default_id_regs(kvm); > > > > > > kvm_arm_init_hypercalls(kvm); > > > > > > > > > > > > - /* > > > > > > - * Initialise the default PMUver before there is a chan= ce to > > > > > > - * create an actual PMU. > > > > > > - */ > > > > > > - kvm->arch.dfr0_pmuver.imp =3D kvm_arm_pmu_get_pmuver_li= mit(); > > > > > > - > > > > > > return 0; > > > > > > > > > > > > err_free_cpumask: > > > > > > diff --git a/arch/arm64/kvm/id_regs.c b/arch/arm64/kvm/id_regs.= c > > > > > > index 36859e4caf02..21ec8fc10d79 100644 > > > > > > --- a/arch/arm64/kvm/id_regs.c > > > > > > +++ b/arch/arm64/kvm/id_regs.c > > > > > > @@ -21,9 +21,12 @@ > > > > > > static u8 vcpu_pmuver(const struct kvm_vcpu *vcpu) > > > > > > { > > > > > > if (kvm_vcpu_has_pmu(vcpu)) > > > > > > - return vcpu->kvm->arch.dfr0_pmuver.imp; > > > > > > - > > > > > > - return vcpu->kvm->arch.dfr0_pmuver.unimp; > > > > > > + return FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0= _EL1_PMUVer), > > > > > > + IDREG(vcpu->kvm, SYS_ID_AA64DFR= 0_EL1)); > > > > > > + else if (test_bit(KVM_ARCH_FLAG_VCPU_HAS_IMP_DEF_PMU, &= vcpu->kvm->arch.flags)) > > > > > > + return ID_AA64DFR0_EL1_PMUVer_IMP_DEF; > > > > > > + else > > > > > > + return 0; > > > > > > } > > > > > > > > > > > > static u8 perfmon_to_pmuver(u8 perfmon) > > > > > > @@ -256,10 +259,19 @@ static int set_id_aa64dfr0_el1(struct kvm= _vcpu *vcpu, > > > > > > if (val) > > > > > > return -EINVAL; > > > > > > > > > > > > - if (valid_pmu) > > > > > > - vcpu->kvm->arch.dfr0_pmuver.imp =3D pmuver; > > > > > > - else > > > > > > - vcpu->kvm->arch.dfr0_pmuver.unimp =3D pmuver; > > > > > > + if (valid_pmu) { > > > > > > + IDREG(vcpu->kvm, SYS_ID_AA64DFR0_EL1) &=3D ~ARM= 64_FEATURE_MASK(ID_AA64DFR0_EL1_PMUVer); > > > > > > + IDREG(vcpu->kvm, SYS_ID_AA64DFR0_EL1) |=3D > > > > > > + FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64DF= R0_EL1_PMUVer), pmuver); > > > > > > + > > > > > > + IDREG(vcpu->kvm, SYS_ID_DFR0_EL1) &=3D ~ARM64_F= EATURE_MASK(ID_DFR0_EL1_PerfMon); > > > > > > + IDREG(vcpu->kvm, SYS_ID_DFR0_EL1) |=3D > > > > > > + FIELD_PREP(ARM64_FEATURE_MASK(ID_DFR0_E= L1_PerfMon), pmuver); > > > > > > > > > > The pmuver must be converted to perfmon for ID_DFR0_EL1. > > > > Yes, wil fix it. > > > > > > > > > > Also, I think those registers should be updated atomically, altho= ugh PMUver > > > > > specified by userspace will be normally the same for all vCPUs wi= th > > > > > PMUv3 configured (I have the same comment for set_id_dfr0_el1()). > > > > > > > > > I think there is no race condition here. No corrupted data would be > > > > set in the field, right? > > > > > > If userspace tries to set inconsistent values of PMUver/Perfmon > > > for vCPUs with vPMU configured at the same time, PMUver and Perfmon > > > won't be consistent even with this KVM code. > > > It won't be sane userspace though :) > > > > > I am still not convinced. I don't believe a VM would set AArch64 and > > AArch32 ID registers at the same time. > > Difference threads will set (restore) those registers for > different vCPUs in parallel, although those data are shared per VM. > (e.g. kvm_arm_set_fw_reg_bmap() addresses the similar case) I'm sorry, this example is misleading (my memory was corrupted)... This is just an example of the code that gets a per VM lock in KVM_SET_ONE_REG (It gets the lock to prevent from modifying the registers after the first KVM_RUN for the guest). Thank you, Reiji > > > Anyway, let's see if there are > > any ideas from others before adding the lockings. > > > > > > > > > > > + } else if (pmuver =3D=3D ID_AA64DFR0_EL1_PMUVer_IMP_DEF= ) { > > > > > > + set_bit(KVM_ARCH_FLAG_VCPU_HAS_IMP_DEF_PMU, &vc= pu->kvm->arch.flags); > > > > > > + } else { > > > > > > + clear_bit(KVM_ARCH_FLAG_VCPU_HAS_IMP_DEF_PMU, &= vcpu->kvm->arch.flags); > > > > > > + } > > > > > > > > > > > > return 0; > > > > > > } > > > > > > @@ -296,10 +308,19 @@ static int set_id_dfr0_el1(struct kvm_vcp= u *vcpu, > > > > > > if (val) > > > > > > return -EINVAL; > > > > > > > > > > > > - if (valid_pmu) > > > > > > - vcpu->kvm->arch.dfr0_pmuver.imp =3D perfmon_to_= pmuver(perfmon); > > > > > > - else > > > > > > - vcpu->kvm->arch.dfr0_pmuver.unimp =3D perfmon_t= o_pmuver(perfmon); > > > > > > + if (valid_pmu) { > > > > > > + IDREG(vcpu->kvm, SYS_ID_DFR0_EL1) &=3D ~ARM64_F= EATURE_MASK(ID_DFR0_EL1_PerfMon); > > > > > > + IDREG(vcpu->kvm, SYS_ID_DFR0_EL1) |=3D FIELD_PR= EP( > > > > > > + ARM64_FEATURE_MASK(ID_DFR0_EL1_PerfMon)= , perfmon_to_pmuver(perfmon)); > > > > > > > > > > The perfmon value should be set for ID_DFR0_EL1 (not pmuver). > > > > > > > > > Sure, will fix it. > > > > > > + > > > > > > + IDREG(vcpu->kvm, SYS_ID_AA64DFR0_EL1) &=3D ~ARM= 64_FEATURE_MASK(ID_AA64DFR0_EL1_PMUVer); > > > > > > + IDREG(vcpu->kvm, SYS_ID_AA64DFR0_EL1) |=3D FIEL= D_PREP( > > > > > > + ARM64_FEATURE_MASK(ID_AA64DFR0_EL1_PMUV= er), perfmon_to_pmuver(perfmon)); > > > > > > + } else if (perfmon =3D=3D ID_DFR0_EL1_PerfMon_IMPDEF) { > > > > > > + set_bit(KVM_ARCH_FLAG_VCPU_HAS_IMP_DEF_PMU, &vc= pu->kvm->arch.flags); > > > > > > + } else { > > > > > > + clear_bit(KVM_ARCH_FLAG_VCPU_HAS_IMP_DEF_PMU, &= vcpu->kvm->arch.flags); > > > > > > + } > > > > > > > > > > > > return 0; > > > > > > } > > > > > > @@ -543,4 +564,13 @@ void kvm_arm_set_default_id_regs(struct kv= m *kvm) > > > > > > } > > > > > > > > > > > > IDREG(kvm, SYS_ID_AA64PFR0_EL1) =3D val; > > > > > > + > > > > > > + /* > > > > > > + * Initialise the default PMUver before there is a chan= ce to > > > > > > + * create an actual PMU. > > > > > > + */ > > > > > > + IDREG(kvm, SYS_ID_AA64DFR0_EL1) &=3D ~ARM64_FEATURE_MAS= K(ID_AA64DFR0_EL1_PMUVer); > > > > > > + IDREG(kvm, SYS_ID_AA64DFR0_EL1) |=3D > > > > > > + FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64DFR0_EL1_P= MUVer), > > > > > > + kvm_arm_pmu_get_pmuver_limit()); > > > > > > } > > > > > > diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h > > > > > > index 628775334d5e..eef67b7d9751 100644 > > > > > > --- a/include/kvm/arm_pmu.h > > > > > > +++ b/include/kvm/arm_pmu.h > > > > > > @@ -92,8 +92,10 @@ void kvm_vcpu_pmu_restore_host(struct kvm_vc= pu *vcpu); > > > > > > /* > > > > > > * Evaluates as true when emulating PMUv3p5, and false otherwi= se. > > > > > > */ > > > > > > -#define kvm_pmu_is_3p5(vcpu) = \ > > > > > > - (vcpu->kvm->arch.dfr0_pmuver.imp >=3D ID_AA64DFR0_EL1_P= MUVer_V3P5) > > > > > > +#define kvm_pmu_is_3p5(vcpu) = \ > > > > > > + (kvm_vcpu_has_pmu(vcpu) && = \ > > > > > > > > > > What is the reason for adding this kvm_vcpu_has_pmu() checking ? > > > > > I don't think this patch's changes necessitated this. > > > > For the same VM, is it possible that some VCPUs would have PMU, but > > > > some may not have? > > > > That's why the kvm_vcpu_has_pmu is added here. > > > > > > Yes, it's possible. But, it doesn't appear that this patch or any > > > patches in the series adds a code that newly uses the macro. > > > I believe this macro is always used for the vCPUs with vPMU > > > configured currently. > > > Did you find a case where this is used for vCPUs with no vPMU ? > > > > > > If this change tries to address an existing issue, I think it would > > > be nicer to fix this in a separate patch. Or it would be helpful > > > if you could add an explanation in the commit log at least. > > I don't think we should assume the potential users for the macro. Only > > adding kvm_vcpu_has_pmu() in the macro can have the same semantics as > > the original macro. > > The original macro would return false if it is used by a vCPU without > > vPMU. I think we should keep it as the same. > > The original macro always uses dfr0_pmuver.imp, which is the PMU version > for vCPUs with PMU configured. So, if the macro is used for vCPUs > with no PMU configured, it might return true (it depends on the value > of dfr0_pmuver.imp). > Or am I missing something ?? > > Thank you, > Reiji From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 93E52C6FD1F for ; Tue, 14 Mar 2023 05:37:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=u2/HZyI+JCaaSyfqSyx73Kc7tTn7bumCo2Td18TRl9M=; b=o7pKZ2UG9z+Pmd QF7Il1VpZL5UfHNLaDNkvXUEzRk45U8kdNB49tBQLYKyea0xKKZNVtMjGQHvm2HwjxLTdEuP++eZk LHV69pxRf7dATHy5u8bPEJL4J6oVTCMWLISAf5xFouhXozJe7QiLLVdlnOpxo94QSAvIQAqw73HfG 8VkDB3FadiB+vhbQ5mtpHWFc/XEvO3jOD29s5/L0t7uu1BqAvN2eSWeYgfjvPajxJyVv+/o5+X7M4 8l+1uRtjCb5sFNbeCTRGm8+SFCO1YvW+H4IYxiZgvbjv3nNTof4TCtP82QI+OF/aDCzSbX36HsoyE hEPk+o0oofA6EYkRzl2g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pbxKW-0095ka-71; Tue, 14 Mar 2023 05:36:12 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pbxKS-0095jl-7G for linux-arm-kernel@lists.infradead.org; Tue, 14 Mar 2023 05:36:10 +0000 Received: by mail-pj1-x1029.google.com with SMTP id k18-20020a17090a591200b0023d36e30cb5so1147591pji.1 for ; Mon, 13 Mar 2023 22:36:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678772166; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hno9M7jfqssc84ksJPwSVrXsqIzHHbC2LfkPjyFPBcI=; b=Qku2AwPzNNvs7nKJCRFOPLDRjqjCA0GNT1WD6u3nuvymuoR5kGqecVyW0dpdrsP3f/ NEwViXvwM9dqX5BFDtF2vpdHq4fhUyQBh3h9YpOZkrZDLfJxJ0xRgC/ZJ7+lCPGbvHQI 3zGOahcFq6uEfBxVu4KH8QJfKLGd4t0q4YgDLpZ0dI96Or3R33iOEnwwhu5uJrkX/fmk bAC09GIlFDea36HXG+wTj5+0aSsboXhsORTN4F+CJtto/xQXiH4PDAMlsGiHV+3VMZA1 3BPeMgxNUNup9FMRyiLLui+WGLmCZyGBTNLGRzLHhGywu3lcZDz+6ia8UVe/gicj24P+ n1ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678772166; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hno9M7jfqssc84ksJPwSVrXsqIzHHbC2LfkPjyFPBcI=; b=x08Z36XabYTBgzglp3oBLRmjbK1zJwCFgEpwEBUZ/MRD+2ywrEigAAzXRPLn64ZMSi xvvi8q+OwGXobXfDfaojib9wyJi1faU7BhOzTL2TH3BT7yAFHK4xAXIbRbMrAg6s0qS5 GsUwdJ/VFLOIa2rRR2rSLHXsHu+xdZ9TKILn39zai5iGLUv6rCcP6palX0cuKlryScWF aMV8n+w03A5r3uActqJn1HEqRo8aNZrEZ9OmI41wLLSo5tnxiM9XV6BsoR+rYj3NrU0K 0+TFZwdc1WlviHu0qTycbLaILlaf2lZ1jJ1nTAhY2eh6qqyHdBljtyJtYbVn/DclG4JK LOng== X-Gm-Message-State: AO0yUKUwQqx8RCl5TmhzLUQlIPRrT/1IvhSTXg0XwADOAU4Kq/c1B2J3 UzO8yusVnoxi+xbnuPPlepL6Ohme991SMSZR/s32sw== X-Google-Smtp-Source: AK7set+Z0Qs9Q8Ca4kDiYVK5slSY7OdHGQx2hDUd+HbuF9DZKe78QDtyd3RJXkr9/R4rnpJcEr0QF+laFZzBKPySWj0= X-Received: by 2002:a17:90a:5d0b:b0:23b:3611:e42c with SMTP id s11-20020a17090a5d0b00b0023b3611e42cmr3210659pji.5.1678772166377; Mon, 13 Mar 2023 22:36:06 -0700 (PDT) MIME-Version: 1.0 References: <20230228062246.1222387-1-jingzhangos@google.com> <20230228062246.1222387-5-jingzhangos@google.com> In-Reply-To: From: Reiji Watanabe Date: Mon, 13 Mar 2023 22:35:50 -0700 Message-ID: Subject: Re: [PATCH v3 4/6] KVM: arm64: Use per guest ID register for ID_AA64DFR0_EL1.PMUVer To: Jing Zhang Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Fuad Tabba , Ricardo Koller , Raghavendra Rao Ananta X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230313_223608_295307_A8561CC9 X-CRM114-Status: GOOD ( 57.44 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgSmluZywKCj4gPiA+ID4gPiBPbiBNb24sIEZlYiAyNywgMjAyMyBhdCAxMDoyM+KAr1BNIEpp bmcgWmhhbmcgPGppbmd6aGFuZ29zQGdvb2dsZS5jb20+IHdyb3RlOgo+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiBXaXRoIHBlciBndWVzdCBJRCByZWdpc3RlcnMsIFBNVXZlciBzZXR0aW5ncyBmcm9t IHVzZXJzcGFjZQo+ID4gPiA+ID4gPiBjYW4gYmUgc3RvcmVkIGluIGl0cyBjb3JyZXNwb25kaW5n IElEIHJlZ2lzdGVyLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBObyBmdW5jdGlvbmFsIGNoYW5n ZSBpbnRlbmRlZC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSmluZyBa aGFuZyA8amluZ3poYW5nb3NAZ29vZ2xlLmNvbT4KPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ ICBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggfCAxMSArKysrLS0tCj4gPiA+ID4g PiA+ICBhcmNoL2FybTY0L2t2bS9hcm0uYyAgICAgICAgICAgICAgfCAgNiAtLS0tCj4gPiA+ID4g PiA+ICBhcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMgICAgICAgICAgfCA1MiArKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tCj4gPiA+ID4gPiA+ICBpbmNsdWRlL2t2bS9hcm1fcG11LmggICAg ICAgICAgICAgfCAgNiArKy0tCj4gPiA+ID4gPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDUxIGluc2Vy dGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBkaWZmIC0t Z2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9rdm1faG9zdC5oCj4gPiA+ID4gPiA+IGluZGV4IGY2NDM0N2ViNzdjMi4uZWZmYjYx YTlhODU1IDEwMDY0NAo+ID4gPiA+ID4gPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmgKPiA+ID4gPiA+ID4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9z dC5oCj4gPiA+ID4gPiA+IEBAIC0yMTgsNiArMjE4LDEyIEBAIHN0cnVjdCBrdm1fYXJjaCB7Cj4g PiA+ID4gPiA+ICAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfRUwxXzMyQklUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA0Cj4gPiA+ID4gPiA+ICAgICAgICAgLyogUFNDSSBTWVNURU1fU1VT UEVORCBlbmFibGVkIGZvciB0aGUgZ3Vlc3QgKi8KPiA+ID4gPiA+ID4gICNkZWZpbmUgS1ZNX0FS Q0hfRkxBR19TWVNURU1fU1VTUEVORF9FTkFCTEVEICAgICAgICAgICA1Cj4gPiA+ID4gPiA+ICsg ICAgICAgLyoKPiA+ID4gPiA+ID4gKyAgICAgICAgKiBBQTY0REZSMF9FTDEuUE1VdmVyIHdhcyBz ZXQgYXMgSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGCj4gPiA+ID4gPiA+ICsgICAgICAg ICogb3IgREZSMF9FTDEuUGVyZk1vbiB3YXMgc2V0IGFzIElEX0RGUjBfRUwxX1BlcmZNb25fSU1Q REVGIGZyb20KPiA+ID4gPiA+ID4gKyAgICAgICAgKiB1c2Vyc3BhY2UgZm9yIFZDUFVzIHdpdGhv dXQgUE1VLgo+ID4gPiA+ID4gPiArICAgICAgICAqLwo+ID4gPiA+ID4gPiArI2RlZmluZSBLVk1f QVJDSF9GTEFHX1ZDUFVfSEFTX0lNUF9ERUZfUE1VICAgICAgICAgICAgIDYKPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiBAQCAtMjMwLDExICsyMzYsNiBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewo+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiAgICAgICAgIGNwdW1hc2tfdmFyX3Qgc3VwcG9ydGVkX2NwdXM7Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IC0gICAgICAgc3RydWN0IHsKPiA+ID4gPiA+ID4gLSAgICAgICAg ICAgICAgIHU4IGltcDo0Owo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgdTggdW5pbXA6NDsK PiA+ID4gPiA+ID4gLSAgICAgICB9IGRmcjBfcG11dmVyOwo+ID4gPiA+ID4gPiAtCj4gPiA+ID4g PiA+ICAgICAgICAgLyogSHlwZXJjYWxsIGZlYXR1cmVzIGZpcm13YXJlIHJlZ2lzdGVycycgZGVz Y3JpcHRvciAqLwo+ID4gPiA+ID4gPiAgICAgICAgIHN0cnVjdCBrdm1fc21jY2NfZmVhdHVyZXMg c21jY2NfZmVhdDsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJt NjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKPiA+ID4gPiA+ID4gaW5kZXggYzc4 ZDY4ZDAxMWNiLi5mYjJkZTJjYjk4Y2IgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvYXJt NjQva3ZtL2FybS5jCj4gPiA+ID4gPiA+ICsrKyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCj4gPiA+ ID4gPiA+IEBAIC0xMzgsMTIgKzEzOCw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBr dm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKQo+ID4gPiA+ID4gPiAgICAgICAgIGt2bV9hcm1f c2V0X2RlZmF1bHRfaWRfcmVncyhrdm0pOwo+ID4gPiA+ID4gPiAgICAgICAgIGt2bV9hcm1faW5p dF9oeXBlcmNhbGxzKGt2bSk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC0gICAgICAgLyoKPiA+ ID4gPiA+ID4gLSAgICAgICAgKiBJbml0aWFsaXNlIHRoZSBkZWZhdWx0IFBNVXZlciBiZWZvcmUg dGhlcmUgaXMgYSBjaGFuY2UgdG8KPiA+ID4gPiA+ID4gLSAgICAgICAgKiBjcmVhdGUgYW4gYWN0 dWFsIFBNVS4KPiA+ID4gPiA+ID4gLSAgICAgICAgKi8KPiA+ID4gPiA+ID4gLSAgICAgICBrdm0t PmFyY2guZGZyMF9wbXV2ZXIuaW1wID0ga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCgpOwo+ ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+ICAgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICBlcnJfZnJlZV9jcHVtYXNrOgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9rdm0vaWRfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vaWRfcmVncy5jCj4gPiA+ID4g PiA+IGluZGV4IDM2ODU5ZTRjYWYwMi4uMjFlYzhmYzEwZDc5IDEwMDY0NAo+ID4gPiA+ID4gPiAt LS0gYS9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMKPiA+ID4gPiA+ID4gKysrIGIvYXJjaC9hcm02 NC9rdm0vaWRfcmVncy5jCj4gPiA+ID4gPiA+IEBAIC0yMSw5ICsyMSwxMiBAQAo+ID4gPiA+ID4g PiAgc3RhdGljIHU4IHZjcHVfcG11dmVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiA+ ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4gICAgICAgICBpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1 KSkKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiB2Y3B1LT5rdm0tPmFyY2guZGZy MF9wbXV2ZXIuaW1wOwo+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+IC0gICAgICAgcmV0dXJuIHZj cHUtPmt2bS0+YXJjaC5kZnIwX3BtdXZlci51bmltcDsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiBGSUVMRF9HRVQoQVJNNjRfRkVBVFVSRV9NQVNLKElEX0FBNjRERlIwX0VMMV9Q TVVWZXIpLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEUkVH KHZjcHUtPmt2bSwgU1lTX0lEX0FBNjRERlIwX0VMMSkpOwo+ID4gPiA+ID4gPiArICAgICAgIGVs c2UgaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9IQVNfSU1QX0RFRl9QTVUsICZ2Y3B1 LT5rdm0tPmFyY2guZmxhZ3MpKQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIElE X0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRjsKPiA+ID4gPiA+ID4gKyAgICAgICBlbHNlCj4g PiA+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ID4gPiA+ID4gIH0KPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gIHN0YXRpYyB1OCBwZXJmbW9uX3RvX3BtdXZlcih1OCBwZXJmbW9u KQo+ID4gPiA+ID4gPiBAQCAtMjU2LDEwICsyNTksMTkgQEAgc3RhdGljIGludCBzZXRfaWRfYWE2 NGRmcjBfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiA+ID4gPiA+ID4gICAgICAgICBpZiAo dmFsKQo+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+IC0gICAgICAgaWYgKHZhbGlkX3BtdSkKPiA+ID4gPiA+ID4gLSAgICAg ICAgICAgICAgIHZjcHUtPmt2bS0+YXJjaC5kZnIwX3BtdXZlci5pbXAgPSBwbXV2ZXI7Cj4gPiA+ ID4gPiA+IC0gICAgICAgZWxzZQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgdmNwdS0+a3Zt LT5hcmNoLmRmcjBfcG11dmVyLnVuaW1wID0gcG11dmVyOwo+ID4gPiA+ID4gPiArICAgICAgIGlm ICh2YWxpZF9wbXUpIHsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIElEUkVHKHZjcHUtPmt2 bSwgU1lTX0lEX0FBNjRERlIwX0VMMSkgJj0gfkFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0REZS MF9FTDFfUE1VVmVyKTsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIElEUkVHKHZjcHUtPmt2 bSwgU1lTX0lEX0FBNjRERlIwX0VMMSkgfD0KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgRklFTERfUFJFUChBUk02NF9GRUFUVVJFX01BU0soSURfQUE2NERGUjBfRUwxX1BNVVZl ciksIHBtdXZlcik7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIElE UkVHKHZjcHUtPmt2bSwgU1lTX0lEX0RGUjBfRUwxKSAmPSB+QVJNNjRfRkVBVFVSRV9NQVNLKElE X0RGUjBfRUwxX1BlcmZNb24pOwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgSURSRUcodmNw dS0+a3ZtLCBTWVNfSURfREZSMF9FTDEpIHw9Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIEZJRUxEX1BSRVAoQVJNNjRfRkVBVFVSRV9NQVNLKElEX0RGUjBfRUwxX1BlcmZNb24p LCBwbXV2ZXIpOwo+ID4gPiA+ID4KPiA+ID4gPiA+IFRoZSBwbXV2ZXIgbXVzdCBiZSBjb252ZXJ0 ZWQgdG8gcGVyZm1vbiBmb3IgSURfREZSMF9FTDEuCj4gPiA+ID4gWWVzLCB3aWwgZml4IGl0Lgo+ ID4gPiA+ID4KPiA+ID4gPiA+IEFsc28sIEkgdGhpbmsgdGhvc2UgcmVnaXN0ZXJzIHNob3VsZCBi ZSB1cGRhdGVkIGF0b21pY2FsbHksIGFsdGhvdWdoIFBNVXZlcgo+ID4gPiA+ID4gc3BlY2lmaWVk IGJ5IHVzZXJzcGFjZSB3aWxsIGJlIG5vcm1hbGx5IHRoZSBzYW1lIGZvciBhbGwgdkNQVXMgd2l0 aAo+ID4gPiA+ID4gUE1VdjMgY29uZmlndXJlZCAoSSBoYXZlIHRoZSBzYW1lIGNvbW1lbnQgZm9y IHNldF9pZF9kZnIwX2VsMSgpKS4KPiA+ID4gPiA+Cj4gPiA+ID4gSSB0aGluayB0aGVyZSBpcyBu byByYWNlIGNvbmRpdGlvbiBoZXJlLiBObyBjb3JydXB0ZWQgZGF0YSB3b3VsZCBiZQo+ID4gPiA+ IHNldCBpbiB0aGUgZmllbGQsIHJpZ2h0Pwo+ID4gPgo+ID4gPiBJZiB1c2Vyc3BhY2UgdHJpZXMg dG8gc2V0IGluY29uc2lzdGVudCB2YWx1ZXMgb2YgUE1VdmVyL1BlcmZtb24KPiA+ID4gZm9yIHZD UFVzIHdpdGggdlBNVSBjb25maWd1cmVkIGF0IHRoZSBzYW1lIHRpbWUsIFBNVXZlciBhbmQgUGVy Zm1vbgo+ID4gPiB3b24ndCBiZSBjb25zaXN0ZW50IGV2ZW4gd2l0aCB0aGlzIEtWTSBjb2RlLgo+ ID4gPiBJdCB3b24ndCBiZSBzYW5lIHVzZXJzcGFjZSB0aG91Z2ggOikKPiA+ID4KPiA+IEkgYW0g c3RpbGwgbm90IGNvbnZpbmNlZC4gSSBkb24ndCBiZWxpZXZlIGEgVk0gd291bGQgc2V0IEFBcmNo NjQgYW5kCj4gPiBBQXJjaDMyIElEIHJlZ2lzdGVycyBhdCB0aGUgc2FtZSB0aW1lLgo+Cj4gRGlm ZmVyZW5jZSB0aHJlYWRzIHdpbGwgc2V0IChyZXN0b3JlKSB0aG9zZSByZWdpc3RlcnMgZm9yCj4g ZGlmZmVyZW50IHZDUFVzIGluIHBhcmFsbGVsLCBhbHRob3VnaCB0aG9zZSBkYXRhIGFyZSBzaGFy ZWQgcGVyIFZNLgo+IChlLmcuIGt2bV9hcm1fc2V0X2Z3X3JlZ19ibWFwKCkgYWRkcmVzc2VzIHRo ZSBzaW1pbGFyIGNhc2UpCgpJJ20gc29ycnksIHRoaXMgZXhhbXBsZSBpcyBtaXNsZWFkaW5nICht eSBtZW1vcnkgd2FzIGNvcnJ1cHRlZCkuLi4KVGhpcyBpcyBqdXN0IGFuIGV4YW1wbGUgb2YgdGhl IGNvZGUgdGhhdCBnZXRzIGEgcGVyIFZNIGxvY2sgaW4KS1ZNX1NFVF9PTkVfUkVHIChJdCBnZXRz IHRoZSBsb2NrIHRvIHByZXZlbnQgZnJvbSBtb2RpZnlpbmcgdGhlCnJlZ2lzdGVycyBhZnRlciB0 aGUgZmlyc3QgS1ZNX1JVTiBmb3IgdGhlIGd1ZXN0KS4KClRoYW5rIHlvdSwKUmVpamkKCgo+Cj4g PiBBbnl3YXksIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUKPiA+IGFueSBpZGVhcyBmcm9tIG90aGVy cyBiZWZvcmUgYWRkaW5nIHRoZSBsb2NraW5ncy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsgICAg ICAgfSBlbHNlIGlmIChwbXV2ZXIgPT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGKSB7 Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBzZXRfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9I QVNfSU1QX0RFRl9QTVUsICZ2Y3B1LT5rdm0tPmFyY2guZmxhZ3MpOwo+ID4gPiA+ID4gPiArICAg ICAgIH0gZWxzZSB7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBjbGVhcl9iaXQoS1ZNX0FS Q0hfRkxBR19WQ1BVX0hBU19JTVBfREVGX1BNVSwgJnZjcHUtPmt2bS0+YXJjaC5mbGFncyk7Cj4g PiA+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgICAgICAgIHJldHVy biAwOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPiBAQCAtMjk2LDEwICszMDgsMTkgQEAgc3Rh dGljIGludCBzZXRfaWRfZGZyMF9lbDEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ID4gPiA+ID4g PiAgICAgICAgIGlmICh2YWwpCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLSAgICAgICBpZiAodmFsaWRfcG11KQo+ID4g PiA+ID4gPiAtICAgICAgICAgICAgICAgdmNwdS0+a3ZtLT5hcmNoLmRmcjBfcG11dmVyLmltcCA9 IHBlcmZtb25fdG9fcG11dmVyKHBlcmZtb24pOwo+ID4gPiA+ID4gPiAtICAgICAgIGVsc2UKPiA+ ID4gPiA+ID4gLSAgICAgICAgICAgICAgIHZjcHUtPmt2bS0+YXJjaC5kZnIwX3BtdXZlci51bmlt cCA9IHBlcmZtb25fdG9fcG11dmVyKHBlcmZtb24pOwo+ID4gPiA+ID4gPiArICAgICAgIGlmICh2 YWxpZF9wbXUpIHsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIElEUkVHKHZjcHUtPmt2bSwg U1lTX0lEX0RGUjBfRUwxKSAmPSB+QVJNNjRfRkVBVFVSRV9NQVNLKElEX0RGUjBfRUwxX1BlcmZN b24pOwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgSURSRUcodmNwdS0+a3ZtLCBTWVNfSURf REZSMF9FTDEpIHw9IEZJRUxEX1BSRVAoCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIEFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9ERlIwX0VMMV9QZXJmTW9uKSwgcGVyZm1vbl90b19w bXV2ZXIocGVyZm1vbikpOwo+ID4gPiA+ID4KPiA+ID4gPiA+IFRoZSBwZXJmbW9uIHZhbHVlIHNo b3VsZCBiZSBzZXQgZm9yIElEX0RGUjBfRUwxIChub3QgcG11dmVyKS4KPiA+ID4gPiA+Cj4gPiA+ ID4gU3VyZSwgd2lsbCBmaXggaXQuCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgIElEUkVHKHZjcHUtPmt2bSwgU1lTX0lEX0FBNjRERlIwX0VMMSkgJj0gfkFSTTY0X0ZF QVRVUkVfTUFTSyhJRF9BQTY0REZSMF9FTDFfUE1VVmVyKTsKPiA+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgIElEUkVHKHZjcHUtPmt2bSwgU1lTX0lEX0FBNjRERlIwX0VMMSkgfD0gRklFTERfUFJF UCgKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgQVJNNjRfRkVBVFVSRV9NQVNL KElEX0FBNjRERlIwX0VMMV9QTVVWZXIpLCBwZXJmbW9uX3RvX3BtdXZlcihwZXJmbW9uKSk7Cj4g PiA+ID4gPiA+ICsgICAgICAgfSBlbHNlIGlmIChwZXJmbW9uID09IElEX0RGUjBfRUwxX1BlcmZN b25fSU1QREVGKSB7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBzZXRfYml0KEtWTV9BUkNI X0ZMQUdfVkNQVV9IQVNfSU1QX0RFRl9QTVUsICZ2Y3B1LT5rdm0tPmFyY2guZmxhZ3MpOwo+ID4g PiA+ID4gPiArICAgICAgIH0gZWxzZSB7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBjbGVh cl9iaXQoS1ZNX0FSQ0hfRkxBR19WQ1BVX0hBU19JTVBfREVGX1BNVSwgJnZjcHUtPmt2bS0+YXJj aC5mbGFncyk7Cj4gPiA+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAg ICAgICAgIHJldHVybiAwOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPiBAQCAtNTQzLDQgKzU2 NCwxMyBAQCB2b2lkIGt2bV9hcm1fc2V0X2RlZmF1bHRfaWRfcmVncyhzdHJ1Y3Qga3ZtICprdm0p Cj4gPiA+ID4gPiA+ICAgICAgICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgICAgICAgIElE UkVHKGt2bSwgU1lTX0lEX0FBNjRQRlIwX0VMMSkgPSB2YWw7Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gKyAgICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgICAqIEluaXRpYWxpc2UgdGhlIGRl ZmF1bHQgUE1VdmVyIGJlZm9yZSB0aGVyZSBpcyBhIGNoYW5jZSB0bwo+ID4gPiA+ID4gPiArICAg ICAgICAqIGNyZWF0ZSBhbiBhY3R1YWwgUE1VLgo+ID4gPiA+ID4gPiArICAgICAgICAqLwo+ID4g PiA+ID4gPiArICAgICAgIElEUkVHKGt2bSwgU1lTX0lEX0FBNjRERlIwX0VMMSkgJj0gfkFSTTY0 X0ZFQVRVUkVfTUFTSyhJRF9BQTY0REZSMF9FTDFfUE1VVmVyKTsKPiA+ID4gPiA+ID4gKyAgICAg ICBJRFJFRyhrdm0sIFNZU19JRF9BQTY0REZSMF9FTDEpIHw9Cj4gPiA+ID4gPiA+ICsgICAgICAg ICAgICAgICBGSUVMRF9QUkVQKEFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0REZSMF9FTDFfUE1V VmVyKSwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAga3ZtX2FybV9wbXVf Z2V0X3BtdXZlcl9saW1pdCgpKTsKPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaAo+ID4gPiA+ ID4gPiBpbmRleCA2Mjg3NzUzMzRkNWUuLmVlZjY3YjdkOTc1MSAxMDA2NDQKPiA+ID4gPiA+ID4g LS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oCj4gPiA+ID4gPiA+ICsrKyBiL2luY2x1ZGUva3Zt L2FybV9wbXUuaAo+ID4gPiA+ID4gPiBAQCAtOTIsOCArOTIsMTAgQEAgdm9pZCBrdm1fdmNwdV9w bXVfcmVzdG9yZV9ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cj4gPiA+ID4gPiA+ICAvKgo+ ID4gPiA+ID4gPiAgICogRXZhbHVhdGVzIGFzIHRydWUgd2hlbiBlbXVsYXRpbmcgUE1VdjNwNSwg YW5kIGZhbHNlIG90aGVyd2lzZS4KPiA+ID4gPiA+ID4gICAqLwo+ID4gPiA+ID4gPiAtI2RlZmlu ZSBrdm1fcG11X2lzXzNwNSh2Y3B1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gPiA+ID4gPiA+IC0gICAgICAgKHZjcHUtPmt2bS0+YXJjaC5kZnIwX3BtdXZl ci5pbXAgPj0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9WM1A1KQo+ID4gPiA+ID4gPiArI2RlZmlu ZSBrdm1fcG11X2lzXzNwNSh2Y3B1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiA+ID4gPiA+ICsgICAgICAgKGt2 bV92Y3B1X2hhc19wbXUodmNwdSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiA+Cj4gPiA+ID4gPiBXaGF0IGlz IHRoZSByZWFzb24gZm9yIGFkZGluZyB0aGlzIGt2bV92Y3B1X2hhc19wbXUoKSBjaGVja2luZyA/ Cj4gPiA+ID4gPiBJIGRvbid0IHRoaW5rIHRoaXMgcGF0Y2gncyBjaGFuZ2VzIG5lY2Vzc2l0YXRl ZCB0aGlzLgo+ID4gPiA+IEZvciB0aGUgc2FtZSBWTSwgaXMgaXQgcG9zc2libGUgdGhhdCBzb21l IFZDUFVzIHdvdWxkIGhhdmUgUE1VLCBidXQKPiA+ID4gPiBzb21lIG1heSBub3QgaGF2ZT8KPiA+ ID4gPiBUaGF0J3Mgd2h5IHRoZSBrdm1fdmNwdV9oYXNfcG11IGlzIGFkZGVkIGhlcmUuCj4gPiA+ Cj4gPiA+IFllcywgaXQncyBwb3NzaWJsZS4gQnV0LCBpdCBkb2Vzbid0IGFwcGVhciB0aGF0IHRo aXMgcGF0Y2ggb3IgYW55Cj4gPiA+IHBhdGNoZXMgaW4gdGhlIHNlcmllcyBhZGRzIGEgY29kZSB0 aGF0IG5ld2x5IHVzZXMgdGhlIG1hY3JvLgo+ID4gPiBJIGJlbGlldmUgdGhpcyBtYWNybyBpcyBh bHdheXMgdXNlZCBmb3IgdGhlIHZDUFVzIHdpdGggdlBNVQo+ID4gPiBjb25maWd1cmVkIGN1cnJl bnRseS4KPiA+ID4gRGlkIHlvdSBmaW5kIGEgY2FzZSB3aGVyZSB0aGlzIGlzIHVzZWQgZm9yIHZD UFVzIHdpdGggbm8gdlBNVSA/Cj4gPiA+Cj4gPiA+IElmIHRoaXMgY2hhbmdlIHRyaWVzIHRvIGFk ZHJlc3MgYW4gZXhpc3RpbmcgaXNzdWUsIEkgdGhpbmsgaXQgd291bGQKPiA+ID4gYmUgbmljZXIg dG8gZml4IHRoaXMgaW4gYSBzZXBhcmF0ZSBwYXRjaC4gT3IgaXQgd291bGQgYmUgaGVscGZ1bAo+ ID4gPiBpZiB5b3UgY291bGQgYWRkIGFuIGV4cGxhbmF0aW9uIGluIHRoZSBjb21taXQgbG9nIGF0 IGxlYXN0Lgo+ID4gSSBkb24ndCB0aGluayB3ZSBzaG91bGQgYXNzdW1lIHRoZSBwb3RlbnRpYWwg dXNlcnMgZm9yIHRoZSBtYWNyby4gT25seQo+ID4gYWRkaW5nIGt2bV92Y3B1X2hhc19wbXUoKSBp biB0aGUgbWFjcm8gY2FuIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzCj4gPiB0aGUgb3JpZ2lu YWwgbWFjcm8uCj4gPiBUaGUgb3JpZ2luYWwgbWFjcm8gd291bGQgcmV0dXJuIGZhbHNlIGlmIGl0 IGlzIHVzZWQgYnkgYSB2Q1BVIHdpdGhvdXQKPiA+IHZQTVUuIEkgdGhpbmsgd2Ugc2hvdWxkIGtl ZXAgaXQgYXMgdGhlIHNhbWUuCj4KPiBUaGUgb3JpZ2luYWwgbWFjcm8gYWx3YXlzIHVzZXMgZGZy MF9wbXV2ZXIuaW1wLCB3aGljaCBpcyB0aGUgUE1VIHZlcnNpb24KPiBmb3IgdkNQVXMgd2l0aCBQ TVUgY29uZmlndXJlZC4gIFNvLCBpZiB0aGUgbWFjcm8gaXMgdXNlZCBmb3IgdkNQVXMKPiB3aXRo IG5vIFBNVSBjb25maWd1cmVkLCBpdCBtaWdodCByZXR1cm4gdHJ1ZSAoaXQgZGVwZW5kcyBvbiB0 aGUgdmFsdWUKPiBvZiBkZnIwX3BtdXZlci5pbXApLgo+IE9yIGFtIEkgbWlzc2luZyBzb21ldGhp bmcgPz8KPgo+IFRoYW5rIHlvdSwKPiBSZWlqaQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=