On Sun, 19 Aug 2012 21:12:59 +0200
Daniel Vetter <[email protected]> wrote:

> We actually only touch the connector -> encoder and encoder -> crtc
> linking. So it's enough to just save/restore that.
> 
> Signed-Off-by: Daniel Vetter <[email protected]>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 28 +++++++++++++++-------------
>  drivers/gpu/drm/i915/intel_drv.h     |  4 ++--
>  2 files changed, 17 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c 
> b/drivers/gpu/drm/i915/intel_display.c
> index 56827d6..24706ca 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -6724,8 +6724,8 @@ done:
>  static void intel_set_config_free(struct intel_set_config *config)
>  {
>       if (config) {
> -             kfree(config->save_connectors);
> -             kfree(config->save_encoders);
> +             kfree(config->save_connector_encoders);
> +             kfree(config->save_encoder_crtcs);
>               kfree(config->save_crtcs);
>       }
>       kfree(config);
> @@ -6741,19 +6741,21 @@ static int intel_set_config_save_state(struct 
> drm_device *dev,
>  
>       /* Allocate space for the backup of all (non-pointer) crtc, encoder and
>        * connector data. */
> -     config->save_crtcs = kzalloc(dev->mode_config.num_crtc *
> +     config->save_crtcs = kcalloc(dev->mode_config.num_crtc,
>                                    sizeof(struct drm_crtc), GFP_KERNEL);
>       if (!config->save_crtcs)
>               return -ENOMEM;
>  
> -     config->save_encoders = kzalloc(dev->mode_config.num_encoder *
> -                                     sizeof(struct drm_encoder), GFP_KERNEL);
> -     if (!config->save_encoders)
> +     config->save_encoder_crtcs =
> +             kcalloc(dev->mode_config.num_encoder,
> +                     sizeof(struct drm_crtc *), GFP_KERNEL);
> +     if (!config->save_encoder_crtcs)
>               return -ENOMEM;
>  
> -     config->save_connectors = kzalloc(dev->mode_config.num_connector *
> -                                       sizeof(struct drm_connector), 
> GFP_KERNEL);
> -     if (!config->save_connectors)
> +     config->save_connector_encoders =
> +             kcalloc(dev->mode_config.num_connector,
> +                     sizeof(struct drm_encoder *), GFP_KERNEL);
> +     if (!config->save_connector_encoders)
>               return -ENOMEM;
>  
>       /* Copy data. Note that driver private data is not affected.
> @@ -6767,12 +6769,12 @@ static int intel_set_config_save_state(struct 
> drm_device *dev,
>  
>       count = 0;
>       list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
> -             config->save_encoders[count++] = *encoder;
> +             config->save_encoder_crtcs[count++] = encoder->crtc;
>       }
>  
>       count = 0;
>       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
> -             config->save_connectors[count++] = *connector;
> +             config->save_connector_encoders[count++] = connector->encoder;
>       }
>  
>       return 0;
> @@ -6793,12 +6795,12 @@ static void intel_set_config_restore_state(struct 
> drm_device *dev,
>  
>       count = 0;
>       list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
> -             *encoder = config->save_encoders[count++];
> +             encoder->crtc = config->save_encoder_crtcs[count++];
>       }
>  
>       count = 0;
>       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
> -             *connector = config->save_connectors[count++];
> +             connector->encoder = config->save_connector_encoders[count++];
>       }
>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h 
> b/drivers/gpu/drm/i915/intel_drv.h
> index fad11c8..4946282 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -424,8 +424,8 @@ extern void intel_panel_destroy_backlight(struct 
> drm_device *dev);
>  extern enum drm_connector_status intel_panel_detect(struct drm_device *dev);
>  
>  struct intel_set_config {
> -     struct drm_connector *save_connectors;
> -     struct drm_encoder *save_encoders;
> +     struct drm_encoder **save_connector_encoders;
> +     struct drm_crtc **save_encoder_crtcs;
>       struct drm_crtc *save_crtcs;
>  
>       bool fb_changed;

Sneaky that you moved to kcalloc too :)

Reviewed-by: Jesse Barnes <[email protected]>

-- 
Jesse Barnes, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to