qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 4/4] vl: Prioritize realizations of devices


From: David Hildenbrand
Subject: Re: [PATCH 4/4] vl: Prioritize realizations of devices
Date: Wed, 25 Aug 2021 10:08:38 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 24.08.21 21:52, Peter Xu wrote:
On Tue, Aug 24, 2021 at 06:24:27PM +0200, David Hildenbrand wrote:
Not so much; here's the list of priorities and the devices using it:

         |--------------------+---------|
         | priority           | devices |
         |--------------------+---------|
         | MIG_PRI_IOMMU      |       3 |
         | MIG_PRI_PCI_BUS    |       7 |
         | MIG_PRI_VIRTIO_MEM |       1 |
         | MIG_PRI_GICV3_ITS  |       1 |
         | MIG_PRI_GICV3      |       1 |
         |--------------------+---------|

iommu is probably ok. I think virtio mem is ok too,
in that it is normally created by virtio-mem-pci ...

IIRC:

intel-iommu has to be created on the QEMU cmdline before creating
virtio-mem-pci.

-device intel-iommu,caching-mode=on,intremap=on,device-iotlb=on \
...
-device 
virtio-mem-pci,disable-legacy=on,disable-modern=off,iommu_platform=on,ats=on,id=vm0,...

Creating virtio-mem-pci will implicitly create virtio-mem. virtio-mem device
state has to be migrated before migrating intel-iommu state.

Since we're at it.. frankly I didn't fully digest why virtio-mem needs to be
migrated before when reading commit 0fd7616e0f1171b.  It gives me the feeling
more like that virtio-mem has a ordering dependency with vfio-pci not
virtio-mem, but I could be wrong.

"We have to take care of incoming migration: at the point the
 IOMMUs get restored and start creating mappings in vfio,
 RamDiscardManager implementations might not be back up and running yet:
 let's add runstate priorities to enforce the order when restoring.

s/runstate/vmstate/ :|

I recall that we can see IOMMU_NOTIFIER_MAP events when restoring an IOMMU device. vfio_get_xlat_addr() would be called and could reject mappings targeting virtio-mem memory in case the virtio-mem device has not restored its bitmap from the migration stream such that ram_discard_manager_is_populated() would be reliable. Consequently, we have to restore the virtio-mem device state (not the virtio-mem-pci device state!) before restoring an IOMMU.




E.g., the IOMMU unit shouldn't be walking page table if without a device using
it, then it won't fail until the device walks it in region_add() hooks when
memory replay happens.

I recall it happened when switching to the iommu region e.g., in vtd_post_load()->vtd_switch_address_space(). But I forgot the exact call path.

--
Thanks,

David / dhildenb




reply via email to

[Prev in Thread] Current Thread [Next in Thread]