]> git.ipfire.org Git - thirdparty/linux.git/blame - Documentation/virt/paravirt_ops.rst
Merge tag 'hyperv-fixes-signed' of git://git.kernel.org/pub/scm/linux/kernel/git...
[thirdparty/linux.git] / Documentation / virt / paravirt_ops.rst
CommitLineData
8373bc4f
LNK
1.. SPDX-License-Identifier: GPL-2.0
2
3============
a2e19991
LR
4Paravirt_ops
5============
6
7Linux provides support for different hypervisor virtualization technologies.
8Historically different binary kernels would be required in order to support
9different hypervisors, this restriction was removed with pv_ops.
10Linux pv_ops is a virtualization API which enables support for different
11hypervisors. It allows each hypervisor to override critical operations and
12allows a single kernel binary to run on all supported execution environments
13including native machine -- without any hypervisors.
14
15pv_ops provides a set of function pointers which represent operations
16corresponding to low level critical instructions and high level
17functionalities in various areas. pv-ops allows for optimizations at run
18time by enabling binary patching of the low-ops critical operations
19at boot time.
20
21pv_ops operations are classified into three categories:
22
23- simple indirect call
8373bc4f
LNK
24 These operations correspond to high level functionality where it is
25 known that the overhead of indirect call isn't very important.
a2e19991
LR
26
27- indirect call which allows optimization with binary patch
8373bc4f
LNK
28 Usually these operations correspond to low level critical instructions. They
29 are called frequently and are performance critical. The overhead is
30 very important.
a2e19991
LR
31
32- a set of macros for hand written assembly code
8373bc4f
LNK
33 Hand written assembly codes (.S files) also need paravirtualization
34 because they include sensitive instructions or some of code paths in
35 them are very performance critical.