mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
vfio: Add Error** argument to .set_dirty_page_tracking() handler
We will use the Error object to improve error reporting in the .log_global*() handlers of VFIO. Add documentation while at it. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Avihai Horon <avihaih@nvidia.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
85ef20f167
commit
836bb30868
4 changed files with 23 additions and 9 deletions
|
@ -1076,7 +1076,7 @@ static bool vfio_listener_log_global_start(MemoryListener *listener,
|
|||
if (vfio_devices_all_device_dirty_tracking(bcontainer)) {
|
||||
ret = vfio_devices_dma_logging_start(bcontainer);
|
||||
} else {
|
||||
ret = vfio_container_set_dirty_page_tracking(bcontainer, true);
|
||||
ret = vfio_container_set_dirty_page_tracking(bcontainer, true, NULL);
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
|
@ -1096,7 +1096,7 @@ static void vfio_listener_log_global_stop(MemoryListener *listener)
|
|||
if (vfio_devices_all_device_dirty_tracking(bcontainer)) {
|
||||
vfio_devices_dma_logging_stop(bcontainer);
|
||||
} else {
|
||||
ret = vfio_container_set_dirty_page_tracking(bcontainer, false);
|
||||
ret = vfio_container_set_dirty_page_tracking(bcontainer, false, NULL);
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
|
|
|
@ -53,14 +53,14 @@ void vfio_container_del_section_window(VFIOContainerBase *bcontainer,
|
|||
}
|
||||
|
||||
int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
|
||||
bool start)
|
||||
bool start, Error **errp)
|
||||
{
|
||||
if (!bcontainer->dirty_pages_supported) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
g_assert(bcontainer->ops->set_dirty_page_tracking);
|
||||
return bcontainer->ops->set_dirty_page_tracking(bcontainer, start);
|
||||
return bcontainer->ops->set_dirty_page_tracking(bcontainer, start, errp);
|
||||
}
|
||||
|
||||
int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
|
||||
|
|
|
@ -209,7 +209,7 @@ static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova,
|
|||
|
||||
static int
|
||||
vfio_legacy_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
|
||||
bool start)
|
||||
bool start, Error **errp)
|
||||
{
|
||||
const VFIOContainer *container = container_of(bcontainer, VFIOContainer,
|
||||
bcontainer);
|
||||
|
@ -227,8 +227,8 @@ vfio_legacy_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
|
|||
ret = ioctl(container->fd, VFIO_IOMMU_DIRTY_PAGES, &dirty);
|
||||
if (ret) {
|
||||
ret = -errno;
|
||||
error_report("Failed to set dirty tracking flag 0x%x errno: %d",
|
||||
dirty.flags, errno);
|
||||
error_setg_errno(errp, errno, "Failed to set dirty tracking flag 0x%x",
|
||||
dirty.flags);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -82,7 +82,7 @@ int vfio_container_add_section_window(VFIOContainerBase *bcontainer,
|
|||
void vfio_container_del_section_window(VFIOContainerBase *bcontainer,
|
||||
MemoryRegionSection *section);
|
||||
int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
|
||||
bool start);
|
||||
bool start, Error **errp);
|
||||
int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
|
||||
VFIOBitmap *vbmap,
|
||||
hwaddr iova, hwaddr size);
|
||||
|
@ -121,9 +121,23 @@ struct VFIOIOMMUClass {
|
|||
int (*attach_device)(const char *name, VFIODevice *vbasedev,
|
||||
AddressSpace *as, Error **errp);
|
||||
void (*detach_device)(VFIODevice *vbasedev);
|
||||
|
||||
/* migration feature */
|
||||
|
||||
/**
|
||||
* @set_dirty_page_tracking
|
||||
*
|
||||
* Start or stop dirty pages tracking on VFIO container
|
||||
*
|
||||
* @bcontainer: #VFIOContainerBase on which to de/activate dirty
|
||||
* page tracking
|
||||
* @start: indicates whether to start or stop dirty pages tracking
|
||||
* @errp: pointer to Error*, to store an error if it happens.
|
||||
*
|
||||
* Returns zero to indicate success and negative for error
|
||||
*/
|
||||
int (*set_dirty_page_tracking)(const VFIOContainerBase *bcontainer,
|
||||
bool start);
|
||||
bool start, Error **errp);
|
||||
int (*query_dirty_bitmap)(const VFIOContainerBase *bcontainer,
|
||||
VFIOBitmap *vbmap,
|
||||
hwaddr iova, hwaddr size);
|
||||
|
|
Loading…
Reference in a new issue