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__ );