Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
util: add file locking for PCIe access.
This way, only one application using the library can access a given device at a time. We use the file descriptor pointing to BAR0 (via the resource0 file) because it's the first one to be opened (i.e. we fail early), and because it makes the most sense semantically: the issue with sharing a device between processes is that they will need to access different page indexes, which are controlled by BAR0. We chose to use Open File Description (OFD) locking because it has more predictable behavior [1] and is POSIX.1-2024 [2], unlike the flock(2) API. Furthermore, we rely on mmap keeping a reference to the file descriptor, therefore holding the lock while the mapping is active [3] [4]: The mmap() function shall add an extra reference to the file associated with the file descriptor fildes which is not removed by a subsequent close() on that file descriptor. This reference shall be removed when there are no more mappings to the file. No locking is added for the serial mode because the kernel will report the device as busy when another process has already opened it. [1] https://lwn.net/Articles/586904/ [2] https://pubs.opengroup.org/onlinepubs/9799919799/functions/fcntl.html [3] https://pubs.opengroup.org/onlinepubs/9799919799/functions/mmap.html [4] https://unix.stackexchange.com/q/784020/437538
- Loading branch information