xref: /openbmc/qemu/docs/system/i386/xen.rst (revision d3860a57)
1Xen HVM guest support
2=====================
3
4
5Description
6-----------
7
8KVM has support for hosting Xen guests, intercepting Xen hypercalls and event
9channel (Xen PV interrupt) delivery. This allows guests which expect to be
10run under Xen to be hosted in QEMU under Linux/KVM instead.
11
12Setup
13-----
14
15Xen mode is enabled by setting the ``xen-version`` property of the KVM
16accelerator, for example for Xen 4.10:
17
18.. parsed-literal::
19
20  |qemu_system| --accel kvm,xen-version=0x4000a
21
22Additionally, virtual APIC support can be advertised to the guest through the
23``xen-vapic`` CPU flag:
24
25.. parsed-literal::
26
27  |qemu_system| --accel kvm,xen-version=0x4000a --cpu host,+xen_vapic
28
29When Xen support is enabled, QEMU changes hypervisor identification (CPUID
300x40000000..0x4000000A) to Xen. The KVM identification and features are not
31advertised to a Xen guest. If Hyper-V is also enabled, the Xen identification
32moves to leaves 0x40000100..0x4000010A.
33
34The Xen platform device is enabled automatically for a Xen guest. This allows
35a guest to unplug all emulated devices, in order to use Xen PV block and network
36drivers instead. Note that until the Xen PV device back ends are enabled to work
37with Xen mode in QEMU, that is unlikely to cause significant joy. Linux guests
38can be dissuaded from this by adding 'xen_emul_unplug=never' on their command
39line, and it can also be noted that AHCI disk controllers are exempt from being
40unplugged, as are passthrough VFIO PCI devices.
41
42Properties
43----------
44
45The following properties exist on the KVM accelerator object:
46
47``xen-version``
48  This property contains the Xen version in ``XENVER_version`` form, with the
49  major version in the top 16 bits and the minor version in the low 16 bits.
50  Setting this property enables the Xen guest support.
51
52``xen-evtchn-max-pirq``
53  Xen PIRQs represent an emulated physical interrupt, either GSI or MSI, which
54  can be routed to an event channel instead of to the emulated I/O or local
55  APIC. By default, QEMU permits only 256 PIRQs because this allows maximum
56  compatibility with 32-bit MSI where the higher bits of the PIRQ# would need
57  to be in the upper 64 bits of the MSI message. For guests with large numbers
58  of PCI devices (and none which are limited to 32-bit addressing) it may be
59  desirable to increase this value.
60
61``xen-gnttab-max-frames``
62  Xen grant tables are the means by which a Xen guest grants access to its
63  memory for PV back ends (disk, network, etc.). Since QEMU only supports v1
64  grant tables which are 8 bytes in size, each page (each frame) of the grant
65  table can reference 512 pages of guest memory. The default number of frames
66  is 64, allowing for 32768 pages of guest memory to be accessed by PV backends
67  through simultaneous grants. For guests with large numbers of PV devices and
68  high throughput, it may be desirable to increase this value.
69
70OS requirements
71---------------
72
73The minimal Xen support in the KVM accelerator requires the host to be running
74Linux v5.12 or newer. Later versions add optimisations: Linux v5.17 added
75acceleration of interrupt delivery via the Xen PIRQ mechanism, and Linux v5.19
76accelerated Xen PV timers and inter-processor interrupts (IPIs).
77