From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E304C77B73 for ; Wed, 19 Apr 2023 22:18:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B41A3900015; Wed, 19 Apr 2023 18:18:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AA1EB900003; Wed, 19 Apr 2023 18:18:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8F44F900015; Wed, 19 Apr 2023 18:18:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 7ED9B900003 for ; Wed, 19 Apr 2023 18:18:16 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 42974A041B for ; Wed, 19 Apr 2023 22:18:16 +0000 (UTC) X-FDA: 80699554992.19.56A715A Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by imf10.hostedemail.com (Postfix) with ESMTP id 69CC8C001E for ; Wed, 19 Apr 2023 22:18:14 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=JUqXodm7; spf=pass (imf10.hostedemail.com: domain of atishp@rivosinc.com designates 209.85.210.174 as permitted sender) smtp.mailfrom=atishp@rivosinc.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681942694; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=cyIj0UBv9pS76jm0gxcpwmAmAKqEq2wUQqZgUQ6cXgk=; b=nW58tZ+yRgIlOfOi5tC9vABZ9rXZEUhgr99dqLXgfkYuwTvAJwT0TkGawmYyrgptbYl+k9 z5UDHond72pwX2XJpQmcFvqtc/VIGc2RDvGgR6zVq0N6t0NH/TDxkFYRQ7pAjz6MAhpG/4 htu1UB1fvgEzX+av1+43186KAGz3EJI= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=JUqXodm7; spf=pass (imf10.hostedemail.com: domain of atishp@rivosinc.com designates 209.85.210.174 as permitted sender) smtp.mailfrom=atishp@rivosinc.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681942694; a=rsa-sha256; cv=none; b=ogs0ibmEecL52gfcjF6HReEbYbSAqnYfkpXubjS5Nobmzn5rEMdbRK1z5gtg/ajF3XxUxa R5ERi9Z9YWqLLI1taMGRNTe1A52yC70/KYSaZepww3zSMiis9DSSTqOP3etjb5jognwLUP JiiuGEKtZBblj4IEADSVPZ9AlTFbFWI= Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-63b46186c03so455242b3a.3 for ; Wed, 19 Apr 2023 15:18:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20221208.gappssmtp.com; s=20221208; t=1681942693; x=1684534693; 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=cyIj0UBv9pS76jm0gxcpwmAmAKqEq2wUQqZgUQ6cXgk=; b=JUqXodm7yTv0ln6sHn0eyCWrKgQ2lIYWLmeyEDRipWR1vGY9jvhA0yFwbIBRMjhRbb 5feEP/EeoRDxGxyKun0x5G2O5oEBJdDAFRS/RHZ4Ci8b/iv26PTeN1VUZ+s3pIrJBSTf rZjckAXPtWtvH1Kvmtp4JHL0K8GHX72uGWQN4DiIyrkkdwTzznpc2XULSlQqV9+qqsp4 UJ+vBagyFy5rq5HF8Oa6OHLTBhdbA55/ZL15Y605z4/ZrHmgIiKmwYrEl9ntaC9BfLrM ClfqHB6I3YRHPV8jZmE8uYnBE2UGqLOLZNM172UxVHBchm+jEWBkzY2ZxZ7p2UfryNvP OpFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681942693; x=1684534693; 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=cyIj0UBv9pS76jm0gxcpwmAmAKqEq2wUQqZgUQ6cXgk=; b=MIPaXceRrwFCEP/hJmdij8qvic4Lurels78XgqiHj1YicXWZv/0ksdHt5Uw/3Ph3ci SApxsplhnpAzBm0b7tSrm83eI24/hK6zX4b7dRalAm/92jllDuAYgQBVJ3jKoSrka6W8 RyrDURpPTiwOvso/HLSuV1p1j6znl/XsmBnxVzO4X0yAfQON2WsFekElz0oTKdWZuOSt dBPgLPcj9nIhRKfdYRhsyEj3W4OvsBYDzbtWCboNDFMyyd9wV4ioToID+5RLmzbjXv7l AYns3kEx+j2iJZilm9HgXl8lRkdlV+2BsiM5fploTrBzdcYuqx0WBKhbaPSIVNg4ev37 sdGQ== X-Gm-Message-State: AAQBX9dd5fFyddxAvDh6n83wim1MF+xLvVP5YqiDGUoI47cUY1JNN30A yXS3Nrh6tN8wmC51vs6HlwaEsA== X-Google-Smtp-Source: AKy350Y8OMGVUtVmKbRjYFU/NfkRlor4BXVO9AnvAi3r9stoJW7W2hRl3eELkUdIf0o2cuCG7q0qBA== X-Received: by 2002:a17:903:2291:b0:19c:dbce:dce8 with SMTP id b17-20020a170903229100b0019cdbcedce8mr8768332plh.15.1681942693408; Wed, 19 Apr 2023 15:18:13 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([66.220.2.162]) by smtp.gmail.com with ESMTPSA id jn11-20020a170903050b00b00196807b5189sm11619190plb.292.2023.04.19.15.18.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Apr 2023 15:18:13 -0700 (PDT) From: Atish Patra To: linux-kernel@vger.kernel.org Cc: Atish Patra , Alexandre Ghiti , Andrew Jones , Andrew Morton , Anup Patel , Atish Patra , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Suzuki K Poulose , Will Deacon , Marc Zyngier , Sean Christopherson , linux-coco@lists.linux.dev, Dylan Reid , abrestic@rivosinc.com, Samuel Ortiz , Christoph Hellwig , Conor Dooley , Greg Kroah-Hartman , Guo Ren , Heiko Stuebner , Jiri Slaby , kvm-riscv@lists.infradead.org, kvm@vger.kernel.org, linux-mm@kvack.org, linux-riscv@lists.infradead.org, Mayuresh Chitale , Palmer Dabbelt , Paolo Bonzini , Paul Walmsley , Rajnesh Kanwal , Uladzislau Rezki Subject: [RFC 20/48] RISC-V: KVM: Add gstage mapping for TVMs Date: Wed, 19 Apr 2023 15:16:48 -0700 Message-Id: <20230419221716.3603068-21-atishp@rivosinc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230419221716.3603068-1-atishp@rivosinc.com> References: <20230419221716.3603068-1-atishp@rivosinc.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: faj6exkjo5obd9ygq9jwwtjgs7kyea58 X-Rspamd-Queue-Id: 69CC8C001E X-HE-Tag: 1681942694-443297 X-HE-Meta: U2FsdGVkX1+nsrj30AEG4EgGuST/WbvE3AKgZ+pjjcLkaNpixGEC60KBTVtNRVuLqxCIXEPINZeTvZIJjfHth95llAorQR2b/tV8CpBB6aAOC2JIIy7Ipkp0eOH+lmm1rG+72dlwuEMaCwvRNcL6QSR6lrRI8PsfMi0VAiElhlEJ13dear+tTMmkOWUaMn3jT0IHxq2rGvPNk1yoRxMl8/ulW6q9DyzRKlEDMS7hMZd/M9cBKOg9QxmjfEBFEDqH1jAcYSszJFX2qMGoiEXwmWEZnzsxFbzPEEGaQ927KeR1UMR+i+h2EQSP/m7RTXl3NmWSrrike2I6oddBzWUysaNZorLmjKHp7Qs3CdOr0brQ1fY2HN4d6IxBQTk4uCRNixWiQzVJMuvpbwJMP6raC535rhhN/Z/MXCxgas0RMu9HwD9HPECLtUB+Pdsp1i0CSgPXJiyLuVLc/HdxQN5hW5tmpOSwhwgiMfRSKYeQ8idPQSckmD2hiv2Xwmqd5kdhWI8Rsoixmrv49rYWLHkLFCRa4XrYnIWUQ8IgJVhiKVzG7V2LRA7aZHFhyP9UhLPtwoDs73UuLPHXRLfD7CPZ5EqyEOkLP+8RtdtvVxc/15X4a30npVRHmFNkj5Yz5NHtLpDkzbnevcPE9iyf2Isx9ffHyDmb39Y1qSeki/GVZ0Ma9igxx+EVU9jXwgtzuDvtXh/oenYNWxmvtf3J+15ZgZ/HLENBgVh2++kUz4z6+gBqZO0oPtbSdsqSrIa5w+SqJ798YEAmnhKHnaZXiM2fOnsDcZ4G+WH4wUg4Ckt7OEtu7qfstLQYoeM+0FZoxCVVTQiC/POSxA/ZdbaD++JCLjfwFIsQTAfX7dcqJ5zw5ysWn9Vc6HFaJzPap+lY0ZAb0PM1wGoeA6YNi14fYU/z9/whgAmohtce4ZNPpVyFAG1de4AACV7aZ1brX601VLNpVHw8pqnOan0B2ccXelX 42XMfMW2 TPZ5e/wcveDGgtYqVtoaaIJMmUjfRsuw2bXk4yywKw0NmmQDZYmk6a3Z1qprva9v1CuGlkQZ+lrGyzIEUY10DdUG8itIU/1dmpyvoi3Cwuld1Kaorgdi4unIM58m2DEBj43T7jZSesQY5KS8DLx27T1teMB4f5dS0qHPHypzAHC3INT6igiTEjPLnPON+xzr0+LZQKIvgI0Vy6uM4knhpb4PXr4HB8PqRt/3XvmLDrxs4uQf2ju5psWbCcjiT9UL8qtRLeIC57RSyI8QFwhq+9p2RcUrnmev28YZvB/Fl33cnqLKtC7daRmCnXjs+1+T25/KgekfEf9AdPM82PHrL735mgzMDWUbZ0Qp0h8+sES8he8Rl1+W3KXauynHFhdXtf6Nqv0dGXwiYEI7FazksrCeVcEI/pC+vAg7gbsIRekCQFj3VGE+62g+M+q8KTDALrCxi9hZPUrXcZKSLO3ZANOUGvw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: For TVM, the gstage mapping is managed by the TSM via COVH SBI calls. The host is responsible for allocating page that must be pinned to avoid swapping. The page is converted it to confidential before handing over to the TSM for gstage mapping. Signed-off-by: Atish Patra --- arch/riscv/kvm/cove.c | 63 +++++++++++++++++++++++++++++++++++++- arch/riscv/kvm/vcpu_exit.c | 9 ++++-- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/arch/riscv/kvm/cove.c b/arch/riscv/kvm/cove.c index 4efcae3..44095f6 100644 --- a/arch/riscv/kvm/cove.c +++ b/arch/riscv/kvm/cove.c @@ -149,8 +149,68 @@ void kvm_riscv_cove_vcpu_put(struct kvm_vcpu *vcpu) int kvm_riscv_cove_gstage_map(struct kvm_vcpu *vcpu, gpa_t gpa, unsigned long hva) { - /* TODO */ + struct kvm_riscv_cove_page *tpage; + struct mm_struct *mm = current->mm; + struct kvm *kvm = vcpu->kvm; + unsigned int flags = FOLL_LONGTERM | FOLL_WRITE | FOLL_HWPOISON; + struct page *page; + int rc; + struct kvm_cove_tvm_context *tvmc = kvm->arch.tvmc; + + tpage = kmalloc(sizeof(*tpage), GFP_KERNEL_ACCOUNT); + if (!tpage) + return -ENOMEM; + + mmap_read_lock(mm); + rc = pin_user_pages(hva, 1, flags, &page, NULL); + mmap_read_unlock(mm); + + if (rc == -EHWPOISON) { + send_sig_mceerr(BUS_MCEERR_AR, (void __user *)hva, + PAGE_SHIFT, current); + rc = 0; + goto free_tpage; + } else if (rc != 1) { + rc = -EFAULT; + goto free_tpage; + } else if (!PageSwapBacked(page)) { + rc = -EIO; + goto free_tpage; + } + + rc = cove_convert_pages(page_to_phys(page), 1, true); + if (rc) + goto unpin_page; + + rc = sbi_covh_add_zero_pages(tvmc->tvm_guest_id, page_to_phys(page), + SBI_COVE_PAGE_4K, 1, gpa); + if (rc) { + pr_err("%s: Adding zero pages failed %d\n", __func__, rc); + goto zero_page_failed; + } + tpage->page = page; + tpage->npages = 1; + tpage->is_mapped = true; + tpage->gpa = gpa; + tpage->hva = hva; + INIT_LIST_HEAD(&tpage->link); + + spin_lock(&kvm->mmu_lock); + list_add(&tpage->link, &kvm->arch.tvmc->zero_pages); + spin_unlock(&kvm->mmu_lock); + return 0; + +zero_page_failed: + //TODO: Do we need to reclaim the page now or VM gets destroyed ? + +unpin_page: + unpin_user_pages(&page, 1); + +free_tpage: + kfree(tpage); + + return rc; } void kvm_riscv_cove_vcpu_switchto(struct kvm_vcpu *vcpu, struct kvm_cpu_trap *trap) @@ -390,6 +450,7 @@ void kvm_riscv_cove_vm_destroy(struct kvm *kvm) cove_delete_page_list(kvm, &tvmc->reclaim_pending_pages, false); cove_delete_page_list(kvm, &tvmc->measured_pages, false); + cove_delete_page_list(kvm, &tvmc->zero_pages, true); /* Reclaim and Free the pages for tvm state management */ rc = sbi_covh_tsm_reclaim_pages(page_to_phys(tvmc->tvm_state.page), tvmc->tvm_state.npages); diff --git a/arch/riscv/kvm/vcpu_exit.c b/arch/riscv/kvm/vcpu_exit.c index 0d0c895..d00b9ee5 100644 --- a/arch/riscv/kvm/vcpu_exit.c +++ b/arch/riscv/kvm/vcpu_exit.c @@ -41,8 +41,13 @@ static int gstage_page_fault(struct kvm_vcpu *vcpu, struct kvm_run *run, }; } - ret = kvm_riscv_gstage_map(vcpu, memslot, fault_addr, hva, - (trap->scause == EXC_STORE_GUEST_PAGE_FAULT) ? true : false); + if (is_cove_vcpu(vcpu)) { + /* CoVE doesn't care about PTE prots now. No need to compute the prots */ + ret = kvm_riscv_cove_gstage_map(vcpu, fault_addr, hva); + } else { + ret = kvm_riscv_gstage_map(vcpu, memslot, fault_addr, hva, + (trap->scause == EXC_STORE_GUEST_PAGE_FAULT) ? true : false); + } if (ret < 0) return ret; -- 2.25.1