xf86-video-amdgpu: Branch 'master' - 2 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Thu May 25 03:43:07 UTC 2017


 README                |   14 +++++++-------
 configure.ac          |    2 +-
 man/amdgpu.man        |    6 +++---
 src/amdgpu_kms.c      |    7 ++-----
 src/drmmode_display.c |   21 +++++++++++----------
 src/drmmode_display.h |    3 +++
 6 files changed, 27 insertions(+), 26 deletions(-)

New commits:
commit 000e5eaeb20607508c5c5371654615a30a8a1b0b
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed May 24 10:12:55 2017 +0900

    Update URLs
    
    * Point to the amd-gfx mailing list
    * Specify the component in all bugzilla URLs
    * Use https:// for all HTML URLs
    
    (Ported from radeon commit d80d01a73c2eaba2e3649b7bc0a3541b3ff782f6)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/README b/README
index 98deab9..1a74a12 100644
--- a/README
+++ b/README
@@ -1,25 +1,25 @@
 xf86-video-amdgpu - AMD Radeon video driver for the Xorg X server
 
-All questions regarding this software should be directed at the
-Xorg mailing list:
+Patches and questions regarding this software should be directed at the
+amd-gfx mailing list:
 
-        http://lists.freedesktop.org/mailman/listinfo/xorg
+        https://lists.freedesktop.org/mailman/listinfo/amd-gfx
 
 Please submit bug reports to the Xorg bugzilla:
 
-        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
+        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu
 
 The master development code repository can be found at:
 
         git://anongit.freedesktop.org/git/xorg/driver/xf86-video-amdgpu
 
-        http://cgit.freedesktop.org/xorg/driver/xf86-video-amdgpu
+        https://cgit.freedesktop.org/xorg/driver/xf86-video-amdgpu
 
 For patch submission instructions, see:
 
-	http://www.x.org/wiki/Development/Documentation/SubmittingPatches
+        https://www.x.org/wiki/Development/Documentation/SubmittingPatches
 
 For more information on the git code manager, see:
 
-        http://wiki.x.org/wiki/GitPage
+        https://wiki.x.org/wiki/GitPage
 
diff --git a/configure.ac b/configure.ac
index 9110f35..26eb52d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,7 @@
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-amdgpu],
         [1.3.99],
-        [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
+        [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu],
         [xf86-video-amdgpu])
 
 AC_CONFIG_SRCDIR([Makefile.am])
diff --git a/man/amdgpu.man b/man/amdgpu.man
index 13ffb7a..d6904b8 100644
--- a/man/amdgpu.man
+++ b/man/amdgpu.man
@@ -115,17 +115,17 @@ __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(_
 .IP " 1." 4
 Wiki page:
 .RS 4
-http://www.x.org/wiki/radeon
+https://www.x.org/wiki/radeon
 .RE
 .IP " 2." 4
 Overview about amdgpu development code:
 .RS 4
-http://cgit.freedesktop.org/xorg/driver/xf86-video-amdgpu/
+https://cgit.freedesktop.org/xorg/driver/xf86-video-amdgpu/
 .RE
 .IP " 3." 4
 Mailing list:
 .RS 4
-http://lists.freedesktop.org/mailman/listinfo/amd-gfx
+https://lists.freedesktop.org/mailman/listinfo/amd-gfx
 .RE
 .IP " 4." 4
 IRC channel:
commit 2ea2d4d827f086098be198f110ca822ed2c290cd
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Fri May 12 19:01:18 2017 +0900

    Simplify tracking of PRIME scanout pixmap
    
    Remember the shared pixmap passed to drmmode_set_scanout_pixmap for each
    CRTC, and just compare against that.
    
    Fixes leaving stale entries in ScreenRec::pixmap_dirty_list under some
    circumstances, which would usually result in use-after-free and a crash
    down the line.
    
    (Ported from radeon commit 7dc68e26755466f9056f8c72195ab8690660693d)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 4df81f9..a418cf9 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -562,8 +562,7 @@ amdgpu_prime_dirty_to_crtc(PixmapDirtyUpdatePtr dirty)
 		xf86CrtcPtr xf86_crtc = xf86_config->crtc[c];
 		drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
 
-		if (drmmode_crtc->scanout[0].pixmap == dirty->slave_dst ||
-			drmmode_crtc->scanout[1].pixmap == dirty->slave_dst)
+		if (drmmode_crtc->prime_scanout_pixmap == dirty->src)
 			return xf86_crtc;
 	}
 
