• Lyude's avatar
    drm/amdgpu: Disable RPM helpers while reprobing connectors on resume · 193697d8
    Lyude authored
    commit 23a1a9e5 upstream.
    
    Just about all of amdgpu's connector probing functions try to acquire
    runtime PM refs. If we try to do this in the context of
    amdgpu_resume_kms by calling drm_helper_hpd_irq_event(), we end up
    deadlocking the system.
    
    Since we're guaranteed to be holding the spinlock for RPM in
    amdgpu_resume_kms, and we already know the GPU is in working order, we
    need to prevent the RPM helpers from trying to run during the initial
    connector reprobe on resume.
    
    There's a couple of solutions I've explored for fixing this, but this
    one by far seems to be the simplest and most reliable (plus I'm pretty
    sure that's what disable_depth is there for anyway).
    
    Reproduction recipe:
      - Get any laptop dual GPUs using PRIME
      - Make sure runtime PM is enabled for amdgpu
      - Boot the machine
      - If the machine managed to boot without hanging, switch out of X to
        another VT. This should definitely cause X to hang infinitely.
    
    Changes since v1:
      - add appropriate #ifdef checks for CONFIG_PM. This is not very
        useful, but it appears some kernel test suites test compiling amdgpu
        with CONFIG_PM disabled, which results in this patch breaking the builds
        if we don't include this #ifdef
    
    Cc: Alex Deucher <alexdeucher@gmail.com>
    Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    Signed-off-by: default avatarLyude <cpaul@redhat.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    193697d8
amdgpu_device.c 60.8 KB