Fix vboxvideo causing gnome 3.26+ to not work under VirtualBox
This commit is contained in:
parent
2870f98475
commit
bc0aa7a7d4
118
0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch
Normal file
118
0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
From 3b40f521aa2f42862203497a94ae77536f41ade2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Thu, 12 Oct 2017 19:44:48 +0200
|
||||||
|
Subject: [PATCH] staging: vboxvideo: Fix reporting invalid
|
||||||
|
suggested-offset-properties
|
||||||
|
|
||||||
|
The x and y hints receives from the host are unsigned 32 bit integers and
|
||||||
|
they get set to -1 (0xffffffff) when invalid. Before this commit the
|
||||||
|
vboxvideo driver was storing them in an u16 causing the -1 to be truncated
|
||||||
|
to 65535 which, once reported to userspace, was breaking gnome 3.26+
|
||||||
|
in Wayland mode.
|
||||||
|
|
||||||
|
This commit stores the host values in 32 bit variables, removing the
|
||||||
|
truncation and checks for -1, replacing it with 0 as -1 is not a valid
|
||||||
|
suggested-offset-property value. Likewise the properties are now
|
||||||
|
initialized to 0 instead of -1, since -1 is not a valid value.
|
||||||
|
This fixes gnome 3.26+ in Wayland mode not working with the vboxvideo
|
||||||
|
driver.
|
||||||
|
|
||||||
|
Reported-by: Gianfranco Costamagna <locutusofborg@debian.org>
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
Cc: Michael Thayer <michael.thayer@oracle.com>
|
||||||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
---
|
||||||
|
drivers/staging/vboxvideo/vbox_drv.h | 8 ++++----
|
||||||
|
drivers/staging/vboxvideo/vbox_irq.c | 4 ++--
|
||||||
|
drivers/staging/vboxvideo/vbox_mode.c | 26 ++++++++++++++++++--------
|
||||||
|
3 files changed, 24 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h
|
||||||
|
index 4b9302703b36..eeac4f0cb2c6 100644
|
||||||
|
--- a/drivers/staging/vboxvideo/vbox_drv.h
|
||||||
|
+++ b/drivers/staging/vboxvideo/vbox_drv.h
|
||||||
|
@@ -137,8 +137,8 @@ struct vbox_connector {
|
||||||
|
char name[32];
|
||||||
|
struct vbox_crtc *vbox_crtc;
|
||||||
|
struct {
|
||||||
|
- u16 width;
|
||||||
|
- u16 height;
|
||||||
|
+ u32 width;
|
||||||
|
+ u32 height;
|
||||||
|
bool disconnected;
|
||||||
|
} mode_hint;
|
||||||
|
};
|
||||||
|
@@ -150,8 +150,8 @@ struct vbox_crtc {
|
||||||
|
unsigned int crtc_id;
|
||||||
|
u32 fb_offset;
|
||||||
|
bool cursor_enabled;
|
||||||
|
- u16 x_hint;
|
||||||
|
- u16 y_hint;
|
||||||
|
+ u32 x_hint;
|
||||||
|
+ u32 y_hint;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct vbox_encoder {
|
||||||
|
diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/staging/vboxvideo/vbox_irq.c
|
||||||
|
index 3ca8bec62ac4..74abdf02d9fd 100644
|
||||||
|
--- a/drivers/staging/vboxvideo/vbox_irq.c
|
||||||
|
+++ b/drivers/staging/vboxvideo/vbox_irq.c
|
||||||
|
@@ -150,8 +150,8 @@ static void vbox_update_mode_hints(struct vbox_private *vbox)
|
||||||
|
|
||||||
|
disconnected = !(hints->enabled);
|
||||||
|
crtc_id = vbox_conn->vbox_crtc->crtc_id;
|
||||||
|
- vbox_conn->mode_hint.width = hints->cx & 0x8fff;
|
||||||
|
- vbox_conn->mode_hint.height = hints->cy & 0x8fff;
|
||||||
|
+ vbox_conn->mode_hint.width = hints->cx;
|
||||||
|
+ vbox_conn->mode_hint.height = hints->cy;
|
||||||
|
vbox_conn->vbox_crtc->x_hint = hints->dx;
|
||||||
|
vbox_conn->vbox_crtc->y_hint = hints->dy;
|
||||||
|
vbox_conn->mode_hint.disconnected = disconnected;
|
||||||
|
diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c
|
||||||
|
index 257a77830410..6f08dc966719 100644
|
||||||
|
--- a/drivers/staging/vboxvideo/vbox_mode.c
|
||||||
|
+++ b/drivers/staging/vboxvideo/vbox_mode.c
|
||||||
|
@@ -553,12 +553,22 @@ static int vbox_get_modes(struct drm_connector *connector)
|
||||||
|
++num_modes;
|
||||||
|
}
|
||||||
|
vbox_set_edid(connector, preferred_width, preferred_height);
|
||||||
|
- drm_object_property_set_value(
|
||||||
|
- &connector->base, vbox->dev->mode_config.suggested_x_property,
|
||||||
|
- vbox_connector->vbox_crtc->x_hint);
|
||||||
|
- drm_object_property_set_value(
|
||||||
|
- &connector->base, vbox->dev->mode_config.suggested_y_property,
|
||||||
|
- vbox_connector->vbox_crtc->y_hint);
|
||||||
|
+
|
||||||
|
+ if (vbox_connector->vbox_crtc->x_hint != -1)
|
||||||
|
+ drm_object_property_set_value(&connector->base,
|
||||||
|
+ vbox->dev->mode_config.suggested_x_property,
|
||||||
|
+ vbox_connector->vbox_crtc->x_hint);
|
||||||
|
+ else
|
||||||
|
+ drm_object_property_set_value(&connector->base,
|
||||||
|
+ vbox->dev->mode_config.suggested_x_property, 0);
|
||||||
|
+
|
||||||
|
+ if (vbox_connector->vbox_crtc->y_hint != -1)
|
||||||
|
+ drm_object_property_set_value(&connector->base,
|
||||||
|
+ vbox->dev->mode_config.suggested_y_property,
|
||||||
|
+ vbox_connector->vbox_crtc->y_hint);
|
||||||
|
+ else
|
||||||
|
+ drm_object_property_set_value(&connector->base,
|
||||||
|
+ vbox->dev->mode_config.suggested_y_property, 0);
|
||||||
|
|
||||||
|
return num_modes;
|
||||||
|
}
|
||||||
|
@@ -640,9 +650,9 @@ static int vbox_connector_init(struct drm_device *dev,
|
||||||
|
|
||||||
|
drm_mode_create_suggested_offset_properties(dev);
|
||||||
|
drm_object_attach_property(&connector->base,
|
||||||
|
- dev->mode_config.suggested_x_property, -1);
|
||||||
|
+ dev->mode_config.suggested_x_property, 0);
|
||||||
|
drm_object_attach_property(&connector->base,
|
||||||
|
- dev->mode_config.suggested_y_property, -1);
|
||||||
|
+ dev->mode_config.suggested_y_property, 0);
|
||||||
|
drm_connector_register(connector);
|
||||||
|
|
||||||
|
drm_mode_connector_attach_encoder(connector, encoder);
|
||||||
|
--
|
||||||
|
2.14.2
|
||||||
|
|
@ -652,6 +652,9 @@ Patch617: Fix-for-module-sig-verification.patch
|
|||||||
# rhbz 1431375
|
# rhbz 1431375
|
||||||
Patch619: input-rmi4-remove-the-need-for-artifical-IRQ.patch
|
Patch619: input-rmi4-remove-the-need-for-artifical-IRQ.patch
|
||||||
|
|
||||||
|
# fix gnome 3.26+ not working under VirtualBox, submitted upstream, Cc: Stable
|
||||||
|
Patch620: 0001-staging-vboxvideo-Fix-reporting-invalid-suggested-of.patch
|
||||||
|
|
||||||
# END OF PATCH DEFINITIONS
|
# END OF PATCH DEFINITIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -2206,6 +2209,9 @@ fi
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Oct 12 2017 Hans de Goede <jwrdegoede@fedoraproject.org>
|
||||||
|
- Fix vboxvideo causing gnome 3.26+ to not work under VirtualBox
|
||||||
|
|
||||||
* Wed Oct 11 2017 Jeremy Cline <jeremy@jcline.org>
|
* Wed Oct 11 2017 Jeremy Cline <jeremy@jcline.org>
|
||||||
- Fix incorrect updates of uninstantiated keys crash the kernel (rhbz 1498016 1498017)
|
- Fix incorrect updates of uninstantiated keys crash the kernel (rhbz 1498016 1498017)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user