• Arnd Bergmann's avatar
    drm/exynos: fix error handling in exynos_drm_subdrv_open · 55c4b906
    Arnd Bergmann authored
    gcc-6 warns about a pointless loop in exynos_drm_subdrv_open:
    
    drivers/gpu/drm/exynos/exynos_drm_core.c: In function 'exynos_drm_subdrv_open':
    drivers/gpu/drm/exynos/exynos_drm_core.c:104:199: error: self-comparison always evaluates to false [-Werror=tautological-compare]
      list_for_each_entry_reverse(subdrv, &subdrv->list, list) {
    
    Here, the list_for_each_entry_reverse immediately terminates because
    the subdrv pointer is compared to itself as the loop end condition.
    
    If we were to take the current subdrv pointer as the start of the
    list (as we would do if list_for_each_entry_reverse() was not a macro),
    we would iterate backwards over the &exynos_drm_subdrv_list anchor,
    which would be even worse.
    
    Instead, we need to use list_for_each_entry_continue_reverse()
    to go back over each subdrv that was successfully opened until
    the first entry.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
    55c4b906
exynos_drm_core.c 2.53 KB