[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200914112802.80611-1-wei.liu@kernel.org>
Date: Mon, 14 Sep 2020 11:27:44 +0000
From: Wei Liu <wei.liu@...nel.org>
To: Linux on Hyper-V List <linux-hyperv@...r.kernel.org>
Cc: virtualization@...ts.linux-foundation.org,
Linux Kernel List <linux-kernel@...r.kernel.org>,
Michael Kelley <mikelley@...rosoft.com>,
Vineeth Pillai <viremana@...ux.microsoft.com>,
Sunil Muthuswamy <sunilmut@...rosoft.com>,
Nuno Das Neves <nudasnev@...rosoft.com>,
Wei Liu <wei.liu@...nel.org>, x86@...nel.org,
"K. Y. Srinivasan" <kys@...rosoft.com>,
Haiyang Zhang <haiyangz@...rosoft.com>,
Stephen Hemminger <sthemmin@...rosoft.com>,
Samuel Ortiz <sameo@...ux.intel.com>
Subject: [PATCH RFC v1 00/18] Introducing Linux root partition support for Microsoft Hypervisor
Hi all
Here we propose this patch series to make Linux run as the root partition [0]
on Microsoft Hypervisor [1].
Microsoft wants to create a complete virtualization stack with Linux and
Microsoft Hypervisor. There will be a subsequent patch series to provide a
device node (/dev/mshv) such that userspace programs can create and run virtual
machines. We've also ported Cloud Hypervisor [3] over and have been able to
boot a Linux guest with Virtio devices since late July.
Being an RFC sereis, this implements only the absolutely necessary
components to get things running. I will break down this series a bit.
A large portion of this series consists of patches that augment hyperv-tlfs.h.
They should be rather uncontroversial and can be applied right away.
A few key things other than the changes to hyperv-tlfs.h:
1. Linux needs to setup existing Hyper-V facilities differently.
2. Linux needs to make a few hypercalls to bring up APs.
3. Interrupts are remapped by IOMMU, which is controlled by the hypervisor.
Linux needs to make hypercalls to map and unmap interrupts. This is
done by introducing a new MSI irqdomain and new irqchips.
#3 is perhaps the thing that we feel least confident about. We drew inspiration
from the Xen code in Linux. We are of course open to criticism and sugguestions
on how to make it better / acceptable to upstream.
We're aware of tglx's series to change some of the MSI code, so we may need to
change some of the code after that series is upstreamed. But it wouldn't hurt
to throw this out as soon as possible for feedback.
Comments and suggestions are welcome.
Thanks,
Wei.
[0] Just think of it like Xen's Dom0.
[1] 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.
[3] https://github.com/cloud-hypervisor/
Cc: x86@...nel.org
Cc: "K. Y. Srinivasan" <kys@...rosoft.com>
Cc: Haiyang Zhang <haiyangz@...rosoft.com>
Cc: Stephen Hemminger <sthemmin@...rosoft.com>
Cc: Sunil Muthuswamy <sunilmut@...rosoft.com>
Cc: Nuno Das Neves <nudasnev@...rosoft.com>
Cc: Vineeth Pillai <viremana@...ux.microsoft.com>
Cc: Samuel Ortiz <sameo@...ux.intel.com>
Wei Liu (18):
asm-generic/hyperv: change HV_CPU_POWER_MANAGEMENT to
HV_CPU_MANAGEMENT
x86/hyperv: detect if Linux is the root partition
Drivers: hv: vmbus: skip VMBus initialization if Linux is root
iommu/hyperv: don't setup IRQ remapping when running as root
clocksource/hyperv: use MSR-based access if running as root
x86/hyperv: allocate output arg pages if required
x86/hyperv: extract partition ID from Microsoft Hypervisor if
necessary
x86/hyperv: handling hypercall page setup for root
x86/hyperv: provide a bunch of helper functions
x86/hyperv: implement and use hv_smp_prepare_cpus
asm-generic/hyperv: update hv_msi_entry
asm-generic/hyperv: update hv_interrupt_entry
asm-generic/hyperv: introduce hv_device_id and auxiliary structures
asm-generic/hyperv: import data structures for mapping device
interrupts
x86/apic/msi: export pci_msi_get_hwirq
x86/hyperv: implement MSI domain for root partition
x86/ioapic: export a few functions and data structures via io_apic.h
x86/hyperv: handle IO-APIC when running as root
arch/x86/hyperv/Makefile | 4 +-
arch/x86/hyperv/hv_init.c | 126 +++++-
arch/x86/hyperv/hv_proc.c | 209 ++++++++++
arch/x86/hyperv/irqdomain.c | 580 ++++++++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 23 ++
arch/x86/include/asm/io_apic.h | 20 +
arch/x86/include/asm/mshyperv.h | 13 +-
arch/x86/include/asm/msi.h | 3 +
arch/x86/kernel/apic/io_apic.c | 28 +-
arch/x86/kernel/apic/msi.c | 3 +-
arch/x86/kernel/cpu/mshyperv.c | 43 +++
drivers/clocksource/hyperv_timer.c | 3 +
drivers/hv/vmbus_drv.c | 3 +
drivers/iommu/hyperv-iommu.c | 3 +-
drivers/pci/controller/pci-hyperv.c | 2 +-
include/asm-generic/hyperv-tlfs.h | 243 +++++++++++-
16 files changed, 1268 insertions(+), 38 deletions(-)
create mode 100644 arch/x86/hyperv/hv_proc.c
create mode 100644 arch/x86/hyperv/irqdomain.c
--
2.20.1
Powered by blists - more mailing lists