From patchwork Mon Aug 26 22:50:57 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodrigo Vivi X-Patchwork-Id: 2849842 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id BA720BF546 for ; Mon, 26 Aug 2013 22:55:55 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DAA9620290 for ; Mon, 26 Aug 2013 22:55:54 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 15C45200ED for ; Mon, 26 Aug 2013 22:55:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0C33AE7448 for ; Mon, 26 Aug 2013 15:55:50 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-gh0-f176.google.com (mail-gh0-f176.google.com [209.85.160.176]) by gabe.freedesktop.org (Postfix) with ESMTP id 1D25DE743F for ; Mon, 26 Aug 2013 15:51:30 -0700 (PDT) Received: by mail-gh0-f176.google.com with SMTP id z17so997455ghb.7 for ; Mon, 26 Aug 2013 15:51:29 -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=rn6dgb//Vvj7Nv/psHbZJNITRhmkCWT87jpKgYwnurc=; b=i/NizrFSLY9fkCqYbJY/ulfsFzsW69xIQFxfvEw7nuelBLHJTPnKCCmLonR1jv7xm2 WBHEZRmC0i4HqXALZICqrZ3kSzQIC4yJyUOXrj+6ZRe7cXmtyhE3P/bGx/FzCSpwNP7h j1P9v244ZVO0cTN6t4urxqJeWRBqy+pF3K3GnnmLJ+VcBkn5rpzT2lnw8v7MuLgyfQ6b P7GEy9Nfb+ZzGbzPjXg7uvNekLFzjw4CzsOD4rEUTPOFAvL0CxcY9yDDoZtOimThS10B LGtZtz7GOMn8Tlb8LzjXNxKHeGn3NuF9G6lPE0eEO4BMC5RVOBy89tNJor6reu0S9BO+ NEJQ== X-Received: by 10.236.173.164 with SMTP id v24mr7214597yhl.56.1377557489606; Mon, 26 Aug 2013 15:51:29 -0700 (PDT) Received: from localhost.localdomain ([186.204.164.107]) by mx.google.com with ESMTPSA id w42sm20745880yhb.8.1969.12.31.16.00.00 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 26 Aug 2013 15:51:28 -0700 (PDT) From: Rodrigo Vivi To: intel-gfx@lists.freedesktop.org Date: Mon, 26 Aug 2013 19:50:57 -0300 Message-Id: <1377557469-4078-6-git-send-email-rodrigo.vivi@gmail.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1377557469-4078-1-git-send-email-rodrigo.vivi@gmail.com> References: <1377557469-4078-1-git-send-email-rodrigo.vivi@gmail.com> Cc: "Liu, Chuansheng" Subject: [Intel-gfx] [PATCH 05/17] 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=-6.5 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" --- 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 8ee15b4..7ac5ca5 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -2199,6 +2199,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 bcb62fe..74dbc68 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -10030,6 +10030,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); } @@ -10474,9 +10475,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; /* @@ -10485,7 +10496,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. @@ -10512,9 +10526,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);