> From: Jan Beulich <jbeul...@suse.com> > Sent: Friday, November 12, 2021 5:48 PM > > Merely setting bit 0 in the bitmap is insufficient, as then Dom0 will > still have DID 0 allocated to it, because of the zero-filling of > domid_map[]. Set slot 0 to DOMID_INVALID to keep DID 0 from getting > used. > > Fixes: b9c20c78789f ("VT-d: per-iommu domain-id") > Signed-off-by: Jan Beulich <jbeul...@suse.com>
Reviewed-by: Kevin Tian <kevin.t...@intel.com> > > --- a/xen/drivers/passthrough/vtd/iommu.c > +++ b/xen/drivers/passthrough/vtd/iommu.c > @@ -1257,16 +1257,19 @@ int __init iommu_alloc(struct acpi_drhd_ > if ( !iommu->domid_bitmap ) > return -ENOMEM; > > + iommu->domid_map = xzalloc_array(u16, nr_dom); > + if ( !iommu->domid_map ) > + return -ENOMEM; > + > /* > - * if Caching mode is set, then invalid translations are tagged with > - * domain id 0, Hence reserve bit 0 for it > + * If Caching mode is set, then invalid translations are tagged with > + * domain id 0. Hence reserve bit/slot 0. > */ > if ( cap_caching_mode(iommu->cap) ) > + { > + iommu->domid_map[0] = DOMID_INVALID; > __set_bit(0, iommu->domid_bitmap); > - > - iommu->domid_map = xzalloc_array(u16, nr_dom); > - if ( !iommu->domid_map ) > - return -ENOMEM; > + } > > return 0; > }