From patchwork Tue Sep 10 22:36:31 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodrigo Vivi X-Patchwork-Id: 2868021 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 063C79F485 for ; Tue, 10 Sep 2013 23:07:52 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1765E203DA for ; Tue, 10 Sep 2013 23:07:51 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id EEA6A20340 for ; Tue, 10 Sep 2013 23:07:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EDA36E6327 for ; Tue, 10 Sep 2013 16:07:49 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-yh0-f46.google.com (mail-yh0-f46.google.com [209.85.213.46]) by gabe.freedesktop.org (Postfix) with ESMTP id 2BD9BE7472 for ; Tue, 10 Sep 2013 15:37:06 -0700 (PDT) Received: by mail-yh0-f46.google.com with SMTP id c41so2916912yho.19 for ; Tue, 10 Sep 2013 15:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FL9RP8RCvSkAQsY0rcimGZvH76Sp/OodMxctNWZQlXQ=; b=Y9/1PTZFfb/SujuJtPmnjiaTCD1xr9k2c83kC4g+47zA9mHgHqWoXz4xprGCOuN0E7 J6GdKiPjDiGtda3/ohCtfJUwZ3OKDiD8kb8UGR0XmxUSkYJzj8lTIcwiD3ZKH+iNVkB5 JfeQy2HXd3OXF/kDRyx2f4iUPL9Apar9XA2tNvWdRwkKcmcK1EThZGHifL3HIgtN2+16 72/q27y3vv2e9MmlS4wjhiMxTYAMlokM38VfxZeboV7uOlM20fQCT3eb1gfHnpxFdedG wLcf8RBvJwKgkPl7CKBxz7vsKyItCqzUOXmJtK4TDJEFj94A41Zl0QIgxubUoCdOQ+tl OtqQ== X-Received: by 10.236.112.172 with SMTP id y32mr537016yhg.31.1378852625356; Tue, 10 Sep 2013 15:37:05 -0700 (PDT) Received: from localhost.localdomain ([186.204.164.107]) by mx.google.com with ESMTPSA id v22sm27925176yhn.12.1969.12.31.16.00.00 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 10 Sep 2013 15:37:04 -0700 (PDT) From: Rodrigo Vivi To: intel-gfx@lists.freedesktop.org Date: Tue, 10 Sep 2013 19:36:31 -0300 Message-Id: <1378852608-30281-3-git-send-email-rodrigo.vivi@gmail.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1378852608-30281-1-git-send-email-rodrigo.vivi@gmail.com> References: <1378852608-30281-1-git-send-email-rodrigo.vivi@gmail.com> Cc: "Liu, Chuansheng" Subject: [Intel-gfx] [PATCH 02/19] drm/i915: Cancel outstanding modeset workers before suspend X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Chris Wilson Upon resume we will do a complete restoration of the mode and so reset all tasks, but during suspend (and unload) we need to make sure that no workers run concurrently with our suspend code. Or worse just after. The issue was first raised whilst tackling a suspend issue with Takashi Iwai (http://lists.freedesktop.org/archives/intel-gfx/2012-April/016738.html) and then it was independently rediscovered by Chuanshen Lui. v2: Rebase for the lost year. Signed-off-by: Chris Wilson Acked-by: Takashi Iwai Cc: "Liu, Chuansheng" Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/i915/i915_drv.h | 1 + drivers/gpu/drm/i915/intel_display.c | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index e357995..2729338 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -2229,6 +2229,7 @@ extern void intel_modeset_init_hw(struct drm_device *dev); extern void intel_modeset_suspend_hw(struct drm_device *dev); extern void intel_modeset_init(struct drm_device *dev); extern void intel_modeset_gem_init(struct drm_device *dev); +extern void intel_modeset_quiesce(struct drm_device *dev); extern void intel_modeset_cleanup(struct drm_device *dev); extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state); extern void intel_modeset_setup_hw_state(struct drm_device *dev, diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 122aa02..86a70d9 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -10106,6 +10106,7 @@ void intel_modeset_init_hw(struct drm_device *dev) void intel_modeset_suspend_hw(struct drm_device *dev) { + intel_modeset_quiesce(dev); intel_suspend_hw(dev); } @@ -10550,9 +10551,19 @@ void intel_modeset_gem_init(struct drm_device *dev) intel_modeset_setup_hw_state(dev, false); } -void intel_modeset_cleanup(struct drm_device *dev) +void intel_modeset_quiesce(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; + + cancel_work_sync(&dev_priv->hotplug_work); + cancel_work_sync(&dev_priv->rps.work); + + /* catch all required for dev_priv->wq */ + flush_scheduled_work(); +} + +void intel_modeset_cleanup(struct drm_device *dev) +{ struct drm_crtc *crtc; /* @@ -10561,7 +10572,10 @@ void intel_modeset_cleanup(struct drm_device *dev) * experience fancy races otherwise. */ drm_irq_uninstall(dev); - cancel_work_sync(&dev_priv->hotplug_work); + + /* flush any delayed tasks or pending work */ + intel_modeset_quiesce(dev); + /* * Due to the hpd irq storm handling the hotplug work can re-arm the * poll handlers. Hence disable polling after hpd handling is shut down. @@ -10590,9 +10604,6 @@ void intel_modeset_cleanup(struct drm_device *dev) mutex_unlock(&dev->struct_mutex); - /* flush any delayed tasks or pending work */ - flush_scheduled_work(); - /* destroy backlight, if any, before the connectors */ intel_panel_destroy_backlight(dev);