Lines Matching refs:section

243 static bool vfio_listener_skipped_section(MemoryRegionSection *section)  in vfio_listener_skipped_section()  argument
245 return (!memory_region_is_ram(section->mr) && in vfio_listener_skipped_section()
246 !memory_region_is_iommu(section->mr)) || in vfio_listener_skipped_section()
247 memory_region_is_protected(section->mr) || in vfio_listener_skipped_section()
254 section->offset_within_address_space & (1ULL << 63); in vfio_listener_skipped_section()
348 MemoryRegionSection *section) in vfio_ram_discard_notify_discard() argument
353 const hwaddr size = int128_get64(section->size); in vfio_ram_discard_notify_discard()
354 const hwaddr iova = section->offset_within_address_space; in vfio_ram_discard_notify_discard()
366 MemoryRegionSection *section) in vfio_ram_discard_notify_populate() argument
371 const hwaddr end = section->offset_within_region + in vfio_ram_discard_notify_populate()
372 int128_get64(section->size); in vfio_ram_discard_notify_populate()
381 for (start = section->offset_within_region; start < end; start = next) { in vfio_ram_discard_notify_populate()
385 iova = start - section->offset_within_region + in vfio_ram_discard_notify_populate()
386 section->offset_within_address_space; in vfio_ram_discard_notify_populate()
387 vaddr = memory_region_get_ram_ptr(section->mr) + start; in vfio_ram_discard_notify_populate()
390 vaddr, section->readonly); in vfio_ram_discard_notify_populate()
393 vfio_ram_discard_notify_discard(rdl, section); in vfio_ram_discard_notify_populate()
401 MemoryRegionSection *section) in vfio_register_ram_discard_listener() argument
403 RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr); in vfio_register_ram_discard_listener()
407 g_assert(QEMU_IS_ALIGNED(section->offset_within_region, TARGET_PAGE_SIZE)); in vfio_register_ram_discard_listener()
408 g_assert(QEMU_IS_ALIGNED(section->offset_within_address_space, in vfio_register_ram_discard_listener()
410 g_assert(QEMU_IS_ALIGNED(int128_get64(section->size), TARGET_PAGE_SIZE)); in vfio_register_ram_discard_listener()
414 vrdl->mr = section->mr; in vfio_register_ram_discard_listener()
415 vrdl->offset_within_address_space = section->offset_within_address_space; in vfio_register_ram_discard_listener()
416 vrdl->size = int128_get64(section->size); in vfio_register_ram_discard_listener()
418 section->mr); in vfio_register_ram_discard_listener()
427 ram_discard_manager_register_listener(rdm, &vrdl->listener, section); in vfio_register_ram_discard_listener()
475 MemoryRegionSection *section) in vfio_unregister_ram_discard_listener() argument
477 RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr); in vfio_unregister_ram_discard_listener()
481 if (vrdl->mr == section->mr && in vfio_unregister_ram_discard_listener()
483 section->offset_within_address_space) { in vfio_unregister_ram_discard_listener()
497 static bool vfio_known_safe_misalignment(MemoryRegionSection *section) in vfio_known_safe_misalignment() argument
499 MemoryRegion *mr = section->mr; in vfio_known_safe_misalignment()
507 section->offset_within_address_space, in vfio_known_safe_misalignment()
508 section->offset_within_region, in vfio_known_safe_misalignment()
513 static bool vfio_listener_valid_section(MemoryRegionSection *section, in vfio_listener_valid_section() argument
516 if (vfio_listener_skipped_section(section)) { in vfio_listener_valid_section()
518 section->offset_within_address_space, in vfio_listener_valid_section()
519 section->offset_within_address_space + in vfio_listener_valid_section()
520 int128_get64(int128_sub(section->size, int128_one()))); in vfio_listener_valid_section()
524 if (unlikely((section->offset_within_address_space & in vfio_listener_valid_section()
526 (section->offset_within_region & ~qemu_real_host_page_mask()))) { in vfio_listener_valid_section()
527 if (!vfio_known_safe_misalignment(section)) { in vfio_listener_valid_section()
531 __func__, memory_region_name(section->mr), in vfio_listener_valid_section()
532 section->offset_within_address_space, in vfio_listener_valid_section()
533 section->offset_within_region, in vfio_listener_valid_section()
543 MemoryRegionSection *section, in vfio_get_section_iova_range() argument
550 iova = REAL_HOST_PAGE_ALIGN(section->offset_within_address_space); in vfio_get_section_iova_range()
551 llend = int128_make64(section->offset_within_address_space); in vfio_get_section_iova_range()
552 llend = int128_add(llend, section->size); in vfio_get_section_iova_range()
568 MemoryRegionSection *section) in vfio_listener_region_add() argument
578 if (!vfio_listener_valid_section(section, "region_add")) { in vfio_listener_region_add()
582 if (!vfio_get_section_iova_range(bcontainer, section, &iova, &end, in vfio_listener_region_add()
584 if (memory_region_is_ram_device(section->mr)) { in vfio_listener_region_add()
586 memory_region_name(section->mr), in vfio_listener_region_add()
587 section->offset_within_address_space, in vfio_listener_region_add()
588 int128_getlo(section->size), in vfio_listener_region_add()
594 if (!vfio_container_add_section_window(bcontainer, section, &err)) { in vfio_listener_region_add()
598 memory_region_ref(section->mr); in vfio_listener_region_add()
600 if (memory_region_is_iommu(section->mr)) { in vfio_listener_region_add()
602 IOMMUMemoryRegion *iommu_mr = IOMMU_MEMORY_REGION(section->mr); in vfio_listener_region_add()
605 trace_vfio_listener_region_add_iommu(section->mr->name, iova, end); in vfio_listener_region_add()
614 giommu->iommu_offset = section->offset_within_address_space - in vfio_listener_region_add()
615 section->offset_within_region; in vfio_listener_region_add()
617 llend = int128_add(int128_make64(section->offset_within_region), in vfio_listener_region_add()
618 section->size); in vfio_listener_region_add()
624 section->offset_within_region, in vfio_listener_region_add()
628 ret = memory_region_register_iommu_notifier(section->mr, &giommu->n, in vfio_listener_region_add()
647 if (memory_region_has_ram_discard_manager(section->mr)) { in vfio_listener_region_add()
648 vfio_register_ram_discard_listener(bcontainer, section); in vfio_listener_region_add()
652 vaddr = memory_region_get_ram_ptr(section->mr) + in vfio_listener_region_add()
653 section->offset_within_region + in vfio_listener_region_add()
654 (iova - section->offset_within_address_space); in vfio_listener_region_add()
660 if (memory_region_is_ram_device(section->mr)) { in vfio_listener_region_add()
665 memory_region_name(section->mr), in vfio_listener_region_add()
666 section->offset_within_address_space, in vfio_listener_region_add()
667 int128_getlo(section->size), in vfio_listener_region_add()
674 vaddr, section->readonly); in vfio_listener_region_add()
680 if (memory_region_is_ram_device(section->mr)) { in vfio_listener_region_add()
691 if (memory_region_is_ram_device(section->mr)) { in vfio_listener_region_add()
704 memory_region_name(section->mr)); in vfio_listener_region_add()
715 MemoryRegionSection *section) in vfio_listener_region_del() argument
724 if (!vfio_listener_valid_section(section, "region_del")) { in vfio_listener_region_del()
728 if (memory_region_is_iommu(section->mr)) { in vfio_listener_region_del()
731 trace_vfio_listener_region_del_iommu(section->mr->name); in vfio_listener_region_del()
733 if (MEMORY_REGION(giommu->iommu_mr) == section->mr && in vfio_listener_region_del()
734 giommu->n.start == section->offset_within_region) { in vfio_listener_region_del()
735 memory_region_unregister_iommu_notifier(section->mr, in vfio_listener_region_del()
752 if (!vfio_get_section_iova_range(bcontainer, section, &iova, &end, in vfio_listener_region_del()
761 if (memory_region_is_ram_device(section->mr)) { in vfio_listener_region_del()
766 } else if (memory_region_has_ram_discard_manager(section->mr)) { in vfio_listener_region_del()
767 vfio_unregister_ram_discard_listener(bcontainer, section); in vfio_listener_region_del()
796 memory_region_unref(section->mr); in vfio_listener_region_del()
798 vfio_container_del_section_window(bcontainer, section); in vfio_listener_region_del()
816 static bool vfio_section_is_vfio_pci(MemoryRegionSection *section, in vfio_section_is_vfio_pci() argument
823 owner = memory_region_owner(section->mr); in vfio_section_is_vfio_pci()
881 MemoryRegionSection *section) in vfio_dirty_tracking_update() argument
887 if (!vfio_listener_valid_section(section, "tracking_update") || in vfio_dirty_tracking_update()
888 !vfio_get_section_iova_range(dirty->bcontainer, section, in vfio_dirty_tracking_update()
894 vfio_section_is_vfio_pci(section, dirty->bcontainer)); in vfio_dirty_tracking_update()
1250 static int vfio_ram_discard_get_dirty_bitmap(MemoryRegionSection *section, in vfio_ram_discard_get_dirty_bitmap() argument
1253 const hwaddr size = int128_get64(section->size); in vfio_ram_discard_get_dirty_bitmap()
1254 const hwaddr iova = section->offset_within_address_space; in vfio_ram_discard_get_dirty_bitmap()
1255 const ram_addr_t ram_addr = memory_region_get_ram_addr(section->mr) + in vfio_ram_discard_get_dirty_bitmap()
1256 section->offset_within_region; in vfio_ram_discard_get_dirty_bitmap()
1275 MemoryRegionSection *section) in vfio_sync_ram_discard_listener_dirty_bitmap() argument
1277 RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr); in vfio_sync_ram_discard_listener_dirty_bitmap()
1281 if (vrdl->mr == section->mr && in vfio_sync_ram_discard_listener_dirty_bitmap()
1283 section->offset_within_address_space) { in vfio_sync_ram_discard_listener_dirty_bitmap()
1296 return ram_discard_manager_replay_populated(rdm, section, in vfio_sync_ram_discard_listener_dirty_bitmap()
1302 MemoryRegionSection *section) in vfio_sync_iommu_dirty_bitmap() argument
1311 if (MEMORY_REGION(giommu->iommu_mr) == section->mr && in vfio_sync_iommu_dirty_bitmap()
1312 giommu->n.start == section->offset_within_region) { in vfio_sync_iommu_dirty_bitmap()
1326 llend = int128_add(int128_make64(section->offset_within_region), in vfio_sync_iommu_dirty_bitmap()
1327 section->size); in vfio_sync_iommu_dirty_bitmap()
1331 section->offset_within_region, int128_get64(llend), in vfio_sync_iommu_dirty_bitmap()
1339 MemoryRegionSection *section, Error **errp) in vfio_sync_dirty_bitmap() argument
1343 if (memory_region_is_iommu(section->mr)) { in vfio_sync_dirty_bitmap()
1344 return vfio_sync_iommu_dirty_bitmap(bcontainer, section); in vfio_sync_dirty_bitmap()
1345 } else if (memory_region_has_ram_discard_manager(section->mr)) { in vfio_sync_dirty_bitmap()
1348 ret = vfio_sync_ram_discard_listener_dirty_bitmap(bcontainer, section); in vfio_sync_dirty_bitmap()
1356 ram_addr = memory_region_get_ram_addr(section->mr) + in vfio_sync_dirty_bitmap()
1357 section->offset_within_region; in vfio_sync_dirty_bitmap()
1360 REAL_HOST_PAGE_ALIGN(section->offset_within_address_space), in vfio_sync_dirty_bitmap()
1361 int128_get64(section->size), ram_addr, errp); in vfio_sync_dirty_bitmap()
1365 MemoryRegionSection *section) in vfio_listener_log_sync() argument
1372 if (vfio_listener_skipped_section(section)) { in vfio_listener_log_sync()
1377 ret = vfio_sync_dirty_bitmap(bcontainer, section, &local_err); in vfio_listener_log_sync()