Hi Andrew,

Today's linux-next merge of the akpm tree got a conflict in
drivers/gpu/drm/i915/i915_gem.c between commit a70a3148b0c6 ("drm/i915:
Make proper functions for VMs") from the drm-intel tree and commit
e6950216e0af ("drivers: convert shrinkers to new count/scan API") from
the akpm tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

-- 
Cheers,
Stephen Rothwell                    s...@canb.auug.org.au

diff --cc drivers/gpu/drm/i915/i915_gem.c
index d31e15d,49db617..0000000
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@@ -4642,10 -4626,10 +4650,9 @@@ i915_gem_inactive_count(struct shrinke
                             struct drm_i915_private,
                             mm.inactive_shrinker);
        struct drm_device *dev = dev_priv->dev;
 -      struct i915_address_space *vm = &dev_priv->gtt.base;
        struct drm_i915_gem_object *obj;
-       int nr_to_scan = sc->nr_to_scan;
        bool unlock = true;
-       int cnt;
+       long cnt;
  
        if (!mutex_trylock(&dev->struct_mutex)) {
                if (!mutex_is_locked_by(&dev->struct_mutex, current))
@@@ -4683,75 -4653,36 +4681,109 @@@
                mutex_unlock(&dev->struct_mutex);
        return cnt;
  }
 +
+ static long
+ i915_gem_inactive_scan(struct shrinker *shrinker, struct shrink_control *sc)
+ {
+       struct drm_i915_private *dev_priv =
+               container_of(shrinker,
+                            struct drm_i915_private,
+                            mm.inactive_shrinker);
+       struct drm_device *dev = dev_priv->dev;
+       int nr_to_scan = sc->nr_to_scan;
+       long freed;
+       bool unlock = true;
+ 
+       if (!mutex_trylock(&dev->struct_mutex)) {
+               if (!mutex_is_locked_by(&dev->struct_mutex, current))
+                       return 0;
+ 
+               if (dev_priv->mm.shrinker_no_lock_stealing)
+                       return 0;
+ 
+               unlock = false;
+       }
+ 
+       freed = i915_gem_purge(dev_priv, nr_to_scan);
+       if (freed < nr_to_scan)
+               freed += __i915_gem_shrink(dev_priv, nr_to_scan,
+                                                       false);
+       if (freed < nr_to_scan)
+               freed += i915_gem_shrink_all(dev_priv);
+ 
+       if (unlock)
+               mutex_unlock(&dev->struct_mutex);
+       return freed;
+ }
++
 +/* All the new VM stuff */
 +unsigned long i915_gem_obj_offset(struct drm_i915_gem_object *o,
 +                                struct i915_address_space *vm)
 +{
 +      struct drm_i915_private *dev_priv = o->base.dev->dev_private;
 +      struct i915_vma *vma;
 +
 +      if (vm == &dev_priv->mm.aliasing_ppgtt->base)
 +              vm = &dev_priv->gtt.base;
 +
 +      BUG_ON(list_empty(&o->vma_list));
 +      list_for_each_entry(vma, &o->vma_list, vma_link) {
 +              if (vma->vm == vm)
 +                      return vma->node.start;
 +
 +      }
 +      return -1;
 +}
 +
 +bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
 +                      struct i915_address_space *vm)
 +{
 +      struct i915_vma *vma;
 +
 +      list_for_each_entry(vma, &o->vma_list, vma_link)
 +              if (vma->vm == vm)
 +                      return true;
 +
 +      return false;
 +}
 +
 +bool i915_gem_obj_bound_any(struct drm_i915_gem_object *o)
 +{
 +      struct drm_i915_private *dev_priv = o->base.dev->dev_private;
 +      struct i915_address_space *vm;
 +
 +      list_for_each_entry(vm, &dev_priv->vm_list, global_link)
 +              if (i915_gem_obj_bound(o, vm))
 +                      return true;
 +
 +      return false;
 +}
 +
 +unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
 +                              struct i915_address_space *vm)
 +{
 +      struct drm_i915_private *dev_priv = o->base.dev->dev_private;
 +      struct i915_vma *vma;
 +
 +      if (vm == &dev_priv->mm.aliasing_ppgtt->base)
 +              vm = &dev_priv->gtt.base;
 +
 +      BUG_ON(list_empty(&o->vma_list));
 +
 +      list_for_each_entry(vma, &o->vma_list, vma_link)
 +              if (vma->vm == vm)
 +                      return vma->node.size;
 +
 +      return 0;
 +}
 +
 +struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
 +                                   struct i915_address_space *vm)
 +{
 +      struct i915_vma *vma;
 +      list_for_each_entry(vma, &obj->vma_list, vma_link)
 +              if (vma->vm == vm)
 +                      return vma;
 +
 +      return NULL;
 +}

Attachment: pgpg6Jwhsp2kK.pgp
Description: PGP signature

Reply via email to