|
@@ -401,6 +401,7 @@ static int vfio_ram_discard_notify_populate(RamDiscardListener *rdl,
|
|
|
static void vfio_register_ram_discard_listener(VFIOContainer *container,
|
|
|
MemoryRegionSection *section)
|
|
|
{
|
|
|
+ VFIOContainerBase *bcontainer = &container->bcontainer;
|
|
|
RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr);
|
|
|
VFIORamDiscardListener *vrdl;
|
|
|
|
|
@@ -419,8 +420,8 @@ static void vfio_register_ram_discard_listener(VFIOContainer *container,
|
|
|
section->mr);
|
|
|
|
|
|
g_assert(vrdl->granularity && is_power_of_2(vrdl->granularity));
|
|
|
- g_assert(container->pgsizes &&
|
|
|
- vrdl->granularity >= 1ULL << ctz64(container->pgsizes));
|
|
|
+ g_assert(bcontainer->pgsizes &&
|
|
|
+ vrdl->granularity >= 1ULL << ctz64(bcontainer->pgsizes));
|
|
|
|
|
|
ram_discard_listener_init(&vrdl->listener,
|
|
|
vfio_ram_discard_notify_populate,
|
|
@@ -441,7 +442,7 @@ static void vfio_register_ram_discard_listener(VFIOContainer *container,
|
|
|
* number of sections in the address space we could have over time,
|
|
|
* also consuming DMA mappings.
|
|
|
*/
|
|
|
- if (container->dma_max_mappings) {
|
|
|
+ if (bcontainer->dma_max_mappings) {
|
|
|
unsigned int vrdl_count = 0, vrdl_mappings = 0, max_memslots = 512;
|
|
|
|
|
|
#ifdef CONFIG_KVM
|
|
@@ -462,11 +463,11 @@ static void vfio_register_ram_discard_listener(VFIOContainer *container,
|
|
|
}
|
|
|
|
|
|
if (vrdl_mappings + max_memslots - vrdl_count >
|
|
|
- container->dma_max_mappings) {
|
|
|
+ bcontainer->dma_max_mappings) {
|
|
|
warn_report("%s: possibly running out of DMA mappings. E.g., try"
|
|
|
" increasing the 'block-size' of virtio-mem devies."
|
|
|
" Maximum possible DMA mappings: %d, Maximum possible"
|
|
|
- " memslots: %d", __func__, container->dma_max_mappings,
|
|
|
+ " memslots: %d", __func__, bcontainer->dma_max_mappings,
|
|
|
max_memslots);
|
|
|
}
|
|
|
}
|
|
@@ -626,7 +627,7 @@ static void vfio_listener_region_add(MemoryListener *listener,
|
|
|
iommu_idx);
|
|
|
|
|
|
ret = memory_region_iommu_set_page_size_mask(giommu->iommu_mr,
|
|
|
- container->pgsizes,
|
|
|
+ bcontainer->pgsizes,
|
|
|
&err);
|
|
|
if (ret) {
|
|
|
g_free(giommu);
|
|
@@ -675,7 +676,7 @@ static void vfio_listener_region_add(MemoryListener *listener,
|
|
|
llsize = int128_sub(llend, int128_make64(iova));
|
|
|
|
|
|
if (memory_region_is_ram_device(section->mr)) {
|
|
|
- hwaddr pgmask = (1ULL << ctz64(container->pgsizes)) - 1;
|
|
|
+ hwaddr pgmask = (1ULL << ctz64(bcontainer->pgsizes)) - 1;
|
|
|
|
|
|
if ((iova & pgmask) || (int128_get64(llsize) & pgmask)) {
|
|
|
trace_vfio_listener_region_add_no_dma_map(
|
|
@@ -777,7 +778,7 @@ static void vfio_listener_region_del(MemoryListener *listener,
|
|
|
if (memory_region_is_ram_device(section->mr)) {
|
|
|
hwaddr pgmask;
|
|
|
|
|
|
- pgmask = (1ULL << ctz64(container->pgsizes)) - 1;
|
|
|
+ pgmask = (1ULL << ctz64(bcontainer->pgsizes)) - 1;
|
|
|
try_unmap = !((iova & pgmask) || (int128_get64(llsize) & pgmask));
|
|
|
} else if (memory_region_has_ram_discard_manager(section->mr)) {
|
|
|
vfio_unregister_ram_discard_listener(container, section);
|