summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci/drm/drm_linux.c
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2019-12-25 11:31:41 +0000
committerkettenis <kettenis@openbsd.org>2019-12-25 11:31:41 +0000
commita4e118acf302a673a7affcccef258b7778ea0e9c (patch)
tree91c2369df44bd11ce15d10e00032c41caeee61a9 /sys/dev/pci/drm/drm_linux.c
parentCondense a few multi line comments into single line ones. While here (diff)
downloadwireguard-openbsd-a4e118acf302a673a7affcccef258b7778ea0e9c.tar.xz
wireguard-openbsd-a4e118acf302a673a7affcccef258b7778ea0e9c.zip
Hook up the shrinker for inteldrm(4). This is a "light" version that only
drops graphics buffers that are cached and not in active use. Help from beck@ for pointing out how to hook this up to our pagedaemon. ok jsg@
Diffstat (limited to 'sys/dev/pci/drm/drm_linux.c')
-rw-r--r--sys/dev/pci/drm/drm_linux.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/sys/dev/pci/drm/drm_linux.c b/sys/dev/pci/drm/drm_linux.c
index ffd8ded926d..1fb37929613 100644
--- a/sys/dev/pci/drm/drm_linux.c
+++ b/sys/dev/pci/drm/drm_linux.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: drm_linux.c,v 1.51 2019/11/30 11:19:17 visa Exp $ */
+/* $OpenBSD: drm_linux.c,v 1.52 2019/12/25 11:31:41 kettenis Exp $ */
/*
* Copyright (c) 2013 Jonathan Gray <jsg@openbsd.org>
* Copyright (c) 2015, 2016 Mark Kettenis <kettenis@openbsd.org>
@@ -1867,3 +1867,28 @@ pci_resize_resource(struct pci_dev *pdev, int bar, int nsize)
return 0;
}
+
+TAILQ_HEAD(, shrinker) shrinkers = TAILQ_HEAD_INITIALIZER(shrinkers);
+
+int
+register_shrinker(struct shrinker *shrinker)
+{
+ TAILQ_INSERT_TAIL(&shrinkers, shrinker, next);
+ return 0;
+}
+
+void
+drmbackoff(long npages)
+{
+ struct shrink_control sc;
+ struct shrinker *shrinker;
+ u_long ret;
+
+ shrinker = TAILQ_FIRST(&shrinkers);
+ while (shrinker && npages > 0) {
+ sc.nr_to_scan = npages;
+ ret = shrinker->scan_objects(shrinker, &sc);
+ npages -= ret;
+ shrinker = TAILQ_NEXT(shrinker, next);
+ }
+}