Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.3:Update
drm.7971
0003-drm-i915-Remove-use-of-vmap-notifier.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0003-drm-i915-Remove-use-of-vmap-notifier.patch of Package drm.7971
From c95be1bdeb1209a2e1f310c0918f6b415d81ffb6 Mon Sep 17 00:00:00 2001 From: Patrik Jakobsson <patrik.r.jakobsson@gmail.com> Date: Wed, 29 Mar 2017 11:41:07 +0200 Subject: [PATCH 03/12] drm/i915: Remove use of vmap notifier Signed-off-by: Patrik Jakobsson <pjakobsson@suse.de> --- drivers/gpu/drm/i915/i915_drv.h | 3 +- drivers/gpu/drm/i915/i915_gem.c | 2 +- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 10 +++++-- drivers/gpu/drm/i915/i915_gem_shrinker.c | 46 ------------------------------ 4 files changed, 9 insertions(+), 52 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 28e5382..c4625f9 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1353,7 +1353,6 @@ struct i915_gem_mm { struct i915_hw_ppgtt *aliasing_ppgtt; struct notifier_block oom_notifier; - struct notifier_block vmap_notifier; struct shrinker shrinker; /** LRU list of objects with fence regs on them. */ @@ -1366,7 +1365,7 @@ struct i915_gem_mm { bool interruptible; /* the indicator for dispatch video commands on two BSD rings */ - atomic_t bsd_engine_dispatch_index; + unsigned int bsd_engine_dispatch_index; /** Bit 6 swizzling required for X tiling */ uint32_t bit_6_swizzle_x; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 00eb481..9c36b04 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4593,7 +4593,7 @@ i915_gem_load_init(struct drm_device *dev) dev_priv->mm.interruptible = true; - atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0); + dev_priv->mm.bsd_engine_dispatch_index = 0; spin_lock_init(&dev_priv->fb_tracking.lock); } diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 0c400f8..16eedb4 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -1555,9 +1555,13 @@ gen8_dispatch_bsd_engine(struct drm_i915_private *dev_priv, struct drm_i915_file_private *file_priv = file->driver_priv; /* Check whether the file_priv has already selected one ring. */ - if ((int)file_priv->bsd_engine < 0) - file_priv->bsd_engine = atomic_fetch_xor(1, - &dev_priv->mm.bsd_engine_dispatch_index); + if ((int)file_priv->bsd_engine < 0) { + /* If not, use the ping-pong mechanism to select one. */ + mutex_lock(&dev_priv->drm.struct_mutex); + file_priv->bsd_engine = dev_priv->mm.bsd_engine_dispatch_index; + dev_priv->mm.bsd_engine_dispatch_index ^= 1; + mutex_unlock(&dev_priv->drm.struct_mutex); + } return file_priv->bsd_engine; } diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c index 1c237d0..0a1885b 100644 --- a/drivers/gpu/drm/i915/i915_gem_shrinker.c +++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c @@ -28,7 +28,6 @@ #include <linux/swap.h> #include <linux/pci.h> #include <linux/dma-buf.h> -#include <linux/vmalloc.h> #include <drm/drmP.h> #include <drm/i915_drm.h> @@ -400,47 +399,6 @@ i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr) return NOTIFY_DONE; } -static int -i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) -{ - struct drm_i915_private *dev_priv = - container_of(nb, struct drm_i915_private, mm.vmap_notifier); - struct shrinker_lock_uninterruptible slu; - struct i915_vma *vma, *next; - unsigned long freed_pages = 0; - int ret; - - if (!i915_gem_shrinker_lock_uninterruptible(dev_priv, &slu, 5000)) - return NOTIFY_DONE; - - /* Force everything onto the inactive lists */ - ret = i915_gem_wait_for_idle(dev_priv, I915_WAIT_LOCKED); - if (ret) - goto out; - - intel_runtime_pm_get(dev_priv); - freed_pages += i915_gem_shrink(dev_priv, -1UL, - I915_SHRINK_BOUND | - I915_SHRINK_UNBOUND | - I915_SHRINK_ACTIVE | - I915_SHRINK_VMAPS); - intel_runtime_pm_put(dev_priv); - - /* We also want to clear any cached iomaps as they wrap vmap */ - list_for_each_entry_safe(vma, next, - &dev_priv->ggtt.base.inactive_list, vm_link) { - unsigned long count = vma->node.size >> PAGE_SHIFT; - if (vma->iomap && i915_vma_unbind(vma) == 0) - freed_pages += count; - } - -out: - i915_gem_shrinker_unlock_uninterruptible(dev_priv, &slu); - - *(unsigned long *)ptr += freed_pages; - return NOTIFY_DONE; -} - /** * i915_gem_shrinker_init - Initialize i915 shrinker * @dev_priv: i915 device @@ -456,9 +414,6 @@ void i915_gem_shrinker_init(struct drm_i915_private *dev_priv) dev_priv->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom; WARN_ON(register_oom_notifier(&dev_priv->mm.oom_notifier)); - - dev_priv->mm.vmap_notifier.notifier_call = i915_gem_shrinker_vmap; - WARN_ON(register_vmap_purge_notifier(&dev_priv->mm.vmap_notifier)); } /** @@ -469,7 +424,6 @@ void i915_gem_shrinker_init(struct drm_i915_private *dev_priv) */ void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv) { - WARN_ON(unregister_vmap_purge_notifier(&dev_priv->mm.vmap_notifier)); WARN_ON(unregister_oom_notifier(&dev_priv->mm.oom_notifier)); unregister_shrinker(&dev_priv->mm.shrinker); } -- 2.12.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor