VIA bugvixes by Joris van Rantwijk Initial commit.
authorThomas Hellstrom <unichrome@shipmail.org>
Sun, 14 Aug 2005 09:52:09 +0000 (09:52 +0000)
committerThomas Hellstrom <unichrome@shipmail.org>
Sun, 14 Aug 2005 09:52:09 +0000 (09:52 +0000)
shared-core/via_drv.c
shared-core/via_drv.h
shared-core/via_verifier.c
shared-core/via_video.c
shared/via.h
shared/via_verifier.c
shared/via_video.c

index d8d85f5..fd0dbcc 100644 (file)
@@ -39,12 +39,16 @@ static struct pci_device_id pciidlist[] = {
        viadrv_PCI_IDS
 };
 
+/*
+ * {function, auth_needed, master, root_only}
+ */
+
 static drm_ioctl_desc_t ioctls[] = {
        [DRM_IOCTL_NR(DRM_VIA_ALLOCMEM)] = {via_mem_alloc, 1, 0, 0},
        [DRM_IOCTL_NR(DRM_VIA_FREEMEM)] = {via_mem_free, 1, 0, 0},
-       [DRM_IOCTL_NR(DRM_VIA_AGP_INIT)] = {via_agp_init, 1, 0, 0},
-       [DRM_IOCTL_NR(DRM_VIA_FB_INIT)] = {via_fb_init, 1, 0, 0},
-       [DRM_IOCTL_NR(DRM_VIA_MAP_INIT)] = {via_map_init, 1, 0, 0},
+       [DRM_IOCTL_NR(DRM_VIA_AGP_INIT)] = {via_agp_init, 1, 1, 0},
+       [DRM_IOCTL_NR(DRM_VIA_FB_INIT)] = {via_fb_init, 1, 1, 0},
+       [DRM_IOCTL_NR(DRM_VIA_MAP_INIT)] = {via_map_init, 1, 1, 0},
        [DRM_IOCTL_NR(DRM_VIA_DEC_FUTEX)] = {via_decoder_futex, 1, 0, 0},
        [DRM_IOCTL_NR(DRM_VIA_DMA_INIT)] = {via_dma_init, 1, 0, 0},
        [DRM_IOCTL_NR(DRM_VIA_CMDBUFFER)] = {via_cmdbuffer, 1, 0, 0},
index a059261..ba1c6d7 100644 (file)
 
 #define DRIVER_NAME            "via"
 #define DRIVER_DESC            "VIA Unichrome / Pro"
-#define DRIVER_DATE            "20050812"
+#define DRIVER_DATE            "20050814"
 
 #define DRIVER_MAJOR           2
 #define DRIVER_MINOR           6
-#define DRIVER_PATCHLEVEL      6
+#define DRIVER_PATCHLEVEL      7
 
 #include "via_verifier.h"
 
index 07923b0..65a7b9e 100644 (file)
@@ -246,7 +246,7 @@ static hazard_t table3[256];
 static __inline__ int
 eat_words(const uint32_t **buf, const uint32_t *buf_end, unsigned num_words)
 {
-       if ((*buf - buf_end) >= num_words) {
+       if ((buf_end - *buf) >= num_words) {
                *buf += num_words;
                return 0;
        } 
index 1e2d444..8ba0967 100644 (file)
@@ -53,6 +53,9 @@ via_release_futex(drm_via_private_t *dev_priv, int context)
        unsigned int i;
        volatile int *lock;
 
+       if (!dev_priv->sarea_priv)
+               return;
+
        for (i=0; i < VIA_NR_XVMC_LOCKS; ++i) {
                lock = (int *) XVMCLOCKPTR(dev_priv->sarea_priv, i);
                if ( (_DRM_LOCKING_CONTEXT( *lock ) == context)) {
index 5c33d6a..cc63df9 100644 (file)
 
 #define DRIVER_NAME            "via"
 #define DRIVER_DESC            "VIA Unichrome / Pro"
-#define DRIVER_DATE            "20050715"
+#define DRIVER_DATE            "20050814"
 
 #define DRIVER_MAJOR           2
 #define DRIVER_MINOR           6
-#define DRIVER_PATCHLEVEL      4
+#define DRIVER_PATCHLEVEL      7
 
 #define DRIVER_IOCTLS                                                  \
         [DRM_IOCTL_NR(DRM_IOCTL_VIA_ALLOCMEM)]  = { via_mem_alloc,  1, 0 }, \
        [DRM_IOCTL_NR(DRM_IOCTL_VIA_FREEMEM)]   = { via_mem_free,   1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_VIA_AGP_INIT)]   = { via_agp_init,  1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_VIA_FB_INIT)]   = { via_fb_init,    1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_VIA_MAP_INIT)]   = { via_map_init,  1, 0 }, \
+       [DRM_IOCTL_NR(DRM_IOCTL_VIA_AGP_INIT)]   = { via_agp_init,  1, 1 }, \
+       [DRM_IOCTL_NR(DRM_IOCTL_VIA_FB_INIT)]   = { via_fb_init,    1, 1 }, \
+       [DRM_IOCTL_NR(DRM_IOCTL_VIA_MAP_INIT)]   = { via_map_init,  1, 1 }, \
        [DRM_IOCTL_NR(DRM_IOCTL_VIA_DEC_FUTEX)] = { via_decoder_futex, 1, 0}, \
        [DRM_IOCTL_NR(DRM_IOCTL_VIA_DMA_INIT)] = { via_dma_init, 1, 0}, \
        [DRM_IOCTL_NR(DRM_IOCTL_VIA_CMDBUFFER)] = { via_cmdbuffer, 1, 0}, \
index ed14b1c..13b5ccf 100644 (file)
@@ -248,7 +248,7 @@ static hazard_t table3[256];
 static __inline__ int
 eat_words(const uint32_t **buf, const uint32_t *buf_end, unsigned num_words)
 {
-       if ((*buf - buf_end) >= num_words) {
+       if ((buf_end - *buf) >= num_words) {
                *buf += num_words;
                return 0;
        } 
index 289ddac..d79ee02 100644 (file)
@@ -54,6 +54,9 @@ via_release_futex(drm_via_private_t *dev_priv, int context)
        unsigned int i;
        volatile int *lock;
 
+       if (!dev_priv->sarea_priv)
+               return;
+
        for (i=0; i < VIA_NR_XVMC_LOCKS; ++i) {
                lock = (int *) XVMCLOCKPTR(dev_priv->sarea_priv, i);
                if ( (_DRM_LOCKING_CONTEXT( *lock ) == context)) {
@@ -77,7 +80,8 @@ via_decoder_futex(DRM_IOCTL_ARGS)
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       DRM_COPY_FROM_USER_IOCTL(fx, (drm_via_futex_t *) data, sizeof(fx));
+       DRM_COPY_FROM_USER_IOCTL(fx, (drm_via_futex_t __user *) data,
+                                sizeof(fx));
 
        if (fx.lock > VIA_NR_XVMC_LOCKS)
                return -EFAULT;