drm/nv50-nvc0: completely disable relocs
authorBen Skeggs <bskeggs@redhat.com>
Tue, 7 Jun 2011 01:12:39 +0000 (11:12 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 23 Jun 2011 05:59:49 +0000 (15:59 +1000)
GPU virtual addresses are constant now so this should never be getting hit
anyway and userspace shouldn't break from them being ignored.

This is being done in preference to teaching the code how to deal with BOs
that exist at different virtual addresses within separate VMs.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_gem.c

index d314f34f39d67104705f9f463df2a93161da5f6a..2d1de2427bc3ba09953818f66fc81802797b4a93 100644 (file)
@@ -333,6 +333,7 @@ static int
 validate_list(struct nouveau_channel *chan, struct list_head *list,
              struct drm_nouveau_gem_pushbuf_bo *pbbo, uint64_t user_pbbo_ptr)
 {
+       struct drm_nouveau_private *dev_priv = chan->dev->dev_private;
        struct drm_nouveau_gem_pushbuf_bo __user *upbbo =
                                (void __force __user *)(uintptr_t)user_pbbo_ptr;
        struct drm_device *dev = chan->dev;
@@ -371,24 +372,26 @@ validate_list(struct nouveau_channel *chan, struct list_head *list,
                        return ret;
                }
 
-               if (nvbo->bo.offset == b->presumed.offset &&
-                   ((nvbo->bo.mem.mem_type == TTM_PL_VRAM &&
-                     b->presumed.domain & NOUVEAU_GEM_DOMAIN_VRAM) ||
-                    (nvbo->bo.mem.mem_type == TTM_PL_TT &&
-                     b->presumed.domain & NOUVEAU_GEM_DOMAIN_GART)))
-                       continue;
+               if (dev_priv->card_type < NV_50) {
+                       if (nvbo->bo.offset == b->presumed.offset &&
+                           ((nvbo->bo.mem.mem_type == TTM_PL_VRAM &&
+                             b->presumed.domain & NOUVEAU_GEM_DOMAIN_VRAM) ||
+                            (nvbo->bo.mem.mem_type == TTM_PL_TT &&
+                             b->presumed.domain & NOUVEAU_GEM_DOMAIN_GART)))
+                               continue;
 
-               if (nvbo->bo.mem.mem_type == TTM_PL_TT)
-                       b->presumed.domain = NOUVEAU_GEM_DOMAIN_GART;
-               else
-                       b->presumed.domain = NOUVEAU_GEM_DOMAIN_VRAM;
-               b->presumed.offset = nvbo->bo.offset;
-               b->presumed.valid = 0;
-               relocs++;
-
-               if (DRM_COPY_TO_USER(&upbbo[nvbo->pbbo_index].presumed,
-                                    &b->presumed, sizeof(b->presumed)))
-                       return -EFAULT;
+                       if (nvbo->bo.mem.mem_type == TTM_PL_TT)
+                               b->presumed.domain = NOUVEAU_GEM_DOMAIN_GART;
+                       else
+                               b->presumed.domain = NOUVEAU_GEM_DOMAIN_VRAM;
+                       b->presumed.offset = nvbo->bo.offset;
+                       b->presumed.valid = 0;
+                       relocs++;
+
+                       if (DRM_COPY_TO_USER(&upbbo[nvbo->pbbo_index].presumed,
+                                            &b->presumed, sizeof(b->presumed)))
+                               return -EFAULT;
+               }
        }
 
        return relocs;
This page took 0.069041 seconds and 5 git commands to generate.