Revert "drm/amdgpu: TA unload messages are not actually sent to psp when amdgpu is...
authorVitaly Prosyak <vitaly.prosyak@amd.com>
Fri, 20 Jan 2023 18:19:50 +0000 (13:19 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 31 Jan 2023 18:59:21 +0000 (13:59 -0500)
This reverts commit fac53471d0ea9693d314aa2df08d62b2e7e3a0f8.
The following change: move the drm_dev_unplug call after
amdgpu_driver_unload_kms in amdgpu_pci_remove. The reason is
the following: amdgpu_pci_remove calls drm_dev_unregister
and it should be called first to ensure userspace can't access the
device instance anymore. If we call drm_dev_unplug after
amdgpu_driver_unload_kms then we observe IGT PCI software unplug
test failure (kernel hung) for all ASICs. This is how this
regression was found.

After this revert, the following commands do work not, but it would
be fixed in the next commit:
 - sudo modprobe -r amdgpu
 - sudo modprobe amdgpu

Signed-off-by: Vitaly Prosyak <vitaly.prosyak@amd.com>
Reviewed-by Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c

index 5bee3ff623442e925cdf3c775598d1fb2a998791..d376faad7696173803bbbca84e33afcd9b7e74ac 100644 (file)
@@ -4031,7 +4031,8 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)
 
        amdgpu_gart_dummy_page_fini(adev);
 
-       amdgpu_device_unmap_mmio(adev);
+       if (drm_dev_is_unplugged(adev_to_drm(adev)))
+               amdgpu_device_unmap_mmio(adev);
 
 }
 
index 7bb12a76631fc79c5d086c3fdb63daa6c0ead5f9..1bf31707e4f7f726029c25ff4cb916d7bcc39232 100644 (file)
@@ -2227,6 +2227,8 @@ amdgpu_pci_remove(struct pci_dev *pdev)
        struct drm_device *dev = pci_get_drvdata(pdev);
        struct amdgpu_device *adev = drm_to_adev(dev);
 
+       drm_dev_unplug(dev);
+
        if (adev->pm.rpm_mode != AMDGPU_RUNPM_NONE) {
                pm_runtime_get_sync(dev->dev);
                pm_runtime_forbid(dev->dev);
@@ -2266,8 +2268,6 @@ amdgpu_pci_remove(struct pci_dev *pdev)
 
        amdgpu_driver_unload_kms(dev);
 
-       drm_dev_unplug(dev);
-
        /*
         * Flush any in flight DMA operations from device.
         * Clear the Bus Master Enable bit and then wait on the PCIe Device