[PATCH 1/5] drm/atomic: Refactor drm_atomic_state_realloc_connectors()
ville.syrjala at linux.intel.com
ville.syrjala at linux.intel.com
Thu Jun 29 13:49:44 UTC 2017
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
Pull the code to reallocate the state->connectors[] array into a
helper function. We'll have another use for this later.
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
drivers/gpu/drm/drm_atomic.c | 43 +++++++++++++++++++++++++++++--------------
include/drm/drm_atomic.h | 5 +++++
2 files changed, 34 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 095e87278a88..a9f02b214fc6 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1043,6 +1043,32 @@ drm_atomic_get_private_obj_state(struct drm_atomic_state *state, void *obj,
}
EXPORT_SYMBOL(drm_atomic_get_private_obj_state);
+int drm_atomic_state_realloc_connectors(struct drm_device *dev,
+ struct drm_atomic_state *state,
+ int index)
+{
+ struct drm_mode_config *config = &dev->mode_config;
+ struct __drm_connnectors_state *c;
+ int alloc = max(index + 1, config->num_connector);
+
+ if (index < state->num_connector)
+ return 0;
+
+ c = krealloc(state->connectors,
+ alloc * sizeof(*state->connectors), GFP_KERNEL);
+ if (!c)
+ return -ENOMEM;
+
+ state->connectors = c;
+ memset(&state->connectors[state->num_connector], 0,
+ sizeof(*state->connectors) * (alloc - state->num_connector));
+
+ state->num_connector = alloc;
+
+ return 0;
+}
+EXPORT_SYMBOL(drm_atomic_state_realloc_connectors);
+
/**
* drm_atomic_get_connector_state - get connector state
* @state: global atomic state object
@@ -1074,20 +1100,9 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
index = drm_connector_index(connector);
- if (index >= state->num_connector) {
- struct __drm_connnectors_state *c;
- int alloc = max(index + 1, config->num_connector);
-
- c = krealloc(state->connectors, alloc * sizeof(*state->connectors), GFP_KERNEL);
- if (!c)
- return ERR_PTR(-ENOMEM);
-
- state->connectors = c;
- memset(&state->connectors[state->num_connector], 0,
- sizeof(*state->connectors) * (alloc - state->num_connector));
-
- state->num_connector = alloc;
- }
+ ret = drm_atomic_state_realloc_connectors(connector->dev, state, index);
+ if (ret)
+ return ERR_PTR(ret);
if (state->connectors[index].state)
return state->connectors[index].state;
diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
index 0196f264a418..5596ad58bcdc 100644
--- a/include/drm/drm_atomic.h
+++ b/include/drm/drm_atomic.h
@@ -324,6 +324,11 @@ drm_atomic_get_private_obj_state(struct drm_atomic_state *state,
void *obj,
const struct drm_private_state_funcs *funcs);
+int __must_check
+drm_atomic_state_realloc_connectors(struct drm_device *dev,
+ struct drm_atomic_state *state,
+ int index);
+
/**
* drm_atomic_get_existing_crtc_state - get crtc state, if it exists
* @state: global atomic state object
--
2.13.0
More information about the dri-devel
mailing list