amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
        amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
        if (amdgpu_sriov_vf(adev)) {
-               pr_debug("For SRIOV client, shouldn't do anything.\n");
+               gfx_v9_0_cp_gfx_enable(adev, false);
+               /* must disable polling for SRIOV when hw finished, otherwise
+                * CPC engine may still keep fetching WB address which is already
+                * invalid after sw finished and trigger DMAR reading error in
+                * hypervisor side.
+                */
+               WREG32_FIELD15(GC, 0, CP_PQ_WPTR_POLL_CNTL, EN, 0);
                return 0;
        }
        gfx_v9_0_cp_enable(adev, false);