[PATCH 11/15] staging: vboxvideo: Fix DPMS support after atomic conversion

Hans de Goede hdegoede at redhat.com
Mon Oct 1 09:37:29 UTC 2018


Hi,

On 01-10-18 09:53, Daniel Vetter wrote:
> On Wed, Sep 26, 2018 at 09:42:02PM +0200, Hans de Goede wrote:
>> Atomic modesetting does not use the traditional dpms call backs, instead
>> we should check crtc_state->active.
>>
>> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> 
> Are you sure this does what you want it to do? Atomic helpers fully shut
> down the screen when you do a dpms off, "just blanked" kinda doesn't exist
> as a state by default.

Yes I'm sure I tested "xset dpms force off" and before this would
result in in the virtual monitors (just windows on the host) to resize to
640x480 and in that 640x480 still show part of the old contents.

After this patch they become black instead.

Note somewhat related, Virtualbox does not allow closing a window from
within the guest, if the user wants to stop using an (extra) virtual monitor
it needs to be disabled in the VMs UI. Turning of a monitor through e.g.
"xrandr --output foo --off" just makes the window black.

Regards,

Hans




> -Daniel
> 
>> ---
>>   drivers/staging/vboxvideo/vbox_drv.h  |  1 -
>>   drivers/staging/vboxvideo/vbox_mode.c | 28 ++-------------------------
>>   2 files changed, 2 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h
>> index fccb3851d6a3..9cc20c182df1 100644
>> --- a/drivers/staging/vboxvideo/vbox_drv.h
>> +++ b/drivers/staging/vboxvideo/vbox_drv.h
>> @@ -139,7 +139,6 @@ struct vbox_connector {
>>   
>>   struct vbox_crtc {
>>   	struct drm_crtc base;
>> -	bool blanked;
>>   	bool disconnected;
>>   	unsigned int crtc_id;
>>   	u32 fb_offset;
>> diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c
>> index c4ec3fa49782..49ff9c4a6302 100644
>> --- a/drivers/staging/vboxvideo/vbox_mode.c
>> +++ b/drivers/staging/vboxvideo/vbox_mode.c
>> @@ -84,14 +84,13 @@ static void vbox_do_modeset(struct drm_crtc *crtc)
>>   	}
>>   
>>   	flags = VBVA_SCREEN_F_ACTIVE;
>> -	flags |= (fb && !vbox_crtc->blanked) ? 0 : VBVA_SCREEN_F_BLANK;
>> +	flags |= (fb && crtc->state->active) ? 0 : VBVA_SCREEN_F_BLANK;
>>   	flags |= vbox_crtc->disconnected ? VBVA_SCREEN_F_DISABLED : 0;
>>   	hgsmi_process_display_info(vbox->guest_pool, vbox_crtc->crtc_id,
>>   				   x_offset, y_offset,
>>   				   vbox_crtc->x * bpp / 8 +
>>   							vbox_crtc->y * pitch,
>> -				   pitch, width, height,
>> -				   vbox_crtc->blanked ? 0 : bpp, flags);
>> +				   pitch, width, height, bpp, flags);
>>   }
>>   
>>   static int vbox_set_view(struct drm_crtc *crtc)
>> @@ -128,27 +127,6 @@ static int vbox_set_view(struct drm_crtc *crtc)
>>   	return 0;
>>   }
>>   
>> -static void vbox_crtc_dpms(struct drm_crtc *crtc, int mode)
>> -{
>> -	struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc);
>> -	struct vbox_private *vbox = crtc->dev->dev_private;
>> -
>> -	switch (mode) {
>> -	case DRM_MODE_DPMS_ON:
>> -		vbox_crtc->blanked = false;
>> -		break;
>> -	case DRM_MODE_DPMS_STANDBY:
>> -	case DRM_MODE_DPMS_SUSPEND:
>> -	case DRM_MODE_DPMS_OFF:
>> -		vbox_crtc->blanked = true;
>> -		break;
>> -	}
>> -
>> -	mutex_lock(&vbox->hw_mutex);
>> -	vbox_do_modeset(crtc);
>> -	mutex_unlock(&vbox->hw_mutex);
>> -}
>> -
>>   /*
>>    * Try to map the layout of virtual screens to the range of the input device.
>>    * Return true if we need to re-set the crtc modes due to screen offset
>> @@ -276,7 +254,6 @@ static void vbox_crtc_atomic_flush(struct drm_crtc *crtc,
>>   }
>>   
>>   static const struct drm_crtc_helper_funcs vbox_crtc_helper_funcs = {
>> -	.dpms = vbox_crtc_dpms,
>>   	.disable = vbox_crtc_disable,
>>   	.commit = vbox_crtc_commit,
>>   	.atomic_flush = vbox_crtc_atomic_flush,
>> @@ -861,7 +838,6 @@ static const struct drm_connector_helper_funcs vbox_connector_helper_funcs = {
>>   };
>>   
>>   static const struct drm_connector_funcs vbox_connector_funcs = {
>> -	.dpms = drm_helper_connector_dpms,
>>   	.detect = vbox_connector_detect,
>>   	.fill_modes = vbox_fill_modes,
>>   	.destroy = vbox_connector_destroy,
>> -- 
>> 2.19.0
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 


More information about the devel mailing list