From nobody Sun Feb 8 15:42:23 2026 Received: from mail-io1-f73.google.com (mail-io1-f73.google.com [209.85.166.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3F57288C1F for ; Mon, 14 Jul 2025 22:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752533985; cv=none; b=sMwhpP/XP5Wb0Cpx3uA+fKn3okQ9Vl8QjaEmFJRlkZ5+WEcfwVTezzW+5inST9TTvry/ow4oUKxjM9WHN/F4cDOvgUqEe+zqiz61vS++ICt+f5GeW4jCaJMvlzJCZHFaDj7INNB9obgOERQeShqe6NPh6yg9rw5zf7Fu9zJQ8UI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752533985; c=relaxed/simple; bh=v8A7OTNElLp9NjEON3srySP/azHIcZU0IjsZoZmUJ/c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=IaLq2IxwP0S2DmHwzLgJtpNHPX64lAik0pmj8lRFLXlgbWN398fVX3fsDx79yEzTcwcjDr06BUiZE8LvZDuo7xoDQg1pe6D8sQefMxWEOD2Nd6BAoSHORnAfi7fF9x7c4J2alvwbeCoSLoqDeyD9kT3ayUkyCjjoMkhCcdoUrNU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--coltonlewis.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XmixXwc1; arc=none smtp.client-ip=209.85.166.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--coltonlewis.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XmixXwc1" Received: by mail-io1-f73.google.com with SMTP id ca18e2360f4ac-86cf89ff625so432050439f.0 for ; Mon, 14 Jul 2025 15:59:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1752533980; x=1753138780; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=BZ8dG4IcFoEafWjbI5Tl7HqmjBNXuoxF6820bVcH07Q=; b=XmixXwc1HY47T3FLyI7+GX30antrbAGHh8W7QOBlxl1Vi7niRJpeTLprb1R5PzRjtr 1zQkeFVfKHPRYXJ/LdkmjGvCY89071Ib4CzKO7i5/sxYWwYTFYviKmDriSC80r/OMWeP roYnnvJx3XdZgfpvQEgprf3vTCA3PRnBJVWSm55Gg+MZWKZGQ7cgX+/PL3OjxJ5NsYNo iwmr05ujlIgJS2p2FXitDBT8MqJPxx87oXTwKeormk2V+v0xKD5PfsAf18NPL+Xxi/xP fBk7b7rN8G93O7/rP/PLG7JAZZx8wAWS+0nje0LRfs0FnE10tx4ZgrHvir87imq9bnRc GHEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752533980; x=1753138780; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BZ8dG4IcFoEafWjbI5Tl7HqmjBNXuoxF6820bVcH07Q=; b=HbTj5EsSRd4Gz1JzdZ4dWoaPxMZboEB/xbnnDVc5ElABoUsO+wCMHDEfM/47cI2hO0 VewUrlPWOWuW9W6LEdy4Y0ZLzjQBKubeSU/UY5nE3id93TeiKVAy6HR9v2Z59LYL3Hz3 0rCE6x+EX+Aj3WRrE2kG7QfSGBgSv5GSOsLFg2YoyfigQLb6xGyOSpC1bwJD9ZfaXaKa Hyj+pYOrjPMaLhFUeQaqWQpfa6cWGKFtvVVnOQp5+84Z5JQ24wktMYbqnOdz8a3R68Sb iX6HdT65164BYzFWBSk4dmR0Un+sV5O0pyWKVh8FlxtgO/49ZmhzL9AhM1Go53MdTvc4 Vzrg== X-Forwarded-Encrypted: i=1; AJvYcCVJHAW1M0H2WfHCBErE8G+T5nGDxOFQ6M3S+H6eCMxT0ux+cX+TEVhjkQUhdmHQnUX85YgfY2jxhOZwRKY=@vger.kernel.org X-Gm-Message-State: AOJu0YzetF0Bs1wrnThpNDCUv4AO7dwu7I7KubMdw0xBK4kRh0kQbeBg H6MjIYQ6fV9fkStRwotq3McMZRln34P9ZS7ufBfhEnaAxi99cQ1bEaOFmxrq5dqGYAvEr+Sy6j4 L2yFKrYGO+BiFii2raolYNL0n9g== X-Google-Smtp-Source: AGHT+IGJW+F7N+Qps6LoDsgu+dPhKH89vA9SG/aNNYSKUKGt/XO72mo40SLlz3/qQJipXch8VyxKlGUxhSMvINEeyA== X-Received: from iove26.prod.google.com ([2002:a05:6602:45a:b0:861:c7b1:d848]) (user=coltonlewis job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6602:6d03:b0:86c:cf7e:d85d with SMTP id ca18e2360f4ac-8797888c692mr1676383639f.12.1752533980153; Mon, 14 Jul 2025 15:59:40 -0700 (PDT) Date: Mon, 14 Jul 2025 22:59:04 +0000 In-Reply-To: <20250714225917.1396543-1-coltonlewis@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250714225917.1396543-1-coltonlewis@google.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog Message-ID: <20250714225917.1396543-11-coltonlewis@google.com> Subject: [PATCH v4 10/23] KVM: arm64: Writethrough trapped PMEVTYPER register From: Colton Lewis To: kvm@vger.kernel.org Cc: Paolo Bonzini , Jonathan Corbet , Russell King , Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , Mingwei Zhang , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Shuah Khan , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-perf-users@vger.kernel.org, linux-kselftest@vger.kernel.org, Colton Lewis Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With FGT in place, the remaining trapped registers need to be written through to the underlying physical registers as well as the virtual ones. Failing to do this means delaying when guest writes take effect. Signed-off-by: Colton Lewis --- arch/arm64/kvm/sys_regs.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index b3f97980b11f..704e5d45ce52 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1036,6 +1036,30 @@ static bool access_pmu_evcntr(struct kvm_vcpu *vcpu, return true; } =20 +static bool writethrough_pmevtyper(struct kvm_vcpu *vcpu, struct sys_reg_p= arams *p, + u64 reg, u64 idx) +{ + u64 eventsel; + + if (idx =3D=3D ARMV8_PMU_CYCLE_IDX) + eventsel =3D ARMV8_PMUV3_PERFCTR_CPU_CYCLES; + else + eventsel =3D p->regval & kvm_pmu_evtyper_mask(vcpu->kvm); + + if (vcpu->kvm->arch.pmu_filter && + !test_bit(eventsel, vcpu->kvm->arch.pmu_filter)) + return false; + + __vcpu_assign_sys_reg(vcpu, reg, eventsel); + + if (idx =3D=3D ARMV8_PMU_CYCLE_IDX) + write_pmccfiltr(eventsel); + else + write_pmevtypern(idx, eventsel); + + return true; +} + static bool access_pmu_evtyper(struct kvm_vcpu *vcpu, struct sys_reg_param= s *p, const struct sys_reg_desc *r) { @@ -1062,7 +1086,9 @@ static bool access_pmu_evtyper(struct kvm_vcpu *vcpu,= struct sys_reg_params *p, if (!pmu_counter_idx_valid(vcpu, idx)) return false; =20 - if (p->is_write) { + if (kvm_vcpu_pmu_is_partitioned(vcpu) && p->is_write) { + writethrough_pmevtyper(vcpu, p, reg, idx); + } else if (p->is_write) { kvm_pmu_set_counter_event_type(vcpu, p->regval, idx); kvm_vcpu_pmu_restore_guest(vcpu); } else { --=20 2.50.0.727.gbf7dc18ff4-goog