From patchwork Tue Sep 29 07:37:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 7282991 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id CDD169F32B for ; Tue, 29 Sep 2015 07:34:23 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0856620693 for ; Tue, 29 Sep 2015 07:34:23 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 20CFA20668 for ; Tue, 29 Sep 2015 07:34:22 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4F0F5720CE; Tue, 29 Sep 2015 00:34:21 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6C7C4720CD for ; Tue, 29 Sep 2015 00:34:19 -0700 (PDT) Received: by wicfx3 with SMTP id fx3so136679838wic.1 for ; Tue, 29 Sep 2015 00:34:18 -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=En1XgosF76bIKn6ToZb8PUnBVJgvkSpGRvtfrX/qHjQ=; b=TCu0O2AHclbHvtBm9V/j9HbWg1vqoI74NfN+i4dZUt3OkIDYDBJpQ+L4AJ6hus+cHW 9+23kh0QWbSPElHhevTcYBCLPrXdk8HQr2V2gxr9chR9zKlrETSzvKPQs/CfwoSWM51n wq7TOGz3yJhColUUR8v+StPVd+CocFbQu8ACI= 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=En1XgosF76bIKn6ToZb8PUnBVJgvkSpGRvtfrX/qHjQ=; b=OwWWJT+H1S80qV7VsjhBjtKHI22VgXXru3/GaoixsPHBZu3uPluV+/Se+/lWoKvCxv iafMez0lnV5w/3XfkRCBZxg7aQA/NIn8ERt1i1PZuQCpTcLWSEoCUZYIVUlFZhrNBnft eKMdJXGjiDYw3wHOkTuS71apO3muYk0gf609yNykUc6Cc7YmBpqepSB4Ra+u27ONU67E kBa7HkzmGgbixi4h8M32WCQ9+gmkwc0fIqszxNzMdYLX9cyy/xaUE8g+eW+88TC7CSQr 8+Q0ZrUm3iUcCq2XXuGjnm+/+g0ZNvVEPvzpmmG2MCU51mQJQcDZw3TC+VXjOhC3gtoQ xTGw== X-Gm-Message-State: ALoCoQmw92kbRzeOa2jglwFWL5TCMYjzhD3rBbeKFJ6lkJXcznybw6G0+p2uqu0Pn8ZEIeCN9CUg X-Received: by 10.194.184.166 with SMTP id ev6mr28871950wjc.125.1443512058127; Tue, 29 Sep 2015 00:34:18 -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 l1sm22346540wjx.13.2015.09.29.00.34.17 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 29 Sep 2015 00:34:17 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH] drm: Fix locking for sysfs dpms file Date: Tue, 29 Sep 2015 09:37:08 +0200 Message-Id: <1443512228-10764-1-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.5.1 Cc: Daniel Vetter , Intel Graphics Development , stable@vger.kernel.org, Jens Axboe , 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 With atomic drivers we need to make sure that (at least in general) property reads hold the right locks. But the legacy dpms property is special and can be read locklessly. Since userspace loves to just randomly look at that all the time (like with "status") do that. To make it clear that we play tricks use the READ_ONCE compiler barrier (and also for paranoia). Note that there's not really anything bad going on since even with the new atomic paths we eventually end up not chasing any pointers (and hence possibly freed memory and other fun stuff). The locking WARNING has been added in commit 88a48e297b3a3bac6022c03babfb038f1a886cea Author: Rob Clark Date: Thu Dec 18 16:01:50 2014 -0500 drm: add atomic properties but since drivers are converting not everyone will have seen this from the start. Jens reported this and submitted a patch to just grab the mode_config.connection_mutex, but we can do a bit better. Reported-by: Jens Axboe Cc: Jens Axboe Cc: Rob Clark Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter --- drivers/gpu/drm/drm_sysfs.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index f08873f6489c..63adcd79226f 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c @@ -231,17 +231,13 @@ static ssize_t dpms_show(struct device *device, { struct drm_connector *connector = to_drm_connector(device); struct drm_device *dev = connector->dev; - uint64_t dpms_status; + int dpms; int ret; - ret = drm_object_property_get_value(&connector->base, - dev->mode_config.dpms_property, - &dpms_status); - if (ret) - return 0; + dpms = READ_ONCE(connector->dpms); return snprintf(buf, PAGE_SIZE, "%s\n", - drm_get_dpms_name((int)dpms_status)); + drm_get_dpms_name(dpms)); } static ssize_t enabled_show(struct device *device,