Re: [PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2021-02-02 Thread Wei Liu
On Tue, Feb 02, 2021 at 10:40:43AM +, David Woodhouse wrote:
> On Tue, 2020-12-15 at 16:42 +, Wei Liu wrote:
> > On Tue, Dec 15, 2020 at 04:25:03PM +0100, Enrico Weigelt, metux IT consult 
> > wrote:
> > > On 03.12.20 00:22, Wei Liu wrote:
> > > 
> > > Hi,
> > > 
> > > > I don't follow. Do you mean reusing /dev/kvm but with a different set of
> > > > APIs underneath? I don't think that will work.
> > > 
> > > My idea was using the same uapi for both hypervisors, so that we can use
> > > the same userlands for both.
> > > 
> > > Are the semantis so different that we can't provide the same API ?
> > 
> > We can provide some similar APIs for ease of porting, but can't provide
> > 1:1 mappings. By definition KVM and MSHV are two different things. There
> > is no goal to make one ABI / API compatible with the other.
> 
> I'm not sure I understand.
> 
> KVM is the Linux userspace API for virtualisation. It is designed to be
> versatile enough that it can support multiple implementations across
> multiple architectures, including both AMD SVM and Intel VMX on x86.
> 
> Are you saying that KVM has *failed* to be versatile enough that this
> can be "just another implementation"? What are the problems? Is it
> unfixable? 

The KVM APIs are good enough to cover guest life cycle management. To
make MSHV another implementation of the KVM APIs, we essentially need to
massage the data structures both way.

They are There is also an aspect for controlling the hypervisor that
affect the whole virtualization system. KVM APIs don't handle those. We
would need /dev/mshv for that purpose alone.

There is another aspect for Microsoft Hypervisor specific features and
enhancements, which aren't applicable to KVM. Features make sense for a
specific type-1 hypervisor may not make sense for KVM (a type-2
hypervisor). We have no intention to pollute KVM APIs with those. 

All in all the latter two points make /dev/mshv is a more viable route
in the long run.

Wei.


Re: [PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2021-02-02 Thread David Woodhouse
On Tue, 2020-12-15 at 16:42 +, Wei Liu wrote:
> On Tue, Dec 15, 2020 at 04:25:03PM +0100, Enrico Weigelt, metux IT consult 
> wrote:
> > On 03.12.20 00:22, Wei Liu wrote:
> > 
> > Hi,
> > 
> > > I don't follow. Do you mean reusing /dev/kvm but with a different set of
> > > APIs underneath? I don't think that will work.
> > 
> > My idea was using the same uapi for both hypervisors, so that we can use
> > the same userlands for both.
> > 
> > Are the semantis so different that we can't provide the same API ?
> 
> We can provide some similar APIs for ease of porting, but can't provide
> 1:1 mappings. By definition KVM and MSHV are two different things. There
> is no goal to make one ABI / API compatible with the other.

I'm not sure I understand.

KVM is the Linux userspace API for virtualisation. It is designed to be
versatile enough that it can support multiple implementations across
multiple architectures, including both AMD SVM and Intel VMX on x86.

Are you saying that KVM has *failed* to be versatile enough that this
can be "just another implementation"? What are the problems? Is it
unfixable? 


smime.p7s
Description: S/MIME cryptographic signature


Re: [PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2020-12-15 Thread Wei Liu
On Tue, Dec 15, 2020 at 04:25:03PM +0100, Enrico Weigelt, metux IT consult 
wrote:
> On 03.12.20 00:22, Wei Liu wrote:
> 
> Hi,
> 
> > I don't follow. Do you mean reusing /dev/kvm but with a different set of
> > APIs underneath? I don't think that will work.
> 
> My idea was using the same uapi for both hypervisors, so that we can use
> the same userlands for both.
> 
> Are the semantis so different that we can't provide the same API ?

We can provide some similar APIs for ease of porting, but can't provide
1:1 mappings. By definition KVM and MSHV are two different things. There
is no goal to make one ABI / API compatible with the other.

> 
> > In any case, the first version of /dev/mshv was posted a few days ago
> > [0].  While we've chosen to follow closely KVM's model, Microsoft
> > Hypervisor has its own APIs.
> 
> I have to admit, I don't know much about hyperv - what are the main
> differences (from userland perspective) between hyperv and kvm ?
> 

They have different architecture and hence different ways to deal with
things. The difference will inevitably make its way to userland.

Without going into all the details, you can have a look how Xen and KVM
differ architecturally. That will give you a pretty good idea on the
differences.

Wei.

> 
> --mtx
> 
> -- 
> ---
> Hinweis: unverschlüsselte E-Mails können leicht abgehört und manipuliert
> werden ! Für eine vertrauliche Kommunikation senden Sie bitte ihren
> GPG/PGP-Schlüssel zu.
> ---
> Enrico Weigelt, metux IT consult
> Free software and Linux embedded engineering
> i...@metux.net -- +49-151-27565287


Re: [PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2020-12-15 Thread Enrico Weigelt, metux IT consult
On 03.12.20 00:22, Wei Liu wrote:

Hi,

> I don't follow. Do you mean reusing /dev/kvm but with a different set of
> APIs underneath? I don't think that will work.

My idea was using the same uapi for both hypervisors, so that we can use
the same userlands for both.

Are the semantis so different that we can't provide the same API ?

> In any case, the first version of /dev/mshv was posted a few days ago
> [0].  While we've chosen to follow closely KVM's model, Microsoft
> Hypervisor has its own APIs.

I have to admit, I don't know much about hyperv - what are the main
differences (from userland perspective) between hyperv and kvm ?


--mtx

-- 
---
Hinweis: unverschlüsselte E-Mails können leicht abgehört und manipuliert
werden ! Für eine vertrauliche Kommunikation senden Sie bitte ihren
GPG/PGP-Schlüssel zu.
---
Enrico Weigelt, metux IT consult
Free software and Linux embedded engineering
i...@metux.net -- +49-151-27565287


Re: [PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2020-12-02 Thread Wei Liu
On Wed, Dec 02, 2020 at 08:51:38PM +0100, Enrico Weigelt, metux IT consult 
wrote:
> On 24.11.20 18:07, Wei Liu wrote:
> 
> Hi,
> 
> > There will be a subsequent patch series to provide a
> > device node (/dev/mshv) such that userspace programs can create and run 
> > virtual
> > machines. 
> 
> Any chance of using the already existing /dev/kvm interface ?
> 

I don't follow. Do you mean reusing /dev/kvm but with a different set of
APIs underneath? I don't think that will work.

In any case, the first version of /dev/mshv was posted a few days ago
[0].  While we've chosen to follow closely KVM's model, Microsoft
Hypervisor has its own APIs.

Wei.

0: 
https://lore.kernel.org/linux-hyperv/1605918637-12192-1-git-send-email-nunodasne...@linux.microsoft.com/

> --mtx
> 
> -- 
> ---
> Hinweis: unverschlüsselte E-Mails können leicht abgehört und manipuliert
> werden ! Für eine vertrauliche Kommunikation senden Sie bitte ihren
> GPG/PGP-Schlüssel zu.
> ---
> Enrico Weigelt, metux IT consult
> Free software and Linux embedded engineering
> i...@metux.net -- +49-151-27565287


Re: [PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2020-12-02 Thread Enrico Weigelt, metux IT consult
On 24.11.20 18:07, Wei Liu wrote:

Hi,

> There will be a subsequent patch series to provide a
> device node (/dev/mshv) such that userspace programs can create and run 
> virtual
> machines. 

Any chance of using the already existing /dev/kvm interface ?

--mtx

-- 
---
Hinweis: unverschlüsselte E-Mails können leicht abgehört und manipuliert
werden ! Für eine vertrauliche Kommunikation senden Sie bitte ihren
GPG/PGP-Schlüssel zu.
---
Enrico Weigelt, metux IT consult
Free software and Linux embedded engineering
i...@metux.net -- +49-151-27565287


[PATCH v3 00/17] Introducing Linux root partition support for Microsoft Hypervisor

2020-11-24 Thread Wei Liu
Hi all

Here we propose this patch series to make Linux run as the root partition [0]
on Microsoft Hypervisor [1]. 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.

This series is now based on 5.10-rc1. And thanks to tglx's overhaul of
the MSI code, our implementation of the MSI irq domain is shorter.

Comments and suggestions are welcome.

Thanks,
Wei.

Cc: sa...@linux.intel.com
Cc: robert.bradf...@intel.com
Cc: sebastien.bo...@intel.com

Changes since v2:
1. Address more comments from Vitaly.
2. Fix and test 32bit build.

Changes since v1:
1. Simplify MSI IRQ domain implementation.
2. Address Vitaly's comments.

Wei Liu (17):
  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/hyperv: implement an 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   | 121 +-
 arch/x86/hyperv/hv_proc.c   | 215 +++
 arch/x86/hyperv/irqdomain.c | 556 
 arch/x86/include/asm/hyperv-tlfs.h  |  23 ++
 arch/x86/include/asm/io_apic.h  |  21 ++
 arch/x86/include/asm/mshyperv.h |  13 +-
 arch/x86/kernel/apic/io_apic.c  |  28 +-
 arch/x86/kernel/cpu/mshyperv.c  |  49 +++
 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   | 254 -
 14 files changed, 1257 insertions(+), 38 deletions(-)
 create mode 100644 arch/x86/hyperv/hv_proc.c
 create mode 100644 arch/x86/hyperv/irqdomain.c

-- 
2.20.1