Bug 1463285 - mediated devices are not shown in nodedev-list --cap mdev output
mediated devices are not shown in nodedev-list --cap mdev output
Status: ON_QA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: libvirt (Show other bugs)
Unspecified Unspecified
high Severity high
: rc
: ---
Assigned To: Erik Skultety
zhe peng
: TestBlocker
Depends On: 1376907 1528122
Blocks: 1469590 1452072
  Show dependency treegraph
Reported: 2017-06-20 09:38 EDT by Erik Skultety
Modified: 2018-01-09 03:24 EST (History)
5 users (show)

See Also:
Fixed In Version: libvirt-3.9.0-1.el7
Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
Last Closed:
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Erik Skultety 2017-06-20 09:38:56 EDT
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):

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.
Comment 5 Erik Skultety 2017-08-28 07:25:59 EDT
v3 of the workaround posted upstream:
Comment 6 Erik Skultety 2017-10-19 03:18:57 EDT
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

    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1463285

    Signed-off-by: Erik Skultety <eskultet@redhat.com>

Note You need to log in before you can comment on or make changes to this bug.