From nobody Fri Dec 19 14:13:31 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F884144D1F for ; Fri, 26 Apr 2024 10:49:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128601; cv=none; b=BOE3b7KEpl4zD5iSy5qrMBCIGU0iej+htq1UPpVJP0XhDOV7I766zrRa0BzOvKEnl2+70nbpG1yY0XR0CaT4JN3JaatxC7Ga2SRe9nUBblz26ibKgZ8k1r+d81cIaB8oTEuPtB99MyMWGLZs+lmb4JAnL6mhuWqkU22UAdSIxSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128601; c=relaxed/simple; bh=FRiRwc90NawBYQ1NhQ/i4LDW0LXM9/iVyn9EgL+Kf4U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p+iKAXQgoVMxnhQiW8zORuggrrP7kW3k5aNUwpe2IeVramRrpwlzTDQyTk0PgCwmyqPQMrSzHrQLOVRFE5jrWiK+KY7Bpgej1aXTEQv4hq4XMIjMiorMCrzqWatmqN4HS4GOrFKblbQ6b7MtcLYdUSQAZnX18AAbjNPL++VIrso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=A6KgwVKZ; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="A6KgwVKZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714128598; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yv0f7+ZooceAuz8ErMSH+4jWIomyiUMNQo0xCMMDiy0=; b=A6KgwVKZcqaE3W1wk0vpl2WSFn69ohVD4WI7puqK9uq8CeAjl7Lpf0Nma045miR+E8XKag 1BnpZd70i+yeJyraRtvWv76r2nnjB44yKHkUigxmcc7IsBQjcn3EGuB2v6OaIopx81JkJt hW7P8HZmQheEeSR2UFjJY7zTA/gEB2I= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-448-FKVa-qTFN-WOz3nr_wbs-w-1; Fri, 26 Apr 2024 06:49:56 -0400 X-MC-Unique: FKVa-qTFN-WOz3nr_wbs-w-1 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-78edd30a24fso259495085a.3 for ; Fri, 26 Apr 2024 03:49:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714128596; x=1714733396; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yv0f7+ZooceAuz8ErMSH+4jWIomyiUMNQo0xCMMDiy0=; b=D8QgKrrofjWf+IXeyCXLt76CeHKLyhZm2OBRV7BOdjdcukrj8Mm/4+oXkVnFlTG2+J TUro3dkP1DkkuLP2kpYsfs8Uxttt9QGMwnZuDxlfrUmQUZMpJePIgN9AKXVtjBu23RGa p3pFIlTwwVMJ1TpBvDLTwMI+Pa+u0zKXBa3uMz8nvJSlHQn4QOD8VnKZ6KicyFzmlelf 0lU7G6UDDiugjWfyf8k/7dmcHX4fW0KPlDWuh8//MvId3iGNvAPUQ2oRWZlTCzWAzbPl yDy3yKE2ytP9TBwy1MtpAnKmRbluAc5jTKh6St8CX6E1Zw8+tvnu5WRMG02Jbm4IVrUx NHeQ== X-Forwarded-Encrypted: i=1; AJvYcCUlTZLMdGoKpvuJ8poUkC1kXDeamnHCuV4vpCgMk5wMCxopJNxZcFY9EtS87HZyXxLUe+3+thOCipQ1Wcc8R+hHokIGCkoow1R1LSzt X-Gm-Message-State: AOJu0YxufHCSUjU9Btu5qv0RpKj2BEJj2jaG1JhuWAjZJonRBKgPJmxg 2V27ysFEB0nK3e/19iWO6dO7vtGsDvme0ImH/1bpIaYVcqYwxctfrTY63/6MITxupoYCrwRq+Ry 6LN2faGJWr8u4f/K2cnO1VOXPR1enadmSkki1vLu/vkZSKxW4fANV27s5MVygEA== X-Received: by 2002:a05:620a:558f:b0:790:9792:ccf9 with SMTP id vq15-20020a05620a558f00b007909792ccf9mr2474360qkn.26.1714128596244; Fri, 26 Apr 2024 03:49:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFuK9q7K5MnARR1FYXhNoL5QlURcOPFxWs+be/9tKmV0SXMgVdbnC3Cd+KrI9ajhgrIqvqt3A== X-Received: by 2002:a05:620a:558f:b0:790:9792:ccf9 with SMTP id vq15-20020a05620a558f00b007909792ccf9mr2474347qkn.26.1714128595916; Fri, 26 Apr 2024 03:49:55 -0700 (PDT) Received: from rh.redhat.com (p200300c93f4cc600a5cdf10de606b5e2.dip0.t-ipconnect.de. [2003:c9:3f4c:c600:a5cd:f10d:e606:b5e2]) by smtp.gmail.com with ESMTPSA id vv26-20020a05620a563a00b007907b57aa1fsm3888019qkn.12.2024.04.26.03.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 03:49:55 -0700 (PDT) From: Sebastian Ott To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Catalin Marinas , Will Deacon Subject: [PATCH v2 1/6] KVM: arm64: change return value in arm64_check_features() Date: Fri, 26 Apr 2024 12:49:45 +0200 Message-ID: <20240426104950.7382-2-sebott@redhat.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426104950.7382-1-sebott@redhat.com> References: <20240426104950.7382-1-sebott@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" arm64_check_features() returns -E2BIG to indicate the register's feature set is a superset of the maximally-allowed register value. The only caller of that function changes this to -EINVAL since that's what userspace expects for invalid register writes. In preparation of adding another caller for arm64_check_features() that would need to do the same conversion just return -EINVAL directly. Signed-off-by: Sebastian Ott --- arch/arm64/kvm/sys_regs.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index c9f4f387155f..131f5b0ca2b9 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1445,7 +1445,7 @@ static s64 kvm_arm64_ftr_safe_value(u32 id, const str= uct arm64_ftr_bits *ftrp, * considered the safe value regardless For register fields that are not in * writable, only the value in limit is considered the safe value. * - * Return: 0 if all the fields are safe. Otherwise, return negative errno. + * Return: 0 if all the fields are safe. Otherwise, return -EINVAL. */ static int arm64_check_features(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, @@ -1464,7 +1464,7 @@ static int arm64_check_features(struct kvm_vcpu *vcpu, * only safe value is 0. */ if (sysreg_visible_as_raz(vcpu, rd)) - return val ? -E2BIG : 0; + return val ? -EINVAL : 0; =20 ftr_reg =3D get_arm64_ftr_reg(id); if (!ftr_reg) @@ -1490,12 +1490,12 @@ static int arm64_check_features(struct kvm_vcpu *vc= pu, safe_val =3D kvm_arm64_ftr_safe_value(id, ftrp, f_val, f_lim); =20 if (safe_val !=3D f_val) - return -E2BIG; + return -EINVAL; } =20 /* For fields that are not writable, values in limit are the safe values.= */ if ((val & ~mask) !=3D (limit & ~mask)) - return -E2BIG; + return -EINVAL; =20 return 0; } @@ -1840,16 +1840,6 @@ static int set_id_reg(struct kvm_vcpu *vcpu, const s= truct sys_reg_desc *rd, IDREG(vcpu->kvm, id) =3D val; =20 mutex_unlock(&vcpu->kvm->arch.config_lock); - - /* - * arm64_check_features() returns -E2BIG to indicate the register's - * feature set is a superset of the maximally-allowed register value. - * While it would be nice to precisely describe this to userspace, the - * existing UAPI for KVM_SET_ONE_REG has it that invalid register - * writes return -EINVAL. - */ - if (ret =3D=3D -E2BIG) - ret =3D -EINVAL; return ret; } =20 --=20 2.42.0 From nobody Fri Dec 19 14:13:31 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0787D144D3E for ; Fri, 26 Apr 2024 10:50:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128603; cv=none; b=IGW0oSHIWQvN8pVERSMwDrX01U6xrghtKN/YGBeAMrMEEfWxrduwt7zJT8Z2kecW6+6xTQlpATUCkD7bsd8izrXEoy+ZDsvRQLzdIvy/YwYIKEd0hgE4WVHDGHQW9P7WlZcxi1ojdMQ4g/oM1q6ImPzP2VBTCmhqEFljriL6QVE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128603; c=relaxed/simple; bh=utF6bK/ynDvKtFTtpZCiM6gnQeq7mtq++CnFbpesggk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K8i0iaFSY4jfY/ilUkd9XrLzw7x1qJXF1t6v0CeqvOEs3g6P9R7Ea0xOv5PseZeRBoCeuT5TGPFo6lfosqT8x0xzeQcO94TSmNleAsekLS4Zj3GTtbqQFI9r+Iqdc98iEgMUAKl/JDKZ7scMyi9yckr6uq7zl4N1cEb3STmxWW4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Mnhqi9zW; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Mnhqi9zW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714128600; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cGbSr+4fcHT2eAsfJezUbtC5iwN5BsiYgVJ4o5jDSLU=; b=Mnhqi9zW+3amQDPqTObmpwIF60z/hHhz0ab3XAjVgBZ5J6PhrIWpUKIakGuulOhFNap26O O4qPbOXIid01HAe3krdO1tnjLv7YWC/vtjCLMXScx0iWJuD+4DTrH5mkbL0eOlqOkQD2H5 y+FQoBZq6hhjTsR5uQ11PR6yx2go3OI= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-361-R0eUjCgiMuGLIXk9TF7xxg-1; Fri, 26 Apr 2024 06:49:59 -0400 X-MC-Unique: R0eUjCgiMuGLIXk9TF7xxg-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-78319f64126so265001885a.3 for ; Fri, 26 Apr 2024 03:49:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714128599; x=1714733399; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cGbSr+4fcHT2eAsfJezUbtC5iwN5BsiYgVJ4o5jDSLU=; b=fcqyRizxuYR2BauuMhKW5zp3lu0fdXfFpm1g92dYGaS71HWiGlUqWgy3sDPRdQ13cW eX8YvnujLtMQQho0LHNW1AdyEMBWLhJSjju1+50mBbmNiCfkmwFKTlwM48nw+vobccWu kiCIaAMVmdo97TNWv0YuTAgNPnocoKtMihrLFc5U3JYbUrRLFPZBZqvRjSQK1rtpBB9k //htqbEtdVB2C1UG5YzPSE/mfNzUWgElzu2PRymz8L/ZMpbDswgxGgJaM7TLjfyXcHBz sJlvoFg3O9lDFwgVAfTuE90/0zv4YJUs1QMb5eggpRMfDId4vT52L1lWTqAd3TzLYd0M gGVw== X-Forwarded-Encrypted: i=1; AJvYcCVaAsNnoPQtSgY6zBDB4UByNdMMcPgI+71Je64mC3VQ8HusVMTW9vyIIoNI5l3J8VyWU26duqJl/W51SlB9tQPm5TmfJCt+kMLye5ap X-Gm-Message-State: AOJu0YwRKh+IZWU/4cXDRoyQscL3FmxhZguivrqnRag1Sw8BkR/3kgPH 1Cvl5R5mwWfj186RN5QjucbcuxfJnUH9Whn7Yg4Bd7YhvFcKFLbs65YyHuTbi9hTNLLzBB/sSU+ fym0kjMSP6jOiiDOwz1l0YjXWWoc3R5TztTHEe+3Xw0ISc5ctLSBsNo8LJeSHhw== X-Received: by 2002:a05:620a:992:b0:78e:e479:3ddb with SMTP id x18-20020a05620a099200b0078ee4793ddbmr2394287qkx.23.1714128598874; Fri, 26 Apr 2024 03:49:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHh18C4THl4Xonjz0GTh9Qrl3LA0jHHF1NCbVJUxnZ8bmimP/NV7dkk5fFTYl157a5HGhORJQ== X-Received: by 2002:a05:620a:992:b0:78e:e479:3ddb with SMTP id x18-20020a05620a099200b0078ee4793ddbmr2394272qkx.23.1714128598452; Fri, 26 Apr 2024 03:49:58 -0700 (PDT) Received: from rh.redhat.com (p200300c93f4cc600a5cdf10de606b5e2.dip0.t-ipconnect.de. [2003:c9:3f4c:c600:a5cd:f10d:e606:b5e2]) by smtp.gmail.com with ESMTPSA id vv26-20020a05620a563a00b007907b57aa1fsm3888019qkn.12.2024.04.26.03.49.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 03:49:58 -0700 (PDT) From: Sebastian Ott To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Catalin Marinas , Will Deacon Subject: [PATCH v2 2/6] KVM: arm64: unify trap setup code Date: Fri, 26 Apr 2024 12:49:46 +0200 Message-ID: <20240426104950.7382-3-sebott@redhat.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426104950.7382-1-sebott@redhat.com> References: <20240426104950.7382-1-sebott@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are 2 functions to set up traps via HCR_EL2: * kvm_init_sysreg() called via KVM_RUN (before the 1st run or when the pid changes) * vcpu_reset_hcr() called via KVM_ARM_VCPU_INIT To unify these 2 and to support traps that are dependent on the ID register configuration, move vcpu_reset_hcr() to sys_regs.c and call it via kvm_init_sysreg(). While at it rename kvm_init_sysreg() to kvm_setup_traps() to better reflect what it's doing. Signed-off-by: Sebastian Ott --- arch/arm64/include/asm/kvm_emulate.h | 37 ----------------------- arch/arm64/include/asm/kvm_host.h | 2 +- arch/arm64/kvm/arm.c | 3 +- arch/arm64/kvm/sys_regs.c | 44 ++++++++++++++++++++++++++-- 4 files changed, 44 insertions(+), 42 deletions(-) diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/= kvm_emulate.h index 975af30af31f..9e71fcbb033d 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -67,43 +67,6 @@ static __always_inline bool vcpu_el1_is_32bit(struct kvm= _vcpu *vcpu) } #endif =20 -static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu) -{ - vcpu->arch.hcr_el2 =3D HCR_GUEST_FLAGS; - if (has_vhe() || has_hvhe()) - vcpu->arch.hcr_el2 |=3D HCR_E2H; - if (cpus_have_final_cap(ARM64_HAS_RAS_EXTN)) { - /* route synchronous external abort exceptions to EL2 */ - vcpu->arch.hcr_el2 |=3D HCR_TEA; - /* trap error record accesses */ - vcpu->arch.hcr_el2 |=3D HCR_TERR; - } - - if (cpus_have_final_cap(ARM64_HAS_STAGE2_FWB)) { - vcpu->arch.hcr_el2 |=3D HCR_FWB; - } else { - /* - * For non-FWB CPUs, we trap VM ops (HCR_EL2.TVM) until M+C - * get set in SCTLR_EL1 such that we can detect when the guest - * MMU gets turned on and do the necessary cache maintenance - * then. - */ - vcpu->arch.hcr_el2 |=3D HCR_TVM; - } - - if (cpus_have_final_cap(ARM64_HAS_EVT) && - !cpus_have_final_cap(ARM64_MISMATCHED_CACHE_TYPE)) - vcpu->arch.hcr_el2 |=3D HCR_TID4; - else - vcpu->arch.hcr_el2 |=3D HCR_TID2; - - if (vcpu_el1_is_32bit(vcpu)) - vcpu->arch.hcr_el2 &=3D ~HCR_RW; - - if (kvm_has_mte(vcpu->kvm)) - vcpu->arch.hcr_el2 |=3D HCR_ATA; -} - static inline unsigned long *vcpu_hcr(struct kvm_vcpu *vcpu) { return (unsigned long *)&vcpu->arch.hcr_el2; diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm= _host.h index 9e8a496fb284..696acba883c1 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -1115,7 +1115,7 @@ int __init populate_nv_trap_config(void); bool lock_all_vcpus(struct kvm *kvm); void unlock_all_vcpus(struct kvm *kvm); =20 -void kvm_init_sysreg(struct kvm_vcpu *); +void kvm_setup_traps(struct kvm_vcpu *); =20 /* MMIO helpers */ void kvm_mmio_write_buf(void *buf, unsigned int len, unsigned long data); diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index c4a0a35e02c7..d6c27d8a8f2f 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -683,7 +683,7 @@ int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu) * This needs to happen after NV has imposed its own restrictions on * the feature set */ - kvm_init_sysreg(vcpu); + kvm_setup_traps(vcpu); =20 ret =3D kvm_timer_enable(vcpu); if (ret) @@ -1438,7 +1438,6 @@ static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_v= cpu *vcpu, icache_inval_all_pou(); } =20 - vcpu_reset_hcr(vcpu); vcpu->arch.cptr_el2 =3D kvm_get_reset_cptr_el2(vcpu); =20 /* diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 131f5b0ca2b9..ac366d0b614a 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -4020,11 +4020,43 @@ int kvm_vm_ioctl_get_reg_writable_masks(struct kvm = *kvm, struct reg_mask_range * return 0; } =20 -void kvm_init_sysreg(struct kvm_vcpu *vcpu) +static void vcpu_reset_hcr(struct kvm_vcpu *vcpu) { struct kvm *kvm =3D vcpu->kvm; =20 - mutex_lock(&kvm->arch.config_lock); + vcpu->arch.hcr_el2 =3D HCR_GUEST_FLAGS; + if (has_vhe() || has_hvhe()) + vcpu->arch.hcr_el2 |=3D HCR_E2H; + if (cpus_have_final_cap(ARM64_HAS_RAS_EXTN)) { + /* route synchronous external abort exceptions to EL2 */ + vcpu->arch.hcr_el2 |=3D HCR_TEA; + /* trap error record accesses */ + vcpu->arch.hcr_el2 |=3D HCR_TERR; + } + + if (cpus_have_final_cap(ARM64_HAS_STAGE2_FWB)) { + vcpu->arch.hcr_el2 |=3D HCR_FWB; + } else { + /* + * For non-FWB CPUs, we trap VM ops (HCR_EL2.TVM) until M+C + * get set in SCTLR_EL1 such that we can detect when the guest + * MMU gets turned on and do the necessary cache maintenance + * then. + */ + vcpu->arch.hcr_el2 |=3D HCR_TVM; + } + + if (cpus_have_final_cap(ARM64_HAS_EVT) && + !cpus_have_final_cap(ARM64_MISMATCHED_CACHE_TYPE)) + vcpu->arch.hcr_el2 |=3D HCR_TID4; + else + vcpu->arch.hcr_el2 |=3D HCR_TID2; + + if (vcpu_el1_is_32bit(vcpu)) + vcpu->arch.hcr_el2 &=3D ~HCR_RW; + + if (kvm_has_mte(vcpu->kvm)) + vcpu->arch.hcr_el2 |=3D HCR_ATA; =20 /* * In the absence of FGT, we cannot independently trap TLBI @@ -4033,6 +4065,14 @@ void kvm_init_sysreg(struct kvm_vcpu *vcpu) */ if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TLB, OS)) vcpu->arch.hcr_el2 |=3D HCR_TTLBOS; +} + +void kvm_setup_traps(struct kvm_vcpu *vcpu) +{ + struct kvm *kvm =3D vcpu->kvm; + + mutex_lock(&kvm->arch.config_lock); + vcpu_reset_hcr(vcpu); =20 if (cpus_have_final_cap(ARM64_HAS_HCX)) { vcpu->arch.hcrx_el2 =3D HCRX_GUEST_FLAGS; --=20 2.42.0 From nobody Fri Dec 19 14:13:31 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3D1814533F for ; Fri, 26 Apr 2024 10:50:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128606; cv=none; b=HmF6YLPkZbrvvyNc2WJAz3kKJuP9K+dHDTmH1MiVyUc0Zn+jW5hgPhUGHPqXF+n//rQRO3SiaOPWtetZB0OXCwbO1l7tC9FZLLh0lpsmbzf1v3pJBTAULAMANUoVw+oAnCODSWnORAv2uQW/kyhndXitO2v61InXjO0fs8umMNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128606; c=relaxed/simple; bh=9tf8evFXPxZIsJtfON0tpY2q9B/4pD7lHgFXwfjZ268=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I5QEPs3ziweC86riO5Aqd3b2KM6d+87QZpmFbyRsfIk6SZZFkWFNLIr+FtuhvUGy4UGnN3+VLXwlmDe+dUzo0701FxxJb8i5cDibCAGyHw3MwCTJHMGC7BByS7PZkAh/m5Yy9kmElpa1lY33oBsuDE90WvWIdruR1Rusi/T0XO8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=SMhJQGCI; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="SMhJQGCI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714128602; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qWPuNZam4oUpFHKljOPQcZMbiol5epXIuKViics5wNw=; b=SMhJQGCIfsF/usswwgrmCt/wQZeEt2Z0EIjuqe5NMF6BHPfFE0z51KDtkCNGjeDI/vJs2R 0WX2Td2hIKe3uSQBe+bn8ACyQSH0wl31wkUnx6rxX4hd8zqLZiG3dNLqJKWkjZy6i1na77 28OGkF39FE8dan0euSphIzRNjc8IhRE= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-470-3q8hvuHgMI6kPRy4aOPFsw-1; Fri, 26 Apr 2024 06:50:01 -0400 X-MC-Unique: 3q8hvuHgMI6kPRy4aOPFsw-1 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-69b123bfbd9so24981296d6.1 for ; Fri, 26 Apr 2024 03:50:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714128601; x=1714733401; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qWPuNZam4oUpFHKljOPQcZMbiol5epXIuKViics5wNw=; b=uo2jMFQ0hpsiaQiXKV/5CxO5KipuF68TOiXFA0M8CZPcdaU/udUMa5iTQmEQQ14IVo 12Oe2ICfQ+8Gwdj89zUMePpLwnRnat90M7MAbkU8rRoP03tbg12DSGgEeGEjeVA7P6GJ +bWZlSkd3Q2VEF53V0X8z8qf8yDkiWPmj/LWsYNg2B2QpbQQ8uGwMGqQ5nZl5JXVq3t6 QLWdeMdsGT+5vxawkH2TWy4+8tPZQMQrNHa7+Vng2/Lsn3e3ttRI7W3LHXR3b6Ny2opi YAHSknBM0jUPDUIUrSJALhA/5YYM5uJyHxvvR449PSYOl/6sLdY8wGUpmVF4sJH8QK9D eu2A== X-Forwarded-Encrypted: i=1; AJvYcCXh5xATdu//KpBz7VKXzhpt5Z8Q3EkSvE2OJ6zRqnXDEDGhECz3fO+KyoVZ8LG3aaRpfuqXiVlR1NN3AwDdShuVRifA9NtVfvEi8lVx X-Gm-Message-State: AOJu0YyIcLz6gXpjiT5LmfHls7bXTZzs+VsXpV2vY2zHNZRGlnycq51d OXM2u5PZiDl8uy0YyfItba7Y8RP0uAEwcMYCUJA+XAQsLt+wjl2pCWKgGihnfnlTqChMqTdm8Th /vle4Aic4e1vS299QvaYYyCTMBNLcYJB6HQexEoYM3aXlV3WJqwjk67Ai1ZXTpg== X-Received: by 2002:a05:6214:246d:b0:69f:6b0d:3f62 with SMTP id im13-20020a056214246d00b0069f6b0d3f62mr3254511qvb.55.1714128600970; Fri, 26 Apr 2024 03:50:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFJyH5OHPJ7TR40RC5KizCF/4egd908tGs6YVstwmK3Jxz72fvFPFvoPA1KvhVgGxDZ+ojbww== X-Received: by 2002:a05:6214:246d:b0:69f:6b0d:3f62 with SMTP id im13-20020a056214246d00b0069f6b0d3f62mr3254486qvb.55.1714128600530; Fri, 26 Apr 2024 03:50:00 -0700 (PDT) Received: from rh.redhat.com (p200300c93f4cc600a5cdf10de606b5e2.dip0.t-ipconnect.de. [2003:c9:3f4c:c600:a5cd:f10d:e606:b5e2]) by smtp.gmail.com with ESMTPSA id vv26-20020a05620a563a00b007907b57aa1fsm3888019qkn.12.2024.04.26.03.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 03:50:00 -0700 (PDT) From: Sebastian Ott To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Catalin Marinas , Will Deacon Subject: [PATCH v2 3/6] KVM: arm64: maintain per VM value for CTR_EL0 Date: Fri, 26 Apr 2024 12:49:47 +0200 Message-ID: <20240426104950.7382-4-sebott@redhat.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426104950.7382-1-sebott@redhat.com> References: <20240426104950.7382-1-sebott@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for CTR_EL0 emulation maintain a per VM for this register and use it where appropriate. Signed-off-by: Sebastian Ott --- arch/arm64/include/asm/kvm_host.h | 2 ++ arch/arm64/kvm/sys_regs.c | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm= _host.h index 696acba883c1..0c84cdb11c97 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -340,6 +340,8 @@ struct kvm_arch { #define KVM_ARM_ID_REG_NUM (IDREG_IDX(sys_reg(3, 0, 0, 7, 7)) + 1) u64 id_regs[KVM_ARM_ID_REG_NUM]; =20 + u64 ctr_el0; + /* Masks for VNCR-baked sysregs */ struct kvm_sysreg_masks *sysreg_masks; =20 diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index ac366d0b614a..1488b93050d4 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -219,9 +219,9 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val,= int reg) * Returns the minimum line size for the selected cache, expressed as * Log2(bytes). */ -static u8 get_min_cache_line_size(bool icache) +static u8 get_min_cache_line_size(struct kvm *kvm, bool icache) { - u64 ctr =3D read_sanitised_ftr_reg(SYS_CTR_EL0); + u64 ctr =3D kvm->arch.ctr_el0; u8 field; =20 if (icache) @@ -248,7 +248,7 @@ static u32 get_ccsidr(struct kvm_vcpu *vcpu, u32 csselr) if (vcpu->arch.ccsidr) return vcpu->arch.ccsidr[csselr]; =20 - line_size =3D get_min_cache_line_size(csselr & CSSELR_EL1_InD); + line_size =3D get_min_cache_line_size(vcpu->kvm, csselr & CSSELR_EL1_InD); =20 /* * Fabricate a CCSIDR value as the overriding value does not exist. @@ -283,7 +283,7 @@ static int set_ccsidr(struct kvm_vcpu *vcpu, u32 csselr= , u32 val) u32 i; =20 if ((val & CCSIDR_EL1_RES0) || - line_size < get_min_cache_line_size(csselr & CSSELR_EL1_InD)) + line_size < get_min_cache_line_size(vcpu->kvm, csselr & CSSELR_EL1_In= D)) return -EINVAL; =20 if (!ccsidr) { @@ -1862,7 +1862,7 @@ static bool access_ctr(struct kvm_vcpu *vcpu, struct = sys_reg_params *p, if (p->is_write) return write_to_read_only(vcpu, p, r); =20 - p->regval =3D read_sanitised_ftr_reg(SYS_CTR_EL0); + p->regval =3D vcpu->kvm->arch.ctr_el0; return true; } =20 @@ -1882,7 +1882,7 @@ static bool access_clidr(struct kvm_vcpu *vcpu, struc= t sys_reg_params *p, */ static u64 reset_clidr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) { - u64 ctr_el0 =3D read_sanitised_ftr_reg(SYS_CTR_EL0); + u64 ctr_el0 =3D vcpu->kvm->arch.ctr_el0; u64 clidr; u8 loc; =20 @@ -1935,8 +1935,8 @@ static u64 reset_clidr(struct kvm_vcpu *vcpu, const s= truct sys_reg_desc *r) static int set_clidr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, u64 val) { - u64 ctr_el0 =3D read_sanitised_ftr_reg(SYS_CTR_EL0); u64 idc =3D !CLIDR_LOC(val) || (!CLIDR_LOUIS(val) && !CLIDR_LOUU(val)); + u64 ctr_el0 =3D vcpu->kvm->arch.ctr_el0; =20 if ((val & CLIDR_EL1_RES0) || (!(ctr_el0 & CTR_EL0_IDC) && idc)) return -EINVAL; @@ -3509,6 +3509,7 @@ static void kvm_reset_id_regs(struct kvm_vcpu *vcpu) return; =20 lockdep_assert_held(&kvm->arch.config_lock); + kvm->arch.ctr_el0 =3D read_sanitised_ftr_reg(SYS_CTR_EL0); =20 /* Initialize all idregs */ while (is_id_reg(id)) { --=20 2.42.0 From nobody Fri Dec 19 14:13:31 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16931145B27 for ; Fri, 26 Apr 2024 10:50:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128607; cv=none; b=qUnGqQ4c/qMoum/hZSm+ihomMjHSk+4MREbI5qhhT+MYSk4TyJoylAaSSNWG/nzCYYRQHWdOUWP/3202JyQxeDbK+/f/9P+bJTya2laKvCS9aM6DsDktjAFWpk1F5HP3iiMjyTsUMMhfYoEx6MFzPZZBIbUw0BVj2Dhk4/sW4L0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128607; c=relaxed/simple; bh=p3iy9R1aqq0jp5u8JochXtiyq7C5gXk3Vtm5bawKjkg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Nte70zE2A+ndnIZOOfhfaTSfanpos1hfiFcTfNg1+SBK6x9q4vB3ZzU2ts1fXYQqzFnGHmYX4PUO2tlQ0SQzfZhqcHWz1xxZZy2jvk5pLjYvtirTid04aCOLZSBNjPKEDvqJDpb4auesQUPkEVe+66NcWHnLwXj0aCrN/H90HuM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=PVc0FL2f; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PVc0FL2f" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714128605; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=h2VZGXYGnHdShn33lWIpuOwQARptQfZv/c0XotdUQLs=; b=PVc0FL2foQho6wp7BTNet7KhwIP/Y7+TFkXyACrc9A+OIG5FSsL3pScNddxfAQ4L8RLJqp Iki9XCOyHPIXBva4CYvKRtMohLumu21Dlb6YbqBl5FciJKE6QqMiflL7kxOHLAS31TU0w7 f9Pcq282FvWGJi1tu4umh+d+mIwYhc4= Received: from mail-ot1-f72.google.com (mail-ot1-f72.google.com [209.85.210.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-620-lzYSHOKwNluELH9nTKApPQ-1; Fri, 26 Apr 2024 06:50:03 -0400 X-MC-Unique: lzYSHOKwNluELH9nTKApPQ-1 Received: by mail-ot1-f72.google.com with SMTP id 46e09a7af769-6eb891cf5e0so2537840a34.3 for ; Fri, 26 Apr 2024 03:50:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714128603; x=1714733403; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h2VZGXYGnHdShn33lWIpuOwQARptQfZv/c0XotdUQLs=; b=hukvCuNLlh9rZGw5MtYFLDanWZBRBYmGChA+MTXY7VR5NNvlzixG4AQTJvbwSkK4Ox Zph3hloGbzKO02DJYmazI0Ch+/RDkpOQL7cGc7dYlJ9z6GSE19Wp+qiV2IhFVb80qqFv f9vIXu/koY57rSJ5Rkh1YSTYXgLRpQswdfd61d3y722tNs1TW+F82E9WVjNF+XnfosD9 k3Qlx9oedAKa0RvPtQw0qYNLhaAxP/397WvYAlaHxss6GBTVaFawtc30cxI1sswWVmIG KOB8ieK9zDQo3G8BL8dClJ/swTyv8y/V7ouUWiTjPsKHTai1YkvZ+/+ViNWHMkuqDJD3 w8fw== X-Forwarded-Encrypted: i=1; AJvYcCU0hsDNalTi3m2lpdZ0zS4MkVcFSdc2OnDdsd5LOeHnJUS+Ea/uoWHCVPaXojPRbJWQOEfyqBYDHpJ550tNuQ1XQYMo0/BAoc3LJ04Z X-Gm-Message-State: AOJu0YwFP1mwNqFFQeFL9hQ4zBq1GXZFuQmVbByNBV9XZMBgiFZzKEWv cNVeoMdSywKGKFQw4IUNGHprM2oecp4OinRiviGjGtma5EYgGPzzJlxnazlmKwYk0BFUP+LaahK W5RV+Plax3M0NYA+QNp6K4vsozi/evmVaHJitJH1/rOJvtXJ/OXSWCyzLWdgZRQ== X-Received: by 2002:a05:6830:119:b0:6ed:4986:40dd with SMTP id i25-20020a056830011900b006ed498640ddmr2169631otp.35.1714128602932; Fri, 26 Apr 2024 03:50:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHKjMUkBt0VYe1cXxGJ/eOvuZGdV4nSBkiEKax45TG8leNaeVXjcYMCGMXRVKSvLaHiuVgVbg== X-Received: by 2002:a05:6830:119:b0:6ed:4986:40dd with SMTP id i25-20020a056830011900b006ed498640ddmr2169614otp.35.1714128602509; Fri, 26 Apr 2024 03:50:02 -0700 (PDT) Received: from rh.redhat.com (p200300c93f4cc600a5cdf10de606b5e2.dip0.t-ipconnect.de. [2003:c9:3f4c:c600:a5cd:f10d:e606:b5e2]) by smtp.gmail.com with ESMTPSA id vv26-20020a05620a563a00b007907b57aa1fsm3888019qkn.12.2024.04.26.03.50.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 03:50:02 -0700 (PDT) From: Sebastian Ott To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Catalin Marinas , Will Deacon Subject: [PATCH v2 4/6] KVM: arm64: add emulation for CTR_EL0 register Date: Fri, 26 Apr 2024 12:49:48 +0200 Message-ID: <20240426104950.7382-5-sebott@redhat.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426104950.7382-1-sebott@redhat.com> References: <20240426104950.7382-1-sebott@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" CTR_EL0 is currently handled as an invariant register, thus guests will be presented with the host value of that register. Add emulation for CTR_EL0 based on a per VM value. Userspace can switch off DIC and IDC bits and reduce DminLine and IminLine sizes. When CTR_EL0 is changed validate that against CLIDR_EL1 and CCSIDR_EL1 to make sure we present the guest with consistent register values. Changes that affect the generated cache topology values are allowed if they don't clash with previous register writes. Signed-off-by: Sebastian Ott --- arch/arm64/kvm/sys_regs.c | 123 +++++++++++++++++++++++++++++++++----- 1 file changed, 107 insertions(+), 16 deletions(-) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 1488b93050d4..2fe3492ba3c4 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -215,13 +215,8 @@ void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val= , int reg) /* CSSELR values; used to index KVM_REG_ARM_DEMUX_ID_CCSIDR */ #define CSSELR_MAX 14 =20 -/* - * Returns the minimum line size for the selected cache, expressed as - * Log2(bytes). - */ -static u8 get_min_cache_line_size(struct kvm *kvm, bool icache) +static u8 __get_min_cache_line_size(u64 ctr, bool icache) { - u64 ctr =3D kvm->arch.ctr_el0; u8 field; =20 if (icache) @@ -240,6 +235,15 @@ static u8 get_min_cache_line_size(struct kvm *kvm, boo= l icache) return field + 2; } =20 +/* + * Returns the minimum line size for the selected cache, expressed as + * Log2(bytes). + */ +static u8 get_min_cache_line_size(struct kvm *kvm, bool icache) +{ + return __get_min_cache_line_size(kvm->arch.ctr_el0, icache); +} + /* Which cache CCSIDR represents depends on CSSELR value. */ static u32 get_ccsidr(struct kvm_vcpu *vcpu, u32 csselr) { @@ -1856,6 +1860,45 @@ static int set_wi_reg(struct kvm_vcpu *vcpu, const s= truct sys_reg_desc *rd, return 0; } =20 +static const struct sys_reg_desc *get_sys_reg_desc(u32 encoding); + +static int validate_clidr_el1(u64 clidr_el1, u64 ctr_el0) +{ + u64 idc =3D !CLIDR_LOC(clidr_el1) || + (!CLIDR_LOUIS(clidr_el1) && !CLIDR_LOUU(clidr_el1)); + + if ((clidr_el1 & CLIDR_EL1_RES0) || (!(ctr_el0 & CTR_EL0_IDC) && idc)) + return -EINVAL; + + return 0; +} + +static int validate_cache_top(struct kvm_vcpu *vcpu, u64 ctr_el0) +{ + const struct sys_reg_desc *clidr_el1; + unsigned int i; + int ret; + + clidr_el1 =3D get_sys_reg_desc(SYS_CLIDR_EL1); + if (!clidr_el1) + return -ENOENT; + + ret =3D validate_clidr_el1(__vcpu_sys_reg(vcpu, clidr_el1->reg), ctr_el0); + if (ret) + return ret; + + if (!vcpu->arch.ccsidr) + return 0; + + for (i =3D 0; i < CSSELR_MAX; i++) { + if ((FIELD_GET(CCSIDR_EL1_LineSize, get_ccsidr(vcpu, i)) + 4) + < __get_min_cache_line_size(ctr_el0, i & CSSELR_EL1_InD)) + return -EINVAL; + } + + return 0; +} + static bool access_ctr(struct kvm_vcpu *vcpu, struct sys_reg_params *p, const struct sys_reg_desc *r) { @@ -1866,6 +1909,48 @@ static bool access_ctr(struct kvm_vcpu *vcpu, struct= sys_reg_params *p, return true; } =20 +static u64 reset_ctr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd) +{ + vcpu->kvm->arch.ctr_el0 =3D read_sanitised_ftr_reg(SYS_CTR_EL0); + return vcpu->kvm->arch.ctr_el0; +} + +static int get_ctr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, + u64 *val) +{ + *val =3D vcpu->kvm->arch.ctr_el0; + return 0; +} + +static int set_ctr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, + u64 val) +{ + int ret; + + if (val =3D=3D vcpu->kvm->arch.ctr_el0) + return 0; + + if (kvm_vm_has_ran_once(vcpu->kvm)) + return -EBUSY; + + mutex_lock(&vcpu->kvm->arch.config_lock); + ret =3D arm64_check_features(vcpu, rd, val); + if (ret) { + mutex_unlock(&vcpu->kvm->arch.config_lock); + return ret; + } + ret =3D validate_cache_top(vcpu, val); + if (ret) { + mutex_unlock(&vcpu->kvm->arch.config_lock); + return ret; + } + + vcpu->kvm->arch.ctr_el0 =3D val; + mutex_unlock(&vcpu->kvm->arch.config_lock); + + return 0; +} + static bool access_clidr(struct kvm_vcpu *vcpu, struct sys_reg_params *p, const struct sys_reg_desc *r) { @@ -1935,10 +2020,9 @@ static u64 reset_clidr(struct kvm_vcpu *vcpu, const = struct sys_reg_desc *r) static int set_clidr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, u64 val) { - u64 idc =3D !CLIDR_LOC(val) || (!CLIDR_LOUIS(val) && !CLIDR_LOUU(val)); u64 ctr_el0 =3D vcpu->kvm->arch.ctr_el0; =20 - if ((val & CLIDR_EL1_RES0) || (!(ctr_el0 & CTR_EL0_IDC) && idc)) + if (validate_clidr_el1(val, ctr_el0)) return -EINVAL; =20 __vcpu_sys_reg(vcpu, rd->reg) =3D val; @@ -2452,7 +2536,11 @@ static const struct sys_reg_desc sys_reg_descs[] =3D= { { SYS_DESC(SYS_CCSIDR2_EL1), undef_access }, { SYS_DESC(SYS_SMIDR_EL1), undef_access }, { SYS_DESC(SYS_CSSELR_EL1), access_csselr, reset_unknown, CSSELR_EL1 }, - { SYS_DESC(SYS_CTR_EL0), access_ctr }, + { SYS_DESC(SYS_CTR_EL0), access_ctr, .reset =3D reset_ctr, + .get_user =3D get_ctr, .set_user =3D set_ctr, .val =3D (CTR_EL0_DIC_MAS= K | + CTR_EL0_IDC_MASK | + CTR_EL0_DminLine_MASK | + CTR_EL0_IminLine_MASK)}, { SYS_DESC(SYS_SVCR), undef_access }, =20 { PMU_SYS_REG(PMCR_EL0), .access =3D access_pmcr, .reset =3D reset_pmcr, @@ -3616,6 +3704,13 @@ static bool index_to_params(u64 id, struct sys_reg_p= arams *params) } } =20 +static const struct sys_reg_desc *get_sys_reg_desc(u32 encoding) +{ + struct sys_reg_params params =3D encoding_to_params(encoding); + + return find_reg(¶ms, sys_reg_descs, ARRAY_SIZE(sys_reg_descs)); +} + const struct sys_reg_desc *get_reg_by_id(u64 id, const struct sys_reg_desc table[], unsigned int num) @@ -3669,18 +3764,11 @@ FUNCTION_INVARIANT(midr_el1) FUNCTION_INVARIANT(revidr_el1) FUNCTION_INVARIANT(aidr_el1) =20 -static u64 get_ctr_el0(struct kvm_vcpu *v, const struct sys_reg_desc *r) -{ - ((struct sys_reg_desc *)r)->val =3D read_sanitised_ftr_reg(SYS_CTR_EL0); - return ((struct sys_reg_desc *)r)->val; -} - /* ->val is filled in by kvm_sys_reg_table_init() */ static struct sys_reg_desc invariant_sys_regs[] __ro_after_init =3D { { SYS_DESC(SYS_MIDR_EL1), NULL, get_midr_el1 }, { SYS_DESC(SYS_REVIDR_EL1), NULL, get_revidr_el1 }, { SYS_DESC(SYS_AIDR_EL1), NULL, get_aidr_el1 }, - { SYS_DESC(SYS_CTR_EL0), NULL, get_ctr_el0 }, }; =20 static int get_invariant_sys_reg(u64 id, u64 __user *uaddr) @@ -4066,6 +4154,9 @@ static void vcpu_reset_hcr(struct kvm_vcpu *vcpu) */ if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TLB, OS)) vcpu->arch.hcr_el2 |=3D HCR_TTLBOS; + + if (kvm->arch.ctr_el0 !=3D read_sanitised_ftr_reg(SYS_CTR_EL0)) + vcpu->arch.hcr_el2 |=3D HCR_TID2; } =20 void kvm_setup_traps(struct kvm_vcpu *vcpu) --=20 2.42.0 From nobody Fri Dec 19 14:13:31 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDDDB146D55 for ; Fri, 26 Apr 2024 10:50:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128611; cv=none; b=R2luaSi3da2MNUMAoFW0W9XTMEE+8lEVsxlwR8lC+HKhtz8NFdFKui56o9KORcpYAf4g025uMDZUqXeUT3ZBT8HA2z8D2tc1BQHYJETqXHUFxMOCGOJ+kCJhk4c1KMQjULOQ4hACGyFmMxXC9j8b2xcqY//jWybS1BXa8CHOsOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128611; c=relaxed/simple; bh=jh0NGErGqzNPQk8HfQs0ty56UQwvTZ9Efo3G7pxJW+w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QCxj2oyH20kq0YJbmjTHju5Xqrf9Pv4O2oWwVcmm4wWTfN/GAeo7ukJFIGwhZXWXtIapzP6nb9qm9StPscX0ifPZwLUa6l1DSWuR+hg+GntkYvTF9ADrpwfOTQVaq8WPt8FOYgfzYh3ik6pYToeaYK1cjcFgiKwzcx6BXy1W2fQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Y1P2dZb8; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Y1P2dZb8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714128608; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tBEVlwbbJPUSSW/SmfUHJkSUS/tMVeS+WCfEWVSGRSA=; b=Y1P2dZb8xYs8OuK0Y5iTw7hkANNqWyeomB/f1FMC3n23rOdAp2dn42C3wZL1P/idDmgPY/ 3+0kc3W7F5Ti/s5JVWLXjrjUCz0Xa7lYGgK45ay1UE5bH6a3uALVcAsVoAmf2UY9cO38tM Pj3mhaV1X32D72K12J8LF5QOyF1CAho= Received: from mail-ot1-f71.google.com (mail-ot1-f71.google.com [209.85.210.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-45-5Yg46B-nOiKz1AZOqAwBOA-1; Fri, 26 Apr 2024 06:50:05 -0400 X-MC-Unique: 5Yg46B-nOiKz1AZOqAwBOA-1 Received: by mail-ot1-f71.google.com with SMTP id 46e09a7af769-6eb7eddbd08so2424403a34.2 for ; Fri, 26 Apr 2024 03:50:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714128605; x=1714733405; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tBEVlwbbJPUSSW/SmfUHJkSUS/tMVeS+WCfEWVSGRSA=; b=uRRg1v/yg+oe1PIkcGSbPVIta/m3YYafDztsNexQCNe76XTELOKXiQintI3o1dUlSF 1pPG5dy2nD+Gzvthu1z7Uk5F4UUMvVLP8hoD+VlyumXxEiP3X6xflf54pUHLi50SkYim 0VS4Rpk3R1lSizcLD2H1HMNXIAeJfgSxg9Q77wIzJo+kky3J6AKV1T4ry2i14hKIiGz9 7RyWaFtXiHPxVsrzNKDHAMKl/upaq7S6Cafh1kKG+bEcRYmqzg7n1HXfAL/10sil4d5a tb8x57vrMhaRI+QvlbrTwciFo+Pkqgy+FeE/VCwtjaClKZ2diTDR+hr+dqobGIWmUtpx 89qw== X-Forwarded-Encrypted: i=1; AJvYcCU1fYJv0kbVEmF6OYmOIohWIkBaZAOF5XwVi8O+d7BRapI3OKJLC7QtBJpwdtbB3CzwMcYmEPtQlhFNot1wOZcke9067o+Eg7UAXORd X-Gm-Message-State: AOJu0YycIUhIP/nvjFZpx+4Y/HuohvIl2/LhTnnN6O7n0M2Gh8YA2i0z fFu1wQdrAjPiRiTmUiRtIdoF8Qddo0h/54UTNSVf1yRGKuPhHbJdo1tdL4/AIUmgGMJzz5aGmc1 1T9O70MXy2nc/MJOR7LFpZa51caUhBGJCtfBwQg5QlQtRY+kcMBS86eUO/sfH/A== X-Received: by 2002:a05:6830:453:b0:6eb:cddf:a783 with SMTP id d19-20020a056830045300b006ebcddfa783mr2269773otc.26.1714128604907; Fri, 26 Apr 2024 03:50:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEMwtq9AaLj7a7CoLw8WnO6n+wHmWUkrG5Ru4V9/wZCrwSv2FNYib3sVt3Sw6963MwbFEf/QQ== X-Received: by 2002:a05:6830:453:b0:6eb:cddf:a783 with SMTP id d19-20020a056830045300b006ebcddfa783mr2269757otc.26.1714128604644; Fri, 26 Apr 2024 03:50:04 -0700 (PDT) Received: from rh.redhat.com (p200300c93f4cc600a5cdf10de606b5e2.dip0.t-ipconnect.de. [2003:c9:3f4c:c600:a5cd:f10d:e606:b5e2]) by smtp.gmail.com with ESMTPSA id vv26-20020a05620a563a00b007907b57aa1fsm3888019qkn.12.2024.04.26.03.50.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 03:50:04 -0700 (PDT) From: Sebastian Ott To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Catalin Marinas , Will Deacon Subject: [PATCH v2 5/6] KVM: arm64: show writable masks for feature registers Date: Fri, 26 Apr 2024 12:49:49 +0200 Message-ID: <20240426104950.7382-6-sebott@redhat.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426104950.7382-1-sebott@redhat.com> References: <20240426104950.7382-1-sebott@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Instead of using ~0UL provide the actual writable mask for non-id feature registers in the output of the KVM_ARM_GET_REG_WRITABLE_MASKS ioctl. Explicitely set the mask for CLIDR_EL1 to make sure we present the same value to userspace than before. This changes the mask for the CTR_EL0 register in the output of the KVM_ARM_GET_REG_WRITABLE_MASKS ioctl. Signed-off-by: Sebastian Ott --- arch/arm64/kvm/sys_regs.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 2fe3492ba3c4..7d5d55e5c16a 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -2532,7 +2532,7 @@ static const struct sys_reg_desc sys_reg_descs[] =3D { =20 { SYS_DESC(SYS_CCSIDR_EL1), access_ccsidr }, { SYS_DESC(SYS_CLIDR_EL1), access_clidr, reset_clidr, CLIDR_EL1, - .set_user =3D set_clidr }, + .set_user =3D set_clidr, .val =3D ~0UL }, { SYS_DESC(SYS_CCSIDR2_EL1), undef_access }, { SYS_DESC(SYS_SMIDR_EL1), undef_access }, { SYS_DESC(SYS_CSSELR_EL1), access_csselr, reset_unknown, CSSELR_EL1 }, @@ -4087,20 +4087,11 @@ int kvm_vm_ioctl_get_reg_writable_masks(struct kvm = *kvm, struct reg_mask_range * if (!is_feature_id_reg(encoding) || !reg->set_user) continue; =20 - /* - * For ID registers, we return the writable mask. Other feature - * registers return a full 64bit mask. That's not necessary - * compliant with a given revision of the architecture, but the - * RES0/RES1 definitions allow us to do that. - */ - if (is_id_reg(encoding)) { - if (!reg->val || - (is_aa32_id_reg(encoding) && !kvm_supports_32bit_el0())) - continue; - val =3D reg->val; - } else { - val =3D ~0UL; + if (!reg->val || + (is_aa32_id_reg(encoding) && !kvm_supports_32bit_el0())) { + continue; } + val =3D reg->val; =20 if (put_user(val, (masks + KVM_ARM_FEATURE_ID_RANGE_INDEX(encoding)))) return -EFAULT; --=20 2.42.0 From nobody Fri Dec 19 14:13:31 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDD96146D52 for ; Fri, 26 Apr 2024 10:50:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128611; cv=none; b=ERbyeYIFdxtb/mYTWfNa1W0o4vc7GXao+B+8LZgnqWxx5NpZe4rnHX5RWN/sEso9ThwamJ3ivcgO85+lIGu0Ft57Q711IcjXazRvw/Htv4M81b34dSxA8UvAl0QqUfYJ/jzjRujA3pLgZ26gakb4+uxoNZ4YX/bIHJ4RBUZLgPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714128611; c=relaxed/simple; bh=Tf9y+3NWAEc98GgU9RtLG+14qsoC+MYFycxluP99giU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hkd6LsPmEyUOY9QaNHnT3rDEb9WZej+04s73cPWRTSsfC1c7wmjhRZryQaPTBjrwYrus0BCKzjqVuc8/7X1sme206u5S4x6ldagBCXZsWyC9ZzmyrtTY/4C6hOlUnPGH8Nuu4jmNLhThRQcZHmwLFPkB7PlHI7nasmgQ0qfLOUE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=hn4SG3To; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hn4SG3To" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714128608; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wNqZh+z2EiZYSEoBRZTk0oPEfA8kIktvdRXuHyV2qbw=; b=hn4SG3TolmVDVQOLaUb0jlmlAltR+YScK7GO3KMjPfWsuSOgyMaxbz/NGXWDZtdcH5EtVV g3wkr6M6DYXf0LO9ACc9M+ATqNm5bFfOecXlDnHRattnFZ4RlbL/v7JBadVxT+sKZa1mcj 6u5a9eFXa1svJuPzxvvfGMJsYidvP7A= Received: from mail-oi1-f200.google.com (mail-oi1-f200.google.com [209.85.167.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-313-BDCwz__lNUaAvZl0gJqFPg-1; Fri, 26 Apr 2024 06:50:07 -0400 X-MC-Unique: BDCwz__lNUaAvZl0gJqFPg-1 Received: by mail-oi1-f200.google.com with SMTP id 5614622812f47-3c5f316d1ffso2437688b6e.3 for ; Fri, 26 Apr 2024 03:50:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714128607; x=1714733407; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wNqZh+z2EiZYSEoBRZTk0oPEfA8kIktvdRXuHyV2qbw=; b=Af2WkfrKoPtktsaZ8WrYG9004YeIaLFCBI385zabXscw1Vg3hIZBb5L6cZ5UcCE8mv a9eeFnoCLXBUzKTBWHuZXAxckgcoQGZp9jWALOMQYl0/7WbcXxu48C6sNEl1jeF/hY16 Kq8yh8I5ijPKFkyAulWX6ZBWjAhoCl/VYReV7ixqulNZjp+RzITQjLuDAJ15R7MwtWIn pzFFtYtZgvrL7YeEb1Hx6k1CsSOoIQJ6NlaGl7c2iRrvLb415O60rPD+B61JoDi+AlpV or7lz8oHL2YSL0szcP5DXgMzNDRGpOAevT9wtaOcftywSxP27Pc4gTu99JAdUSjR9sV6 SU/w== X-Forwarded-Encrypted: i=1; AJvYcCUn3MK5Q68xgeal7pxEorwGVvJ5ypk5ZyJramAjRrMYYmu1tWkGtb3RHJodQksfS+DhfB8XP3JiqKnsMEkxvCbSHe58xyaVYjASXsbF X-Gm-Message-State: AOJu0YzGGDJcySVS4+3iFfWK3ScDGSzxHX2M9dJIj/qTkQbO+352q4gq ZVQkYEi8CC9ni60Mry2eIKWowIaxe+9IQTnuLp5Yy5b2Ut8/2HPUw51D+b1WxFTgTK1OLqPUozT NRagQ2Y+i9DWqxQ/fywvwBXleVxiQJvTOWtmL4CWOB2EPlXtUC9okNW8S0J+nlw== X-Received: by 2002:a05:6808:30a4:b0:3c7:4d4e:efa with SMTP id bl36-20020a05680830a400b003c74d4e0efamr3051375oib.0.1714128607086; Fri, 26 Apr 2024 03:50:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEKgU12rJ0S8FySH9QjK+dyy5z+zqe2fLh87SXhBDOo4CIWHlr7Ul+j8/28IMaiu8xhUzD1bg== X-Received: by 2002:a05:6808:30a4:b0:3c7:4d4e:efa with SMTP id bl36-20020a05680830a400b003c74d4e0efamr3051354oib.0.1714128606675; Fri, 26 Apr 2024 03:50:06 -0700 (PDT) Received: from rh.redhat.com (p200300c93f4cc600a5cdf10de606b5e2.dip0.t-ipconnect.de. [2003:c9:3f4c:c600:a5cd:f10d:e606:b5e2]) by smtp.gmail.com with ESMTPSA id vv26-20020a05620a563a00b007907b57aa1fsm3888019qkn.12.2024.04.26.03.50.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 03:50:06 -0700 (PDT) From: Sebastian Ott To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Cc: Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Catalin Marinas , Will Deacon Subject: [PATCH v2 6/6] KVM: arm64: rename functions for invariant sys regs Date: Fri, 26 Apr 2024 12:49:50 +0200 Message-ID: <20240426104950.7382-7-sebott@redhat.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426104950.7382-1-sebott@redhat.com> References: <20240426104950.7382-1-sebott@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Invariant system id registers are populated with host values at initialization time using their .reset function cb. These are currently called get_* which is usually used by the functions implementing the .get_user callback. Change their function names to reset_* to reflect what they are used for. Signed-off-by: Sebastian Ott --- arch/arm64/kvm/sys_regs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 7d5d55e5c16a..88f6cdf9b8d6 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -3753,8 +3753,8 @@ id_to_sys_reg_desc(struct kvm_vcpu *vcpu, u64 id, */ =20 #define FUNCTION_INVARIANT(reg) \ - static u64 get_##reg(struct kvm_vcpu *v, \ - const struct sys_reg_desc *r) \ + static u64 reset_##reg(struct kvm_vcpu *v, \ + const struct sys_reg_desc *r) \ { \ ((struct sys_reg_desc *)r)->val =3D read_sysreg(reg); \ return ((struct sys_reg_desc *)r)->val; \ @@ -3766,9 +3766,9 @@ FUNCTION_INVARIANT(aidr_el1) =20 /* ->val is filled in by kvm_sys_reg_table_init() */ static struct sys_reg_desc invariant_sys_regs[] __ro_after_init =3D { - { SYS_DESC(SYS_MIDR_EL1), NULL, get_midr_el1 }, - { SYS_DESC(SYS_REVIDR_EL1), NULL, get_revidr_el1 }, - { SYS_DESC(SYS_AIDR_EL1), NULL, get_aidr_el1 }, + { SYS_DESC(SYS_MIDR_EL1), NULL, reset_midr_el1 }, + { SYS_DESC(SYS_REVIDR_EL1), NULL, reset_revidr_el1 }, + { SYS_DESC(SYS_AIDR_EL1), NULL, reset_aidr_el1 }, }; =20 static int get_invariant_sys_reg(u64 id, u64 __user *uaddr) --=20 2.42.0