remove the uset of tbm_backend_bufmgr_query_display_server 99/234599/3
authorSooChan Lim <sc1.lim@samsung.com>
Wed, 27 May 2020 09:09:36 +0000 (18:09 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Thu, 28 May 2020 06:29:56 +0000 (15:29 +0900)
The backend has to use the drmIsMaster() to check if the drm_fd
is the master fd instead of tbm_backend_bufmgr_query_display_server().

Change-Id: I1dbc5805e1d4275579954c6769b74f2c6eabc026

src/tbm_bufmgr_vc4.c

index 4dbd904..690a4ae 100644 (file)
@@ -556,7 +556,7 @@ _bufmgr_init_cache_state(tbm_bufmgr_vc4 bufmgr_vc4)
 #ifdef TGL_GET_VERSION
        if (!_tgl_get_version(bufmgr_vc4->tgl_fd)) {
                TBM_ERR("fail to get tgl_version. tgl init failed.\n");
-               close(bufmgr_sprd->tgl_fd);
+               close(bufmgr_vc4->tgl_fd);
                return 0;
        }
 #endif
@@ -2201,20 +2201,54 @@ tbm_vc4_init(tbm_bufmgr bufmgr, tbm_error_e *error)
                return NULL;
        }
 
-       if (tbm_backend_bufmgr_query_display_server(bufmgr, &err)) {
-               bufmgr_vc4->fd = tbm_drm_helper_get_master_fd();
+       /* check the master_fd which already had opened */
+       bufmgr_vc4->fd = tbm_drm_helper_get_master_fd();
+       if (bufmgr_vc4->fd < 0) {
+               bufmgr_vc4->fd = _tbm_vc4_open_drm();
                if (bufmgr_vc4->fd < 0) {
-                       bufmgr_vc4->fd = _tbm_vc4_open_drm();
-                       if (bufmgr_vc4->fd < 0) {
-                               TBM_ERR("fail to open drm!\n");
+                       TBM_ERR("fail to open drm!\n");
+                       if (error)
+                               *error = TBM_ERROR_INVALID_OPERATION;
+                       goto fail_open_drm;
+               }
+               if (drmIsMaster(bufmgr_vc4->fd)) {
+                       tbm_drm_helper_set_tbm_master_fd(bufmgr_vc4->fd);
+
+                       bufmgr_vc4->device_name = drmGetDeviceNameFromFd(bufmgr_vc4->fd);
+                       if (!bufmgr_vc4->device_name) {
+                               TBM_ERR("fail to get device name!\n");
+                               tbm_drm_helper_unset_tbm_master_fd();
                                if (error)
                                        *error = TBM_ERROR_INVALID_OPERATION;
-                               goto fail_open_drm;
+                               goto fail_get_device_name;
+                       }
+                       TBM_INFO("This is Master FD(%d) from open_drm.", bufmgr_vc4->fd);
+               } else {
+                       /* close the fd and get the authenticated fd from the master fd */
+                       close(bufmgr_vc4->fd);
+                       bufmgr_vc4->fd = -1;
+
+                       if (_check_render_node()) {
+                               bufmgr_vc4->fd = _get_render_node();//TODO
+                               if (bufmgr_vc4->fd < 0) {
+                                       TBM_ERR("fail to get render node\n");
+                                       if (error)
+                                               *error = TBM_ERROR_INVALID_OPERATION;
+                                       goto fail_get_render_node;
+                               }
+                               TBM_INFO("Use render node:%d\n", bufmgr_vc4->fd);
+                       } else {
+                               /* get the authenticated drm fd from the master fd */
+                               if (!tbm_drm_helper_get_auth_info(&(bufmgr_vc4->fd), &(bufmgr_vc4->device_name), NULL)) {
+                                       TBM_ERR("fail to get auth drm info!\n");
+                                       if (error)
+                                               *error = TBM_ERROR_INVALID_OPERATION;
+                                       goto fail_get_auth_info;
+                               }
+                               TBM_INFO("This is Authenticated FD(%d)", bufmgr_vc4->fd);
                        }
                }
-
-               tbm_drm_helper_set_tbm_master_fd(bufmgr_vc4->fd);
-
+       } else {
                bufmgr_vc4->device_name = drmGetDeviceNameFromFd(bufmgr_vc4->fd);
                if (!bufmgr_vc4->device_name) {
                        TBM_ERR("fail to get device name!\n");
@@ -2223,27 +2257,9 @@ tbm_vc4_init(tbm_bufmgr bufmgr, tbm_error_e *error)
                                *error = TBM_ERROR_INVALID_OPERATION;
                        goto fail_get_device_name;
                }
-               tbm_drm_helper_set_fd(bufmgr_vc4->fd);
-       } else {
-               if (_check_render_node()) {
-                       bufmgr_vc4->fd = _get_render_node();//TODO
-                       if (bufmgr_vc4->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_vc4->fd);
-               } else {
-                       if (!tbm_drm_helper_get_auth_info(&(bufmgr_vc4->fd), &(bufmgr_vc4->device_name), NULL)) {
-                               TBM_ERR("fail to get auth drm info!\n");
-                               if (error)
-                                       *error = TBM_ERROR_INVALID_OPERATION;
-                               goto fail_get_auth_info;
-                       }
-                       tbm_drm_helper_set_fd(bufmgr_vc4->fd);
-               }
+               TBM_INFO("This is Master FD from tbm_drm_helper_get_master_fd(%d)", bufmgr_vc4->fd);
        }
+       tbm_drm_helper_set_fd(bufmgr_vc4->fd);
 
        //Check if the tbm manager supports dma fence or not.
        fp = open("/sys/module/dmabuf_sync/parameters/enabled", O_RDONLY);
@@ -2345,7 +2361,7 @@ fail_alloc_bufmgr_func:
        if (bufmgr_vc4->hashBos)
                drmHashDestroy(bufmgr_vc4->hashBos);
 fail_init_cache_state:
-       if (tbm_backend_bufmgr_query_display_server(bufmgr, &err))
+       if (tbm_drm_helper_get_master_fd() >= 0)
                tbm_drm_helper_unset_tbm_master_fd();
        else
                tbm_drm_helper_unset_fd();