There was a mix of just unwrapping (panicking) and catching and logging errors. The unwrapping is not allowing for particulary pretty error handling, so let's bubble the errors up by not crashing the thread, but by just returning a Result<()> than is received when joining the threads. Not all .unwrap() uses were translated since a followup PR (#389) will rework that code anyway (and get rid of the .unwrap() in the process). Signed-off-by: Erik Schilling <erik.schilling@linaro.org> |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| LICENSE-APACHE | ||
| LICENSE-BSD-3-Clause | ||
| README.md | ||
vhost-device-i2c - I2C emulation backend daemon
Description
This program is a vhost-user backend that emulates a VirtIO I2C bus. This program takes the layout of the i2c bus and its devices on the host OS and then talks to them via the /dev/i2c-X interface when a request comes from the guest OS for an I2C or SMBUS device.
This program is tested with QEMU's -device vhost-user-i2c-pci but should
work with any virtual machine monitor (VMM) that supports vhost-user. See the
Examples section below.
Synopsis
vhost-device-i2c [OPTIONS]
Options
.. program:: vhost-device-i2c
.. 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=I2C-DEVICES
I2c device list at the host OS in the format: :<client_addr>[:<client_addr>],[:<client_addr>[:<client_addr>]]
Example: --device-list "i915 gmbus dpd:32:21,DPDDC-D:10:23"
Here, bus-name: is adatper's name. e.g. value of /sys/bus/i2c/devices/i2c-0/name. client_addr (decimal): address for client device, 32 == 0x20.
Examples
The daemon should be started first:
::
host# vhost-device-i2c --socket-path=vi2c.sock --socket-count=1 --device-list "i915 gmbus dpd:32"
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=vi2c.sock,id=vi2c
-device vhost-user-i2c-pci,chardev=vi2c,id=i2c
-m 4096
-object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on
-numa node,memdev=mem
...
License
This project is licensed under either of
- Apache License, Version 2.0
- BSD-3-Clause License