[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Ping: [PATCH] IOMMU/ATS: fix maximum queue depth calculation
Sorry for being late. Here it is. Acked-by: Wei Huang <wei.huang2@xxxxxxx> Thanks, -Wei -----Original Message----- From: Jan Beulich [mailto:JBeulich@xxxxxxxx] Sent: Tuesday, December 04, 2012 4:09 AM To: Huang2, Wei; Wei Wang; xiantao.zhang@xxxxxxxxx Cc: Ostrovsky, Boris; xen-devel Subject: Ping: [PATCH] IOMMU/ATS: fix maximum queue depth calculation Anyone? (I'd really want an ack from both Intel - who originally contributed the ATS code - and AMD - due to the adjustment of their later re-arrangements.) Jan >>> On 28.11.12 at 12:32, Jan Beulich wrote: > The capabilities register field is a 5-bit value, and the 5 bits all > being zero actually means 32 entries. > > Under the assumption that amd_iommu_flush_iotlb() really just tried to > correct for the miscalculation above when adding 32 to the value, that > adjustment is also being removed. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > > --- a/xen/drivers/passthrough/amd/iommu_cmd.c > +++ b/xen/drivers/passthrough/amd/iommu_cmd.c > @@ -321,7 +321,7 @@ void amd_iommu_flush_iotlb(struct pci_de > > req_id = get_dma_requestor_id(iommu->seg, bdf); > queueid = req_id; > - maxpend = (ats_pdev->ats_queue_depth + 32) & 0xff; > + maxpend = ats_pdev->ats_queue_depth & 0xff; > > /* send INVALIDATE_IOTLB_PAGES command */ > spin_lock_irqsave(&iommu->lock, flags); > --- a/xen/drivers/passthrough/ats.h > +++ b/xen/drivers/passthrough/ats.h > @@ -28,7 +28,7 @@ struct pci_ats_dev { > > #define ATS_REG_CAP 4 > #define ATS_REG_CTL 6 > -#define ATS_QUEUE_DEPTH_MASK 0xF > +#define ATS_QUEUE_DEPTH_MASK 0x1f > #define ATS_ENABLE (1<<15) > > extern struct list_head ats_devices; > --- a/xen/drivers/passthrough/x86/ats.c > +++ b/xen/drivers/passthrough/x86/ats.c > @@ -94,6 +94,8 @@ int enable_ats_device(int seg, int bus, > value = pci_conf_read16(seg, bus, PCI_SLOT(devfn), > PCI_FUNC(devfn), pos + ATS_REG_CAP); > pdev->ats_queue_depth = value & ATS_QUEUE_DEPTH_MASK; > + if ( !pdev->ats_queue_depth ) > + pdev->ats_queue_depth = ATS_QUEUE_DEPTH_MASK + 1; > list_add(&pdev->list, &ats_devices); > } > > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |