configure.ac                      |    5 
 man/amdgpu.man                    |   14 
 src/Makefile.am                   |    3 
 src/amdgpu_bo_helper.c            |    5 
 src/amdgpu_chipinfo_gen.h         |    1 
 src/amdgpu_chipset_gen.h          |    1 
 src/amdgpu_dri2.c                 |  292 ++++++++++++-------
 src/amdgpu_dri2.h                 |    1 
 src/amdgpu_dri3.c                 |    9 
 src/amdgpu_drv.h                  |    4 
 src/amdgpu_glamor.c               |    4 
 src/amdgpu_kms.c                  |  157 ++++++----
 src/amdgpu_pci_chipset_gen.h      |    1 
 src/amdgpu_pci_device_match_gen.h |    1 
 src/amdgpu_present.c              |   98 ++++--
 src/amdgpu_probe.c                |   66 ++--
 src/amdgpu_probe.h                |   10 
 src/amdgpu_video.c                |   62 +---
 src/amdgpu_video.h                |    1 
 src/ati_pciids_gen.h              |    1 
 src/drmmode_display.c             |  574 +++++++++++++++++++++++++++-----------
 src/drmmode_display.h             |   17 -
 src/pcidb/ati_pciids.csv          |    1 
 23 files changed, 885 insertions(+), 443 deletions(-)

New commits:
commit 755e6ff2337cf615e3ba0854ccd533baec7144db
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Thu Nov 19 17:28:19 2015 +0900

    Bump version for 1.0.0 release

diff --git a/configure.ac b/configure.ac
index 9765d0b..1849a78 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-amdgpu],
-        [0.0.01],
+        [1.0.0],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-amdgpu])
 

commit 49c7d2be99aaf6d040e553065bdc461ce8d4769a
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Thu Nov 19 17:14:54 2015 +0900

    Add amdgpu_pixmap.h to src/Makefile.am's EXTRA_DIST
    
    Fixes make distcheck.

diff --git a/src/Makefile.am b/src/Makefile.am
index 4efef9e..a851b3b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -63,6 +63,7 @@ EXTRA_DIST = \
        amdgpu_glamor.h \
        amdgpu_drv.h \
        amdgpu_list.h \
+       amdgpu_pixmap.h \
        amdgpu_probe.h \
        amdgpu_version.h \
        amdgpu_video.h \

commit d069ec5d27f5c8d2ab17b759b85293ef4113acf3
Author: Stephen Chandler Paul <cp...@redhat.com>
Date:   Wed Nov 11 18:10:55 2015 +0900

    Handle failures in setting a CRTC to a DRM mode properly
    
    This fixes a bug where running the card out of PPLL's when hotplugging
    another monitor would result in all of the displays going blank and
    failing to work properly until X was restarted or the user switched to
    another VT.
    
    [Michel Dänzer: Pass errno instead of -ret to strerror()]
    
    Signed-off-by: Stephen Chandler Paul <cp...@redhat.com>
    (ported from radeon commit 7186a8713ba004de4991f21c1a9fc4abc62aeff4)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 66528f0..2761513 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -699,14 +699,15 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr 
mode,
                                amdgpu_glamor_finish(pScrn);
                        }
                }
-               ret =
-                   drmModeSetCrtc(pAMDGPUEnt->fd,
-                                  drmmode_crtc->mode_crtc->crtc_id, fb_id, x,
-                                  y, output_ids, output_count, &kmode);
-               if (ret)
+               if (drmModeSetCrtc(pAMDGPUEnt->fd,
+                                  drmmode_crtc->mode_crtc->crtc_id,
+                                  fb_id, x, y, output_ids,
+                                  output_count, &kmode) != 0) {
                        xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR,
-                                  "failed to set mode: %s", strerror(-ret));
-               else
+                                  "failed to set mode: %s\n", strerror(errno));
+                       ret = FALSE;
+                       goto done;
+               } else
                        ret = TRUE;
 
                if (crtc->scrn->pScreen)

commit c8bddcf6c97b1338be3715f1fc5e0b17ce71c195
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Nov 11 18:09:59 2015 +0900

    Call xf86CrtcRotate from initial drmmode_set_desired_modes call
    
    Fixes various problems when rotation is specified in xorg.conf.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92475
    
    (ported from radeon commit 548e97b3b7d1e94075a54ca2bb4eb683025098a7)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 4d5a3a3..66528f0 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2071,6 +2071,8 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, 
drmmode_ptr drmmode,
                        crtc->rotation = crtc->desiredRotation;
                        crtc->x = crtc->desiredX;
                        crtc->y = crtc->desiredY;
+                       if (!xf86CrtcRotate(crtc))
+                               return FALSE;
                }
        }
        return TRUE;

commit 12815156f38ce3357f03901a78402db834577d11
Author: Emil Velikov <emil.l.veli...@gmail.com>
Date:   Wed Nov 11 18:04:01 2015 +0900

    Do not link amdgpu_drv.so against libpciaccess
    
    Not used directly.
    
    Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com>
    (ported from radeon commit fcb32231a38f9461d12720cbf72f63502197a711)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/configure.ac b/configure.ac
index e350ef6..9765d0b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -186,9 +186,6 @@ AC_CHECK_HEADERS([dri3.h], [], [],
 
 CPPFLAGS="$SAVE_CPPFLAGS"
 
-PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
-XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS"
-
 # Checks for headers/macros for byte swapping
 # Known variants:
 #      <byteswap.h> bswap_16, bswap_32, bswap_64  (glibc)
diff --git a/src/Makefile.am b/src/Makefile.am
index 6c8d1de..4efef9e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -26,7 +26,7 @@
 # _ladir passes a dummy rpath to libtool so the thing will actually link
 # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
 
-amdgpu_drv_la_LIBADD = $(PCIACCESS_LIBS) $(LIBDRM_AMDGPU_LIBS) $(GBM_LIBS)
+amdgpu_drv_la_LIBADD = $(LIBDRM_AMDGPU_LIBS) $(GBM_LIBS)
 
 AMDGPU_KMS_SRCS=amdgpu_bo_helper.c amdgpu_dri2.c amdgpu_dri3.c 
amdgpu_drm_queue.c \
        amdgpu_kms.c amdgpu_present.c amdgpu_sync.c drmmode_display.c

commit a02982b0ae0b79d2f183a1628edc05cafed8703a
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Nov 11 17:59:14 2015 +0900

    Skip disabled CRTCs in amdgpu_scanout_(do_)update
    
    The vblank / page flip ioctls don't work as expected for a disabled CRTC.
    
    (ported from radeon commit acc11877423ecd81a6e0a7f38466f80e43efee20)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 2efdbf5..3993591 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -257,7 +257,8 @@ amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int 
scanout_id)
        GCPtr gc;
        BoxRec extents;
 
-       if (drmmode_crtc->dpms_mode != DPMSModeOn ||
+       if (!xf86_crtc->enabled ||
+           drmmode_crtc->dpms_mode != DPMSModeOn ||
            !drmmode_crtc->scanout[scanout_id].pixmap)
                return FALSE;
 
@@ -323,7 +324,8 @@ amdgpu_scanout_update(xf86CrtcPtr xf86_crtc)
        DrawablePtr pDraw;
        BoxRec extents;
 
-       if (drmmode_crtc->scanout_update_pending ||
+       if (!xf86_crtc->enabled ||
+           drmmode_crtc->scanout_update_pending ||
            !drmmode_crtc->scanout[0].pixmap ||
            drmmode_crtc->dpms_mode != DPMSModeOn)
                return;

commit 0ddd20600d0046afd17aa47ffebe86dfd91a2215
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Nov 11 17:44:16 2015 +0900

    Prefer drmModeSetCursor2 over drmModeSetCursor
    
    The former includes information about the position of the hotspot within
    the cursor image.
    
    Copied from xf86-video-modesetting.
    
    (ported from radeon commit c9f8f642fd495937400618a4fc25ecae3f8888fc)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 9632180..4d5a3a3 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -801,12 +801,29 @@ static void drmmode_show_cursor(xf86CrtcPtr crtc)
        AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
        drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        uint32_t bo_handle;
+       static Bool use_set_cursor2 = TRUE;
 
        if (!amdgpu_bo_get_handle(drmmode_crtc->cursor_buffer, &bo_handle)) {
                ErrorF("failed to get BO handle for cursor\n");
                return;
        }
 
+       if (use_set_cursor2) {
+               xf86CrtcConfigPtr xf86_config = 
XF86_CRTC_CONFIG_PTR(crtc->scrn);
+               CursorPtr cursor = xf86_config->cursor;
+               int ret;
+
+               ret = drmModeSetCursor2(pAMDGPUEnt->fd,
+                                       drmmode_crtc->mode_crtc->crtc_id,
+                                       bo_handle,
+                                       info->cursor_w, info->cursor_h,
+                                       cursor->bits->xhot, cursor->bits->yhot);
+               if (ret == -EINVAL)
+                       use_set_cursor2 = FALSE;
+               else
+                       return;
+       }
+
        drmModeSetCursor(pAMDGPUEnt->fd, drmmode_crtc->mode_crtc->crtc_id, 
bo_handle,
                         info->cursor_w, info->cursor_h);
 }

commit 83a47c0ebe17caa79d12a8b2f94b59cc945452f5
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Nov 11 17:37:54 2015 +0900

    PRIME: Don't advertise offload capabilities when acceleration is disabled
    
    Xorg tends to crash if the user tries to actually use the offload
    capabilities with acceleration disabled.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57200
    (ported from radeon commit c74de9fec13fac2c836bb2a07ae6f90e1d61e667)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 084f625..2efdbf5 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -668,14 +668,18 @@ static void AMDGPUSetupCapabilities(ScrnInfoPtr pScrn)
        pScrn->capabilities = 0;
        ret = drmGetCap(pAMDGPUEnt->fd, DRM_CAP_PRIME, &value);
        if (ret == 0) {
-               if (value & DRM_PRIME_CAP_EXPORT)
-                       pScrn->capabilities |=
-                           RR_Capability_SourceOutput |
-                           RR_Capability_SinkOffload;
-               if (value & DRM_PRIME_CAP_IMPORT)
-                       pScrn->capabilities |=
-                           RR_Capability_SourceOffload |
-                           RR_Capability_SinkOutput;
+               AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
+
+               if (value & DRM_PRIME_CAP_EXPORT) {
+                       pScrn->capabilities |= RR_Capability_SourceOutput;
+                       if (info->use_glamor && info->dri2.available)
+                               pScrn->capabilities |= 
RR_Capability_SinkOffload;
+               }
+               if (value & DRM_PRIME_CAP_IMPORT) {
+                       pScrn->capabilities |= RR_Capability_SinkOutput;
+                       if (info->use_glamor && info->dri2.available)
+                               pScrn->capabilities |= 
RR_Capability_SourceOffload;
+               }
        }
 #endif
 }

