* about to occur.
                 */
                if (obj_priv->fence_reg != I915_FENCE_REG_NONE) {
-                       list_move_tail(&obj_priv->fence_list,
+                       struct drm_i915_fence_reg *reg =
+                               &dev_priv->fence_regs[obj_priv->fence_reg];
+                       list_move_tail(®->lru_list,
                                       &dev_priv->mm.fence_list);
                }
 
                        i915_gem_object_move_to_active(obj, seqno);
 
                        /* update the fence lru list */
-                       if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
-                               list_move_tail(&obj_priv->fence_list,
+                       if (obj_priv->fence_reg != I915_FENCE_REG_NONE) {
+                               struct drm_i915_fence_reg *reg =
+                                       &dev_priv->fence_regs[obj_priv->fence_reg];
+                               list_move_tail(®->lru_list,
                                                &dev_priv->mm.fence_list);
+                       }
 
                        trace_i915_gem_object_change_domain(obj,
                                                            obj->read_domains,
 
        /* None available, try to steal one or wait for a user to finish */
        i = I915_FENCE_REG_NONE;
-       list_for_each_entry(obj_priv, &dev_priv->mm.fence_list,
-                           fence_list) {
-               obj = &obj_priv->base;
+       list_for_each_entry(reg, &dev_priv->mm.fence_list,
+                           lru_list) {
+               obj = reg->obj;
+               obj_priv = to_intel_bo(obj);
 
                if (obj_priv->pin_count)
                        continue;
 
        /* Just update our place in the LRU if our fence is getting used. */
        if (obj_priv->fence_reg != I915_FENCE_REG_NONE) {
-               list_move_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list);
+               reg = &dev_priv->fence_regs[obj_priv->fence_reg];
+               list_move_tail(®->lru_list, &dev_priv->mm.fence_list);
                return 0;
        }
 
 
        obj_priv->fence_reg = ret;
        reg = &dev_priv->fence_regs[obj_priv->fence_reg];
-       list_add_tail(&obj_priv->fence_list, &dev_priv->mm.fence_list);
+       list_add_tail(®->lru_list, &dev_priv->mm.fence_list);
 
        reg->obj = obj;
 
        struct drm_device *dev = obj->dev;
        drm_i915_private_t *dev_priv = dev->dev_private;
        struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
+       struct drm_i915_fence_reg *reg =
+               &dev_priv->fence_regs[obj_priv->fence_reg];
 
        if (IS_GEN6(dev)) {
                I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 +
                I915_WRITE(fence_reg, 0);
        }
 
-       dev_priv->fence_regs[obj_priv->fence_reg].obj = NULL;
+       reg->obj = NULL;
        obj_priv->fence_reg = I915_FENCE_REG_NONE;
-       list_del_init(&obj_priv->fence_list);
+       list_del_init(®->lru_list);
 }
 
 /**
        obj->base.read_domains = I915_GEM_DOMAIN_CPU;
 
        obj->agp_type = AGP_USER_MEMORY;
-
        obj->base.driver_private = NULL;
        obj->fence_reg = I915_FENCE_REG_NONE;
        INIT_LIST_HEAD(&obj->list);
        INIT_LIST_HEAD(&obj->gpu_write_list);
-       INIT_LIST_HEAD(&obj->fence_list);
        obj->madv = I915_MADV_WILLNEED;
 
        trace_i915_gem_object_create(&obj->base);
        INIT_LIST_HEAD(&dev_priv->mm.inactive_list);
        INIT_LIST_HEAD(&dev_priv->mm.request_list);
        INIT_LIST_HEAD(&dev_priv->mm.fence_list);
+       for (i = 0; i < 16; i++)
+               INIT_LIST_HEAD(&dev_priv->fence_regs[i].lru_list);
        INIT_DELAYED_WORK(&dev_priv->mm.retire_work,
                          i915_gem_retire_work_handler);
        dev_priv->mm.next_gem_seqno = 1;