From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: [PATCH 03/56] drm/i915: Prevent signals from interrupting close() Date: Fri, 9 May 2014 20:58:58 -0700 Message-ID: <1399694391-3935-4-git-send-email-benjamin.widawsky@intel.com> References: <1399694391-3935-1-git-send-email-benjamin.widawsky@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail.bwidawsk.net (bwidawsk.net [166.78.191.112]) by gabe.freedesktop.org (Postfix) with ESMTP id 3C3EC6F06E for ; Fri, 9 May 2014 21:00:12 -0700 (PDT) In-Reply-To: <1399694391-3935-1-git-send-email-benjamin.widawsky@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel GFX Cc: Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org From: Chris Wilson We neither report any unfinished operations during releasing GEM objects associated with the file, and even if we did, it is bad form to report -EINTR from a close(). The root cause of the bug that first showed itself during close is that we do not do proper live tracking of vma and contexts under full-ppgtt, but this is useful piece of defensive programming enforcing our userspace API contract. Cc: Ben Widawsky Signed-off-by: Chris Wilson Reviewed-by: Ben Widawsky --- drivers/gpu/drm/i915/i915_dma.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index d10ddcc..54a08a9 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -1921,9 +1921,18 @@ void i915_driver_lastclose(struct drm_device * dev) void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv) { + struct drm_i915_private *dev_priv = to_i915(dev); + bool was_interruptible; + mutex_lock(&dev->struct_mutex); + was_interruptible = dev_priv->mm.interruptible; + WARN_ON(!was_interruptible); + dev_priv->mm.interruptible = false; + i915_gem_context_close(dev, file_priv); i915_gem_release(dev, file_priv); + + dev_priv->mm.interruptible = was_interruptible; mutex_unlock(&dev->struct_mutex); } -- 1.9.2