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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=no 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 14B4BC433DF for ; Tue, 18 Aug 2020 13:28:35 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 8B38920786 for ; Tue, 18 Aug 2020 13:28:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="v7viA9tB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8B38920786 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 542E04BC43; Tue, 18 Aug 2020 09:28:33 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@kernel.org Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9Xi52sEejx1X; Tue, 18 Aug 2020 09:28:32 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 2A1574BC56; Tue, 18 Aug 2020 09:28:32 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 73B394BA9D for ; Tue, 18 Aug 2020 09:28:31 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7HaNNwafuB8K for ; Tue, 18 Aug 2020 09:28:30 -0400 (EDT) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 11D614BA0F for ; Tue, 18 Aug 2020 09:28:30 -0400 (EDT) Received: from localhost.localdomain (236.31.169.217.in-addr.arpa [217.169.31.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 46027206B5; Tue, 18 Aug 2020 13:28:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1597757308; bh=unZZ+qYTe7hOlLuK4u2pxTS7GTgM1V2mJWz2sQZXARo=; h=From:To:Cc:Subject:Date:From; b=v7viA9tBD0R30uy6PP/YCLt2v9BnCtBMMibHSHoduNOraT8IGKIP7AeMSgjA60Ele UEVWTGv1PEGlCDlim23OzH60tQELgdd/ZWAZeLLw+eDYUBi/94/MS9EQ5PtTFiCIlQ FtnC/6ix1k5VVjgHSwh2rWae71EGRqfUf0Pg10Ms= From: Will Deacon To: kvmarm@lists.cs.columbia.edu Subject: [PATCH v2 00/22] KVM: arm64: Rewrite page-table code and fault handling Date: Tue, 18 Aug 2020 14:27:56 +0100 Message-Id: <20200818132818.16065-1-will@kernel.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Cc: kernel-team@android.com, Marc Zyngier , Catalin Marinas , Will Deacon , linux-arm-kernel@lists.infradead.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu Hi everyone, This is version two of the patches rewriting KVM's page-table code on arm64 that I previously posted here: https://lore.kernel.org/r/20200730153406.25136-1-will@kernel.org Changes since v1 include: * Removed opaque cookie in favour of exposing 'struct kvm_pgtable' * Moved code under hyp/ * Simplified stage-1 PGD allocation/free * Tested (and consequently fixed) for 64k pages * Tested (and consequently fixed) MMU notifiers * Rebased onto Marc's kvm-arm64/pt-rework-base branch * Included updated versions of the memcache patches I posted at [1] We've successfully got this running at EL2 as part of Android's "Protected KVM" project, and we'll follow up with those patches once this part has settled down. Please consider for 5.10. Cheers, Will [1] https://lore.kernel.org/r/20200723110227.16001-1-will@kernel.org Cc: Marc Zyngier Cc: Quentin Perret Cc: James Morse Cc: Suzuki Poulose Cc: Catalin Marinas Cc: kernel-team@android.com Cc: linux-arm-kernel@lists.infradead.org --->8 Quentin Perret (4): KVM: arm64: Add support for stage-2 write-protect in generic page-table KVM: arm64: Convert write-protect operation to generic page-table API KVM: arm64: Add support for stage-2 cache flushing in generic page-table KVM: arm64: Convert memslot cache-flushing code to generic page-table API Will Deacon (18): KVM: arm64: Don't free memcache pages in kvm_phys_addr_ioremap() KVM: arm64: Remove kvm_mmu_free_memory_caches() KVM: arm64: Add stand-alone page-table walker infrastructure KVM: arm64: Add support for creating kernel-agnostic stage-1 page tables KVM: arm64: Use generic allocator for hyp stage-1 page-tables KVM: arm64: Add support for creating kernel-agnostic stage-2 page tables KVM: arm64: Add support for stage-2 map()/unmap() in generic page-table KVM: arm64: Convert kvm_phys_addr_ioremap() to generic page-table API KVM: arm64: Convert kvm_set_spte_hva() to generic page-table API KVM: arm64: Convert unmap_stage2_range() to generic page-table API KVM: arm64: Add support for stage-2 page-aging in generic page-table KVM: arm64: Convert page-aging and access faults to generic page-table API KVM: arm64: Add support for relaxing stage-2 perms in generic page-table code KVM: arm64: Convert user_mem_abort() to generic page-table API KVM: arm64: Check the pgt instead of the pgd when modifying page-table KVM: arm64: Remove unused page-table code KVM: arm64: Remove unused 'pgd' field from 'struct kvm_s2_mmu' KVM: arm64: Don't constrain maximum IPA size based on host configuration arch/arm64/include/asm/kvm_host.h | 2 +- arch/arm64/include/asm/kvm_mmu.h | 221 +--- arch/arm64/include/asm/kvm_pgtable.h | 279 ++++ arch/arm64/include/asm/pgtable-hwdef.h | 23 - arch/arm64/include/asm/pgtable-prot.h | 19 - arch/arm64/include/asm/stage2_pgtable.h | 215 ---- arch/arm64/kvm/arm.c | 2 +- arch/arm64/kvm/hyp/Makefile | 2 +- arch/arm64/kvm/hyp/pgtable.c | 860 +++++++++++++ arch/arm64/kvm/mmu.c | 1567 +++-------------------- arch/arm64/kvm/reset.c | 38 +- 11 files changed, 1326 insertions(+), 1902 deletions(-) create mode 100644 arch/arm64/include/asm/kvm_pgtable.h create mode 100644 arch/arm64/kvm/hyp/pgtable.c -- 2.28.0.220.ged08abb693-goog _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm 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 X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=no 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 B47A8C433E3 for ; Tue, 18 Aug 2020 13:30:45 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 815E620738 for ; Tue, 18 Aug 2020 13:30:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="QWj1zbOA"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="v7viA9tB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 815E620738 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=ahxQnnhTa+a/jctjezosRBm/BNE5lyliy4W3eNz1mTk=; b=QWj1zbOArZIkfcOWXKhN6Y84rx Xt5tQs60/ZNXdUNbt4mWrzgQFO3aT7p7MC/90CjH/ETVgJTC2m7oqWUMDJ7xL7dD+CLnWZxERt6dE bwD25jSI2PNb36K5LTYw1zrVfxcReYM7y0zI7qafx6whvmEGvD3kB+IgzDQN+UuDAoJjvtbeaiouY hiXHJMtrU+PmsW/2K+AWyVxfhE1cq++AP9sLCkPBbrodkMbO8Mx3MmRFEEHM/MkAq9YKzTWhE+xG3 GkVDXZ9zN1Tl6w+owHtLU+OEpe4V61O2KZfuJMEMmfIqMueCZfnIc/jVZFTBlCVtZXZT34QCQlxP2 Q00yUI+g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k81fE-0007fl-6L; Tue, 18 Aug 2020 13:28:32 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k81fB-0007fB-Na for linux-arm-kernel@lists.infradead.org; Tue, 18 Aug 2020 13:28:30 +0000 Received: from localhost.localdomain (236.31.169.217.in-addr.arpa [217.169.31.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 46027206B5; Tue, 18 Aug 2020 13:28:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1597757308; bh=unZZ+qYTe7hOlLuK4u2pxTS7GTgM1V2mJWz2sQZXARo=; h=From:To:Cc:Subject:Date:From; b=v7viA9tBD0R30uy6PP/YCLt2v9BnCtBMMibHSHoduNOraT8IGKIP7AeMSgjA60Ele UEVWTGv1PEGlCDlim23OzH60tQELgdd/ZWAZeLLw+eDYUBi/94/MS9EQ5PtTFiCIlQ FtnC/6ix1k5VVjgHSwh2rWae71EGRqfUf0Pg10Ms= From: Will Deacon To: kvmarm@lists.cs.columbia.edu Subject: [PATCH v2 00/22] KVM: arm64: Rewrite page-table code and fault handling Date: Tue, 18 Aug 2020 14:27:56 +0100 Message-Id: <20200818132818.16065-1-will@kernel.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200818_092830_007217_A0A4C634 X-CRM114-Status: GOOD ( 14.68 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kernel-team@android.com, Suzuki Poulose , Marc Zyngier , Quentin Perret , James Morse , Catalin Marinas , Will Deacon , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi everyone, This is version two of the patches rewriting KVM's page-table code on arm64 that I previously posted here: https://lore.kernel.org/r/20200730153406.25136-1-will@kernel.org Changes since v1 include: * Removed opaque cookie in favour of exposing 'struct kvm_pgtable' * Moved code under hyp/ * Simplified stage-1 PGD allocation/free * Tested (and consequently fixed) for 64k pages * Tested (and consequently fixed) MMU notifiers * Rebased onto Marc's kvm-arm64/pt-rework-base branch * Included updated versions of the memcache patches I posted at [1] We've successfully got this running at EL2 as part of Android's "Protected KVM" project, and we'll follow up with those patches once this part has settled down. Please consider for 5.10. Cheers, Will [1] https://lore.kernel.org/r/20200723110227.16001-1-will@kernel.org Cc: Marc Zyngier Cc: Quentin Perret Cc: James Morse Cc: Suzuki Poulose Cc: Catalin Marinas Cc: kernel-team@android.com Cc: linux-arm-kernel@lists.infradead.org --->8 Quentin Perret (4): KVM: arm64: Add support for stage-2 write-protect in generic page-table KVM: arm64: Convert write-protect operation to generic page-table API KVM: arm64: Add support for stage-2 cache flushing in generic page-table KVM: arm64: Convert memslot cache-flushing code to generic page-table API Will Deacon (18): KVM: arm64: Don't free memcache pages in kvm_phys_addr_ioremap() KVM: arm64: Remove kvm_mmu_free_memory_caches() KVM: arm64: Add stand-alone page-table walker infrastructure KVM: arm64: Add support for creating kernel-agnostic stage-1 page tables KVM: arm64: Use generic allocator for hyp stage-1 page-tables KVM: arm64: Add support for creating kernel-agnostic stage-2 page tables KVM: arm64: Add support for stage-2 map()/unmap() in generic page-table KVM: arm64: Convert kvm_phys_addr_ioremap() to generic page-table API KVM: arm64: Convert kvm_set_spte_hva() to generic page-table API KVM: arm64: Convert unmap_stage2_range() to generic page-table API KVM: arm64: Add support for stage-2 page-aging in generic page-table KVM: arm64: Convert page-aging and access faults to generic page-table API KVM: arm64: Add support for relaxing stage-2 perms in generic page-table code KVM: arm64: Convert user_mem_abort() to generic page-table API KVM: arm64: Check the pgt instead of the pgd when modifying page-table KVM: arm64: Remove unused page-table code KVM: arm64: Remove unused 'pgd' field from 'struct kvm_s2_mmu' KVM: arm64: Don't constrain maximum IPA size based on host configuration arch/arm64/include/asm/kvm_host.h | 2 +- arch/arm64/include/asm/kvm_mmu.h | 221 +--- arch/arm64/include/asm/kvm_pgtable.h | 279 ++++ arch/arm64/include/asm/pgtable-hwdef.h | 23 - arch/arm64/include/asm/pgtable-prot.h | 19 - arch/arm64/include/asm/stage2_pgtable.h | 215 ---- arch/arm64/kvm/arm.c | 2 +- arch/arm64/kvm/hyp/Makefile | 2 +- arch/arm64/kvm/hyp/pgtable.c | 860 +++++++++++++ arch/arm64/kvm/mmu.c | 1567 +++-------------------- arch/arm64/kvm/reset.c | 38 +- 11 files changed, 1326 insertions(+), 1902 deletions(-) create mode 100644 arch/arm64/include/asm/kvm_pgtable.h create mode 100644 arch/arm64/kvm/hyp/pgtable.c -- 2.28.0.220.ged08abb693-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel