Hello community, here is the log from the commit of package xf86-video-ati for openSUSE:Factory checked in at 2018-04-07 20:49:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xf86-video-ati (Old) and /work/SRC/openSUSE:Factory/.xf86-video-ati.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xf86-video-ati" Sat Apr 7 20:49:28 2018 rev:33 rq:593545 version:18.0.1 Changes: -------- --- /work/SRC/openSUSE:Factory/xf86-video-ati/xf86-video-ati.changes 2018-03-12 12:04:51.186224986 +0100 +++ /work/SRC/openSUSE:Factory/.xf86-video-ati.new/xf86-video-ati.changes 2018-04-07 20:49:37.246539282 +0200 @@ -1,0 +2,14 @@ +Wed Apr 4 13:00:02 UTC 2018 - sndir...@suse.com + +- Update to release 18.0.1 + * This release supports xserver versions 1.13-1.19. It also works with + xserver 1.20 RC1, so unless something unexpected happens, it should work + with xserver 1.20 as well. + This is a bug-fix release addressing issues in 18.0.0. While those + issues shouldn't affect most users, I recommend that all users of 18.0.0 + update to 18.0.1. + + The Xorg process could crash when multiple primary screens are + configured in xorg.conf. + + TearFree could trigger debugging messages in the pixman library + +------------------------------------------------------------------- Old: ---- xf86-video-ati-18.0.0.tar.bz2 xf86-video-ati-18.0.0.tar.bz2.sig New: ---- xf86-video-ati-18.0.1.tar.bz2 xf86-video-ati-18.0.1.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xf86-video-ati.spec ++++++ --- /var/tmp/diff_new_pack.g3gXiY/_old 2018-04-07 20:49:37.986512501 +0200 +++ /var/tmp/diff_new_pack.g3gXiY/_new 2018-04-07 20:49:37.986512501 +0200 @@ -18,7 +18,7 @@ %define xserver_glamor 1 Name: xf86-video-ati -Version: 18.0.0 +Version: 18.0.1 Release: 0 Summary: ATI video driver for the Xorg X server License: MIT ++++++ xf86-video-ati-18.0.0.tar.bz2 -> xf86-video-ati-18.0.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/ChangeLog new/xf86-video-ati-18.0.1/ChangeLog --- old/xf86-video-ati-18.0.0/ChangeLog 2018-03-06 18:30:40.000000000 +0100 +++ new/xf86-video-ati-18.0.1/ChangeLog 2018-03-15 17:21:41.000000000 +0100 @@ -1,3 +1,40 @@ +commit fdba5373522c008f43e9ca5a9e76e35c6e7ad73d +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Thu Mar 15 17:19:59 2018 +0100 + + Bump version for 18.0.1 release + +commit e0f5020117d0a6340f4208ec52bd3e3b3aa99a1b +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Wed Mar 14 16:54:52 2018 +0100 + + Pass extents to radeon_scanout_do_update by value + + radeon_scanout_extents_intersect could leave the scanout damage region + in an invalid state, triggering debugging checks in pixman: + + *** BUG *** + In pixman_region_append_non_o: The expression r->x1 < r->x2 was false + Set a breakpoint on '_pixman_log_error' to debug + + (Ported from amdgpu commit 8af989546907ad9fb491d940e1936d3bfc89276b) + +commit b915e8e6fb956e983c2ce2a5565c20838c85707c +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Wed Mar 7 17:28:55 2018 +0100 + + Wrap the whole miPointerScreenFuncRec, instead of only Set/MoveCursor + + We were clobbering entries in mi's global miSpritePointerFuncs struct, + which cannot work correctly with multiple primary screens. Instead, + assign a pointer to our own wrapper struct to PointPriv->spriteFuncs. + + Fixes crashes with multiple primary screens. + + Fixes: 1fe8ca75974c ("Keep track of how many SW cursors are visible on + each screen") + Reported-by: Mario Kleiner <mario.kleiner...@gmail.com> + commit 7e18aea984e186dd2ab1144470b0c0e832562ad1 Author: Michel Dänzer <michel.daen...@amd.com> Date: Tue Mar 6 18:15:45 2018 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/configure new/xf86-video-ati-18.0.1/configure --- old/xf86-video-ati-18.0.0/configure 2018-03-06 18:30:19.000000000 +0100 +++ new/xf86-video-ati-18.0.1/configure 2018-03-15 17:21:20.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xf86-video-ati 18.0.0. +# Generated by GNU Autoconf 2.69 for xf86-video-ati 18.0.1. # # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='xf86-video-ati' PACKAGE_TARNAME='xf86-video-ati' -PACKAGE_VERSION='18.0.0' -PACKAGE_STRING='xf86-video-ati 18.0.0' +PACKAGE_VERSION='18.0.1' +PACKAGE_STRING='xf86-video-ati 18.0.1' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon' PACKAGE_URL='' @@ -1400,7 +1400,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xf86-video-ati 18.0.0 to adapt to many kinds of systems. +\`configure' configures xf86-video-ati 18.0.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1471,7 +1471,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-video-ati 18.0.0:";; + short | recursive ) echo "Configuration of xf86-video-ati 18.0.1:";; esac cat <<\_ACEOF @@ -1629,7 +1629,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xf86-video-ati configure 18.0.0 +xf86-video-ati configure 18.0.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2044,7 +2044,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xf86-video-ati $as_me 18.0.0, which was +It was created by xf86-video-ati $as_me 18.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2915,7 +2915,7 @@ # Define the identity of the package. PACKAGE='xf86-video-ati' - VERSION='18.0.0' + VERSION='18.0.1' cat >>confdefs.h <<_ACEOF @@ -20521,7 +20521,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xf86-video-ati $as_me 18.0.0, which was +This file was extended by xf86-video-ati $as_me 18.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20587,7 +20587,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xf86-video-ati config.status 18.0.0 +xf86-video-ati config.status 18.0.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/configure.ac new/xf86-video-ati-18.0.1/configure.ac --- old/xf86-video-ati-18.0.0/configure.ac 2018-03-06 18:29:53.000000000 +0100 +++ new/xf86-video-ati-18.0.1/configure.ac 2018-03-15 17:20:55.000000000 +0100 @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-ati], - [18.0.0], + [18.0.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon], [xf86-video-ati]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/src/drmmode_display.c new/xf86-video-ati-18.0.1/src/drmmode_display.c --- old/xf86-video-ati-18.0.0/src/drmmode_display.c 2018-03-06 18:29:53.000000000 +0100 +++ new/xf86-video-ati-18.0.1/src/drmmode_display.c 2018-03-15 17:20:55.000000000 +0100 @@ -37,6 +37,7 @@ #include "inputstr.h" #include "list.h" #include "micmap.h" +#include "mipointrst.h" #include "xf86cmap.h" #include "xf86Priv.h" #include "radeon.h" @@ -816,7 +817,7 @@ radeon_scanout_do_update(crtc, scanout_id, screen->GetWindowPixmap(screen->root), - box); + *box); radeon_bo_wait(drmmode_crtc->scanout[scanout_id].bo); } } @@ -2750,8 +2751,8 @@ info->sprites_visible += device_priv->sprite_visible - sprite_visible; } -void drmmode_sprite_set_cursor(DeviceIntPtr pDev, ScreenPtr pScreen, - CursorPtr pCursor, int x, int y) +static void drmmode_sprite_set_cursor(DeviceIntPtr pDev, ScreenPtr pScreen, + CursorPtr pCursor, int x, int y) { ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); RADEONInfoPtr info = RADEONPTR(scrn); @@ -2762,11 +2763,11 @@ device_priv->cursor = pCursor; drmmode_sprite_do_set_cursor(device_priv, scrn, x, y); - info->SetCursor(pDev, pScreen, pCursor, x, y); + info->SpriteFuncs->SetCursor(pDev, pScreen, pCursor, x, y); } -void drmmode_sprite_move_cursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, - int y) +static void drmmode_sprite_move_cursor(DeviceIntPtr pDev, ScreenPtr pScreen, + int x, int y) { ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); RADEONInfoPtr info = RADEONPTR(scrn); @@ -2776,9 +2777,57 @@ drmmode_sprite_do_set_cursor(device_priv, scrn, x, y); - info->MoveCursor(pDev, pScreen, x, y); + info->SpriteFuncs->MoveCursor(pDev, pScreen, x, y); } +static Bool drmmode_sprite_realize_realize_cursor(DeviceIntPtr pDev, + ScreenPtr pScreen, + CursorPtr pCursor) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + RADEONInfoPtr info = RADEONPTR(scrn); + + return info->SpriteFuncs->RealizeCursor(pDev, pScreen, pCursor); +} + +static Bool drmmode_sprite_realize_unrealize_cursor(DeviceIntPtr pDev, + ScreenPtr pScreen, + CursorPtr pCursor) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + RADEONInfoPtr info = RADEONPTR(scrn); + + return info->SpriteFuncs->UnrealizeCursor(pDev, pScreen, pCursor); +} + +static Bool drmmode_sprite_device_cursor_initialize(DeviceIntPtr pDev, + ScreenPtr pScreen) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + RADEONInfoPtr info = RADEONPTR(scrn); + + return info->SpriteFuncs->DeviceCursorInitialize(pDev, pScreen); +} + +static void drmmode_sprite_device_cursor_cleanup(DeviceIntPtr pDev, + ScreenPtr pScreen) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + RADEONInfoPtr info = RADEONPTR(scrn); + + info->SpriteFuncs->DeviceCursorCleanup(pDev, pScreen); +} + +miPointerSpriteFuncRec drmmode_sprite_funcs = { + .RealizeCursor = drmmode_sprite_realize_realize_cursor, + .UnrealizeCursor = drmmode_sprite_realize_unrealize_cursor, + .SetCursor = drmmode_sprite_set_cursor, + .MoveCursor = drmmode_sprite_move_cursor, + .DeviceCursorInitialize = drmmode_sprite_device_cursor_initialize, + .DeviceCursorCleanup = drmmode_sprite_device_cursor_cleanup, +}; + + void drmmode_set_cursor(ScrnInfoPtr scrn, drmmode_ptr drmmode, int id, struct radeon_bo *bo) { xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); @@ -3233,7 +3282,7 @@ } radeon_scanout_do_update(crtc, scanout_id, new_front, - &extents); + extents); drmmode_crtc_wait_pending_event(drmmode_crtc, pRADEONEnt->fd, drmmode_crtc->scanout_update_pending); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/src/drmmode_display.h new/xf86-video-ati-18.0.1/src/drmmode_display.h --- old/xf86-video-ati-18.0.0/src/drmmode_display.h 2018-03-06 18:29:53.000000000 +0100 +++ new/xf86-video-ati-18.0.1/src/drmmode_display.h 2018-03-15 17:20:55.000000000 +0100 @@ -206,10 +206,6 @@ extern void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode); extern void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode); extern Bool drmmode_set_bufmgr(ScrnInfoPtr pScrn, drmmode_ptr drmmode, struct radeon_bo_manager *bufmgr); -extern void drmmode_sprite_set_cursor(DeviceIntPtr pDev, ScreenPtr pScreen, - CursorPtr pCursor, int x, int y); -extern void drmmode_sprite_move_cursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, - int y); extern void drmmode_set_cursor(ScrnInfoPtr scrn, drmmode_ptr drmmode, int id, struct radeon_bo *bo); void drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y); extern Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, @@ -249,5 +245,8 @@ uint64_t *ust, uint32_t *result_seq); +miPointerSpriteFuncRec drmmode_sprite_funcs; + + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/src/radeon.h new/xf86-video-ati-18.0.1/src/radeon.h --- old/xf86-video-ati-18.0.0/src/radeon.h 2018-03-06 18:29:53.000000000 +0100 +++ new/xf86-video-ati-18.0.1/src/radeon.h 2018-03-15 17:20:55.000000000 +0100 @@ -557,9 +557,7 @@ CreateScreenResourcesProcPtr CreateScreenResources; CreateWindowProcPtr CreateWindow; WindowExposuresProcPtr WindowExposures; - void (*SetCursor) (DeviceIntPtr pDev, ScreenPtr pScreen, - CursorPtr pCursor, int x, int y); - void (*MoveCursor) (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y); + miPointerSpriteFuncPtr SpriteFuncs; /* Number of SW cursors currently visible on this screen */ int sprites_visible; @@ -674,7 +672,7 @@ /* radeon_kms.c */ Bool radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id, - PixmapPtr src_pix, BoxPtr extents); + PixmapPtr src_pix, BoxRec extents); void RADEONWindowExposures_oneshot(WindowPtr pWin, RegionPtr pRegion #if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,16,99,901,0) , RegionPtr pBSRegion diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-18.0.0/src/radeon_kms.c new/xf86-video-ati-18.0.1/src/radeon_kms.c --- old/xf86-video-ati-18.0.0/src/radeon_kms.c 2018-03-06 18:29:53.000000000 +0100 +++ new/xf86-video-ati-18.0.1/src/radeon_kms.c 2018-03-15 17:20:55.000000000 +0100 @@ -903,10 +903,10 @@ Bool radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id, - PixmapPtr src_pix, BoxPtr extents) + PixmapPtr src_pix, BoxRec extents) { drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private; - RegionRec region = { .extents = *extents, .data = NULL }; + RegionRec region = { .extents = extents, .data = NULL }; ScrnInfoPtr scrn = xf86_crtc->scrn; ScreenPtr pScreen = scrn->pScreen; RADEONInfoPtr info = RADEONPTR(scrn); @@ -915,11 +915,11 @@ if (!xf86_crtc->enabled || !drmmode_crtc->scanout[scanout_id].pixmap || - extents->x1 >= extents->x2 || extents->y1 >= extents->y2) + extents.x1 >= extents.x2 || extents.y1 >= extents.y2) return FALSE; pDraw = &drmmode_crtc->scanout[scanout_id].pixmap->drawable; - if (!radeon_scanout_extents_intersect(xf86_crtc, extents)) + if (!radeon_scanout_extents_intersect(xf86_crtc, &extents)) return FALSE; if (drmmode_crtc->tear_free) { @@ -965,9 +965,9 @@ pScreen->SourceValidate = NULL; CompositePicture(PictOpSrc, src, NULL, dst, - extents->x1, extents->y1, 0, 0, extents->x1, - extents->y1, extents->x2 - extents->x1, - extents->y2 - extents->y1); + extents.x1, extents.y1, 0, 0, extents.x1, + extents.y1, extents.x2 - extents.x1, + extents.y2 - extents.y1); pScreen->SourceValidate = SourceValidate; free_dst: @@ -981,9 +981,9 @@ ValidateGC(pDraw, gc); (*gc->ops->CopyArea)(&src_pix->drawable, pDraw, gc, - xf86_crtc->x + extents->x1, xf86_crtc->y + extents->y1, - extents->x2 - extents->x1, extents->y2 - extents->y1, - extents->x1, extents->y1); + xf86_crtc->x + extents.x1, xf86_crtc->y + extents.y1, + extents.x2 - extents.x1, extents.y2 - extents.y1, + extents.x1, extents.y1); FreeScratchGC(gc); } @@ -1015,7 +1015,7 @@ drmmode_crtc->dpms_mode == DPMSModeOn) { if (radeon_scanout_do_update(crtc, drmmode_crtc->scanout_id, screen->GetWindowPixmap(screen->root), - ®ion->extents)) + region->extents)) RegionEmpty(region); } @@ -1096,7 +1096,7 @@ scanout_id = drmmode_crtc->scanout_id ^ 1; if (!radeon_scanout_do_update(xf86_crtc, scanout_id, pScreen->GetWindowPixmap(pScreen->root), - ®ion->extents)) + region->extents)) return; RegionEmpty(region); @@ -2017,12 +2017,8 @@ return FALSE; } - if (PointPriv->spriteFuncs->SetCursor != drmmode_sprite_set_cursor) { - info->SetCursor = PointPriv->spriteFuncs->SetCursor; - info->MoveCursor = PointPriv->spriteFuncs->MoveCursor; - PointPriv->spriteFuncs->SetCursor = drmmode_sprite_set_cursor; - PointPriv->spriteFuncs->MoveCursor = drmmode_sprite_move_cursor; - } + info->SpriteFuncs = PointPriv->spriteFuncs; + PointPriv->spriteFuncs = &drmmode_sprite_funcs; } if (xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) @@ -2186,10 +2182,8 @@ miPointerScreenPtr PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey); - if (PointPriv->spriteFuncs->SetCursor == drmmode_sprite_set_cursor) { - PointPriv->spriteFuncs->SetCursor = info->SetCursor; - PointPriv->spriteFuncs->MoveCursor = info->MoveCursor; - } + if (PointPriv->spriteFuncs == &drmmode_sprite_funcs) + PointPriv->spriteFuncs = info->SpriteFuncs; } pScreen->BlockHandler = info->BlockHandler;