aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2009-04-10 15:24:10 -0700
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-04-10 15:24:10 -0700
commit3637dcc66d707aa9ababf0b12cd4a299559522f5 (patch)
tree3e044889a1f3eae99e6b1d7e9f70e6b377458162
parentfef29358bb407f35b90e8c6ee913e4979786cfd5 (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.c39
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;
}