This functionality may be helpful in drivers so export it for reusability. Found by Linux Verification Center (linuxtesting.org).
Signed-off-by: Fedor Pchelkin <pchel...@ispras.ru> --- drivers/gpu/drm/drm_connector.c | 8 +------- drivers/gpu/drm/drm_modes.c | 15 +++++++++++++++ include/drm/drm_modes.h | 1 + 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 272d6254ea47..0a3933b6ceec 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -27,6 +27,7 @@ #include <drm/drm_encoder.h> #include <drm/drm_file.h> #include <drm/drm_managed.h> +#include <drm/drm_modes.h> #include <drm/drm_panel.h> #include <drm/drm_print.h> #include <drm/drm_privacy_screen_consumer.h> @@ -696,13 +697,6 @@ bool drm_connector_has_possible_encoder(struct drm_connector *connector, } EXPORT_SYMBOL(drm_connector_has_possible_encoder); -static void drm_mode_remove(struct drm_connector *connector, - struct drm_display_mode *mode) -{ - list_del(&mode->head); - drm_mode_destroy(connector->dev, mode); -} - /** * drm_connector_cec_phys_addr_invalidate - invalidate CEC physical address * @connector: connector undergoing CEC operation diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index e72f855fc495..6e021328f9c2 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -117,6 +117,21 @@ void drm_mode_probed_add(struct drm_connector *connector, } EXPORT_SYMBOL(drm_mode_probed_add); +/** + * drm_mode_remove - remove a mode from the associated list and destroy it + * @connector: connector of the mode + * @mode: mode data + * + * Remove @mode from the associated list, then free @mode object itself. + */ +void drm_mode_remove(struct drm_connector *connector, + struct drm_display_mode *mode) +{ + list_del(&mode->head); + drm_mode_destroy(connector->dev, mode); +} +EXPORT_SYMBOL(drm_mode_remove); + enum drm_mode_analog { DRM_MODE_ANALOG_NTSC, /* 525 lines, 60Hz */ DRM_MODE_ANALOG_PAL, /* 625 lines, 50Hz */ diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h index b9bb92e4b029..d7b66321f60d 100644 --- a/include/drm/drm_modes.h +++ b/include/drm/drm_modes.h @@ -460,6 +460,7 @@ int drm_mode_convert_umode(struct drm_device *dev, struct drm_display_mode *out, const struct drm_mode_modeinfo *in); void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); +void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); void drm_mode_debug_printmodeline(const struct drm_display_mode *mode); bool drm_mode_is_420_only(const struct drm_display_info *display, const struct drm_display_mode *mode); -- 2.50.1