>-----Original Message----- >From: Cédric Le Goater <c...@redhat.com> >Subject: Re: [PATCH 1/3] virtio_iommu: Clear IOMMUPciBus pointer cache >when system reset > >On 1/22/24 07:40, Zhenzhong Duan wrote: >> IOMMUPciBus pointer cache is indexed by bus number, bus number >> may not always be a fixed value, i.e., guest reboot to different >> kernel which set bus number with different algorithm. >> >> This could lead to endpoint binding to wrong iommu MR in >> virtio_iommu_get_endpoint(), then vfio device setup wrong >> mapping from other device. >> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> hw/virtio/virtio-iommu.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c >> index 8a4bd933c6..bfce3237f3 100644 >> --- a/hw/virtio/virtio-iommu.c >> +++ b/hw/virtio/virtio-iommu.c >> @@ -1264,6 +1264,8 @@ static void virtio_iommu_system_reset(void >*opaque) >> >> trace_virtio_iommu_system_reset(); >> >> + memset(s->iommu_pcibus_by_bus_num, 0, sizeof(s- >>iommu_pcibus_by_bus_num)); >> + >> /* >> * config.bypass is sticky across device reset, but should be restored >> on >> * system reset > >you could remove the memset in virtio_iommu_device_realize() then ?
Good suggestion, will do. Thanks Zhenzhong