From nobody Sun Feb 8 22:22:04 2026 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66F3E18FDBD; Sat, 24 Jan 2026 17:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769275897; cv=none; b=Z9GbMIfgXZWwIC6JpmVS0z+nn2o6HaO0r+uiaTbqU+Foj1alQBxRE1XH0+r6AB5ZYeTyVzjG0i+ByAlu5PCSpV3RxwgkGtPPk+Wbwb5LxA2PyZtILk3Gh+/xu7WuDsPaq1gyGMQCJgS1KtMk8LvDlVWEyy+rDW82vceUbynlxRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769275897; c=relaxed/simple; bh=VyJNORh+kqAENWPGajL+8qZsG7n89eFpUynRgv2k1MA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G9E2+XUdiTz+4EF/X1WGOgCKHGMJJFmLlHuwlD+eRt9uezvih8VdhMJEtLOEcZHNYJuSTuqQF3kaGFbuf2rwc3vjwgQcB/RXzgUOhvmY27XioxzwO0Vd1586Wp9rNkIR9CR4E2H8KCvGONAorXHgJFCODsyIg/BTLOtUE2/YsQA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=Xrg4c5Wb; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="Xrg4c5Wb" Received: from [127.0.0.1] (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 407F527DC1; Sat, 24 Jan 2026 18:21:30 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id vTPiSNRYof_E; Sat, 24 Jan 2026 18:21:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1769275289; bh=VyJNORh+kqAENWPGajL+8qZsG7n89eFpUynRgv2k1MA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Xrg4c5WbW83SYcMqZhK/qfDm/MAy8Ba0qAIvijWc0K1XeKunNtV7vcdS1Tl3xnGQp oRhq89ao5I0w2Z5t+0nlFVbTJHo4WfbELsbI89VFyVaO4g8WBLfgk2960506dCnYu8 mhWbNQO3mbIcrAXrmbNwf4IbPA5GlY+nh7jyVAFEZvjRjWBM+5HZBAkdCPzzEG6l0J VLnbyfhumw8bS1I7GLSlkzT6Q3YvaJc1jOVQ8SyANp0AOmSDg2voA1RbFRBexjPqJ1 TTKmgTLWVduEzQaGgEoVR/pygle86jll+dSZisUG1TLYjKxlVngu7+hzOp0pazosV+ 99EYdAKSoD05g== From: Kaustabh Chakraborty Date: Sat, 24 Jan 2026 22:50:46 +0530 Subject: [PATCH 1/3] drm/bridge: samsung-dsim: move bridge init sequence to atomic_enable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260124-exynos-dsim-fixes-v1-1-122d047a23d1@disroot.org> References: <20260124-exynos-dsim-fixes-v1-0-122d047a23d1@disroot.org> In-Reply-To: <20260124-exynos-dsim-fixes-v1-0-122d047a23d1@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Kaustabh Chakraborty , stable@vger.kernel.org Since commit c9b1150a68d9 ("drm/atomic-helper: Re-order bridge chain pre-enable and post-disable"), pre-enable sequence is called before the CRTC is enabled. This causes unintended side-effects (abberation among potentially other things) in the display when samsung_dsim_init() is called in the pre-enable part of the sequence. Call it in samsung_dsim_atomic_enable() instead. Cc: stable@vger.kernel.org # v6.17 and later Signed-off-by: Kaustabh Chakraborty Tested-by: Marek Szyprowski --- drivers/gpu/drm/bridge/samsung-dsim.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 1d85e706c74b9..975f8b50ae660 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1655,6 +1655,13 @@ static void samsung_dsim_atomic_pre_enable(struct dr= m_bridge *bridge, } =20 dsi->state |=3D DSIM_STATE_ENABLED; +} + +static void samsung_dsim_atomic_enable(struct drm_bridge *bridge, + struct drm_atomic_state *state) +{ + struct samsung_dsim *dsi =3D bridge_to_dsi(bridge); + int ret; =20 /* * For Exynos-DSIM the downstream bridge, or panel are expecting @@ -1665,12 +1672,6 @@ static void samsung_dsim_atomic_pre_enable(struct dr= m_bridge *bridge, if (ret) return; } -} - -static void samsung_dsim_atomic_enable(struct drm_bridge *bridge, - struct drm_atomic_state *state) -{ - struct samsung_dsim *dsi =3D bridge_to_dsi(bridge); =20 samsung_dsim_set_display_mode(dsi); samsung_dsim_set_display_enable(dsi, true); --=20 2.52.0 From nobody Sun Feb 8 22:22:04 2026 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C523022F16E; Sat, 24 Jan 2026 17:21:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769275302; cv=none; b=XFQrLmPCcCp1N+0CHVsHgBUW94A1oAipO+GoCzPfgI64w6MufKlOdsveftcSOMPVj0J9AxvdzRMmsVQZ9AdfpApMamVuT06XVj8M2uHogqf+IquRx/WuV+/YzKnc8rlNQmMD8faLId5ErZr0/Ae3y3KB9RCFrPbHHFnCEaixrnQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769275302; c=relaxed/simple; bh=klI/8DtlWetqET+K6snjmlkQ5ErwnNBTMyoeJFBz9+M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rT3950ga25KxX1+YsBuioMgPtDRjK6lpIT2PzUzelcVNv81kM4yk8Jpvfb8m58U3FPrc5/zPLDXGZ1je7FLJXM4YXIXl9SxMsmXy7sFS/hEPA7nSkaFXbZiCSUaTOc5P8rj0Y7wt+t/NeHEDsDCKQ/SCDmjghMJ74GELVNRtFNk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=Wp9nb7MG; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="Wp9nb7MG" Received: from [127.0.0.1] (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 4CCF326FEF; Sat, 24 Jan 2026 18:21:37 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id aP7TyxFD8zZK; Sat, 24 Jan 2026 18:21:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1769275296; bh=klI/8DtlWetqET+K6snjmlkQ5ErwnNBTMyoeJFBz9+M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Wp9nb7MGtgs06wn2LUecVfQm+w3HcKup8A1sOo8yRn8ecmHqKhWdGQFAK9KyjWb5/ PdfYm8jus4fv6LOauMc8YyeRHwU407LwrmCmrsumCAPyicelSxY1sPe55N2wb8Jd3f +v7Gbd8w1rJ3NrswCu+zhU1SJXGQWEqvimQi+cxX1xXsHFpfrV6FNka8hN4MxA+w7k 85WBXS+cA8aral0QWDTkuXooKj8r9PNrSvbWuQws+M1uIccZI+OMXyJgUsrovuUiD1 S56VeXSMsLXW6tUEl7w9Fo0TxT00PBjt+UwsfcKjszzjA/iQxXhy3qpqeUiXdIoHS0 80Vr6XBot6qyg== From: Kaustabh Chakraborty Date: Sat, 24 Jan 2026 22:50:47 +0530 Subject: [PATCH 2/3] drm/bridge: samsung-dsim: enable MFLUSH_VS for Exynos 7870 DSIM Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260124-exynos-dsim-fixes-v1-2-122d047a23d1@disroot.org> References: <20260124-exynos-dsim-fixes-v1-0-122d047a23d1@disroot.org> In-Reply-To: <20260124-exynos-dsim-fixes-v1-0-122d047a23d1@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Kaustabh Chakraborty , stable@vger.kernel.org Commit a36c533ad3e1 ("drm/bridge: samsung-dsim: Always flush display FIFO on vsync pulse") intends to enable FIFO flushing at v-sync pulse by not setting the active-low MFLUSH_VS bit. However, in Exynos 7870 DSIM, the MFLUSH_VS bit is active-high. There is no publicly available documentation to the best of my knowledge, but downstream kernel code [1] supports this claim. Enable the bit for Exynos 7870. Cc: stable@vger.kernel.org # v6.17 and later Link: https://github.com/samsungexynos7870/android_kernel_samsung_exynos787= 0/blob/a3762bb1761aec8543fae511b087da620e24cee5/drivers/video/fbdev/exynos/= decon_7870/dsim_reg_7870.c#L699 [1] Signed-off-by: Kaustabh Chakraborty Tested-by: Marek Szyprowski --- drivers/gpu/drm/bridge/samsung-dsim.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 975f8b50ae660..91f230953a49f 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1089,6 +1089,13 @@ static int samsung_dsim_init_link(struct samsung_dsi= m *dsi) reg |=3D DSIM_HBP_DISABLE_MODE; if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HSA) reg |=3D DSIM_HSA_DISABLE_MODE; + + /* + * For some hardware types, DSIM_MFLUSH_VS bit needs to be + * enabled explicitly. + */ + if (dsi->plat_data->hw_type =3D=3D DSIM_TYPE_EXYNOS7870) + reg |=3D DSIM_MFLUSH_VS; } =20 if (dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET) --=20 2.52.0 From nobody Sun Feb 8 22:22:04 2026 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC89D255F3F for ; Sat, 24 Jan 2026 17:21:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769275307; cv=none; b=MlnKpselzRGxslW3rzEWrYQeW3LoX6VlX8Q/aJaRdcAUtWN4IyuUBCjvaJ0CkbvDDrt4q6gayJ8gZ8uIGWlXqITatUrZY4mQX0yJYrCdRTOKWYdw5APfJqByf2eLEZTieqEJ0tSshJ/1mh5AQllvTa9QV/Jfwsvp3nVXeXJg0Mk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769275307; c=relaxed/simple; bh=skvuLEHGBka6Dg2v7dGJsi9ALh9pHYCWNTHLVvNSNt0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FUcFdsypo7XOeS8JGtBxiNpWes5KarSoKAAUVPkfYuTlZ0+eksdnqV00DC3MEP/CokqbxpbmYsSFDLpgQyDEdaokGBn/r02kYc8kKhamDfyi3fHa42QS4awk+NqtkI+wSgXvZDzKxtDUWbqJ4WvxSxGBRhLHeQUPL83TZDNvUj8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=g09z/CO+; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="g09z/CO+" Received: from [127.0.0.1] (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 985EE278F0; Sat, 24 Jan 2026 18:21:43 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id F96plCfNxzwD; Sat, 24 Jan 2026 18:21:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1769275302; bh=skvuLEHGBka6Dg2v7dGJsi9ALh9pHYCWNTHLVvNSNt0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=g09z/CO+esZSH/eOyCgzMoauWUULqTQmrA5VE3LnJRsmG1JJOOzJSPsEe42NT4eve IZ0B4okhgN2NA4fOUaJ8koY7qk1T3Ox2UcwzR9zHfyrcQw80uFc6vvVs4bosI3qdaT i1GYpjgmKMYMx3JneNW3i2LNoJaY15GSGeSLAYqGmOlaOU6OnsmRF/4lWdynLtkelR LUFw7fXWP4/ivDI4DicMceSJNA/hPIHONvt/VUEoky4Bf1IvL1cegLMI+Vu28JIU4M 0D2kgyTBKbsV9aCvdW1urHSOVPgceFRpZKB9fOKmde5HSai+1Eu2VRcpl6kUsmU4Oa Q47pJSxiuYoiQ== From: Kaustabh Chakraborty Date: Sat, 24 Jan 2026 22:50:48 +0530 Subject: [PATCH 3/3] drm/bridge: samsung-dsim: use DSIM interrupt to wait for PLL stability Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260124-exynos-dsim-fixes-v1-3-122d047a23d1@disroot.org> References: <20260124-exynos-dsim-fixes-v1-0-122d047a23d1@disroot.org> In-Reply-To: <20260124-exynos-dsim-fixes-v1-0-122d047a23d1@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Kaustabh Chakraborty Stabilizing PLL needs to be waited for. This is done using a loop, checking the PLL_STABLE bit in the status register. DSIM fires an interrupt when the PLL is stabilized. Rely on this functionality for stabilization wait, getting rid of the implicit loop. This has been tested on a Galaxy J6 (Exynos 7870). Unfortunately, since testing on all supported devices is less feasible, introduce a stop-gap measure where the timeout has a gracious lower bound of 100 microseconds. This will (hopefully) prevent regressions due to timeout on other devices. Suggested-by: Inki Dae Link: https://lore.kernel.org/r/CAAQKjZMLMbwDVZRb5+Xb_5yz3AEP4uuzFJMuuZy9NF= Du13VU5w@mail.gmail.com Signed-off-by: Kaustabh Chakraborty Tested-by: Marek Szyprowski --- drivers/gpu/drm/bridge/samsung-dsim.c | 41 +++++++++++++++++++++++--------= ---- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 91f230953a49f..14d78e41886ee 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -788,7 +789,7 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, { const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; unsigned long fin, fout; - int timeout; + unsigned int timeout; u8 p, s; u16 m; u32 reg; @@ -849,19 +850,26 @@ static unsigned long samsung_dsim_set_pll(struct sams= ung_dsim *dsi, if (dsi->swap_dn_dp_data) reg |=3D DSIM_PLL_DPDNSWAP_DAT; =20 + /* + * The PLL_TIMER value is the product of the timeout delay and the APB + * bus clock rate. Calcutate the timeout delay on-the-fly here. + * It is assumed that the bus clock is the first clock in the provided + * bulk clock data. + */ + timeout =3D 100; + fin =3D clk_get_rate(dsi->driver_data->clk_data[0].clk) / HZ_PER_MHZ; + if (fin) + timeout =3D max(dsi->driver_data->reg_values[PLL_TIMER] / fin, + timeout); + + reinit_completion(&dsi->pll_stabilized); samsung_dsim_write(dsi, DSIM_PLLCTRL_REG, reg); =20 - timeout =3D 3000; - do { - if (timeout-- =3D=3D 0) { - dev_err(dsi->dev, "PLL failed to stabilize\n"); - return 0; - } - if (driver_data->has_legacy_status_reg) - reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); - else - reg =3D samsung_dsim_read(dsi, DSIM_LINK_STATUS_REG); - } while ((reg & BIT(driver_data->pll_stable_bit)) =3D=3D 0); + if (wait_for_completion_timeout(&dsi->pll_stabilized, + usecs_to_jiffies(timeout))) { + dev_err(dsi->dev, "PLL failed to stabilize\n"); + return 0; + } =20 dsi->hs_clock =3D fout; =20 @@ -1596,8 +1604,12 @@ static irqreturn_t samsung_dsim_irq(int irq, void *d= ev_id) return IRQ_HANDLED; } =20 - if (!(status & (DSIM_INT_RX_DONE | DSIM_INT_SFR_FIFO_EMPTY | - DSIM_INT_PLL_STABLE))) + if (status & DSIM_INT_PLL_STABLE) { + complete(&dsi->pll_stabilized); + return IRQ_HANDLED; + } + + if (!(status & (DSIM_INT_RX_DONE | DSIM_INT_SFR_FIFO_EMPTY))) return IRQ_HANDLED; =20 if (samsung_dsim_transfer_finish(dsi)) @@ -2147,6 +2159,7 @@ int samsung_dsim_probe(struct platform_device *pdev) return PTR_ERR(dsi); =20 init_completion(&dsi->completed); + init_completion(&dsi->pll_stabilized); spin_lock_init(&dsi->transfer_lock); INIT_LIST_HEAD(&dsi->transfer_list); =20 diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 03005e474704b..e3433da21ad08 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -123,6 +123,7 @@ struct samsung_dsim { int state; struct drm_property *brightness; struct completion completed; + struct completion pll_stabilized; =20 spinlock_t transfer_lock; /* protects transfer_list */ struct list_head transfer_list; --=20 2.52.0