> From: Lu Baolu <[email protected]> > Sent: Saturday, April 16, 2022 8:31 PM > > The VT-d driver explicitly drains the pending page requests when a CPU > page table (represented by a mm struct) is unbound from a PASID according > to the procedures defined in the VT-d spec. Hence, there's no need to > report the stop-marker message in prq_event_thread(). The stop marker > messages do not need a response. This drops stop marker messages silently > if any of them is found in the page request queue.
The comment for iommu_queue_iopf says: * This module doesn't handle PCI PASID Stop Marker; IOMMU drivers must discard * them before reporting faults. A PASID Stop Marker (LRW = 0b100) doesn't * expect a response. It may be generated when disabling a PASID (issuing a * PASID stop request) by some PCI devices. So obviously the current vt-d driver behavior violates that requirement. Then should this be a bug fix instead? > > Signed-off-by: Lu Baolu <[email protected]> > Reviewed-by: Jacob Pan <[email protected]> > --- > drivers/iommu/intel/svm.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c > index d88af37c20ef..d1c42dfae6ca 100644 > --- a/drivers/iommu/intel/svm.c > +++ b/drivers/iommu/intel/svm.c > @@ -758,6 +758,10 @@ static irqreturn_t prq_event_thread(int irq, void *d) > goto bad_req; > } > > + /* Drop Stop Marker message. No need for a response. */ > + if (unlikely(req->lpig && !req->rd_req && !req->wr_req)) > + goto prq_advance; > + > if (!svm || svm->pasid != req->pasid) { > /* > * It can't go away, because the driver is not > permitted > -- > 2.25.1 _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
