From patchwork Thu Apr 3 11:25:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= X-Patchwork-Id: 14037364 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9B84DC3601B for ; Thu, 3 Apr 2025 11:37:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=G+zU3xj7rvr1knI18bvlMD0DmgevNz+Gni5vYnr4y+A=; b=f+vr7GuzSSoyI6 ucB753gWO1IydmCrrkGaiZNH/+zgpGj1PTOx1vnNLZYwwYi0vCLiv7rXqqyqP4k9/Lt7svAzZxEsS hhcFju/8xAR7ueBvC8H7sereebZGCsqmwrhfuwuItZ1FiqQV5CSpNqAdnKPwQqPp6VdMz4iPwuwnZ J9AYOZRqxamTpxzMDwnhdFISPdQbepZfqP7CB6gRTTfHVqWzIky+pJ7H3ULF3VIy+71lWlkvIzHfF vvm0tBwcqF199kwfFLMWmIrYMdUkE44KyrFe9DJaEsT06NgDivqAH+xkDJHu2weevRncfQ1HZzepY MafirCpP8WanpP8FcBZg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0ItC-00000008jRc-0ocF; Thu, 03 Apr 2025 11:37:42 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by bombadil.infradead.org with esmtps (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0Int-00000008iRY-3pv2 for linux-riscv@lists.infradead.org; Thu, 03 Apr 2025 11:32:15 +0000 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-3978ef9a778so63420f8f.0 for ; Thu, 03 Apr 2025 04:32:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1743679932; x=1744284732; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M+bBWXikjKTcV8ccgilNOkXVbdx4GamWUb2bvML3ssQ=; b=ELm21eeUys2t2LQKRh+jVvqI9OmFG8T0IrmcVWPC3AOpo6B3suoQb7Sry5Fbg8MhvW +hundhwJce9BUmc/A6ABgNa4m0XTA1l24SVdAzjVu/Skw54Q/l1aI9nRCyzg/W9xefw9 +2CGc0/0BqAbIwuw60dMvNMiOiOTh4mnxdXC6j75z+3YgNFOhAQXkMbDV12PYFX/SDhr 7mypLBPGV85mANN8sbxRsPWWYWbKmPoZVYyrgRhxD4qMsLiFdm4K/aoz07kTdpuBLLya r+2cln5Myn6q0FFW0XwDD1XeZErdhRbHw4CU2hzNTQV+x+1qCnMnx0J0cshwavfUpU04 fC9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743679932; x=1744284732; 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=M+bBWXikjKTcV8ccgilNOkXVbdx4GamWUb2bvML3ssQ=; b=gzfkuuEKQDZzejxFxYenhUmlHssTH6hvl/JikjY10OaSb4+d3XQ1VunzTUzSQag9h6 Fk8Ri0bTw+AtUMi+1SeTjhV9lluKQUrZPnA8SlqFApM3MqKVyr4qTWstNRSoWtHTujXL SfCjYuQmpS0rDDrQAbomtVhTZOTVDklfXSpD18+AxsUuHyhVApwymQVqyEShr5TuO4TF gmWrvDuzP+QoqLZhnH29wCTZaSh7CZmOPEDdSYwerHExbiWLyQINt3L+ZTJTVmKZKKWg /COSqSyTYCJDw4w0gyoAVIbmMspUg6DU9SgYLfgBjgKUg6ApVxhlmH9tLkERWg+1cteR me3w== X-Forwarded-Encrypted: i=1; AJvYcCXzmXbrIgNcwn5KpiuQA+OI89tu7aRoBmvLKPm+0GR4Ppgh5oIcTGhJrroLNQb4auwZJ8HDEgVqfnz/eA==@lists.infradead.org X-Gm-Message-State: AOJu0YyB35vHMyeAkAlreLRAfL6Ar6EjEaVIcKaPnrLLYfr4r+zue9DZ dF3++CRbFKLjumKrcRoV02VRANFEyM5v8r3dAFglCZRlVoFpfm2uNSXQr+yG/yg= X-Gm-Gg: ASbGncsl/n7V9B3EipU0vRiPPZKgNxBJ9QsJB3Cee7L6TSLnw/VYKJHihB4E1M9NW4I MBb5hWCPwzHwLN3t6Q78TJ6ZlsfBwNjHLydxlXvxPEmQkzJ2YNMbJ5TKiJMJIgBWzXqXD0oHzyz TACYMRk7VFut54RSn9qPu/uerbY95opBAPkbc2UONlROTmXzdoJfmSg0EzIvxMUeVgf3a6l9Osa RSd4/OR6+vMGo1XRPyuBHSiHOShm7Xep9tv2r928lkbpxWGGnE6Lyaf5D7IrVzD+5RGXNxh23dU ob+7AeT59Zb3uvWnmVYilwFZ+oCNxH4bwfT5F52lhqv8XejIRa514/U/ZwNXcbeOlcfL+0d8EzU VYg== X-Google-Smtp-Source: AGHT+IFKuI/VQYzBaPbrBORZ5Fz1t5HIbnJ+TER1Sbfneisom4goMlCFQ2arAW6gwbRupN7/O0Rx8w== X-Received: by 2002:a05:6000:144a:b0:391:29ab:c9df with SMTP id ffacd0b85a97d-39c2470802cmr3357803f8f.4.1743679932289; Thu, 03 Apr 2025 04:32:12 -0700 (PDT) Received: from localhost (cst2-173-141.cust.vodafone.cz. [31.30.173.141]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec366a699sm15541695e9.38.2025.04.03.04.32.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Apr 2025 04:32:11 -0700 (PDT) From: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= To: kvm-riscv@lists.infradead.org Cc: kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Andrew Jones , Mayuresh Chitale Subject: [PATCH 1/5] KVM: RISC-V: refactor vector state reset Date: Thu, 3 Apr 2025 13:25:20 +0200 Message-ID: <20250403112522.1566629-4-rkrcmar@ventanamicro.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> References: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250403_043213_978618_C5E8267F X-CRM114-Status: GOOD ( 13.62 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Do not depend on the reset structures. vector.datap is a kernel memory pointer that needs to be preserved as it is not a part of the guest vector data. Signed-off-by: Radim Krčmář --- arch/riscv/include/asm/kvm_vcpu_vector.h | 6 ++---- arch/riscv/kvm/vcpu.c | 5 ++++- arch/riscv/kvm/vcpu_vector.c | 13 +++++++------ 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_vector.h b/arch/riscv/include/asm/kvm_vcpu_vector.h index 27f5bccdd8b0..57a798a4cb0d 100644 --- a/arch/riscv/include/asm/kvm_vcpu_vector.h +++ b/arch/riscv/include/asm/kvm_vcpu_vector.h @@ -33,8 +33,7 @@ void kvm_riscv_vcpu_guest_vector_restore(struct kvm_cpu_context *cntx, unsigned long *isa); void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx); void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx); -int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu, - struct kvm_cpu_context *cntx); +int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu); void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu); #else @@ -62,8 +61,7 @@ static inline void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cn { } -static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu, - struct kvm_cpu_context *cntx) +static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu) { return 0; } diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 60d684c76c58..2fb75288ecfe 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -57,6 +57,7 @@ static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) struct kvm_vcpu_csr *reset_csr = &vcpu->arch.guest_reset_csr; struct kvm_cpu_context *cntx = &vcpu->arch.guest_context; struct kvm_cpu_context *reset_cntx = &vcpu->arch.guest_reset_context; + void *vector_datap = cntx->vector.datap; bool loaded; /** @@ -79,6 +80,8 @@ static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) kvm_riscv_vcpu_fp_reset(vcpu); + /* Restore datap as it's not a part of the guest context. */ + cntx->vector.datap = vector_datap; kvm_riscv_vcpu_vector_reset(vcpu); kvm_riscv_vcpu_timer_reset(vcpu); @@ -143,7 +146,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) cntx->hstatus |= HSTATUS_SPV; spin_unlock(&vcpu->arch.reset_cntx_lock); - if (kvm_riscv_vcpu_alloc_vector_context(vcpu, cntx)) + if (kvm_riscv_vcpu_alloc_vector_context(vcpu)) return -ENOMEM; /* By default, make CY, TM, and IR counters accessible in VU mode */ diff --git a/arch/riscv/kvm/vcpu_vector.c b/arch/riscv/kvm/vcpu_vector.c index d92d1348045c..a5f88cb717f3 100644 --- a/arch/riscv/kvm/vcpu_vector.c +++ b/arch/riscv/kvm/vcpu_vector.c @@ -22,6 +22,9 @@ void kvm_riscv_vcpu_vector_reset(struct kvm_vcpu *vcpu) struct kvm_cpu_context *cntx = &vcpu->arch.guest_context; cntx->sstatus &= ~SR_VS; + + cntx->vector.vlenb = riscv_v_vsize / 32; + if (riscv_isa_extension_available(isa, v)) { cntx->sstatus |= SR_VS_INITIAL; WARN_ON(!cntx->vector.datap); @@ -70,13 +73,11 @@ void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx) __kvm_riscv_vector_restore(cntx); } -int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu, - struct kvm_cpu_context *cntx) +int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu) { - cntx->vector.datap = kmalloc(riscv_v_vsize, GFP_KERNEL); - if (!cntx->vector.datap) + vcpu->arch.guest_context.vector.datap = kzalloc(riscv_v_vsize, GFP_KERNEL); + if (!vcpu->arch.guest_context.vector.datap) return -ENOMEM; - cntx->vector.vlenb = riscv_v_vsize / 32; vcpu->arch.host_context.vector.datap = kzalloc(riscv_v_vsize, GFP_KERNEL); if (!vcpu->arch.host_context.vector.datap) @@ -87,7 +88,7 @@ int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu, void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu) { - kfree(vcpu->arch.guest_reset_context.vector.datap); + kfree(vcpu->arch.guest_context.vector.datap); kfree(vcpu->arch.host_context.vector.datap); } #endif From patchwork Thu Apr 3 11:25:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= X-Patchwork-Id: 14037359 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 63C93C3601B for ; Thu, 3 Apr 2025 11:37:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7JFnsE+4CTYQB4f4Re0xToxd/NH5J14kF+P5DVAiUTg=; b=I2mECLjRR1GECo lPqNP03GnOdc2JfQ3nHcaxBqffxT2wgDqYFw+qazkzOKedZiYwgFq/OVTKeN9bL/6ZHduAqWQfd7k YkawxzFdnjKzw2UXAmvoYEcHTWrarOvNY/hzVyR6UYeEhFV24/K4reNaklw839q4g/mwQA2DYCGld OKhkBFajABHQ+9ehDcdlomjx2OBgkBJHNofMV2+z1erESgnviMeX/oIWgSrnPDpz6us8KvRmH5Fev TpHNnuyTsWBDqoZAcLleli/JnkUJwjvFc4+frJn2ocg644U3iDcYt/GVIc7MBwFcrYhPyfIvN2lLp zYejbUJLjq0JFZJhQf5Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0ItD-00000008jSc-0ltp; Thu, 03 Apr 2025 11:37:43 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0Inu-00000008iSH-3iLW for linux-riscv@lists.infradead.org; Thu, 03 Apr 2025 11:32:16 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43cf825f46bso734735e9.3 for ; Thu, 03 Apr 2025 04:32:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1743679933; x=1744284733; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WBJFdG3z/8VkLDYY4XL1oPtAwDow6ej1t0aXVg/kRKM=; b=AAyw2tVPqvFvGlKZdvzvF7zb86fc9q1PamjOVMCJtS5uccYwOEQntUxPrHm1VUwW53 d9Y7YsNq2vsx9PwqqjetBx+OwEylvn7RhBc3faQ0LObUfThqGODvxlnHicvPuEmGmuUY PHibHzjITS2EQvryndq8CbXPLUEpu2ckO4Y7l0PXpdCP7FYwxXqBvdxhB6z38gO05bIf 1twx4TlJJwA/GfVI3JD41isEGhxIDmuUEid9xuL2aEcsc8eYnqpMe0fRPZ+tuSZJUT1F Nmw5VaOprnmNO7/DdQi/Bgy54Hs5FLqQHVNfqKzJ5DUEWD+cXQQO6k57KU90VOrc77+q tHJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743679933; x=1744284733; 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=WBJFdG3z/8VkLDYY4XL1oPtAwDow6ej1t0aXVg/kRKM=; b=bWlKoT9uxXbgy3dj+OsjfJV3Nwevyk90txBBCljW3CxOr93HiNgRcC9YI1zXxYWM59 5XlIRqUfctw4E7OvPLrZ4sdWaffh91U0koU2L9xQ4mxlDIG0g4gGMQeN0GaeX/m2Bepk 5lrOhMqswNjVJt0MrXsvAudMeKQPBPm18Lsi+SuX+trqy3yDgJqX4rkVSzCIBt3AWMWY Y1htaY7zcMolXEu29dU3tZ4GY68uPQakJxoOEElL9Y0UD6xOdz9J5vFKNLxfNBLxm2a0 a1mVXKkbyMJmbUXnETfuwA/vo5Xo2dTZywaZDEi5Mxh8D69vNyPT4UM+OdxpAuuhocfQ EtZA== X-Forwarded-Encrypted: i=1; AJvYcCWADaPNNF+cBTTKcAF7ItRRIUJNlmGAwkONsBWi2dVlU4YaPOMgMDaLJQQ7JRRbLa69IdRz+khUBSjqgA==@lists.infradead.org X-Gm-Message-State: AOJu0Yw51W39yGykxjx/w04iCoIAZA3fKPVlWV1KLFhK2xGlYLWXjmQt Xcxx8UAEa8t8C2WGArYhXq/2sNwG4um2pfTfc9iSkPzaJr1fxyBGcqCDh6ht4L4= X-Gm-Gg: ASbGncvBULcuPT15Jo2EGflKQE3IU7YQ+DdIlwQyZjvzgYwpd75zJ1DMrb8apHKHgNt Q2wyGQPWFcR4FGgknLY+OhcVAVPMNG45nVAMeqR0zF/FI5+0oyZyAqfJKuBKWYQokBcGp0jczBX yS/yD3ecOjO/qodznqO+G1+vO87q3It/Rag8GjwjvngrbNVAAIjumVDTjD/AyMQzPVGFpnWr+fw IjkptrVU1C/dl+d2fxx5cm0uWw91qz2cZtKwNQrDujokJ4hE4lqB8EZzovgDy/8yt+XzaAUIYFm +z/TccXr08SnNoWquFegzu2LQ6IzbWYKA+pXgA9HBfHh+iSEOWEbZ/ZRxXd3O6aqmbNBSqcWevM nVQ== X-Google-Smtp-Source: AGHT+IEmT1nc0GRaKk4V5Lw6Y+h94knU+oKxuBtmIqWaoagUJp23E2laTFWN8HrLfDImIKVCRKrM7g== X-Received: by 2002:a05:600c:3510:b0:43b:c825:6cde with SMTP id 5b1f17b1804b1-43ea93540demr38321015e9.3.1743679933409; Thu, 03 Apr 2025 04:32:13 -0700 (PDT) Received: from localhost (cst2-173-141.cust.vodafone.cz. [31.30.173.141]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec3429f67sm16500145e9.7.2025.04.03.04.32.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Apr 2025 04:32:13 -0700 (PDT) From: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= To: kvm-riscv@lists.infradead.org Cc: kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Andrew Jones , Mayuresh Chitale Subject: [PATCH 2/5] KVM: RISC-V: refactor sbi reset request Date: Thu, 3 Apr 2025 13:25:21 +0200 Message-ID: <20250403112522.1566629-5-rkrcmar@ventanamicro.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> References: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250403_043214_948677_7E7ED0DA X-CRM114-Status: GOOD ( 12.26 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org The same code is used twice and SBI reset sets only two variables. Signed-off-by: Radim Krčmář --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 ++ arch/riscv/kvm/vcpu_sbi.c | 12 ++++++++++++ arch/riscv/kvm/vcpu_sbi_hsm.c | 13 +------------ arch/riscv/kvm/vcpu_sbi_system.c | 10 +--------- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index 4ed6203cdd30..aaaa81355276 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -55,6 +55,8 @@ void kvm_riscv_vcpu_sbi_forward(struct kvm_vcpu *vcpu, struct kvm_run *run); void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu, struct kvm_run *run, u32 type, u64 flags); +void kvm_riscv_vcpu_sbi_request_reset(struct kvm_vcpu *vcpu, + unsigned long pc, unsigned long a1); int kvm_riscv_vcpu_sbi_return(struct kvm_vcpu *vcpu, struct kvm_run *run); int kvm_riscv_vcpu_set_reg_sbi_ext(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index d1c83a77735e..f58368f7df1d 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -156,6 +156,18 @@ void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu, run->exit_reason = KVM_EXIT_SYSTEM_EVENT; } +void kvm_riscv_vcpu_sbi_request_reset(struct kvm_vcpu *vcpu, + unsigned long pc, unsigned long a1) +{ + spin_lock(&vcpu->arch.reset_cntx_lock); + vcpu->arch.guest_reset_context.sepc = pc; + vcpu->arch.guest_reset_context.a0 = vcpu->vcpu_id; + vcpu->arch.guest_reset_context.a1 = a1; + spin_unlock(&vcpu->arch.reset_cntx_lock); + + kvm_make_request(KVM_REQ_VCPU_RESET, vcpu); +} + int kvm_riscv_vcpu_sbi_return(struct kvm_vcpu *vcpu, struct kvm_run *run) { struct kvm_cpu_context *cp = &vcpu->arch.guest_context; diff --git a/arch/riscv/kvm/vcpu_sbi_hsm.c b/arch/riscv/kvm/vcpu_sbi_hsm.c index 3070bb31745d..f26207f84bab 100644 --- a/arch/riscv/kvm/vcpu_sbi_hsm.c +++ b/arch/riscv/kvm/vcpu_sbi_hsm.c @@ -15,7 +15,6 @@ static int kvm_sbi_hsm_vcpu_start(struct kvm_vcpu *vcpu) { - struct kvm_cpu_context *reset_cntx; struct kvm_cpu_context *cp = &vcpu->arch.guest_context; struct kvm_vcpu *target_vcpu; unsigned long target_vcpuid = cp->a0; @@ -32,17 +31,7 @@ static int kvm_sbi_hsm_vcpu_start(struct kvm_vcpu *vcpu) goto out; } - spin_lock(&target_vcpu->arch.reset_cntx_lock); - reset_cntx = &target_vcpu->arch.guest_reset_context; - /* start address */ - reset_cntx->sepc = cp->a1; - /* target vcpu id to start */ - reset_cntx->a0 = target_vcpuid; - /* private data passed from kernel */ - reset_cntx->a1 = cp->a2; - spin_unlock(&target_vcpu->arch.reset_cntx_lock); - - kvm_make_request(KVM_REQ_VCPU_RESET, target_vcpu); + kvm_riscv_vcpu_sbi_request_reset(target_vcpu, cp->a1, cp->a2); __kvm_riscv_vcpu_power_on(target_vcpu); diff --git a/arch/riscv/kvm/vcpu_sbi_system.c b/arch/riscv/kvm/vcpu_sbi_system.c index bc0ebba89003..359be90b0fc5 100644 --- a/arch/riscv/kvm/vcpu_sbi_system.c +++ b/arch/riscv/kvm/vcpu_sbi_system.c @@ -13,7 +13,6 @@ static int kvm_sbi_ext_susp_handler(struct kvm_vcpu *vcpu, struct kvm_run *run, struct kvm_vcpu_sbi_return *retdata) { struct kvm_cpu_context *cp = &vcpu->arch.guest_context; - struct kvm_cpu_context *reset_cntx; unsigned long funcid = cp->a6; unsigned long hva, i; struct kvm_vcpu *tmp; @@ -45,14 +44,7 @@ static int kvm_sbi_ext_susp_handler(struct kvm_vcpu *vcpu, struct kvm_run *run, } } - spin_lock(&vcpu->arch.reset_cntx_lock); - reset_cntx = &vcpu->arch.guest_reset_context; - reset_cntx->sepc = cp->a1; - reset_cntx->a0 = vcpu->vcpu_id; - reset_cntx->a1 = cp->a2; - spin_unlock(&vcpu->arch.reset_cntx_lock); - - kvm_make_request(KVM_REQ_VCPU_RESET, vcpu); + kvm_riscv_vcpu_sbi_request_reset(vcpu, cp->a1, cp->a2); /* userspace provides the suspend implementation */ kvm_riscv_vcpu_sbi_forward(vcpu, run); From patchwork Thu Apr 3 11:25:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= X-Patchwork-Id: 14037361 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 64386C3601E for ; Thu, 3 Apr 2025 11:37:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=X41Pth+X3BBNGaFhxr98+P1s+xgWOidFP1sR/9hd1lU=; b=DDyun0jru6g7rd dhpBNLET1C72RcKhBFAXRGr4THg4Xt1GPUPbW/Bsz4kF9FU1BDyw/R4/h0ZdgandA+xxiCvPx5fry wadVnI1Bygjl8bAHN/r+p8qlW5BMEG557bIMKP0DsnIyObHKd59GfQw7E/3HcgDRRt+6f26PezFI5 RTFeD/C6s2dnqSId47c41kregAOWVBeU6LW59NYgL6j/aKWne94VEYdsCF4jIAVx+w4jDN3+yDUnq E3UI990x3rU+8hjV1tsQHNK+pYslZgI0b3XMujUNZAM63Tos3QgUDMXf+l8YwrMrPiHxXX8aKQUVK htMyGcF2nXJyVuR4ZFlQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0ItE-00000008jTQ-1fdi; Thu, 03 Apr 2025 11:37:44 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0Inv-00000008iT3-2xML for linux-riscv@lists.infradead.org; Thu, 03 Apr 2025 11:32:16 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43935d1321aso958805e9.1 for ; Thu, 03 Apr 2025 04:32:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1743679934; x=1744284734; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oXWumzDe9cV0GiyZzQ4x/1N6jIE102NsKwOmEpuNc8U=; b=ZLf4cmeT8nTxYZgM6WXvn4Bl0n2JP0bbhwB7b+1oWFrSYrSDVxSMe9e6B1RALnmU4T ihCamACIwk8hIo1ueYSr9vpIEUN+jPu00/NYJDDkUJUTz3sRzPwezD7QSweH83EBLrZh 1aomNqYVakQUUuHp8F4904sd/gCUbydGFMjhg6PvvR4Cp+wE6NB1+mjWRD6F8YEXePnc /6tYUy4dHAtEXXXD8YtRaAt5y7U9cIYexpb4073L3jKmdijt8Q9G6WNfc/l1vZWMr4V0 np61LONhu+mWFb+YtFepZo81xaxWQ3/bvemH0kgj7vY8HBPpKMXh6GciMN3U0MRcY7zh IaEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743679934; x=1744284734; 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=oXWumzDe9cV0GiyZzQ4x/1N6jIE102NsKwOmEpuNc8U=; b=QYASpef4AkX0iIWrpsYAKnbFbShtFKBRpTcCO4IcxL4PiscRigm8gsw2w5xMjXfcjN d8es2IxO6JkRektVpwmJE3/wyAXVle8lbjQBO1hGNIMI7b6kkXeDmD4sW1eF+WHbfYi6 236WwQqgXfQeBOfm73zfxDZAS41VXIOK5Rh/+hc6OvHEft5KDirgdFTsE1OQ8OjKG0V5 uaC4RoRN5OWqjmlRuW1r/e7wgd1RU+fz5JaeYLVI5KQ/C64Zc1L+bPH8qpj9QJ9bjKoo NdBblt17WkcACCluX/doV2zjcuQAhJ4vmV7AKzpRtGU0gBpzGIoj9LQtF2dt6HvBuBbt YPcA== X-Forwarded-Encrypted: i=1; AJvYcCXskpvPz4TYTP5OjBBtKMCqcNCGiBZxyJDthZEAm/hhed7LzRaRzSCgAvpsVQQeSsxsobX1VKtU3E1k4w==@lists.infradead.org X-Gm-Message-State: AOJu0YzaxEc44kM2Dwbi6AW75O1P3YCCPGgST2rQo4U7LzAmwo9toFYH 1rQH0IX1ZRJdXcOgbChRXKKRj18Wq3i6XuSa7CUYEcnGz4WWUa8hJD7sklKBAf8= X-Gm-Gg: ASbGnctmJlVWuazIvGYC/BY+KWLD6rEIn62PInRDTRgCVWQecdVa4SLgdk3kfw/1xa+ 8hxnCPt1T989R1TO8LWU1pY1owBg6GJI/u/tWvzOQD7JC/IHvGCx2s52cS2L2y2s1AgN0BhRLIF jT4agQbiVmg0RQZu/pg9RygUODmuy8k3S0ScG5nrqlpmFRYm/qdPPNKLC1mvPILeiZZtn6E08Xz dshFuGfX/3ADwqY9IVrOjhjhBtPHXVz9KAJkPanhiWabv1KArmSvnkqRXbp0FIT9KjDNgJj9MZF r/gc5nmoLp+bT4IaIBRkrAfykTK1ycBYRR0pHJhzMjxtRfII6ugCdFF7M3SU+rDwP9N3JldQB+R lnQ== X-Google-Smtp-Source: AGHT+IGYZA79TpGdD3IyE6RBBx1HPlO32wDC9YCrigfm8LcUPmDgc+MGuI/dN03f02oGXug0YpJyDw== X-Received: by 2002:a5d:5f8d:0:b0:386:3a50:8c52 with SMTP id ffacd0b85a97d-39c2470a9a8mr3130677f8f.7.1743679934361; Thu, 03 Apr 2025 04:32:14 -0700 (PDT) Received: from localhost (cst2-173-141.cust.vodafone.cz. [31.30.173.141]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39c301a7045sm1584106f8f.39.2025.04.03.04.32.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Apr 2025 04:32:14 -0700 (PDT) From: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= To: kvm-riscv@lists.infradead.org Cc: kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Andrew Jones , Mayuresh Chitale Subject: [PATCH 3/5] KVM: RISC-V: remove unnecessary SBI reset state Date: Thu, 3 Apr 2025 13:25:22 +0200 Message-ID: <20250403112522.1566629-6-rkrcmar@ventanamicro.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> References: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250403_043215_760499_DF9F8DD2 X-CRM114-Status: GOOD ( 19.68 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org The SBI reset state has only two variables -- pc and a1. The rest is known, so keep only the necessary information. The reset structures make sense if we want userspace to control the reset state (which we do), but I'd still remove them now and reintroduce with the userspace interface later -- we could probably have just a single reset state per VM, instead of a reset state for each VCPU. Signed-off-by: Radim Krčmář --- arch/riscv/include/asm/kvm_aia.h | 3 -- arch/riscv/include/asm/kvm_host.h | 12 ++++--- arch/riscv/kvm/aia_device.c | 4 +-- arch/riscv/kvm/vcpu.c | 58 +++++++++++++++++-------------- arch/riscv/kvm/vcpu_sbi.c | 9 +++-- 5 files changed, 44 insertions(+), 42 deletions(-) diff --git a/arch/riscv/include/asm/kvm_aia.h b/arch/riscv/include/asm/kvm_aia.h index 1f37b600ca47..3b643b9efc07 100644 --- a/arch/riscv/include/asm/kvm_aia.h +++ b/arch/riscv/include/asm/kvm_aia.h @@ -63,9 +63,6 @@ struct kvm_vcpu_aia { /* CPU AIA CSR context of Guest VCPU */ struct kvm_vcpu_aia_csr guest_csr; - /* CPU AIA CSR context upon Guest VCPU reset */ - struct kvm_vcpu_aia_csr guest_reset_csr; - /* Guest physical address of IMSIC for this VCPU */ gpa_t imsic_addr; diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h index 0e9c2fab6378..0c8c9c05af91 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -193,6 +193,12 @@ struct kvm_vcpu_smstateen_csr { unsigned long sstateen0; }; +struct kvm_vcpu_reset_state { + spinlock_t lock; + unsigned long pc; + unsigned long a1; +}; + struct kvm_vcpu_arch { /* VCPU ran at least once */ bool ran_atleast_once; @@ -227,12 +233,8 @@ struct kvm_vcpu_arch { /* CPU Smstateen CSR context of Guest VCPU */ struct kvm_vcpu_smstateen_csr smstateen_csr; - /* CPU context upon Guest VCPU reset */ - struct kvm_cpu_context guest_reset_context; - spinlock_t reset_cntx_lock; + struct kvm_vcpu_reset_state reset_state; - /* CPU CSR context upon Guest VCPU reset */ - struct kvm_vcpu_csr guest_reset_csr; /* * VCPU interrupts diff --git a/arch/riscv/kvm/aia_device.c b/arch/riscv/kvm/aia_device.c index 39cd26af5a69..43e472ff3e1a 100644 --- a/arch/riscv/kvm/aia_device.c +++ b/arch/riscv/kvm/aia_device.c @@ -526,12 +526,10 @@ int kvm_riscv_vcpu_aia_update(struct kvm_vcpu *vcpu) void kvm_riscv_vcpu_aia_reset(struct kvm_vcpu *vcpu) { struct kvm_vcpu_aia_csr *csr = &vcpu->arch.aia_context.guest_csr; - struct kvm_vcpu_aia_csr *reset_csr = - &vcpu->arch.aia_context.guest_reset_csr; if (!kvm_riscv_aia_available()) return; - memcpy(csr, reset_csr, sizeof(*csr)); + memset(csr, 0, sizeof(*csr)); /* Proceed only if AIA was initialized successfully */ if (!kvm_riscv_aia_initialized(vcpu->kvm)) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 2fb75288ecfe..b8485c1c1ce4 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -51,13 +51,40 @@ const struct kvm_stats_header kvm_vcpu_stats_header = { sizeof(kvm_vcpu_stats_desc), }; -static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) +static void kvm_riscv_vcpu_context_reset(struct kvm_vcpu *vcpu) { struct kvm_vcpu_csr *csr = &vcpu->arch.guest_csr; - struct kvm_vcpu_csr *reset_csr = &vcpu->arch.guest_reset_csr; struct kvm_cpu_context *cntx = &vcpu->arch.guest_context; - struct kvm_cpu_context *reset_cntx = &vcpu->arch.guest_reset_context; + struct kvm_vcpu_reset_state *reset_state = &vcpu->arch.reset_state; void *vector_datap = cntx->vector.datap; + + memset(cntx, 0, sizeof(*cntx)); + memset(csr, 0, sizeof(*csr)); + + /* Restore datap as it's not a part of the guest context. */ + cntx->vector.datap = vector_datap; + + /* Load SBI reset values */ + cntx->a0 = vcpu->vcpu_id; + + spin_lock(&reset_state->lock); + cntx->sepc = reset_state->pc; + cntx->a1 = reset_state->a1; + spin_unlock(&reset_state->lock); + + /* Setup reset state of shadow SSTATUS and HSTATUS CSRs */ + cntx->sstatus = SR_SPP | SR_SPIE; + + cntx->hstatus |= HSTATUS_VTW; + cntx->hstatus |= HSTATUS_SPVP; + cntx->hstatus |= HSTATUS_SPV; + + /* By default, make CY, TM, and IR counters accessible in VU mode */ + csr->scounteren = 0x7; +} + +static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) +{ bool loaded; /** @@ -72,16 +99,10 @@ static void kvm_riscv_reset_vcpu(struct kvm_vcpu *vcpu) vcpu->arch.last_exit_cpu = -1; - memcpy(csr, reset_csr, sizeof(*csr)); - - spin_lock(&vcpu->arch.reset_cntx_lock); - memcpy(cntx, reset_cntx, sizeof(*cntx)); - spin_unlock(&vcpu->arch.reset_cntx_lock); + kvm_riscv_vcpu_context_reset(vcpu); kvm_riscv_vcpu_fp_reset(vcpu); - /* Restore datap as it's not a part of the guest context. */ - cntx->vector.datap = vector_datap; kvm_riscv_vcpu_vector_reset(vcpu); kvm_riscv_vcpu_timer_reset(vcpu); @@ -113,8 +134,6 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id) int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) { int rc; - struct kvm_cpu_context *cntx; - struct kvm_vcpu_csr *reset_csr = &vcpu->arch.guest_reset_csr; spin_lock_init(&vcpu->arch.mp_state_lock); @@ -134,24 +153,11 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) /* Setup VCPU hfence queue */ spin_lock_init(&vcpu->arch.hfence_lock); - /* Setup reset state of shadow SSTATUS and HSTATUS CSRs */ - spin_lock_init(&vcpu->arch.reset_cntx_lock); - - spin_lock(&vcpu->arch.reset_cntx_lock); - cntx = &vcpu->arch.guest_reset_context; - cntx->sstatus = SR_SPP | SR_SPIE; - cntx->hstatus = 0; - cntx->hstatus |= HSTATUS_VTW; - cntx->hstatus |= HSTATUS_SPVP; - cntx->hstatus |= HSTATUS_SPV; - spin_unlock(&vcpu->arch.reset_cntx_lock); + spin_lock_init(&vcpu->arch.reset_state.lock); if (kvm_riscv_vcpu_alloc_vector_context(vcpu)) return -ENOMEM; - /* By default, make CY, TM, and IR counters accessible in VU mode */ - reset_csr->scounteren = 0x7; - /* Setup VCPU timer */ kvm_riscv_vcpu_timer_init(vcpu); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index f58368f7df1d..3d7955e05cc3 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -159,11 +159,10 @@ void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu, void kvm_riscv_vcpu_sbi_request_reset(struct kvm_vcpu *vcpu, unsigned long pc, unsigned long a1) { - spin_lock(&vcpu->arch.reset_cntx_lock); - vcpu->arch.guest_reset_context.sepc = pc; - vcpu->arch.guest_reset_context.a0 = vcpu->vcpu_id; - vcpu->arch.guest_reset_context.a1 = a1; - spin_unlock(&vcpu->arch.reset_cntx_lock); + spin_lock(&vcpu->arch.reset_state.lock); + vcpu->arch.reset_state.pc = pc; + vcpu->arch.reset_state.a1 = a1; + spin_unlock(&vcpu->arch.reset_state.lock); kvm_make_request(KVM_REQ_VCPU_RESET, vcpu); } From patchwork Thu Apr 3 11:25:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= X-Patchwork-Id: 14037363 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D47EEC3601B for ; Thu, 3 Apr 2025 11:37:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kspWii5VLxKrVVr7TSNs4pSt7CGKCRplqMnUQCXwQN4=; b=MirJYqVbv8hd3H Q3O4F/bjhHR6Etb6gRdpwTVb2tyS9CJA6xDlUR99LN3hsxI/D07+JRAS4OWbelhzSTzZ9VvDlz1BL PQfoDs0O3ytb2Y+o6hAidY0vAFA5hDewsXeP9AywDotzDSdnyzzyMlHJDaGqyyCxCsTPHUbm4oleN NFe5CGgXjIKtImrut6cdOHXenq0YBCxct5jPqGCt30g6R8pX6mDubB/2xU/uXHGWf8Vxxjg8D6lNE go4QMNzLz3z8usnYkQ4RwRF9LpteKPqaS7pIxXAMEFdXH1IMvec0BYT65Gz0Kyxiu+9MDeX6TSISC uQx8QgOpwuLKLbBWotWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0ItF-00000008jUW-1SqM; Thu, 03 Apr 2025 11:37:45 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by bombadil.infradead.org with esmtps (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0Inx-00000008iU3-1BWz for linux-riscv@lists.infradead.org; Thu, 03 Apr 2025 11:32:18 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3913290f754so61888f8f.1 for ; Thu, 03 Apr 2025 04:32:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1743679936; x=1744284736; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=v4I41IipITScJpjVRL6TprMAJ/XjTheyblDpzSa8c88=; b=V7dXZ0kZLsccQvOxjQ0zUWbkF9RwE9v/jtb/6QJzBy0BO1RAXoMIpqHTSxvhihTO1W YeL8JYGrCSI2SvFGk5V+dC7Y1Q8I5lsB0oQMvPIk2si6bm43RLysSMOuMvUoP3oO6uH0 oIFshU/iY1nNJaiVb3UnT4rdzFFSUIfytvqMPxNsCuJnr8lAslGpknEjBSAoYxMAoWqz ZdUFRYElCbHHHEgoBme0mVEhV5YZ2ZP5Dw5360Xcni6MEi5IUxjaSfgkKERM87pkHFpO EjxpCST9dZ0J7jTeiyQvXW08tvjk3+UC1tMA9t9PgGdb9MyXcmLQdYUOXZahDQOAUdEc WWBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743679936; x=1744284736; 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=v4I41IipITScJpjVRL6TprMAJ/XjTheyblDpzSa8c88=; b=dYoW4BmwYomuUsYQTT0Ubn9HcDLZL4+D3qN7+UNdL9Bzj0VVfg1WBU7m27HgqoO6ZU dWTV9zRGrf2Qmoteq9xe1vx/8LLcf1gqoVDLLgYyhLeu9CTFC+mOUdAzYbtirW/9vJXV lCsUsaZrF5aYBkNH6RL7Nsf9+ojEF5mr/Mjv7TtsfpcXoM7+o9J/kQGBBRCpP8QHcABI JvP0C9TYfnip5X/F7jrthhBH61kFeG5RfNtd3QVMmPaL9/V/lNHnSlrringVWjnuDXs7 dhyEa3Ise920288mFfu0L6k822puDYiZg6lTsV7ia9UXuY/aFLaTA9gTfnHYeHdLoPvS 4qKg== X-Forwarded-Encrypted: i=1; AJvYcCW0bj1a7b/DETOuqOIeCHrGq952HSNe+qsDVvNYS5/kyaaWbf+LcYKTYGqtATXZszkfhGKT5zW/lMT+mg==@lists.infradead.org X-Gm-Message-State: AOJu0YxbH72dxHay/JMU/oC06awpljSW7MUOLqmJKv5ufKMRZuJ4mGoN dIZZJrPqZNoJEnr6abQ3m3F/AllEJbqH/w/d3jRaLMWC/0GMQI6WaJjlvMV8GK0= X-Gm-Gg: ASbGncu7DtEs0dmlbP7k+tF71iwuCAir7Q7RmO71M9EeHdVZOoQxQoPoKNXe45H/EDR ctQSaBiDUtdr9McNINPnNJUmPLJgQc1Q9yLJG4VFe9/nhmHpRVTRegCWyTJ6TJP7WiqGmFX6DQU zUNGFpni7vAlknnlUq6tmX+oErHguQIvQUgFDpzHlqZmb6XGyRbN25jOMX/fjTpqzljb86HW/DQ E0Hv5glEVCYBx0CoA+dXk3mMZp6Ue1nXAT4URNnJJ78Alz08X6I11D9xHcGxkteUVmgoFXDxP3L SGysj4qHIWVM4PiLISlwSw0wpKb+TYJI4YUC9lS8HUNnuI4MIvzJ1OVHpj6Wg1bavWJrzIzJhrT Q4Q== X-Google-Smtp-Source: AGHT+IG37Xf9B62VUcljGsX2nc8emFPUfOIiPgop6kaEA0XU1nktX/EDvfLlLGCqE6Qni7LwKqU1Ng== X-Received: by 2002:a5d:59ad:0:b0:39c:1258:17d5 with SMTP id ffacd0b85a97d-39c2483abcfmr3137958f8f.14.1743679935688; Thu, 03 Apr 2025 04:32:15 -0700 (PDT) Received: from localhost (cst2-173-141.cust.vodafone.cz. [31.30.173.141]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39c3020d6b1sm1575928f8f.62.2025.04.03.04.32.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Apr 2025 04:32:14 -0700 (PDT) From: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= To: kvm-riscv@lists.infradead.org Cc: kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Andrew Jones , Mayuresh Chitale Subject: [PATCH 4/5] KVM: RISC-V: reset VCPU state when becoming runnable Date: Thu, 3 Apr 2025 13:25:23 +0200 Message-ID: <20250403112522.1566629-7-rkrcmar@ventanamicro.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> References: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250403_043217_324932_9658506A X-CRM114-Status: GOOD ( 23.75 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Beware, this patch is "breaking" the userspace interface, because it fixes a KVM/QEMU bug where the boot VCPU is not being reset by KVM. The VCPU reset paths are inconsistent right now. KVM resets VCPUs that are brought up by KVM-accelerated SBI calls, but does nothing for VCPUs brought up through ioctls. We need to perform a KVM reset even when the VCPU is started through an ioctl. This patch is one of the ways we can achieve it. Assume that userspace has no business setting the post-reset state. KVM is de-facto the SBI implementation, as the SBI HSM acceleration cannot be disabled and userspace cannot control the reset state, so KVM should be in full control of the post-reset state. Do not reset the pc and a1 registers, because SBI reset is expected to provide them and KVM has no idea what these registers should be -- only the userspace knows where it put the data. An important consideration is resume. Userspace might want to start with non-reset state. Check ran_atleast_once to allow this, because KVM-SBI HSM creates some VCPUs as STOPPED. The drawback is that userspace can still start the boot VCPU with an incorrect reset state, because there is no way to distinguish a freshly reset new VCPU on the KVM side (userspace might set some values by mistake) from a restored VCPU (userspace must set all values). The advantage of this solution is that it fixes current QEMU and makes some sense with the assumption that KVM implements SBI HSM. I do not like it too much, so I'd be in favor of a different solution if we can still afford to drop support for current userspaces. For a cleaner solution, we should add interfaces to perform the KVM-SBI reset request on userspace demand. I think it would also be much better if userspace was in control of the post-reset state. Signed-off-by: Radim Krčmář --- arch/riscv/include/asm/kvm_host.h | 1 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 3 +++ arch/riscv/kvm/vcpu.c | 9 +++++++++ arch/riscv/kvm/vcpu_sbi.c | 21 +++++++++++++++++++-- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h index 0c8c9c05af91..9bbf8c4a286b 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -195,6 +195,7 @@ struct kvm_vcpu_smstateen_csr { struct kvm_vcpu_reset_state { spinlock_t lock; + bool active; unsigned long pc; unsigned long a1; }; diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index aaaa81355276..2c334a87e02a 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -57,6 +57,9 @@ void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu, u32 type, u64 flags); void kvm_riscv_vcpu_sbi_request_reset(struct kvm_vcpu *vcpu, unsigned long pc, unsigned long a1); +void __kvm_riscv_vcpu_set_reset_state(struct kvm_vcpu *vcpu, + unsigned long pc, unsigned long a1); +void kvm_riscv_vcpu_sbi_request_reset_from_userspace(struct kvm_vcpu *vcpu); int kvm_riscv_vcpu_sbi_return(struct kvm_vcpu *vcpu, struct kvm_run *run); int kvm_riscv_vcpu_set_reg_sbi_ext(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index b8485c1c1ce4..4578863a39e3 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -58,6 +58,11 @@ static void kvm_riscv_vcpu_context_reset(struct kvm_vcpu *vcpu) struct kvm_vcpu_reset_state *reset_state = &vcpu->arch.reset_state; void *vector_datap = cntx->vector.datap; + spin_lock(&reset_state->lock); + if (!reset_state->active) + __kvm_riscv_vcpu_set_reset_state(vcpu, cntx->sepc, cntx->a1); + spin_unlock(&reset_state->lock); + memset(cntx, 0, sizeof(*cntx)); memset(csr, 0, sizeof(*csr)); @@ -520,6 +525,10 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, switch (mp_state->mp_state) { case KVM_MP_STATE_RUNNABLE: + if (riscv_vcpu_supports_sbi_ext(vcpu, KVM_RISCV_SBI_EXT_HSM) && + vcpu->arch.ran_atleast_once && + kvm_riscv_vcpu_stopped(vcpu)) + kvm_riscv_vcpu_sbi_request_reset_from_userspace(vcpu); WRITE_ONCE(vcpu->arch.mp_state, *mp_state); break; case KVM_MP_STATE_STOPPED: diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 3d7955e05cc3..77f9f0bd3842 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -156,12 +156,29 @@ void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu, run->exit_reason = KVM_EXIT_SYSTEM_EVENT; } +/* must be called with held vcpu->arch.reset_state.lock */ +void __kvm_riscv_vcpu_set_reset_state(struct kvm_vcpu *vcpu, + unsigned long pc, unsigned long a1) +{ + vcpu->arch.reset_state.active = true; + vcpu->arch.reset_state.pc = pc; + vcpu->arch.reset_state.a1 = a1; +} + void kvm_riscv_vcpu_sbi_request_reset(struct kvm_vcpu *vcpu, unsigned long pc, unsigned long a1) { spin_lock(&vcpu->arch.reset_state.lock); - vcpu->arch.reset_state.pc = pc; - vcpu->arch.reset_state.a1 = a1; + __kvm_riscv_vcpu_set_reset_state(vcpu, pc, a1); + spin_unlock(&vcpu->arch.reset_state.lock); + + kvm_make_request(KVM_REQ_VCPU_RESET, vcpu); +} + +void kvm_riscv_vcpu_sbi_request_reset_from_userspace(struct kvm_vcpu *vcpu) +{ + spin_lock(&vcpu->arch.reset_state.lock); + vcpu->arch.reset_state.active = false; spin_unlock(&vcpu->arch.reset_state.lock); kvm_make_request(KVM_REQ_VCPU_RESET, vcpu); From patchwork Thu Apr 3 11:25:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= X-Patchwork-Id: 14037362 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D1674C3600C for ; Thu, 3 Apr 2025 11:37:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=C2sV9VsVYfK/tdhcKfNG3uAw/p8lSj4PtjcWZYlpd+s=; b=sPWdwD1qwrHotV pr7yu1cGSwR9P5Hfemao7wVe+kUENocWmh7rgvK+UZXOEEUAlXnHDq9KJDr1ZBHQCNRG7QsJwohYv Bym1yEuMk05L9I1hui9V3jC055tBVf98Szxx9MAuVzMTKaksweQvN9WYxxCzMhyDcS0px86DiI1Rh +Y/LqRxNzo4bsjBwhncGUGPon5KErikN0aoBfdJmP5JcDhi7k6gl7x1IBnFj8noCWWySZMKwrogTt dWWWpm9hkLqIwYfeAUK1GJ1LawzL0wmwfp9zaLFq4r+P+dtHxjFUv26vkSunmIKhAOS/Jad4sZLVD DGyLu+L+ZHUZDcQ3PCLQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0ItG-00000008jWK-36d7; Thu, 03 Apr 2025 11:37:46 +0000 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by bombadil.infradead.org with esmtps (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0Iny-00000008iVS-2nNZ for linux-riscv@lists.infradead.org; Thu, 03 Apr 2025 11:32:19 +0000 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-43d72b749dcso288855e9.1 for ; Thu, 03 Apr 2025 04:32:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1743679937; x=1744284737; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oR6PqtGhCEjz92xi+hsij6mLCExpfkTVXIEuhpc1C/o=; b=cs70dOfEIqOscK6oD9cLjRmygZMNOq6ywiGh0Lyl3BPsbhCvjFb+HOgdRnimRT34HL 9AFyJ8GqovjW2StxAE2yV8Vv5hoUAcB2w3F2qGvSDfdozF28zEPOig5XYoZVQmiAapT/ jxD2eQccorQSlbT9AVVcU/xRdwt78+Aw4PGY3fVgZBbENOHSU3JOAEmpW5BDeo5gEARd eBbQYdUoqfTCkGojDP8phR/aDv/HJcJVXzG560TP4SbSPXg7/k2u3t3LWFenb3eKXPyN 4pd2SNiF5SluNIAMi5A1ASDOX1ybHVBlEwIaVMlffYXtB2EhndmNFOQ6RMrVMOZiUnCO y7bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743679937; x=1744284737; 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=oR6PqtGhCEjz92xi+hsij6mLCExpfkTVXIEuhpc1C/o=; b=YgIFArBecL3do3DJPuwdHOeEMYuwwooPAiiZWt+UH7c8TJJgIR/IplnZbFkKyCEkR3 aQny/39O90inoZ38Xu8vu0egUX/TKJrVD6q3mqCV/E/L0RL7b1XoRTr5mV3FnGhojdiW MxapIFSFUI0lQy80MEixlc3Wd4iepo5XCYmbn3JccGNHKnCYBsAO2npljsNEE7K5WSeF xVSAAow9jrNXQXdc3FcNYFJK1AWf53E7NBScV9vK374gC1O6YIsQ8fXKaj2LCQGd/Lvw pinwjyPVqiWt6GH4M71NBExKGoEdT5pxXbXEITAyd/f7bVqRjI6Y+JleuaAXO/9OwKMG nyzg== X-Forwarded-Encrypted: i=1; AJvYcCWIi1s7QbSXgEJ0RsnoNwbFQdeHMnV2JBbTVqQWiOLNqKNWpfSbQrPCcUwuE5Xy8QzGiopf7AGkJlqKFQ==@lists.infradead.org X-Gm-Message-State: AOJu0Yye7KNjzShhu2L89GRc5YlWVH8dHcClBuwJFp4i/k1Yk3WrWOWz D0K3z0dKUILkdCPNo5csLaREY4lv3c7jvv1X896XB/VKSWWHPqX+rTEexs6i+xg= X-Gm-Gg: ASbGnct/Jq6lmiDuKjxJYAzlokuOaarvC+BzNpCZ5Qe2FgEHQOfM3Gg6syV173qJC0h cjK9vPv6MoAncrSbRRqD+4PtH6Lh/604yyhhkQeKkSiBOyil1jIsH5mvnGmOq0GhAftBFBlZB8z T5k+k8nGWxiDEcapNUymSeuMN2fANAjeuFkvFD3fEK27UMNsCRePLB1pPlTvd9DnRX3ytefxEE9 juVtjdOKoiYJdxTmy9Wwk2q9W8u2bMfto7WoSDLVV8YgBNKWq0hCF6u7vK9GjEwZy6D0swLdHyy k/cYEiMWdAVlGDZFbN4O1m9XslDWuDNsMqe1quGHMJ+mkZtrdu59lRgI+V//pwe2M7QPD5ca1fx idg== X-Google-Smtp-Source: AGHT+IFLuPHIJtkY001V8NzGfGDvy4KWQWKKGAIqS8lFxrZ1d/GjyGP4Yf4pmkBcRsFqmKnj2gYoIw== X-Received: by 2002:a05:600c:1d12:b0:439:8c80:6aee with SMTP id 5b1f17b1804b1-43db62bc0femr69162255e9.4.1743679936757; Thu, 03 Apr 2025 04:32:16 -0700 (PDT) Received: from localhost (cst2-173-141.cust.vodafone.cz. [31.30.173.141]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec169b4e4sm19424775e9.20.2025.04.03.04.32.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Apr 2025 04:32:16 -0700 (PDT) From: =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= To: kvm-riscv@lists.infradead.org Cc: kvm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Andrew Jones , Mayuresh Chitale Subject: [PATCH 5/5] KVM: RISC-V: reset smstateen CSRs Date: Thu, 3 Apr 2025 13:25:24 +0200 Message-ID: <20250403112522.1566629-8-rkrcmar@ventanamicro.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> References: <20250403112522.1566629-3-rkrcmar@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250403_043218_741085_2C6C83E3 X-CRM114-Status: UNSURE ( 8.82 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Not resetting smstateen is a potential security hole, because VU might be able to access state that VS does not properly context-switch. Fixes: 81f0f314fec9 ("RISCV: KVM: Add sstateen0 context save/restore") Signed-off-by: Radim Krčmář --- arch/riscv/kvm/vcpu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 4578863a39e3..ac0fa50bc489 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -65,6 +65,7 @@ static void kvm_riscv_vcpu_context_reset(struct kvm_vcpu *vcpu) memset(cntx, 0, sizeof(*cntx)); memset(csr, 0, sizeof(*csr)); + memset(&vcpu->arch.smstateen_csr, 0, sizeof(vcpu->arch.smstateen_csr)); /* Restore datap as it's not a part of the guest context. */ cntx->vector.datap = vector_datap;