drm fixup 2/2 - optimise i8x0 accesses..

From: Dave Airlie
Date: Fri Aug 27 2004 - 09:17:24 EST



the patch below optimises the drm code to not do put_user() on memory the
kernel allocated and then mmap-installed to userspace, but instead makes it
use the kernel virtual address directly instead.

From: Arjan van de Ven <arjanv@xxxxxxxxxx>
Signed-off-by: Dave Airlie <airlied@xxxxxxxx>


diff -Nru a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c
--- a/drivers/char/drm/i810_dma.c Sat Aug 28 00:01:57 2004
+++ b/drivers/char/drm/i810_dma.c Sat Aug 28 00:01:57 2004
@@ -844,13 +844,10 @@
if (buf_priv->currently_mapped == I810_BUF_MAPPED) {
unsigned int prim = (sarea_priv->vertex_prim & PR_MASK);

- put_user((GFX_OP_PRIMITIVE | prim |
- ((used/4)-2)),
- (u32 __user *)buf_priv->virtual);
+ *(u32 *)buf_priv->kernel_virtual = ((GFX_OP_PRIMITIVE | prim | ((used/4)-2)));

if (used & 4) {
- put_user(0,
- (u32 __user *)((u32)buf_priv->virtual + used));
+ *(u32 *)((u32)buf_priv->kernel_virtual + used) = 0;
used += 4;
}

diff -Nru a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c
--- a/drivers/char/drm/i830_dma.c Sat Aug 28 00:01:57 2004
+++ b/drivers/char/drm/i830_dma.c Sat Aug 28 00:01:57 2004
@@ -1166,19 +1166,19 @@
DRM_DEBUG( "start + used - 4 : %ld\n", start + used - 4);

if (buf_priv->currently_mapped == I830_BUF_MAPPED) {
- u32 __user *vp = buf_priv->virtual;
+ u32 *vp = buf_priv->kernel_virtual;

- put_user( (GFX_OP_PRIMITIVE |
- sarea_priv->vertex_prim |
- ((used/4)-2)), &vp[0]);
+ vp[0] = (GFX_OP_PRIMITIVE |
+ sarea_priv->vertex_prim |
+ ((used/4)-2));

if (dev_priv->use_mi_batchbuffer_start) {
- put_user(MI_BATCH_BUFFER_END, &vp[used/4]);
+ vp[used/4] = MI_BATCH_BUFFER_END;
used += 4;
}

if (used & 4) {
- put_user(0, &vp[used/4]);
+ vp[used/4] = 0;
used += 4;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/