From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com ([134.134.136.65]:26578 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755954AbdERLZk (ORCPT ); Thu, 18 May 2017 07:25:40 -0400 From: Jani Nikula To: Joonas Lahtinen , Intel graphics driver community testing & development Cc: stable@vger.kernel.org Subject: Re: [BACKPORT v4.12-rc1] drm/i915: Do not sync RCU during shrinking In-Reply-To: <1495097379-573-1-git-send-email-joonas.lahtinen@linux.intel.com> References: <1495097379-573-1-git-send-email-joonas.lahtinen@linux.intel.com> Date: Thu, 18 May 2017 14:28:02 +0300 Message-ID: <87vaoyjtfh.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: stable-owner@vger.kernel.org List-ID: 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