aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libvfio-user.c12
-rw-r--r--test/py/test_device_get_region_info.py8
2 files changed, 14 insertions, 6 deletions
diff --git a/lib/libvfio-user.c b/lib/libvfio-user.c
index a56d34c..3bbad42 100644
--- a/lib/libvfio-user.c
+++ b/lib/libvfio-user.c
@@ -405,6 +405,7 @@ handle_device_get_region_info(vfu_ctx_t *vfu_ctx, vfu_msg_t *msg)
struct vfio_region_info *out_info;
vfu_reg_info_t *vfu_reg;
size_t caps_size = 0;
+ int ret;
assert(vfu_ctx != NULL);
assert(msg != NULL);
@@ -457,12 +458,15 @@ handle_device_get_region_info(vfu_ctx_t *vfu_ctx, vfu_msg_t *msg)
}
if (caps_size > 0) {
- out_info->flags |= VFIO_REGION_INFO_FLAG_CAPS;
/* Only actually provide the caps if they fit. */
if (in_info->argsz >= out_info->argsz) {
- dev_get_caps(vfu_ctx, vfu_reg,
- in_info->index == VFU_PCI_DEV_MIGR_REGION_IDX,
- out_info, &msg->out_fds, &msg->nr_out_fds);
+ out_info->flags |= VFIO_REGION_INFO_FLAG_CAPS;
+ ret = dev_get_caps(vfu_ctx, vfu_reg,
+ in_info->index == VFU_PCI_DEV_MIGR_REGION_IDX,
+ out_info, &msg->out_fds, &msg->nr_out_fds);
+ if (ret < 0) {
+ return ret;
+ }
}
}
diff --git a/test/py/test_device_get_region_info.py b/test/py/test_device_get_region_info.py
index f7e63d2..cea3e98 100644
--- a/test/py/test_device_get_region_info.py
+++ b/test/py/test_device_get_region_info.py
@@ -134,10 +134,14 @@ def test_device_get_region_info_small_argsz_caps():
info, _ = vfio_region_info.pop_from_buffer(result)
assert info.argsz == 80
+
+ '''
+ There are capabilites but we do not expect VFIO_REGION_INFO_FLAG_CAPS
+ to be set because they do not fit in reply as argsz is small
+ '''
assert info.flags == (VFIO_REGION_INFO_FLAG_READ |
VFIO_REGION_INFO_FLAG_WRITE |
- VFIO_REGION_INFO_FLAG_MMAP |
- VFIO_REGION_INFO_FLAG_CAPS)
+ VFIO_REGION_INFO_FLAG_MMAP)
assert info.index == VFU_PCI_DEV_BAR2_REGION_IDX
assert info.cap_offset == 0
assert info.size == 0x8000