[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <56337D00.9050906@samsung.com>
Date: Fri, 30 Oct 2015 15:21:52 +0100
From: Andrzej Hajda <a.hajda@...sung.com>
To: Archit Taneja <architt@...eaurora.org>,
dri-devel@...ts.freedesktop.org
Cc: linux-kernel@...r.kernel.org, airlied@...ux.ie, daniel@...ll.ch,
treding@...dia.com, l.stach@...gutronix.de, robh@...nel.org,
linux-arm-msm@...r.kernel.org, jani.nikula@...ux.intel.com
Subject: Re: [RFC v2 4/5] drm/dsi: Add routine to unregister dsi device
On 10/06/2015 11:24 AM, Archit Taneja wrote:
> A driver calling mipi_dsi_device_new might want to unregister the device
> once it's done. It might also require it in an error handling path in
> case something didn't go right.
>
> When the dsi host driver calls mipi_dsi_host_unregister, the devices
> created by both DT and and without DT will be removed. This does leave
> the possibility of the host removing the dsi device without the
> peripheral driver being aware of it. I don't know a good way to solve
> this. Some suggestions here would be of help too.
The 2nd paragraph is not relevant here. It is another issue. Some comments
about it:
I am not sure, but I guess device should not be removed if it is refcounted
properly, it will be just detached from the driver, bus and system (whatever it
means:) ).
It does not mean it will be usable and probably some races can occur anyway.
I guess i2c and other buses have the same problem, am I right?
>
> Signed-off-by: Archit Taneja <architt@...eaurora.org>
> ---
> drivers/gpu/drm/drm_mipi_dsi.c | 7 +++++++
> include/drm/drm_mipi_dsi.h | 2 ++
> 2 files changed, 9 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
> index db6130a..cbb7373 100644
> --- a/drivers/gpu/drm/drm_mipi_dsi.c
> +++ b/drivers/gpu/drm/drm_mipi_dsi.c
> @@ -183,6 +183,13 @@ err:
> }
> EXPORT_SYMBOL(mipi_dsi_device_new);
>
> +void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi)
> +{
> + if (dsi)
> + device_unregister(&dsi->dev);
> +}
> +EXPORT_SYMBOL(mipi_dsi_device_unregister);
> +
I guess NULL check can be removed and the whole function can be inlined.
Regards
Andrzej
> static struct mipi_dsi_device *
> of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
> {
> diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
> index 93dec7b..68f49f4 100644
> --- a/include/drm/drm_mipi_dsi.h
> +++ b/include/drm/drm_mipi_dsi.h
> @@ -197,6 +197,8 @@ ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params,
>
> struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host,
> struct mipi_dsi_device_info *info);
> +void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi);
> +
> /**
> * enum mipi_dsi_dcs_tear_mode - Tearing Effect Output Line mode
> * @MIPI_DSI_DCS_TEAR_MODE_VBLANK: the TE output line consists of V-Blanking
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists