On 2022/11/10 12:17, Alex Williamson wrote:
On Thu, 10 Nov 2022 11:03:29 +0800
Yi Liu <yi.l.liu@xxxxxxxxx> wrote:
Hi DeRossi,
On 2022/11/10 09:40, Anthony DeRossi wrote:
vfio_pci_dev_set_needs_reset() inspects the open_count of every device
in the set to determine whether a reset is allowed. The current device
always has open_count == 1 within vfio_pci_core_disable(), effectively
disabling the reset logic. This field is also documented as private in
vfio_device, so it should not be used to determine whether other devices
in the set are open.
haven't went through the prior version. maybe may question has been already
answered. My question is:
the major reason is the order problem in vfio_main.c. close_device() is
always called before decreasing open_count to be 0. So even other device
has no open fd, the current vfio_device still have one open count. So why
can't we just switch the order of open_count-- and close_device()?
This is what was originally proposed and Jason shot it down:
https://lore.kernel.org/all/Y1kY0I4lr7KntbWp@xxxxxxxx/
got it. :-)
Checking for vfio_device_set_open_count() > 1 on the device set fixes
both issues
tbh. it's weird to me that a driver needs to know the internal logic of
vfio core before knowing it needs to check the vfio_device_set_open_count()
in this way. Is vfio-pci the only driver that needs to do this check or
there are other drivers? If there are other drivers, maybe fixing the order
in core is better.
Please see the evolution of reflck into device sets. Both PCI and FSL
can have multiple devices in a set, AIUI. The driver defines the set.
This ability to test for the last close among devices in the set is a
fundamental feature of the original reflck. Thanks,
thanks for the info.
--
Regards,
Yi Liu