summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_kfd.c
diff options
context:
space:
mode:
authorOded Gabbay <oded.gabbay@gmail.com>2016-02-13 10:14:07 +0200
committerOded Gabbay <oded.gabbay@gmail.com>2016-02-27 22:52:40 +0200
commitc68f4528a2e984d044a5f6ad1c5eca7bba9b3b4c (patch)
tree764d98cea7aa8168c3c5db4a6d18bed0f8dab187 /drivers/gpu/drm/radeon/radeon_kfd.c
parent44ab4042178bd596275927ea050980aa4257581b (diff)
downloadop-kernel-dev-c68f4528a2e984d044a5f6ad1c5eca7bba9b3b4c.zip
op-kernel-dev-c68f4528a2e984d044a5f6ad1c5eca7bba9b3b4c.tar.gz
drm/amdkfd: Track when module's init is complete
Current dependencies between amdkfd and radeon/amdgpu force the loading of amdkfd _before_ radeon and/or amdgpu are loaded. When all these kernel drivers are built as modules, this ordering is enforced by the kernel built-in mechanism of loading dependent modules. However, there is no such mechanism in case where all these drivers are compiled inside the kernel image (not as modules). The current way to enforce loading of amdkfd before radeon/amdgpu, is to put amdkfd before radeon/amdgpu in the drm Makefile, but that method is way too fragile. In addition, there is no kernel mechanism to check whether a kernel driver that is built inside the kernel image, has already been loaded. To solve this, this patch adds to kfd_module.c a new static variable, amdkfd_init_completed, that is set to 1 only when amdkfd's module initialization function has been completed (successfully). kgd2kfd_init(), which is the initialization function of the kgd-->kfd interface, and which is the first function in amdkfd called by radeon/amdgpu, will return successfully only if amdkfd_init_completed is equal 1. If amdkfd_init_completed is not equal to 1, kgd2kfd_init() will return -EPROBE_DEFER to signal radeon/amdgpu they need to defer their loading until amdkfd is loaded. Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_kfd.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_kfd.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c
index 9a4d69e..83c2704 100644
--- a/drivers/gpu/drm/radeon/radeon_kfd.c
+++ b/drivers/gpu/drm/radeon/radeon_kfd.c
@@ -142,7 +142,7 @@ bool radeon_kfd_init(void)
if (kgd2kfd_init_p == NULL)
return false;
- if (!kgd2kfd_init_p(KFD_INTERFACE_VERSION, &kgd2kfd)) {
+ if (kgd2kfd_init_p(KFD_INTERFACE_VERSION, &kgd2kfd)) {
symbol_put(kgd2kfd_init);
kgd2kfd = NULL;
@@ -151,7 +151,7 @@ bool radeon_kfd_init(void)
return true;
#elif defined(CONFIG_HSA_AMD)
- if (!kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd)) {
+ if (kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd)) {
kgd2kfd = NULL;
return false;
OpenPOWER on IntegriCloud