Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp927530rdb; Tue, 19 Sep 2023 14:50:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE0q9jV73m7Ogb0xVrnXvTWE+p5nRD9CklAvcDNa5ZpI1+/V0CFTMCsXh4aOEbqbJY+1/wY X-Received: by 2002:a17:90a:d3c9:b0:273:ed60:ad52 with SMTP id d9-20020a17090ad3c900b00273ed60ad52mr980982pjw.37.1695160247033; Tue, 19 Sep 2023 14:50:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695160247; cv=none; d=google.com; s=arc-20160816; b=HcXM7pMUGyw4ZzqgeALfQDKB2mKXMKlYZiw3Kp5mmRLlCtushBIkOmtU87dGBkV/3J LLyB0gvVD0ySknkGaaPBaZrDG7t88bCoHNFq5O+A1Q9lbY5jqHsvPngAbs5pakKlh8xf RTXVrrFHCDNwgwnZORhtEcY1B36zu17sDifjjPmiDo94sshGCUZLAif5kRhr3nou13Tf E3EvQBN25qqCtl4IefnVjilUbb+gsFoVm4JH7jyIus09VezCz7HnrmNHk7h/NoajAYA0 HldZjl6ji/5wWzZGEEOqKsDaY+LsgWQh+nt7N1JWU2XaqdAdnV31eaWBcTnsX/MZuPuc MvLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from :dkim-signature; bh=1jvjjzw4AS24CCKpJjJwLW1RVXK5JBfjv7SdIIaHTYk=; fh=n5ydU6TkQ6Og/NSZlRBqdYxtaVeoEXoKewtszzn0OGg=; b=zx1Imu1+3cOP0SCHHXkOKlkEleQ+JXkaQM57lzmVtRe0Dcu0OjeAWYMRU7QYDx9FYV 4rJkPgErm1KQRDJvN0Q8eqSm2NJHBzkT2SZpHSs8PDapJiqWHuYI3/cYaX4CBckFmWk9 W8CUxuvjWIZFpqUBeKsWikT7E0gJ9labhaWQV9QZGvU8oTBcBON/Apv21xyOhwxvItUJ ThlOOqU53fX6HeCryXksk+icl7TIMAqDF6OOOCLJdEzs++aGZsca5b5f4LChrkVDBgok Qq9i9lcvI+QkOl/DgrFv7OYfVI14RpCuG4lF+TGccUQH8Zesb9GarGqU8VhNGm3kwZeg 8KvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b="Ll/hZYKG"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id pg15-20020a17090b1e0f00b0025eeb3cc4b2si131162pjb.9.2023.09.19.14.50.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 14:50:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b="Ll/hZYKG"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 619DE81DE3BF; Tue, 19 Sep 2023 04:13:26 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232138AbjISLNL (ORCPT + 99 others); Tue, 19 Sep 2023 07:13:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51600 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232003AbjISLM5 (ORCPT ); Tue, 19 Sep 2023 07:12:57 -0400 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C193F1; Tue, 19 Sep 2023 04:12:49 -0700 (PDT) X-UUID: 7294f6b056dd11ee8051498923ad61e6-20230919 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:MIME-Version:Message-ID:Date:Subject:CC:To:From; bh=1jvjjzw4AS24CCKpJjJwLW1RVXK5JBfjv7SdIIaHTYk=; b=Ll/hZYKGEYRpDHzoj0DNx6kCiGoDrpJPwoFM1hpeJWT+tHXJYWKPeK/C7MKmQxzHZXZS4Y+8I2gSeDbLRmzK1bM3XDo3c5Gu3EKWDIOy5f4dt7sr8MMYDY8ay2p6LdAucrJB6quPDG1osuYskDa8bNiSMjC5+qisyD+yPYGP+98=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.32,REQID:510aed20-c586-44aa-96b1-228c9ec68769,IP:0,U RL:0,TC:0,Content:-25,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTIO N:release,TS:-25 X-CID-META: VersionHash:5f78ec9,CLOUDID:63581e14-4929-4845-9571-38c601e9c3c9,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR:NO, DKR:0,DKP:0,BRR:0,BRE:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULS X-UUID: 7294f6b056dd11ee8051498923ad61e6-20230919 Received: from mtkmbs10n1.mediatek.inc [(172.21.101.34)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 954853373; Tue, 19 Sep 2023 19:12:40 +0800 Received: from mtkmbs13n1.mediatek.inc (172.21.101.193) by mtkmbs13n2.mediatek.inc (172.21.101.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Tue, 19 Sep 2023 19:12:39 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkmbs13n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Tue, 19 Sep 2023 19:12:39 +0800 From: Yi-De Wu To: Yingshiuan Pan , Ze-Yu Wang , Yi-De Wu , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Corbet , Catalin Marinas , Will Deacon , Matthias Brugger , AngeloGioacchino Del Regno CC: Arnd Bergmann , , , , , , David Bradil , Trilok Soni , Jade Shih , Ivan Tseng , My Chuang , Kevenny Hsieh , Willix Yeh Subject: [PATCH v6 00/15] GenieZone hypervisor drivers Date: Tue, 19 Sep 2023 19:11:55 +0800 Message-ID: <20230919111210.19615-1-yi-de.wu@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 19 Sep 2023 04:13:26 -0700 (PDT) This series is based on linux-next, tag: next-20230919. GenieZone hypervisor(gzvm) is a type-1 hypervisor that supports various virtual machine types and provides security features such as TEE-like scenarios and secure boot. It can create guest VMs for security use cases and has virtualization capabilities for both platform and interrupt. Although the hypervisor can be booted independently, it requires the assistance of GenieZone hypervisor kernel driver(gzvm-ko) to leverage the ability of Linux kernel for vCPU scheduling, memory management, inter-VM communication and virtio backend support. Changes in v6: - Rebase based on kernel 6.6-rc1 - Keep dt solution and leave the reasons in the commit message - Remove arch/arm64/include/uapi/asm/gzvm_arch.h due to simplicity - Remove resampler in drivers/virt/geniezone/gzvm_irqfd.c due to defeature for now - Remove PPI in arch/arm64/geniezone/vgic.c - Refactor vm related components into 3 smaller patches, namely adding vm support, setting user memory region and checking vm capability - Refactor vcpu and vm component to remove unnecessary ARM prefix - Add demand paging to fix crash on destroying memory page, acclerate on booting and support ballooning deflate - Add memory pin/unpin memory mechanism to support protected VM - Add block-based demand paging for performance concern - Response to reviewers and fix coding style accordingly Changes in v5: https://lore.kernel.org/all/20230727080005.14474-1-yi-de.wu@mediatek.com/ - Add dt solution back for device initialization - Add GZVM_EXIT_GZ reason for gzvm_vcpu_run() - Add patch for guest page fault handler - Add patch for supporitng pin/unpin memory - Remove unused enum members, namely GZVM_FUNC_GET_REGS and GZVM_FUNC_SET_REGS - Use dev_debug() for debugging when platform device is available, and use pr_debug() otherwise - Response to reviewers and fix bugs accordingly Changes in v4: https://lore.kernel.org/lkml/20230609085214.31071-1-yi-de.wu@mediatek.com/ - Add macro to set VM as protected without triggering pvmfw in AVF. - Add support to pass dtb config to hypervisor. - Add support for virtual timer. - Add UAPI to pass memory region metadata to hypervisor. - Define our own macros for ARM's interrupt number - Elaborate more on GenieZone hyperivsor in documentation - Fix coding style. - Implement our own module for coverting ipa to pa - Modify the way of initializing device from dt to a more discoverable way - Move refactoring changes into indepedent patches. Changes in v3: https://lore.kernel.org/all/20230512080405.12043-1-yi-de.wu@mediatek.com/ - Refactor: separate arch/arm64/geniezone/gzvm_arch.c into vm.c/vcpu.c/vgic.c - Remove redundant functions - Fix reviewer's comments Changes in v2: https://lore.kernel.org/all/20230428103622.18291-1-yi-de.wu@mediatek.com/ - Refactor: move to drivers/virt/geniezone - Refactor: decouple arch-dependent and arch-independent - Check pending signal before entering guest context - Fix reviewer's comments Initial Commit in v1: https://lore.kernel.org/all/20230413090735.4182-1-yi-de.wu@mediatek.com/ Yi-De Wu (15): docs: geniezone: Introduce GenieZone hypervisor dt-bindings: hypervisor: Add MediaTek GenieZone hypervisor virt: geniezone: Add GenieZone hypervisor driver virt: geniezone: Add vm support virt: geniezone: Add set_user_memory_region for vm virt: geniezone: Add vm capability check virt: geniezone: Add vcpu support virt: geniezone: Add irqchip support for virtual interrupt injection virt: geniezone: Add irqfd support virt: geniezone: Add ioeventfd support virt: geniezone: Add memory region support virt: geniezone: Add dtb config support virt: geniezone: Add demand paging support virt: geniezone: Add memory pin/unpin support virt: geniezone: Add block-based demand paging support .../hypervisor/mediatek,geniezone-hyp.yaml | 31 ++ Documentation/virt/geniezone/introduction.rst | 86 ++++ Documentation/virt/index.rst | 1 + MAINTAINERS | 11 + arch/arm64/Kbuild | 1 + arch/arm64/geniezone/Makefile | 9 + arch/arm64/geniezone/gzvm_arch_common.h | 114 +++++ arch/arm64/geniezone/vcpu.c | 80 +++ arch/arm64/geniezone/vgic.c | 50 ++ arch/arm64/geniezone/vm.c | 380 ++++++++++++++ drivers/virt/Kconfig | 2 + drivers/virt/geniezone/Kconfig | 16 + drivers/virt/geniezone/Makefile | 12 + drivers/virt/geniezone/gzvm_common.h | 12 + drivers/virt/geniezone/gzvm_exception.c | 67 +++ drivers/virt/geniezone/gzvm_ioeventfd.c | 276 +++++++++++ drivers/virt/geniezone/gzvm_irqfd.c | 382 ++++++++++++++ drivers/virt/geniezone/gzvm_main.c | 147 ++++++ drivers/virt/geniezone/gzvm_mmu.c | 277 +++++++++++ drivers/virt/geniezone/gzvm_vcpu.c | 281 +++++++++++ drivers/virt/geniezone/gzvm_vm.c | 468 ++++++++++++++++++ include/linux/gzvm_drv.h | 204 ++++++++ include/uapi/linux/gzvm.h | 395 +++++++++++++++ 23 files changed, 3302 insertions(+) create mode 100644 Documentation/devicetree/bindings/hypervisor/mediatek,geniezone-hyp.yaml create mode 100644 Documentation/virt/geniezone/introduction.rst create mode 100644 arch/arm64/geniezone/Makefile create mode 100644 arch/arm64/geniezone/gzvm_arch_common.h create mode 100644 arch/arm64/geniezone/vcpu.c create mode 100644 arch/arm64/geniezone/vgic.c create mode 100644 arch/arm64/geniezone/vm.c create mode 100644 drivers/virt/geniezone/Kconfig create mode 100644 drivers/virt/geniezone/Makefile create mode 100644 drivers/virt/geniezone/gzvm_common.h create mode 100644 drivers/virt/geniezone/gzvm_exception.c create mode 100644 drivers/virt/geniezone/gzvm_ioeventfd.c create mode 100644 drivers/virt/geniezone/gzvm_irqfd.c create mode 100644 drivers/virt/geniezone/gzvm_main.c create mode 100644 drivers/virt/geniezone/gzvm_mmu.c create mode 100644 drivers/virt/geniezone/gzvm_vcpu.c create mode 100644 drivers/virt/geniezone/gzvm_vm.c create mode 100644 include/linux/gzvm_drv.h create mode 100644 include/uapi/linux/gzvm.h -- 2.18.0