OSDN Git Service

Don't try to use dev->dma_lock unless dma is initialized (dev->dma != NULL)
authorEric Anholt <anholt@freebsd.org>
Fri, 24 Oct 2003 21:49:28 +0000 (21:49 +0000)
committerEric Anholt <anholt@freebsd.org>
Fri, 24 Oct 2003 21:49:28 +0000 (21:49 +0000)
    in bufs_info sysctl handler. dev->dma and dev->dma_lock existence are
    protected by DRM_LOCK(). Fixes panic on sysctl hw.dri when the device
    is uninitialied (when you aren't in X).

bsd-core/drm_sysctl.c
bsd/drm_sysctl.h

index 905f4c2..4bb603f 100644 (file)
@@ -224,12 +224,11 @@ static int DRM(bufs_info) DRM_SYSCTL_HANDLER_ARGS
         * copy of the whole structure and the relevant data from buflist.
         */
        DRM_LOCK();
-       DRM_SPINLOCK(&dev->dma_lock);
        if (dma == NULL) {
-               DRM_SPINUNLOCK(&dev->dma_lock);
                DRM_UNLOCK();
                return 0;
        }
+       DRM_SPINLOCK(&dev->dma_lock);
        tempdma = *dma;
        templists = DRM(alloc)(sizeof(int) * dma->buf_count, DRM_MEM_BUFS);
        for (i = 0; i < dma->buf_count; i++)
index 905f4c2..4bb603f 100644 (file)
@@ -224,12 +224,11 @@ static int DRM(bufs_info) DRM_SYSCTL_HANDLER_ARGS
         * copy of the whole structure and the relevant data from buflist.
         */
        DRM_LOCK();
-       DRM_SPINLOCK(&dev->dma_lock);
        if (dma == NULL) {
-               DRM_SPINUNLOCK(&dev->dma_lock);
                DRM_UNLOCK();
                return 0;
        }
+       DRM_SPINLOCK(&dev->dma_lock);
        tempdma = *dma;
        templists = DRM(alloc)(sizeof(int) * dma->buf_count, DRM_MEM_BUFS);
        for (i = 0; i < dma->buf_count; i++)