• Oded Gabbay's avatar
    drm/amdkfd: Track when module's init is complete · c68f4528
    Oded Gabbay authored
    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: default avatarOded Gabbay <oded.gabbay@gmail.com>
    Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    c68f4528
radeon_kfd.c 22.5 KB