On Fri, Mar 02, 2018 at 04:00:23PM +0100, Paolo Bonzini wrote: > On 01/03/2018 11:33, Liu, Yi L wrote: > > +struct VTDDeviceNode { > > + PCIBus *bus; > > + uint8_t devfn; > > + QLIST_ENTRY(VTDDeviceNode) next; > > +}; > > Do you really need VTDDeviceNode? I think can you simply put the > QLIST_ENTRY in VTDAddressSpace (named e.g. next_by_pasid), since > VTDAddressSpace already includes a (bus, devfn).
Existing VTDAddressSpace is actaully per-device. While for PASID tagged address space, it is possible to have multiple devices tied to a single PASID tagged address space. Reuse VTDAddressSpace could be a choice since it is a per-device structure, but it may be missleading since there is other fileds in VTDAddressSpace. This is why I proposed to have VTDDeviceNode. But consolidation is possible here. Thanks, Yi Liu > > +struct VTDPASIDAddressSpace { > > + AddressSpace as; > > + IOMMUSVAContext sva_ctx; > > + IntelIOMMUState *iommu_state; > > + /* list of devices binded to a pasid tagged address space */ > > + QLIST_HEAD(, VTDDeviceNode) device_list; > > +}; > > + > >