util: add file locking for PCIe access. #54
Merged
+23
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This way, only one application using the library can access a given device at a time.
We use a 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, unlike the flock(2) API.
No locking is added for the serial mode because it's not used in production, and it's believed that the kernel will already report the device as busy when another process has already opened it.
[1] https://lwn.net/Articles/586904/