diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-04-10 15:24:10 -0700 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-04-10 15:24:10 -0700 |
commit | 3637dcc66d707aa9ababf0b12cd4a299559522f5 (patch) | |
tree | 3e044889a1f3eae99e6b1d7e9f70e6b377458162 | |
parent | fef29358bb407f35b90e8c6ee913e4979786cfd5 (diff) |
Revert "libdrm: speed up connector & mode fetching"
This reverts commit cd5c66c659168cbe2e3229ebf8be79f764ed0ee1. It broke too
many kernel assumptions about the double ioctl (connector status, mode
fetching, etc.)
-rw-r--r-- | libdrm/xf86drmMode.c | 39 |
1 files changed, 7 insertions, 32 deletions
diff --git a/libdrm/xf86drmMode.c b/libdrm/xf86drmMode.c index e2aba810..872604ff 100644 --- a/libdrm/xf86drmMode.c +++ b/libdrm/xf86drmMode.c @@ -357,45 +357,21 @@ drmModeConnectorPtr drmModeGetConnector(int fd, uint32_t connector_id) { struct drm_mode_get_connector conn; drmModeConnectorPtr r = NULL; - int pre_props = 8, pre_modes = 16, pre_encoders = 4; conn.connector_id = connector_id; conn.connector_type_id = 0; conn.connector_type = 0; - conn.count_modes = pre_modes; - conn.count_props = pre_props; - conn.count_encoders = pre_encoders; - - /* - * Pre-allocate space for some modes, properties, and encoders. If - * we're lucky we won't need to call into the kernel twice. - */ - conn.props_ptr = VOID2U64(drmMalloc(pre_props * sizeof(uint32_t))); - conn.prop_values_ptr = VOID2U64(drmMalloc(pre_props * - sizeof(uint64_t))); - conn.modes_ptr = VOID2U64(drmMalloc(pre_modes * - sizeof(struct drm_mode_modeinfo))); - conn.encoders_ptr = VOID2U64(drmMalloc(pre_encoders * - sizeof(uint32_t))); + conn.count_modes = 0; + conn.modes_ptr = 0; + conn.count_props = 0; + conn.props_ptr = 0; + conn.prop_values_ptr = 0; + conn.count_encoders = 0; + conn.encoders_ptr = 0; if (drmIoctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn)) return 0; - if (conn.count_props <= pre_props && - conn.count_modes <= pre_modes && - conn.count_encoders <= pre_encoders) - goto done; - - /* Oh well, free & reallocate everything and ask again... */ - drmFree(U642VOID(conn.prop_values_ptr)); - drmFree(U642VOID(conn.props_ptr)); - drmFree(U642VOID(conn.modes_ptr)); - drmFree(U642VOID(conn.encoders_ptr)); - conn.prop_values_ptr = 0; - conn.props_ptr = 0; - conn.modes_ptr = 0; - conn.encoders_ptr = 0; - if (conn.count_props) { conn.props_ptr = VOID2U64(drmMalloc(conn.count_props*sizeof(uint32_t))); conn.prop_values_ptr = VOID2U64(drmMalloc(conn.count_props*sizeof(uint64_t))); @@ -410,7 +386,6 @@ drmModeConnectorPtr drmModeGetConnector(int fd, uint32_t connector_id) if (drmIoctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn)) goto err_allocs; -done: if(!(r = drmMalloc(sizeof(*r)))) { goto err_allocs; } |