From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [BACKPORT v4.12-rc1] drm/i915: Do not sync RCU during shrinking Date: Thu, 18 May 2017 14:28:02 +0300 Message-ID: <87vaoyjtfh.fsf@intel.com> References: <1495097379-573-1-git-send-email-joonas.lahtinen@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: In-Reply-To: <1495097379-573-1-git-send-email-joonas.lahtinen@linux.intel.com> Sender: stable-owner@vger.kernel.org To: Joonas Lahtinen , Intel graphics driver community testing & development Cc: stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org On Thu, 18 May 2017, Joonas Lahtinen wrote: > Due to the complex dependencies between workqueues and RCU, which > are not easily detected by lockdep, do not synchronize RCU during > shrinking. > > On low-on-memory systems (mem=1G for example), the RCU sync leads > to all system workqueus freezing and unrelated lockdep splats are > displayed according to reports. GIT bisecting done by J. R. > Okajima points to the commit where RCU syncing was extended. > > RCU sync gains us very little benefit in real life scenarios > where the amount of memory used by object backing storage is > dominant over the metadata under RCU, so drop it altogether. > > " Yeeeaah, if core could just, go ahead and reclaim RCU > queues, that'd be great. " > > - Chris Wilson, 2016 (0eafec6d3244) > > v2: More information to commit message. > v3: Remove "grep _rcu_" escapee from i915_gem_shrink_all (Andrea) > > Fixes: c053b5a506d3 ("drm/i915: Don't call synchronize_rcu_expedited under struct_mutex") > Suggested-by: Chris Wilson > Reported-by: J. R. Okajima > Signed-off-by: Joonas Lahtinen > Reviewed-by: Chris Wilson > Tested-by: Hugh Dickins > Tested-by: Andrea Arcangeli > Cc: Chris Wilson > Cc: Tvrtko Ursulin > Cc: J. R. Okajima > Cc: Andrea Arcangeli > Cc: Hugh Dickins > Cc: Jani Nikula > Cc: # v4.11+ Pushed to drm-intel-fixes, thanks for the patch. BR, Jani. > --- > drivers/gpu/drm/i915/i915_gem_shrinker.c | 5 ----- > 1 file changed, 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c > index 129ed30..57d9f7f 100644 > --- a/drivers/gpu/drm/i915/i915_gem_shrinker.c > +++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c > @@ -59,9 +59,6 @@ static void i915_gem_shrinker_unlock(struct drm_device *dev, bool unlock) > return; > > mutex_unlock(&dev->struct_mutex); > - > - /* expedite the RCU grace period to free some request slabs */ > - synchronize_rcu_expedited(); > } > > static bool any_vma_pinned(struct drm_i915_gem_object *obj) > @@ -274,8 +271,6 @@ unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv) > I915_SHRINK_ACTIVE); > intel_runtime_pm_put(dev_priv); > > - synchronize_rcu(); /* wait for our earlier RCU delayed slab frees */ > - > return freed; > } -- Jani Nikula, Intel Open Source Technology Center