I'm using vfio-pci to map an FPGA. I have an utility program that gets a file descriptor for the device and does an mmap to read and write registers. When I close the utility the FPGA is reset and all registers are gone. I wonder if this is the correct behaviour, I understand that the vfio_pci_try_bus_reset is performed only when refcnt reaches zero but, in case of other drivers, like UIO the behaviour is different. I expected to be able to close my utility and restart it and find the FPGA registers at the last configured value. The vfio_pci_try_bus_reset is in vfio_pci_disable that is called by pci_release. Probably even a module parameter to prevent calling vfio_pci_try_bus_reset could be useful. Regards.
This is the expected behavior, the kernel cannot know if you or some other user will get the device next and whether the state of the device contains sensitive information. Imagine a GPU that might contain a frame buffer from the previous user or a crypto device still holding a keychain. Therefore we always try to reset the device when it is released by the user.
I understand your point and I agree with the choice. Anyway, wouldn't be possible to add a new module parameter that disables reset on close? I mean a parameter like disable_reset_on_close with a default value that mimic the current behaviour. I'm not an expert but it could be that there are applications that don't need to reset the device when they have finished configuring it. Keeping the device open could be a risk because in case of a software crash the device would be closed potentially affecting the functionality of the hardware. Thank you for your answer.