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;
> > +};
> > +
>
>