On Wed, Feb 23, 2005 at 06:57:39PM +0000, Edward Miller wrote:
> Package: kernel-source-2.4.27
> Version: 2.4.27-8
> Severity: normal
> 
> The fix for CAN-2004-1056 (Fix insufficient locking checks in DRM code)
> (see #285563) introduced the filp parameter in the
> LOCK_TEST_WITH_RETURN macro in drmP.h and various i810 and i830 source
> files in /drivers/char/drm. As is noted by the maintainer in the mail
> that accompanies the patch, this syntax comes from the 2.6 series and
> a different workaround to the locking problem is adopted in the patch
> for 2.4.27. However, the macro definition from 2.6 seems to have been
> inadvertently introduced at the same time. I have no idea what effect
> this has - DRM macros are hard to follow - but anyway, it gives me some
> compiler warnings about redefined macros because the non-i81x drivers
> are still using the LOCK_TEST_WITH_RETURN( dev ) syntax. Sorry if these
> are just harmless compiler warnings but I thought I should let you know.

Thanks,

those warnings are almost certainly harmless.
However, can you give this patch a whril?
It should make them go away.

-- 
Horms
diff -pru kernel-source-2.4.27.filp/drivers/char/drm/drmP.h 
kernel-source-2.4.27/drivers/char/drm/drmP.h
--- kernel-source-2.4.27.filp/drivers/char/drm/drmP.h   2005-02-24 
16:10:43.000000000 +0900
+++ kernel-source-2.4.27/drivers/char/drm/drmP.h        2005-01-19 
18:57:58.000000000 +0900
@@ -336,7 +336,7 @@ do {                                                        
                \
        (_map) = (_dev)->context_sareas[_ctx];          \
 } while(0)
 
-#define LOCK_TEST_WITH_RETURN( dev )                                   \
+#define LOCK_TEST_WITH_RETURN( dev, filp )                             \
 do {                                                                   \
        if ( !_DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ) ||           \
             dev->lock.pid != current->pid ) {                          \
diff -pru kernel-source-2.4.27.filp/drivers/char/drm/i810_dma.c 
kernel-source-2.4.27/drivers/char/drm/i810_dma.c
--- kernel-source-2.4.27.filp/drivers/char/drm/i810_dma.c       2005-02-24 
16:15:07.000000000 +0900
+++ kernel-source-2.4.27/drivers/char/drm/i810_dma.c    2005-01-19 
18:57:58.000000000 +0900
@@ -952,7 +952,7 @@ int i810_flush_ioctl(struct inode *inode
        drm_file_t        *priv   = filp->private_data;
        drm_device_t      *dev    = priv->dev;
 
-       LOCK_TEST_WITH_RETURN( dev );
+       LOCK_TEST_WITH_RETURN( dev, filp );
 
        i810_flush_queue(dev);
        return 0;
@@ -974,7 +974,7 @@ int i810_dma_vertex(struct inode *inode,
        if (copy_from_user(&vertex, (drm_i810_vertex_t *)arg, sizeof(vertex)))
                return -EFAULT;
 
-       LOCK_TEST_WITH_RETURN( dev );
+       LOCK_TEST_WITH_RETURN( dev, filp );
 
        if(vertex.idx < 0 || vertex.idx > dma->buf_count) return -EINVAL;
 
@@ -1002,7 +1002,7 @@ int i810_clear_bufs(struct inode *inode,
        if (copy_from_user(&clear, (drm_i810_clear_t *)arg, sizeof(clear)))
                return -EFAULT;
 
-       LOCK_TEST_WITH_RETURN( dev );
+       LOCK_TEST_WITH_RETURN( dev, filp );
 
        /* GH: Someone's doing nasty things... */
        if (!dev->dev_private) {
@@ -1022,7 +1022,7 @@ int i810_swap_bufs(struct inode *inode, 
        drm_device_t *dev = priv->dev;
 
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        i810_dma_dispatch_swap( dev );
        return 0;
@@ -1057,7 +1057,7 @@ int i810_getbuf(struct inode *inode, str
        if (copy_from_user(&d, (drm_i810_dma_t *)arg, sizeof(d)))
                return -EFAULT;
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        d.granted = 0;
 
@@ -1165,7 +1165,7 @@ int i810_dma_mc(struct inode *inode, str
                return -EFAULT;
 
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        i810_dma_dispatch_mc(dev, dma->buflist[mc.idx], mc.used,
                mc.last_render );
@@ -1210,7 +1210,7 @@ int i810_fstatus(struct inode *inode, st
        drm_device_t *dev = priv->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
        return I810_READ(0x30008);
 }
 
@@ -1221,7 +1221,7 @@ int i810_ov0_flip(struct inode *inode, s
        drm_device_t *dev = priv->dev;
        drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        //Tell the overlay to update
        I810_WRITE(0x30000,dev_priv->overlay_physical | 0x80000000);
diff -pru kernel-source-2.4.27.filp/drivers/char/drm/i830_dma.c 
kernel-source-2.4.27/drivers/char/drm/i830_dma.c
--- kernel-source-2.4.27.filp/drivers/char/drm/i830_dma.c       2005-02-24 
16:16:44.000000000 +0900
+++ kernel-source-2.4.27/drivers/char/drm/i830_dma.c    2005-01-19 
18:57:58.000000000 +0900
@@ -1330,7 +1330,7 @@ int i830_flush_ioctl(struct inode *inode
        drm_file_t        *priv   = filp->private_data;
        drm_device_t      *dev    = priv->dev;
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        i830_flush_queue(dev);
        return 0;
@@ -1351,7 +1351,7 @@ int i830_dma_vertex(struct inode *inode,
        if (copy_from_user(&vertex, (drm_i830_vertex_t *)arg, sizeof(vertex)))
                return -EFAULT;
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        DRM_DEBUG("i830 dma vertex, idx %d used %d discard %d\n",
                  vertex.idx, vertex.used, vertex.discard);
@@ -1378,7 +1378,7 @@ int i830_clear_bufs(struct inode *inode,
        if (copy_from_user(&clear, (drm_i830_clear_t *)arg, sizeof(clear)))
                return -EFAULT;
    
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        /* GH: Someone's doing nasty things... */
        if (!dev->dev_private) {
@@ -1400,7 +1400,7 @@ int i830_swap_bufs(struct inode *inode, 
    
        DRM_DEBUG("i830_swap_bufs\n");
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        i830_dma_dispatch_swap( dev );
        return 0;
@@ -1441,7 +1441,7 @@ int i830_flip_bufs(struct inode *inode, 
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        if (!dev_priv->page_flipping) 
                i830_do_init_pageflip( dev );
@@ -1480,7 +1480,7 @@ int i830_getbuf(struct inode *inode, str
        if (copy_from_user(&d, (drm_i830_dma_t *)arg, sizeof(d)))
                return -EFAULT;
    
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
        
        d.granted = 0;
 
diff -pru kernel-source-2.4.27.filp/drivers/char/drm/i830_irq.c 
kernel-source-2.4.27/drivers/char/drm/i830_irq.c
--- kernel-source-2.4.27.filp/drivers/char/drm/i830_irq.c       2005-02-24 
16:15:15.000000000 +0900
+++ kernel-source-2.4.27/drivers/char/drm/i830_irq.c    2005-01-19 
18:57:58.000000000 +0900
@@ -130,7 +130,7 @@ int i830_irq_emit( struct inode *inode, 
        drm_i830_irq_emit_t emit;
        int result;
 
-       LOCK_TEST_WITH_RETURN( dev ); 
+       LOCK_TEST_WITH_RETURN( dev, filp ); 
 
        if ( !dev_priv ) {
                DRM_ERROR( "%s called with no initialization\n", __FUNCTION__ );

Reply via email to