From patchwork Fri Sep 5 11:59:45 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 4851691 Return-Path: X-Original-To: patchwork-dri-devel@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 664D1C0338 for ; Fri, 5 Sep 2014 12:00:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DAF4A201FB for ; Fri, 5 Sep 2014 11:59:57 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id D461A20145 for ; Fri, 5 Sep 2014 11:59:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4CBCA6E14C; Fri, 5 Sep 2014 04:59:55 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qa0-f53.google.com (mail-qa0-f53.google.com [209.85.216.53]) by gabe.freedesktop.org (Postfix) with ESMTP id 5C8BB6E0D6 for ; Fri, 5 Sep 2014 04:59:53 -0700 (PDT) Received: by mail-qa0-f53.google.com with SMTP id w8so10652156qac.26 for ; Fri, 05 Sep 2014 04:59:51 -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; bh=eWQUjCodpYwo0k2WrLwdBnbvNCk2skJoQy8NnOrNAxw=; b=peeJghZZ2KMER0xvabhWahHT31VTvIOZhjzeQb3q44TALA6XBi/Q17tiVyQ7rbVto9 rQvajBvr/Hqv5UQIvePDEZCJcAa6s7ehjuiDVq6UP1f4Bn1aUmZUaUN3pFIWLNkaqIGR BCi+9iuouhdahQv8R1wYsHT9bOo4/74KltHSso5C3fPEXPEzIlX89ioNn3lS9uWdgjKA wWCGP72YTQx6JjhJA/DCykK3UPXOM6aaA8N/jgeWUOiqQqzyUngNdAui3YMzdkmsuaOA XllGfHeaQ5T66jk8cOq91B9a3Ie2FhR/GREv6mXfsTPq900izcSohrt2SZEVVvs6v44Q FbsQ== X-Received: by 10.140.32.3 with SMTP id g3mr16236217qgg.13.1409918391491; Fri, 05 Sep 2014 04:59:51 -0700 (PDT) Received: from localhost ([2601:6:2c00:943:2677:3ff:fed3:ff40]) by mx.google.com with ESMTPSA id 33sm353963qgl.45.2014.09.05.04.59.50 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 05 Sep 2014 04:59:50 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Subject: [PATCH] drm: use trylock to avoid fault injection antics Date: Fri, 5 Sep 2014 07:59:45 -0400 Message-Id: <1409918385-30379-1-git-send-email-robdclark@gmail.com> X-Mailer: git-send-email 1.9.3 Cc: thellstrom@vmware.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-5.8 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 While in real life, we could never fail to grab the newly created mutex, ww_mutex fault injection has no way to know this. Which could result that kernels built with CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y might fail to acquire the new crtc lock. Which results in bad things when the locks are dropped. See: https://bugzilla.kernel.org/show_bug.cgi?id=83341 Signed-off-by: Rob Clark Reviewed-by: Thomas Hellstrom --- drivers/gpu/drm/drm_crtc.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 7d7c1fd..8bb11fa 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -682,7 +682,15 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc, drm_modeset_lock_all(dev); drm_modeset_lock_init(&crtc->mutex); /* dropped by _unlock_all(): */ - drm_modeset_lock(&crtc->mutex, config->acquire_ctx); + /* NOTE: use trylock here for the benefit of ww_mutex fault + * injection. We cannot actually fail to grab this lock (as + * it has only just been created), but fault injection does + * not know this, which can result in the this lock failing, + * and hilarity when we later try to drop the locks. See: + * https://bugzilla.kernel.org/show_bug.cgi?id=83341 + */ + ret = ww_mutex_trylock(&crtc->mutex.mutex); + WARN_ON(ret); ret = drm_mode_object_get(dev, &crtc->base, DRM_MODE_OBJECT_CRTC); if (ret)