Den 16.02.2021 17.40, skrev Noralf Trønnes:
Den 16.02.2021 14.36, skrev Oliver Neukum:
Am Freitag, den 12.02.2021, 18:46 +0100 schrieb Noralf Trønnes:
+static void gud_connector_early_unregister(struct drm_connector *connector) +{
struct gud_connector *gconn = to_gud_connector(connector);
backlight_device_unregister(gconn->backlight);
cancel_work_sync(&gconn->backlight_work);
+}
Hi,
this looks like you are creating a race condition where the queued work may operate on an already unregistered backlight.
backlight_device_unregister() sets bd->ops = NULL. This means that userspace can't update brightness anymore, and thus won't call into this driver. After that it should be safe to flush/cancel the workqueue.
Unless I'm missing something here.
And it's ok for the worker to operate on an unregistered backlight, the memory is still available. It's freed when the connector goes away.
Noralf.