guest_memfd was initially set to shared until the commit bd3bcf6962 ("kvm/memory: Make memory type private by default if it has guest memfd backend"). To align with this change, the default state in guest_memfd_manager is set to discarded. One concern raised by this commit is the handling of the virtual BIOS. The virtual BIOS loads its image into the shared memory of guest_memfd. However, during the region_commit() stage, the memory attribute is set to private while its shared memory remains valid. This mismatch persists until the shared content is copied to the private region. Fortunately, this interval only exits during setup stage and currently, only the guest_memfd_manager is concerned with the state of the guest_memfd at that stage. For simplicity, the default bitmap in guest_memfd_manager is set to discarded (private). This is feasible because the shared content of the virtual BIOS will eventually be discarded and there are no requests to DMA access to this shared part during this period. Additionally, setting the default to private can also reduce the overhead of mapping shared pages into IOMMU by VFIO at the bootup stage. Signed-off-by: Chenyi Qiang <chenyi.qiang@xxxxxxxxx> --- system/guest-memfd-manager.c | 1 + 1 file changed, 1 insertion(+) diff --git a/system/guest-memfd-manager.c b/system/guest-memfd-manager.c index deb43db90b..ad1a46bac4 100644 --- a/system/guest-memfd-manager.c +++ b/system/guest-memfd-manager.c @@ -393,6 +393,7 @@ static void guest_memfd_manager_realize(Object *obj, MemoryRegion *mr, gmm->mr = mr; gmm->discard_bitmap_size = bitmap_size; gmm->discard_bitmap = bitmap_new(bitmap_size); + bitmap_fill(gmm->discard_bitmap, bitmap_size); } static void guest_memfd_manager_init(Object *obj) -- 2.43.5