mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-18 23:52:14 -06:00
vfio: vfio_find_ram_discard_listener
Define vfio_find_ram_discard_listener as a subroutine so additional calls to it may be added in a subsequent patch. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Link: https://lore.kernel.org/qemu-devel/1748546679-154091-8-git-send-email-steven.sistare@oracle.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
9942c71183
commit
2372f8d94a
2 changed files with 25 additions and 13 deletions
|
@ -456,6 +456,26 @@ static void vfio_device_error_append(VFIODevice *vbasedev, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VFIORamDiscardListener *vfio_find_ram_discard_listener(
|
||||||
|
VFIOContainerBase *bcontainer, MemoryRegionSection *section)
|
||||||
|
{
|
||||||
|
VFIORamDiscardListener *vrdl = NULL;
|
||||||
|
|
||||||
|
QLIST_FOREACH(vrdl, &bcontainer->vrdl_list, next) {
|
||||||
|
if (vrdl->mr == section->mr &&
|
||||||
|
vrdl->offset_within_address_space ==
|
||||||
|
section->offset_within_address_space) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!vrdl) {
|
||||||
|
hw_error("vfio: Trying to sync missing RAM discard listener");
|
||||||
|
/* does not return */
|
||||||
|
}
|
||||||
|
return vrdl;
|
||||||
|
}
|
||||||
|
|
||||||
static void vfio_listener_region_add(MemoryListener *listener,
|
static void vfio_listener_region_add(MemoryListener *listener,
|
||||||
MemoryRegionSection *section)
|
MemoryRegionSection *section)
|
||||||
{
|
{
|
||||||
|
@ -1086,19 +1106,8 @@ vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainerBase *bcontainer,
|
||||||
MemoryRegionSection *section)
|
MemoryRegionSection *section)
|
||||||
{
|
{
|
||||||
RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr);
|
RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr);
|
||||||
VFIORamDiscardListener *vrdl = NULL;
|
VFIORamDiscardListener *vrdl =
|
||||||
|
vfio_find_ram_discard_listener(bcontainer, section);
|
||||||
QLIST_FOREACH(vrdl, &bcontainer->vrdl_list, next) {
|
|
||||||
if (vrdl->mr == section->mr &&
|
|
||||||
vrdl->offset_within_address_space ==
|
|
||||||
section->offset_within_address_space) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vrdl) {
|
|
||||||
hw_error("vfio: Trying to sync missing RAM discard listener");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We only want/can synchronize the bitmap for actually mapped parts -
|
* We only want/can synchronize the bitmap for actually mapped parts -
|
||||||
|
|
|
@ -253,4 +253,7 @@ struct VFIOIOMMUClass {
|
||||||
void (*release)(VFIOContainerBase *bcontainer);
|
void (*release)(VFIOContainerBase *bcontainer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
VFIORamDiscardListener *vfio_find_ram_discard_listener(
|
||||||
|
VFIOContainerBase *bcontainer, MemoryRegionSection *section);
|
||||||
|
|
||||||
#endif /* HW_VFIO_VFIO_CONTAINER_BASE_H */
|
#endif /* HW_VFIO_VFIO_CONTAINER_BASE_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue