From patchwork Tue Sep 29 07:30:49 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 7282971 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.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E7EBFBF90C for ; Tue, 29 Sep 2015 07:28:03 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 18DE720668 for ; Tue, 29 Sep 2015 07:28:03 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 14FF120658 for ; Tue, 29 Sep 2015 07:28:02 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 69BE4720C3; Tue, 29 Sep 2015 00:28:00 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wi0-f180.google.com (mail-wi0-f180.google.com [209.85.212.180]) by gabe.freedesktop.org (Postfix) with ESMTPS id C956C720C5 for ; Tue, 29 Sep 2015 00:27:58 -0700 (PDT) Received: by wicfx3 with SMTP id fx3so136453834wic.1 for ; Tue, 29 Sep 2015 00:27:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id; bh=2ZqRggwOSBRwXC/RdqSWoam+vx7gTxNNyXznr3wFcH4=; b=SClyfdmnINeCSnp1HJGWBr/k55/PEaJq56oISbKFDCmvqETWOhylsaSMc1F/aEFlgz lEO5t3/X8UpOfqEuo4jNcCYcauGubtGDV9mlp0PIJlCpaiMhtBaqfV0F7rNDXEAlwJ9Z b+4L1YsbWOynf7uLUFG6HW8GpmSopgPO1XRFI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=2ZqRggwOSBRwXC/RdqSWoam+vx7gTxNNyXznr3wFcH4=; b=A16kahYu8PMXL94II2zvyGxPEeTc7YE3Ro3Y1VnxA7lC5/C5UinYaUMF7a0e/ESeS1 M4E2H1dfyZPohUBGTLaIzNQVO571kWsv/67hH9mDwTKZuQareBVkePkq60dHkMiAXjyX zHd+mk7+MBv5cJ561OKmpvq6Dv/UGfMW3YbK0H83dDSkiRWn8W/K3NFxozxzaoMqohGQ 9om0hMqmCfmg6ckaGFlUBkO2uwF5QIbQ7DO7XSZV2HkoZAh7OBd593ZK4oV7avYNNydw F9T26OZ+WED7n7PBuDEf1fZZ/NmD/ya3aJGe8fc5aYXD5Ep2VUEhGDWBPnRfjosSkkbn L9Sw== X-Gm-Message-State: ALoCoQkjG29y9vkdbKooif0IoIuQmpwuQtCWJrGmR+3pjfx9eui+KWVgf9dyFjYUblBdE3w/EEyK X-Received: by 10.194.9.97 with SMTP id y1mr31395483wja.84.1443511677195; Tue, 29 Sep 2015 00:27:57 -0700 (PDT) Received: from phenom.ffwll.local (212-51-149-109.fiber7.init7.net. [212.51.149.109]) by smtp.gmail.com with ESMTPSA id mx19sm22284569wic.0.2015.09.29.00.27.56 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 29 Sep 2015 00:27:56 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH] drm/radeon: Use rdev->gem.mutex to protect hyperz/cmask owners Date: Tue, 29 Sep 2015 09:30:49 +0200 Message-Id: <1443511849-10604-1-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.5.1 Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 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=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, 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 This removes the last depency of radeon for dev->struct_mutex! Also the locking scheme for hyperz/cmask owners seems a bit unsound, there's no protection in the preclose handler (and that never did hold dev->struct_mutex while being called). So grab the same lock there, too. There's also all the checks in the cs checker, but since the overall design seems to never stall for the previous owner I figured it's ok if I leave this racy. It was racy even before I touched it after all too. Signed-off-by: Daniel Vetter --- drivers/gpu/drm/radeon/radeon_kms.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 4e2780f8c417..6e92fee22bda 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c @@ -181,7 +181,9 @@ static void radeon_set_filp_rights(struct drm_device *dev, struct drm_file *applier, uint32_t *value) { - mutex_lock(&dev->struct_mutex); + struct radeon_device *rdev = dev->dev_private; + + mutex_lock(&rdev->gem.mutex); if (*value == 1) { /* wants rights */ if (!*owner) @@ -192,7 +194,7 @@ static void radeon_set_filp_rights(struct drm_device *dev, *owner = NULL; } *value = *owner == applier ? 1 : 0; - mutex_unlock(&dev->struct_mutex); + mutex_unlock(&rdev->gem.mutex); } /* @@ -724,10 +726,14 @@ void radeon_driver_preclose_kms(struct drm_device *dev, struct drm_file *file_priv) { struct radeon_device *rdev = dev->dev_private; + + mutex_lock(&rdev->gem.mutex); if (rdev->hyperz_filp == file_priv) rdev->hyperz_filp = NULL; if (rdev->cmask_filp == file_priv) rdev->cmask_filp = NULL; + mutex_unlock(&rdev->gem.mutex); + radeon_uvd_free_handles(rdev, file_priv); radeon_vce_free_handles(rdev, file_priv); }