diff options
author | Felix Kuehling <Felix.Kuehling@amd.com> | 2018-08-31 16:54:12 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-09-10 23:44:32 -0400 |
commit | 03a1c08d003bd9354f522d45a6e3dcd529f409c2 (patch) | |
tree | 2950a3312adfd18e2c68d808c3f1c39b8bdb05a0 /drivers/gpu | |
parent | afd0384c2af286bcf72ff378e56d6d446d30b52e (diff) |
drm/amdgpu: Clean up KFD init and fini
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>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 12 |
2 files changed, 5 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index db9872f83d03..1a0824e6c8d0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <linux/module.h> | 28 | #include <linux/module.h> |
29 | 29 | ||
30 | const struct kgd2kfd_calls *kgd2kfd; | 30 | const struct kgd2kfd_calls *kgd2kfd; |
31 | bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); | ||
32 | 31 | ||
33 | static const unsigned int compute_vmid_bitmap = 0xFF00; | 32 | static const unsigned int compute_vmid_bitmap = 0xFF00; |
34 | 33 | ||
@@ -51,10 +50,8 @@ int amdgpu_amdkfd_init(void) | |||
51 | 50 | ||
52 | void amdgpu_amdkfd_fini(void) | 51 | void amdgpu_amdkfd_fini(void) |
53 | { | 52 | { |
54 | if (kgd2kfd) { | 53 | if (kgd2kfd) |
55 | kgd2kfd->exit(); | 54 | kgd2kfd->exit(); |
56 | symbol_put(kgd2kfd_init); | ||
57 | } | ||
58 | } | 55 | } |
59 | 56 | ||
60 | void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) | 57 | void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index a96ceff8abe3..b5c2ccb585b4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | |||
@@ -922,14 +922,6 @@ static int amdgpu_pci_probe(struct pci_dev *pdev, | |||
922 | return -ENODEV; | 922 | return -ENODEV; |
923 | } | 923 | } |
924 | 924 | ||
925 | /* | ||
926 | * Initialize amdkfd before starting radeon. If it was not loaded yet, | ||
927 | * defer radeon probing | ||
928 | */ | ||
929 | ret = amdgpu_amdkfd_init(); | ||
930 | if (ret == -EPROBE_DEFER) | ||
931 | return ret; | ||
932 | |||
933 | /* Get rid of things like offb */ | 925 | /* Get rid of things like offb */ |
934 | ret = amdgpu_kick_out_firmware_fb(pdev); | 926 | ret = amdgpu_kick_out_firmware_fb(pdev); |
935 | if (ret) | 927 | if (ret) |
@@ -1274,6 +1266,10 @@ static int __init amdgpu_init(void) | |||
1274 | pdriver = &amdgpu_kms_pci_driver; | 1266 | pdriver = &amdgpu_kms_pci_driver; |
1275 | driver->num_ioctls = amdgpu_max_kms_ioctl; | 1267 | driver->num_ioctls = amdgpu_max_kms_ioctl; |
1276 | amdgpu_register_atpx_handler(); | 1268 | amdgpu_register_atpx_handler(); |
1269 | |||
1270 | /* Ignore KFD init failures. Normal when CONFIG_HSA_AMD is not set. */ | ||
1271 | amdgpu_amdkfd_init(); | ||
1272 | |||
1277 | /* let modprobe override vga console setting */ | 1273 | /* let modprobe override vga console setting */ |
1278 | return pci_register_driver(pdriver); | 1274 | return pci_register_driver(pdriver); |
1279 | 1275 | ||