From: lsj119 Date: Fri, 21 Jun 2019 06:02:56 +0000 (+0900) Subject: Reduce the duplicate code X-Git-Tag: accepted/tizen/unified/20191104.115205~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4285c94f7c29e502d14e974a831e663ab7b54cc9;p=platform%2Fadaptation%2Fsamsung_exynos%2Flibtbm-exynos.git Reduce the duplicate code Change-Id: I5577289803397d3174803e574e2aca962d814a94 --- diff --git a/src/tbm_bufmgr_exynos.c b/src/tbm_bufmgr_exynos.c index 004088e..beead0b 100644 --- a/src/tbm_bufmgr_exynos.c +++ b/src/tbm_bufmgr_exynos.c @@ -200,6 +200,7 @@ const static char *STR_OPT[] = { "RDWR" }; +static int _get_render_node(int is_master); #ifdef TGL_GET_VERSION static inline int @@ -610,134 +611,17 @@ _tbm_exynos_open_drm() } if (fd < 0) { - struct udev *udev = NULL; - struct udev_enumerate *e = NULL; - struct udev_list_entry *entry = NULL; - struct udev_device *device = NULL, *drm_device = NULL, *device_parent = NULL; - const char *filepath; - struct stat s; - int ret; - - TBM_DBG("search drm-device by udev\n"); - - udev = udev_new(); - if (!udev) { - TBM_ERR("udev_new() failed.\n"); - return -1; - } - - e = udev_enumerate_new(udev); - udev_enumerate_add_match_subsystem(e, "drm"); - udev_enumerate_add_match_sysname(e, "card[0-9]*"); - udev_enumerate_scan_devices(e); - - udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) { - device = udev_device_new_from_syspath(udev_enumerate_get_udev(e), - udev_list_entry_get_name(entry)); - device_parent = udev_device_get_parent(device); - /* Not need unref device_parent. device_parent and device have same refcnt */ - if (device_parent) { - if (strcmp(udev_device_get_sysname(device_parent), "exynos-drm") == 0) { - drm_device = device; - TBM_DBG("Found render device: '%s' (%s)\n", - udev_device_get_syspath(drm_device), - udev_device_get_sysname(device_parent)); - break; - } - } - udev_device_unref(device); - } - - udev_enumerate_unref(e); - - /* Get device file path. */ - filepath = udev_device_get_devnode(drm_device); - if (!filepath) { - TBM_ERR("udev_device_get_devnode() failed.\n"); - udev_device_unref(drm_device); - udev_unref(udev); - return -1; - } - - /* Open DRM device file and check validity. */ - fd = open(filepath, O_RDWR | O_CLOEXEC); + fd = _get_render_node(1); if (fd < 0) { - TBM_ERR("open(%s, O_RDWR | O_CLOEXEC) failed.\n"); - udev_device_unref(drm_device); - udev_unref(udev); - return -1; + TBM_ERR("cannot find render_node\n"); } - - ret = fstat(fd, &s); - if (ret) { - TBM_ERR("fstat() failed %s.\n"); - close(fd); - udev_device_unref(drm_device); - udev_unref(udev); - return -1; - } - - udev_device_unref(drm_device); - udev_unref(udev); } return fd; } static int -_check_render_node(void) -{ -#ifndef USE_RENDER_NODE - return 0; -#else - struct udev *udev = NULL; - struct udev_enumerate *e = NULL; - struct udev_list_entry *entry = NULL; - struct udev_device *device = NULL, *drm_device = NULL, *device_parent = NULL; - - udev = udev_new(); - if (!udev) { - TBM_ERR("udev_new() failed.\n"); - return -1; - } - - e = udev_enumerate_new(udev); - udev_enumerate_add_match_subsystem(e, "drm"); - udev_enumerate_add_match_sysname(e, "renderD[0-9]*"); - udev_enumerate_scan_devices(e); - - udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) { - device = udev_device_new_from_syspath(udev_enumerate_get_udev(e), - udev_list_entry_get_name(entry)); - device_parent = udev_device_get_parent(device); - /* Not need unref device_parent. device_parent and device have same refcnt */ - if (device_parent) { - if (strcmp(udev_device_get_sysname(device_parent), "exynos-drm") == 0) { - drm_device = device; - TBM_DBG("Found render device: '%s' (%s)\n", - udev_device_get_syspath(drm_device), - udev_device_get_sysname(device_parent)); - break; - } - } - udev_device_unref(device); - } - - udev_enumerate_unref(e); - udev_unref(udev); - - if (!drm_device) { - udev_device_unref(drm_device); - return 0; - } - - udev_device_unref(drm_device); - return 1; -#endif -} - -static int -_get_render_node(void) +_get_render_node(int is_master) { struct udev *udev = NULL; struct udev_enumerate *e = NULL; @@ -748,6 +632,8 @@ _get_render_node(void) int fd = -1; int ret; + TBM_DBG("search drm-device by udev(is_master:%d)\n", is_master); + udev = udev_new(); if (!udev) { TBM_ERR("udev_new() failed.\n"); @@ -756,7 +642,10 @@ _get_render_node(void) e = udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(e, "drm"); - udev_enumerate_add_match_sysname(e, "renderD[0-9]*"); + if (is_master) + udev_enumerate_add_match_sysname(e, "card[0-9]*"); + else + udev_enumerate_add_match_sysname(e, "renderD[0-9]*"); udev_enumerate_scan_devices(e); udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) { @@ -778,6 +667,12 @@ _get_render_node(void) udev_enumerate_unref(e); + if (!drm_device) { + TBM_ERR("failed to find device\n"); + udev_unref(udev); + return -1; + } + /* Get device file path. */ filepath = udev_device_get_devnode(drm_device); if (!filepath) { @@ -2188,16 +2083,8 @@ tbm_exynos_init(tbm_bufmgr bufmgr, tbm_error_e *error) goto fail_get_device_name; } } else { - if (_check_render_node()) { - bufmgr_exynos->fd = _get_render_node(); - if (bufmgr_exynos->fd < 0) { - TBM_ERR("fail to get render node\n"); - if (error) - *error = TBM_ERROR_INVALID_OPERATION; - goto fail_get_render_node; - } - TBM_DBG("Use render node:%d\n", bufmgr_exynos->fd); - } else { + bufmgr_exynos->fd = _get_render_node(0); + if (bufmgr_exynos->fd < 0) { if (!tbm_drm_helper_get_auth_info(&(bufmgr_exynos->fd), &(bufmgr_exynos->device_name), NULL)) { TBM_ERR("fail to get auth drm info!\n"); if (error) @@ -2334,7 +2221,6 @@ fail_init_cache_state: fail_get_device_name: close(bufmgr_exynos->fd); fail_get_auth_info: -fail_get_render_node: fail_open_drm: free(bufmgr_exynos); return NULL;