commit 560b7fe6dc66405762020f00e9a05918a36f3a17
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Nov 11 17:31:34 2015 +0900

    Rename Option "NoAccel" to "Accel"
    
    Removes the need for a double negation when forcing acceleration on.
    
    Note that this change is backwards compatible, as the option parser
    automagically handles the 'No' prefix.
    
    (ported from radeon commit cc615d06db0332fc6e673b55632bcc7bf957b44b)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/man/amdgpu.man b/man/amdgpu.man
index 3373b63..4e95ead 100644
--- a/man/amdgpu.man
+++ b/man/amdgpu.man
@@ -44,12 +44,11 @@ are supported:
 Selects software cursor.  The default is
 .B off.
 .TP
-.BI "Option \*qNoAccel\*q \*q" boolean \*q
+.BI "Option \*qAccel\*q \*q" boolean \*q
 Enables or disables all hardware acceleration.
 .br
-The default is to
-.B enable
-hardware acceleration.
+The default is
+.B on.
 
 .TP
 .BI "Option \*qZaphodHeads\*q \*q" string \*q
diff --git a/src/amdgpu_drv.h b/src/amdgpu_drv.h
index 4797693..9acd202 100644
--- a/src/amdgpu_drv.h
+++ b/src/amdgpu_drv.h
@@ -133,7 +133,7 @@ struct _SyncFence;
 #endif
 
 typedef enum {
-       OPTION_NOACCEL,
+       OPTION_ACCEL,
        OPTION_SW_CURSOR,
        OPTION_PAGE_FLIP,
 #ifdef RENDER
diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 054d478..084f625 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -60,7 +60,7 @@ extern SymTabRec AMDGPUChipsets[];
 static Bool amdgpu_setup_kernel_mem(ScreenPtr pScreen);
 
 const OptionInfoRec AMDGPUOptions_KMS[] = {
-       {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE},
+       {OPTION_ACCEL, "Accel", OPTV_BOOLEAN, {0}, FALSE},
        {OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE},
        {OPTION_PAGE_FLIP, "EnablePageFlip", OPTV_BOOLEAN, {0}, FALSE},
        {OPTION_SUBPIXEL_ORDER, "SubPixelOrder", OPTV_ANYSTR, {0}, FALSE},
@@ -562,7 +562,7 @@ static Bool AMDGPUPreInitAccel_KMS(ScrnInfoPtr pScrn)
 {
        AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
 
-       if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, false)) {
+       if (xf86ReturnOptValBool(info->Options, OPTION_ACCEL, TRUE)) {
                AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
                Bool use_glamor = TRUE;
 #ifdef HAVE_GBM_BO_USE_LINEAR

commit ad77ad32c4a723447d3191d527cfa6de9f54d7ce
Author: Adam Jackson <a...@redhat.com>
Date:   Wed Nov 11 17:20:21 2015 +0900

    Use own thunk function instead of shadowUpdatePackedWeak
    
    I plan to delete the Weak functions from a future server.
    
    Signed-off-by: Adam Jackson <a...@redhat.com>
    (ported from radeon commit 851b2cf8714618843725f6d067915375485ade9d)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index fd89ba2..054d478 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -157,6 +157,12 @@ static void *amdgpuShadowWindow(ScreenPtr screen, CARD32 
row, CARD32 offset,
        return ((uint8_t *) info->front_buffer->cpu_ptr + row * stride + 
offset);
 }
 
+static void
+amdgpuUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+       shadowUpdatePacked(pScreen, pBuf);
+}
+
 static Bool AMDGPUCreateScreenResources_KMS(ScreenPtr pScreen)
 {
        ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
@@ -176,7 +182,7 @@ static Bool AMDGPUCreateScreenResources_KMS(ScreenPtr 
pScreen)
        if (info->shadow_fb) {
                pixmap = pScreen->GetScreenPixmap(pScreen);
 
-               if (!shadowAdd(pScreen, pixmap, shadowUpdatePackedWeak(),
+               if (!shadowAdd(pScreen, pixmap, amdgpuUpdatePacked,
                               amdgpuShadowWindow, 0, NULL))
                        return FALSE;
        }

commit f5ccea99c03b62acf3a25984aba617c665d80b7c
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Nov 11 17:16:58 2015 +0900

    dri2: Handle PRIME for source buffer as well in amdgpu_dri2_copy_region2
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77810
    
    (ported from radeon commit c84230d686c078aac1dc98d82153f8b02521b2e1)
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_dri2.c b/src/amdgpu_dri2.c
index 0feca59..230e8ba 100644
--- a/src/amdgpu_dri2.c
+++ b/src/amdgpu_dri2.c
@@ -333,7 +333,14 @@ amdgpu_dri2_copy_region2(ScreenPtr pScreen,
        dst_drawable = &dst_private->pixmap->drawable;
 
        if (src_private->attachment == DRI2BufferFrontLeft) {
-               src_drawable = drawable;
+#ifdef USE_DRI2_PRIME
+               if (drawable->pScreen != pScreen) {
+                       src_drawable = DRI2UpdatePrime(drawable, src_buffer);
+                       if (!src_drawable)
+                               return;
+               } else
+#endif
+                       src_drawable = drawable;
        }
        if (dst_private->attachment == DRI2BufferFrontLeft) {
 #ifdef USE_DRI2_PRIME

commit 92e7c93d2f9c3036da1a17d7fccccb6f9e9eaa3d
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Mon Nov 2 18:29:24 2015 +0900

    Move scrn/info declaration inside USE_GLAMOR in amdgpu_dri3_fd_from_pixmap
    
    Fixes warning when building with --disable-glamor:
    
    ../../src/amdgpu_dri3.c: In function 'amdgpu_dri3_fd_from_pixmap':
    ../../src/amdgpu_dri3.c:135:16: warning: unused variable 'info' 
[-Wunused-variable]
      AMDGPUInfoPtr info = AMDGPUPTR(scrn);
                    ^
    
    Reported-by: Jammy Zhou <jammy.z...@amd.com>
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_dri3.c b/src/amdgpu_dri3.c
index 53871be..73a79ac 100644
--- a/src/amdgpu_dri3.c
+++ b/src/amdgpu_dri3.c
@@ -131,13 +131,13 @@ static int amdgpu_dri3_fd_from_pixmap(ScreenPtr screen,
                                      CARD16 *stride,
                                      CARD32 *size)
 {
-       ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
-       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
        struct amdgpu_buffer *bo;
        struct amdgpu_bo_info bo_info;
        uint32_t fd;
-
 #ifdef USE_GLAMOR
+       ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+
        if (info->use_glamor)
                return glamor_fd_from_pixmap(screen, pixmap, stride, size);
 #endif

commit c9bd1399a13cea2e1331af2c826ca054b88db071
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Mon Nov 2 18:21:50 2015 +0900

    Call AMDGPUFreeRec from AMDGPUFreeScreen_KMS even if info == NULL
    
    It's safe now.
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 41f01b3..fd89ba2 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -1031,15 +1031,10 @@ static Bool 
AMDGPUCloseScreen_KMS(CLOSE_SCREEN_ARGS_DECL)
 void AMDGPUFreeScreen_KMS(FREE_SCREEN_ARGS_DECL)
 {
        SCRN_INFO_PTR(arg);
-       AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
 
        xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, AMDGPU_LOGLEVEL_DEBUG,
                       "AMDGPUFreeScreen\n");
 
-       /* when server quits at PreInit, we don't need do this anymore */
-       if (!info)
-               return;
-
        AMDGPUFreeRec(pScrn);
 }
 

commit fb8444e731765588c0ff1e9053c1c7b73f5f0907
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Mon Nov 2 18:20:41 2015 +0900

    Don't use AMDGPUEntPriv in AMDGPUFreeRec
    
    It crashes if info == NULL.
    
    Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 5e17525..41f01b3 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -107,7 +107,8 @@ static Bool AMDGPUGetRec(ScrnInfoPtr pScrn)
 /* Free our private AMDGPUInfoRec */
 static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
 {
-       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
+       DevUnion *pPriv;
+       AMDGPUEntPtr pAMDGPUEnt;
        AMDGPUInfoPtr info;
 
        if (!pScrn)
@@ -117,6 +118,9 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
        if (info && info->fbcon_pixmap)
                pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
 
+       pPriv = 
xf86GetEntityPrivate(xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 
1])->index,
+                                    gAMDGPUEntityIndex);
+       pAMDGPUEnt = pPriv->ptr;
        if (pAMDGPUEnt->fd > 0) {
                DevUnion *pPriv;
                AMDGPUEntPtr pAMDGPUEnt;

commit 8e7ee03f55c2f3874f6e84daeb5700f8b8037a51
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Oct 28 17:53:27 2015 +0900

    Remove amdgpu_reference_drm_fd
    
    Increase pAMDGPUEnt->fd_ref in the probe code instead when we're reusing
    the existing fd.
    
    The previous reference counting was imbalanced, so pAMDGPUEnt->fd_ref
    could never go to 0.
    
    Reviewed-by: Jammy Zhou <jammy.z...@amd.com>

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 7861cf6..5e17525 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -624,13 +624,6 @@ static Bool AMDGPUPreInitChipType_KMS(ScrnInfoPtr pScrn)
        return TRUE;
 }
 
-static void amdgpu_reference_drm_fd(ScrnInfoPtr pScrn)
-{
-       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
-
-       pAMDGPUEnt->fd_ref++;
-}
-
 static Bool amdgpu_get_tile_config(ScrnInfoPtr pScrn)
 {
        AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
@@ -767,8 +760,6 @@ Bool AMDGPUPreInit_KMS(ScrnInfoPtr pScrn, int flags)
        if (!AMDGPUPreInitChipType_KMS(pScrn))
                goto fail;
 
-       amdgpu_reference_drm_fd(pScrn);
-
        info->dri2.available = FALSE;
        info->dri2.enabled = FALSE;
        info->dri2.pKernelDRMVersion = drmGetVersion(pAMDGPUEnt->fd);
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index 61605b9..e4f5c75 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -245,6 +245,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct 
pci_device *pci_dev)
                }
        } else {
                pAMDGPUEnt = pPriv->ptr;
+               pAMDGPUEnt->fd_ref++;
        }
 
        xf86SetEntityInstanceForScreen(pScrn, pEnt->index,
@@ -360,6 +361,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
                }
        } else {
                pAMDGPUEnt = pPriv->ptr;
+               pAMDGPUEnt->fd_ref++;
        }
        pAMDGPUEnt->platform_dev = dev;
 

commit 6bab8fabb37eb131e131ce59446c214ded28f779
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Wed Oct 28 17:44:09 2015 +0900

    Remove info->dri2.drm_fd and info->drmmode->fd
    
    Use pAMDGPUEnt->fd everywhere instead.
    
    Reviewed-by: Jammy Zhou <jammy.z...@amd.com>

diff --git a/src/amdgpu_bo_helper.c b/src/amdgpu_bo_helper.c
index 0a32934..1329c4c 100644
--- a/src/amdgpu_bo_helper.c
+++ b/src/amdgpu_bo_helper.c
@@ -133,19 +133,18 @@ Bool amdgpu_bo_get_handle(struct amdgpu_buffer *bo, 
uint32_t *handle)
 
 int amdgpu_bo_map(ScrnInfoPtr pScrn, struct amdgpu_buffer *bo)
 {
-       AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
        int ret = 0;
 
        if (bo->flags & AMDGPU_BO_FLAGS_GBM) {
+               AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
                uint32_t handle, stride, height;
                union drm_amdgpu_gem_mmap args;
-               int fd;
+               int fd = pAMDGPUEnt->fd;
                void *ptr;
 
                handle = gbm_bo_get_handle(bo->bo.gbm).u32;
                stride = gbm_bo_get_stride(bo->bo.gbm);
                height = gbm_bo_get_height(bo->bo.gbm);
-               fd = info->dri2.drm_fd;
 
                memset(&args, 0, sizeof(union drm_amdgpu_gem_mmap));
                args.in.handle = handle;
diff --git a/src/amdgpu_dri2.c b/src/amdgpu_dri2.c
index 48d55c1..0feca59 100644
--- a/src/amdgpu_dri2.c
+++ b/src/amdgpu_dri2.c
@@ -224,9 +224,11 @@ amdgpu_dri2_create_buffer2(ScreenPtr pScreen,
                }
 
                if (bo->flags & AMDGPU_BO_FLAGS_GBM) {
+                       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
+
                        bo_handle = gbm_bo_get_handle(bo->bo.gbm);
                        flink.handle = bo_handle.u32;
-                       if (ioctl(info->dri2.drm_fd, DRM_IOCTL_GEM_FLINK, 
&flink) < 0)
+                       if (ioctl(pAMDGPUEnt->fd, DRM_IOCTL_GEM_FLINK, &flink) 
< 0)
                                goto error;
                        buffers->name = flink.name;
                } else {
@@ -458,13 +460,13 @@ static Bool amdgpu_dri2_get_crtc_msc(xf86CrtcPtr crtc, 
CARD64 *ust, CARD64 *msc)
                /* CRTC is not running, extrapolate MSC and timestamp */
                drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
                ScrnInfoPtr scrn = crtc->scrn;
-               AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+               AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
                CARD64 now, delta_t, delta_seq;
 
                if (!drmmode_crtc->dpms_last_ust)
                        return FALSE;
 
-               if (drmmode_get_current_ust(info->dri2.drm_fd, &now) != 0) {
+               if (drmmode_get_current_ust(pAMDGPUEnt->fd, &now) != 0) {
                        xf86DrvMsg(scrn->scrnIndex, X_ERROR,
                                   "%s cannot get current time\n", __func__);
                        return FALSE;
@@ -625,7 +627,7 @@ static Bool update_front(DrawablePtr draw, DRI2BufferPtr 
front)
 {
        ScreenPtr screen = draw->pScreen;
        ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
-       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
        PixmapPtr pixmap;
        struct dri2_buffer_priv *priv = front->driverPrivate;
        struct amdgpu_buffer *bo = NULL;
@@ -639,7 +641,7 @@ static Bool update_front(DrawablePtr draw, DRI2BufferPtr 
front)
        if (bo->flags & AMDGPU_BO_FLAGS_GBM) {
                bo_handle = gbm_bo_get_handle(bo->bo.gbm);
                flink.handle = bo_handle.u32;
-               if (ioctl(info->dri2.drm_fd, DRM_IOCTL_GEM_FLINK, &flink) < 0)
+               if (ioctl(pAMDGPUEnt->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0)
                        return FALSE;
                front->name = flink.name;
        } else {
@@ -866,7 +868,7 @@ CARD32 amdgpu_dri2_extrapolate_msc_delay(xf86CrtcPtr crtc, 
CARD64 * target_msc,
 {
        drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        ScrnInfoPtr pScrn = crtc->scrn;
-       AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
        int nominal_frame_rate = drmmode_crtc->dpms_last_fps;
        CARD64 last_vblank_ust = drmmode_crtc->dpms_last_ust;
        uint32_t last_vblank_seq = drmmode_crtc->dpms_last_seq;
@@ -879,7 +881,7 @@ CARD32 amdgpu_dri2_extrapolate_msc_delay(xf86CrtcPtr crtc, 
CARD64 * target_msc,
                *target_msc = 0;
                return FALLBACK_SWAP_DELAY;
        }
-       ret = drmmode_get_current_ust(info->dri2.drm_fd, &now);
+       ret = drmmode_get_current_ust(pAMDGPUEnt->fd, &now);
        if (ret) {
                xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                           "%s cannot get current time\n", __func__);
@@ -957,7 +959,7 @@ CARD32 amdgpu_dri2_deferred_event(OsTimerPtr timer, CARD32 
now, pointer data)
        DRI2FrameEventPtr event_info = (DRI2FrameEventPtr) data;
        xf86CrtcPtr crtc = event_info->crtc;
        ScrnInfoPtr scrn;
-       AMDGPUInfoPtr info;
+       AMDGPUEntPtr pAMDGPUEnt;
        CARD64 drm_now;
        int ret;
        CARD64 delta_t, delta_seq, frame;
@@ -980,13 +982,13 @@ CARD32 amdgpu_dri2_deferred_event(OsTimerPtr timer, 
CARD32 now, pointer data)
        }
 
        scrn = crtc->scrn;
-       info = AMDGPUPTR(scrn);
-       ret = drmmode_get_current_ust(info->dri2.drm_fd, &drm_now);
+       pAMDGPUEnt = AMDGPUEntPriv(scrn);
+       ret = drmmode_get_current_ust(pAMDGPUEnt->fd, &drm_now);
        if (ret) {
                xf86DrvMsg(scrn->scrnIndex, X_ERROR,
                           "%s cannot get current time\n", __func__);
                if (event_info->drm_queue)
-                       amdgpu_drm_queue_handler(info->dri2.drm_fd, 0, 0, 0,
+                       amdgpu_drm_queue_handler(pAMDGPUEnt->fd, 0, 0, 0,
                                                 event_info->drm_queue);
                else
                        amdgpu_dri2_frame_event_handler(scrn, 0, 0, data);
@@ -1002,7 +1004,7 @@ CARD32 amdgpu_dri2_deferred_event(OsTimerPtr timer, 
CARD32 now, pointer data)
        delta_seq /= 1000000;
        frame = (CARD64) drmmode_crtc->dpms_last_seq + delta_seq;
        if (event_info->drm_queue)
-               amdgpu_drm_queue_handler(info->dri2.drm_fd, frame, drm_now / 
1000000,
+               amdgpu_drm_queue_handler(pAMDGPUEnt->fd, frame, drm_now / 
1000000,
                                         drm_now % 1000000, 
event_info->drm_queue);
        else
                amdgpu_dri2_frame_event_handler(scrn, frame, drm_now, data);
@@ -1032,7 +1034,7 @@ static int amdgpu_dri2_schedule_wait_msc(ClientPtr 
client, DrawablePtr draw,
 {
        ScreenPtr screen = draw->pScreen;
        ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
-       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
        DRI2FrameEventPtr wait_info = NULL;
        struct amdgpu_drm_queue_entry *wait = NULL;
        xf86CrtcPtr crtc = amdgpu_dri2_drawable_crtc(draw, TRUE);
@@ -1080,7 +1082,7 @@ static int amdgpu_dri2_schedule_wait_msc(ClientPtr 
client, DrawablePtr draw,
        vbl.request.type = DRM_VBLANK_RELATIVE;
        vbl.request.type |= amdgpu_populate_vbl_request_type(crtc);
        vbl.request.sequence = 0;
-       ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
+       ret = drmWaitVBlank(pAMDGPUEnt->fd, &vbl);
        if (ret) {
                xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                           "get vblank counter failed: %s\n", strerror(errno));
@@ -1118,7 +1120,7 @@ static int amdgpu_dri2_schedule_wait_msc(ClientPtr 
client, DrawablePtr draw,
                vbl.request.type |= amdgpu_populate_vbl_request_type(crtc);
                vbl.request.sequence = target_msc - msc_delta;
                vbl.request.signal = (unsigned long)wait;
-               ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
+               ret = drmWaitVBlank(pAMDGPUEnt->fd, &vbl);
                if (ret) {
                        xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                                   "get vblank counter failed: %s\n",
@@ -1150,7 +1152,7 @@ static int amdgpu_dri2_schedule_wait_msc(ClientPtr 
client, DrawablePtr draw,
                vbl.request.sequence += divisor;
 
        vbl.request.signal = (unsigned long)wait;
-       ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
+       ret = drmWaitVBlank(pAMDGPUEnt->fd, &vbl);
        if (ret) {
                xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                           "get vblank counter failed: %s\n", strerror(errno));
@@ -1195,7 +1197,7 @@ static int amdgpu_dri2_schedule_swap(ClientPtr client, 
DrawablePtr draw,
 {
        ScreenPtr screen = draw->pScreen;
        ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
-       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
        xf86CrtcPtr crtc = amdgpu_dri2_drawable_crtc(draw, TRUE);
        uint32_t msc_delta;
        drmVBlank vbl;
@@ -1268,7 +1270,7 @@ static int amdgpu_dri2_schedule_swap(ClientPtr client, 
DrawablePtr draw,
        vbl.request.type = DRM_VBLANK_RELATIVE;
        vbl.request.type |= amdgpu_populate_vbl_request_type(crtc);
        vbl.request.sequence = 0;
-       ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
+       ret = drmWaitVBlank(pAMDGPUEnt->fd, &vbl);
        if (ret) {
                xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                           "first get vblank counter failed: %s\n",
@@ -1316,7 +1318,7 @@ static int amdgpu_dri2_schedule_swap(ClientPtr client, 
DrawablePtr draw,
 
                vbl.request.sequence = *target_msc - msc_delta;
                vbl.request.signal = (unsigned long)swap;
-               ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
+               ret = drmWaitVBlank(pAMDGPUEnt->fd, &vbl);
                if (ret) {
                        xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                                   "divisor 0 get vblank counter failed: %s\n",
@@ -1362,7 +1364,7 @@ static int amdgpu_dri2_schedule_swap(ClientPtr client, 
DrawablePtr draw,
        vbl.request.sequence -= flip;
 
        vbl.request.signal = (unsigned long)swap;
-       ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
+       ret = drmWaitVBlank(pAMDGPUEnt->fd, &vbl);
        if (ret) {
                xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                           "final get vblank counter failed: %s\n",
@@ -1404,6 +1406,7 @@ Bool amdgpu_dri2_screen_init(ScreenPtr pScreen)
 {
        ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
        AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
        DRI2InfoRec dri2_info = { 0 };
        const char *driverNames[2];
        Bool scheduling_works = TRUE;
@@ -1411,10 +1414,10 @@ Bool amdgpu_dri2_screen_init(ScreenPtr pScreen)
        if (!info->dri2.available)
                return FALSE;
 
-       info->dri2.device_name = drmGetDeviceNameFromFd(info->dri2.drm_fd);
+       info->dri2.device_name = drmGetDeviceNameFromFd(pAMDGPUEnt->fd);
 
        dri2_info.driverName = SI_DRIVER_NAME;
-       dri2_info.fd = info->dri2.drm_fd;
+       dri2_info.fd = pAMDGPUEnt->fd;
        dri2_info.deviceName = info->dri2.device_name;
        dri2_info.version = DRI2INFOREC_VERSION;
        dri2_info.CreateBuffer = amdgpu_dri2_create_buffer;
@@ -1426,7 +1429,7 @@ Bool amdgpu_dri2_screen_init(ScreenPtr pScreen)
                uint64_t cap_value;
 
                if (drmGetCap
-                   (info->dri2.drm_fd, DRM_CAP_VBLANK_HIGH_CRTC, &cap_value)) {
+                   (pAMDGPUEnt->fd, DRM_CAP_VBLANK_HIGH_CRTC, &cap_value)) {
                        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
                                   "You need a newer kernel "
                                   "for VBLANKs on CRTC > 1\n");
diff --git a/src/amdgpu_dri2.h b/src/amdgpu_dri2.h
index d9bec91..c6a2ab6 100644
--- a/src/amdgpu_dri2.h
+++ b/src/amdgpu_dri2.h
@@ -31,7 +31,6 @@
 
 struct amdgpu_dri2 {
        drmVersionPtr pKernelDRMVersion;
-       int drm_fd;
        Bool available;
        Bool enabled;
        char *device_name;
diff --git a/src/amdgpu_dri3.c b/src/amdgpu_dri3.c
index a89421e..53871be 100644
--- a/src/amdgpu_dri3.c
+++ b/src/amdgpu_dri3.c
@@ -44,6 +44,7 @@ static int
 amdgpu_dri3_open(ScreenPtr screen, RRProviderPtr provider, int *out)
 {
        ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
        AMDGPUInfoPtr info = AMDGPUPTR(scrn);
        drm_magic_t magic;
        int fd;
@@ -77,7 +78,7 @@ amdgpu_dri3_open(ScreenPtr screen, RRProviderPtr provider, 
int *out)
                }
        }
 
-       if (drmAuthMagic(info->dri2.drm_fd, magic) < 0) {
+       if (drmAuthMagic(pAMDGPUEnt->fd, magic) < 0) {
                close(fd);
                return BadMatch;
        }
diff --git a/src/amdgpu_glamor.c b/src/amdgpu_glamor.c
index 8f0dc79..c979561 100644
--- a/src/amdgpu_glamor.c
+++ b/src/amdgpu_glamor.c
@@ -109,7 +109,9 @@ Bool amdgpu_glamor_pre_init(ScrnInfoPtr scrn)
                                   "Incompatible glamor version, required >= 
0.3.0.\n");
                        return FALSE;
                } else {
-                       if (glamor_egl_init(scrn, info->dri2.drm_fd)) {
+                       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
+
+                       if (glamor_egl_init(scrn, pAMDGPUEnt->fd)) {
                                xf86DrvMsg(scrn->scrnIndex, X_INFO,
                                           "glamor detected, initialising EGL 
layer.\n");
                        } else {
diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 32a34cb..7861cf6 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -107,17 +107,17 @@ static Bool AMDGPUGetRec(ScrnInfoPtr pScrn)
 /* Free our private AMDGPUInfoRec */
 static void AMDGPUFreeRec(ScrnInfoPtr pScrn)
 {
+       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
        AMDGPUInfoPtr info;
 
-       if (!pScrn || !pScrn->driverPrivate)
+       if (!pScrn)
                return;
 
        info = AMDGPUPTR(pScrn);
-
-       if (info->fbcon_pixmap)
+       if (info && info->fbcon_pixmap)
                pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
 
-       if (info->dri2.drm_fd > 0) {
+       if (pAMDGPUEnt->fd > 0) {
                DevUnion *pPriv;
                AMDGPUEntPtr pAMDGPUEnt;
                pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
@@ -164,7 +164,7 @@ static Bool AMDGPUCreateScreenResources_KMS(ScreenPtr 
pScreen)
                return FALSE;
        pScreen->CreateScreenResources = AMDGPUCreateScreenResources_KMS;
 
-       if (!drmmode_set_desired_modes(pScrn, &info->drmmode, FALSE))
+       if (!drmmode_set_desired_modes(pScrn, &info->drmmode, pScrn->is_gpu))
                return FALSE;
 
        drmmode_uevent_init(pScrn, &info->drmmode);
@@ -306,6 +306,7 @@ amdgpu_scanout_update(xf86CrtcPtr xf86_crtc)
        drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
        struct amdgpu_drm_queue_entry *drm_queue_entry;
        ScrnInfoPtr scrn;
+       AMDGPUEntPtr pAMDGPUEnt;
        drmVBlank vbl;
        DamagePtr pDamage;
        RegionPtr pRegion;
@@ -343,11 +344,12 @@ amdgpu_scanout_update(xf86CrtcPtr xf86_crtc)
                return;
        }
 
+       pAMDGPUEnt = AMDGPUEntPriv(scrn);
        vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
        vbl.request.type |= amdgpu_populate_vbl_request_type(xf86_crtc);
        vbl.request.sequence = 1;
        vbl.request.signal = (unsigned long)drm_queue_entry;
-       if (drmWaitVBlank(AMDGPUPTR(scrn)->dri2.drm_fd, &vbl)) {
+       if (drmWaitVBlank(pAMDGPUEnt->fd, &vbl)) {
                xf86DrvMsg(scrn->scrnIndex, X_WARNING,
                           "drmWaitVBlank failed for scanout update: %s\n",
                           strerror(errno));
@@ -378,6 +380,7 @@ amdgpu_scanout_flip(ScreenPtr pScreen, AMDGPUInfoPtr info,
 {
        drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
        ScrnInfoPtr scrn;
+       AMDGPUEntPtr pAMDGPUEnt;
        struct amdgpu_drm_queue_entry *drm_queue_entry;
        unsigned scanout_id;
 
@@ -400,7 +403,8 @@ amdgpu_scanout_flip(ScreenPtr pScreen, AMDGPUInfoPtr info,
                return;
        }
 
-       if (drmModePageFlip(drmmode_crtc->drmmode->fd, 
drmmode_crtc->mode_crtc->crtc_id,
+       pAMDGPUEnt = AMDGPUEntPriv(scrn);
+       if (drmModePageFlip(pAMDGPUEnt->fd, drmmode_crtc->mode_crtc->crtc_id,
                            drmmode_crtc->scanout[scanout_id].fb_id,
                            DRM_MODE_PAGE_FLIP_EVENT, drm_queue_entry)) {
                xf86DrvMsg(scrn->scrnIndex, X_WARNING, "flip queue failed in 
%s: %s\n",
@@ -549,6 +553,7 @@ static Bool AMDGPUPreInitAccel_KMS(ScrnInfoPtr pScrn)
        AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
 
        if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, false)) {
+               AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
                Bool use_glamor = TRUE;
 #ifdef HAVE_GBM_BO_USE_LINEAR
                const char *accel_method;
@@ -563,7 +568,7 @@ static Bool AMDGPUPreInitAccel_KMS(ScrnInfoPtr pScrn)
 #endif

Reply via email to