Thank you for your contribution! Sashiko AI review found 2 potential issue(s) 
to consider:
- [Medium] drm: wrapping EXPORT_SYMBOL_GPL functions with EXPORT_SYMBOL
- [Low] drm: kernel-doc mismatch for DRM_BRIDGE_DETACHED enum
--

commit dcfd2e822b2355745325f20ab78b53e5e57972ac
Author: Luca Ceresoli <[email protected]>

drm: event-notifier: add mechanism to notify about hotplug events

In preparation for supporting DRM bridge hotplug, this commit adds an event
notifier. It allows interested parties to be notified about events they need
to react to, such as bridge detach and MIPI device attach.

> diff --git a/drivers/gpu/drm/drm_event_notifier.c 
> b/drivers/gpu/drm/drm_event_notifier.c
> index 0000000000000..76af4dd4cdb02
> --- /dev/null
> +++ b/drivers/gpu/drm/drm_event_notifier.c
[ ... ]
> +/**
> + * drm_event_notifier_register - Register to be notified of DRM events
> + * @nb: the notifier block to be registered
> + *
> + * @nb will be notified of events defined in &drm_event_notifier_event
> + *
> + * Returns 0 on success, %-EEXIST on error.
> + */
> +int drm_event_notifier_register(struct notifier_block *nb)
> +{
> +     return blocking_notifier_chain_register(&drm_event_notifier, nb);
> +}
> +EXPORT_SYMBOL(drm_event_notifier_register);

[Severity: Medium]
Does this create a GPL-bypass? The core API blocking_notifier_chain_register()
is exported strictly as EXPORT_SYMBOL_GPL, but wrapping it here and exporting
drm_event_notifier_register() via EXPORT_SYMBOL could allow proprietary modules
to access GPL-only core functionality.

[ ... ]
> +/**
> + * drm_event_notifier_unregister - Unregister from be notified of DRM events
> + * @nb: the notifier block to be unregistered
> + *
> + * @nb will stop being notified of events defined in 
> &drm_event_notifier_event
> + *
> + * Returns zero on success or %-ENOENT on failure.
> + */
> +int drm_event_notifier_unregister(struct notifier_block *nb)
> +{
> +     return blocking_notifier_chain_unregister(&drm_event_notifier, nb);
> +}
> +EXPORT_SYMBOL(drm_event_notifier_unregister);

[Severity: Medium]
Similar to the register function, does wrapping 
blocking_notifier_chain_unregister()
with EXPORT_SYMBOL inadvertently allow proprietary modules to bypass the license
restriction?

[ ... ]
> +/**
> + * drm_event_notifier_notify - Emit an event to be notified to registered
> + *                             entities
> + * @event: event ID as defined in &drm_event_notifier_event
> + * @data: metadata associated to the event
> + */
> +void drm_event_notifier_notify(unsigned long event, void *data)
> +{
> +     blocking_notifier_call_chain(&drm_event_notifier, event, data);
> +}
> +EXPORT_SYMBOL(drm_event_notifier_notify);

[Severity: Medium]
Is it intentional to export this via EXPORT_SYMBOL? Since
blocking_notifier_call_chain() is EXPORT_SYMBOL_GPL, this wrapper effectively
bypasses that restriction for loadable modules calling 
drm_event_notifier_notify().

> diff --git a/include/drm/drm_event_notifier.h 
> b/include/drm/drm_event_notifier.h
> index 0000000000000..2457719d50fe1
> --- /dev/null
> +++ b/include/drm/drm_event_notifier.h
[ ... ]
> +enum drm_event_notifier_event {
> +     /**
> +      * @DRM_MIPI_DSI_ATTACHED: A MIPI DSI device has just been attached
> +      * to its MIPI DSI host. @data is a pointer to the &struct
> +      * mipi_dsi_device that has just attached.
> +      */
> +     DRM_MIPI_DSI_ATTACHED,
> +     /**
> +      * @DRM_BRIDGE_NOTIFY_DETACHED: A bridge has just been detached
> +      * from the encoder bridge chain. Emitted at the end of
> +      * drm_bridge_detach(), after removing the bridge from the encoder
> +      * chain. @data is a pointer to the &struct drm_bridge that has
> +      * just been detached.
> +      */
> +     DRM_BRIDGE_DETACHED,

[Severity: Low]
This isn't a bug, but there is a kernel-doc mismatch here in
drm_event_notifier_event. The comment refers to @DRM_BRIDGE_NOTIFY_DETACHED,
but the actual enum value is DRM_BRIDGE_DETACHED. This will cause kernel-doc
parsing warnings.

> +};
> +
> +int drm_event_notifier_register(struct notifier_block *nb);
> +int drm_event_notifier_unregister(struct notifier_block *nb);
> +void drm_event_notifier_notify(unsigned long event, void *data);
> +
> +#endif /* _DRM_EVENT_NOTIFIER_H_ */

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=14

Reply via email to