aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2020-10-01remove extra new line char from the logsSwapnil Ingle1-2/+2
Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-30Fix the copy logic of sparse areasSwapnil Ingle1-6/+9
Also added some better logs messages Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-30Fix error return from dev_get_sparse_mmap_cap()Swapnil Ingle1-12/+10
Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-29Implementation of VFIO_USER_DEVICE_GET_REGION_INFOSwapnil Ingle1-35/+95
WIP: test sparse capability and add sample test for it Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-29implement VFIO_USER_REGION_READ/VFIO_USER_REGION_WRITEThanos Makatos1-10/+77
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-29introduce convinience function send_recv_vfio_user_msgThanos Makatos2-0/+25
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-28implement VFIO_USER_DEVICE_SET_IRQSThanos Makatos1-2/+51
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-28have process_request return -EINTRThanos Makatos1-0/+3
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-28Fix handling of VFIO_USER_DEVICE_GET_INFOSwapnil Ingle1-12/+22
vfio_device_info.argsz is set by the client and server is expected to use/validate it. Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-25implement VFIO_USER_DEVICE_GET_IRQ_INFOThanos Makatos2-4/+63
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-25implement VFIO_USER_DMA_UNMAPThanos Makatos1-17/+53
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-25remove extraneous newlineThanos Makatos1-1/+1
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-24implement VFIO_USER_DMA_MAPThanos Makatos2-42/+126
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23libmuser: minor coding style fixesSwapnil Ingle1-27/+36
Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-23Initial implementation of VFIO_USER_DEVICE_GET_INFOSwapnil Ingle1-1/+28
Initial client and server implementation of VFIO_USER_DEVICE_GET_INFO. Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-23Fix catching error from init_sockSwapnil Ingle1-4/+2
init_sock() returns -errno, so no need to user errno variable to get the error value. Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-23start handling MAP_DMA, FDs not yet receivedThanos Makatos2-62/+113
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23refactor send/recv of message plus fixesThanos Makatos3-58/+159
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23drop extraneous newline from some log messagesThanos Makatos1-3/+3
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23exchange vfio-user version with clientThanos Makatos1-1/+101
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23don't assert on failure to initThanos Makatos1-2/+6
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23return error code when failing to attachThanos Makatos1-8/+1
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23add vfio-user version supported by libmuserThanos Makatos1-0/+3
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23rename command to cmdThanos Makatos1-1/+1
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23add missing headerThanos Makatos1-0/+1
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23FIXME move vfio_user.h to correct locationThanos Makatos1-0/+92
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23add vfio_user.h to MakefileThanos Makatos2-0/+2
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-23Handle cleanup in init_socket for error outSwapnil Ingle1-35/+39
This patch adds cleanup during error out in init_socket. Also no need to create control socket path, bind() on AF_UNIX creates the path internally. Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
2020-09-17use correct socket fd in fcntlThanos Makatos1-1/+1
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-09-17don't reuse listening socket fd for connected socket fdThanos Makatos1-11/+12
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com> Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
2020-08-12Split compilation unit of muser shared libraryFelipe Franciosi1-8/+19
This creates several smaller libraries out of the compilation units of the muser userspace library. It then links them together to build the shared library. In this process, we also generate unit test version of the libraries which include --coverage in the compilation and linking of those files. Those will be statically linked to unit tests later on. Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
2020-08-12Bounce pci_info with pci_info_bounce()Felipe Franciosi1-1/+23
During lm_ctx_create, the pci_info struct from dev_info was being completely copied with a big memcpy(). That had the side-effect of copying pointers that were not allocated by us. Shortly after, copy_sparse_mmap_areas() rewrites these pointers with memory allocated by the library. As a result, any failure half-way through setting up the context would result in free_sparse_mmap_areas() calling free() on pointers we did not allocate (which resulted in errors or double frees). This fixes it by replacing the memcpy() with pci_info_bounce() which selectively copies only what is needed. Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
2020-08-12sparse_mmap: Free bounced areas on lm_ctx_destroyFelipe Franciosi1-9/+10
We were leaking the areas bounced by copy_sparse_mmap_areas(). This fixes the leak by freeing the areas on the destructor. Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
2020-08-12dma: Cope with dma being NULL in destructorFelipe Franciosi1-0/+4
On certain error paths, @dma will be NULL. This makes the destructor cope with it. Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
2020-08-12Rename libmuser*c source filesFelipe Franciosi3-4/+9
For clarity and better project organisation towards unit tests, this renames libmuser.c to muser_ctx.c and libmuser_pci.c to muser_pci.c. CMakeLists is fixed accordingly including some other minor cleanup. Future work should further split muser_ctx.c so that unit tests can genuinely be written towards testing compilation units. Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
2020-07-22clarify use of lm_irq_triggerThanos Makatos2-8/+8
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-22muser: use the correct PCI_COMMAND interrupt disable(ID) bitChangpeng Liu2-15/+2
When PCI_COMMAND interrupt disable bit set to 1, it means disable the pin-based INTx interrupt. For NVMe controller, it will use INTx first, and then switch to MSIX, the interrupt vector 0 is both valid for INTx and MSIX, so here we remove the check when posting an interrupt, just check the interrupt fd is valid or not. Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
2020-07-22add optional callback to notify context when DMA region is addedThanos Makatos2-0/+11
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-21make unmap_dma callback optionalThanos Makatos2-10/+34
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-17refactor PCI capabilitiesThanos Makatos4-204/+140
This patch greatly refactors PCI capabilities. The main change is that we don't keep them in a list but simply store them in the PCI configuration space. Some corner cases aren't handled yet. It also fixes a bug where a capability isn't properly read depending on where it's located. Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-16add common definition for PCI capability headerThanos Makatos5-26/+58
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-15fix verbose loggingThanos Makatos4-53/+42
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-15handle PCI capabilities internallyThanos Makatos4-44/+344
Very few capabilities are handled, and implementation isn't great. Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-09minor improvements in non-blocking receive pathThanos Makatos1-15/+13
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-09Use MSG_DONTWAIT to receive requests if LM_FLAG_ATTACH_NB is specifiedBen Walker1-1/+18
If the user wanted non-blocking operation, don't block on the socket waiting for requests. Instead, use MSG_DONTWAIT to attempt to get the next request and return. The other operations all remain as blocking calls because they are not expected to ever need to wait. Signed-off-by: Ben Walker <benjamin.walker@intel.com>
2020-07-09All transport operations now take an lm_ctx_t as an argumentBen Walker1-23/+36
This is both for consistency and because the socket transport is going to need some place to cache things to handle partial sends and receives. Signed-off-by: Ben Walker <benjamin.walker@intel.com>
2020-07-08fix assertionThanos Makatos1-1/+1
Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-08dma: notify device of DMA removal eventsThanos Makatos4-39/+106
This patch introduces a new device callback that is called when a DMA region is removed. The device must provide this callback and when the callback returns all references to the DMA regions must have been removed. This new functionality is necessary since a DMA region can be removed at any time, so the device must be given a chance to drop all references and perform the necessary cleanup. This patch also stores lm_ctx_t inside dma_controller_t so that we don't have to pass lm_ctx_t when calling dma_XXX functions. Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
2020-07-08Add lm_ctx_poll() as an alternative to lm_ctx_drive()Ben Walker2-53/+82
Using lm_ctx_poll() simply polls for work and returns instead of blocking. It is only valid when used on an lm_ctx created with LM_FLAG_ATTACH_NB. Signed-off-by: Ben Walker <benjamin.walker@intel.com>
2020-07-08Drop __attribute__((packed))from struct lm_ctxBen Walker1-13/+4
This makes it unsafe to take pointers to addresses within this data structure, and lots of the code does that. Signed-off-by: Ben Walker <benjamin.walker@intel.com>