aboutsummaryrefslogtreecommitdiff
path: root/docs/develop.md
blob: 2c5eb110cd6b34e0dc69163a070803fed2392b34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Developing with libvfio-user
============================

The API is currently documented via the [libvfio-user header file](../include/libvfio-user.h),
along with some additional [documentation](./).

The library is actively under development, and should not yet be considered a
stable API/ABI.

The protocol itself can be considered stable and will not break backwards
compatibility. See the QEMU repository for the [canonical protocol
definition](https://www.qemu.org/docs/master/interop/vfio-user.html).

The API is not thread safe, but individual `vfu_ctx_t` handles can be
used separately by each thread: that is, there is no global library state.

See [Accessing memory with libvfio-user](memory-mapping.md) for more details on
how to manage memory.

See [Examples](examples.md) for some simple examples of using the library.

Supported features
------------------

With the client support found in
[cloud-hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor/) or
[qemu](https://gitlab.com/qemu-project/qemu), most guest VM use cases will work.

However, guests with an IOMMU (vIOMMU) will not currently work: the number of
DMA regions is strictly limited, and there are also issues with some server
implementations such as SPDK's virtual NVMe controller.

Currently, `libvfio-user` has explicit support for PCI devices only. In
addition, only PCI endpoints are supported (no bridges etc.).

Live migration
--------------

The `master` branch of `libvfio-user` implements live migration with a protocol
based on vfio's v2 protocol. Currently, there is no support for this in any qemu
client. Contributions are welcome!