@@ -576,13 +575,11 @@ amdgpu_prime_scanout_do_update(xf86CrtcPtr crtc, unsigned scanout_id)
 	ScrnInfoPtr scrn = crtc->scrn;
 	ScreenPtr screen = scrn->pScreen;
 	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
-	PixmapPtr scanoutpix = crtc->randr_crtc->scanout_pixmap;
 	PixmapDirtyUpdatePtr dirty;
 	Bool ret = FALSE;
 
 	xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
-		if (dirty->src == scanoutpix && dirty->slave_dst ==
-		    drmmode_crtc->scanout[scanout_id ^ drmmode_crtc->tear_free].pixmap) {
+		if (dirty->src == drmmode_crtc->prime_scanout_pixmap) {
 			RegionPtr region;
 
 			if (master_has_sync_shared_pixmap(scrn, dirty))
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 9996d2f..add8287 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -681,9 +681,7 @@ drmmode_crtc_prime_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode,
 
 		xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list,
 					 ent) {
-			if (dirty->src == crtc->randr_crtc->scanout_pixmap &&
-			    dirty->slave_dst ==
-			    drmmode_crtc->scanout[drmmode_crtc->scanout_id].pixmap) {
+			if (dirty->src == drmmode_crtc->prime_scanout_pixmap) {
 				dirty->slave_dst =
 					drmmode_crtc->scanout[scanout_id].pixmap;
 				break;
@@ -838,7 +836,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
 
 		fb_id = drmmode->fb_id;
 #ifdef AMDGPU_PIXMAP_SHARING
-		if (crtc->randr_crtc && crtc->randr_crtc->scanout_pixmap) {
+		if (drmmode_crtc->prime_scanout_pixmap) {
 			drmmode_crtc_prime_scanout_update(crtc, mode, scanout_id,
 							  &fb_id, &x, &y);
 		} else
@@ -1242,14 +1240,15 @@ static Bool drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix)
 	PixmapDirtyUpdatePtr dirty;
 
 	xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
-		if (dirty->slave_dst != drmmode_crtc->scanout[scanout_id].pixmap)
-			continue;
-
-		PixmapStopDirtyTracking(dirty->src, dirty->slave_dst);
-		drmmode_crtc_scanout_free(drmmode_crtc);
-		break;
+		if (dirty->src == drmmode_crtc->prime_scanout_pixmap) {
+			PixmapStopDirtyTracking(dirty->src, dirty->slave_dst);
+			break;
+		}
 	}
 
+	drmmode_crtc_scanout_free(drmmode_crtc);
+	drmmode_crtc->prime_scanout_pixmap = NULL;
+
 	if (!ppix)
 		return TRUE;
 
@@ -1266,6 +1265,8 @@ static Bool drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix)
 		return FALSE;
 	}
 
+	drmmode_crtc->prime_scanout_pixmap = ppix;
+
 #ifdef HAS_DIRTYTRACKING_ROTATION
 	PixmapStartDirtyTracking(ppix, drmmode_crtc->scanout[scanout_id].pixmap,
 				 0, 0, 0, 0, RR_Rotate_0);
diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index 2d5698f..6a57fd2 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -83,6 +83,9 @@ typedef struct {
 	unsigned scanout_id;
 	Bool scanout_update_pending;
 	Bool tear_free;
+
+	PixmapPtr prime_scanout_pixmap;
+
 	int dpms_mode;
 	/* For when a flip is pending when DPMS off requested */
 	int pending_dpms_mode;


More information about the xorg-commit mailing list