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