* Clear the page request overflow bit and wake up all threads that
         * are waiting for the completion of this handling.
         */
-       if (readl(iommu->reg + DMAR_PRS_REG) & DMA_PRS_PRO)
-               writel(DMA_PRS_PRO, iommu->reg + DMAR_PRS_REG);
+       if (readl(iommu->reg + DMAR_PRS_REG) & DMA_PRS_PRO) {
+               pr_info_ratelimited("IOMMU: %s: PRQ overflow detected\n",
+                                   iommu->name);
+               head = dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK;
+               tail = dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK;
+               if (head == tail) {
+                       writel(DMA_PRS_PRO, iommu->reg + DMAR_PRS_REG);
+                       pr_info_ratelimited("IOMMU: %s: PRQ overflow cleared",
+                                           iommu->name);
+               }
+       }
 
        if (!completion_done(&iommu->prq_complete))
                complete(&iommu->prq_complete);