• Sebastian Andrzej Siewior's avatar
    drm/amdgpu: Replace in_interrupt() usage in gmc_v*_process_interrupt() · 58df0d71
    Sebastian Andrzej Siewior authored
    The usage of in_interrupt() in gmc_v*_process_interrupt() is intended to
    use a different code path if invoked from the interrupt handler vs
    invoked from the workqueue.
    
    The usage of in_interrupt() in drivers is phased out and Linus clearly
    requested that code which changes behaviour depending on context should
    either be separated or the context be conveyed in an argument passed by the
    caller, which usually knows the context.
    
    gmc_v*_process_interrupt() is invoked via the ->process() callback
    from amdgpu_ih_process() which in turn is invoked either from
    amdgpu_irq_handler() (the interrupt handler) or from
    amdgpu_irq_handle_*() which is a workqueue.
    
    amdgpu_irq::ih is always processed from the interrupt handler, the other
    three struct amdgpu_ih_ring members are processed from a workqueue.
    
    Replace the in_interrupt() check with a comparison against adev->irq.ih.
    A similar check is already done to check if the ih pointer is from
    ih_soft.
    Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    58df0d71
gmc_v9_0.c 47 KB