Commit c52e7007 authored by Changpeng Liu's avatar Changpeng Liu Committed by Jim Harris
Browse files

libvfio-user: update submodule



1. struct pxdcap.per is changed to struct pxdcap.rer
Which matches the name in the nvme spec.
2. use new API return value.
3. update specification changes.

Signed-off-by: default avatarSwapnil Ingle <swapnil.ingle@nutanix.com>
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Change-Id: Ida421c4cffd1c65d550e83011ab123b321ea9dff
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8088


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 5b532e80
Loading
Loading
Loading
Loading
+66 −25
Original line number Diff line number Diff line
@@ -36,19 +36,23 @@

#include "spdk/stdinc.h"

#ifdef __cplusplus
extern "C" {
#endif

enum vfio_user_command {
	VFIO_USER_VERSION			= 1,
	VFIO_USER_DMA_MAP			= 2,
	VFIO_USER_DMA_UNMAP			= 3,
	VFIO_USER_DEVICE_GET_INFO		= 4,
	VFIO_USER_DEVICE_GET_REGION_INFO	= 5,
	VFIO_USER_DEVICE_GET_IRQ_INFO		= 6,
	VFIO_USER_DEVICE_SET_IRQS		= 7,
	VFIO_USER_REGION_READ			= 8,
	VFIO_USER_REGION_WRITE			= 9,
	VFIO_USER_DMA_READ			= 10,
	VFIO_USER_DMA_WRITE			= 11,
	VFIO_USER_VM_INTERRUPT			= 12,
	VFIO_USER_DEVICE_GET_REGION_IO_FDS	= 6,
	VFIO_USER_DEVICE_GET_IRQ_INFO		= 7,
	VFIO_USER_DEVICE_SET_IRQS		= 8,
	VFIO_USER_REGION_READ			= 9,
	VFIO_USER_REGION_WRITE			= 10,
	VFIO_USER_DMA_READ			= 11,
	VFIO_USER_DMA_WRITE			= 12,
	VFIO_USER_DEVICE_RESET			= 13,
	VFIO_USER_DIRTY_PAGES			= 14,
	VFIO_USER_MAX,
@@ -82,6 +86,9 @@ struct vfio_user_version {
	uint8_t		data[];
} __attribute__((packed));

/*
 * Similar to vfio_device_info, but without caps (yet).
 */
struct vfio_user_device_info {
	uint32_t	argsz;
	/* VFIO_DEVICE_FLAGS_* */
@@ -90,15 +97,37 @@ struct vfio_user_device_info {
	uint32_t	num_irqs;
} __attribute__((packed));

struct vfio_user_dma_region {
	uint64_t	addr;
/* based on struct vfio_bitmap */
struct vfio_user_bitmap {
	uint64_t	pgsize;
	uint64_t	size;
	uint64_t	offset;
	uint32_t	prot;
	char		data[];
} __attribute__((packed));

/* based on struct vfio_iommu_type1_dma_map */
struct vfio_user_dma_map {
	uint32_t	argsz;
#define VFIO_USER_F_DMA_REGION_READ	(1 << 0)
#define VFIO_USER_F_DMA_REGION_WRITE	(1 << 1)
#define VFIO_USER_F_DMA_REGION_MAPPABLE	(1 << 2)
	uint32_t	flags;
#define VFIO_USER_F_DMA_REGION_MAPPABLE (1 << 0)
	uint64_t	offset;
	uint64_t	addr;
	uint64_t	size;
} __attribute__((packed));

/* based on struct vfio_iommu_type1_dma_unmap */
struct vfio_user_dma_unmap {
	uint32_t	argsz;
#ifndef VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP
#define VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP	(1 << 0)
#endif
	uint32_t	flags;
	uint64_t	addr;
	uint64_t	size;
	struct vfio_user_bitmap	bitmap[];
};

struct vfio_user_region_access {
	uint64_t	offset;
	uint32_t	region;
@@ -116,4 +145,16 @@ struct vfio_user_irq_info {
	uint32_t	subindex;
} __attribute__((packed));

/* based on struct vfio_iommu_type1_dirty_bitmap_get */
struct vfio_user_bitmap_range {
	uint64_t	iova;
	uint64_t	size;
	struct vfio_user_bitmap	bitmap;
} __attribute__((packed));


#ifdef __cplusplus
}
#endif

#endif
+2 −2
Original line number Diff line number Diff line
@@ -398,7 +398,7 @@ map_one(vfu_ctx_t *ctx, uint64_t addr, uint64_t len, dma_sg_t *sg, struct iovec
	assert(iov != NULL);

	ret = vfu_addr_to_sg(ctx, (void *)(uintptr_t)addr, len, sg, 1, PROT_READ | PROT_WRITE);
	if (ret != 1) {
	if (ret < 0) {
		return NULL;
	}

@@ -1478,7 +1478,7 @@ vfio_user_dev_info_fill(struct nvmf_vfio_user_transport *vu_transport,
	struct pxcap pxcap = {
		.hdr.id = PCI_CAP_ID_EXP,
		.pxcaps.ver = 0x2,
		.pxdcap = {.per = 0x1, .flrc = 0x1},
		.pxdcap = {.rer = 0x1, .flrc = 0x1},
		.pxdcap2.ctds = 0x1
	};

+17 −9
Original line number Diff line number Diff line
@@ -296,18 +296,26 @@ vfio_user_get_dev_info(struct vfio_device *dev, struct vfio_user_device_info *de
int
vfio_user_dev_dma_map_unmap(struct vfio_device *dev, struct vfio_memory_region *mr, bool map)
{
	struct vfio_user_dma_region region = { 0 };
	struct vfio_user_dma_map dma_map = { 0 };
	struct vfio_user_dma_unmap dma_unmap = { 0 };

	region.addr = mr->iova;
	region.size = mr->size;
	region.offset = mr->offset;
	if (map) {
		region.flags = VFIO_USER_F_DMA_REGION_MAPPABLE;
		region.prot = PROT_READ | PROT_WRITE;
		dma_map.argsz = sizeof(struct vfio_user_dma_map);
		dma_map.addr = mr->iova;
		dma_map.size = mr->size;
		dma_map.offset = mr->offset;
		dma_map.flags = VFIO_USER_F_DMA_REGION_READ | VFIO_USER_F_DMA_REGION_WRITE |
				VFIO_USER_F_DMA_REGION_MAPPABLE;

		return vfio_user_dev_send_request(dev, VFIO_USER_DMA_MAP,
						  &dma_map, sizeof(dma_map), sizeof(dma_map), &mr->fd, 1);
	} else {
		dma_unmap.argsz = sizeof(struct vfio_user_dma_unmap);
		dma_unmap.addr = mr->iova;
		dma_unmap.size = mr->size;
		return vfio_user_dev_send_request(dev, VFIO_USER_DMA_UNMAP,
						  &dma_unmap, sizeof(dma_unmap), sizeof(dma_unmap), &mr->fd, 1);
	}

	return vfio_user_dev_send_request(dev, map ? VFIO_USER_DMA_MAP : VFIO_USER_DMA_UNMAP,
					  &region, sizeof(region), sizeof(region), &mr->fd, 1);
}

int
Compare 7443fbed to 8ac2360a
Original line number Diff line number Diff line
Subproject commit 7443fbedd1f94288fbe0d3563b72c4938aa9ff2f
Subproject commit 8ac2360a8aefbd2dd11c65f2b2e21565c36c0ee6