From patchwork Thu Apr 1 13:34:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 12178085 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13254C433B4 for ; Thu, 1 Apr 2021 13:37:21 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 764BD6124A for ; Thu, 1 Apr 2021 13:37:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 764BD6124A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=bU1APW+GkXzhhx4kxAAQz9EqgR9jG8wTizvkuqQrZ24=; b=aIuJVZYkkD6FQHCQUacEVCXTx 8+T0HLHJwEEU+FbgUpLFoO1gr1M857f7LVbWgCgMErDXSArw4EmqSf3hqTTbrMvbqDZ+ifYq7z9pW tEO3cjsI4H11IU/fnNbFPBcY+0BtRKT7tUVFuQEuI9PRmePR/+WMQbF8mTFAUs4hv9h74H5PrdD/U LniA4+jhhHVAoi59z3r3NNo1FNzro1VnzCjpwRPiLvAntWPfUqcD6O3QYb8TiSS7zdZdutFIG0zQ8 dim25vxfJrxAL8LknBVbMMBSMkToEfZ1EFiEMxJtLu08e7Nzs5BmaZvi9H3u93mTLCf6cXxU6Qzse 8YWTE0jGg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lRxVW-009hKE-FU; Thu, 01 Apr 2021 13:37:10 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lRxVR-009hIt-2G; Thu, 01 Apr 2021 13:37:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1617284226; x=1648820226; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=fJslepXp59dsB1czjSf5F8Fsj5uqfotlI18+cU5AYyQ=; b=MF/wx3KMFKzqupNITFIBaW+mHekfl/h5TKrgqBDF0VIQMcWg5tBCqxCv qtsQHeKV/t8oQHj1/tiuoOsNofhKjCpLFiYGYNzDjNUFHEG5+19FbWCAu 3sy6Q2CufSJmPItiIAh2EwHPmc45t3ETwxlogidbU1yyTMNgnUolWlYrz D/93ThS9CxWvCxVL7s4EDIgyH8gSXV4QgYdubW89cKTo4bHL1//KBmDgd wLZglUpzY8YqwiQuGQard1ODPq6cp0WLmngXjdyEpA3uDSpjNmqEJS1Wi J9oxG4R5ETtlOc3rx3/7/1dpbGt6DaLcV6ZJwcuXrZBmD0moXIfxf4Klp Q==; IronPort-SDR: AAq24ikm/7OW3WotBo3IkfcsUmARMO4ozBpfd4hbM7fDk4yjsPlZcKv/h+SIc5HQ2fmOtrrPby lcmGWTejZPOyio05wnCIOzlb9bbPNWSKDkZTQnlBlm52VQooF49xoCYNGlEu80i9LUUgotmwrx qUVR+gDSz8xXJiXuGeZkfX6p2fhw4jCuNXriNdgTAMCQeQDlu3z+YqKU17lFPvmbqZFDgsPQnD Jvca9HppaFuAS+Y8Ey7/tDp94HN4IX/N4waK+kc+WVpxlnHNbCoGY7OceNrB+uSHCyLkfEu8ip j7c= X-IronPort-AV: E=Sophos;i="5.81,296,1610380800"; d="scan'208";a="164582858" Received: from mail-dm6nam12lp2171.outbound.protection.outlook.com (HELO NAM12-DM6-obe.outbound.protection.outlook.com) ([104.47.59.171]) by ob1.hgst.iphmx.com with ESMTP; 01 Apr 2021 21:36:09 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fNuQ/NLTv4pglRFcGrJCyAnz0oa8RVttSc/qWbOhlhINyKGH+p305QvUqQz2/RL2Air0sPsaWGZgjO0Aa3p2H1MhV/viZ01oCy1Tx9GGNmexVi6IkHuE+bYnCUxfEWm5DEeoZoRznisxjxk3rK2Kcw7xwPQxSR7sFduKs8kA1BOcLssvyaWvu2rVKs9lpE1uCvovfUdDWLyPm1/aJGo6MnDZ0bpFCLk6JOpwz796ZDS+wzNDVIX2j3P6Cpzn7osP/Ru6zA1BbBrxOxrSDxG9gSarr6kDQnjKIEXKYNzGcoIsBch1w8XB/UvdFelLGiw2JCoUsPF+RPzA5cUvzZM2YA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uK9D4EONOuH9qLts0ubfTL4vXYXw3flETTSMxqyMBeM=; b=JPLJAZldxwOtww1xyW97leu5V087h1TBSwpQQ+0uaZE9C9k+n1UUm97Vwx8egzjtRfj5IbK7Ys21eMtcqB9vhAlXnGEK9SU9hEEZm4zDfs6+fLw9cYSSG4+XqnI80ltq3PvNtiD/rUn3j8yiCYgWxIrZ7OQP58xpPvoIm5FFud5AjihsDRFHgyYjC0Fk3qTIxareURV0jMTmPSHpnRNw7nxXipiGVXwLNsFOiH6z71Pp+zRdJdHg1QXd8lV4ZlcU6zzl/Iqt5z9pJXLviQ/BXmH7dUACx08EdXrNEMSUMACdRTjnYHYWVItsR8CNt07oHypd6nW17X5GyiqP1IsqFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uK9D4EONOuH9qLts0ubfTL4vXYXw3flETTSMxqyMBeM=; b=VrykJgSaBvOI/A0cxFHJb0N2AdybqpAftyjZ0BfHcVLRnEGBN6fE6IGSPtAQNdTWuc3L52iM84YPABeD+1PQ3x/9Pii3H3RA8yKspkIvjGisjOtFVZnxGMC7DRct1WLoVSoHafdLlnMgtsJfOFb1uUQ8mtIJFK7NXjj/Psq/NRQ= Authentication-Results: dabbelt.com; dkim=none (message not signed) header.d=none;dabbelt.com; dmarc=none action=none header.from=wdc.com; Received: from DM6PR04MB6201.namprd04.prod.outlook.com (2603:10b6:5:127::32) by DM6PR04MB3865.namprd04.prod.outlook.com (2603:10b6:5:ac::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.28; Thu, 1 Apr 2021 13:36:02 +0000 Received: from DM6PR04MB6201.namprd04.prod.outlook.com ([fe80::38c0:cc46:192b:1868]) by DM6PR04MB6201.namprd04.prod.outlook.com ([fe80::38c0:cc46:192b:1868%7]) with mapi id 15.20.3977.033; Thu, 1 Apr 2021 13:36:02 +0000 From: Anup Patel To: Palmer Dabbelt , Palmer Dabbelt , Paul Walmsley , Albert Ou , Paolo Bonzini Cc: Alexander Graf , Atish Patra , Alistair Francis , Damien Le Moal , Anup Patel , kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Anup Patel Subject: [PATCH v17 03/17] RISC-V: KVM: Implement VCPU create, init and destroy functions Date: Thu, 1 Apr 2021 19:04:21 +0530 Message-Id: <20210401133435.383959-4-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401133435.383959-1-anup.patel@wdc.com> References: <20210401133435.383959-1-anup.patel@wdc.com> X-Originating-IP: [122.179.112.210] X-ClientProxiedBy: MA1PR01CA0104.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::20) To DM6PR04MB6201.namprd04.prod.outlook.com (2603:10b6:5:127::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.179.112.210) by MA1PR01CA0104.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.28 via Frontend Transport; Thu, 1 Apr 2021 13:35:46 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: de67681e-aa4e-44fb-06a8-08d8f513179b X-MS-TrafficTypeDiagnostic: DM6PR04MB3865: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:1284; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YlRsS8akagnEVUMrzSJwVzKhqm2B5EnaKvRRfh9Ey3gFvKOiUO7kb9dFXdUs3FpgQtLtpYa+BOPcrOi7Ve4tOuAnB8/cA3gqVbgjPDaLfNf12Hu18QuXAUHTJFq4hWEsUON7BLMKmnGqAMeWV2NnluvBq2oSxaHGIFmbbs9tDssJisIOerVXPlFbPGeHbAxu4yLVfxkj1wF8m/mpnpZ/u0G7deRP87Jkny9lZMfNFjAubfJTkWhEy4JNJsbjAE3X3vDtr4OP5qKK+C1q65b/WeLb/aLtXoWJhg6PTYrhfG9RV5cs9lTIyBJTbPYIDk5E/NcCGinrPqArd5Ozu2rLNQANWXMNCbZRibG6SFgmS/sb/h1j6/isIekFwZTjcSavrM+D1T5stS0tPv8jHCX6MflWOzIeVT2y2IRSfYNdN392F05urMEQFsRdi0YcnB9uXtLcgaxsYtjZMSRTGYcyte/OcmFnNdAXL7X6i2AnxoKDCSF9pjGl+iCmnzL2jeMLyOzTY1J8aSk1Q3AIUGmRFA502O5RCJUpI8fwA5vxe9L3qOaImmOe8sN5q7wAMtBHvl+Uz5R40i+ZwN4GBiJEOC6GiBolaTo7Tq5y1IwLyjDQf7iMGfEgJhYYAdH/KSozvl9+6hAOC5vjcEdhNsV09HRF7dWJvrgX0SVTDhD6K/s= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR04MB6201.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(136003)(376002)(366004)(39860400002)(6666004)(36756003)(55016002)(26005)(2906002)(83380400001)(66556008)(66476007)(5660300002)(66946007)(7416002)(186003)(16526019)(7696005)(956004)(2616005)(8886007)(38100700001)(8936002)(52116002)(44832011)(54906003)(110136005)(8676002)(316002)(86362001)(4326008)(1076003)(478600001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: Md1g3d+JzbCH8/6u8F6PkArTla85pEKPou96uUdGOhBq6lVP+pKgtIXqphXi9TRC94BwWHkQwzu8E9lPgtcX3Ac9PQH2/ym0bP5RkSJSi2BZcKBKYQNAenmANJg62q8iLieaOV6ncDTW4o3FP9UpqexGwUuqhgEokOallAghDX/pvaqgolSgsd9bUtNRtWRlpWI9JQx7TL375E2HLOSknhadDlzgwxquOK2mUqz4psmwdIGgH0Z7OaFK8E9eyv6j9gsintLX/PjAklqdsJfuEK7UJk6Vi79u1IqFHN/2OXSL3QEAHdRLWEO+EL2yVEEdOkREDu5IXUPM/41FFun3Ytj0tlwPpZpgTEXI4pcZao8CHkWsqc2JSB9rMmrk79JDYa+SOpgjcWeh8v75Os710rhT8q5WIoTj+g7ZjgPVnZMouEjbjbSF9UT09FeyO2HZPu+Xc/fFjw4G8D1XUIF1S+HvnOWOejA+TcYYAykrws+Qz5JmzE/ZHaSZD4+LFigdfNXP8CrXlId7HGs0ZqcBNTnujPPAhF5Smqj6BqNSUT8TjVpCKCZlhZiSKl62osxxU2/BaU8quGEPcf64leDvKJlg9nANtAuC7E2yyzFdGS1Ucjk7DLaBP1UtvrIW/TklfKHOnofVnOKXa/+cy3fJePfjMIspsF06ujJzG9Lyo70tvDk0jmUYFKM6Ie389v+EYy84NLI21ozQgMm/Zc2cd9RUIjK3hECOBv2yy+P6DrrGIF2MaWO2b6gS5QHZ65rI/xaX8hyqom4D3AQ6UHikEIM23OcvS4FVHcXGK2OnyLCD6VkKCR3rgSrFgiub18dlY5x7NQr/A4Y37Uw9+GDGy2TosDT6967ITeM8utPBLbGozZyGNSFKkBzeYgMLE3B6I9lgYFZNonSDPrwyH/Cl7zzPv7gZL6eG4S8b58ess2bAGRerzTv5pxOL77iIaucM1BWqe68h68P97ESXvT4r6b/thdEA0Fl+UVxb9pRdPRz4t6yqwKAPz+z1cPtpg6geYa/vhEKbt9shVYnvrR60N+KThUU5lxuAE+GCs24Z5bTD08d8cyrk1YOzGH4FVpohGLXMPlNnfp2KZwVB1JuaYPytXX1ZqPyqlB2dwX+VF00WGnAabArlirZRUZD+1vj9rr2WBZj6sJTfnqoQlV8G45GncfrvAa/xyYtJymMD53kNDaWH4LubeeOAcUfgjjYQzLdk7pL1BxZJcSXQFSatYmc6pg2kdNEMAjIaRYbK6t98b9KWaAhDxD+aI2hLoynqMVDTwKaZriP+QRLvYO9atYYcS1XgTONbdwoveSKhUa4hwmBWZOTfpfOVH4NVEY/FVQlMtrMMZDf4dSGRAOgexw== X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: de67681e-aa4e-44fb-06a8-08d8f513179b X-MS-Exchange-CrossTenant-AuthSource: DM6PR04MB6201.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2021 13:36:02.4083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9pvzPsFA0JqV3dWZFNnefJrxxyT3ReQcxLpMFR9e767LWaQpmFAV39ZZZqHWX3IJpWJoznWJS13U7hAqph/RrQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR04MB3865 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210401_143705_652727_21DD3D2D X-CRM114-Status: GOOD ( 16.71 ) 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 This patch implements VCPU create, init and destroy functions required by generic KVM module. We don't have much dynamic resources in struct kvm_vcpu_arch so these functions are quite simple for KVM RISC-V. Signed-off-by: Anup Patel Acked-by: Paolo Bonzini Reviewed-by: Paolo Bonzini Reviewed-by: Alexander Graf --- arch/riscv/include/asm/kvm_host.h | 69 +++++++++++++++++++++++++++++++ arch/riscv/kvm/vcpu.c | 55 ++++++++++++++++++++---- 2 files changed, 115 insertions(+), 9 deletions(-) diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h index e1a8f89b2b81..2796a4211508 100644 --- a/arch/riscv/include/asm/kvm_host.h +++ b/arch/riscv/include/asm/kvm_host.h @@ -62,7 +62,76 @@ struct kvm_cpu_trap { unsigned long htinst; }; +struct kvm_cpu_context { + unsigned long zero; + unsigned long ra; + unsigned long sp; + unsigned long gp; + unsigned long tp; + unsigned long t0; + unsigned long t1; + unsigned long t2; + unsigned long s0; + unsigned long s1; + unsigned long a0; + unsigned long a1; + unsigned long a2; + unsigned long a3; + unsigned long a4; + unsigned long a5; + unsigned long a6; + unsigned long a7; + unsigned long s2; + unsigned long s3; + unsigned long s4; + unsigned long s5; + unsigned long s6; + unsigned long s7; + unsigned long s8; + unsigned long s9; + unsigned long s10; + unsigned long s11; + unsigned long t3; + unsigned long t4; + unsigned long t5; + unsigned long t6; + unsigned long sepc; + unsigned long sstatus; + unsigned long hstatus; +}; + +struct kvm_vcpu_csr { + unsigned long vsstatus; + unsigned long hie; + unsigned long vstvec; + unsigned long vsscratch; + unsigned long vsepc; + unsigned long vscause; + unsigned long vstval; + unsigned long hvip; + unsigned long vsatp; + unsigned long scounteren; +}; + struct kvm_vcpu_arch { + /* VCPU ran atleast once */ + bool ran_atleast_once; + + /* ISA feature bits (similar to MISA) */ + unsigned long isa; + + /* CPU context of Guest VCPU */ + struct kvm_cpu_context guest_context; + + /* CPU CSR context of Guest VCPU */ + struct kvm_vcpu_csr guest_csr; + + /* CPU context upon Guest VCPU reset */ + struct kvm_cpu_context guest_reset_context; + + /* CPU CSR context upon Guest VCPU reset */ + struct kvm_vcpu_csr guest_reset_csr; + /* Don't run the VCPU (blocked) */ bool pause; diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index 6f1c6c8049e1..d87f56126df6 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -35,6 +35,27 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { { NULL } }; +#define KVM_RISCV_ISA_ALLOWED (riscv_isa_extension_mask(a) | \ + riscv_isa_extension_mask(c) | \ + riscv_isa_extension_mask(d) | \ + riscv_isa_extension_mask(f) | \ + riscv_isa_extension_mask(i) | \ + riscv_isa_extension_mask(m) | \ + riscv_isa_extension_mask(s) | \ + riscv_isa_extension_mask(u)) + +static void kvm_riscv_reset_vcpu(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; + + memcpy(csr, reset_csr, sizeof(*csr)); + + memcpy(cntx, reset_cntx, sizeof(*cntx)); +} + int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id) { return 0; @@ -42,7 +63,25 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id) int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) { - /* TODO: */ + struct kvm_cpu_context *cntx; + + /* Mark this VCPU never ran */ + vcpu->arch.ran_atleast_once = false; + + /* Setup ISA features available to VCPU */ + vcpu->arch.isa = riscv_isa_extension_base(NULL) & KVM_RISCV_ISA_ALLOWED; + + /* Setup reset state of shadow SSTATUS and HSTATUS CSRs */ + 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; + + /* Reset VCPU */ + kvm_riscv_reset_vcpu(vcpu); + return 0; } @@ -50,15 +89,10 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) { } -int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) -{ - /* TODO: */ - return 0; -} - void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) { - /* TODO: */ + /* Flush the pages pre-allocated for Stage2 page table mappings */ + kvm_riscv_stage2_flush_cache(vcpu); } int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) @@ -194,6 +228,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) struct kvm_cpu_trap trap; struct kvm_run *run = vcpu->run; + /* Mark this VCPU ran at least once */ + vcpu->arch.ran_atleast_once = true; + vcpu->arch.srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); /* Process MMIO value returned from user-space */ @@ -267,7 +304,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) * get an interrupt between __kvm_riscv_switch_to() and * local_irq_enable() which can potentially change CSRs. */ - trap.sepc = 0; + trap.sepc = vcpu->arch.guest_context.sepc; trap.scause = csr_read(CSR_SCAUSE); trap.stval = csr_read(CSR_STVAL); trap.htval = csr_read(CSR_HTVAL);