Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp776146pxj; Fri, 28 May 2021 15:44:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwNmhAUZM7+qLpoI3WlSoyH3YfIdC9TPEn5ChLdQoXYc4ld4cDlmekUnYn3QJSQNz71CZ4P X-Received: by 2002:a05:6638:44b:: with SMTP id r11mr10660946jap.85.1622241870191; Fri, 28 May 2021 15:44:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622241870; cv=none; d=google.com; s=arc-20160816; b=s6xbn1FjJUiCXV37WrExlx3pvCC4GNN+knnyia1D6mFkHQAr5HzklgzhOHObDAuVuy SjpNP8+AqS15tCz5u531NfaRDdlzXSIf/HQVyGCFMHSEhssgXqAqySP8yrV7uCyxJs2B dlEVHg4S9E8yUYjI8dHjfg6pWwi2AVHg/ckenotmfs3xRpuHt3/2y4IaSDOL8uHJi29/ mv9QsPAavH7C57UPlrm5bhqWnxXIQMfTSdGharlyJzACxh1Yct/RQs0TS/vd8S1pUVbP D6KB34e+VpyO7FiOnR/ii27WJ16BfkVZ/YLLYRUzOmBFG3hLx4VL4gqL+lVh82KBD9NV BUEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=LId5jFjtAstOF7XqIEEYkqZMWrzY32BUiTvVgQERhNc=; b=uBJpaxmA0jWTAWN1YxbRtwQ4b3UJiswiTd3GYJG639JcrdSEuxW58SBDqg8bHtJU7G Zk5cy6257n6saDaxrh0KBRKKJjrnNi7CnYw++LoE9mrviSNDPbKYjauecH+jOcQ2Olyg h5UVStsCzWiBgT/zTNn1VcRSTKec/6oGVU//GJryqGQE1ei/evlDaDQ2TopSiG2bt2EH +m8bjatWlZnCbr8KdZ5glnQioZh3kvAR0KtMGpKd+VNOCuZskdhm4lMVsPbsQ4GdhNDb RF2I2tfSTJ3LVwvN21CnDDhuGMKU7KJ3BWW16HdKZtuyOdeqLMAmJJrNJhsM+x6tR8zr 5pJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=syeh0ubA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j10si6436888iom.77.2021.05.28.15.44.16; Fri, 28 May 2021 15:44:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=syeh0ubA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229726AbhE1WpS (ORCPT + 99 others); Fri, 28 May 2021 18:45:18 -0400 Received: from linux.microsoft.com ([13.77.154.182]:55800 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229547AbhE1WpR (ORCPT ); Fri, 28 May 2021 18:45:17 -0400 Received: from linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net (linux.microsoft.com [13.77.154.182]) by linux.microsoft.com (Postfix) with ESMTPSA id 245C520B7188; Fri, 28 May 2021 15:43:42 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 245C520B7188 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1622241822; bh=LId5jFjtAstOF7XqIEEYkqZMWrzY32BUiTvVgQERhNc=; h=From:To:Cc:Subject:Date:From; b=syeh0ubADcd8hPJ1oAsyOaYdSGR1PlN6Dg1Ar8mRiBP1e6f7u+a2Jjd/o+492Lc5M 1X5pyp9fzidMzLAr9xrIp4vsFLwqCOjfhCvuA66kjUsU7pgCVQM+r/uE9RcYRcrwqy Y8jydwzZf3dys8AsmCL1TxzC7Az6iE7wG91X7Jug= From: Nuno Das Neves To: linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Cc: virtualization@lists.linux-foundation.org, mikelley@microsoft.com, viremana@linux.microsoft.com, sunilmut@microsoft.com, wei.liu@kernel.org, vkuznets@redhat.com, ligrassi@microsoft.com, kys@microsoft.com Subject: [PATCH 00/19] Microsoft Hypervisor root partition ioctl interface Date: Fri, 28 May 2021 15:43:20 -0700 Message-Id: <1622241819-21155-1-git-send-email-nunodasneves@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch series provides a userspace interface for creating and running guest virtual machines while running on the Microsoft Hypervisor [0]. Since managing guest machines can only be done when Linux is the root partition, this series depends on Wei Liu's patch series merged in 5.12: https://lore.kernel.org/linux-hyperv/20210203150435.27941-1-wei.liu@kernel.org/ The first two patches provide some helpers for converting hypervisor status codes to linux error codes, and printing hypervisor status codes to dmesg for debugging. Hyper-V related headers asm-generic/hyperv-tlfs.h and x86/asm/hyperv-tlfs.h are split into uapi and non-uapi. The uapi versions contain structures used in both the ioctl interface and the kernel. The mshv API is introduced in drivers/hv/mshv_main.c. As each interface is introduced, documentation is added in Documentation/virt/mshv/api.rst. The API is file-desciptor based, like KVM. The entry point is /dev/mshv. /dev/mshv ioctls: MSHV_CHECK_EXTENSION MSHV_CREATE_PARTITION Partition (vm) ioctls: MSHV_MAP_GUEST_MEMORY, MSHV_UNMAP_GUEST_MEMORY MSHV_INSTALL_INTERCEPT MSHV_ASSERT_INTERRUPT MSHV_GET_PARTITION_PROPERTY, MSHV_SET_PARTITION_PROPERTY MSHV_CREATE_VP Vp (vcpu) ioctls: MSHV_GET_VP_REGISTERS, MSHV_SET_VP_REGISTERS MSHV_RUN_VP MSHV_GET_VP_STATE, MSHV_SET_VP_STATE MSHV_TRANSLATE_GVA mmap() (register page) [0] Hyper-V is more well-known, but it really refers to the whole stack including the hypervisor and other components that run in Windows kernel and userspace. Changes since RFC: 1. Moved code from virt/mshv to drivers/hv 2. Split hypercall helper functions and synic code to hv_call.c and hv_synic.c 3. MSHV_REQUEST_VERSION ioctl replaced with MSHV_CHECK_EXTENSION 3. Numerous suggestions, fixes, style changes, etc from Michael Kelley, Vitaly Kuznetsov, Wei Liu, and Vineeth Pillai 4. Added patch to enable hypervisor enlightenments on partition creation 5. Added Wei Liu's patch for GVA to GPA translation Nuno Das Neves (18): x86/hyperv: convert hyperv statuses to linux error codes asm-generic/hyperv: convert hyperv statuses to strings drivers/hv: minimal mshv module (/dev/mshv/) drivers/hv: check extension ioctl drivers/hv: create partition ioctl drivers/hv: create, initialize, finalize, delete partition hypercalls drivers/hv: withdraw memory hypercall drivers/hv: map and unmap guest memory drivers/hv: create vcpu ioctl drivers/hv: get and set vcpu registers ioctls drivers/hv: set up synic pages for intercept messages drivers/hv: run vp ioctl and isr drivers/hv: install intercept ioctl drivers/hv: assert interrupt ioctl drivers/hv: get and set vp state ioctls drivers/hv: mmap vp register page drivers/hv: get and set partition property ioctls drivers/hv: Add enlightenment bits to create partition ioctl Wei Liu (1): drivers/hv: Translate GVA to GPA .../userspace-api/ioctl/ioctl-number.rst | 2 + Documentation/virt/mshv/api.rst | 173 +++ arch/x86/hyperv/Makefile | 1 + arch/x86/hyperv/hv_init.c | 2 +- arch/x86/hyperv/hv_proc.c | 42 +- arch/x86/include/asm/hyperv-tlfs.h | 15 +- arch/x86/include/asm/mshyperv.h | 1 + arch/x86/include/uapi/asm/hyperv-tlfs.h | 1274 +++++++++++++++++ arch/x86/kernel/cpu/mshyperv.c | 16 + drivers/hv/Kconfig | 18 + drivers/hv/Makefile | 3 + drivers/hv/hv_call.c | 744 ++++++++++ drivers/hv/hv_synic.c | 181 +++ drivers/hv/mshv.h | 120 ++ drivers/hv/mshv_main.c | 1153 +++++++++++++++ include/asm-generic/hyperv-tlfs.h | 353 +++-- include/asm-generic/mshyperv.h | 11 + include/linux/mshv.h | 61 + include/uapi/asm-generic/hyperv-tlfs.h | 242 ++++ include/uapi/linux/mshv.h | 117 ++ 20 files changed, 4384 insertions(+), 145 deletions(-) create mode 100644 Documentation/virt/mshv/api.rst create mode 100644 arch/x86/include/uapi/asm/hyperv-tlfs.h create mode 100644 drivers/hv/hv_call.c create mode 100644 drivers/hv/hv_synic.c create mode 100644 drivers/hv/mshv.h create mode 100644 drivers/hv/mshv_main.c create mode 100644 include/linux/mshv.h create mode 100644 include/uapi/asm-generic/hyperv-tlfs.h create mode 100644 include/uapi/linux/mshv.h -- 2.25.1