From: Maxime Ripard <mripard@kernel.org>
To: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Dave Stevenson" <dave.stevenson@raspberrypi.com>,
"Maíra Canal" <mcanal@igalia.com>,
"Raspberry Pi Kernel Maintenance" <kernel-list@raspberrypi.com>,
"Andrzej Hajda" <andrzej.hajda@intel.com>,
"Neil Armstrong" <neil.armstrong@linaro.org>,
"Robert Foss" <rfoss@kernel.org>,
"Laurent Pinchart" <Laurent.pinchart@ideasonboard.com>,
"Jonas Karlman" <jonas@kwiboo.se>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
"Dmitry Baryshkov" <lumag@kernel.org>
Subject: Re: [PATCH v5 06/11] drm/display: add CEC helpers code
Date: Mon, 14 Apr 2025 16:58:48 +0200 [thread overview]
Message-ID: <20250414-determined-kind-peacock-e9a47c@houat> (raw)
In-Reply-To: <20250407-drm-hdmi-connector-cec-v5-6-04809b10d206@oss.qualcomm.com>
[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]
On Mon, Apr 07, 2025 at 06:11:03PM +0300, Dmitry Baryshkov wrote:
> +static void drm_connector_hdmi_cec_adapter_unregister(struct drm_connector *connector)
> +{
> + struct drm_connector_hdmi_cec_data *data = connector->cec.data;
> +
> + cec_delete_adapter(data->adapter);
> +
> + if (data->funcs->uninit)
> + data->funcs->uninit(connector);
> +
> + kfree(data);
> + connector->cec.data = NULL;
> +}
>
> [...]
>
> +int drm_connector_hdmi_cec_register(struct drm_connector *connector,
> + const struct drm_connector_hdmi_cec_funcs *funcs,
> + const char *name,
> + u8 available_las,
> + struct device *dev)
> +{
> + struct drm_connector_hdmi_cec_data *data;
> + struct cec_connector_info conn_info;
> + struct cec_adapter *cec_adap;
> + int ret;
> +
> + if (!funcs->init || !funcs->enable || !funcs->log_addr || !funcs->transmit)
> + return -EINVAL;
> +
> + data = kzalloc(sizeof(*data), GFP_KERNEL);
> + if (!data)
> + return -ENOMEM;
> +
> + data->funcs = funcs;
> +
> + cec_adap = cec_allocate_adapter(&drm_connector_hdmi_cec_adap_ops, connector, name,
> + CEC_CAP_DEFAULTS | CEC_CAP_CONNECTOR_INFO,
> + available_las ? : CEC_MAX_LOG_ADDRS);
> + ret = PTR_ERR_OR_ZERO(cec_adap);
> + if (ret < 0)
> + goto err_free;
> +
> + cec_fill_conn_info_from_drm(&conn_info, connector);
> + cec_s_conn_info(cec_adap, &conn_info);
> +
> + data->adapter = cec_adap;
> +
> + mutex_lock(&connector->cec.mutex);
> +
> + connector->cec.data = data;
> + connector->cec.funcs = &drm_connector_hdmi_cec_adapter_funcs;
> +
> + ret = funcs->init(connector);
> + if (ret < 0)
> + goto err_delete_adapter;
> +
> + ret = cec_register_adapter(cec_adap, dev);
> + if (ret < 0)
> + goto err_delete_adapter;
I'm a bit concerned about the respective lifetimes of CEC adapters and
DRM connectors.
When you register the CEC adapter, its associated structure is
kzalloc'd, and freed when the DRM connector is freed (so when nobody has
any reference to it anymore: either when the device is torn down, or a
DP-MST hotplug scenario).
The CEC adapter however will only be freed when its own users will close
their file descriptor. So we can have a scenario when the CEC adapter is
still live but the DRM connector has been unregistered. Thus, the CEC
adapter data will have been kfree'd.
You might consider safe because $REASONS, but those need to be properly
detailed and explained.
That's another reason why I think that just putting the connector
pointer as data is better: connectors are refcounted, so we know those
aren't an issue.
Maxime>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2025-04-14 14:58 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-07 15:10 [PATCH v5 00/11] drm/display: generic HDMI CEC helpers Dmitry Baryshkov
2025-04-07 15:10 ` [PATCH v5 01/11] drm/bridge: move private data to the end of the struct Dmitry Baryshkov
2025-04-07 15:10 ` [PATCH v5 02/11] drm/bridge: allow limiting I2S formats Dmitry Baryshkov
2025-04-07 15:11 ` [PATCH v5 03/11] drm/connector: add CEC-related fields Dmitry Baryshkov
2025-04-14 14:52 ` Maxime Ripard
2025-04-15 9:10 ` Dmitry Baryshkov
2025-04-28 16:42 ` Dmitry Baryshkov
2025-04-29 15:33 ` Maxime Ripard
2025-04-07 15:11 ` [PATCH v5 04/11] drm/connector: unregister CEC data Dmitry Baryshkov
2025-04-14 14:44 ` Maxime Ripard
2025-04-14 14:47 ` Maxime Ripard
2025-04-15 9:03 ` Dmitry Baryshkov
2025-04-29 15:35 ` Maxime Ripard
2025-04-29 16:46 ` Dmitry Baryshkov
2025-04-07 15:11 ` [PATCH v5 05/11] drm/display: move CEC_CORE selection to DRM_DISPLAY_HELPER Dmitry Baryshkov
2025-04-14 14:36 ` Maxime Ripard
2025-04-07 15:11 ` [PATCH v5 06/11] drm/display: add CEC helpers code Dmitry Baryshkov
2025-04-14 14:58 ` Maxime Ripard [this message]
2025-04-15 16:01 ` Dmitry Baryshkov
2025-04-29 15:40 ` Maxime Ripard
2025-04-30 11:25 ` Jani Nikula
2025-04-07 15:11 ` [PATCH v5 07/11] drm/display: hdmi-state-helper: handle CEC physical address Dmitry Baryshkov
2025-04-07 15:11 ` [PATCH v5 08/11] drm/vc4: hdmi: switch to generic CEC helpers Dmitry Baryshkov
2025-04-14 14:41 ` Maxime Ripard
2025-04-15 9:04 ` Dmitry Baryshkov
2025-04-07 15:11 ` [PATCH v5 09/11] drm/display: bridge-connector: hook in CEC notifier support Dmitry Baryshkov
2025-04-14 14:59 ` Maxime Ripard
2025-04-07 15:11 ` [PATCH v5 10/11] drm/display: bridge-connector: handle CEC adapters Dmitry Baryshkov
2025-04-14 15:05 ` Maxime Ripard
2025-04-07 15:11 ` [PATCH v5 11/11] drm/bridge: adv7511: switch to the HDMI connector helpers Dmitry Baryshkov
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=20250414-determined-kind-peacock-e9a47c@houat \
--to=mripard@kernel.org \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=kernel-list@raspberrypi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mcanal@igalia.com \
--cc=neil.armstrong@linaro.org \
--cc=rfoss@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®