All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Cristian Ciocaltea" <cristian.ciocaltea@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v8 26/39] drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops
Date: Thu, 02 Jul 2026 15:13:45 +0000	[thread overview]
Message-ID: <20260702151346.5A4EC1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260702-dw-hdmi-qp-scramb-v8-26-d79890d00b6a@collabora.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

New issues:
- [Medium] Threaded IRQ handler unconditionally re-enables the HPD interrupt, racing with DRM core state.

Pre-existing issues:
- [High] Hardirq handlers check an unmasked global status register, causing spurious wakeups and potentially missing unplug events.
- [High] Missing IRQ disable before cancel_delayed_work_sync() in unbind causes a use-after-free.
--

Note: Due to system recitation constraints, I cannot include the quoted diff 
hunks in this review. The feedback below uses a free-form summary of the 
locations instead of inline diff comments.

commit d6251e05f12f1c50b3e31b91e1dfea22e19df9e0
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Subject: drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops

This commit implements the enable_hpd() and disable_hpd() phy operations
for the RK3576 and RK3588 SoCs. It also consolidates the interrupt
clear-and-unmask sequences to replace open-coded register writes.

[Severity: Medium]
In drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c, specifically within the
threaded IRQ handlers dw_hdmi_qp_rk3588_irq() (around line 409) and
dw_hdmi_qp_rk3576_irq() (around line 382), does the unconditional call to
enable_hpd() race with the DRM core?

With the introduction of the .enable_hpd and .disable_hpd PHY operations,
the DRM core expects to dynamically control HPD activation (for instance,
masking it during suspend). If an HPD event triggers just before the core
disables HPD, the hardirq handler schedules the threaded handler. Since the
threaded handler finishes by unconditionally unmasking the interrupt via
enable_hpd(), won't this override the DRM core's explicit request to keep
the interrupt disabled? This seems like it could leave the interrupt armed
unexpectedly and potentially cause spurious wakeups.

[Severity: High]
This isn't a bug introduced by this patch, but there appears to be an issue
in the hardirq handlers dw_hdmi_qp_rk3588_hardirq() (around line 394) and
dw_hdmi_qp_rk3576_hardirq() (around line 367).

These functions read the shared status registers (RK3588_GRF_SOC_STATUS1 or
RK3576_IOC_HDMI_HPD_STATUS) and check if the value is non-zero without
applying a port-specific mask. Because no mask is applied, could any set bit
in these shared registers trigger a spurious thread wakeup?

Additionally, if these registers reflect the physical level (as used in
read_hpd), an unplug event would result in a level of 0. If no other bits
are set, the handler evaluates "if (intr_stat)" as false and returns
IRQ_NONE. Does this mean the driver will fail to wake the thread and
completely miss the disconnect event?

[Severity: High]
This is a pre-existing issue, but I noticed a potential use-after-free
in the unbind path involving dw_hdmi_qp_rockchip_unbind() and the IRQ
handlers.

In the unbind path, cancel_delayed_work_sync() is called to stop the HPD
debounce work, but the hardware interrupt isn't explicitly disabled first.
If an HPD interrupt fires during or just after the cancellation, the hardirq
will wake the threaded handler (e.g., dw_hdmi_qp_rk3588_irq() at line 409),
which then calls mod_delayed_work() to re-arm the timer.

When the module unloads or the workqueue is destroyed, won't this pending
timer fire and execute unmapped memory, resulting in a kernel panic? Should
the IRQ be explicitly disabled before cancelling the delayed work?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260702-dw-hdmi-qp-scramb-v8-0-d79890d00b6a@collabora.com?part=26

  reply	other threads:[~2026-07-02 15:13 UTC|newest]

