[PATCH] modesetting: Fix software cursor fallback

Adel Gadllah adel.gadllah at gmail.com
Fri May 8 09:02:26 PDT 2015


The code in drmmode_set_cursor does not properly handle the case where
drmModeSetCursor2 returns any other error than EINVAL and silently fails to
set a cursor.

So only return when the drmModeSetCursor2 succeeds (i.e returns 0) and disable
the cursor2 usage on EINVAL and thus fall back to the drmModeSetCursor which
handles other error cases (including falling back to using software cursors).

References: https://bugzilla.redhat.com/show_bug.cgi?id=1205725
Signed-off-by: Adel Gadllah <adel.gadllah at gmail.com>
Reviewed-by: Michel Dänzer <michel at daenzer.net>
Reviewed-by: Rob Clark <robdclark at gmail.com>
---
 hw/xfree86/drivers/modesetting/drmmode_display.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
index 824500b..912abda 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
@@ -396,10 +396,10 @@ drmmode_set_cursor(xf86CrtcPtr crtc)
             drmModeSetCursor2(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
                               handle, ms->cursor_width, ms->cursor_height,
                               cursor->bits->xhot, cursor->bits->yhot);
+        if (!ret)
+            return;
         if (ret == -EINVAL)
             use_set_cursor2 = FALSE;
-        else
-            return;
     }
 
     ret = drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, handle,
-- 
2.1.0



More information about the xorg-devel mailing list