• Lyude's avatar
    drm/amdgpu: Disable RPM helpers while reprobing connectors on resume · 23a1a9e5
    Lyude authored
    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: stable@vger.kernel.org
    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>
    23a1a9e5
amdgpu_device.c 65.3 KB