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

Reply via email to