Skip to content
Snippets Groups Projects
  1. Jul 31, 2023
  2. Jul 24, 2023
  3. Jul 11, 2023
    • 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
  4. Jun 01, 2023
  5. Apr 06, 2023
  6. Feb 28, 2023
  7. Feb 21, 2023
  8. Jan 26, 2023
  9. Nov 05, 2022
  10. Oct 20, 2022
  11. Jun 20, 2022
  12. Nov 10, 2020
  13. May 19, 2020
  14. Mar 06, 2020
  15. Dec 05, 2019
  16. Jul 17, 2019
  17. Jun 21, 2019
  18. Jun 19, 2019
  19. Mar 27, 2019
  20. Jan 14, 2019
    • Sam Ravnborg's avatar
      drm: move drm_can_sleep() to drm_util.h · e9eafcb5
      Sam Ravnborg authored
      
      Move drm_can_sleep() out of drmP.h to allow users
      to get rid of the drmP.h include.
      
      There was no header file that was a good match for this helper function.
      So add this to drm_util with the relevant includes.
      
      Add include of drm_util.h to all users.
      
      v2:
      - Update comments to use kernel-doc style (Daniel)
      - Add FIXME to drm_can_sleep and add note that this
        function should not be used in new code (Daniel)
      
      v3:
      - Fix kernel-doc syntax (Daniel)
      - Plug drm_util.h into drm-internels.rst (Daniel)
      
      Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Maxime Ripard <maxime.ripard@bootlin.com>
      Cc: Sean Paul <sean@poorly.run>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: "Christian König" <christian.koenig@amd.com>
      Cc: "David (ChunMing) Zhou" <David1.Zhou@amd.com>
      Cc: Gerd Hoffmann <kraxel@redhat.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
      Cc: Eric Anholt <eric@anholt.net>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190112193251.20450-2-sam@ravnborg.org
      e9eafcb5
  21. Oct 02, 2018
  22. Sep 03, 2018
  23. Jun 28, 2018
  24. Mar 01, 2018
  25. Dec 19, 2017
  26. Jul 26, 2017
  27. Jun 02, 2017
Loading