1. 12 Jul, 2023 4 commits
  2. 11 Jul, 2023 2 commits
    • Thomas Zimmermann's avatar
      drm/client: Send hotplug event after registering a client · 27655b9b
      Thomas Zimmermann authored
      Generate a hotplug event after registering a client to allow the
      client to configure its display. Remove the hotplug calls from the
      existing clients for fbdev emulation. This change fixes a concurrency
      bug between registering a client and receiving events from the DRM
      core. The bug is present in the fbdev emulation of all drivers.
      
      The fbdev emulation currently generates a hotplug event before
      registering the client to the device. For each new output, the DRM
      core sends an additional hotplug event to each registered client.
      
      If the DRM core detects first output between sending the artificial
      hotplug and registering the device, the output's hotplug event gets
      lost. If this is the first output, the fbdev console display remains
      dark. This has been observed with amdgpu and fbdev-generic.
      
      Fix this by adding hotplug generation directly to the client's
      register helper drm_client_register(). Registering the client and
      receiving events are serialized by struct drm_device.clientlist_mutex.
      So an output is either configured by the initial hotplug event, or
      the client has already been registered.
      
      The bug was originally added in commit 6e3f17ee ("drm/fb-helper:
      generic: Call drm_client_add() after setup is done"), in which adding
      a client and receiving a hotplug event switched order. It was hidden,
      as most hardware and drivers have at least on static output configured.
      Other drivers didn't use the internal DRM client or still had struct
      drm_mode_config_funcs.output_poll_changed set. That callback handled
      hotplug events as well. After not setting the callback in amdgpu in
      commit 0e3172ba ("drm/amdgpu: Don't set struct
      drm_driver.output_poll_changed"), amdgpu did not show a framebuffer
      console if output events got lost. The bug got copy-pasted from
      fbdev-generic into the other fbdev emulation.
      Reported-by: default avatarMoritz Duge <MoritzDuge@kolahilft.de>
      Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2649
      Fixes: 6e3f17ee ("drm/fb-helper: generic: Call drm_client_add() after setup is done")
      Fixes: 8ab59da2 ("drm/fb-helper: Move generic fbdev emulation into separate source file")
      Fixes: b79fe9ab ("drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers")
      Fixes: 63c38155 ("drm/armada: Implement fbdev emulation as in-kernel client")
      Fixes: 49953b70 ("drm/exynos: Implement fbdev emulation as in-kernel client")
      Fixes: 8f1aaccb ("drm/gma500: Implement client-based fbdev emulation")
      Fixes: 940b869c ("drm/msm: Implement fbdev emulation as in-kernel client")
      Fixes: 9e69bcd8 ("drm/omapdrm: Implement fbdev emulation as in-kernel client")
      Fixes: e317a69f ("drm/radeon: Implement client-based fbdev emulation")
      Fixes: 71ec16f4 ("drm/tegra: Implement fbdev emulation as in-kernel client")
      Fixes: 0e3172ba ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed")
      Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Tested-by: default avatarMoritz Duge <MoritzDuge@kolahilft.de>
      Tested-by: default avatarTorsten Krah <krah.tm@gmail.com>
      Tested-by: default avatarPaul Schyska <pschyska@gmail.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: David Airlie <airlied@gmail.com>
      Cc: Noralf Trønnes <noralf@tronnes.org>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Maxime Ripard <mripard@kernel.org>
      Cc: Javier Martinez Canillas <javierm@redhat.com>
      Cc: Russell King <linux@armlinux.org.uk>
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
      Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: "Christian König" <christian.koenig@amd.com>
      Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Mikko Perttunen <mperttunen@nvidia.com>
      Cc: dri-devel@lists.freedesktop.org
      Cc: linux-kernel@vger.kernel.org
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-samsung-soc@vger.kernel.org
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: amd-gfx@lists.freedesktop.org
      Cc: linux-tegra@vger.kernel.org
      Cc: dri-devel@lists.freedesktop.org
      Cc: <stable@vger.kernel.org> # v5.2+
      Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
      Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # msm
      Link: https://patchwork.freedesktop.org/patch/msgid/20230710091029.27503-1-tzimmermann@suse.de
      27655b9b
    • Maxime Ripard's avatar
      Merge v6.5-rc1 into drm-misc-fixes · 2f98e686
      Maxime Ripard authored
      Boris needs 6.5-rc1 in drm-misc-fixes to prevent a conflict.
      Signed-off-by: default avatarMaxime Ripard <mripard@kernel.org>
      2f98e686
  3. 10 Jul, 2023 1 commit
  4. 09 Jul, 2023 10 commits
  5. 08 Jul, 2023 23 commits