drm/linux: Add some shrinker stub code
authorFrançois Tigeot <ftigeot@wolfpond.org>
Fri, 29 Mar 2019 20:03:21 +0000 (21:03 +0100)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Fri, 29 Mar 2019 20:03:21 +0000 (21:03 +0100)
sys/dev/drm/i915/i915_drv.h
sys/dev/drm/i915/i915_gem_shrinker.c
sys/dev/drm/include/linux/fs.h
sys/dev/drm/include/linux/mm.h
sys/dev/drm/include/linux/shrinker.h [new file with mode: 0644]

index 98b9c9b..1b20461 100644 (file)
@@ -1279,9 +1279,7 @@ struct i915_gem_mm {
 
        struct notifier_block oom_notifier;
        struct notifier_block vmap_notifier;
-#if 0
        struct shrinker shrinker;
-#endif
        bool shrinker_no_lock_stealing;
 
        /** LRU list of objects with fence regs on them. */
index 60e5b42..c3d0d51 100644 (file)
@@ -239,10 +239,12 @@ static bool i915_gem_shrinker_lock(struct drm_device *dev, bool *unlock)
 
        return true;
 }
+#endif
 
 static unsigned long
 i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
+#if 0
        struct drm_i915_private *dev_priv =
                container_of(shrinker, struct drm_i915_private, mm.shrinker);
        struct drm_device *dev = dev_priv->dev;
@@ -267,11 +269,14 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
                mutex_unlock(&dev->struct_mutex);
 
        return count;
+#endif
+       return 0;
 }
 
 static unsigned long
 i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
+#if 0
        struct drm_i915_private *dev_priv =
                container_of(shrinker, struct drm_i915_private, mm.shrinker);
        struct drm_device *dev = dev_priv->dev;
@@ -295,8 +300,11 @@ i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
                mutex_unlock(&dev->struct_mutex);
 
        return freed;
+#endif
+       return 0;
 }
 
+#if 0
 struct shrinker_lock_uninterruptible {
        bool was_interruptible;
        bool unlock;
@@ -412,10 +420,10 @@ i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr
  */
 void i915_gem_shrinker_init(struct drm_i915_private *dev_priv)
 {
-#if 0
        dev_priv->mm.shrinker.scan_objects = i915_gem_shrinker_scan;
        dev_priv->mm.shrinker.count_objects = i915_gem_shrinker_count;
        dev_priv->mm.shrinker.seeks = DEFAULT_SEEKS;
+#if 0
        WARN_ON(register_shrinker(&dev_priv->mm.shrinker));
 
        dev_priv->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom;
index cf88372..665a593 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/mutex.h>
 #include <linux/capability.h>
 #include <linux/atomic.h>
+#include <linux/shrinker.h>
 #include <linux/lockdep.h>
 
 #include <sys/file.h>  /* for struct file */
index 132ac03..d343e60 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/atomic.h>
 #include <linux/mm_types.h>
 #include <linux/err.h>
+#include <linux/shrinker.h>
 
 #include <asm/page.h>
 #include <asm/pgtable.h>
diff --git a/sys/dev/drm/include/linux/shrinker.h b/sys/dev/drm/include/linux/shrinker.h
new file mode 100644 (file)
index 0000000..44afa75
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019 François Tigeot <ftigeot@wolfpond.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice unmodified, this list of conditions, and the following
+ *    disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_SHRINKER_H_
+#define _LINUX_SHRINKER_H_
+
+struct shrink_control {
+       unsigned long nr_to_scan;
+};
+
+struct shrinker {
+       unsigned long (*count_objects)(struct shrinker *,
+                                      struct shrink_control *sc);
+       unsigned long (*scan_objects)(struct shrinker *,
+                                     struct shrink_control *sc);
+       int seeks;
+};
+
+#define DEFAULT_SEEKS  2
+
+#endif /* _LINUX_SHRINKER_H_ */