drm/amdgpu/virt: skip VM fault handler for VF
authorPixel Ding <Pixel.Ding@amd.com>
Mon, 6 Feb 2017 09:32:22 +0000 (17:32 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 30 Mar 2017 03:52:38 +0000 (23:52 -0400)
VF uses KIQ to access registers. When VM fault occurs, the driver
can't get back the fence of KIQ submission and runs into CPU soft
lockup.

Signed-off-by: Pixel Ding <Pixel.Ding@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c

index 7669b32..6502508 100644 (file)
@@ -1237,6 +1237,13 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev,
 {
        u32 addr, status, mc_client;
 
+       if (amdgpu_sriov_vf(adev)) {
+               dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n",
+                       entry->src_id, entry->src_data);
+               dev_err(adev->dev, " Can't decode VM fault info here on SRIOV VF\n");
+               return 0;
+       }
+
        addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR);
        status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS);
        mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT);