On Thu, Dec 24, 2020 at 10:15 PM Jonathon Jongsma <jjong...@redhat.com> wrote:
> This patch series follows the previously-merged series which added support > for > transient mediated devices. This series expands mdev support to include > persistent device definitions. Again, it relies on mdevctl as the backend. > > It follows the common libvirt pattern of APIs by adding the following new > APIs > for node devices: > - virNodeDeviceDefineXML() - defines a persistent device > - virNodeDeviceUndefine() - undefines a persistent device > - virNodeDeviceCreate() - starts a previously-defined device > > It also adds virsh commands mapping to these new APIs: nodedev-define, > nodedev-undefine, and nodedev-start. > Trivial suggestions: 1. Mention the bug to be resolved by this series in commit msg: https://bugzilla.redhat.com/show_bug.cgi?id=1699274 2. Add doc of man page for the new virsh commands and options > > Since we rely on mdevctl for the definition of ediated devices, we need a > way > to stay up-to-date with devices that are defined by mdevctl (outside of > libvirt). The method for staying up-to-date is currently a little bit > crude > due to the fact that mdevctl does not emit any events when new devices are > added or removed. As a workaround, we create a file monitor for the mdevctl > config directory and re-query mdevctl when we detect changes within that > directory. In the future, mdevctl may introduce a more elegant solution. > > changes in v3: > - streamlined tests -- removed some unnecessary duplication > - split out patch to factor out node device name generation function > - split nodeDeviceParseMdevctlChildDevice() into a separate function > - added follow-up patch to remove space-padded alignment in header > - refactored the mdevctl update handling significantly: > - no longer a separate persistent thread that gets signaled by a timer > - now piggybacks onto the existing udev thread and signals the thread > in t= > he > same way that the udev event does. > - Daniel suggested spawning a throw-away thread to handle mdevctl > updates, > but that introduces the complexity of possibly serializing multiple > throw-away threads (e.g. if we get an 'created' event followed > immediate= > ly > by a 'deleted' event, two threads may be spawned and we'd need to > ensure > they are properly ordered) > - added virNodeDeviceObjListForEach() and > virNodeDeviceObjListRemoveLocked() > to simplify removing devices that are removed from mdevctl. > - coding style fixes > - NOTE: per Erik's request, I experimented with changing the way that > mdevctl > commands were generated and tested (e.g. introducing something like > virMdevctlGetCommand(def, MDEVCTL_COMMAND_<SUBCOMMAND>, ...)), but it > was > too invasive and awkward and didn't seem worthwhile > > Changes in v2: > - rebase to latest git master > > Jonathon Jongsma (21): > tests: remove extra trailing semicolon > nodedev: introduce concept of 'active' node devices > nodedev: Add ability to filter by active state > nodedev: expose internal helper for naming devices > nodedev: add ability to list and parse defined mdevs > nodedev: add STOPPED/STARTED lifecycle events > nodedev: add mdevctl devices to node device list > nodedev: add helper functions to remove node devices > nodedev: handle mdevs that disappear from mdevctl > nodedev: rename dataReady to udevReady > nodedev: Refresh mdev devices when changes are detected > api: add virNodeDeviceDefineXML() > virsh: Add --active, --inactive, --all to nodedev-list > virsh: add nodedev-define command > nodedev: refactor tests to support mdev undefine > api: add virNodeDeviceUndefine() > virsh: Factor out function to find node device > virsh: add nodedev-undefine command > api: add virNodeDeviceCreate() > virsh: add "nodedev-start" command > libvirt-nodedev.h: remove space-padded alignment > > examples/c/misc/event-test.c | 4 + > include/libvirt/libvirt-nodedev.h | 98 ++-- > src/access/viraccessperm.c | 2 +- > src/access/viraccessperm.h | 6 + > src/conf/node_device_conf.h | 9 + > src/conf/virnodedeviceobj.c | 132 ++++- > src/conf/virnodedeviceobj.h | 19 + > src/driver-nodedev.h | 14 + > src/libvirt-nodedev.c | 115 ++++ > src/libvirt_private.syms | 4 + > src/libvirt_public.syms | 3 + > src/node_device/node_device_driver.c | 538 +++++++++++++++++- > src/node_device/node_device_driver.h | 38 ++ > src/node_device/node_device_udev.c | 308 ++++++++-- > src/remote/remote_driver.c | 3 + > src/remote/remote_protocol.x | 40 +- > src/remote_protocol-structs | 16 + > src/rpc/gendispatch.pl | 1 + > ...19_36ea_4111_8f0a_8c9a70e21366-define.argv | 1 + > ...19_36ea_4111_8f0a_8c9a70e21366-define.json | 1 + > ...39_495e_4243_ad9f_beb3f14c23d9-define.argv | 1 + > ...39_495e_4243_ad9f_beb3f14c23d9-define.json | 1 + > ...16_1ca8_49ac_b176_871d16c13076-define.argv | 1 + > ...16_1ca8_49ac_b176_871d16c13076-define.json | 1 + > tests/nodedevmdevctldata/mdevctl-create.argv | 1 + > .../mdevctl-list-defined.argv | 1 + > .../mdevctl-list-multiple.json | 59 ++ > .../mdevctl-list-multiple.out.xml | 39 ++ > tests/nodedevmdevctltest.c | 222 +++++++- > tools/virsh-nodedev.c | 276 +++++++-- > 30 files changed, 1765 insertions(+), 189 deletions(-) > create mode 100644 > tests/nodedevmdevctldata/mdev_d069d019_36ea_4111_8f0a_8c9= > a70e21366-define.argv > create mode 100644 > tests/nodedevmdevctldata/mdev_d069d019_36ea_4111_8f0a_8c9= > a70e21366-define.json > create mode 100644 > tests/nodedevmdevctldata/mdev_d2441d39_495e_4243_ad9f_beb= > 3f14c23d9-define.argv > create mode 100644 > tests/nodedevmdevctldata/mdev_d2441d39_495e_4243_ad9f_beb= > 3f14c23d9-define.json > create mode 100644 > tests/nodedevmdevctldata/mdev_fedc4916_1ca8_49ac_b176_871= > d16c13076-define.argv > create mode 100644 > tests/nodedevmdevctldata/mdev_fedc4916_1ca8_49ac_b176_871= > d16c13076-define.json > create mode 100644 tests/nodedevmdevctldata/mdevctl-create.argv > create mode 100644 tests/nodedevmdevctldata/mdevctl-list-defined.argv > create mode 100644 tests/nodedevmdevctldata/mdevctl-list-multiple.json > create mode 100644 tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml > > --=20 > 2.26.2 > > >