aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-05-14Revert "Merge pull request #493 from swapnili/use-linux-vfio-header"John Levon3-1308/+61
This reverts commit 250aedb026ba557fc4fae6ff301b3b1dfd953c7e, reversing changes made to 71f8b30557d3635336aec06c084188370ed5e248.
2021-05-14Merge pull request #493 from swapnili/use-linux-vfio-headerSwapnil Ingle3-61/+1308
Use linux vfio header
2021-05-11Use defines from linux-headers/linux/vfio.hSwapnil Ingle2-61/+1
Instead of having local copy use the defines from linux-headers/linux/vfio.h. Same as how Qemu does. Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-05-11Copy in v5.8 uapi/linux/vfio.hSwapnil Ingle1-0/+1307
Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-05-11some specification updates (#465)John Levon6-80/+84
Make a few specification updates after review by Stefan Hajnoczi. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-05-11samples/server: correct double mmap() (#483)John Levon1-5/+0
We were accidentally mapping bar0 twice. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-05-10python tests: add vfu_create_ctx(), vfu_realize_ctx() (#448)John Levon4-132/+292
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-05-10start python-based testing framework (#447)John Levon7-8/+421
Trying to do our unit/functional testing with C is very tedious, and cmocka especially is a continual pain point. This commit introduces a Python-based testing infrastructure, and adds an initial set of functional tests for client negotiation. The tests work under Valgrind for leak/bad access detection of the C code, but not under ASAN, which lacks any meaningful shared-library support. We should be able to replace all of current C-based unit tests with this, reverting samples/ back to demo code only. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-05-10fix dma unregister callback during region removal (#464)John Levon4-14/+28
There are two issues with the unregister callback: - we were requiring the callback to be set when removing a region, but it's only required if a consumer wants to map regions - when we removed all regions (for example, on a reset), we weren't triggering the callback Signed-off-by: John Levon <john.levon@nutanix.com> swapnil code review add assert Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-05-07don't close outgoing message fds (#472)John Levon1-6/+0
We made a silly mistake in free_msg(): the file descriptors we send out in message replies should never be closed. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-05-04stop using struct vfio_device_info (#456)John Levon5-14/+25
This struct from vfio.h has grown larger in newer Linux versions; this breaks older clients, as now the server would require the larger size. Replace with our own definition. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-05-04refactor message handling path (#376)John Levon8-1187/+1142
Capture message handling inside a new vfu_msg_t private structure and pass that around to the handlers. This provides no functional change, but greatly simplifies and cleans up that path, especially around fd and iovec handling. As part of fixing up the unit tests, start using global variables to reduce the amount of boiler-plate. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-05-04fix ubuntu-18 CI (#462)John Levon1-0/+1
We now need to apt update the ubuntu-18 image first. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-05-04README: fix a small typo (#455)John Levon1-1/+1
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-23correct PM capability definition (#452)John Levon2-12/+33
the static size assert for the PMCS register was checking the wrong struct; however, the struct was nonetheless 4 bytes long, due to uint bitfields. This accidentally meant the containing struct pmcap was the correct size (the alignment attribute makes no difference). After fixing struct pmcs, we'll include the additional two bytes defined in the PCI PM specification, Section 3.2. These are "optional", but as elsewhere, we'll require them when adding the capability. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-23handle_region_access(): fix error-path log message (#451)John Levon1-2/+2
This was an error handling message that was missed when converting from -errno to -1 return style. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-23cap_write_pm(): remove assert() (#450)John Levon1-2/+2
Replace client-triggerable assert() with a log message. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-23reduce VFU_MAX_CAPS (#449)John Levon1-3/+3
Our current value of VFU_MAX_CAPS leads to a vfu_ctx_t that is way too large. Reduce the value such that the vfu_ctx_t is under 8KB. Fixes #446. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-19vfu_realize_ctx(): fix default PCI config space region (#445)John Levon2-7/+17
Fix check for an un-configured PCI config space region (the previous method was not accounting for the initialized ->fd). Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-15remove stale comment (#443)John Levon1-2/+0
Missed this FIXME when removing use of __u* types previously. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-15remove vfu_get_region_info() (#444)John Levon3-14/+3
This is only used internally, and not really useful. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-15vfu_ctx_create(): validate flags argument (#442)John Levon3-6/+17
In addition, return ENOTSUP for unknown device types, and add some unit tests. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-14libvfio-user.c: use ERROR_INT() (#433)John Levon5-120/+116
Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-14hard-code migration region index (#441)John Levon4-63/+38
Now we are confident we are OK with a hard-coded VFU_PCI_DEV_MIGR_REGION_IDX value, there's no need for us to track .migr_reg any more, either in the client or internally. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-14migration: use ERROR_INT() (#432)John Levon4-31/+35
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13tran_sock: use ERROR_INT() (#431)John Levon8-158/+145
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13pci: use ERROR_INT() (#430)John Levon4-31/+38
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13drop use of __u* types (#438)John Levon9-48/+48
As we are now pure userspace, there is no need for us to use non-standard integer types. This leaves the copied defines from Linux's vfio.h alone, however. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13irq.c: use ERROR_INT() (#429)John Levon3-23/+42
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13dma: use ERROR_INT()John Levon11-72/+88
The first in a series excising the use of the "return -errno" idiom. This is a non-standard usage, and in userspace, we have "errno" for delivering side-band error values. As there have been multiple bugs from not using standard error return methods like -1+errno or NULL+errno, let's do that. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13add ioeventfd/ioregionfd support to vfio-user spec (#437)John Levon1-40/+217
Update the spec to allow the library to request ioeventfd or ioregionfd to be set up by the client. This part of the specification remains strictly experimental, as we have no implementation, and ioregionfd is not merged into KVM at the time of writing. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-13correct DMA region add/remove returns (#427)John Levon2-16/+18
Code was expecting -errno style returns, but the DMA code didn't do this. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-08tran_sock: remove umask() (#435)John Levon1-6/+0
It's not our business to be setting umasks, and it's not necessary. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-08update README.md with chat and contributing info (#436)John Levon1-2/+16
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2021-04-08Fix compiler error comparison is always true (#434)Michael Piszczek2-2/+2
Changed variable type for getopt() to fix compiler warning when compiling on arm Signed-off-by: mpiszczek <mpiszczek@ddn.com> Reviewed-by: John Levon <john.levon@nutanix.com>
2021-04-07clean up newlines in logs (#423)John Levon8-87/+90
vfu_log() and err() should not take newlines. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-07mark vfu_log() with format attribute (#426)John Levon7-22/+24
Fix up all resulting fallout. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-07correct type for dma_sg_t::dma_addr (#425)John Levon1-1/+1
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-07test-client-server.sh: exit properly on failures (#424)John Levon1-0/+1
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06call reset callback on losing client connection (#419)John Levon3-11/+33
Give API users an opportunity to clean up when a client disconnects from the vfio-user socket. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06vfu_reset_ctx(): tear down DMA and IRQs (#418)John Levon5-1/+36
When we lose the client connection, the IRQ and DMA region state is no longer valid; clean them up. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06tran_sock_send_iovec(): check for full write (#416)John Levon1-1/+7
Report -ECONNRESET to the caller if we failed to write the full expected message. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06implement short read/write, EOF handling (#415)John Levon3-31/+84
Report any short reads to callers as ECONNRESET, which is the closest we can meaningfully get right now. This also fixes get_next_command(), which previously wasn't checking for short reads at all. When we fail to send or recv from the socket due to the client disappearing in some manner, call into vfu_reset_ctx() to clean up the connection fd, allowing a subsequent vfu_attach_ctx() to work. If we get 0 bytes from recv[msg](), this is reported by the transport as ENOMSG, and is a normal EOF condition. We can also get ECONNRESET: this can happen when we've written unacknowledged data to the socket, the client side socket is closed, and we try a subsequent read. Finally, we can get a short read or write. Our handling of these still has issues, but for now we'll presume this means the client has gone too. It may in fact be due to a client bug - if it failed to write enough data - but right now, we can't easily tell that. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06tran_sock: fix EOF handling (#414)John Levon1-10/+16
Consistently check for EOF, returning ENOMSG as an error to consumers. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06samples client/server: log more consistently (#420)John Levon3-26/+31
Prefix logs with client/server; run the tests verbosely. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06->get_request(): return failure if not connected (#411)John Levon1-0/+5
Previously, we'd end up doing a recvmsg(-1, ...), which would fail anyway, but it's best to be explicit. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06use MSG_NOSIGNAL for sendmsg() (#410)John Levon1-1/+1
Get EPIPE instead instead of a signal. This isn't fixing any particular bug, but generally, we don't want unexpected signals. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-04-06dma_controller_remove_regions: reset region array (#413)John Levon1-0/+3
Prepare this function for re-usability by clearing the array after removal. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-03-31tran_sock_recv_fds(): fix handling of get_msg() failures (#412)John Levon1-2/+2
get_msg() returns -errno not -1. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
2021-03-31make some tran_sock functions static (#409)John Levon2-18/+5
Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>