Hide Forgot
Description of problem: If a mediated device is created during libvirtd run, there's a chance the device won't be listed by the following command: #virsh nodedev-list --cap mdev Version-Release number of selected component (if applicable): libvirt-3.2.0-9.virtcov.el7.x86_64 How reproducible: depending on the environment (on some env 100%, 0% on others) Steps to Reproduce: 1. start libvirtd 2. create a mediated device # echo `uuidgen` > \ /sys/class/mdev_bus/<pci_address>/mdev_supported_types/nvidia-X/create 3. virsh nodedev-list --cap mdev returns an empty list Actual results: The device won't show up in the output list until the daemon is restarted. Expected results: The device shows up in the output list Additional info: This is apparently due to a kernel uevent race, where the 'add' uevent is sent prior to creating the whole sysfs device tree, thus at the time of processing the device, some of the requested sysfs attributes might not be exposed yet. Until this is fixed in the upstream kernel, libvirt needs a workaround fix.
v3 of the workaround posted upstream: https://www.redhat.com/archives/libvir-list/2017-August/msg00703.html
Workaround pushed upstream: commit 1af45804088c5b1f19fca8631821ba5ae94cf3dd Author: Erik Skultety <eskultet@redhat.com> AuthorDate: Tue Jun 20 16:15:22 2017 +0200 Commit: Erik Skultety <eskultet@redhat.com> CommitDate: Thu Oct 19 08:54:53 2017 +0200 nodedev: udev: Hook up virFileWaitForAccess to work around uevent race If we find ourselves in the situation that the 'add' uevent has been fired earlier than the sysfs tree for a device was created, we should use the best-effort approach and give kernel some predetermined amount of time, thus waiting for the attributes to be ready rather than discarding the device from our device list forever. If those don't appear in the given time frame, we need to move on, since libvirt can't wait indefinitely. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1463285 Signed-off-by: Erik Skultety <eskultet@redhat.com>
verify with build: libvirt-3.9.0-7.el7.x86_64 kernel-3.10.0-837.el7.x86_64 NVIDIA-Linux-x86_64-390.21-vgpu-kvm.run step: 1. start libvirtd 2. create a mediated device # echo `uuidgen` > /sys/class/mdev_bus/<pci_address>/mdev_supported_types/nvidia-X/create 3. virsh nodedev-list --cap mdev mdev_1a8a1bbc_a095_4c59_8a17_341a3eff9c63 the device can show up, move to verified.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHEA-2018:0704