From nobody Mon Feb 9 12:00:22 2026 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) (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 A79C923909C for ; Thu, 22 May 2025 20:35:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946140; cv=none; b=tRLeSVyCRRixt2g12FysgGbrkqdhh6ScYrYHNP01YxwTyzzROkjO1WQEB1qJqbAMc3yjZsZ8MeQs9+7C1+PeX48LqOj5PrB+o+edu6WS0UiBLZdwT4TQvGRuiijD90dDn/SKRa2MgIIHuwnoYQWKrmIBwE7Y+DEk9gCm6hnsbWc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946140; c=relaxed/simple; bh=5PhR4Cke8yMwoA4uPKJBWa65xrmcQt00CtfyS9bPFCo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hIeCPTDpxItpCNHSzjYIqPbJA2jY3igGk2svoTBLKp6U4+BGJM5rWrOVK7arnBV6uIVC6SvWnM8Ipir6MqPibLQFZKEB343ND8Da8zV03s7ld7ATkslx2w/jwZfvzna8blTwmZmzQTzNxLrVZPcT0sMfOYWecZ9aeSpxx6MgDoU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=p9PYFjVp; arc=none smtp.client-ip=209.85.215.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="p9PYFjVp" Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-b1a1930a922so5741526a12.3 for ; Thu, 22 May 2025 13:35:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747946138; x=1748550938; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GuR/z1GpxuJ9rGb2JSweVgvKX4SVj6nkkUnTCjHYUz4=; b=p9PYFjVpWX9JdpITTcooJzggyOMBFTxu2a/wfBC0DuCYsToyDhCgYNcqnbo5TCnvLp 1edNhMSKNBhyx04BV+hNQI7JPwa2t8eXRXCMcCk7jciWt/slwS0XNXLCsA+TOU3Y3aX7 fW0SaZ5lL1GRVRkl3bGxt/cgyFgvvysCmhdxbZA4ttS4Gfj7WGpqWfHC5Dhqto2vl4lQ zJIM1DnMp5Lin5xehfLYQvjh9V1cTsfiXnJk0XF/W5sPGxeLD5eMOIu42hkE4umZgLyf TCyR5ZRF8wniQNYtx0vjuCiYGCRhuDBjSQnp6QFAJC0q4OoxDC5QWzVRWxOUYr2pJgmx aFGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747946138; x=1748550938; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GuR/z1GpxuJ9rGb2JSweVgvKX4SVj6nkkUnTCjHYUz4=; b=rDcNVwQDBObpaX7oI6ISrapj7MiX6Me6uLy7qaDHBD07jqZm6szLTnTDnYzbO/E7mJ 6MIzC2W2maRHylg3xyKLR1YTw0iJo+d+cNo/0mKUJSgihNyiAypR1UrrZBp7QvgzjUCV pbp6uReUtalJV9+6JivWr2pc61K47bq9d4sPAbP95da8rI1GAlpFYGrxl+xKLeZi69em 5WQsSlp38Pk3KF2NI/9khRVBFosnFGqD0aKu68DRYexdk0CRIh9fLqVnpEwVBoj5PCHz SUpRsrSiMLxcceK5kRGu/H/NtM21IftmTYfz6bzBJcOWdw0RNyov2Qqk4VZW1qeFlCJi tDPg== X-Forwarded-Encrypted: i=1; AJvYcCUWp2WEzD5GP3A5YMpeBxZJqnXVrPpkVZQ7z1lM3mm0co6emzFryZLmnwdni9D3jB+7LG8MqXamuCzJRw8=@vger.kernel.org X-Gm-Message-State: AOJu0YzUL+GzfLn/nxwA4jgyT5cu6gEY0WSA5VjQ3W2EFo7lScP48JvO M7PeSOQJIMmnRTgMYkt1CNRUklBBUhwhMJxil7iDcAIwG5gFje58aeH5sZP1uUrjrFFrLHIYesD tGs+f X-Gm-Gg: ASbGncuLDs8x8oO9YMn8jAZ6j3UBihdv4+bgfJV0sH1jD0JS0+8TqJ6AQA0ZhFOqCm4 OXKbSHWv+hPEFDoS1gMEMN+slMbi9im27kfYSO4sK295AeeCTIfO94qeJXObeWg3DzhsHXZA3YF 2stR7ntaxUP7anfMLu+1aEjbt9Vxn2dhyNzrxcXX80dJ7wnTyf8uQmbn8TfaLIQfS+mWk8kVjCY 8vScipfW89hw+4OKg+aQu66ZzcNqEHcXi8RShfzb7wIvm3+gT4iecqTDI84yv1NjidYimzatIke n20ts03xN7U5ihHCk91Tn5bFbhq+g3cRwhoZGTvfsFJHu9+m57FF1hkUJJgZv5Ku X-Google-Smtp-Source: AGHT+IF8umjnswXbCK9h2ygGRuvFLfM+6wDcV4ZgplnSPknSDclMZnijppDTERnvVHLPyJpY/CvMbw== X-Received: by 2002:a17:90b:1dc9:b0:30a:3e8e:492c with SMTP id 98e67ed59e1d1-30e7d5be2ccmr33662120a91.32.1747946137764; Thu, 22 May 2025 13:35:37 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f365b229csm5932754a91.10.2025.05.22.13.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 May 2025 13:35:37 -0700 (PDT) From: Atish Patra Date: Thu, 22 May 2025 13:35:25 -0700 Subject: [PATCH v2 1/5] RISC-V: KVM: Lazy enable hstateen IMSIC & ISEL bit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250522-kvm_lazy_enable_stateen-v2-1-b7a84991f1c4@rivosinc.com> References: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> In-Reply-To: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> To: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti Cc: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Atish Patra X-Mailer: b4 0.15-dev-42535 Currently, we enable the smstateen bit at vcpu configure time by only checking the presence of required ISA extensions. These bits are not required to be enabled if the guest never uses the corresponding architectural state. Enable the smstaeen bits at runtime lazily upon first access. Signed-off-by: Atish Patra --- arch/riscv/include/asm/kvm_aia.h | 1 + arch/riscv/kvm/aia.c | 43 ++++++++++++++++++++++++++++++++++++= ++++ arch/riscv/kvm/aia_imsic.c | 8 ++++++++ 3 files changed, 52 insertions(+) diff --git a/arch/riscv/include/asm/kvm_aia.h b/arch/riscv/include/asm/kvm_= aia.h index 1f37b600ca47..760a1aef09f7 100644 --- a/arch/riscv/include/asm/kvm_aia.h +++ b/arch/riscv/include/asm/kvm_aia.h @@ -112,6 +112,7 @@ int kvm_riscv_aia_aplic_has_attr(struct kvm *kvm, unsig= ned long type); int kvm_riscv_aia_aplic_inject(struct kvm *kvm, u32 source, bool level); int kvm_riscv_aia_aplic_init(struct kvm *kvm); void kvm_riscv_aia_aplic_cleanup(struct kvm *kvm); +bool kvm_riscv_aia_imsic_state_hw_backed(struct kvm_vcpu *vcpu); =20 #ifdef CONFIG_32BIT void kvm_riscv_vcpu_aia_flush_interrupts(struct kvm_vcpu *vcpu); diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c index 19afd1f23537..1e0d2217ade7 100644 --- a/arch/riscv/kvm/aia.c +++ b/arch/riscv/kvm/aia.c @@ -241,6 +241,8 @@ int kvm_riscv_vcpu_aia_rmw_topei(struct kvm_vcpu *vcpu, unsigned long new_val, unsigned long wr_mask) { + bool vsfile_present =3D kvm_riscv_aia_imsic_state_hw_backed(vcpu); + /* If AIA not available then redirect trap */ if (!kvm_riscv_aia_available()) return KVM_INSN_ILLEGAL_TRAP; @@ -249,6 +251,26 @@ int kvm_riscv_vcpu_aia_rmw_topei(struct kvm_vcpu *vcpu, if (!kvm_riscv_aia_initialized(vcpu->kvm)) return KVM_INSN_EXIT_TO_USER_SPACE; =20 + /* Continue if smstaeen is not present */ + if (!riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN)) + goto skip_hstateen; + + /* Enable the bit in hstateen0 lazily upon first access */ + if (!(vcpu->arch.cfg.hstateen0 & SMSTATEEN0_AIA_IMSIC)) { + vcpu->arch.cfg.hstateen0 |=3D SMSTATEEN0_AIA_IMSIC; + if (IS_ENABLED(CONFIG_32BIT)) + csr_set(CSR_HSTATEEN0H, SMSTATEEN0_AIA_IMSIC >> 32); + else + csr_set(CSR_HSTATEEN0, SMSTATEEN0_AIA_IMSIC); + if (vsfile_present) + return KVM_INSN_CONTINUE_SAME_SEPC; + } else if (vsfile_present) { + pr_err("Unexpected trap for CSR [%x] with hstateen0 enabled and valid vs= file\n", + csr_num); + return KVM_INSN_EXIT_TO_USER_SPACE; + } + +skip_hstateen: return kvm_riscv_vcpu_aia_imsic_rmw(vcpu, KVM_RISCV_AIA_IMSIC_TOPEI, val, new_val, wr_mask); } @@ -400,11 +422,32 @@ int kvm_riscv_vcpu_aia_rmw_ireg(struct kvm_vcpu *vcpu= , unsigned int csr_num, unsigned long wr_mask) { unsigned int isel; + bool vsfile_present =3D kvm_riscv_aia_imsic_state_hw_backed(vcpu); =20 /* If AIA not available then redirect trap */ if (!kvm_riscv_aia_available()) return KVM_INSN_ILLEGAL_TRAP; =20 + /* Continue if smstaeen is not present */ + if (!riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN)) + goto skip_hstateen; + + /* Enable the bit in hstateen0 lazily upon first access */ + if (!(vcpu->arch.cfg.hstateen0 & SMSTATEEN0_AIA_ISEL)) { + vcpu->arch.cfg.hstateen0 |=3D SMSTATEEN0_AIA_ISEL; + if (IS_ENABLED(CONFIG_32BIT)) + csr_set(CSR_HSTATEEN0H, SMSTATEEN0_AIA_ISEL >> 32); + else + csr_set(CSR_HSTATEEN0, SMSTATEEN0_AIA_ISEL); + if (vsfile_present) + return KVM_INSN_CONTINUE_SAME_SEPC; + } else if (vsfile_present) { + pr_err("Unexpected trap for CSR [%x] with hstateen0 enabled and valid vs= file\n", + csr_num); + return KVM_INSN_EXIT_TO_USER_SPACE; + } + +skip_hstateen: /* First try to emulate in kernel space */ isel =3D ncsr_read(CSR_VSISELECT) & ISELECT_MASK; if (isel >=3D ISELECT_IPRIO0 && isel <=3D ISELECT_IPRIO15) diff --git a/arch/riscv/kvm/aia_imsic.c b/arch/riscv/kvm/aia_imsic.c index 29ef9c2133a9..d8e6f14850c0 100644 --- a/arch/riscv/kvm/aia_imsic.c +++ b/arch/riscv/kvm/aia_imsic.c @@ -361,6 +361,14 @@ static int imsic_mrif_rmw(struct imsic_mrif *mrif, u32= nr_eix, return 0; } =20 +bool kvm_riscv_aia_imsic_state_hw_backed(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_aia *vaia =3D &vcpu->arch.aia_context; + struct imsic *imsic =3D vaia->imsic_state; + + return imsic && imsic->vsfile_cpu >=3D 0; +} + struct imsic_vsfile_read_data { int hgei; u32 nr_eix; --=20 2.43.0 From nobody Mon Feb 9 12:00:22 2026 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (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 89D18239E67 for ; Thu, 22 May 2025 20:35:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946142; cv=none; b=d92qJolLS2QH5Xiw3/nUbdbYzmH18nioF0BzuHTZsgkXWORSmvdpqhFJy+HqurFqMcYHcTgPVa+yLAToJ9B5ruqFx4wpg5JpFZyGLZIJN+a97O/vbrlpfX3RBo4hoDEBdAiEJ8ceA+XcSD7x0sV8gqR5ZgBFD0juljpcgugXtS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946142; c=relaxed/simple; bh=G5DjctQXgpnKHi8p8ajBugWNHkXnFCRfVVal3XFToIg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VRAXmpp19d/JHgHCDpS2O1kexjpSKaJpshILqlUenU8HHVIPyvHHaKAXP/YZzJz7RM+YFHQyiQRj24F/6AbtMH4XI1N0wHblbDTs+AloRpxU5feu2OTXETiVt6sHUyCefLhyzAjRUil8JGNZD3PpngjDpDcjVIGbvoaLdCEyOx0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=fgjlF1VP; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="fgjlF1VP" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-73bf5aa95e7so7493725b3a.1 for ; Thu, 22 May 2025 13:35:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747946139; x=1748550939; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9U/5M+ajo+Gkj1tgfbc1vbd2oCHGdy+fsgX0VrxxjDQ=; b=fgjlF1VP9G0aHiVcaBbmbjk6X83+LQJc1GShZHyVup4TMTbHMhs+sLZZWK2/0tthgX Jv/ETPVtJ7T+y7f8w9VffxJk/W5AzchnNBNeHqju0xsiB2jF8H+ZPX91dKY/amy/yrC0 yRvln8CSHsLWdZt9q1gzWqVbxcQ96QfZ9nfDdGaqLGZGudcd+klSccRS1bIj3prLqhyK qwE/W3fPisuUc9my7z1gSQwDyb7CKbZ22qj3C+/6MX9yggtXV5127YSBWhrAsbCkkk58 VelxSW4orGGo2Ner1XSpwx1EpYX+LtSnky8m/RCtAgnabaGYT4cOfGN1rkrTVXJI8/dR hXNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747946139; x=1748550939; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9U/5M+ajo+Gkj1tgfbc1vbd2oCHGdy+fsgX0VrxxjDQ=; b=PWlLp90jab5XepZ3kOOqH4vWsBWwnCKv24Qhw5EK2FAyCFa3H/vmy/w1s5k3N9fu0q rtNfT2DhDHjAkhycPqQHTx1es9jIo9KX2c7rc30IaKINIrHnlCQvUtb2e680oUGK8IyR /rG4xg3cGtdjK8omdDKq3q6v4O0087hDQjeiw7rYGRl4kIjoljhBZjIy/+cZNUhr8QmB 0pxWnAWDeuv8fIQnSPoCBjitEhjbNjoH9jPGlphJldPAMxlGJaiL4/4LH/gQjxDw/ZFX NgNLpplxxPKSFQ81AXHVN/895mbHesBc/28ixG797Jo943+5Z9r1yRJibbkvwS68KWq4 z0WQ== X-Forwarded-Encrypted: i=1; AJvYcCXqWJyVBPeoy3PDeWLv5l8AQusKoTwGuILbt8veI/jJTCzwaxn1AlK9iCvYKySbODFdWyjWZ7SXuRZW+ns=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5wOchS4biQhOghXVeR1lpMhaq8IJs3OKweMVVQ9fJh9A86wpR K3ITcyzaAqNHdxoUKK8+3DGE6HaSQWenoGJtRPGneC7HJtACye6Zk4JNo35a5gsogZ0= X-Gm-Gg: ASbGncuzwlMMG041inZ53AQDrT60CXTRb6/643Zs5EtCnLztKs76YTxbU+Od8D32KuH dyp0jopG5zuBwvzyDjGcu78ljDrj3XzsqPHanspQbkE/n87tKrV6UvZbmnTqUttImaQCPsjqHAT k3Y+AUzwlWPRF/S+/XJs4SiJx3OF4l9gk8KlfVv+co474SaBiG/TYEnQOpc/8IC5Isfbmvm1xnu NflC10G4Uq2cjLhvyIfDXPy25eXM4sUPGNVxNRHxLTShivg6rDop1p6wNebg16CVXEuf4n1A+L/ lm00mQWFCYCRw9vmS68iEe0p4iDRwju01NoFrXsTVwI8p2OVTbfaEZ1PQ+1jzbnZ X-Google-Smtp-Source: AGHT+IELwMEFwHhuScHHyQ7/U0noZU5+9NnOKAusz1Utvndq2rvsq/J8AdaP7d6jJo94bLP1ogTjNw== X-Received: by 2002:a17:90b:17cc:b0:30e:9349:2d99 with SMTP id 98e67ed59e1d1-310e96b5ff6mr767848a91.5.1747946138723; Thu, 22 May 2025 13:35:38 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f365b229csm5932754a91.10.2025.05.22.13.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 May 2025 13:35:38 -0700 (PDT) From: Atish Patra Date: Thu, 22 May 2025 13:35:26 -0700 Subject: [PATCH v2 2/5] RISC-V: KVM: Add a hstateen lazy enabler helper function Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250522-kvm_lazy_enable_stateen-v2-2-b7a84991f1c4@rivosinc.com> References: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> In-Reply-To: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> To: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti Cc: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Atish Patra X-Mailer: b4 0.15-dev-42535 Hstateen has different bits that can be enabled lazily at runtime. Most of them have similar functionality where the hstateen bit must be enabled if not enabled already. The correpsonding config bit in vcpu must be enabled as well so that hstateen CSR is updated correctly during the next vcpu load. In absesnce of Smstateen extension, exit to the userspace in the trap because CSR access control exists architecturally only if Smstateen extension is available. Add a common helper function to achieve the above said objective. Signed-off-by: Atish Patra --- arch/riscv/include/asm/kvm_vcpu_insn.h | 4 ++++ arch/riscv/kvm/vcpu_insn.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_insn.h b/arch/riscv/include/as= m/kvm_vcpu_insn.h index 350011c83581..1125f3f1c8c4 100644 --- a/arch/riscv/include/asm/kvm_vcpu_insn.h +++ b/arch/riscv/include/asm/kvm_vcpu_insn.h @@ -6,6 +6,8 @@ #ifndef __KVM_VCPU_RISCV_INSN_H #define __KVM_VCPU_RISCV_INSN_H =20 +#include + struct kvm_vcpu; struct kvm_run; struct kvm_cpu_trap; @@ -44,5 +46,7 @@ int kvm_riscv_vcpu_mmio_store(struct kvm_vcpu *vcpu, stru= ct kvm_run *run, unsigned long fault_addr, unsigned long htinst); int kvm_riscv_vcpu_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run); +int kvm_riscv_vcpu_hstateen_lazy_enable(struct kvm_vcpu *vcpu, unsigned in= t csr_num, + uint64_t hstateen_feature_bit_mask); =20 #endif diff --git a/arch/riscv/kvm/vcpu_insn.c b/arch/riscv/kvm/vcpu_insn.c index 97dec18e6989..0a7e229cfd34 100644 --- a/arch/riscv/kvm/vcpu_insn.c +++ b/arch/riscv/kvm/vcpu_insn.c @@ -235,6 +235,36 @@ static int seed_csr_rmw(struct kvm_vcpu *vcpu, unsigne= d int csr_num, return KVM_INSN_EXIT_TO_USER_SPACE; } =20 +int kvm_riscv_vcpu_hstateen_lazy_enable(struct kvm_vcpu *vcpu, unsigned in= t csr_num, + uint64_t hstateen_feature_bit_mask) +{ + /* Access from VS shouldn't trap if smstaeen is not present */ + if (!riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN)) + return KVM_INSN_EXIT_TO_USER_SPACE; + + /* + * Make sure that KVM doesn't enable any guest visible state via sstateen= (lower 32 bits) + * yet. Access is restricted to prevent unintended behavior. + */ + if (hstateen_feature_bit_mask & GENMASK(31, 0)) { + pr_err("Unexpected access from lower 32 bits of hstateen0\n"); + return KVM_INSN_EXIT_TO_USER_SPACE; + } + + /* Enable the bit in hstateen0 lazily upon first access */ + if (!(vcpu->arch.cfg.hstateen0 & hstateen_feature_bit_mask)) { + vcpu->arch.cfg.hstateen0 |=3D hstateen_feature_bit_mask; + csr_set(CSR_HSTATEEN0, hstateen_feature_bit_mask); + if (IS_ENABLED(CONFIG_32BIT)) + csr_set(CSR_HSTATEEN0H, hstateen_feature_bit_mask >> 32); + } else { + return KVM_INSN_EXIT_TO_USER_SPACE; + } + + /* Let the guest retry the instruction read after hstateen0 is modified */ + return KVM_INSN_CONTINUE_SAME_SEPC; +} + static const struct csr_func csr_funcs[] =3D { KVM_RISCV_VCPU_AIA_CSR_FUNCS KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS --=20 2.43.0 From nobody Mon Feb 9 12:00:22 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 8ACE4239E81 for ; Thu, 22 May 2025 20:35:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946142; cv=none; b=HbWLQjwodxwm++5S9Jw+zcQ2NdvGwv0TMkhdkHaensIM9I5zCpVVuuNwUk63PGkTAryRMNdeXfwyKp8TUPy40aTxRE66/CqilEF+pm88a9V3esPZATQbrhRbeDeFlXwzi+iZumdhQxzJkjEKqkzelB0EkPnJiRuYCXIoyxv53QY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946142; c=relaxed/simple; bh=7mDtsgyySwkRziza7x9PbAf9WF1pkgbuZLDuvpNfiiM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nrWtM3EG39SHMfky1ca0cTrZSxG56DH6zxk6s32TV5mFJEEKTQxKBESVrX02yLb1oM92VwHJ/sX20XpMXK4Nj4heN9Cau/Pei5rqs0m4qAx4BDR01ariOuy7aWr2ECNqUOKBRad4Ic4Mu1yd5SBWGF6N1/u4hojP21dmfrQX0MI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=fYdRAPVX; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="fYdRAPVX" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-30ea8b7c5c2so5453641a91.3 for ; Thu, 22 May 2025 13:35:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747946140; x=1748550940; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=hlpsjtQ1jfPZ6A9TfjhS6qtbiSt0LuxjR82iYs+98kk=; b=fYdRAPVX4NHf9fuQDtQ1lV0uf4Iuz0nTnL1SZLLWFoH3MvH3ue8MH+KFuhlM7ZzwIV GJBHmHKRNDZ2meruxyVseZdDHV97In4+TX/ZSe9MJWSTme3lu9UYtCuG8+X78P81V5I3 EIO3Sps+CQQ6HlSIFKOOLkpJeSne4Q0P391SOhmtRupY1yBPtu3FGCy9yggatBEM+TfW 0VAKEyCPYWqk74l78vBVwmjXyXb3Y50YuVSIJdLl4+YVOHPOqrSET6AklZ89aAWh8n/9 o/LkrxEPNlnq5yKea3ko4pxP/MBfW6ZBybPjV03b2+G7RzZV3opM+gJWwW66ScNg4kmV X4Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747946140; x=1748550940; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hlpsjtQ1jfPZ6A9TfjhS6qtbiSt0LuxjR82iYs+98kk=; b=ko7aKFv5fT7GrzEcCv4fQ1ryz7mHx8g2QSYFZsr/evBwn3PBo2j6arA+q0Tc07x9d7 4+k9udoSUuNiLX2Ny30MQHcgmFZzQomOJtvOTJFKjDPDBskL6x5XrWDIajZ3Ud+hb8on bgKo2mIX/pCEauXYr3fGW4jiSlU2MGIt194wzSXU7D0rP2yjq2P+njZ/EAoMt6sdIfV9 pRUTk1wYdnslvcfEVAF7WlDFDI32ZVuVgz7OeItpySY2W+qPc5aT7BmcK917os4CCi2l qvTF2uFGQLrmbcv4NsUWjHxMdtDYVUc21fBoI5AyfP+0T1ejKZDbXVOvhJXlsti2h1Ig 9BXA== X-Forwarded-Encrypted: i=1; AJvYcCVgI/VdePwDo/hd5C5+hQkAB2WN5zafj/noB3ovYZxwtMA1jw/arJq4khqdsqsOXSTauhrsmSasqZCjyC4=@vger.kernel.org X-Gm-Message-State: AOJu0Yxzq/sJxagknYKpUuV2qztrq+dSrU+xM5As6Fea8UJYkO4g9sC3 b1VE8baTD8/KchlFYDBKi7cFPo2UXeYMMdVBtx8yBuWzfn2FsHmL3W9rEP45tHC2mmw= X-Gm-Gg: ASbGncsXptQ0XA2fP6ZJaUGE4OkzQ4i163S/vhLhqq96aEKQnNlW+Yr6bUs5N/ssqpq LSXXicZ28d0gouUGdiWF1POSAf618pu9L+Xcfk+s1jkTy33g/v8ZlabqiNgGCJ36BiJ/OfHFh3j bAMLAcSf9xzvD87wyrjPUv+hccQBcVAY2uwy76RbCrfu68SOBzKph6do/IWkxO7o7WrTB1tpdUC os4MwsAKWc/qWqgdMe3Xu1cQqwpv4Vla8ftavRH1g/Bwcx69Sos23gPZDG6FMviMR//VcCszHzJ 9QfFIsrf/TREQkPao4jXzJo1oWW7Z9NNOCoib2OMpE2e73gQAV5Ri6LwBjHcCO2Z X-Google-Smtp-Source: AGHT+IGCOYKh0vp5GpK/3nS4xafj8YOx8BCMj+SatngsU14XSWFqRaCBH400PBoR5UfD0rXZqAojdA== X-Received: by 2002:a17:90a:e706:b0:30e:5c7f:5d26 with SMTP id 98e67ed59e1d1-30e7d5aca67mr42085164a91.24.1747946139700; Thu, 22 May 2025 13:35:39 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f365b229csm5932754a91.10.2025.05.22.13.35.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 May 2025 13:35:39 -0700 (PDT) From: Atish Patra Date: Thu, 22 May 2025 13:35:27 -0700 Subject: [PATCH v2 3/5] RISC-V: KVM: Support lazy enabling of siselect and aia bits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250522-kvm_lazy_enable_stateen-v2-3-b7a84991f1c4@rivosinc.com> References: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> In-Reply-To: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> To: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti Cc: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Atish Patra X-Mailer: b4 0.15-dev-42535 Smstateen extension controls the SISELECT and SIPH/SIEH register through hstateen.AIA bit (58). Add lazy enabling support for those bits. Signed-off-by: Atish Patra --- arch/riscv/include/asm/kvm_aia.h | 13 ++++++++++++- arch/riscv/kvm/aia.c | 34 ++++++++++++++++++++++++++++++++++ arch/riscv/kvm/vcpu_insn.c | 3 +++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/kvm_aia.h b/arch/riscv/include/asm/kvm_= aia.h index 760a1aef09f7..9e39b0e15169 100644 --- a/arch/riscv/include/asm/kvm_aia.h +++ b/arch/riscv/include/asm/kvm_aia.h @@ -142,12 +142,23 @@ int kvm_riscv_vcpu_aia_rmw_topei(struct kvm_vcpu *vcp= u, unsigned long *val, unsigned long new_val, unsigned long wr_mask); +int kvm_riscv_vcpu_aia_hstateen_enable(struct kvm_vcpu *vcpu, + unsigned int csr_num, unsigned long *val, + unsigned long new_val, unsigned long wr_mask); +int kvm_riscv_vcpu_aia_rmw_isel(struct kvm_vcpu *vcpu, unsigned int csr_nu= m, unsigned long *val, + unsigned long new_val, unsigned long wr_mask); int kvm_riscv_vcpu_aia_rmw_ireg(struct kvm_vcpu *vcpu, unsigned int csr_nu= m, unsigned long *val, unsigned long new_val, unsigned long wr_mask); #define KVM_RISCV_VCPU_AIA_CSR_FUNCS \ { .base =3D CSR_SIREG, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_rmw= _ireg }, \ -{ .base =3D CSR_STOPEI, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_rmw= _topei }, +{ .base =3D CSR_SISELECT, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_rmw= _isel }, \ +{ .base =3D CSR_STOPEI, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_rmw= _topei }, \ +{ .base =3D CSR_STOPI, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_hst= ateen_enable }, \ + +#define KVM_RISCV_VCPU_AIA_CSR_32BIT_FUNCS \ +{ .base =3D CSR_SIPH, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_hstatee= n_enable }, \ +{ .base =3D CSR_SIEH, .count =3D 1, .func =3D kvm_riscv_vcpu_aia_hstatee= n_enable }, \ =20 int kvm_riscv_vcpu_aia_update(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_aia_reset(struct kvm_vcpu *vcpu); diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c index 1e0d2217ade7..3dfabf51a4d2 100644 --- a/arch/riscv/kvm/aia.c +++ b/arch/riscv/kvm/aia.c @@ -235,6 +235,40 @@ int kvm_riscv_vcpu_aia_set_csr(struct kvm_vcpu *vcpu, return 0; } =20 +int kvm_riscv_vcpu_aia_hstateen_enable(struct kvm_vcpu *vcpu, + unsigned int csr_num, + unsigned long *val, + unsigned long new_val, + unsigned long wr_mask) +{ + /* If AIA not available then redirect trap */ + if (!kvm_riscv_aia_available()) + return KVM_INSN_ILLEGAL_TRAP; + + /* If AIA not initialized then forward to user space */ + if (!kvm_riscv_aia_initialized(vcpu->kvm)) + return KVM_INSN_EXIT_TO_USER_SPACE; + + return kvm_riscv_vcpu_hstateen_lazy_enable(vcpu, csr_num, SMSTATEEN0_AIA); +} + +int kvm_riscv_vcpu_aia_rmw_isel(struct kvm_vcpu *vcpu, + unsigned int csr_num, + unsigned long *val, + unsigned long new_val, + unsigned long wr_mask) +{ + /* If AIA not available then redirect trap */ + if (!kvm_riscv_aia_available()) + return KVM_INSN_ILLEGAL_TRAP; + + /* If AIA not initialized then forward to user space */ + if (!kvm_riscv_aia_initialized(vcpu->kvm)) + return KVM_INSN_EXIT_TO_USER_SPACE; + + return kvm_riscv_vcpu_hstateen_lazy_enable(vcpu, csr_num, SMSTATEEN0_AIA_= ISEL); +} + int kvm_riscv_vcpu_aia_rmw_topei(struct kvm_vcpu *vcpu, unsigned int csr_num, unsigned long *val, diff --git a/arch/riscv/kvm/vcpu_insn.c b/arch/riscv/kvm/vcpu_insn.c index 0a7e229cfd34..ef4fcb641f1c 100644 --- a/arch/riscv/kvm/vcpu_insn.c +++ b/arch/riscv/kvm/vcpu_insn.c @@ -269,6 +269,9 @@ static const struct csr_func csr_funcs[] =3D { KVM_RISCV_VCPU_AIA_CSR_FUNCS KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS { .base =3D CSR_SEED, .count =3D 1, .func =3D seed_csr_rmw }, +#ifdef CONFIG_32BIT + KVM_RISCV_VCPU_AIA_CSR_32BIT_FUNCS +#endif }; =20 /** --=20 2.43.0 From nobody Mon Feb 9 12:00:22 2026 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (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 634CD23C502 for ; Thu, 22 May 2025 20:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946143; cv=none; b=NbtnTjwEVHjAT8Ucml4AvFgjZ3Sb+6Ie3NA9cJv0fKbTw5ju2AqYR1mDfGj5UcE9ZyuuZcwyJOCIgvdBLBXTFTsUlz+s2DSaFvqgwzy3puzYe+781CnajLF/rfALAfYK7abhCdhtPgyNH8kQ7tw+OJjOwnxQdC5oRix3XFTdpi8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946143; c=relaxed/simple; bh=LSgyb36sQWDSbDvQ0g/qxWY7gx9lY/2NHbvCnZ4+FcI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gbWhsjTI4f9f86YOUfN6Ug6d8h5x0V4MCLMl7c7CwzibDJgZ57K6EC9LiXOl9r2IpDZ9gEoaY//lsTZTOoCKdMtTzTOF3OoDwWjC0w6ULHfHi7yqe1NzSYl1H5c0V+QwPtZaZJlzNvlbyAT2bdgmyuzHERD/JwvNWgIATZfY69M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=M9aWZq8t; arc=none smtp.client-ip=209.85.215.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="M9aWZq8t" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-af6a315b491so6958621a12.1 for ; Thu, 22 May 2025 13:35:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747946141; x=1748550941; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=6M4N3dwNsXzDfzq+X21m8iWPwOjiKI12kvM05IYIXOY=; b=M9aWZq8tsUY49L7xWKdPBnB/eJ0N6KqyQ9tbmKpcDWXZ7nsF5+OcPw/584UItwf9LE QpQ6+O7PWJJs6rWsQ1dZjJKRC37YvEsnpPPqNrSNy1MvZ23M1L5yy/oTyIW0c/0HvtHr uTtQCTdU52mZWTPbj1TI773F9jguTkt2YCuQG7Q3WKtzsjEzcj+HsfFZJq1RnXQ9FJiS 93G7y4EmgpzNsgYF92TVyQf6m9Tu6H0juziJmqtmaE9BxzuUhiiqsx0ApyamMYXkta9W MdrU705hjsujviju/TzaUmUymsYh8sDXfCaqn7dmtBQCtoAhkSPuvBILXgpQQwRiyi7p 7UnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747946141; x=1748550941; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6M4N3dwNsXzDfzq+X21m8iWPwOjiKI12kvM05IYIXOY=; b=bJ2Uvg8qGg1W3Wdgf40Qium856B3G7SXWD4wWIcBzUb4OXvZ2oNykk9/tCAd2d91mD w6AyTtsFyW/gtga7ogS79IS8pMo9unD9y5cKXHtCMk9zqOG+7QQxWbpi84gbzRJS30Ih j9YImwjzlwzB/Tm4HnRJESDRgp5WkotUreUdOOINHOdCYdRaM3gdV4lL4w/wvIveqd0w ZDypoQ6ho1B71NCVRSe3YjFL+aZ469ykiztWc6yZFTFJ9BXPvZbL3F1gnTfdIz3NqoNa SjOoxpu09SuRuoDQgppoC+CkxpZM8CfMoMUYmiEmB+mxhUU/Y3mUyVxjykuKl7VK8O5y AAOQ== X-Forwarded-Encrypted: i=1; AJvYcCUXb+8tQrUohYmMFiQbvsYGfHz62TNglfAQ5OoC+LZLtroUiUhZ+dYtSKgRHUQE+e6TVS4+2xfskJ3fTgc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9YX0WfxN/A3wnIKWCdcu6MdfbH2Rcf5gjh8XbqLQv5AHfdyHu UrrFQ2Mi+Yw14W2Oc9b/uj5Bsu28fQdOsJ1Oc7y/++3pB53KLtPKMF67vrPgVonUrY0= X-Gm-Gg: ASbGncvk0pf7BwiG404QwUr9xjyqV724mI7v8uRjx8nom3t3plxA6E/YUHb0FlpvT+t Ho4qxO8gIDkk1pScOK6YD/XWmkKqhPW8DGcv+NrWMfgX1n0RJTCJImVbBPyv5qiyXs8bDOu29pc cPTI2I0C5WFlFrCB2UP3SC/Bcq6RHLcRHkAEv4U8qO0g6qvQQyDjWb+Mvvy7TTY1/T06kanbsYJ 8OgUlIRo0NHL3YhOPo6t7AjguNDf/ksoLj5no8Ja4EdueYstXtBa7N5Im0gTg9nh01wzVEqu04u i1A4gZicZsJaHGmfcurNXkZin0HMImvt0pSk4jvGpZ4LhSr6red9QLA7LxShXAtt X-Google-Smtp-Source: AGHT+IEPv0Jsk9/CNfphfSQDZY9W54shdTdCOSDBaPAfZ6W//0FD3oLt9iY0h2MagdZeDpunR5yq+Q== X-Received: by 2002:a17:902:e54e:b0:22e:4b74:5f67 with SMTP id d9443c01a7336-231de376f05mr364633155ad.31.1747946140619; Thu, 22 May 2025 13:35:40 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f365b229csm5932754a91.10.2025.05.22.13.35.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 May 2025 13:35:40 -0700 (PDT) From: Atish Patra Date: Thu, 22 May 2025 13:35:28 -0700 Subject: [PATCH v2 4/5] RISC-V: KVM: Enable envcfg and sstateen bits lazily Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250522-kvm_lazy_enable_stateen-v2-4-b7a84991f1c4@rivosinc.com> References: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> In-Reply-To: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> To: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti Cc: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Atish Patra X-Mailer: b4 0.15-dev-42535 SENVCFG and SSTATEEN CSRs are controlled by HSENVCFG(62) and SSTATEEN0(63) bits in hstateen. Enable them lazily at runtime instead of bootime. Signed-off-by: Atish Patra --- arch/riscv/kvm/vcpu_insn.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/riscv/kvm/vcpu_insn.c b/arch/riscv/kvm/vcpu_insn.c index ef4fcb641f1c..6f2bba7533cf 100644 --- a/arch/riscv/kvm/vcpu_insn.c +++ b/arch/riscv/kvm/vcpu_insn.c @@ -265,9 +265,37 @@ int kvm_riscv_vcpu_hstateen_lazy_enable(struct kvm_vcp= u *vcpu, unsigned int csr_ return KVM_INSN_CONTINUE_SAME_SEPC; } =20 +static int kvm_riscv_vcpu_hstateen_enable_senvcfg(struct kvm_vcpu *vcpu, + unsigned int csr_num, + unsigned long *val, + unsigned long new_val, + unsigned long wr_mask) +{ + return kvm_riscv_vcpu_hstateen_lazy_enable(vcpu, csr_num, SMSTATEEN0_HSEN= VCFG); +} + +static int kvm_riscv_vcpu_hstateen_enable_stateen(struct kvm_vcpu *vcpu, + unsigned int csr_num, + unsigned long *val, + unsigned long new_val, + unsigned long wr_mask) +{ + const unsigned long *isa =3D vcpu->arch.isa; + + if (riscv_isa_extension_available(isa, SMSTATEEN)) + return kvm_riscv_vcpu_hstateen_lazy_enable(vcpu, csr_num, SMSTATEEN0_SST= ATEEN0); + else + return KVM_INSN_EXIT_TO_USER_SPACE; +} + +#define KVM_RISCV_VCPU_STATEEN_CSR_FUNCS \ +{ .base =3D CSR_SENVCFG, .count =3D 1, .func =3D kvm_riscv_vcpu_hstatee= n_enable_senvcfg }, \ +{ .base =3D CSR_SSTATEEN0, .count =3D 1, .func =3D kvm_riscv_vcpu_hstatee= n_enable_stateen },\ + static const struct csr_func csr_funcs[] =3D { KVM_RISCV_VCPU_AIA_CSR_FUNCS KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS + KVM_RISCV_VCPU_STATEEN_CSR_FUNCS { .base =3D CSR_SEED, .count =3D 1, .func =3D seed_csr_rmw }, #ifdef CONFIG_32BIT KVM_RISCV_VCPU_AIA_CSR_32BIT_FUNCS --=20 2.43.0 From nobody Mon Feb 9 12:00:22 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 4DAF323C4F7 for ; Thu, 22 May 2025 20:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946143; cv=none; b=kY5PmC3D0IjQX7EUJY8wY1f+gNryc4M2vZZcqBzYd0SWqegiqdHJOf27F+7HpEIqGqfloygcdDzvPxo84k+Yl46o9b7OPqowLURBQ0cm9x8TcCZTaR2kVj04GV1uk1A8B0W9cjOjCkMQi4dZJJ1V3k5HYC6muM+vt/dltI1mW+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747946143; c=relaxed/simple; bh=Kfu3qjguXcD15PsXrkFssgDsTb4P7cLTlIpPbs5OhkA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hMyZzz/LOPruP4N7j4697qlCfM4IaviElZThtlOyYBFH9ODeySR0qnEFd33stXhBxHrmCuPj5aacsq3ph1koFT2jyZHKDNah9/2jdOtkqI0hVuUyklY1n245JRw27bCyzs1hVm7MyyPAVTg01QDwN5GG2cDhuWwjLdT2EIac6Fc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=EmodXX6G; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="EmodXX6G" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-3081fe5987eso7034172a91.3 for ; Thu, 22 May 2025 13:35:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1747946141; x=1748550941; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VtEdIrem9+Yu9wt2wQL5f6sWXSENwBasckRwFklDCAs=; b=EmodXX6GOsjziBt63toFQYDVo+ze5Gs8xvGtwStneRItik17ii+Zm+0u5XfDznzJDl 4T+gDJKRf4zacs1SJ0wsLl4qNYcUfgSMmeR2WRUTo2QJxnK+RS89gchZBPMiR2wf3Gxa X5IgK/BwKzm+A9zjs4TwQWbwc/yJviG8j9RWStmPADYyl/fjiEcklZgcs0qBgf5kebEK 0QfuUc/H/gbtkSyRGAKkt344UGqxY4ek24fkcLOIIOleMk4uy90q+749kqz/W0BDaxlu MErYTa6WYFCwvLzs3quUtARKP73ntj/Dy75VHh5Hpx4/KJMVqOUzXjjMH0NhyoXX3kd8 ACtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747946141; x=1748550941; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VtEdIrem9+Yu9wt2wQL5f6sWXSENwBasckRwFklDCAs=; b=B+8et83MVd/+P56JDCUmUTpfR4u5NCnmAQ8T0PeS5wL2Gx2TJF6bKiTc8YIoKaHXIo 9jMANJImiWo7YMM8oypi69Mxa7gAW9piJcqkGrZ328lMfiI7btIBtZfo2t3neO8dLsyn 4r+e/+jovBRHPmZPJT6E/DiiBCvTyEihS2kskz8/6rBFCcpkzV5wamb5jBZVpb6w0GNQ yaCZdDmOkT1SEuJKUVY0JSFW36uZyoqGdrjlaI2ON9DB0oGPx+dq+khfJhEl9cIjXuyz W64ZERmJQ4daQ+HQQa8qnQ7pNmsMN4LoZAdZc7ytSDbPkByaATA2g6JyFW7f0v8M4/HQ ZIOA== X-Forwarded-Encrypted: i=1; AJvYcCUKWUt7BGvvHV05mL2muzYJ17S5zctRiDOWDLIl4jAjFm2s68JgLtF6ux36+Aqn1q9Wj/mj9pkJ0rFw4pc=@vger.kernel.org X-Gm-Message-State: AOJu0YwKmpXtUGoZCJlBc95s+ALS+Rl+51AN5X41LOmhRMcgW7bKIhz/ 3IbP/LsQLhtXq2WuS31k0d4uwqpoFiIsiQsmo+qJUgBMsKj5sVTQuMcDl4DHTmESc9jusrH6F3K 5W3/D X-Gm-Gg: ASbGncsGuRC83soETn/ffEYPmH7d9e7JGZnO1tTRQT6c8slnozYijaJlIWLKBXTHKgH MbHBX8wrPz/3EO1TpysNIGpOWFjCyg315GquYLBpddruYsR07GpxwvBD0/5yig+/qsPRZEEcF9E w7keMbx6nLA62EyYT/UkOji1NTYBUMpBkEGqGG87Hs74FbaxIKSFQpZK3hl+88zYONT2s08pASL h8B0nYz/7mtp1ZA3UtQ+nPfamre5q6G8iOFVcPhhk5ffKDWDZ4KK7dXQ85u5oPf8chM1Z6KcSZS l3kkUnCV0L3sKKJ0J/ktOE/GKh19ua5XoItHizAKDb86STOEPSGvONmNk4TDDGy4 X-Google-Smtp-Source: AGHT+IGqDOgucStiU9mIVygqIjkW9gQFkzXHNqcolrSvYh0x1SWTXJ0keMr/XGvbvYLot1jB1dLQqg== X-Received: by 2002:a17:90b:3dc7:b0:310:8d73:d9d9 with SMTP id 98e67ed59e1d1-3108d73da51mr15859023a91.18.1747946141494; Thu, 22 May 2025 13:35:41 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f365b229csm5932754a91.10.2025.05.22.13.35.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 May 2025 13:35:41 -0700 (PDT) From: Atish Patra Date: Thu, 22 May 2025 13:35:29 -0700 Subject: [PATCH v2 5/5] RISC-V: KVM: Remove the boot time enabling of hstateen bits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250522-kvm_lazy_enable_stateen-v2-5-b7a84991f1c4@rivosinc.com> References: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> In-Reply-To: <20250522-kvm_lazy_enable_stateen-v2-0-b7a84991f1c4@rivosinc.com> To: Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti Cc: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Atish Patra X-Mailer: b4 0.15-dev-42535 All the existing hstateen bits can be enabled at runtime upon first access now. Remove the default enabling at bootime now. Signed-off-by: Atish Patra --- arch/riscv/kvm/vcpu.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 02635bac91f1..aa8f7f67646a 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -562,16 +562,6 @@ static void kvm_riscv_vcpu_setup_config(struct kvm_vcp= u *vcpu) !riscv_isa_extension_available(isa, SVADE)) cfg->henvcfg |=3D ENVCFG_ADUE; =20 - if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SMSTATEEN)) { - cfg->hstateen0 |=3D SMSTATEEN0_HSENVCFG; - if (riscv_isa_extension_available(isa, SSAIA)) - cfg->hstateen0 |=3D SMSTATEEN0_AIA_IMSIC | - SMSTATEEN0_AIA | - SMSTATEEN0_AIA_ISEL; - if (riscv_isa_extension_available(isa, SMSTATEEN)) - cfg->hstateen0 |=3D SMSTATEEN0_SSTATEEN0; - } - cfg->hedeleg =3D KVM_HEDELEG_DEFAULT; if (vcpu->guest_debug) cfg->hedeleg &=3D ~BIT(EXC_BREAKPOINT); --=20 2.43.0