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 60070C6FD1C for ; Tue, 14 Mar 2023 06:09:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229901AbjCNGJk (ORCPT ); Tue, 14 Mar 2023 02:09:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229483AbjCNGJi (ORCPT ); Tue, 14 Mar 2023 02:09:38 -0400 Received: from mail-oa1-x35.google.com (mail-oa1-x35.google.com [IPv6:2001:4860:4864:20::35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74EC55DC90 for ; Mon, 13 Mar 2023 23:09:35 -0700 (PDT) Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-176b90e14a9so16195919fac.9 for ; Mon, 13 Mar 2023 23:09:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678774174; 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=Oa/b1JmJ+JRpVd0DcgNo1vC8GPNb+zSNtZxPqUlZQ0s=; b=rZ7hxfOJ9+83Laoko1Jr0AzUIPeGjHXESHYWt5VRKfLweIbJ7t8RNxZmkGg4xIi/em qM9PazwYLKjh2CC5BtM76tOmm2ufhvdRUv+UsV3F/uVyjJN9o6y6ZFjIo65WOaJg/n8U hbn2K4ctq8wgmqzRKwaTnkpbdkR57bKEUiqYMWGTixFt2LRlgZTGM5I/Z8aCQtnFHLN+ zyOmDoOcStqtQlXV/gXE+6bJw1cAQLCugmwHA692xq+Ez64wLBqLVPRRZ44FgBf6PCTb Q1/4fDiNGo6zr8AxeefwEQlHRPet4A77nr37Ta0PRFrPSy8+4yyEWB110zYTxH6qpCZe PiEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678774174; 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=Oa/b1JmJ+JRpVd0DcgNo1vC8GPNb+zSNtZxPqUlZQ0s=; b=otUOy+9u9jrqRWQlHEtqmYTsQlNeOeIb96rq3eBdzX2yO9loI2QMi3UKcpy+ysUfAJ a3YIjzhW6MKdbSVQwlmIVkpajo0mcnbwFsrWxL6pbBJtq0GdfwQMGeUJ4V2iT36SsaK0 XjLZaTl1qtsIaY1NAUQXYz2poN5p8xWjCu1oqvQfO+0Rd0NJkrwpHuowq/KqxZW+A7Nc /uMQ1ua7jKO1cmxkrJxoiO0E04Bgn9oU4b+PqQmJnrQfIECrmqO+vBVbf5F5dpK6scB6 AEDVVC+03UunGX49tTJV+8PnOxCK+2sxd1p5G6h75OI+kHPQ7iGeiPlAS7IQthGcM32P P7ZQ== X-Gm-Message-State: AO0yUKWEem6Sz6yCmF8UAkgB4XmpYSOd2obOWLuhrZqJJfauTg7FgHIT MUvG8klas+HHuY+SJE5wu9Pr1f8Rm6tFD/NCtQiyqw== X-Google-Smtp-Source: AK7set/Bk6uDTyz4XrKEWOhz6PY9GlE2aWSo8Fs7XMFkyiMIHEj216SdnY8+TwU404T2REnC+HZ6ELR4NuBAtt0PoOs= X-Received: by 2002:a05:6870:bf8b:b0:177:ac40:8f6d with SMTP id av11-20020a056870bf8b00b00177ac408f6dmr2219059oac.8.1678774174080; Mon, 13 Mar 2023 23:09:34 -0700 (PDT) MIME-Version: 1.0 References: <20230228062246.1222387-1-jingzhangos@google.com> <20230228062246.1222387-5-jingzhangos@google.com> In-Reply-To: From: Jing Zhang Date: Mon, 13 Mar 2023 23:09:21 -0700 Message-ID: Subject: Re: [PATCH v3 4/6] KVM: arm64: Use per guest ID register for ID_AA64DFR0_EL1.PMUVer To: Reiji Watanabe 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 Reiji, On Mon, Mar 13, 2023 at 10:14=E2=80=AFPM Reiji Watanabe = wrote: > > On Mon, Mar 13, 2023 at 9:37=E2=80=AFPM Jing Zhang wrote: > > > > Hi Reiji, > > > > On Sun, Mar 12, 2023 at 9:13=E2=80=AFPM Reiji Watanabe wrote: > > > > > > Hi Jing, > > > > > > On Thu, Mar 9, 2023 at 6:38=E2=80=AFPM Jing Zhang wrote: > > > > > > > > Hi Reiji, > > > > > > > > On Wed, Mar 8, 2023 at 8:42 AM Reiji Watanabe w= rote: > > > > > > > > > > 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) > > > 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 ?? After double checking the code, I think you are right. The kvm_vcpu_has_pmu() is not necessary. > > Thank you, > Reiji Thanks, Jing 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 508F0C6FD1F for ; Tue, 14 Mar 2023 06:10:55 +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=GqJJpRBWtPsbYEkFf3juMktX55JDVsFFNaKYxI6riBs=; b=EMxlNqOmU7Tcqw CESMkJBBUeAaScybWISM/nIx1BWS8Sv3chbVkZvQ/rclBSLCh0gQ/a5SsOWx66bcB6grj5ZMcVQGV Oo/iWONgLtQLYO08JLAKUeO95sTeuYiJsISEK+IYFwYgq8kfrUrYmChsaO98iAO8RHjxCoPIBVUuP sdusAEcYrHkHXoy8TWvt3EEhQAcBp8nhw1CDYkBBQG3hdOUi/Ax9xZgbmgnFVNK13YLq20DD4R0+r qCwwiF6bUkN5UAZdev3tdkyRmPD0Zlswk+pfKOQ6guDv8OihUJ20/kWwoHvjyvvMpXXRqWuySM7o9 kWpDhS5xgzM34RrYmFPQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pbxqv-0099ln-0N; Tue, 14 Mar 2023 06:09:41 +0000 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pbxqq-0099kv-In for linux-arm-kernel@lists.infradead.org; Tue, 14 Mar 2023 06:09:38 +0000 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-177b78067ffso5017661fac.7 for ; Mon, 13 Mar 2023 23:09:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678774174; 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=Oa/b1JmJ+JRpVd0DcgNo1vC8GPNb+zSNtZxPqUlZQ0s=; b=rZ7hxfOJ9+83Laoko1Jr0AzUIPeGjHXESHYWt5VRKfLweIbJ7t8RNxZmkGg4xIi/em qM9PazwYLKjh2CC5BtM76tOmm2ufhvdRUv+UsV3F/uVyjJN9o6y6ZFjIo65WOaJg/n8U hbn2K4ctq8wgmqzRKwaTnkpbdkR57bKEUiqYMWGTixFt2LRlgZTGM5I/Z8aCQtnFHLN+ zyOmDoOcStqtQlXV/gXE+6bJw1cAQLCugmwHA692xq+Ez64wLBqLVPRRZ44FgBf6PCTb Q1/4fDiNGo6zr8AxeefwEQlHRPet4A77nr37Ta0PRFrPSy8+4yyEWB110zYTxH6qpCZe PiEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678774174; 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=Oa/b1JmJ+JRpVd0DcgNo1vC8GPNb+zSNtZxPqUlZQ0s=; b=1Hr5KdITW9va3q60RGIS97zsuKfM2AMvS/E3Li+MCzPynbffQnecs0MMX0qoLdOBgz YNoPMZis7z/znPeibXjwzz9efpXWxfpdWmxbnAY+bSrMc+7GEfmITVcsL9BvGjkdrcFL 4rN43Z4q8sZwSeWZGQEYuOeiuZL1VITeA40EiqvC7evI4cgBhfdIGDbDC4hjUryR4BtO Anm4PAmwHAp8F1OgP0V+XM5YlRvf9yDIwRqqIn2LaaY6EvWSeQwChHwk26oLFHPUyxZb 398LPq5CJNPu+35RiKxXtDbNT1nWzUhnl3j4KOHUZymFVuf5TOSrVPfazeW0XbmXt/9f dSIg== X-Gm-Message-State: AO0yUKXiGfxMDYFZZfLMIawVXzI6nCPXqtonnsVLAH6rfuerE0+Iuld9 Oy2o/Zk/TS8LsH7J85NKgO7TTg+I4SeiCo+XLMAKiw== X-Google-Smtp-Source: AK7set/Bk6uDTyz4XrKEWOhz6PY9GlE2aWSo8Fs7XMFkyiMIHEj216SdnY8+TwU404T2REnC+HZ6ELR4NuBAtt0PoOs= X-Received: by 2002:a05:6870:bf8b:b0:177:ac40:8f6d with SMTP id av11-20020a056870bf8b00b00177ac408f6dmr2219059oac.8.1678774174080; Mon, 13 Mar 2023 23:09:34 -0700 (PDT) MIME-Version: 1.0 References: <20230228062246.1222387-1-jingzhangos@google.com> <20230228062246.1222387-5-jingzhangos@google.com> In-Reply-To: From: Jing Zhang Date: Mon, 13 Mar 2023 23:09:21 -0700 Message-ID: Subject: Re: [PATCH v3 4/6] KVM: arm64: Use per guest ID register for ID_AA64DFR0_EL1.PMUVer To: Reiji Watanabe 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_230936_653104_B9CD4CBF X-CRM114-Status: GOOD ( 58.20 ) 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 SGkgUmVpamksCgpPbiBNb24sIE1hciAxMywgMjAyMyBhdCAxMDoxNOKAr1BNIFJlaWppIFdhdGFu YWJlIDxyZWlqaXdAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4KPiBPbiBNb24sIE1hciAxMywgMjAyMyBh dCA5OjM34oCvUE0gSmluZyBaaGFuZyA8amluZ3poYW5nb3NAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4g Pgo+ID4gSGkgUmVpamksCj4gPgo+ID4gT24gU3VuLCBNYXIgMTIsIDIwMjMgYXQgOToxM+KAr1BN IFJlaWppIFdhdGFuYWJlIDxyZWlqaXdAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gPiA+Cj4gPiA+IEhp IEppbmcsCj4gPiA+Cj4gPiA+IE9uIFRodSwgTWFyIDksIDIwMjMgYXQgNjozOOKAr1BNIEppbmcg WmhhbmcgPGppbmd6aGFuZ29zQGdvb2dsZS5jb20+IHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4gSGkg UmVpamksCj4gPiA+ID4KPiA+ID4gPiBPbiBXZWQsIE1hciA4LCAyMDIzIGF0IDg6NDIgQU0gUmVp amkgV2F0YW5hYmUgPHJlaWppd0Bnb29nbGUuY29tPiB3cm90ZToKPiA+ID4gPiA+Cj4gPiA+ID4g PiBIaSBKaW5nLAo+ID4gPiA+ID4KPiA+ID4gPiA+IE9uIE1vbiwgRmViIDI3LCAyMDIzIGF0IDEw OjIz4oCvUE0gSmluZyBaaGFuZyA8amluZ3poYW5nb3NAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IFdpdGggcGVyIGd1ZXN0IElEIHJlZ2lzdGVycywgUE1VdmVyIHNl dHRpbmdzIGZyb20gdXNlcnNwYWNlCj4gPiA+ID4gPiA+IGNhbiBiZSBzdG9yZWQgaW4gaXRzIGNv cnJlc3BvbmRpbmcgSUQgcmVnaXN0ZXIuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IE5vIGZ1bmN0 aW9uYWwgY2hhbmdlIGludGVuZGVkLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBTaWduZWQtb2Zm LWJ5OiBKaW5nIFpoYW5nIDxqaW5nemhhbmdvc0Bnb29nbGUuY29tPgo+ID4gPiA+ID4gPiAtLS0K PiA+ID4gPiA+ID4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCB8IDExICsrKyst LS0KPiA+ID4gPiA+ID4gIGFyY2gvYXJtNjQva3ZtL2FybS5jICAgICAgICAgICAgICB8ICA2IC0t LS0KPiA+ID4gPiA+ID4gIGFyY2gvYXJtNjQva3ZtL2lkX3JlZ3MuYyAgICAgICAgICB8IDUyICsr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KPiA+ID4gPiA+ID4gIGluY2x1ZGUva3ZtL2Fy bV9wbXUuaCAgICAgICAgICAgICB8ICA2ICsrLS0KPiA+ID4gPiA+ID4gIDQgZmlsZXMgY2hhbmdl ZCwgNTEgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNo L2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiA+ID4gPiA+ID4gaW5kZXggZjY0MzQ3ZWI3 N2MyLi5lZmZiNjFhOWE4NTUgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvYXJtNjQvaW5j bHVkZS9hc20va3ZtX2hvc3QuaAo+ID4gPiA+ID4gPiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUv YXNtL2t2bV9ob3N0LmgKPiA+ID4gPiA+ID4gQEAgLTIxOCw2ICsyMTgsMTIgQEAgc3RydWN0IGt2 bV9hcmNoIHsKPiA+ID4gPiA+ID4gICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FTDFfMzJCSVQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKPiA+ID4gPiA+ID4gICAgICAgICAvKiBQU0NJ IFNZU1RFTV9TVVNQRU5EIGVuYWJsZWQgZm9yIHRoZSBndWVzdCAqLwo+ID4gPiA+ID4gPiAgI2Rl ZmluZSBLVk1fQVJDSF9GTEFHX1NZU1RFTV9TVVNQRU5EX0VOQUJMRUQgICAgICAgICAgIDUKPiA+ ID4gPiA+ID4gKyAgICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgICAqIEFBNjRERlIwX0VMMS5Q TVV2ZXIgd2FzIHNldCBhcyBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYKPiA+ID4gPiA+ ID4gKyAgICAgICAgKiBvciBERlIwX0VMMS5QZXJmTW9uIHdhcyBzZXQgYXMgSURfREZSMF9FTDFf UGVyZk1vbl9JTVBERUYgZnJvbQo+ID4gPiA+ID4gPiArICAgICAgICAqIHVzZXJzcGFjZSBmb3Ig VkNQVXMgd2l0aG91dCBQTVUuCj4gPiA+ID4gPiA+ICsgICAgICAgICovCj4gPiA+ID4gPiA+ICsj ZGVmaW5lIEtWTV9BUkNIX0ZMQUdfVkNQVV9IQVNfSU1QX0RFRl9QTVUgICAgICAgICAgICAgNgo+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IEBAIC0yMzAsMTEgKzIzNiw2IEBAIHN0cnVjdCBrdm1fYXJjaCB7 Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgICAgY3B1bWFza192YXJfdCBzdXBwb3J0ZWRf Y3B1czsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLSAgICAgICBzdHJ1Y3Qgewo+ID4gPiA+ID4g PiAtICAgICAgICAgICAgICAgdTggaW1wOjQ7Cj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICB1 OCB1bmltcDo0Owo+ID4gPiA+ID4gPiAtICAgICAgIH0gZGZyMF9wbXV2ZXI7Cj4gPiA+ID4gPiA+ IC0KPiA+ID4gPiA+ID4gICAgICAgICAvKiBIeXBlcmNhbGwgZmVhdHVyZXMgZmlybXdhcmUgcmVn aXN0ZXJzJyBkZXNjcmlwdG9yICovCj4gPiA+ID4gPiA+ICAgICAgICAgc3RydWN0IGt2bV9zbWNj Y19mZWF0dXJlcyBzbWNjY19mZWF0Owo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwo+ID4gPiA+ID4g PiBpbmRleCBjNzhkNjhkMDExY2IuLmZiMmRlMmNiOThjYiAxMDA2NDQKPiA+ID4gPiA+ID4gLS0t IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMKPiA+ID4gPiA+ID4gKysrIGIvYXJjaC9hcm02NC9rdm0v YXJtLmMKPiA+ID4gPiA+ID4gQEAgLTEzOCwxMiArMTM4LDYgQEAgaW50IGt2bV9hcmNoX2luaXRf dm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpCj4gPiA+ID4gPiA+ICAgICAg ICAga3ZtX2FybV9zZXRfZGVmYXVsdF9pZF9yZWdzKGt2bSk7Cj4gPiA+ID4gPiA+ICAgICAgICAg a3ZtX2FybV9pbml0X2h5cGVyY2FsbHMoa3ZtKTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLSAg ICAgICAvKgo+ID4gPiA+ID4gPiAtICAgICAgICAqIEluaXRpYWxpc2UgdGhlIGRlZmF1bHQgUE1V dmVyIGJlZm9yZSB0aGVyZSBpcyBhIGNoYW5jZSB0bwo+ID4gPiA+ID4gPiAtICAgICAgICAqIGNy ZWF0ZSBhbiBhY3R1YWwgUE1VLgo+ID4gPiA+ID4gPiAtICAgICAgICAqLwo+ID4gPiA+ID4gPiAt ICAgICAgIGt2bS0+YXJjaC5kZnIwX3BtdXZlci5pbXAgPSBrdm1fYXJtX3BtdV9nZXRfcG11dmVy X2xpbWl0KCk7Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gICAgICAgICByZXR1cm4gMDsKPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gIGVycl9mcmVlX2NwdW1hc2s6Cj4gPiA+ID4gPiA+IGRpZmYg LS1naXQgYS9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9pZF9yZWdz LmMKPiA+ID4gPiA+ID4gaW5kZXggMzY4NTllNGNhZjAyLi4yMWVjOGZjMTBkNzkgMTAwNjQ0Cj4g PiA+ID4gPiA+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL2lkX3JlZ3MuYwo+ID4gPiA+ID4gPiArKysg Yi9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMKPiA+ID4gPiA+ID4gQEAgLTIxLDkgKzIxLDEyIEBA Cj4gPiA+ID4gPiA+ICBzdGF0aWMgdTggdmNwdV9wbXV2ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1 ICp2Y3B1KQo+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiAgICAgICAgIGlmIChrdm1fdmNwdV9o YXNfcG11KHZjcHUpKQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIHZjcHUtPmt2 bS0+YXJjaC5kZnIwX3BtdXZlci5pbXA7Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gLSAgICAg ICByZXR1cm4gdmNwdS0+a3ZtLT5hcmNoLmRmcjBfcG11dmVyLnVuaW1wOwo+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIEZJRUxEX0dFVChBUk02NF9GRUFUVVJFX01BU0soSURfQUE2 NERGUjBfRUwxX1BNVVZlciksCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSURSRUcodmNwdS0+a3ZtLCBTWVNfSURfQUE2NERGUjBfRUwxKSk7Cj4gPiA+ID4gPiA+ ICsgICAgICAgZWxzZSBpZiAodGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19WQ1BVX0hBU19JTVBfREVG X1BNVSwgJnZjcHUtPmt2bS0+YXJjaC5mbGFncykpCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGOwo+ID4gPiA+ID4gPiArICAg ICAgIGVsc2UKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gPiA+ID4g PiAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgc3RhdGljIHU4IHBlcmZtb25fdG9fcG11dmVy KHU4IHBlcmZtb24pCj4gPiA+ID4gPiA+IEBAIC0yNTYsMTAgKzI1OSwxOSBAQCBzdGF0aWMgaW50 IHNldF9pZF9hYTY0ZGZyMF9lbDEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ID4gPiA+ID4gPiAg ICAgICAgIGlmICh2YWwpCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLSAgICAgICBpZiAodmFsaWRfcG11KQo+ID4gPiA+ ID4gPiAtICAgICAgICAgICAgICAgdmNwdS0+a3ZtLT5hcmNoLmRmcjBfcG11dmVyLmltcCA9IHBt dXZlcjsKPiA+ID4gPiA+ID4gLSAgICAgICBlbHNlCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAg ICB2Y3B1LT5rdm0tPmFyY2guZGZyMF9wbXV2ZXIudW5pbXAgPSBwbXV2ZXI7Cj4gPiA+ID4gPiA+ ICsgICAgICAgaWYgKHZhbGlkX3BtdSkgewo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgSURS RUcodmNwdS0+a3ZtLCBTWVNfSURfQUE2NERGUjBfRUwxKSAmPSB+QVJNNjRfRkVBVFVSRV9NQVNL KElEX0FBNjRERlIwX0VMMV9QTVVWZXIpOwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgSURS RUcodmNwdS0+a3ZtLCBTWVNfSURfQUE2NERGUjBfRUwxKSB8PQo+ID4gPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBGSUVMRF9QUkVQKEFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0REZS MF9FTDFfUE1VVmVyKSwgcG11dmVyKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAg ICAgICAgICAgSURSRUcodmNwdS0+a3ZtLCBTWVNfSURfREZSMF9FTDEpICY9IH5BUk02NF9GRUFU VVJFX01BU0soSURfREZSMF9FTDFfUGVyZk1vbik7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICBJRFJFRyh2Y3B1LT5rdm0sIFNZU19JRF9ERlIwX0VMMSkgfD0KPiA+ID4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChBUk02NF9GRUFUVVJFX01BU0soSURfREZSMF9F TDFfUGVyZk1vbiksIHBtdXZlcik7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhlIHBtdXZlciBtdXN0 IGJlIGNvbnZlcnRlZCB0byBwZXJmbW9uIGZvciBJRF9ERlIwX0VMMS4KPiA+ID4gPiBZZXMsIHdp bCBmaXggaXQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gQWxzbywgSSB0aGluayB0aG9zZSByZWdpc3Rl cnMgc2hvdWxkIGJlIHVwZGF0ZWQgYXRvbWljYWxseSwgYWx0aG91Z2ggUE1VdmVyCj4gPiA+ID4g PiBzcGVjaWZpZWQgYnkgdXNlcnNwYWNlIHdpbGwgYmUgbm9ybWFsbHkgdGhlIHNhbWUgZm9yIGFs bCB2Q1BVcyB3aXRoCj4gPiA+ID4gPiBQTVV2MyBjb25maWd1cmVkIChJIGhhdmUgdGhlIHNhbWUg Y29tbWVudCBmb3Igc2V0X2lkX2RmcjBfZWwxKCkpLgo+ID4gPiA+ID4KPiA+ID4gPiBJIHRoaW5r IHRoZXJlIGlzIG5vIHJhY2UgY29uZGl0aW9uIGhlcmUuIE5vIGNvcnJ1cHRlZCBkYXRhIHdvdWxk IGJlCj4gPiA+ID4gc2V0IGluIHRoZSBmaWVsZCwgcmlnaHQ/Cj4gPiA+Cj4gPiA+IElmIHVzZXJz cGFjZSB0cmllcyB0byBzZXQgaW5jb25zaXN0ZW50IHZhbHVlcyBvZiBQTVV2ZXIvUGVyZm1vbgo+ ID4gPiBmb3IgdkNQVXMgd2l0aCB2UE1VIGNvbmZpZ3VyZWQgYXQgdGhlIHNhbWUgdGltZSwgUE1V dmVyIGFuZCBQZXJmbW9uCj4gPiA+IHdvbid0IGJlIGNvbnNpc3RlbnQgZXZlbiB3aXRoIHRoaXMg S1ZNIGNvZGUuCj4gPiA+IEl0IHdvbid0IGJlIHNhbmUgdXNlcnNwYWNlIHRob3VnaCA6KQo+ID4g Pgo+ID4gSSBhbSBzdGlsbCBub3QgY29udmluY2VkLiBJIGRvbid0IGJlbGlldmUgYSBWTSB3b3Vs ZCBzZXQgQUFyY2g2NCBhbmQKPiA+IEFBcmNoMzIgSUQgcmVnaXN0ZXJzIGF0IHRoZSBzYW1lIHRp bWUuCj4KPiBEaWZmZXJlbmNlIHRocmVhZHMgd2lsbCBzZXQgKHJlc3RvcmUpIHRob3NlIHJlZ2lz dGVycyBmb3IKPiBkaWZmZXJlbnQgdkNQVXMgaW4gcGFyYWxsZWwsIGFsdGhvdWdoIHRob3NlIGRh dGEgYXJlIHNoYXJlZCBwZXIgVk0uCj4gKGUuZy4ga3ZtX2FybV9zZXRfZndfcmVnX2JtYXAoKSBh ZGRyZXNzZXMgdGhlIHNpbWlsYXIgY2FzZSkKPgo+ID4gQW55d2F5LCBsZXQncyBzZWUgaWYgdGhl cmUgYXJlCj4gPiBhbnkgaWRlYXMgZnJvbSBvdGhlcnMgYmVmb3JlIGFkZGluZyB0aGUgbG9ja2lu Z3MuCj4gPiA+ID4gPgo+ID4gPiA+ID4gPiArICAgICAgIH0gZWxzZSBpZiAocG11dmVyID09IElE X0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRikgewo+ID4gPiA+ID4gPiArICAgICAgICAgICAg ICAgc2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfSEFTX0lNUF9ERUZfUE1VLCAmdmNwdS0+a3Zt LT5hcmNoLmZsYWdzKTsKPiA+ID4gPiA+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgY2xlYXJfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9IQVNfSU1QX0RFRl9Q TVUsICZ2Y3B1LT5rdm0tPmFyY2guZmxhZ3MpOwo+ID4gPiA+ID4gPiArICAgICAgIH0KPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gICAgICAgICByZXR1cm4gMDsKPiA+ID4gPiA+ID4gIH0KPiA+ID4g PiA+ID4gQEAgLTI5NiwxMCArMzA4LDE5IEBAIHN0YXRpYyBpbnQgc2V0X2lkX2RmcjBfZWwxKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiA+ID4gPiA+ID4gICAgICAgICBpZiAodmFsKQo+ID4gPiA+ ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+IC0gICAgICAgaWYgKHZhbGlkX3BtdSkKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgIHZj cHUtPmt2bS0+YXJjaC5kZnIwX3BtdXZlci5pbXAgPSBwZXJmbW9uX3RvX3BtdXZlcihwZXJmbW9u KTsKPiA+ID4gPiA+ID4gLSAgICAgICBlbHNlCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICB2 Y3B1LT5rdm0tPmFyY2guZGZyMF9wbXV2ZXIudW5pbXAgPSBwZXJmbW9uX3RvX3BtdXZlcihwZXJm bW9uKTsKPiA+ID4gPiA+ID4gKyAgICAgICBpZiAodmFsaWRfcG11KSB7Cj4gPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICBJRFJFRyh2Y3B1LT5rdm0sIFNZU19JRF9ERlIwX0VMMSkgJj0gfkFSTTY0 X0ZFQVRVUkVfTUFTSyhJRF9ERlIwX0VMMV9QZXJmTW9uKTsKPiA+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgIElEUkVHKHZjcHUtPmt2bSwgU1lTX0lEX0RGUjBfRUwxKSB8PSBGSUVMRF9QUkVQKAo+ ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBBUk02NF9GRUFUVVJFX01BU0soSURf REZSMF9FTDFfUGVyZk1vbiksIHBlcmZtb25fdG9fcG11dmVyKHBlcmZtb24pKTsKPiA+ID4gPiA+ Cj4gPiA+ID4gPiBUaGUgcGVyZm1vbiB2YWx1ZSBzaG91bGQgYmUgc2V0IGZvciBJRF9ERlIwX0VM MSAobm90IHBtdXZlcikuCj4gPiA+ID4gPgo+ID4gPiA+IFN1cmUsIHdpbGwgZml4IGl0Lgo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBJRFJFRyh2Y3B1LT5rdm0sIFNZ U19JRF9BQTY0REZSMF9FTDEpICY9IH5BUk02NF9GRUFUVVJFX01BU0soSURfQUE2NERGUjBfRUwx X1BNVVZlcik7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBJRFJFRyh2Y3B1LT5rdm0sIFNZ U19JRF9BQTY0REZSMF9FTDEpIHw9IEZJRUxEX1BSRVAoCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIEFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0REZSMF9FTDFfUE1VVmVyKSwg cGVyZm1vbl90b19wbXV2ZXIocGVyZm1vbikpOwo+ID4gPiA+ID4gPiArICAgICAgIH0gZWxzZSBp ZiAocGVyZm1vbiA9PSBJRF9ERlIwX0VMMV9QZXJmTW9uX0lNUERFRikgewo+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgc2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfSEFTX0lNUF9ERUZfUE1V LCAmdmNwdS0+a3ZtLT5hcmNoLmZsYWdzKTsKPiA+ID4gPiA+ID4gKyAgICAgICB9IGVsc2Ugewo+ ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgY2xlYXJfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9I QVNfSU1QX0RFRl9QTVUsICZ2Y3B1LT5rdm0tPmFyY2guZmxhZ3MpOwo+ID4gPiA+ID4gPiArICAg ICAgIH0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgICByZXR1cm4gMDsKPiA+ID4gPiA+ ID4gIH0KPiA+ID4gPiA+ID4gQEAgLTU0Myw0ICs1NjQsMTMgQEAgdm9pZCBrdm1fYXJtX3NldF9k ZWZhdWx0X2lkX3JlZ3Moc3RydWN0IGt2bSAqa3ZtKQo+ID4gPiA+ID4gPiAgICAgICAgIH0KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgICBJRFJFRyhrdm0sIFNZU19JRF9BQTY0UEZSMF9F TDEpID0gdmFsOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgICAgLyoKPiA+ID4gPiA+ ID4gKyAgICAgICAgKiBJbml0aWFsaXNlIHRoZSBkZWZhdWx0IFBNVXZlciBiZWZvcmUgdGhlcmUg aXMgYSBjaGFuY2UgdG8KPiA+ID4gPiA+ID4gKyAgICAgICAgKiBjcmVhdGUgYW4gYWN0dWFsIFBN VS4KPiA+ID4gPiA+ID4gKyAgICAgICAgKi8KPiA+ID4gPiA+ID4gKyAgICAgICBJRFJFRyhrdm0s IFNZU19JRF9BQTY0REZSMF9FTDEpICY9IH5BUk02NF9GRUFUVVJFX01BU0soSURfQUE2NERGUjBf RUwxX1BNVVZlcik7Cj4gPiA+ID4gPiA+ICsgICAgICAgSURSRUcoa3ZtLCBTWVNfSURfQUE2NERG UjBfRUwxKSB8PQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgRklFTERfUFJFUChBUk02NF9G RUFUVVJFX01BU0soSURfQUE2NERGUjBfRUwxX1BNVVZlciksCj4gPiA+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIGt2bV9hcm1fcG11X2dldF9wbXV2ZXJfbGltaXQoKSk7Cj4gPiA+ ID4gPiA+ICB9Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11Lmgg Yi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKPiA+ID4gPiA+ID4gaW5kZXggNjI4Nzc1MzM0ZDVlLi5l ZWY2N2I3ZDk3NTEgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUu aAo+ID4gPiA+ID4gPiArKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKPiA+ID4gPiA+ID4gQEAg LTkyLDggKzkyLDEwIEBAIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUpOwo+ID4gPiA+ID4gPiAgLyoKPiA+ID4gPiA+ID4gICAqIEV2YWx1YXRlcyBh cyB0cnVlIHdoZW4gZW11bGF0aW5nIFBNVXYzcDUsIGFuZCBmYWxzZSBvdGhlcndpc2UuCj4gPiA+ ID4gPiA+ICAgKi8KPiA+ID4gPiA+ID4gLSNkZWZpbmUga3ZtX3BtdV9pc18zcDUodmNwdSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiA+ID4gPiAtICAg ICAgICh2Y3B1LT5rdm0tPmFyY2guZGZyMF9wbXV2ZXIuaW1wID49IElEX0FBNjRERlIwX0VMMV9Q TVVWZXJfVjNQNSkKPiA+ID4gPiA+ID4gKyNkZWZpbmUga3ZtX3BtdV9pc18zcDUodmNwdSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ID4gPiA+ID4gPiArICAgICAgIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpICYmICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gPiA+ID4gPgo+ID4gPiA+ID4gV2hhdCBpcyB0aGUgcmVhc29uIGZvciBhZGRpbmcgdGhp cyBrdm1fdmNwdV9oYXNfcG11KCkgY2hlY2tpbmcgPwo+ID4gPiA+ID4gSSBkb24ndCB0aGluayB0 aGlzIHBhdGNoJ3MgY2hhbmdlcyBuZWNlc3NpdGF0ZWQgdGhpcy4KPiA+ID4gPiBGb3IgdGhlIHNh bWUgVk0sIGlzIGl0IHBvc3NpYmxlIHRoYXQgc29tZSBWQ1BVcyB3b3VsZCBoYXZlIFBNVSwgYnV0 Cj4gPiA+ID4gc29tZSBtYXkgbm90IGhhdmU/Cj4gPiA+ID4gVGhhdCdzIHdoeSB0aGUga3ZtX3Zj cHVfaGFzX3BtdSBpcyBhZGRlZCBoZXJlLgo+ID4gPgo+ID4gPiBZZXMsIGl0J3MgcG9zc2libGUu IEJ1dCwgaXQgZG9lc24ndCBhcHBlYXIgdGhhdCB0aGlzIHBhdGNoIG9yIGFueQo+ID4gPiBwYXRj aGVzIGluIHRoZSBzZXJpZXMgYWRkcyBhIGNvZGUgdGhhdCBuZXdseSB1c2VzIHRoZSBtYWNyby4K PiA+ID4gSSBiZWxpZXZlIHRoaXMgbWFjcm8gaXMgYWx3YXlzIHVzZWQgZm9yIHRoZSB2Q1BVcyB3 aXRoIHZQTVUKPiA+ID4gY29uZmlndXJlZCBjdXJyZW50bHkuCj4gPiA+IERpZCB5b3UgZmluZCBh IGNhc2Ugd2hlcmUgdGhpcyBpcyB1c2VkIGZvciB2Q1BVcyB3aXRoIG5vIHZQTVUgPwo+ID4gPgo+ ID4gPiBJZiB0aGlzIGNoYW5nZSB0cmllcyB0byBhZGRyZXNzIGFuIGV4aXN0aW5nIGlzc3VlLCBJ IHRoaW5rIGl0IHdvdWxkCj4gPiA+IGJlIG5pY2VyIHRvIGZpeCB0aGlzIGluIGEgc2VwYXJhdGUg cGF0Y2guIE9yIGl0IHdvdWxkIGJlIGhlbHBmdWwKPiA+ID4gaWYgeW91IGNvdWxkIGFkZCBhbiBl eHBsYW5hdGlvbiBpbiB0aGUgY29tbWl0IGxvZyBhdCBsZWFzdC4KPiA+IEkgZG9uJ3QgdGhpbmsg d2Ugc2hvdWxkIGFzc3VtZSB0aGUgcG90ZW50aWFsIHVzZXJzIGZvciB0aGUgbWFjcm8uIE9ubHkK PiA+IGFkZGluZyBrdm1fdmNwdV9oYXNfcG11KCkgaW4gdGhlIG1hY3JvIGNhbiBoYXZlIHRoZSBz YW1lIHNlbWFudGljcyBhcwo+ID4gdGhlIG9yaWdpbmFsIG1hY3JvLgo+ID4gVGhlIG9yaWdpbmFs IG1hY3JvIHdvdWxkIHJldHVybiBmYWxzZSBpZiBpdCBpcyB1c2VkIGJ5IGEgdkNQVSB3aXRob3V0 Cj4gPiB2UE1VLiBJIHRoaW5rIHdlIHNob3VsZCBrZWVwIGl0IGFzIHRoZSBzYW1lLgo+Cj4gVGhl IG9yaWdpbmFsIG1hY3JvIGFsd2F5cyB1c2VzIGRmcjBfcG11dmVyLmltcCwgd2hpY2ggaXMgdGhl IFBNVSB2ZXJzaW9uCj4gZm9yIHZDUFVzIHdpdGggUE1VIGNvbmZpZ3VyZWQuICBTbywgaWYgdGhl IG1hY3JvIGlzIHVzZWQgZm9yIHZDUFVzCj4gd2l0aCBubyBQTVUgY29uZmlndXJlZCwgaXQgbWln aHQgcmV0dXJuIHRydWUgKGl0IGRlcGVuZHMgb24gdGhlIHZhbHVlCj4gb2YgZGZyMF9wbXV2ZXIu aW1wKS4KPiBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nID8/CkFmdGVyIGRvdWJsZSBjaGVja2lu ZyB0aGUgY29kZSwgSSB0aGluayB5b3UgYXJlIHJpZ2h0LiBUaGUKa3ZtX3ZjcHVfaGFzX3BtdSgp IGlzIG5vdCBuZWNlc3NhcnkuCj4KPiBUaGFuayB5b3UsCj4gUmVpamkKVGhhbmtzLApKaW5nCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==