Hello community, here is the log from the commit of package xf86-video-amdgpu for openSUSE:Factory checked in at 2018-04-07 20:49:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xf86-video-amdgpu (Old) and /work/SRC/openSUSE:Factory/.xf86-video-amdgpu.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xf86-video-amdgpu" Sat Apr 7 20:49:23 2018 rev:19 rq:593542 version:18.0.1 Changes: -------- --- /work/SRC/openSUSE:Factory/xf86-video-amdgpu/xf86-video-amdgpu.changes 2018-03-08 10:54:01.892827590 +0100 +++ /work/SRC/openSUSE:Factory/.xf86-video-amdgpu.new/xf86-video-amdgpu.changes 2018-04-07 20:49:25.122978062 +0200 @@ -1,0 +2,18 @@ +Wed Apr 4 12:40:11 UTC 2018 - sndir...@suse.com + +- Update to version 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 enter an infinite loop after a server + reset (in configurations where Xorg doesn't terminate when + the last client disconnects) + + 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-amdgpu-18.0.0.tar.bz2 xf86-video-amdgpu-18.0.0.tar.bz2.sig New: ---- xf86-video-amdgpu-18.0.1.tar.bz2 xf86-video-amdgpu-18.0.1.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xf86-video-amdgpu.spec ++++++ --- /var/tmp/diff_new_pack.QQOnvu/_old 2018-04-07 20:49:25.826952583 +0200 +++ /var/tmp/diff_new_pack.QQOnvu/_new 2018-04-07 20:49:25.826952583 +0200 @@ -21,7 +21,7 @@ %define pci_ids_dir %{_sysconfdir}/X11/xorg_pci_ids %endif Name: xf86-video-amdgpu -Version: 18.0.0 +Version: 18.0.1 Release: 0 Summary: AMDGPU video driver for the Xorg X server License: MIT ++++++ xf86-video-amdgpu-18.0.0.tar.bz2 -> xf86-video-amdgpu-18.0.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-amdgpu-18.0.0/ChangeLog new/xf86-video-amdgpu-18.0.1/ChangeLog --- old/xf86-video-amdgpu-18.0.0/ChangeLog 2018-03-02 18:31:51.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/ChangeLog 2018-03-15 16:40:55.000000000 +0100 @@ -1,3 +1,63 @@ +commit 9f37a44473ded8c669897379acbc750362c15ec6 +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Thu Mar 15 16:34:19 2018 +0100 + + Bump version for 18.0.1 release + +commit 8af989546907ad9fb491d940e1936d3bfc89276b +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Thu Mar 8 18:48:28 2018 +0100 + + Pass extents to amdgpu_scanout_do_update by value + + amdgpu_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 + +commit 29649652a08ece7e07741be161b067a4484455ca +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Wed Mar 7 17:51:25 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: 69e20839bfeb ("Keep track of how many SW cursors are visible on + each screen") + Reported-by: Mario Kleiner <mario.kleiner...@gmail.com> + +commit b4a28bdcfa7089e1cf708490ddf048b7df4c7eed +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Tue Mar 6 17:59:26 2018 +0100 + + Only change Set/MoveCursor hooks from what we expect + + Since xf86CursorCloseScreen runs after AMDGPUCloseScreen_KMS, + PointPriv->spriteFuncs doesn't point to the same struct in the latter as + in AMDGPUCursorInit_KMS. So we were restoring info->Set/MoveCursor to + the wrong struct. Then in the next server generation, + info->Set/MoveCursor would end up pointing to + drmmode_sprite_set/move_cursor, resulting in an infinite loop if one of + them was called. + + To avoid this, only change the Set/MoveCursor hooks if their values + match our expectations, otherwise leave them as is. This is kind of a + hack, but the alternative would be invasive and thus risky changes to + the way we're wrapping CloseScreen, and it's not even clear that can + work without changing xserver code. + + Fixes: 69e20839bfeb ("Keep track of how many SW cursors are visible on + each screen") + (Ported from radeon commit 504b8721b17a672caf1ed3eab087027c02458cab) + Acked-by: Alex Deucher <alexander.deuc...@amd.com> + commit 5cfba7b6221779832be915993765cb128a561087 Author: Michel Dänzer <michel.daen...@amd.com> Date: Fri Mar 2 18:10:40 2018 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-amdgpu-18.0.0/configure new/xf86-video-amdgpu-18.0.1/configure --- old/xf86-video-amdgpu-18.0.0/configure 2018-03-02 18:31:30.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/configure 2018-03-15 16:40:33.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-amdgpu 18.0.0. +# Generated by GNU Autoconf 2.69 for xf86-video-amdgpu 18.0.1. # # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='xf86-video-amdgpu' PACKAGE_TARNAME='xf86-video-amdgpu' -PACKAGE_VERSION='18.0.0' -PACKAGE_STRING='xf86-video-amdgpu 18.0.0' +PACKAGE_VERSION='18.0.1' +PACKAGE_STRING='xf86-video-amdgpu 18.0.1' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu' PACKAGE_URL='' @@ -1404,7 +1404,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-amdgpu 18.0.0 to adapt to many kinds of systems. +\`configure' configures xf86-video-amdgpu 18.0.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1476,7 +1476,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-video-amdgpu 18.0.0:";; + short | recursive ) echo "Configuration of xf86-video-amdgpu 18.0.1:";; esac cat <<\_ACEOF @@ -1635,7 +1635,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xf86-video-amdgpu configure 18.0.0 +xf86-video-amdgpu configure 18.0.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2050,7 +2050,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-amdgpu $as_me 18.0.0, which was +It was created by xf86-video-amdgpu $as_me 18.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2921,7 +2921,7 @@ # Define the identity of the package. PACKAGE='xf86-video-amdgpu' - VERSION='18.0.0' + VERSION='18.0.1' cat >>confdefs.h <<_ACEOF @@ -20619,7 +20619,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-amdgpu $as_me 18.0.0, which was +This file was extended by xf86-video-amdgpu $as_me 18.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20685,7 +20685,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-amdgpu config.status 18.0.0 +xf86-video-amdgpu 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-amdgpu-18.0.0/configure.ac new/xf86-video-amdgpu-18.0.1/configure.ac --- old/xf86-video-amdgpu-18.0.0/configure.ac 2018-03-02 18:31:02.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/configure.ac 2018-03-15 16:40:07.000000000 +0100 @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-amdgpu], - [18.0.0], + [18.0.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu], [xf86-video-amdgpu]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-amdgpu-18.0.0/src/amdgpu_drv.h new/xf86-video-amdgpu-18.0.1/src/amdgpu_drv.h --- old/xf86-video-amdgpu-18.0.0/src/amdgpu_drv.h 2018-03-02 18:31:02.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/src/amdgpu_drv.h 2018-03-15 16:40:07.000000000 +0100 @@ -281,9 +281,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; @@ -349,7 +347,7 @@ /* amdgpu_kms.c */ Bool amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id, - PixmapPtr src_pix, BoxPtr extents); + PixmapPtr src_pix, BoxRec extents); void AMDGPUWindowExposures_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-amdgpu-18.0.0/src/amdgpu_kms.c new/xf86-video-amdgpu-18.0.1/src/amdgpu_kms.c --- old/xf86-video-amdgpu-18.0.0/src/amdgpu_kms.c 2018-03-02 18:31:02.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/src/amdgpu_kms.c 2018-03-15 16:40:07.000000000 +0100 @@ -804,21 +804,21 @@ Bool amdgpu_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; DrawablePtr pDraw; 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 (!amdgpu_scanout_extents_intersect(xf86_crtc, extents)) + if (!amdgpu_scanout_extents_intersect(xf86_crtc, &extents)) return FALSE; if (drmmode_crtc->tear_free) { @@ -860,9 +860,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: @@ -876,9 +876,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); } @@ -908,7 +908,7 @@ drmmode_crtc->dpms_mode == DPMSModeOn) { if (amdgpu_scanout_do_update(crtc, drmmode_crtc->scanout_id, screen->GetWindowPixmap(screen->root), - ®ion->extents)) + region->extents)) RegionEmpty(region); } @@ -989,7 +989,7 @@ scanout_id = drmmode_crtc->scanout_id ^ 1; if (!amdgpu_scanout_do_update(xf86_crtc, scanout_id, pScreen->GetWindowPixmap(pScreen->root), - ®ion->extents)) + region->extents)) return; RegionEmpty(region); @@ -1551,10 +1551,8 @@ return FALSE; } - 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)) @@ -1731,8 +1729,8 @@ miPointerScreenPtr PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey); - PointPriv->spriteFuncs->SetCursor = info->SetCursor; - PointPriv->spriteFuncs->MoveCursor = info->MoveCursor; + if (PointPriv->spriteFuncs == &drmmode_sprite_funcs) + PointPriv->spriteFuncs = info->SpriteFuncs; } pScreen->BlockHandler = info->BlockHandler; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-amdgpu-18.0.0/src/drmmode_display.c new/xf86-video-amdgpu-18.0.1/src/drmmode_display.c --- old/xf86-video-amdgpu-18.0.0/src/drmmode_display.c 2018-03-02 18:31:02.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/src/drmmode_display.c 2018-03-15 16:40:07.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 "sarea.h" @@ -753,7 +754,7 @@ amdgpu_scanout_do_update(crtc, scanout_id, screen->GetWindowPixmap(screen->root), - box); + *box); amdgpu_glamor_finish(scrn); } } @@ -2550,8 +2551,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); AMDGPUInfoPtr info = AMDGPUPTR(scrn); @@ -2562,11 +2563,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); AMDGPUInfoPtr info = AMDGPUPTR(scrn); @@ -2576,9 +2577,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); + AMDGPUInfoPtr info = AMDGPUPTR(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); + AMDGPUInfoPtr info = AMDGPUPTR(scrn); + + return info->SpriteFuncs->UnrealizeCursor(pDev, pScreen, pCursor); +} + +static Bool drmmode_sprite_device_cursor_initialize(DeviceIntPtr pDev, + ScreenPtr pScreen) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + AMDGPUInfoPtr info = AMDGPUPTR(scrn); + + return info->SpriteFuncs->DeviceCursorInitialize(pDev, pScreen); +} + +static void drmmode_sprite_device_cursor_cleanup(DeviceIntPtr pDev, + ScreenPtr pScreen) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + AMDGPUInfoPtr info = AMDGPUPTR(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 amdgpu_buffer *bo) { @@ -3030,7 +3079,7 @@ } amdgpu_scanout_do_update(crtc, scanout_id, new_front, - &extents); + extents); drmmode_crtc_wait_pending_event(drmmode_crtc, pAMDGPUEnt->fd, drmmode_crtc->scanout_update_pending); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-amdgpu-18.0.0/src/drmmode_display.h new/xf86-video-amdgpu-18.0.1/src/drmmode_display.h --- old/xf86-video-amdgpu-18.0.0/src/drmmode_display.h 2018-03-02 18:31:02.000000000 +0100 +++ new/xf86-video-amdgpu-18.0.1/src/drmmode_display.h 2018-03-15 16:40:07.000000000 +0100 @@ -198,10 +198,6 @@ extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp); extern void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode); extern void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode); -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 amdgpu_buffer *bo); void drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y); @@ -239,4 +235,7 @@ uint64_t *ust, uint32_t *result_seq); +miPointerSpriteFuncRec drmmode_sprite_funcs; + + #endif