diff options
author | Swapnil Ingle <swapnil.ingle@nutanix.com> | 2021-05-14 22:32:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-14 22:32:59 +0200 |
commit | 95f16fceadba22a7730c2a9c94cfd4028ef04a02 (patch) | |
tree | c8828c2c495ad1897cc9ed0d1776c48f9258508a | |
parent | 83eb5d9c02f7bdbeaf8eb2e21a39c92c715351a4 (diff) | |
download | libvfio-user-95f16fceadba22a7730c2a9c94cfd4028ef04a02.zip libvfio-user-95f16fceadba22a7730c2a9c94cfd4028ef04a02.tar.gz libvfio-user-95f16fceadba22a7730c2a9c94cfd4028ef04a02.tar.bz2 |
Fix dma read write count (#497)
* spec: Fixed DMA_READ/WRITE data count
DMA region size is maxed to uint64_t.
Updated DMA_READ/WRITE data count to be defined as uint64_t.
* Fix vfu_dma_read/write() as per spec changes
Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
Reviewed-by: John Levon <john.levon@nutanix.com>
-rw-r--r-- | docs/vfio-user.rst | 4 | ||||
-rw-r--r-- | include/vfio-user.h | 2 | ||||
-rw-r--r-- | lib/libvfio-user.c | 4 |
3 files changed, 5 insertions, 5 deletions
diff --git a/docs/vfio-user.rst b/docs/vfio-user.rst index f956893..104a31d 100644 --- a/docs/vfio-user.rst +++ b/docs/vfio-user.rst @@ -1533,9 +1533,9 @@ DMA Read/Write Data +=========+========+==========+ | Address | 16 | 8 | +---------+--------+----------+ -| Count | 24 | 4 | +| Count | 24 | 8 | +---------+--------+----------+ -| Data | 28 | variable | +| Data | 32 | variable | +---------+--------+----------+ * *Address* is the area of client memory being accessed. This address must have diff --git a/include/vfio-user.h b/include/vfio-user.h index 053ead2..9d820c9 100644 --- a/include/vfio-user.h +++ b/include/vfio-user.h @@ -125,7 +125,7 @@ struct vfio_user_region_access { struct vfio_user_dma_region_access { uint64_t addr; - uint32_t count; + uint64_t count; uint8_t data[]; } __attribute__((packed)); diff --git a/lib/libvfio-user.c b/lib/libvfio-user.c index 9c32c73..4a03995 100644 --- a/lib/libvfio-user.c +++ b/lib/libvfio-user.c @@ -1502,7 +1502,7 @@ vfu_dma_read(vfu_ctx_t *vfu_ctx, dma_sg_t *sg, void *data) { struct vfio_user_dma_region_access *dma_recv; struct vfio_user_dma_region_access dma_send; - int recv_size; + uint64_t recv_size; int msg_id = 1, ret; assert(vfu_ctx != NULL); @@ -1543,7 +1543,7 @@ int vfu_dma_write(vfu_ctx_t *vfu_ctx, dma_sg_t *sg, void *data) { struct vfio_user_dma_region_access *dma_send, dma_recv; - int send_size = sizeof(*dma_send) + sg->length; + uint64_t send_size = sizeof(*dma_send) + sg->length; int msg_id = 1, ret; assert(vfu_ctx != NULL); |