Instead of generating a new usermode every time we need to copy a mode back to userspace, just use the cached one we already have. Signed-off-by: Daniel Stone <daniels@xxxxxxxxxxxxx> --- drivers/gpu/drm/drm_crtc.c | 15 +++++---------- drivers/gpu/drm/drm_modes.c | 4 ++-- include/drm/drm_modes.h | 2 -- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 6a7f07f..af9628b 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1936,8 +1936,8 @@ int drm_mode_getcrtc(struct drm_device *dev, crtc_resp->x = crtc->primary->state->src_x >> 16; crtc_resp->y = crtc->primary->state->src_y >> 16; if (crtc->state->enable) { - WARN_ON(!crtc->state->mode); - drm_mode_convert_to_umode(&crtc_resp->mode, crtc->state->mode); + memcpy(&crtc_resp->mode, &crtc->mode->umode, + sizeof(crtc_resp->mode)); crtc_resp->mode_valid = 1; } else { @@ -1947,9 +1947,8 @@ int drm_mode_getcrtc(struct drm_device *dev, crtc_resp->x = crtc->x; crtc_resp->y = crtc->y; if (crtc->enabled) { - WARN_ON(!crtc->mode); - drm_mode_convert_to_umode(&crtc_resp->mode, - crtc->mode); + memcpy(&crtc_resp->mode, &crtc->mode->umode, + sizeof(crtc_resp->mode)); crtc_resp->mode_valid = 1; } else { @@ -2046,15 +2045,12 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, int ret = 0; int copied = 0; int i; - struct drm_mode_modeinfo u_mode; struct drm_mode_modeinfo __user *mode_ptr; uint32_t __user *encoder_ptr; if (!drm_core_check_feature(dev, DRIVER_MODESET)) return -EINVAL; - memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo)); - DRM_DEBUG_KMS("[CONNECTOR:%d:?]\n", out_resp->connector_id); mutex_lock(&dev->mode_config.mutex); @@ -2106,9 +2102,8 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, if (!drm_mode_expose_to_userspace(mode, file_priv)) continue; - drm_mode_convert_to_umode(&u_mode, mode); if (copy_to_user(mode_ptr + copied, - &u_mode, sizeof(u_mode))) { + &mode->umode, sizeof(mode->umode))) { ret = -EFAULT; goto out; } diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 803e00a..0883f64 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -899,8 +899,8 @@ EXPORT_SYMBOL(drm_mode_duplicate); * Convert a drm_display_mode into a drm_mode_modeinfo structure to return to * the user. */ -void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out, - const struct drm_display_mode *in) +static void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out, + const struct drm_display_mode *in) { WARN(in->hdisplay > USHRT_MAX || in->hsync_start > USHRT_MAX || in->hsync_end > USHRT_MAX || in->htotal > USHRT_MAX || diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h index e7eb727..46ed207 100644 --- a/include/drm/drm_modes.h +++ b/include/drm/drm_modes.h @@ -219,8 +219,6 @@ struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, const struct drm_display_mode *mode); struct drm_display_mode *drm_mode_new_from_umode(struct drm_device *dev, const struct drm_mode_modeinfo *in); -void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out, - const struct drm_display_mode *in); bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2); bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1, -- 2.3.2 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel