[libvirt PATCH v3 00/21] Add support for persistent mediated devices

Han Han hhan at redhat.com
Fri Dec 25 02:17:40 UTC 2020


On Thu, Dec 24, 2020 at 10:15 PM Jonathon Jongsma <jjongsma at 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20201225/98df3721/attachment-0001.htm>


More information about the libvir-list mailing list