OSDN Git Service

drm/amdgpu: Clean up KFD init and fini
authorFelix Kuehling <Felix.Kuehling@amd.com>
Fri, 31 Aug 2018 20:54:12 +0000 (16:54 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 11 Sep 2018 03:44:32 +0000 (22:44 -0500)
Only initialize KFD once by moving amdgpu_amdkfd_init from
amdgpu_pci_probe to amdgpu_init. This fixes kernel oopses and hangs
when booting multi-GPU systems.

Also removed some vestiges of KFD being its own module.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c

index db9872f..1a0824e 100644 (file)
@@ -28,7 +28,6 @@
 #include <linux/module.h>
 
 const struct kgd2kfd_calls *kgd2kfd;
-bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
 
 static const unsigned int compute_vmid_bitmap = 0xFF00;
 
@@ -51,10 +50,8 @@ int amdgpu_amdkfd_init(void)
 
 void amdgpu_amdkfd_fini(void)
 {
-       if (kgd2kfd) {
+       if (kgd2kfd)
                kgd2kfd->exit();
-               symbol_put(kgd2kfd_init);
-       }
 }
 
 void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
index a96ceff..b5c2ccb 100644 (file)
@@ -922,14 +922,6 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
                return -ENODEV;
        }
 
-       /*
-        * Initialize amdkfd before starting radeon. If it was not loaded yet,
-        * defer radeon probing
-        */
-       ret = amdgpu_amdkfd_init();
-       if (ret == -EPROBE_DEFER)
-               return ret;
-
        /* Get rid of things like offb */
        ret = amdgpu_kick_out_firmware_fb(pdev);
        if (ret)
@@ -1274,6 +1266,10 @@ static int __init amdgpu_init(void)
        pdriver = &amdgpu_kms_pci_driver;
        driver->num_ioctls = amdgpu_max_kms_ioctl;
        amdgpu_register_atpx_handler();
+
+       /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */
+       amdgpu_amdkfd_init();
+
        /* let modprobe override vga console setting */
        return pci_register_driver(pdriver);