• Maxime Ripard's avatar
    drm/vc4: hdmi: Use a mutex to prevent concurrent framework access · 82cb88af
    Maxime Ripard authored
    The vc4 HDMI controller registers into the KMS, CEC and ALSA
    frameworks.
    
    However, no particular care is done to prevent the concurrent execution
    of different framework hooks from happening at the same time.
    
    In order to protect against that scenario, let's introduce a mutex that
    relevant ALSA and KMS hooks will need to take to prevent concurrent
    execution.
    
    CEC is left out at the moment though, since the .get_modes and .detect
    KMS hooks, when running cec_s_phys_addr_from_edid, can end up calling
    CEC's .adap_enable hook. This introduces some reentrancy that isn't easy
    to deal with properly.
    
    The CEC hooks also don't share much state with the rest of the driver:
    the registers are entirely separate, we don't share any variable, the
    only thing that can conflict is the CEC clock divider setup that can be
    affected by a mode set.
    
    However, after discussing it, it looks like CEC should be able to
    recover from this if it was to happen.
    
    Link: https://lore.kernel.org/r/20211025141113.702757-6-maxime@cerno.tech
    Fixes: bb7d7856 ("drm/vc4: Add HDMI audio support")
    Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
    82cb88af
vc4_hdmi.c 77.6 KB