vhost-device/gpio
Viresh Kumar b5408666f1 gpio: Enable REPLY_ACK protocol feature
The virtio-gpio driver at the guest performs virtio transaction right
from its probe() routine and without this patch, there is a chance that
the backend may miss the notification from the guest, as the
notification may be sent before the eventfd is set at the backend. This
flag makes the master side wait for reply from backend before proceeding
further for each operation.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
2022-05-04 12:36:19 +05:30
..
src gpio: Enable REPLY_ACK protocol feature 2022-05-04 12:36:19 +05:30
Cargo.toml gpio: Skip musl builds 2022-04-04 12:38:51 +05:30
README.md gpio: Update README.md and add one for gpio 2022-04-04 12:38:51 +05:30

vhost-device-gpio - GPIO emulation backend daemon

Description

This program is a vhost-user backend that emulates a VirtIO GPIO device. This program takes a list of gpio devices on the host OS and then talks to them via the /dev/gpiochip{X} interface when a request comes from the guest OS for an GPIO device.

This program is tested with QEMU's -device vhost-user-gpio-pci but should work with any virtual machine monitor (VMM) that supports vhost-user. See the Examples section below.

Synopsis

vhost-device-gpio [OPTIONS]

Options

.. program:: vhost-device-gpio

.. option:: -h, --help

Print help.

.. option:: -s, --socket-path=PATH

Location of vhost-user Unix domain sockets, this path will be suffixed with 0,1,2..socket_count-1.

.. option:: -c, --socket-count=INT

Number of guests (sockets) to attach to, default set to 1.

.. option:: -l, --device-list=GPIO-DEVICES

GPIO device list at the host OS in the format: [:]

  Example: --device-list "2:4:7"

Here, each GPIO devices correspond to a separate guest instance, i.e. the number of devices in the device-list must match the number of sockets in the --socket-count. For example, the GPIO device 0 will be allocated to the guest with "0" path.

Examples

The daemon should be started first:

::

host# vhost-device-gpio --socket-path=gpio.sock --socket-count=1 --device-list 0:3

The QEMU invocation needs to create a chardev socket the device can use to communicate as well as share the guests memory over a memfd.

::

host# qemu-system
-chardev socket,path=vgpio.sock,id=vgpio
-device vhost-user-gpio-pci,chardev=vgpio,id=gpio
-m 4096
-object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on
-numa node,memdev=mem
...