Thread overview: 157+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-02 14:46 [PATCH v8 00/39] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 01/39] video/hdmi: Introduce HDMI version enum Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-03 13:55   ` Dmitry Baryshkov
2026-07-03 13:55     ` Dmitry Baryshkov
2026-07-07 11:54   ` Maxime Ripard
2026-07-07 11:54     ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 02/39] drm/connector: Add caps-based HDMI connector init helper Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:02   ` sashiko-bot
2026-07-03 14:05   ` Dmitry Baryshkov
2026-07-03 14:05     ` Dmitry Baryshkov
2026-07-03 19:31     ` Cristian Ciocaltea
2026-07-03 19:31       ` Cristian Ciocaltea
2026-07-07 16:10       ` Maxime Ripard
2026-07-07 16:10         ` Maxime Ripard
2026-07-08 10:11         ` Cristian Ciocaltea
2026-07-08 10:11           ` Cristian Ciocaltea
2026-07-10 10:27           ` Cristian Ciocaltea
2026-07-10 10:27             ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 03/39] drm/display: bridge_connector: Pass HDMI capabilities through caps struct Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-03 14:19   ` Dmitry Baryshkov
2026-07-03 14:19     ` Dmitry Baryshkov
2026-07-03 19:55     ` Cristian Ciocaltea
2026-07-03 19:55       ` Cristian Ciocaltea
2026-07-08  6:46       ` Maxime Ripard
2026-07-08  6:46         ` Maxime Ripard
2026-07-08 10:19         ` Cristian Ciocaltea
2026-07-08 10:19           ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 04/39] drm/connector: Add HDMI 2.0 scrambler infrastructure Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:04   ` sashiko-bot
2026-07-03 14:34   ` Dmitry Baryshkov
2026-07-03 14:34     ` Dmitry Baryshkov
2026-07-03 20:54     ` Cristian Ciocaltea
2026-07-03 20:54       ` Cristian Ciocaltea
2026-07-07 12:30       ` Maxime Ripard
2026-07-07 12:30         ` Maxime Ripard
2026-07-08 10:34         ` Cristian Ciocaltea
2026-07-08 10:34           ` Cristian Ciocaltea
2026-07-09 19:25       ` Cristian Ciocaltea
2026-07-09 19:25         ` Cristian Ciocaltea
2026-07-13  8:50         ` Maxime Ripard
2026-07-13  8:50           ` Maxime Ripard
2026-07-13 10:23           ` Cristian Ciocaltea
2026-07-13 10:23             ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 05/39] drm/display: scdc-helper: Add macro for connector-prefixed debug messages Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 06/39] drm/display: scdc-helper: Add helper to set SCDC version information Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-07 15:40   ` Maxime Ripard
2026-07-07 15:40     ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 07/39] drm/display: hdmi: Add HDMI 2.0 scrambling management helpers Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:13   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 08/39] drm/display: hdmi: Advertise SCDC source version when scrambling Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-07 15:26   ` Maxime Ripard
2026-07-07 15:26     ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 09/39] drm/display: hdmi-state-helper: Add fallback TMDS rate validation Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:05   ` sashiko-bot
2026-07-07 11:23   ` Maxime Ripard
2026-07-07 11:23     ` Maxime Ripard
2026-07-08 10:39     ` Cristian Ciocaltea
2026-07-08 10:39       ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 10/39] drm/display: hdmi-state-helper: Sync SCDC state on hotplug Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:04   ` sashiko-bot
2026-07-07 11:31   ` Maxime Ripard
2026-07-07 11:31     ` Maxime Ripard
2026-07-08 11:21     ` Cristian Ciocaltea
2026-07-08 11:21       ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 11/39] drm/display: hdmi-state-helper: Set HDMI scrambling requirement Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:14   ` sashiko-bot
2026-07-07 11:34   ` Maxime Ripard
2026-07-07 11:34     ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 12/39] drm/bridge: Remove redundant error check in drm_bridge_helper_reset_crtc() Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:05   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 13/39] drm/bridge: Add bridge ops for source-side HDMI 2.0 scrambling Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 14/39] drm/display: bridge_connector: Use cached connector status in .get_modes() Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 15/39] drm/display: bridge_connector: Switch to .detect_ctx() connector helper Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 16/39] drm/display: bridge_connector: Wire up HDMI 2.0 scrambler callbacks Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 17/39] drm/bridge: dw-hdmi-qp: Rate limit i2c read error messages Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 18/39] drm/bridge: dw-hdmi-qp: Provide .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 19/39] drm/bridge: dw-hdmi-qp: Add HDMI 2.0 SCDC scrambling support Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:08   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 20/39] drm/bridge: dw-hdmi-qp: Provide dw_hdmi_qp_hpd_notify() helper Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:03   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 21/39] drm/rockchip: dw_hdmi_qp: Add missing newlines in dev_err_probe() messages Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 22/39] drm/rockchip: dw_hdmi_qp: Use local dev variable consistently in bind() Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:03   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 23/39] drm/rockchip: dw_hdmi_qp: Drop unnecessary #include Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 24/39] drm/rockchip: dw_hdmi_qp: Defer HPD IRQ enable until after connector setup Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:11   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 25/39] drm/rockchip: dw_hdmi_qp: Mask RK3576 HPD IRQ in io_init Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 26/39] drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:13   ` sashiko-bot [this message]
2026-07-02 14:46 ` [PATCH v8 27/39] drm/rockchip: dw_hdmi_qp: Use dw_hdmi_qp_hpd_notify() for HPD reports Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:15   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 28/39] drm/bridge: dw-hdmi-qp: Drop unused .setup_hpd() phy op Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 29/39] drm/vc4: hdmi: Use common TMDS char rate constants Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 30/39] drm/vc4: hdmi: Switch to drm_hdmi_mode_needs_scrambling() Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-07 12:43   ` Maxime Ripard
2026-07-07 12:43     ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 31/39] drm/vc4: hdmi: Convert to common SCDC scrambling infrastructure Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:16   ` sashiko-bot
2026-07-07 15:36   ` Maxime Ripard
2026-07-07 15:36     ` Maxime Ripard
2026-07-08 12:53     ` Cristian Ciocaltea
2026-07-08 12:53       ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 32/39] drm/tests: connector: Add HDMI caps-based init coverage Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:10   ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 33/39] drm/tests: connector: Add HDMI source-side scrambler coverage Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 34/39] drm/tests: hdmi_state_helper: Use drmm_connector_hdmi_init_with_caps() Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 35/39] drm/tests: hdmi_state_helper: Add max_tmds_char_rate fallback tests Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 36/39] drm/tests: edid: Add 4K@60Hz EDID with 600MHz TMDS Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 37/39] drm/tests: hdmi_state_helper: Cover source-side scrambling decision Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 38/39] drm/tests: edid: Fix conformity for 1080p+4K YUV420 200MHz EDID Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 39/39] drm/tests: edid: Fix conformity for 4K RGB/YUV 340MHz EDID Cristian Ciocaltea
2026-07-02 14:46   ` Cristian Ciocaltea
2026-07-02 15:31 ` [PATCH v8 00/39] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea
2026-07-02 15:31   ` Cristian Ciocaltea
2026-07-06  8:33 ` Maud Spierings
2026-07-06  8:33   ` Maud Spierings
2026-07-08 16:07   ` Cristian Ciocaltea
2026-07-08 16:07     ` Cristian Ciocaltea

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260702151346.5A4EC1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=cristian.ciocaltea@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.