diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c index 527764e235c7..51844a9c8025 100644 --- a/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -246,34 +246,6 @@ static struct video_info *rockchip_parse_video_info(const char *buf) return video_info; } -static struct video_info *rockchip_find_video_info(const char *buf) -{ - struct video_info *info, *video_info; - - video_info = rockchip_parse_video_info(buf); - - if (!video_info) - return NULL; - - mutex_lock(&video_info_mutex); - list_for_each_entry(info, &video_info_list, node) { - if (info->width == video_info->width && - info->height == video_info->height && - info->ishevc == video_info->ishevc && - info->videoFramerate == video_info->videoFramerate && - info->streamBitrate == video_info->streamBitrate) { - mutex_unlock(&video_info_mutex); - kfree(video_info); - return info; - } - } - - mutex_unlock(&video_info_mutex); - kfree(video_info); - - return NULL; -} - static void rockchip_add_video_info(struct video_info *video_info) { if (video_info) { @@ -285,12 +257,25 @@ static void rockchip_add_video_info(struct video_info *video_info) static void rockchip_del_video_info(struct video_info *video_info) { - if (video_info) { - mutex_lock(&video_info_mutex); - list_del(&video_info->node); - mutex_unlock(&video_info_mutex); - kfree(video_info); + struct video_info *info, *tmp; + + if (!video_info) + return; + + mutex_lock(&video_info_mutex); + list_for_each_entry_safe(info, tmp, &video_info_list, node) { + if (info->width == video_info->width && + info->height == video_info->height && + info->ishevc == video_info->ishevc && + info->videoFramerate == video_info->videoFramerate && + info->streamBitrate == video_info->streamBitrate) { + list_del(&info->node); + kfree(info); + break; + } } + kfree(video_info); + mutex_unlock(&video_info_mutex); } static void rockchip_update_video_info(void) @@ -338,7 +323,7 @@ void rockchip_update_system_status(const char *buf) switch (buf[0]) { case '0': /* clear video flag */ - video_info = rockchip_find_video_info(buf); + video_info = rockchip_parse_video_info(buf); if (video_info) { rockchip_del_video_info(video_info); rockchip_update_video_info();