
* Update to QEMU v9.0.0 --------- Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Peter Xu <peterx@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com> Signed-off-by: Zheyu Ma <zheyuma97@gmail.com> Signed-off-by: Ido Plat <ido.plat@ibm.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Signed-off-by: David Hildenbrand <david@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Signed-off-by: Gregory Price <gregory.price@memverge.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Lorenz Brun <lorenz@brun.one> Signed-off-by: Yao Xingtao <yaoxt.fnst@fujitsu.com> Signed-off-by: Arnaud Minier <arnaud.minier@telecom-paris.fr> Signed-off-by: Inès Varhol <ines.varhol@telecom-paris.fr> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Sven Schnelle <svens@stackframe.org> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Benjamin Gray <bgray@linux.ibm.com> Signed-off-by: Avihai Horon <avihaih@nvidia.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> Signed-off-by: Stefan Weil <sw@weilnetz.de> Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Glenn Miles <milesg@linux.ibm.com> Signed-off-by: Oleg Sviridov <oleg.sviridov@red-soft.ru> Signed-off-by: Artem Chernyshev <artem.chernyshev@red-soft.ru> Signed-off-by: Yajun Wu <yajunw@nvidia.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Pierre-Clément Tosi <ptosi@google.com> Signed-off-by: Lei Wang <lei4.wang@intel.com> Signed-off-by: Wei Wang <wei.w.wang@intel.com> Signed-off-by: Martin Hundebøll <martin@geanix.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Wafer <wafer@jaguarmicro.com> Signed-off-by: Yuxue Liu <yuxue.liu@jaguarmicro.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com> Signed-off-by: Zack Buhman <zack@buhman.org> Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Yuquan Wang wangyuquan1236@phytium.com.cn Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Signed-off-by: Cindy Lu <lulu@redhat.com> Co-authored-by: Peter Maydell <peter.maydell@linaro.org> Co-authored-by: Fabiano Rosas <farosas@suse.de> Co-authored-by: Peter Xu <peterx@redhat.com> Co-authored-by: Thomas Huth <thuth@redhat.com> Co-authored-by: Cédric Le Goater <clg@redhat.com> Co-authored-by: Zheyu Ma <zheyuma97@gmail.com> Co-authored-by: Ido Plat <ido.plat@ibm.com> Co-authored-by: Ilya Leoshkevich <iii@linux.ibm.com> Co-authored-by: Markus Armbruster <armbru@redhat.com> Co-authored-by: Marc-André Lureau <marcandre.lureau@redhat.com> Co-authored-by: Paolo Bonzini <pbonzini@redhat.com> Co-authored-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Co-authored-by: David Hildenbrand <david@redhat.com> Co-authored-by: Kevin Wolf <kwolf@redhat.com> Co-authored-by: Stefan Reiter <s.reiter@proxmox.com> Co-authored-by: Fiona Ebner <f.ebner@proxmox.com> Co-authored-by: Gregory Price <gregory.price@memverge.com> Co-authored-by: Lorenz Brun <lorenz@brun.one> Co-authored-by: Yao Xingtao <yaoxt.fnst@fujitsu.com> Co-authored-by: Philippe Mathieu-Daudé <philmd@linaro.org> Co-authored-by: Arnaud Minier <arnaud.minier@telecom-paris.fr> Co-authored-by: BALATON Zoltan <balaton@eik.bme.hu> Co-authored-by: Igor Mammedov <imammedo@redhat.com> Co-authored-by: Akihiko Odaki <akihiko.odaki@daynix.com> Co-authored-by: Richard Henderson <richard.henderson@linaro.org> Co-authored-by: Sven Schnelle <svens@stackframe.org> Co-authored-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Co-authored-by: Helge Deller <deller@kernel.org> Co-authored-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Co-authored-by: Benjamin Gray <bgray@linux.ibm.com> Co-authored-by: Nicholas Piggin <npiggin@gmail.com> Co-authored-by: Avihai Horon <avihaih@nvidia.com> Co-authored-by: Michael Tokarev <mjt@tls.msk.ru> Co-authored-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Co-authored-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> Co-authored-by: Stefan Weil <sw@weilnetz.de> Co-authored-by: Dayu Liu <liu.dayu@zte.com.cn> Co-authored-by: Zhao Liu <zhao1.liu@intel.com> Co-authored-by: Glenn Miles <milesg@linux.vnet.ibm.com> Co-authored-by: Artem Chernyshev <artem.chernyshev@red-soft.ru> Co-authored-by: Yajun Wu <yajunw@nvidia.com> Co-authored-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Co-authored-by: Pierre-Clément Tosi <ptosi@google.com> Co-authored-by: Wei Wang <wei.w.wang@intel.com> Co-authored-by: Martin Hundebøll <martin@geanix.com> Co-authored-by: Michael S. Tsirkin <mst@redhat.com> Co-authored-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Co-authored-by: Wafer <wafer@jaguarmicro.com> Co-authored-by: lyx634449800 <yuxue.liu@jaguarmicro.com> Co-authored-by: Gerd Hoffmann <kraxel@redhat.com> Co-authored-by: Nguyen Dinh Phi <phind.uet@gmail.com> Co-authored-by: Zack Buhman <zack@buhman.org> Co-authored-by: Keith Packard <keithp@keithp.com> Co-authored-by: Yuquan Wang <wangyuquan1236@phytium.com.cn> Co-authored-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Co-authored-by: Cindy Lu <lulu@redhat.com>
120 lines
4.5 KiB
Plaintext
120 lines
4.5 KiB
Plaintext
Nested PAPR API (aka KVM on PowerVM)
|
|
====================================
|
|
|
|
This API aims at providing support to enable nested virtualization with
|
|
KVM on PowerVM. While the existing support for nested KVM on PowerNV was
|
|
introduced with cap-nested-hv option, however, with a slight design change,
|
|
to enable this on papr/pseries, a new cap-nested-papr option is added. eg:
|
|
|
|
qemu-system-ppc64 -cpu POWER10 -machine pseries,cap-nested-papr=true ...
|
|
|
|
Work by:
|
|
Michael Neuling <mikey@neuling.org>
|
|
Vaibhav Jain <vaibhav@linux.ibm.com>
|
|
Jordan Niethe <jniethe5@gmail.com>
|
|
Harsh Prateek Bora <harshpb@linux.ibm.com>
|
|
Shivaprasad G Bhat <sbhat@linux.ibm.com>
|
|
Kautuk Consul <kconsul@linux.vnet.ibm.com>
|
|
|
|
Below taken from the kernel documentation:
|
|
|
|
Introduction
|
|
============
|
|
|
|
This document explains how a guest operating system can act as a
|
|
hypervisor and run nested guests through the use of hypercalls, if the
|
|
hypervisor has implemented them. The terms L0, L1, and L2 are used to
|
|
refer to different software entities. L0 is the hypervisor mode entity
|
|
that would normally be called the "host" or "hypervisor". L1 is a
|
|
guest virtual machine that is directly run under L0 and is initiated
|
|
and controlled by L0. L2 is a guest virtual machine that is initiated
|
|
and controlled by L1 acting as a hypervisor. A significant design change
|
|
wrt existing API is that now the entire L2 state is maintained within L0.
|
|
|
|
Existing Nested-HV API
|
|
======================
|
|
|
|
Linux/KVM has had support for Nesting as an L0 or L1 since 2018
|
|
|
|
The L0 code was added::
|
|
|
|
commit 8e3f5fc1045dc49fd175b978c5457f5f51e7a2ce
|
|
Author: Paul Mackerras <paulus@ozlabs.org>
|
|
Date: Mon Oct 8 16:31:03 2018 +1100
|
|
KVM: PPC: Book3S HV: Framework and hcall stubs for nested virtualization
|
|
|
|
The L1 code was added::
|
|
|
|
commit 360cae313702cdd0b90f82c261a8302fecef030a
|
|
Author: Paul Mackerras <paulus@ozlabs.org>
|
|
Date: Mon Oct 8 16:31:04 2018 +1100
|
|
KVM: PPC: Book3S HV: Nested guest entry via hypercall
|
|
|
|
This API works primarily using a signal hcall h_enter_nested(). This
|
|
call made by the L1 to tell the L0 to start an L2 vCPU with the given
|
|
state. The L0 then starts this L2 and runs until an L2 exit condition
|
|
is reached. Once the L2 exits, the state of the L2 is given back to
|
|
the L1 by the L0. The full L2 vCPU state is always transferred from
|
|
and to L1 when the L2 is run. The L0 doesn't keep any state on the L2
|
|
vCPU (except in the short sequence in the L0 on L1 -> L2 entry and L2
|
|
-> L1 exit).
|
|
|
|
The only state kept by the L0 is the partition table. The L1 registers
|
|
it's partition table using the h_set_partition_table() hcall. All
|
|
other state held by the L0 about the L2s is cached state (such as
|
|
shadow page tables).
|
|
|
|
The L1 may run any L2 or vCPU without first informing the L0. It
|
|
simply starts the vCPU using h_enter_nested(). The creation of L2s and
|
|
vCPUs is done implicitly whenever h_enter_nested() is called.
|
|
|
|
In this document, we call this existing API the v1 API.
|
|
|
|
New PAPR API
|
|
===============
|
|
|
|
The new PAPR API changes from the v1 API such that the creating L2 and
|
|
associated vCPUs is explicit. In this document, we call this the v2
|
|
API.
|
|
|
|
h_enter_nested() is replaced with H_GUEST_VCPU_RUN(). Before this can
|
|
be called the L1 must explicitly create the L2 using h_guest_create()
|
|
and any associated vCPUs() created with h_guest_create_vCPU(). Getting
|
|
and setting vCPU state can also be performed using h_guest_{g|s}et
|
|
hcall.
|
|
|
|
The basic execution flow is for an L1 to create an L2, run it, and
|
|
delete it is:
|
|
|
|
- L1 and L0 negotiate capabilities with H_GUEST_{G,S}ET_CAPABILITIES()
|
|
(normally at L1 boot time).
|
|
|
|
- L1 requests the L0 to create an L2 with H_GUEST_CREATE() and receives a token
|
|
|
|
- L1 requests the L0 to create an L2 vCPU with H_GUEST_CREATE_VCPU()
|
|
|
|
- L1 and L0 communicate the vCPU state using the H_GUEST_{G,S}ET() hcall
|
|
|
|
- L1 requests the L0 to run the vCPU using H_GUEST_RUN_VCPU() hcall
|
|
|
|
- L1 deletes L2 with H_GUEST_DELETE()
|
|
|
|
For more details, please refer:
|
|
|
|
[1] Linux Kernel documentation (upstream documentation commit):
|
|
|
|
commit 476652297f94a2e5e5ef29e734b0da37ade94110
|
|
Author: Michael Neuling <mikey@neuling.org>
|
|
Date: Thu Sep 14 13:06:00 2023 +1000
|
|
|
|
docs: powerpc: Document nested KVM on POWER
|
|
|
|
Document support for nested KVM on POWER using the existing API as well
|
|
as the new PAPR API. This includes the new HCALL interface and how it
|
|
used by KVM.
|
|
|
|
Signed-off-by: Michael Neuling <mikey@neuling.org>
|
|
Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
|
|
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
|
|
Link: https://msgid.link/20230914030600.16993-12-jniethe5@gmail.com
|