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 72A9DC6FD18 for ; Wed, 19 Apr 2023 22:19:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 99163900028; Wed, 19 Apr 2023 18:19:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9414F900003; Wed, 19 Apr 2023 18:19:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 76D92900028; Wed, 19 Apr 2023 18:19:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 66E24900003 for ; Wed, 19 Apr 2023 18:19:01 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 425A080284 for ; Wed, 19 Apr 2023 22:19:01 +0000 (UTC) X-FDA: 80699556882.18.D4F16B7 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by imf05.hostedemail.com (Postfix) with ESMTP id 66DDA10000F for ; Wed, 19 Apr 2023 22:18:59 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=qN2qG27G; spf=pass (imf05.hostedemail.com: domain of atishp@rivosinc.com designates 209.85.216.41 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=1681942739; 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=LnnJUnDn5Gg0VxA4G2224aJuFesVpwMyXWuJ35Yh1EA=; b=IJ/9gb86QTIHDjTaBPCFP/xfbuHuesG3LY/ivy+VlEXGnD77sRjyraQoV96aUqxK3iBoIo eKtXn9GscKg7s5o5VLpfdPm2I8JkH+hs4K8FX1g0JzUdWCTYE92As8aNgJyUXyrd68Zfu6 yPNe5fGGXvcrerR6P85NHsUsm6EpNh0= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=qN2qG27G; spf=pass (imf05.hostedemail.com: domain of atishp@rivosinc.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=atishp@rivosinc.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681942739; a=rsa-sha256; cv=none; b=r+SewLrr1hg1ydQ7Obi1NsYDJQcsRcynAUmdnvX6+S+6biYAtJk2TsIhGzDq+kxfgnUyzv taqmq7XSYqK771wGEIixGfD8KkhFHJoSTqWaPkmJu132n0Qef9lBqGD0d1pgenI30wqhk2 HdAWYJF8GzH9gLKxffWOvsbaJFYtEY4= Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-2496863c2c7so216516a91.1 for ; Wed, 19 Apr 2023 15:18:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20221208.gappssmtp.com; s=20221208; t=1681942738; x=1684534738; 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=LnnJUnDn5Gg0VxA4G2224aJuFesVpwMyXWuJ35Yh1EA=; b=qN2qG27GHv+d9gUwWztkTi8p+g3aaC2rFXOZGwLc8eAMBqzRu7eT8kWoOJLWLTW0Eo Z5lYOlCFWymONdQ75UX7d1w0T/hT7irv6Jb4eLBvu7abb5vVm52aXVMSJ1GMw0Dbzqsr +1z7/IHpZr9TOWWv65z2G7cezkDsdmOF3T3T+GedPiWIaC/Kuy6PLSFoobdSxJzll2MD g1noklYQNjPoDJtmIYCLWo0ww78Wd6QJJJ0qNcx7/a9E59ARcqxtApq0JG/1pIkk/aOb ezm4wy13mbTPlO+a9FFwfpQuhkNR1dmeg9ddTlU2Pq0Tpw9j5c0vXUUJGHEIdY9VbyGW 1hlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681942738; x=1684534738; 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=LnnJUnDn5Gg0VxA4G2224aJuFesVpwMyXWuJ35Yh1EA=; b=ipgeHalmmic1jVHh+1ELpGPbdVcseU5daAKVD49Rjl1i8AjsKwTO+St0efcvpfJ1dV grAvVdbP460UH2kRfRy6vn5hzhqrHOWiW63KJLe08BNMZ8GbxBOWmdG3X+K1LYs4TNzG HPiWfpnJRGkgdg7rEBLxQ45nEZdKUs8E7d4gQDs31L3yS0n4LKMtbhT/SWUHgdwPocm4 eIrFqYJN8HnL2J9iWPWQEWZ7jK+DzUwOqrEgNK//679sIrfXuegNDK7p7iY98stJO8b5 sbJPwtrnAn8w8hCHT/rYzn36eiPHzllGZJ4pkCyHyjWRB5THXiibpNs1u0Ra1j4e1Iyd wuHQ== X-Gm-Message-State: AAQBX9fiXiVC4t23WOeIBm/ON5S2hzu98UfKfKPlg6+rEGo7h2Ki5XAK 1lYyWHARWRGjaTSGfXIhbDDSWm6ssl4wF0V8EhQ= X-Google-Smtp-Source: AKy350aHmxw5PVAlBIl9T883RKpr61ycrn0Nkrml8nQtl+RbpvzosCcY4lybRtm63StCXT7HS5Gtsg== X-Received: by 2002:a17:90b:38c6:b0:237:c209:5b14 with SMTP id nn6-20020a17090b38c600b00237c2095b14mr3820467pjb.22.1681942738315; Wed, 19 Apr 2023 15:18:58 -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.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Apr 2023 15:18:58 -0700 (PDT) From: Atish Patra To: linux-kernel@vger.kernel.org Cc: Rajnesh Kanwal , 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 , Uladzislau Rezki Subject: [RFC 40/48] RISC-V: COVE: Add COVH invalidate, validate, promote, demote and remove APIs. Date: Wed, 19 Apr 2023 15:17:08 -0700 Message-Id: <20230419221716.3603068-41-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-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 66DDA10000F X-Stat-Signature: tn7p4kgqaj4ntmoebtxh3dw3c47co9ky X-Rspam-User: X-HE-Tag: 1681942739-425182 X-HE-Meta: U2FsdGVkX18EUCiPLZtpYKrNyK6LIa6gFLUMNGEcDOtklzlI2WusoupCMk+23RWjLZnFXTMLyeHBZNB04hMo66IPI3QGbhRV1YHzLAxAxgW07OiHe27Mc6VlBrsbZYuYs/6cUsUCU2lK/k6sn7k7rB7hv4+P3kn5Xuqq/NnmaqI1BreYebBAbtzLiHc+xDpibBDThp8+JyY3dNGbLc85wKje3CUW2Rcozd//WcoNhyeVJz7o+Sc/Xn7hdxYEb2s66W+/N4QBDLOUOT0+TxXu/LDqerPwfRX1JlwGIdK8RnyqXxim6NMhaw+81YxNskcvjduvZ9i80I+fyE8vESm1bxcWWFdhQSYq4reTpSNVLi9awCZBbRwaPzgceS1CfN0ZN3dpEy7Q4487EdK3u8QAq2IGjh1V+iCJ8njYmvUUXusboG2GYyKRn1C7WYd8kxylsfVjWRRjw/KNpOq8AWQJg/Xdtw9hFJ1CIQQwhol/qNmPgvqMVodhpY3Hvle5Y5LL1SqiqWkmSoTsdmKK5at5Zw8H9PmQ8n4Rpd3s1gTR2MprvX9QjgapMy3BDIZO1EKkZcSTwWvmoZzMfJ2twdGHZ2xA7dxJsv4a1kZf3q9z+NqfrDIaDTHA0Z1naNTiu6ckNEgJxB20R5WBw90/Nsp1D13R9g5h5Wjll1TJSEgM6Df5E2VWVQcMzdv1AOez5mCaBntHnVWppXDqWy4xstCNIvVYWHRJqA9DfMx70/5zk6oic1nVlos8jzYIQU/XXLcGHtN3n8VHn2vRWedrBzEOJ3WqTcvm9SyhmQyoHI1lS29Xr9qPwWAUvUzOuETs0MtXd9ERftnzAoXKVo0Ta7qdFr+1StACZMas69cBU4nAwtjFe1xzOP9srRrXk3NGwELRg5Wh+w7w85RFpG20uHBeBUva+vje1FNxzNCn9z89kz0yQXdVNe8IDMsaVSex3gfbXi6zKMlDL1EWsdt+tCN oJv8jnK+ tIQHOulMFbQcs7YY4eC84Ydo/Whh4thV3/QNihQsn5s9oOLngvV4+Gi0J8LOGPnJfT19UNuMKTrJJEKDTtUnK4ske7I65XgmIt+YogXjnZ2gPHAtDPMc5EWIw2KpzW+VwP512RfN4N2HI2LKVGMNId2DqZ6aR6hH5AAYjmPgZHY5okOLRDd81TTvILd1qUfMjB+Npq7fC/dz6V+3HNe88PGDMrphRgig+WzrtN3IqcdQXCLPP3VGysQeMqw9KssQIMZfeW4Qk6PrpgQBW1mzzoe5OhaNVWLN1XSKRs7jAzdEc709zchiWzhvFymA1b0rRW0Inr04VrUO/cum7q0wCeLYIssnIgnz0dI82X8u6aq9mYhvtT1oV4z2bdIPf6/xAOJa9S6UQ4mOZWFenB2jLqTJIz1VVRVptAgZGqeOpjnRUvoJu/w3sSp/gBIYiBntGUNP5pyYgFoFNMN2RgDDC+uma7w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000027, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Rajnesh Kanwal SBI_EXT_COVH_TVM_INVALIDATE_PAGES: Invalidates the pages in the specified range of guest physical address space. The host can now work upon the range without TVM's interaction. Any access from TVM to the range will result in a page-fault which will be reported to the host. SBI_EXT_COVH_TVM_VALIDATE_PAGES: Marks the invalidated pages in the specified range of guest physical address space as present and TVM can now access the pages. SBI_EXT_COVH_TVM_PROMOTE_PAGES: Promotes a set of contiguous mappings to the requested page size. This is mainly to support huge-pages. SBI_EXT_COVH_TVM_DEMOTE_PAGES: Demotes a huge page mapping to a set of contiguous mappings at the target size. SBI_EXT_COVH_TVM_REMOVE_PAGES: Removes mappings from a TVM. The range to be unmapped must already have been invalidated and fenced, and must lie within a removable region of guest physical address space. Signed-off-by: Atish Patra Signed-off-by: Rajnesh Kanwal --- arch/riscv/include/asm/kvm_cove_sbi.h | 16 +++++++ arch/riscv/include/asm/sbi.h | 5 +++ arch/riscv/kvm/cove_sbi.c | 65 +++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/arch/riscv/include/asm/kvm_cove_sbi.h b/arch/riscv/include/asm/kvm_cove_sbi.h index 0759f70..b554a8d 100644 --- a/arch/riscv/include/asm/kvm_cove_sbi.h +++ b/arch/riscv/include/asm/kvm_cove_sbi.h @@ -59,6 +59,22 @@ int sbi_covh_create_tvm_vcpu(unsigned long tvmid, unsigned long tvm_vcpuid, int sbi_covh_run_tvm_vcpu(unsigned long tvmid, unsigned long tvm_vcpuid); +int sbi_covh_tvm_invalidate_pages(unsigned long tvmid, + unsigned long tvm_base_page_addr, + unsigned long len); +int sbi_covh_tvm_validate_pages(unsigned long tvmid, + unsigned long tvm_base_page_addr, + unsigned long len); +int sbi_covh_tvm_promote_page(unsigned long tvmid, + unsigned long tvm_base_page_addr, + enum sbi_cove_page_type ptype); +int sbi_covh_tvm_demote_page(unsigned long tvmid, + unsigned long tvm_base_page_addr, + enum sbi_cove_page_type ptype); +int sbi_covh_tvm_remove_pages(unsigned long tvmid, + unsigned long tvm_base_page_addr, + unsigned long len); + /* Functions related to CoVE Interrupt Management(COVI) Extension */ int sbi_covi_tvm_aia_init(unsigned long tvm_gid, struct sbi_cove_tvm_aia_params *tvm_aia_params); int sbi_covi_set_vcpu_imsic_addr(unsigned long tvm_gid, unsigned long vcpu_id, diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index e02ee75..03b0cc8 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -369,6 +369,11 @@ enum sbi_ext_covh_fid { SBI_EXT_COVH_TVM_CREATE_VCPU, SBI_EXT_COVH_TVM_VCPU_RUN, SBI_EXT_COVH_TVM_INITIATE_FENCE, + SBI_EXT_COVH_TVM_INVALIDATE_PAGES, + SBI_EXT_COVH_TVM_VALIDATE_PAGES, + SBI_EXT_COVH_TVM_PROMOTE_PAGE, + SBI_EXT_COVH_TVM_DEMOTE_PAGE, + SBI_EXT_COVH_TVM_REMOVE_PAGES, }; enum sbi_ext_covi_fid { diff --git a/arch/riscv/kvm/cove_sbi.c b/arch/riscv/kvm/cove_sbi.c index a8901ac..01dc260 100644 --- a/arch/riscv/kvm/cove_sbi.c +++ b/arch/riscv/kvm/cove_sbi.c @@ -405,3 +405,68 @@ int sbi_covh_run_tvm_vcpu(unsigned long tvmid, unsigned long vcpuid) return 0; } + +int sbi_covh_tvm_invalidate_pages(unsigned long tvmid, + unsigned long tvm_base_page_addr, + unsigned long len) +{ + struct sbiret ret = sbi_ecall(SBI_EXT_COVH, + SBI_EXT_COVH_TVM_INVALIDATE_PAGES, tvmid, + tvm_base_page_addr, len, 0, 0, 0); + if (ret.error) + return sbi_err_map_linux_errno(ret.error); + + return 0; +} + +int sbi_covh_tvm_validate_pages(unsigned long tvmid, + unsigned long tvm_base_page_addr, + unsigned long len) +{ + struct sbiret ret = sbi_ecall(SBI_EXT_COVH, + SBI_EXT_COVH_TVM_VALIDATE_PAGES, tvmid, + tvm_base_page_addr, len, 0, 0, 0); + if (ret.error) + return sbi_err_map_linux_errno(ret.error); + + return 0; +} + +int sbi_covh_tvm_promote_page(unsigned long tvmid, + unsigned long tvm_base_page_addr, + enum sbi_cove_page_type ptype) +{ + struct sbiret ret = sbi_ecall(SBI_EXT_COVH, + SBI_EXT_COVH_TVM_PROMOTE_PAGE, tvmid, + tvm_base_page_addr, ptype, 0, 0, 0); + if (ret.error) + return sbi_err_map_linux_errno(ret.error); + + return 0; +} + +int sbi_covh_tvm_demote_page(unsigned long tvmid, + unsigned long tvm_base_page_addr, + enum sbi_cove_page_type ptype) +{ + struct sbiret ret = sbi_ecall(SBI_EXT_COVH, + SBI_EXT_COVH_TVM_DEMOTE_PAGE, tvmid, + tvm_base_page_addr, ptype, 0, 0, 0); + if (ret.error) + return sbi_err_map_linux_errno(ret.error); + + return 0; +} + +int sbi_covh_tvm_remove_pages(unsigned long tvmid, + unsigned long tvm_base_page_addr, + unsigned long len) +{ + struct sbiret ret = sbi_ecall(SBI_EXT_COVH, + SBI_EXT_COVH_TVM_REMOVE_PAGES, tvmid, + tvm_base_page_addr, len, 0, 0, 0); + if (ret.error) + return sbi_err_map_linux_errno(ret.error); + + return 0; +} -- 2.25.1