Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp1266426rwr; Thu, 20 Apr 2023 12:18:18 -0700 (PDT) X-Google-Smtp-Source: AKy350YFyNj5pso8eC5QIUcs5A15nxPK2Z6D0mcz6V35mk+K+vhmWPiFtwcJW5nhyXjVX47qgFiU X-Received: by 2002:a05:6a20:869d:b0:f0:a6a0:3c11 with SMTP id k29-20020a056a20869d00b000f0a6a03c11mr2624138pze.49.1682018298046; Thu, 20 Apr 2023 12:18:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682018298; cv=none; d=google.com; s=arc-20160816; b=s/yU3CSVG+73yIINEmxZH2dPJKRh7EDrk7IKCa8p7hUpyyr90ZIRuBYy/4PsyJzbPb vc+xxwbtaONrw8ivufzZboXt42RjymLlFcM8iH7QMZjJTDYg9F7f091uKdWfvTz/8xa7 z2DWXMmdhHAco9WEZmDBzPtPRWK/r5AMFEmSnv2rBtOVX1NL52Ox/5cYEtmPFTkAgrn1 +Nq+kS7OmblThie7Hp4TpGij3zknwxSWqdEJYmweh9UqZ9B3Wfq3CQmG+izwYLVf8W+M ZB35H1rtLxpS72AOc/g79hhbX6v2HLH5GP3eIZZeUUyxF5MUaAVgYZfi3uPaZ39blw9x peMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=hiGazBo7fqmmG21SdxdzgEwUnvE1CYshJ5DRTxFcvcU=; b=ZrvvOMbYIujfYN/pzrwfH4ikBwZgUYOxIwVUqYu+5fjgD+j9tCDHhgRdO7qvuPS9Ag CV5UHGPtHgWqxYhLxM3BDjs6CY+Fvfz2De9AemIDgufQ8W9BmwDUv5KcFIfE98o/A1Z0 Kxvb7Wyrj7FCOLBX0cbI5D8wRqYvRjBHko9RnwZ0PhhqrwsxYBKiMyGPrAS94jXvlfJl u0gKokb9/OQiBMj1AphN5ItmsLj+/RPMdskfbGGt/ntB2YbN7ogK6MjdJ9TDb1Nj9wlC 9WYbB2X70wsZE4Z7dEX5rQFqDUiKETjeAY/tv+d6ZdphYuwWWkRmVw8l0oip85CY4K+V 1Mgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=VPpNbcz8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u202-20020a6279d3000000b0062dd1d1c48csi2359603pfc.377.2023.04.20.12.18.05; Thu, 20 Apr 2023 12:18:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=VPpNbcz8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231861AbjDTTOE (ORCPT + 99 others); Thu, 20 Apr 2023 15:14:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229468AbjDTTOC (ORCPT ); Thu, 20 Apr 2023 15:14:02 -0400 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1DF792705 for ; Thu, 20 Apr 2023 12:14:01 -0700 (PDT) Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-63b70ca0a84so1792777b3a.2 for ; Thu, 20 Apr 2023 12:14:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20221208.gappssmtp.com; s=20221208; t=1682018040; x=1684610040; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hiGazBo7fqmmG21SdxdzgEwUnvE1CYshJ5DRTxFcvcU=; b=VPpNbcz8lUmn6XqbAF8ZKpyYp3zV26MHR66QP3yKRqpcmVdPoHTXLEyF6Tm6HEp4sd I6BqSMDCI5vFX0NE5D1q7CokCl4/RoKvxQk1G13HaFvjs53+GMT1wsINZIEansmPZtBE 1k8Rd9FGcvKrprRZvlKXZGn5l88bbi1KjmY6066siYhLq8wcQ8X6Jf6SnA5UoPM85uEo 7diQrnMp6doro6jk8uOyyRDOWi4bDJDokTvU+c4NBYe1TsSjguNSflNmfNIhkY1Df2B0 kI05B/Wzga0pxbf0UynU69HDnh053SHp7yyj+UPOsBKA2vPkT5VaxUle0IyaTxscv/pO Av8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682018040; x=1684610040; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hiGazBo7fqmmG21SdxdzgEwUnvE1CYshJ5DRTxFcvcU=; b=EwMeQa4i6SJMu0887PMegZ6IuAOKrdAi3QZsAsOSDUjGbTKR03EmQ/0Lv3mg/XI4OV v/hNa366lM3kCxzVJL9WzNseOUyUg3s+4RMM901vsYac8kRxRSUxec1zNZ6xRFayd17o RnUq+tr+Nz+VCxivT37Y5uEaxbOa2+NqFHE1xTwEPwxno6IeUeYvbTBe1HuH7EdLZSTU BhXNBeQbkWJUFeFcxKRvOWPJLj4orTm9cdLlKaMvNEQoQSnxxzuVQAPoGsxBE9mYjZqs 9R6OyNRc5RhYqsJ7CHKDmt4yRPvydU4eZ9rRJBej2ahoGRi5/N0oC95uCeIogBD1RuMP 6vww== X-Gm-Message-State: AAQBX9cs1Ox/kRsC3wnhO60+z8C1tK4riD2iO6Sf0+IGIlRmAi88wdjd PI0J5SfVKXdZss0fsmmKpapfNEplCp4dOLrm6dSM4g== X-Received: by 2002:a17:90a:744c:b0:23f:962e:826b with SMTP id o12-20020a17090a744c00b0023f962e826bmr2608127pjk.15.1682018040457; Thu, 20 Apr 2023 12:14:00 -0700 (PDT) MIME-Version: 1.0 References: <20230419221716.3603068-1-atishp@rivosinc.com> In-Reply-To: From: Atish Kumar Patra Date: Fri, 21 Apr 2023 00:43:49 +0530 Message-ID: Subject: Re: [RFC 00/48] RISC-V CoVE support To: Sean Christopherson Cc: linux-kernel@vger.kernel.org, Alexandre Ghiti , Andrew Jones , Andrew Morton , Anup Patel , Atish Patra , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Suzuki K Poulose , Will Deacon , Marc Zyngier , 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Apr 20, 2023 at 10:00=E2=80=AFPM Sean Christopherson wrote: > > On Wed, Apr 19, 2023, Atish Patra wrote: > > 2. Lazy gstage page allocation vs upfront allocation with page pool. > > Currently, all gstage mappings happen at runtime during the fault. This= is expensive > > as we need to convert that page to confidential memory as well. A page = pool framework > > may be a better choice which can hold all the confidential pages which = can be > > pre-allocated upfront. A generic page pool infrastructure may benefit o= ther CC solutions ? > > I'm sorry, what? Do y'all really not pay any attention to what is happen= ing > outside of the RISC-V world? > > We, where "we" is KVM x86 and ARM, with folks contributing from 5+ compan= ines, > have been working on this problem for going on three *years*. And that's= just > from the first public posting[1], there have been discussions about how t= o approach > this for even longer. There have been multiple related presentations at = KVM Forum, > something like 4 or 5 just at KVM Forum 2022 alone. > Yes. We are following the restrictedmem effort and was reviewing the v10 this week. I did mention about that in the 1st item in the TODO list. We are planning to use the restrictedmen feature once it is closer to upstream (which seems to be the case looking at v10). Another reason is that this initial series is based on kvmtool only. We are working on qemu-kvm right now but have some RISC-V specific dependencies(interrupt controller stuff) which are not there yet. As the restrictedmem patches are already available in qemu-kvm too, our plan was to support CoVE in qemu-kvm first and work on restrictedmem after that. This item was just based on this RFC implementation which uses a lazy gstage page allocation. The idea was to check if there is any interest at all in this approach. I should have mentioned about restrictedmem plan in this section as well. Sorry for the confusion. Thanks for your suggestion. It seems we should just directly move to restrictedmem asap. > Patch 1 says "This patch is based on pkvm patches", so clearly you are at= least > aware that there is other work going on in this space. > Yes. We have been following pkvm, tdx & CCA patches. The MMIO section has more details on TDX/pkvm related aspects. > At a very quick glance, this series is suffers from all of the same flaws= that SNP, > TDX, and pKVM have encountered. E.g. assuming guest memory is backed by = struct page > memory, relying on pinning to solve all problems (hint, it doesn't), and = so on and > so forth. > > And to make things worse, this series is riddled with bugs. E.g. patch 1= 9 alone > manages to squeeze in multiple fatal bugs in five new lines of code: dead= lock due > to not releasing mmap_lock on failure, failure to correcty handle MOVE, f= ailure to That's an oversight. Apologies for that. Thanks for pointing it out. > handle DELETE at all, failure to honor (or reject) READONLY, and probably= several > others. > It should be rejected for READONLY as our APIs don't have any permission flags yet. I think we should add that to enable CoVE APIs to support as well ? Same goes for DELETE ops as we don't have an API to delete any confidential memory region yet. I was not very sure about the use case for MOVE though (migration possibly ?) kvm_riscv_cove_vm_add_memreg should have been invoked only for CREATE & reject others for now. I will revise the patch accordingly and leave a TODO comment for the future about API updates. > diff --git a/arch/riscv/kvm/mmu.c b/arch/riscv/kvm/mmu.c > index 4b0f09e..63889d9 100644 > --- a/arch/riscv/kvm/mmu.c > +++ b/arch/riscv/kvm/mmu.c > @@ -499,6 +499,11 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, > > mmap_read_lock(current->mm); > > + if (is_cove_vm(kvm)) { > + ret =3D kvm_riscv_cove_vm_add_memreg(kvm, base_gpa, size)= ; > + if (ret) > + return ret; > + } > /* > * A memory region could potentially cover multiple VMAs, and > * any holes between them, so iterate over all of them to find > > I get that this is an RFC, but for a series of this size, operating in an= area that > is under heavy development by multiple other architectures, to have a dif= fstat that > shows _zero_ changes to common KVM is simply unacceptable. > Thanks for the valuable feedback. This is pretty much pre-RFC as the spec is very much in draft state. We want to share with the larger linux community to gather feedback sooner than later so that we can incorporate that feedback into the spec if any. > Please, go look at restrictedmem[2] and work on building CoVE support on = top of > that. If the current proposal doesn't fit CoVE's needs, then we need to = know _before_ > all of that code gets merged. > Absolutely. That has always been the plan. > [1] https://lore.kernel.org/linux-mm/20200522125214.31348-1-kirill.shutem= ov@linux.intel.com > [2] https://lkml.kernel.org/r/20221202061347.1070246-1-chao.p.peng%40linu= x.intel.com > > > arch/riscv/Kbuild | 2 + > > arch/riscv/Kconfig | 27 + > > arch/riscv/cove/Makefile | 2 + > > arch/riscv/cove/core.c | 40 + > > arch/riscv/cove/cove_guest_sbi.c | 109 +++ > > arch/riscv/include/asm/cove.h | 27 + > > arch/riscv/include/asm/covg_sbi.h | 38 + > > arch/riscv/include/asm/csr.h | 2 + > > arch/riscv/include/asm/kvm_cove.h | 206 +++++ > > arch/riscv/include/asm/kvm_cove_sbi.h | 101 +++ > > arch/riscv/include/asm/kvm_host.h | 10 +- > > arch/riscv/include/asm/kvm_vcpu_sbi.h | 3 + > > arch/riscv/include/asm/mem_encrypt.h | 26 + > > arch/riscv/include/asm/sbi.h | 107 +++ > > arch/riscv/include/uapi/asm/kvm.h | 17 + > > arch/riscv/kernel/irq.c | 12 + > > arch/riscv/kernel/setup.c | 2 + > > arch/riscv/kvm/Makefile | 1 + > > arch/riscv/kvm/aia.c | 101 ++- > > arch/riscv/kvm/aia_device.c | 41 +- > > arch/riscv/kvm/aia_imsic.c | 127 ++- > > arch/riscv/kvm/cove.c | 1005 +++++++++++++++++++++++ > > arch/riscv/kvm/cove_sbi.c | 490 +++++++++++ > > arch/riscv/kvm/main.c | 30 +- > > arch/riscv/kvm/mmu.c | 45 +- > > arch/riscv/kvm/tlb.c | 11 +- > > arch/riscv/kvm/vcpu.c | 69 +- > > arch/riscv/kvm/vcpu_exit.c | 34 +- > > arch/riscv/kvm/vcpu_insn.c | 115 ++- > > arch/riscv/kvm/vcpu_sbi.c | 16 + > > arch/riscv/kvm/vcpu_sbi_covg.c | 232 ++++++ > > arch/riscv/kvm/vcpu_timer.c | 26 +- > > arch/riscv/kvm/vm.c | 34 +- > > arch/riscv/kvm/vmid.c | 17 +- > > arch/riscv/mm/Makefile | 3 + > > arch/riscv/mm/init.c | 17 +- > > arch/riscv/mm/ioremap.c | 45 + > > arch/riscv/mm/mem_encrypt.c | 61 ++ > > drivers/tty/hvc/hvc_riscv_sbi.c | 5 + > > drivers/tty/serial/earlycon-riscv-sbi.c | 51 +- > > include/uapi/linux/kvm.h | 8 + > > mm/vmalloc.c | 16 + > > 42 files changed, 3222 insertions(+), 109 deletions(-) > > create mode 100644 arch/riscv/cove/Makefile > > create mode 100644 arch/riscv/cove/core.c > > create mode 100644 arch/riscv/cove/cove_guest_sbi.c > > create mode 100644 arch/riscv/include/asm/cove.h > > create mode 100644 arch/riscv/include/asm/covg_sbi.h > > create mode 100644 arch/riscv/include/asm/kvm_cove.h > > create mode 100644 arch/riscv/include/asm/kvm_cove_sbi.h > > create mode 100644 arch/riscv/include/asm/mem_encrypt.h > > create mode 100644 arch/riscv/kvm/cove.c > > create mode 100644 arch/riscv/kvm/cove_sbi.c > > create mode 100644 arch/riscv/kvm/vcpu_sbi_covg.c > > create mode 100644 arch/riscv/mm/ioremap.c > > create mode 100644 arch/riscv/mm/mem_encrypt.c > > > > -- > > 2.25.1 > >